Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/s390/include/asm/chpid.h
10819 views
1
/*
2
* drivers/s390/cio/chpid.h
3
*
4
* Copyright IBM Corp. 2007
5
* Author(s): Peter Oberparleiter <[email protected]>
6
*/
7
8
#ifndef _ASM_S390_CHPID_H
9
#define _ASM_S390_CHPID_H _ASM_S390_CHPID_H
10
11
#include <linux/string.h>
12
#include <linux/types.h>
13
14
#define __MAX_CHPID 255
15
16
struct chp_id {
17
u8 reserved1;
18
u8 cssid;
19
u8 reserved2;
20
u8 id;
21
} __attribute__((packed));
22
23
#ifdef __KERNEL__
24
#include <asm/cio.h>
25
26
static inline void chp_id_init(struct chp_id *chpid)
27
{
28
memset(chpid, 0, sizeof(struct chp_id));
29
}
30
31
static inline int chp_id_is_equal(struct chp_id *a, struct chp_id *b)
32
{
33
return (a->id == b->id) && (a->cssid == b->cssid);
34
}
35
36
static inline void chp_id_next(struct chp_id *chpid)
37
{
38
if (chpid->id < __MAX_CHPID)
39
chpid->id++;
40
else {
41
chpid->id = 0;
42
chpid->cssid++;
43
}
44
}
45
46
static inline int chp_id_is_valid(struct chp_id *chpid)
47
{
48
return (chpid->cssid <= __MAX_CSSID);
49
}
50
51
52
#define chp_id_for_each(c) \
53
for (chp_id_init(c); chp_id_is_valid(c); chp_id_next(c))
54
#endif /* __KERNEL */
55
56
#endif /* _ASM_S390_CHPID_H */
57
58