// virtio-0.9.5, Appendix D: Block Device\r
//\r
#pragma pack(1)\r
+typedef struct {\r
+ UINT8 PhysicalBlockExp; // # of logical blocks per physical block (log2)\r
+ UINT8 AlignmentOffset; // offset of first aligned logical block\r
+ UINT16 MinIoSize; // suggested minimum I/O size in blocks\r
+ UINT32 OptIoSize; // optimal (suggested maximum) I/O size in blocks\r
+} VIRTIO_BLK_TOPOLOGY;\r
+\r
typedef struct {\r
UINT64 Capacity;\r
UINT32 SizeMax;\r
UINT8 Heads;\r
UINT8 Sectors;\r
UINT32 BlkSize;\r
+ VIRTIO_BLK_TOPOLOGY Topology;\r
} VIRTIO_BLK_CONFIG;\r
#pragma pack()\r
\r
#define VIRTIO_BLK_F_BLK_SIZE BIT6 // treated as "logical block size" in\r
// practice; actual host side\r
// implementation negotiates "optimal"\r
- // block size separately\r
+ // block size separately, via\r
+ // VIRTIO_BLK_F_TOPOLOGY\r
#define VIRTIO_BLK_F_SCSI BIT7\r
#define VIRTIO_BLK_F_FLUSH BIT9 // identical to "write cache enabled"\r
+#define VIRTIO_BLK_F_TOPOLOGY BIT10 // information on optimal I/O alignment\r
\r
//\r
// We keep the status byte separate from the rest of the virtio-blk request\r