Use lookup table to identify the platform and install corresponding ACPI tables. As the number of supported platforms grow, the existing platform identification using if..else does not scale well.
Signed-off-by: Vijayenthiran Subramaniam <vijayenthiran.subraman...@arm.com> --- Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.c | 49 ++++++++++++++++---- 1 file changed, 39 insertions(+), 10 deletions(-) diff --git a/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.c b/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.c index 09e00e5d538b..4ab0dd768cd1 100644 --- a/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.c +++ b/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.c @@ -11,6 +11,35 @@ #include <Library/HobLib.h> #include <SgiPlatform.h> +typedef struct { + SGI_PLATFORM_DESCRIPTOR SgiPlafromDescriptor; + CONST EFI_GUID* AcpiTableGuid; +} SGI_PLATFORM_ACPI_TABLE_GUID_LOOKUP; + +// Macro to construct the SGI_PLATFORM_ACPI_TABLE_GUID_LOOKUP structure +#define ACPI_GUID_LOOKUP(PART_NUM, CONFIG_NUM, GUID) \ +{ \ + { \ + PART_NUM, CONFIG_NUM \ + }, \ + GUID \ +} \ + +STATIC SGI_PLATFORM_ACPI_TABLE_GUID_LOOKUP AcpiTableGuidLookup[] = { + ACPI_GUID_LOOKUP ( + SGI575_PART_NUM, + SGI575_CONF_NUM, + &gSgi575AcpiTablesFileGuid), + ACPI_GUID_LOOKUP ( + RD_N1E1_EDGE_PART_NUM, + RD_N1_EDGE_CONF_ID, + &gRdN1EdgeAcpiTablesFileGuid), + ACPI_GUID_LOOKUP ( + RD_N1E1_EDGE_PART_NUM, + RD_E1_EDGE_CONF_ID, + &gRdE1EdgeAcpiTablesFileGuid), +}; + VOID InitVirtioDevices ( VOID @@ -26,6 +55,7 @@ ArmSgiPkgEntryPoint ( EFI_STATUS Status; VOID *SystemIdHob; SGI_PLATFORM_DESCRIPTOR *HobData; + UINT8 i; UINT32 ConfigId; UINT32 PartNum; @@ -40,16 +70,15 @@ ArmSgiPkgEntryPoint ( PartNum = HobData->PlatformId; ConfigId = HobData->ConfigId; - if ((PartNum == SGI575_PART_NUM) && (ConfigId == SGI575_CONF_NUM)) { - Status = LocateAndInstallAcpiFromFv (&gSgi575AcpiTablesFileGuid); - } else if ((PartNum == RD_N1E1_EDGE_PART_NUM) && - (ConfigId == RD_N1_EDGE_CONF_ID)) { - Status = LocateAndInstallAcpiFromFv (&gRdN1EdgeAcpiTablesFileGuid); - } else if ((PartNum == RD_N1E1_EDGE_PART_NUM) && - (ConfigId == RD_E1_EDGE_CONF_ID)) { - Status = LocateAndInstallAcpiFromFv (&gRdE1EdgeAcpiTablesFileGuid); - } else { - Status = EFI_UNSUPPORTED; + Status = EFI_UNSUPPORTED; + + // Walk through the AcpiTableGuidLookup lookup array + for (i = 0; i < ARRAY_SIZE (AcpiTableGuidLookup); i++) { + if ((PartNum == AcpiTableGuidLookup[i].SgiPlafromDescriptor.PlatformId) && + (ConfigId == AcpiTableGuidLookup[i].SgiPlafromDescriptor.ConfigId)) { + Status = LocateAndInstallAcpiFromFv (AcpiTableGuidLookup[i].AcpiTableGuid); + break; + } } if (EFI_ERROR (Status)) { -- 2.7.4 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#54291): https://edk2.groups.io/g/devel/message/54291 Mute This Topic: https://groups.io/mt/71211940/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-