#define _LSI_SCSI_DXE_H_\r
\r
typedef struct {\r
+ //\r
+ // Allocate 32 UINT32 entries for the script and it's sufficient for\r
+ // 16 instructions.\r
+ //\r
+ UINT32 Script[32];\r
//\r
// The max size of CDB is 32.\r
//\r
- UINT8 Cdb[32];\r
+ UINT8 Cdb[32];\r
//\r
// Allocate 64KB for read/write buffer. It seems sufficient for the common\r
// boot scenarios.\r
// NOTE: The number of bytes for data transmission is bounded by DMA Byte\r
// Count (DBC), a 24-bit register, so the maximum is 0xFFFFFF (16MB-1).\r
//\r
- UINT8 Data[SIZE_64KB];\r
+ UINT8 Data[SIZE_64KB];\r
+ //\r
+ // For SCSI Message In phase\r
+ //\r
+ UINT8 MsgIn[2];\r
+ //\r
+ // For SCSI Message Out phase\r
+ //\r
+ UINT8 MsgOut;\r
+ //\r
+ // For SCSI Status phase\r
+ //\r
+ UINT8 Status;\r
} LSI_SCSI_DMA_BUFFER;\r
\r
typedef struct {\r
- UINT32 Signature;\r
- UINT64 OrigPciAttrs;\r
- EFI_EVENT ExitBoot;\r
- EFI_PCI_IO_PROTOCOL *PciIo;\r
- UINT8 MaxTarget;\r
- UINT8 MaxLun;\r
- LSI_SCSI_DMA_BUFFER *Dma;\r
- EFI_PHYSICAL_ADDRESS DmaPhysical;\r
- VOID *DmaMapping;\r
- EFI_EXT_SCSI_PASS_THRU_MODE PassThruMode;\r
- EFI_EXT_SCSI_PASS_THRU_PROTOCOL PassThru;\r
+ UINT32 Signature;\r
+ UINT64 OrigPciAttrs;\r
+ EFI_EVENT ExitBoot;\r
+ EFI_PCI_IO_PROTOCOL *PciIo;\r
+ UINT8 MaxTarget;\r
+ UINT8 MaxLun;\r
+ UINT32 StallPerPollUsec;\r
+ LSI_SCSI_DMA_BUFFER *Dma;\r
+ EFI_PHYSICAL_ADDRESS DmaPhysical;\r
+ VOID *DmaMapping;\r
+ EFI_EXT_SCSI_PASS_THRU_MODE PassThruMode;\r
+ EFI_EXT_SCSI_PASS_THRU_PROTOCOL PassThru;\r
} LSI_SCSI_DEV;\r
\r
-#define LSI_SCSI_DEV_SIGNATURE SIGNATURE_32 ('L','S','I','S')\r
+#define LSI_SCSI_DEV_SIGNATURE SIGNATURE_32 ('L','S','I','S')\r
\r
#define LSI_SCSI_FROM_PASS_THRU(PassThruPtr) \\r
CR (PassThruPtr, LSI_SCSI_DEV, PassThru, LSI_SCSI_DEV_SIGNATURE)\r
\r
+#define LSI_SCSI_DMA_ADDR(Dev, MemberName) \\r
+ ((UINT32)(Dev->DmaPhysical + OFFSET_OF (LSI_SCSI_DMA_BUFFER, MemberName)))\r
\r
//\r
// Probe, start and stop functions of this driver, called by the DXE core for\r
EFI_STATUS\r
EFIAPI\r
LsiScsiControllerSupported (\r
- IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
- IN EFI_HANDLE ControllerHandle,\r
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE ControllerHandle,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL\r
);\r
\r
EFI_STATUS\r
EFIAPI\r
LsiScsiControllerStart (\r
- IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
- IN EFI_HANDLE ControllerHandle,\r
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE ControllerHandle,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL\r
);\r
\r
EFI_STATUS\r
EFIAPI\r
LsiScsiControllerStop (\r
- IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
- IN EFI_HANDLE ControllerHandle,\r
- IN UINTN NumberOfChildren,\r
- IN EFI_HANDLE *ChildHandleBuffer\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE ControllerHandle,\r
+ IN UINTN NumberOfChildren,\r
+ IN EFI_HANDLE *ChildHandleBuffer\r
);\r
\r
-\r
//\r
// The next seven functions implement EFI_EXT_SCSI_PASS_THRU_PROTOCOL\r
// for the LSI 53C895A SCSI Controller. Refer to UEFI Spec 2.3.1 + Errata C,\r
EFI_STATUS\r
EFIAPI\r
LsiScsiPassThru (\r
- IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,\r
- IN UINT8 *Target,\r
- IN UINT64 Lun,\r
- IN OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet,\r
- IN EFI_EVENT Event OPTIONAL\r
+ IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,\r
+ IN UINT8 *Target,\r
+ IN UINT64 Lun,\r
+ IN OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet,\r
+ IN EFI_EVENT Event OPTIONAL\r
);\r
\r
EFI_STATUS\r
EFIAPI\r
LsiScsiGetNextTargetLun (\r
- IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,\r
- IN OUT UINT8 **TargetPointer,\r
- IN OUT UINT64 *Lun\r
+ IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,\r
+ IN OUT UINT8 **TargetPointer,\r
+ IN OUT UINT64 *Lun\r
);\r
\r
EFI_STATUS\r
EFIAPI\r
LsiScsiBuildDevicePath (\r
- IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,\r
- IN UINT8 *Target,\r
- IN UINT64 Lun,\r
- IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath\r
+ IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,\r
+ IN UINT8 *Target,\r
+ IN UINT64 Lun,\r
+ IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath\r
);\r
\r
EFI_STATUS\r
EFIAPI\r
LsiScsiGetTargetLun (\r
- IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,\r
- IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,\r
- OUT UINT8 **TargetPointer,\r
- OUT UINT64 *Lun\r
+ IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,\r
+ OUT UINT8 **TargetPointer,\r
+ OUT UINT64 *Lun\r
);\r
\r
EFI_STATUS\r
EFIAPI\r
LsiScsiResetChannel (\r
- IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This\r
+ IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This\r
);\r
\r
EFI_STATUS\r
EFIAPI\r
LsiScsiResetTargetLun (\r
- IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,\r
- IN UINT8 *Target,\r
- IN UINT64 Lun\r
+ IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,\r
+ IN UINT8 *Target,\r
+ IN UINT64 Lun\r
);\r
\r
EFI_STATUS\r
EFIAPI\r
LsiScsiGetNextTarget (\r
- IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,\r
- IN OUT UINT8 **TargetPointer\r
+ IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,\r
+ IN OUT UINT8 **TargetPointer\r
);\r
\r
-\r
//\r
// The purpose of the following scaffolding (EFI_COMPONENT_NAME_PROTOCOL and\r
// EFI_COMPONENT_NAME2_PROTOCOL implementation) is to format the driver's name\r
EFI_STATUS\r
EFIAPI\r
LsiScsiGetDriverName (\r
- IN EFI_COMPONENT_NAME_PROTOCOL *This,\r
- IN CHAR8 *Language,\r
- OUT CHAR16 **DriverName\r
+ IN EFI_COMPONENT_NAME_PROTOCOL *This,\r
+ IN CHAR8 *Language,\r
+ OUT CHAR16 **DriverName\r
);\r
\r
EFI_STATUS\r
EFIAPI\r
LsiScsiGetDeviceName (\r
- IN EFI_COMPONENT_NAME_PROTOCOL *This,\r
- IN EFI_HANDLE DeviceHandle,\r
- IN EFI_HANDLE ChildHandle,\r
- IN CHAR8 *Language,\r
- OUT CHAR16 **ControllerName\r
+ IN EFI_COMPONENT_NAME_PROTOCOL *This,\r
+ IN EFI_HANDLE DeviceHandle,\r
+ IN EFI_HANDLE ChildHandle,\r
+ IN CHAR8 *Language,\r
+ OUT CHAR16 **ControllerName\r
);\r
\r
#endif // _LSI_SCSI_DXE_H_\r