Commit | Line | Data |
---|---|---|
4f28f523 JA |
1 | #ifndef BINJECT_H |
2 | #define BINJECT_H | |
3 | ||
4 | #define BINJECT_MAGIC 0x89 | |
5 | #define BINJECT_VER 0x01 | |
6 | #define BINJECT_MAGIC_SHIFT 8 | |
7 | #define BINJECT_VER_MASK ((1 << BINJECT_MAGIC_SHIFT) - 1) | |
8 | ||
9 | struct b_user_cmd { | |
9601c17f JA |
10 | __u16 magic; /* INPUT */ |
11 | __u16 type; /* INPUT */ | |
12 | __u32 error; /* OUTPUT */ | |
13 | __u32 flags; /* INPUT */ | |
14 | __u32 len; /* INPUT */ | |
15 | __u64 offset; /* INPUT */ | |
16 | __u64 buf; /* INPUT */ | |
17 | __u64 usr_ptr; /* PASSED THROUGH */ | |
18 | __u64 nsec; /* OUTPUT */ | |
4f28f523 JA |
19 | }; |
20 | ||
21 | struct b_ioctl_cmd { | |
22 | int fd; | |
23 | int minor; | |
24 | }; | |
25 | ||
e0658c5c JA |
26 | #define BINJECT_IOCTL_CHR 'J' |
27 | #define B_IOCTL_ADD _IOWR(BINJECT_IOCTL_CHR, 1, struct b_ioctl_cmd) | |
28 | #define B_IOCTL_DEL _IOWR(BINJECT_IOCTL_CHR, 2, struct b_ioctl_cmd) | |
29 | ||
4f28f523 JA |
30 | enum { |
31 | B_TYPE_READ = 0, | |
32 | B_TYPE_WRITE, | |
33 | B_TYPE_DISCARD, | |
34 | B_TYPE_READVOID, | |
35 | B_TYPE_WRITEZERO, | |
41c1852f JA |
36 | B_TYPE_READBARRIER, |
37 | B_TYPE_WRITEBARRIER, | |
4f28f523 JA |
38 | B_TYPE_NR |
39 | }; | |
40 | ||
41 | enum { | |
42 | __B_FLAG_SYNC = 0, | |
43 | __B_FLAG_UNPLUG, | |
44 | __B_FLAG_NOIDLE, | |
45 | __B_FLAG_BARRIER, | |
46 | __B_FLAG_META, | |
47 | __B_FLAG_RAHEAD, | |
48 | __B_FLAG_FAILFAST_DEV, | |
49 | __B_FLAG_FAILFAST_TRANSPORT, | |
50 | __B_FLAG_FAILFAST_DRIVER, | |
51 | __B_FLAG_NR, | |
52 | ||
53 | B_FLAG_SYNC = 1 << __B_FLAG_SYNC, | |
54 | B_FLAG_UNPLUG = 1 << __B_FLAG_UNPLUG, | |
55 | B_FLAG_NOIDLE = 1 << __B_FLAG_NOIDLE, | |
56 | B_FLAG_BARRIER = 1 << __B_FLAG_BARRIER, | |
57 | B_FLAG_META = 1 << __B_FLAG_META, | |
58 | B_FLAG_RAHEAD = 1 << __B_FLAG_RAHEAD, | |
59 | B_FLAG_FAILFAST_DEV = 1 << __B_FLAG_FAILFAST_DEV, | |
60 | B_FLAG_FAILFAST_TRANSPORT = 1 << __B_FLAG_FAILFAST_TRANSPORT, | |
61 | B_FLAG_FAILFAST_DRIVER = 1 << __B_FLAG_FAILFAST_DRIVER, | |
62 | }; | |
63 | ||
64 | static inline void binject_buc_set_magic(struct b_user_cmd *buc) | |
65 | { | |
66 | buc->magic = (BINJECT_MAGIC << BINJECT_MAGIC_SHIFT) | BINJECT_VER; | |
67 | } | |
68 | ||
69 | static inline int binject_buc_check_magic(struct b_user_cmd *buc) | |
70 | { | |
71 | return ((buc->magic & BINJECT_VER_MASK) == BINJECT_VER) && | |
72 | ((buc->magic >> BINJECT_MAGIC_SHIFT) == BINJECT_MAGIC); | |
73 | } | |
74 | ||
75 | #endif |