123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 |
- /** @file
- Internal definitions for the LSI 53C895A SCSI driver, which produces
- Extended SCSI Pass Thru Protocol instances for LSI 53C895A SCSI devices.
- Copyright (C) 2020, SUSE LLC.
- SPDX-License-Identifier: BSD-2-Clause-Patent
- **/
- #ifndef _LSI_SCSI_DXE_H_
- #define _LSI_SCSI_DXE_H_
- typedef struct {
- //
- // Allocate 32 UINT32 entries for the script and it's sufficient for
- // 16 instructions.
- //
- UINT32 Script[32];
- //
- // The max size of CDB is 32.
- //
- UINT8 Cdb[32];
- //
- // Allocate 64KB for read/write buffer. It seems sufficient for the common
- // boot scenarios.
- //
- // NOTE: The number of bytes for data transmission is bounded by DMA Byte
- // Count (DBC), a 24-bit register, so the maximum is 0xFFFFFF (16MB-1).
- //
- UINT8 Data[SIZE_64KB];
- //
- // For SCSI Message In phase
- //
- UINT8 MsgIn[2];
- //
- // For SCSI Message Out phase
- //
- UINT8 MsgOut;
- //
- // For SCSI Status phase
- //
- UINT8 Status;
- } LSI_SCSI_DMA_BUFFER;
- typedef struct {
- UINT32 Signature;
- UINT64 OrigPciAttrs;
- EFI_EVENT ExitBoot;
- EFI_PCI_IO_PROTOCOL *PciIo;
- UINT8 MaxTarget;
- UINT8 MaxLun;
- UINT32 StallPerPollUsec;
- LSI_SCSI_DMA_BUFFER *Dma;
- EFI_PHYSICAL_ADDRESS DmaPhysical;
- VOID *DmaMapping;
- EFI_EXT_SCSI_PASS_THRU_MODE PassThruMode;
- EFI_EXT_SCSI_PASS_THRU_PROTOCOL PassThru;
- } LSI_SCSI_DEV;
- #define LSI_SCSI_DEV_SIGNATURE SIGNATURE_32 ('L','S','I','S')
- #define LSI_SCSI_FROM_PASS_THRU(PassThruPtr) \
- CR (PassThruPtr, LSI_SCSI_DEV, PassThru, LSI_SCSI_DEV_SIGNATURE)
- #define LSI_SCSI_DMA_ADDR(Dev, MemberName) \
- ((UINT32)(Dev->DmaPhysical + OFFSET_OF (LSI_SCSI_DMA_BUFFER, MemberName)))
- //
- // Probe, start and stop functions of this driver, called by the DXE core for
- // specific devices.
- //
- // The following specifications document these interfaces:
- // - Driver Writer's Guide for UEFI 2.3.1 v1.01, 9 Driver Binding Protocol
- // - UEFI Spec 2.3.1 + Errata C, 10.1 EFI Driver Binding Protocol
- //
- EFI_STATUS
- EFIAPI
- LsiScsiControllerSupported (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE ControllerHandle,
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL
- );
- EFI_STATUS
- EFIAPI
- LsiScsiControllerStart (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE ControllerHandle,
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL
- );
- EFI_STATUS
- EFIAPI
- LsiScsiControllerStop (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE ControllerHandle,
- IN UINTN NumberOfChildren,
- IN EFI_HANDLE *ChildHandleBuffer
- );
- //
- // The next seven functions implement EFI_EXT_SCSI_PASS_THRU_PROTOCOL
- // for the LSI 53C895A SCSI Controller. Refer to UEFI Spec 2.3.1 + Errata C,
- // sections
- // - 14.1 SCSI Driver Model Overview,
- // - 14.7 Extended SCSI Pass Thru Protocol.
- //
- EFI_STATUS
- EFIAPI
- LsiScsiPassThru (
- IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,
- IN UINT8 *Target,
- IN UINT64 Lun,
- IN OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet,
- IN EFI_EVENT Event OPTIONAL
- );
- EFI_STATUS
- EFIAPI
- LsiScsiGetNextTargetLun (
- IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,
- IN OUT UINT8 **TargetPointer,
- IN OUT UINT64 *Lun
- );
- EFI_STATUS
- EFIAPI
- LsiScsiBuildDevicePath (
- IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,
- IN UINT8 *Target,
- IN UINT64 Lun,
- IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath
- );
- EFI_STATUS
- EFIAPI
- LsiScsiGetTargetLun (
- IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,
- IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
- OUT UINT8 **TargetPointer,
- OUT UINT64 *Lun
- );
- EFI_STATUS
- EFIAPI
- LsiScsiResetChannel (
- IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This
- );
- EFI_STATUS
- EFIAPI
- LsiScsiResetTargetLun (
- IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,
- IN UINT8 *Target,
- IN UINT64 Lun
- );
- EFI_STATUS
- EFIAPI
- LsiScsiGetNextTarget (
- IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,
- IN OUT UINT8 **TargetPointer
- );
- //
- // The purpose of the following scaffolding (EFI_COMPONENT_NAME_PROTOCOL and
- // EFI_COMPONENT_NAME2_PROTOCOL implementation) is to format the driver's name
- // in English, for display on standard console devices. This is recommended for
- // UEFI drivers that follow the UEFI Driver Model. Refer to the Driver Writer's
- // Guide for UEFI 2.3.1 v1.01, 11 UEFI Driver and Controller Names.
- //
- // Device type names ("LSI 53C895A SCSI Controller") are not formatted because
- // the driver supports only that device type. Therefore the driver name
- // suffices for unambiguous identification.
- //
- EFI_STATUS
- EFIAPI
- LsiScsiGetDriverName (
- IN EFI_COMPONENT_NAME_PROTOCOL *This,
- IN CHAR8 *Language,
- OUT CHAR16 **DriverName
- );
- EFI_STATUS
- EFIAPI
- LsiScsiGetDeviceName (
- IN EFI_COMPONENT_NAME_PROTOCOL *This,
- IN EFI_HANDLE DeviceHandle,
- IN EFI_HANDLE ChildHandle,
- IN CHAR8 *Language,
- OUT CHAR16 **ControllerName
- );
- #endif // _LSI_SCSI_DXE_H_
|