From 54fbbbd7e912c0b81c41831a82da2b995054c34e Mon Sep 17 00:00:00 2001 From: gikidy Date: Mon, 6 Jul 2009 03:06:50 +0000 Subject: [PATCH] Enhance iSCSI ibft table for copy oemid and oemtableID from acpi tables. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8752 6f19259b-4bc3-4df7-8a09-765794883524 --- .../Network/IScsiDxe/IScsiConfigNVDataStruc.h | 2 +- .../Universal/Network/IScsiDxe/IScsiDxe.inf | 5 ++- .../Universal/Network/IScsiDxe/IScsiIbft.c | 36 +++++++++++++++++-- .../Universal/Network/IScsiDxe/IScsiImpl.h | 1 + 4 files changed, 40 insertions(+), 4 deletions(-) diff --git a/MdeModulePkg/Universal/Network/IScsiDxe/IScsiConfigNVDataStruc.h b/MdeModulePkg/Universal/Network/IScsiDxe/IScsiConfigNVDataStruc.h index 8f1aaeacb1..2e9736ec32 100644 --- a/MdeModulePkg/Universal/Network/IScsiDxe/IScsiConfigNVDataStruc.h +++ b/MdeModulePkg/Universal/Network/IScsiDxe/IScsiConfigNVDataStruc.h @@ -30,7 +30,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. // // Vfr has a limit on the size, it's 255 bytes. // -#define ISCSI_NAME_IFR_MAX_SIZE 126 +#define ISCSI_NAME_IFR_MAX_SIZE 223 #define IP_MIN_SIZE 7 #define IP_MAX_SIZE 15 diff --git a/MdeModulePkg/Universal/Network/IScsiDxe/IScsiDxe.inf b/MdeModulePkg/Universal/Network/IScsiDxe/IScsiDxe.inf index b1415252c3..a3b6789eb7 100644 --- a/MdeModulePkg/Universal/Network/IScsiDxe/IScsiDxe.inf +++ b/MdeModulePkg/Universal/Network/IScsiDxe/IScsiDxe.inf @@ -95,4 +95,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. [Guids] gEfiEventExitBootServicesGuid - gEfiIfrTianoGuid ## CONSUMES ## Guid + gEfiIfrTianoGuid ## CONSUMES ## GUID + gEfiAcpiTableGuid ## CONSUMES ## GUID + gEfiAcpi10TableGuid ## CONSUMES ## GUID + gEfiAcpi20TableGuid ## CONSUMES ## GUID \ No newline at end of file diff --git a/MdeModulePkg/Universal/Network/IScsiDxe/IScsiIbft.c b/MdeModulePkg/Universal/Network/IScsiDxe/IScsiIbft.c index 6d2b184aad..d712331189 100644 --- a/MdeModulePkg/Universal/Network/IScsiDxe/IScsiIbft.c +++ b/MdeModulePkg/Universal/Network/IScsiDxe/IScsiIbft.c @@ -24,7 +24,9 @@ UINTN mTableKey; **/ VOID IScsiInitIbfTableHeader ( - OUT EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_HEADER *Header + OUT EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_HEADER *Header, + IN UINT8 *OemId, + IN UINT64 *OemTableId ) { ZeroMem (Header, sizeof (EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_HEADER)); @@ -39,6 +41,9 @@ IScsiInitIbfTableHeader ( Header->OemId[2] = 'T'; Header->OemId[3] = 'E'; Header->OemId[4] = 'L'; + + CopyMem (Header->OemId, OemId, sizeof (Header->OemId)); + Header->OemTableId = *OemTableId; } /** @@ -449,12 +454,39 @@ IScsiPublishIbft ( EFI_HANDLE *HandleBuffer; UINT8 *Heap; UINT8 Checksum; + UINTN Index; + EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_POINTER *Rsdp; + EFI_ACPI_DESCRIPTION_HEADER *Rsdt; Status = gBS->LocateProtocol (&gEfiAcpiTableProtocolGuid, NULL, (VOID **)&AcpiTableProtocol); if (EFI_ERROR (Status)) { return ; } + + // + // Find ACPI table RSD_PTR from system table + // + for (Index = 0, Rsdp = NULL; Index < gST->NumberOfTableEntries; Index++) { + if (CompareGuid (&(gST->ConfigurationTable[Index].VendorGuid), &gEfiAcpi20TableGuid) || + CompareGuid (&(gST->ConfigurationTable[Index].VendorGuid), &gEfiAcpi10TableGuid) || + CompareGuid (&(gST->ConfigurationTable[Index].VendorGuid), &gEfiAcpiTableGuid) + ) { + // + // A match was found. + // + Rsdp = (EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_POINTER *) gST->ConfigurationTable[Index].VendorTable; + break; + } + } + + if (Rsdp == NULL) { + return ; + } else { + Rsdt = (EFI_ACPI_DESCRIPTION_HEADER *) (UINTN) Rsdp->RsdtAddress; + } + + if (mIbftInstalled) { Status = AcpiTableProtocol->UninstallAcpiTable ( AcpiTableProtocol, @@ -492,7 +524,7 @@ IScsiPublishIbft ( // // Fill in the various section of the iSCSI Boot Firmware Table. // - IScsiInitIbfTableHeader (Table); + IScsiInitIbfTableHeader (Table, Rsdt->OemId, &Rsdt->OemTableId); IScsiInitControlSection (Table, HandleCount); IScsiFillInitiatorSection (Table, &Heap, HandleBuffer[0]); IScsiFillNICAndTargetSections (Table, &Heap, HandleCount, HandleBuffer); diff --git a/MdeModulePkg/Universal/Network/IScsiDxe/IScsiImpl.h b/MdeModulePkg/Universal/Network/IScsiDxe/IScsiImpl.h index ddcdb50cf5..66084964a0 100644 --- a/MdeModulePkg/Universal/Network/IScsiDxe/IScsiImpl.h +++ b/MdeModulePkg/Universal/Network/IScsiDxe/IScsiImpl.h @@ -24,6 +24,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #include #include +#include #include "IScsiCommon.h" #include "IScsiDriver.h" -- 2.39.2