3 Virtio Block Device specific type and macro definitions corresponding to the
4 virtio-0.9.5 specification.
6 Copyright (C) 2012, Red Hat, Inc.
8 SPDX-License-Identifier: BSD-2-Clause-Patent
12 #ifndef _VIRTIO_BLK_H_
13 #define _VIRTIO_BLK_H_
15 #include <IndustryStandard/Virtio.h>
18 // virtio-0.9.5, Appendix D: Block Device
22 UINT8 PhysicalBlockExp
; // # of logical blocks per physical block (log2)
23 UINT8 AlignmentOffset
; // offset of first aligned logical block
24 UINT16 MinIoSize
; // suggested minimum I/O size in blocks
25 UINT32 OptIoSize
; // optimal (suggested maximum) I/O size in blocks
26 } VIRTIO_BLK_TOPOLOGY
;
36 VIRTIO_BLK_TOPOLOGY Topology
;
40 #define OFFSET_OF_VBLK(Field) OFFSET_OF (VIRTIO_BLK_CONFIG, Field)
41 #define SIZE_OF_VBLK(Field) (sizeof ((VIRTIO_BLK_CONFIG *) 0)->Field)
43 #define VIRTIO_BLK_F_BARRIER BIT0
44 #define VIRTIO_BLK_F_SIZE_MAX BIT1
45 #define VIRTIO_BLK_F_SEG_MAX BIT2
46 #define VIRTIO_BLK_F_GEOMETRY BIT4
47 #define VIRTIO_BLK_F_RO BIT5
48 #define VIRTIO_BLK_F_BLK_SIZE BIT6 // treated as "logical block size" in
49 // practice; actual host side
50 // implementation negotiates "optimal"
51 // block size separately, via
52 // VIRTIO_BLK_F_TOPOLOGY
53 #define VIRTIO_BLK_F_SCSI BIT7
54 #define VIRTIO_BLK_F_FLUSH BIT9 // identical to "write cache enabled"
55 #define VIRTIO_BLK_F_TOPOLOGY BIT10 // information on optimal I/O alignment
58 // We keep the status byte separate from the rest of the virtio-blk request
59 // header. See description of historical scattering at the end of Appendix D:
60 // we're going to put the status byte in a separate VRING_DESC.
70 #define VIRTIO_BLK_T_IN 0x00000000
71 #define VIRTIO_BLK_T_OUT 0x00000001
72 #define VIRTIO_BLK_T_SCSI_CMD 0x00000002
73 #define VIRTIO_BLK_T_SCSI_CMD_OUT 0x00000003
74 #define VIRTIO_BLK_T_FLUSH 0x00000004
75 #define VIRTIO_BLK_T_FLUSH_OUT 0x00000005
76 #define VIRTIO_BLK_T_BARRIER BIT31
78 #define VIRTIO_BLK_S_OK 0x00
79 #define VIRTIO_BLK_S_IOERR 0x01
80 #define VIRTIO_BLK_S_UNSUPP 0x02
82 #endif // _VIRTIO_BLK_H_