3 This driver produces Extended SCSI Pass Thru Protocol instances for
4 LSI Fusion MPT SCSI devices.
6 Copyright (C) 2020, Oracle and/or its affiliates.
8 SPDX-License-Identifier: BSD-2-Clause-Patent
12 #include <IndustryStandard/FusionMptScsi.h>
13 #include <IndustryStandard/Pci.h>
14 #include <Library/UefiBootServicesTableLib.h>
15 #include <Library/UefiLib.h>
16 #include <Protocol/PciIo.h>
17 #include <Uefi/UefiSpec.h>
20 // Higher versions will be used before lower, 0x10-0xffffffef is the version
21 // range for IVH (Indie Hardware Vendors)
23 #define MPT_SCSI_BINDING_VERSION 0x10
32 MptScsiControllerSupported (
33 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
34 IN EFI_HANDLE ControllerHandle
,
35 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath OPTIONAL
39 EFI_PCI_IO_PROTOCOL
*PciIo
;
42 Status
= gBS
->OpenProtocol (
44 &gEfiPciIoProtocolGuid
,
46 This
->DriverBindingHandle
,
48 EFI_OPEN_PROTOCOL_BY_DRIVER
50 if (EFI_ERROR (Status
)) {
54 Status
= PciIo
->Pci
.Read (
58 sizeof (Pci
) / sizeof (UINT32
),
61 if (EFI_ERROR (Status
)) {
65 if (Pci
.Hdr
.VendorId
== LSI_LOGIC_PCI_VENDOR_ID
&&
66 (Pci
.Hdr
.DeviceId
== LSI_53C1030_PCI_DEVICE_ID
||
67 Pci
.Hdr
.DeviceId
== LSI_SAS1068_PCI_DEVICE_ID
||
68 Pci
.Hdr
.DeviceId
== LSI_SAS1068E_PCI_DEVICE_ID
)) {
71 Status
= EFI_UNSUPPORTED
;
77 &gEfiPciIoProtocolGuid
,
78 This
->DriverBindingHandle
,
87 MptScsiControllerStart (
88 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
89 IN EFI_HANDLE ControllerHandle
,
90 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath OPTIONAL
93 return EFI_UNSUPPORTED
;
99 MptScsiControllerStop (
100 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
101 IN EFI_HANDLE ControllerHandle
,
102 IN UINTN NumberOfChildren
,
103 IN EFI_HANDLE
*ChildHandleBuffer
106 return EFI_UNSUPPORTED
;
110 EFI_DRIVER_BINDING_PROTOCOL mMptScsiDriverBinding
= {
111 &MptScsiControllerSupported
,
112 &MptScsiControllerStart
,
113 &MptScsiControllerStop
,
114 MPT_SCSI_BINDING_VERSION
,
115 NULL
, // ImageHandle, filled by EfiLibInstallDriverBindingComponentName2
116 NULL
, // DriverBindingHandle, filled as well
124 EFI_UNICODE_STRING_TABLE mDriverNameTable
[] = {
125 { "eng;en", L
"LSI Fusion MPT SCSI Driver" },
130 EFI_COMPONENT_NAME_PROTOCOL mComponentName
;
134 MptScsiGetDriverName (
135 IN EFI_COMPONENT_NAME_PROTOCOL
*This
,
137 OUT CHAR16
**DriverName
140 return LookupUnicodeString2 (
142 This
->SupportedLanguages
,
145 (BOOLEAN
)(This
== &mComponentName
) // Iso639Language
151 MptScsiGetDeviceName (
152 IN EFI_COMPONENT_NAME_PROTOCOL
*This
,
153 IN EFI_HANDLE DeviceHandle
,
154 IN EFI_HANDLE ChildHandle
,
156 OUT CHAR16
**ControllerName
159 return EFI_UNSUPPORTED
;
163 EFI_COMPONENT_NAME_PROTOCOL mComponentName
= {
164 &MptScsiGetDriverName
,
165 &MptScsiGetDeviceName
,
166 "eng" // SupportedLanguages, ISO 639-2 language codes
170 EFI_COMPONENT_NAME2_PROTOCOL mComponentName2
= {
171 (EFI_COMPONENT_NAME2_GET_DRIVER_NAME
) &MptScsiGetDriverName
,
172 (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME
) &MptScsiGetDeviceName
,
173 "en" // SupportedLanguages, RFC 4646 language codes
183 IN EFI_HANDLE ImageHandle
,
184 IN EFI_SYSTEM_TABLE
*SystemTable
187 return EfiLibInstallDriverBindingComponentName2 (
190 &mMptScsiDriverBinding
,
191 ImageHandle
, // The handle to install onto