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
#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