| /** @file | |
| Internal definitions for the PVSCSI driver, which produces Extended SCSI | |
| Pass Thru Protocol instances for pvscsi devices. | |
| Copyright (C) 2020, Oracle and/or its affiliates. | |
| SPDX-License-Identifier: BSD-2-Clause-Patent | |
| **/ | |
| #ifndef __PVSCSI_DXE_H_ | |
| #define __PVSCSI_DXE_H_ | |
| #include <Library/DebugLib.h> | |
| #include <Protocol/ScsiPassThruExt.h> | |
| typedef struct { | |
| EFI_PHYSICAL_ADDRESS DeviceAddress; | |
| VOID *Mapping; | |
| } PVSCSI_DMA_DESC; | |
| typedef struct { | |
| PVSCSI_RINGS_STATE *RingState; | |
| PVSCSI_DMA_DESC RingStateDmaDesc; | |
| PVSCSI_RING_REQ_DESC *RingReqs; | |
| PVSCSI_DMA_DESC RingReqsDmaDesc; | |
| PVSCSI_RING_CMP_DESC *RingCmps; | |
| PVSCSI_DMA_DESC RingCmpsDmaDesc; | |
| } PVSCSI_RING_DESC; | |
| typedef struct { | |
| // | |
| // As EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET.SenseDataLength is defined | |
| // as UINT8, defining here SenseData size to MAX_UINT8 will guarantee it | |
| // cannot overflow when passed to device. | |
| // | |
| UINT8 SenseData[MAX_UINT8]; | |
| // | |
| // This size of the data is arbitrarily chosen. | |
| // It seems to be sufficient for all I/O requests sent through | |
| // EFI_SCSI_PASS_THRU_PROTOCOL.PassThru() for common boot scenarios. | |
| // | |
| UINT8 Data[0x2000]; | |
| } PVSCSI_DMA_BUFFER; | |
| #define PVSCSI_SIG SIGNATURE_32 ('P', 'S', 'C', 'S') | |
| typedef struct { | |
| UINT32 Signature; | |
| EFI_PCI_IO_PROTOCOL *PciIo; | |
| EFI_EVENT ExitBoot; | |
| UINT64 OriginalPciAttributes; | |
| PVSCSI_RING_DESC RingDesc; | |
| PVSCSI_DMA_BUFFER *DmaBuf; | |
| PVSCSI_DMA_DESC DmaBufDmaDesc; | |
| UINT8 MaxTarget; | |
| UINT8 MaxLun; | |
| UINTN WaitForCmpStallInUsecs; | |
| EFI_EXT_SCSI_PASS_THRU_PROTOCOL PassThru; | |
| EFI_EXT_SCSI_PASS_THRU_MODE PassThruMode; | |
| } PVSCSI_DEV; | |
| #define PVSCSI_FROM_PASS_THRU(PassThruPointer) \ | |
| CR (PassThruPointer, PVSCSI_DEV, PassThru, PVSCSI_SIG) | |
| #define PVSCSI_DMA_BUF_DEV_ADDR(Dev, MemberName) \ | |
| (Dev->DmaBufDmaDesc.DeviceAddress + OFFSET_OF(PVSCSI_DMA_BUFFER, MemberName)) | |
| #endif // __PVSCSI_DXE_H_ |