add get/put support in xsegbd_dev
[archipelago] / xseg / peers / kernel / xsegbd.h
1 #ifndef _XSEGBD_REAR
2 #define _XSEGBD_REAR
3
4 #define XSEGBD_NAME "xsegbd"
5
6 #define XSEGBD_SEGMENT_NAMELEN 32
7 #define XSEGBD_TARGET_NAMELEN 127
8
9 #include <linux/kernel.h>
10 #include <linux/types.h>
11 #include <linux/wait.h>
12 #include <xseg/xseg.h>
13 #include <xtypes/xq.h>
14
15 struct xsegbd_device;
16
17 struct xsegbd_pending {
18         struct request *request;
19         struct completion *comp;
20         struct xsegbd_device *dev;
21 };
22
23 struct xsegbd {
24         char name[XSEGBD_SEGMENT_NAMELEN];
25         struct xseg_config config;
26         struct xseg *xseg;
27 };
28
29 struct xsegbd_device {
30         struct xseg *xseg;
31         spinlock_t rqlock;
32         struct request_queue *blk_queue;
33         struct gendisk *gd;
34         int id;
35         int major;
36         sector_t sectors;
37         uint64_t segsize;
38         xport src_portno, dst_portno;
39         uint32_t  nr_requests;
40         struct xq blk_queue_pending;
41         struct xsegbd *xsegbd;
42         struct xsegbd_pending *blk_req_pending;
43         struct device dev;
44         struct list_head node;
45         char target[XSEGBD_TARGET_NAMELEN + 1];
46         uint32_t targetlen;
47         atomic_t usercount;
48         wait_queue_head_t wq;
49 };
50
51 #endif