Fixup ioctls
[binject.git] / binject.h
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 {
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 */
19 };
20
21 struct b_ioctl_cmd {
22         int fd;
23         int minor;
24 };
25
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
30 enum {
31         B_TYPE_READ             = 0,
32         B_TYPE_WRITE,
33         B_TYPE_DISCARD,
34         B_TYPE_READVOID,
35         B_TYPE_WRITEZERO,
36         B_TYPE_READBARRIER,
37         B_TYPE_WRITEBARRIER,
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