TianoCore EDK2 master
Loading...
Searching...
No Matches
VirtioBlk.h
Go to the documentation of this file.
1
12#ifndef _VIRTIO_BLK_H_
13#define _VIRTIO_BLK_H_
14
16
17//
18// virtio-0.9.5, Appendix D: Block Device
19//
20#pragma pack(1)
21typedef struct {
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
27
28typedef struct {
29 UINT64 Capacity;
30 UINT32 SizeMax;
31 UINT32 SegMax;
32 UINT16 Cylinders;
33 UINT8 Heads;
34 UINT8 Sectors;
35 UINT32 BlkSize;
36 VIRTIO_BLK_TOPOLOGY Topology;
38#pragma pack()
39
40#define OFFSET_OF_VBLK(Field) OFFSET_OF (VIRTIO_BLK_CONFIG, Field)
41#define SIZE_OF_VBLK(Field) (sizeof ((VIRTIO_BLK_CONFIG *) 0)->Field)
42
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
56
57//
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.
61//
62#pragma pack(1)
63typedef struct {
64 UINT32 Type;
65 UINT32 IoPrio;
66 UINT64 Sector;
68#pragma pack()
69
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
77
78#define VIRTIO_BLK_S_OK 0x00
79#define VIRTIO_BLK_S_IOERR 0x01
80#define VIRTIO_BLK_S_UNSUPP 0x02
81
82#endif // _VIRTIO_BLK_H_