VirtualBox

source: vbox/trunk/src/VBox/Devices/EFI/FirmwareNew/OvmfPkg/Include/IndustryStandard/VirtioBlk.h@ 99396

最後變更 在這個檔案從99396是 80721,由 vboxsync 提交於 6 年 前

Devices/EFI/FirmwareNew: Start upgrade process to edk2-stable201908 (compiles on Windows and works to some extent), bugref:4643

  • 屬性 svn:eol-style 設為 native
檔案大小: 2.6 KB
 
1/** @file
2
3 Virtio Block Device specific type and macro definitions corresponding to the
4 virtio-0.9.5 specification.
5
6 Copyright (C) 2012, Red Hat, Inc.
7
8 SPDX-License-Identifier: BSD-2-Clause-Patent
9
10**/
11
12#ifndef _VIRTIO_BLK_H_
13#define _VIRTIO_BLK_H_
14
15#include <IndustryStandard/Virtio.h>
16
17
18//
19// virtio-0.9.5, Appendix D: Block Device
20//
21#pragma pack(1)
22typedef struct {
23 UINT8 PhysicalBlockExp; // # of logical blocks per physical block (log2)
24 UINT8 AlignmentOffset; // offset of first aligned logical block
25 UINT16 MinIoSize; // suggested minimum I/O size in blocks
26 UINT32 OptIoSize; // optimal (suggested maximum) I/O size in blocks
27} VIRTIO_BLK_TOPOLOGY;
28
29typedef struct {
30 UINT64 Capacity;
31 UINT32 SizeMax;
32 UINT32 SegMax;
33 UINT16 Cylinders;
34 UINT8 Heads;
35 UINT8 Sectors;
36 UINT32 BlkSize;
37 VIRTIO_BLK_TOPOLOGY Topology;
38} VIRTIO_BLK_CONFIG;
39#pragma pack()
40
41#define OFFSET_OF_VBLK(Field) OFFSET_OF (VIRTIO_BLK_CONFIG, Field)
42#define SIZE_OF_VBLK(Field) (sizeof ((VIRTIO_BLK_CONFIG *) 0)->Field)
43
44#define VIRTIO_BLK_F_BARRIER BIT0
45#define VIRTIO_BLK_F_SIZE_MAX BIT1
46#define VIRTIO_BLK_F_SEG_MAX BIT2
47#define VIRTIO_BLK_F_GEOMETRY BIT4
48#define VIRTIO_BLK_F_RO BIT5
49#define VIRTIO_BLK_F_BLK_SIZE BIT6 // treated as "logical block size" in
50 // practice; actual host side
51 // implementation negotiates "optimal"
52 // block size separately, via
53 // VIRTIO_BLK_F_TOPOLOGY
54#define VIRTIO_BLK_F_SCSI BIT7
55#define VIRTIO_BLK_F_FLUSH BIT9 // identical to "write cache enabled"
56#define VIRTIO_BLK_F_TOPOLOGY BIT10 // information on optimal I/O alignment
57
58//
59// We keep the status byte separate from the rest of the virtio-blk request
60// header. See description of historical scattering at the end of Appendix D:
61// we're going to put the status byte in a separate VRING_DESC.
62//
63#pragma pack(1)
64typedef struct {
65 UINT32 Type;
66 UINT32 IoPrio;
67 UINT64 Sector;
68} VIRTIO_BLK_REQ;
69#pragma pack()
70
71#define VIRTIO_BLK_T_IN 0x00000000
72#define VIRTIO_BLK_T_OUT 0x00000001
73#define VIRTIO_BLK_T_SCSI_CMD 0x00000002
74#define VIRTIO_BLK_T_SCSI_CMD_OUT 0x00000003
75#define VIRTIO_BLK_T_FLUSH 0x00000004
76#define VIRTIO_BLK_T_FLUSH_OUT 0x00000005
77#define VIRTIO_BLK_T_BARRIER BIT31
78
79#define VIRTIO_BLK_S_OK 0x00
80#define VIRTIO_BLK_S_IOERR 0x01
81#define VIRTIO_BLK_S_UNSUPP 0x02
82
83#endif // _VIRTIO_BLK_H_
注意: 瀏覽 TracBrowser 來幫助您使用儲存庫瀏覽器

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette