#ifndef _LINUX_VIRTIO_BLK_H #define _LINUX_VIRTIO_BLK_H #include /* The ID for virtio_block */ #define VIRTIO_ID_BLOCK 2 /* Feature bits */ #define VIRTIO_CONFIG_BLK_F 0x40 #define VIRTIO_BLK_F_BARRIER 1 /* Does host support barriers? */ /* The capacity (in 512-byte sectors). */ #define VIRTIO_CONFIG_BLK_F_CAPACITY 0x41 /* The maximum segment size. */ #define VIRTIO_CONFIG_BLK_F_SIZE_MAX 0x42 /* The maximum number of segments. */ #define VIRTIO_CONFIG_BLK_F_SEG_MAX 0x43 /* These two define direction. */ #define VIRTIO_BLK_T_IN 0 #define VIRTIO_BLK_T_OUT 1 /* This bit says it's a scsi command, not an actual read or write. */ #define VIRTIO_BLK_T_SCSI_CMD 2 /* Barrier before this op. */ #define VIRTIO_BLK_T_BARRIER 0x80000000 /* This is the first element of the read scatter-gather list. */ struct virtio_blk_outhdr { /* VIRTIO_BLK_T* */ __u32 type; /* io priority. */ __u32 ioprio; /* Sector (ie. 512 byte offset) */ __u64 sector; /* Where to put reply. */ __u64 id; }; #define VIRTIO_BLK_S_OK 0 #define VIRTIO_BLK_S_IOERR 1 #define VIRTIO_BLK_S_UNSUPP 2 /* This is the first element of the write scatter-gather list */ struct virtio_blk_inhdr { unsigned char status; }; #endif /* _LINUX_VIRTIO_BLK_H */