]> 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 e1e5ae18ebf2f187b7555493747bb076d8b858a1..544359ebc05cefd0cac0def7a85da7bc36320918 100644 (file)
 #include <Library/DebugLib.h>\r
 #include <Protocol/ScsiPassThruExt.h>\r
 \r
+typedef struct {\r
+  EFI_PHYSICAL_ADDRESS DeviceAddress;\r
+  VOID                 *Mapping;\r
+} PVSCSI_DMA_DESC;\r
+\r
+typedef struct {\r
+  PVSCSI_RINGS_STATE   *RingState;\r
+  PVSCSI_DMA_DESC      RingStateDmaDesc;\r
+\r
+  PVSCSI_RING_REQ_DESC *RingReqs;\r
+  PVSCSI_DMA_DESC      RingReqsDmaDesc;\r
+\r
+  PVSCSI_RING_CMP_DESC *RingCmps;\r
+  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
@@ -29,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