xref: /utopia/UTPA2-700.0.x/projects/tools/lint/mips-linux-gnu_include/linux/virtio_blk.h (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi #ifndef _LINUX_VIRTIO_BLK_H
2*53ee8cc1Swenshuai.xi #define _LINUX_VIRTIO_BLK_H
3*53ee8cc1Swenshuai.xi #include <linux/virtio_config.h>
4*53ee8cc1Swenshuai.xi 
5*53ee8cc1Swenshuai.xi /* The ID for virtio_block */
6*53ee8cc1Swenshuai.xi #define VIRTIO_ID_BLOCK	2
7*53ee8cc1Swenshuai.xi 
8*53ee8cc1Swenshuai.xi /* Feature bits */
9*53ee8cc1Swenshuai.xi #define VIRTIO_BLK_F_BARRIER	0	/* Does host support barriers? */
10*53ee8cc1Swenshuai.xi #define VIRTIO_BLK_F_SIZE_MAX	1	/* Indicates maximum segment size */
11*53ee8cc1Swenshuai.xi #define VIRTIO_BLK_F_SEG_MAX	2	/* Indicates maximum # of segments */
12*53ee8cc1Swenshuai.xi #define VIRTIO_BLK_F_GEOMETRY	4	/* Legacy geometry available  */
13*53ee8cc1Swenshuai.xi #define VIRTIO_BLK_F_RO		5	/* Disk is read-only */
14*53ee8cc1Swenshuai.xi 
15*53ee8cc1Swenshuai.xi struct virtio_blk_config
16*53ee8cc1Swenshuai.xi {
17*53ee8cc1Swenshuai.xi 	/* The capacity (in 512-byte sectors). */
18*53ee8cc1Swenshuai.xi 	__u64 capacity;
19*53ee8cc1Swenshuai.xi 	/* The maximum segment size (if VIRTIO_BLK_F_SIZE_MAX) */
20*53ee8cc1Swenshuai.xi 	__u32 size_max;
21*53ee8cc1Swenshuai.xi 	/* The maximum number of segments (if VIRTIO_BLK_F_SEG_MAX) */
22*53ee8cc1Swenshuai.xi 	__u32 seg_max;
23*53ee8cc1Swenshuai.xi 	/* geometry the device (if VIRTIO_BLK_F_GEOMETRY) */
24*53ee8cc1Swenshuai.xi 	struct virtio_blk_geometry {
25*53ee8cc1Swenshuai.xi 		__u16 cylinders;
26*53ee8cc1Swenshuai.xi 		__u8 heads;
27*53ee8cc1Swenshuai.xi 		__u8 sectors;
28*53ee8cc1Swenshuai.xi 	} geometry;
29*53ee8cc1Swenshuai.xi } __attribute__((packed));
30*53ee8cc1Swenshuai.xi 
31*53ee8cc1Swenshuai.xi /* These two define direction. */
32*53ee8cc1Swenshuai.xi #define VIRTIO_BLK_T_IN		0
33*53ee8cc1Swenshuai.xi #define VIRTIO_BLK_T_OUT	1
34*53ee8cc1Swenshuai.xi 
35*53ee8cc1Swenshuai.xi /* This bit says it's a scsi command, not an actual read or write. */
36*53ee8cc1Swenshuai.xi #define VIRTIO_BLK_T_SCSI_CMD	2
37*53ee8cc1Swenshuai.xi 
38*53ee8cc1Swenshuai.xi /* Barrier before this op. */
39*53ee8cc1Swenshuai.xi #define VIRTIO_BLK_T_BARRIER	0x80000000
40*53ee8cc1Swenshuai.xi 
41*53ee8cc1Swenshuai.xi /* This is the first element of the read scatter-gather list. */
42*53ee8cc1Swenshuai.xi struct virtio_blk_outhdr
43*53ee8cc1Swenshuai.xi {
44*53ee8cc1Swenshuai.xi 	/* VIRTIO_BLK_T* */
45*53ee8cc1Swenshuai.xi 	__u32 type;
46*53ee8cc1Swenshuai.xi 	/* io priority. */
47*53ee8cc1Swenshuai.xi 	__u32 ioprio;
48*53ee8cc1Swenshuai.xi 	/* Sector (ie. 512 byte offset) */
49*53ee8cc1Swenshuai.xi 	__u64 sector;
50*53ee8cc1Swenshuai.xi };
51*53ee8cc1Swenshuai.xi 
52*53ee8cc1Swenshuai.xi /* And this is the final byte of the write scatter-gather list. */
53*53ee8cc1Swenshuai.xi #define VIRTIO_BLK_S_OK		0
54*53ee8cc1Swenshuai.xi #define VIRTIO_BLK_S_IOERR	1
55*53ee8cc1Swenshuai.xi #define VIRTIO_BLK_S_UNSUPP	2
56*53ee8cc1Swenshuai.xi #endif /* _LINUX_VIRTIO_BLK_H */
57