]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/PvScsiDxe/PvScsi.h
OvmfPkg/PvScsiDxe: Reset device on ExitBootServices()
[mirror_edk2.git] / OvmfPkg / PvScsiDxe / PvScsi.h
index 6d23b6e1eccf9fa82afdf214d02671119a604912..544359ebc05cefd0cac0def7a85da7bc36320918 100644 (file)
@@ -31,15 +31,34 @@ typedef struct {
   PVSCSI_DMA_DESC      RingCmpsDmaDesc;\r
 } PVSCSI_RING_DESC;\r
 \r
+typedef struct {\r
+  //\r
+  // As EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET.SenseDataLength is defined\r
+  // as UINT8, defining here SenseData size to MAX_UINT8 will guarantee it\r
+  // cannot overflow when passed to device.\r
+  //\r
+  UINT8     SenseData[MAX_UINT8];\r
+  //\r
+  // This size of the data is arbitrarily chosen.\r
+  // It seems to be sufficient for all I/O requests sent through\r
+  // EFI_SCSI_PASS_THRU_PROTOCOL.PassThru() for common boot scenarios.\r
+  //\r
+  UINT8     Data[0x2000];\r
+} PVSCSI_DMA_BUFFER;\r
+\r
 #define PVSCSI_SIG SIGNATURE_32 ('P', 'S', 'C', 'S')\r
 \r
 typedef struct {\r
   UINT32                          Signature;\r
   EFI_PCI_IO_PROTOCOL             *PciIo;\r
+  EFI_EVENT                       ExitBoot;\r
   UINT64                          OriginalPciAttributes;\r
   PVSCSI_RING_DESC                RingDesc;\r
+  PVSCSI_DMA_BUFFER               *DmaBuf;\r
+  PVSCSI_DMA_DESC                 DmaBufDmaDesc;\r
   UINT8                           MaxTarget;\r
   UINT8                           MaxLun;\r
+  UINTN                           WaitForCmpStallInUsecs;\r
   EFI_EXT_SCSI_PASS_THRU_PROTOCOL PassThru;\r
   EFI_EXT_SCSI_PASS_THRU_MODE     PassThruMode;\r
 } PVSCSI_DEV;\r
@@ -47,4 +66,7 @@ typedef struct {
 #define PVSCSI_FROM_PASS_THRU(PassThruPointer) \\r
   CR (PassThruPointer, PVSCSI_DEV, PassThru, PVSCSI_SIG)\r
 \r
+#define PVSCSI_DMA_BUF_DEV_ADDR(Dev, MemberName) \\r
+  (Dev->DmaBufDmaDesc.DeviceAddress + OFFSET_OF(PVSCSI_DMA_BUFFER, MemberName))\r
+\r
 #endif // __PVSCSI_DXE_H_\r