From 6b28fe9ee8957c98b4c70c83560734196f43f92f Mon Sep 17 00:00:00 2001 From: jljusten Date: Fri, 12 Oct 2012 18:53:36 +0000 Subject: OvmfPkg: Include/IndustryStandard: extract VirtioBlk.h from Virtio.h Separate virtio-blk related macro and type definitions from generic virtio related ones. Adapt the virtio-blk driver since it needs the latter too. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Laszlo Ersek Reviewed-by: Jordan Justen git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13841 6f19259b-4bc3-4df7-8a09-765794883524 --- OvmfPkg/Include/IndustryStandard/Virtio.h | 60 +-------------------- OvmfPkg/Include/IndustryStandard/VirtioBlk.h | 80 ++++++++++++++++++++++++++++ OvmfPkg/VirtioBlkDxe/VirtioBlk.c | 1 + 3 files changed, 83 insertions(+), 58 deletions(-) create mode 100644 OvmfPkg/Include/IndustryStandard/VirtioBlk.h (limited to 'OvmfPkg') diff --git a/OvmfPkg/Include/IndustryStandard/Virtio.h b/OvmfPkg/Include/IndustryStandard/Virtio.h index a330738999..05c658fa54 100644 --- a/OvmfPkg/Include/IndustryStandard/Virtio.h +++ b/OvmfPkg/Include/IndustryStandard/Virtio.h @@ -1,6 +1,7 @@ /** @file - Type and macro definitions corresponding to the virtio-0.9.5 specification. + Generic type and macro definitions corresponding to the virtio-0.9.5 + specification. Copyright (C) 2012, Red Hat, Inc. @@ -108,25 +109,8 @@ typedef struct { UINT8 VhdrDeviceStatus; UINT8 VhdrISR; } VIRTIO_HDR; - -// -// virtio-0.9.5, Appendix D: Block Device -// -typedef struct { - VIRTIO_HDR Generic; - UINT64 VhdrCapacity; - UINT32 VhdrSizeMax; - UINT32 VhdrSegMax; - UINT16 VhdrCylinders; - UINT8 VhdrHeads; - UINT8 VhdrSectors; - UINT32 VhdrBlkSize; -} VBLK_HDR; #pragma pack() -#define OFFSET_OF_VBLK(Field) OFFSET_OF (VBLK_HDR, Field) -#define SIZE_OF_VBLK(Field) (sizeof ((VBLK_HDR *) 0)->Field) - // // virtio-0.9.5, 2.2.2.1 Device Status @@ -143,45 +127,5 @@ typedef struct { #define VIRTIO_F_RING_INDIRECT_DESC BIT28 #define VIRTIO_F_RING_EVENT_IDX BIT29 -// -// virtio-0.9.5, Appendix D: Block Device -// -#define VIRTIO_BLK_F_BARRIER BIT0 -#define VIRTIO_BLK_F_SIZE_MAX BIT1 -#define VIRTIO_BLK_F_SEG_MAX BIT2 -#define VIRTIO_BLK_F_GEOMETRY BIT4 -#define VIRTIO_BLK_F_RO BIT5 -#define VIRTIO_BLK_F_BLK_SIZE BIT6 // treated as "logical block size" in - // practice; actual host side implementation - // negotiates "optimal" block size - // separately -#define VIRTIO_BLK_F_SCSI BIT7 -#define VIRTIO_BLK_F_FLUSH BIT9 // identical to "write cache enabled" - - -// -// We keep the status byte separate from the rest of the virtio-blk request -// header. See description of historical scattering at the end of Appendix D: -// we're going to put the status byte in a separate VRING_DESC. -// -#pragma pack(1) -typedef struct { - UINT32 Type; - UINT32 IoPrio; - UINT64 Sector; -} VIRTIO_BLK_REQ; -#pragma pack() - -#define VIRTIO_BLK_T_IN 0x00000000 -#define VIRTIO_BLK_T_OUT 0x00000001 -#define VIRTIO_BLK_T_SCSI_CMD 0x00000002 -#define VIRTIO_BLK_T_SCSI_CMD_OUT 0x00000003 -#define VIRTIO_BLK_T_FLUSH 0x00000004 -#define VIRTIO_BLK_T_FLUSH_OUT 0x00000005 -#define VIRTIO_BLK_T_BARRIER BIT31 - -#define VIRTIO_BLK_S_OK 0x00 -#define VIRTIO_BLK_S_IOERR 0x01 -#define VIRTIO_BLK_S_UNSUPP 0x02 #endif // _VIRTIO_H_ diff --git a/OvmfPkg/Include/IndustryStandard/VirtioBlk.h b/OvmfPkg/Include/IndustryStandard/VirtioBlk.h new file mode 100644 index 0000000000..b71f224b65 --- /dev/null +++ b/OvmfPkg/Include/IndustryStandard/VirtioBlk.h @@ -0,0 +1,80 @@ +/** @file + + Virtio Block Device specific type and macro definitions corresponding to the + virtio-0.9.5 specification. + + Copyright (C) 2012, Red Hat, Inc. + + This program and the accompanying materials are licensed and made available + under the terms and conditions of the BSD License which accompanies this + distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT + WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ + +#ifndef _VIRTIO_BLK_H_ +#define _VIRTIO_BLK_H_ + +#include + + +// +// virtio-0.9.5, Appendix D: Block Device +// +#pragma pack(1) +typedef struct { + VIRTIO_HDR Generic; + UINT64 VhdrCapacity; + UINT32 VhdrSizeMax; + UINT32 VhdrSegMax; + UINT16 VhdrCylinders; + UINT8 VhdrHeads; + UINT8 VhdrSectors; + UINT32 VhdrBlkSize; +} VBLK_HDR; +#pragma pack() + +#define OFFSET_OF_VBLK(Field) OFFSET_OF (VBLK_HDR, Field) +#define SIZE_OF_VBLK(Field) (sizeof ((VBLK_HDR *) 0)->Field) + +#define VIRTIO_BLK_F_BARRIER BIT0 +#define VIRTIO_BLK_F_SIZE_MAX BIT1 +#define VIRTIO_BLK_F_SEG_MAX BIT2 +#define VIRTIO_BLK_F_GEOMETRY BIT4 +#define VIRTIO_BLK_F_RO BIT5 +#define VIRTIO_BLK_F_BLK_SIZE BIT6 // treated as "logical block size" in + // practice; actual host side implementation + // negotiates "optimal" block size + // separately +#define VIRTIO_BLK_F_SCSI BIT7 +#define VIRTIO_BLK_F_FLUSH BIT9 // identical to "write cache enabled" + +// +// We keep the status byte separate from the rest of the virtio-blk request +// header. See description of historical scattering at the end of Appendix D: +// we're going to put the status byte in a separate VRING_DESC. +// +#pragma pack(1) +typedef struct { + UINT32 Type; + UINT32 IoPrio; + UINT64 Sector; +} VIRTIO_BLK_REQ; +#pragma pack() + +#define VIRTIO_BLK_T_IN 0x00000000 +#define VIRTIO_BLK_T_OUT 0x00000001 +#define VIRTIO_BLK_T_SCSI_CMD 0x00000002 +#define VIRTIO_BLK_T_SCSI_CMD_OUT 0x00000003 +#define VIRTIO_BLK_T_FLUSH 0x00000004 +#define VIRTIO_BLK_T_FLUSH_OUT 0x00000005 +#define VIRTIO_BLK_T_BARRIER BIT31 + +#define VIRTIO_BLK_S_OK 0x00 +#define VIRTIO_BLK_S_IOERR 0x01 +#define VIRTIO_BLK_S_UNSUPP 0x02 + +#endif // _VIRTIO_BLK_H_ diff --git a/OvmfPkg/VirtioBlkDxe/VirtioBlk.c b/OvmfPkg/VirtioBlkDxe/VirtioBlk.c index 01a562d165..ead98272a5 100644 --- a/OvmfPkg/VirtioBlkDxe/VirtioBlk.c +++ b/OvmfPkg/VirtioBlkDxe/VirtioBlk.c @@ -23,6 +23,7 @@ **/ #include +#include #include #include #include -- cgit v1.2.3