On 07/07/20 10:15, Laszlo Ersek wrote: > On 07/01/20 06:04, Gary Lin wrote: >> Implement LsiScsiControllerSupported() to probe the PCI ID and look for >> LSI 53C895A. >> >> Cc: Jordan Justen <jordan.l.jus...@intel.com> >> Cc: Laszlo Ersek <ler...@redhat.com> >> Cc: Ard Biesheuvel <ard.biesheu...@arm.com> >> Signed-off-by: Gary Lin <g...@suse.com> >> --- >> OvmfPkg/Include/IndustryStandard/LsiScsi.h | 20 +++++++++ >> OvmfPkg/LsiScsiDxe/LsiScsi.c | 48 +++++++++++++++++++++- >> OvmfPkg/LsiScsiDxe/LsiScsiDxe.inf | 6 +++ >> 3 files changed, 73 insertions(+), 1 deletion(-) >> create mode 100644 OvmfPkg/Include/IndustryStandard/LsiScsi.h >> >> diff --git a/OvmfPkg/Include/IndustryStandard/LsiScsi.h >> b/OvmfPkg/Include/IndustryStandard/LsiScsi.h >> new file mode 100644 >> index 000000000000..c09e864a1f39 >> --- /dev/null >> +++ b/OvmfPkg/Include/IndustryStandard/LsiScsi.h >> @@ -0,0 +1,20 @@ >> +/** @file >> + >> + Macros and type definitions for LSI 53C895A SCSI devices. >> + >> + Copyright (C) 2020, SUSE LLC. >> + >> + SPDX-License-Identifier: BSD-2-Clause-Patent >> + >> +**/ >> + >> +#ifndef _LSI_SCSI_H_ >> +#define _LSI_SCSI_H_ >> + >> +// >> +// Device ID >> +// >> +#define LSI_LOGIC_PCI_VENDOR_ID 0x1000 >> +#define LSI_53C895A_PCI_DEVICE_ID 0x0012 >> + >> +#endif // _LSI_SCSI_H_ >> diff --git a/OvmfPkg/LsiScsiDxe/LsiScsi.c b/OvmfPkg/LsiScsiDxe/LsiScsi.c >> index 62daa3ab99bf..5bca85bd75eb 100644 >> --- a/OvmfPkg/LsiScsiDxe/LsiScsi.c >> +++ b/OvmfPkg/LsiScsiDxe/LsiScsi.c >> @@ -9,7 +9,12 @@ >> >> **/ >> >> +#include <IndustryStandard/LsiScsi.h> >> +#include <IndustryStandard/Pci.h> >> +#include <Library/UefiBootServicesTableLib.h> >> #include <Library/UefiLib.h> >> +#include <Protocol/PciIo.h> >> +#include <Protocol/PciRootBridgeIo.h> >> #include <Uefi/UefiSpec.h> >> >> #include "LsiScsi.h" >> @@ -31,7 +36,48 @@ LsiScsiControllerSupported ( >> IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL >> ) >> { >> - return EFI_UNSUPPORTED; >> + EFI_STATUS Status; >> + EFI_PCI_IO_PROTOCOL *PciIo; >> + PCI_TYPE00 Pci; >> + >> + Status = gBS->OpenProtocol ( >> + ControllerHandle, >> + &gEfiPciIoProtocolGuid, >> + (VOID **)&PciIo, >> + This->DriverBindingHandle, >> + ControllerHandle, >> + EFI_OPEN_PROTOCOL_BY_DRIVER >> + ); >> + if (EFI_ERROR (Status)) { >> + return Status; >> + } >> + >> + Status = PciIo->Pci.Read ( >> + PciIo, >> + EfiPciIoWidthUint32, >> + 0, >> + sizeof (Pci) / sizeof (UINT32), >> + &Pci >> + ); >> + if (EFI_ERROR (Status)) { >> + goto Done; >> + } >> + >> + if (Pci.Hdr.VendorId == LSI_LOGIC_PCI_VENDOR_ID && >> + Pci.Hdr.DeviceId == LSI_53C895A_PCI_DEVICE_ID) { >> + Status = EFI_SUCCESS; >> + } else { >> + Status = EFI_UNSUPPORTED; >> + } >> + >> +Done: >> + gBS->CloseProtocol ( >> + ControllerHandle, >> + &gEfiPciIoProtocolGuid, >> + This->DriverBindingHandle, >> + ControllerHandle >> + ); >> + return Status; >> } >> >> EFI_STATUS >> diff --git a/OvmfPkg/LsiScsiDxe/LsiScsiDxe.inf >> b/OvmfPkg/LsiScsiDxe/LsiScsiDxe.inf >> index 444ceb78e9ca..e86c626a61aa 100644 >> --- a/OvmfPkg/LsiScsiDxe/LsiScsiDxe.inf >> +++ b/OvmfPkg/LsiScsiDxe/LsiScsiDxe.inf >> @@ -22,7 +22,13 @@ [Sources] >> >> [Packages] >> MdePkg/MdePkg.dec >> + OvmfPkg/OvmfPkg.dec >> >> [LibraryClasses] >> + BaseLib >> + UefiBootServicesTableLib >> UefiDriverEntryPoint >> UefiLib >> + >> +[Protocols] >> + gEfiPciIoProtocolGuid ## TO_START >> > > Reviewed-by: Laszlo Ersek <ler...@redhat.com> >
(I've checked PCI_VENDOR_ID_LSI_LOGIC in QEMU's "include/hw/pci/pci_ids.h" and "hw/scsi/lsi53c895a.c". Also checked PCI_DEVICE_ID_LSI_53C895A in the QEMU source.) -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#62123): https://edk2.groups.io/g/devel/message/62123 Mute This Topic: https://groups.io/mt/75228760/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-