[edk2-devel] [PATCH v2 04/12] OvmfPkg/LsiScsiDxe: Probe PCI devices and look for LsiScsi

Gary Lin glin at suse.com
Thu Jul 16 07:45:59 UTC 2020


Implement LsiScsiControllerSupported() to probe the PCI ID and look for
LSI 53C895A.

Cc: Jordan Justen <jordan.l.justen at intel.com>
Cc: Laszlo Ersek <lersek at redhat.com>
Cc: Ard Biesheuvel <ard.biesheuvel at arm.com>
Signed-off-by: Gary Lin <glin at suse.com>
Reviewed-by: Laszlo Ersek <lersek at redhat.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 5cb15c456549..7ce11fcc6a03 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

-- 
2.25.1


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#62658): https://edk2.groups.io/g/devel/message/62658
Mute This Topic: https://groups.io/mt/75537207/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-





More information about the edk2-devel-archive mailing list