]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/LsiScsiDxe/LsiScsi.h
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / OvmfPkg / LsiScsiDxe / LsiScsi.h
index 6c8dcbd70a0a342659ca6035633adba2e8a79dc9..bdee9bb70e13ddf574a39248b79c9b4d0de755ab 100644 (file)
 #ifndef _LSI_SCSI_DXE_H_\r
 #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
+  //\r
+  // Allocate 64KB for read/write buffer. It seems sufficient for the common\r
+  // boot scenarios.\r
+  //\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
+  //\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
+  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
+\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
 // specific devices.\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
+// 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
+// sections\r
+// - 14.1 SCSI Driver Model Overview,\r
+// - 14.7 Extended SCSI Pass Thru Protocol.\r
+//\r
+\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
   );\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
+  );\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
+  );\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
+  );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+LsiScsiResetChannel (\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
+  );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+LsiScsiGetNextTarget (\r
+  IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL  *This,\r
+  IN OUT UINT8                        **TargetPointer\r
+  );\r
 \r
 //\r
 // The purpose of the following scaffolding (EFI_COMPONENT_NAME_PROTOCOL and\r
@@ -62,19 +181,19 @@ LsiScsiControllerStop (
 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