| #ifndef _VIRTIO_BLK_H |
| #define _VIRTIO_BLK_H |
| |
| struct virtio_blk_config |
| { |
| u64 capacity; |
| u32 size_max; |
| u32 seg_max; |
| u16 cylinders; |
| u8 heads; |
| u8 sectors; |
| u32 blk_size; |
| u8 physical_block_exp; |
| u8 alignment_offset; |
| u16 min_io_size; |
| u32 opt_io_size; |
| } __attribute__((packed)); |
| |
| /* Feature bits */ |
| #define VIRTIO_BLK_F_SIZE_MAX 1 /* Maximum size of any single segment */ |
| #define VIRTIO_BLK_F_SEG_MAX 2 /* Maximum number of segments in a request */ |
| #define VIRTIO_BLK_F_BLK_SIZE 6 |
| |
| /* These two define direction. */ |
| #define VIRTIO_BLK_T_IN 0 |
| #define VIRTIO_BLK_T_OUT 1 |
| |
| /* 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; |
| }; |
| |
| #define VIRTIO_BLK_S_OK 0 |
| #define VIRTIO_BLK_S_IOERR 1 |
| #define VIRTIO_BLK_S_UNSUPP 2 |
| |
| struct disk_op_s; |
| int virtio_blk_process_op(struct disk_op_s *op); |
| void virtio_blk_setup(void); |
| void init_virtio_blk_mmio(void *mmio); |
| |
| #endif /* _VIRTIO_BLK_H */ |