1 #ifndef _VIRTIO_BLK_H 2 #define _VIRTIO_BLK_H 3 4 struct virtio_blk_config 5 { 6 u64 capacity; 7 u32 size_max; 8 u32 seg_max; 9 u16 cylinders; 10 u8 heads; 11 u8 sectors; 12 u32 blk_size; 13 u8 physical_block_exp; 14 u8 alignment_offset; 15 u16 min_io_size; 16 u32 opt_io_size; 17 } __attribute__((packed)); 18 19 #define VIRTIO_BLK_F_BLK_SIZE 6 20 21 /* These two define direction. */ 22 #define VIRTIO_BLK_T_IN 0 23 #define VIRTIO_BLK_T_OUT 1 24 25 /* This is the first element of the read scatter-gather list. */ 26 struct virtio_blk_outhdr { 27 /* VIRTIO_BLK_T* */ 28 u32 type; 29 /* io priority. */ 30 u32 ioprio; 31 /* Sector (ie. 512 byte offset) */ 32 u64 sector; 33 }; 34 35 #define VIRTIO_BLK_S_OK 0 36 #define VIRTIO_BLK_S_IOERR 1 37 #define VIRTIO_BLK_S_UNSUPP 2 38 39 struct disk_op_s; 40 int virtio_blk_process_op(struct disk_op_s *op); 41 void virtio_blk_setup(void); 42 void init_virtio_blk_mmio(void *mmio); 43 44 #endif /* _VIRTIO_BLK_H */ 45