/** @file\r
Implementation for iSCSI Boot Firmware Table publication.\r
\r
-Copyright (c) 2004 - 2011, Intel Corporation. All rights reserved.<BR>\r
-This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution. The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
#include "IScsiImpl.h"\r
\r
-BOOLEAN mIbftInstalled = FALSE;\r
-UINTN mTableKey;\r
+BOOLEAN mIbftInstalled = FALSE;\r
+UINTN mTableKey;\r
\r
/**\r
Initialize the header of the iSCSI Boot Firmware Table.\r
- \r
+\r
@param[out] Header The header of the iSCSI Boot Firmware Table.\r
@param[in] OemId The OEM ID.\r
@param[in] OemTableId The OEM table ID for the iBFT.\r
**/\r
VOID\r
IScsiInitIbfTableHeader (\r
- OUT EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_HEADER *Header,\r
- IN UINT8 *OemId,\r
- IN UINT64 *OemTableId\r
+ OUT EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_HEADER *Header,\r
+ IN UINT8 *OemId,\r
+ IN UINT64 *OemTableId\r
)\r
{\r
Header->Signature = EFI_ACPI_3_0_ISCSI_BOOT_FIRMWARE_TABLE_SIGNATURE;\r
CopyMem (&Header->OemTableId, OemTableId, sizeof (UINT64));\r
}\r
\r
-\r
/**\r
Initialize the control section of the iSCSI Boot Firmware Table.\r
\r
EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_CONTROL_STRUCTURE *Control;\r
UINTN NumOffset;\r
\r
- Control = (EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_CONTROL_STRUCTURE *) (Table + 1);\r
+ Control = (EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_CONTROL_STRUCTURE *)(Table + 1);\r
\r
Control->Header.StructureId = EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_CONTROL_STRUCTURE_ID;\r
Control->Header.Version = EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_CONTROL_STRUCTURE_VERSION;\r
- Control->Header.Length = (UINT16) sizeof (EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_CONTROL_STRUCTURE);\r
+ Control->Header.Length = (UINT16)sizeof (EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_CONTROL_STRUCTURE);\r
\r
//\r
// If in multipathing mode, enable the Boot Failover Flag.\r
//\r
if (mPrivate->EnableMpio) {\r
Control->Header.Flags = 0;\r
- NumOffset = 2 * (mPrivate->MpioCount - mPrivate->Krb5MpioCount);\r
+ NumOffset = 2 * (mPrivate->MpioCount - mPrivate->Krb5MpioCount);\r
} else {\r
NumOffset = 2 * mPrivate->ValidSinglePathCount;\r
}\r
// Need expand the control section if more than 2 NIC/Target attempts\r
// exist.\r
//\r
- Control->Header.Length = (UINT16) (Control->Header.Length + (NumOffset - 4) * sizeof (UINT16));\r
+ Control->Header.Length = (UINT16)(Control->Header.Length + (NumOffset - 4) * sizeof (UINT16));\r
}\r
}\r
\r
-\r
/**\r
Add one item into the heap.\r
\r
*(*Heap + Len) = 0;\r
}\r
\r
-\r
/**\r
Fill the Initiator section of the iSCSI Boot Firmware Table.\r
\r
EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_CONTROL_STRUCTURE *Control;\r
EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_INITIATOR_STRUCTURE *Initiator;\r
\r
- Control = (EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_CONTROL_STRUCTURE *) (Table + 1);\r
+ Control = (EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_CONTROL_STRUCTURE *)(Table + 1);\r
\r
//\r
// Initiator section immediately follows the control section.\r
//\r
Initiator = (EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_INITIATOR_STRUCTURE *)\r
- ((UINT8 *) Control + IBFT_ROUNDUP (Control->Header.Length));\r
+ ((UINT8 *)Control + IBFT_ROUNDUP (Control->Header.Length));\r
\r
- Control->InitiatorOffset = (UINT16) ((UINTN) Initiator - (UINTN) Table);\r
+ Control->InitiatorOffset = (UINT16)((UINTN)Initiator - (UINTN)Table);\r
\r
Initiator->Header.StructureId = EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_INITIATOR_STRUCTURE_ID;\r
Initiator->Header.Version = EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_INITIATOR_STRUCTURE_VERSION;\r
- Initiator->Header.Length = (UINT16) sizeof (EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_INITIATOR_STRUCTURE);\r
+ Initiator->Header.Length = (UINT16)sizeof (EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_INITIATOR_STRUCTURE);\r
Initiator->Header.Flags = EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_INITIATOR_STRUCTURE_FLAG_BLOCK_VALID |\r
EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_INITIATOR_STRUCTURE_FLAG_BOOT_SELECTED;\r
\r
//\r
IScsiAddHeapItem (Heap, mPrivate->InitiatorName, mPrivate->InitiatorNameLength - 1);\r
\r
- Initiator->IScsiNameLength = (UINT16) (mPrivate->InitiatorNameLength - 1);\r
- Initiator->IScsiNameOffset = (UINT16) ((UINTN) *Heap - (UINTN) Table);\r
+ Initiator->IScsiNameLength = (UINT16)(mPrivate->InitiatorNameLength - 1);\r
+ Initiator->IScsiNameOffset = (UINT16)((UINTN)*Heap - (UINTN)Table);\r
}\r
\r
-\r
/**\r
Map the v4 IP address into v6 IP address.\r
\r
**/\r
VOID\r
IScsiMapV4ToV6Addr (\r
- IN EFI_IPv4_ADDRESS *V4,\r
- OUT EFI_IPv6_ADDRESS *V6\r
+ IN EFI_IPv4_ADDRESS *V4,\r
+ OUT EFI_IPv6_ADDRESS *V6\r
)\r
{\r
- UINTN Index;\r
+ UINTN Index;\r
\r
ZeroMem (V6, sizeof (EFI_IPv6_ADDRESS));\r
\r
- V6->Addr[10] = 0xff;\r
- V6->Addr[11] = 0xff;\r
+ V6->Addr[10] = 0xff;\r
+ V6->Addr[11] = 0xff;\r
\r
for (Index = 0; Index < 4; Index++) {\r
V6->Addr[12 + Index] = V4->Addr[Index];\r
}\r
}\r
\r
-\r
/**\r
Fill the NIC and target sections in iSCSI Boot Firmware Table.\r
\r
//\r
// Get the offset of the first Nic and Target section.\r
//\r
- Control = (EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_CONTROL_STRUCTURE *) (Table + 1);\r
- Nic = (EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_NIC_STRUCTURE *) ((UINTN) Table +\r
- Control->InitiatorOffset + IBFT_ROUNDUP (sizeof (EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_INITIATOR_STRUCTURE)));\r
- Target = (EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_TARGET_STRUCTURE *) ((UINTN) Nic +\r
- IBFT_ROUNDUP (sizeof (EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_NIC_STRUCTURE)));\r
+ Control = (EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_CONTROL_STRUCTURE *)(Table + 1);\r
+ Nic = (EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_NIC_STRUCTURE *)((UINTN)Table +\r
+ Control->InitiatorOffset + IBFT_ROUNDUP (sizeof (EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_INITIATOR_STRUCTURE)));\r
+ Target = (EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_TARGET_STRUCTURE *)((UINTN)Nic +\r
+ IBFT_ROUNDUP (sizeof (EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_NIC_STRUCTURE)));\r
\r
SectionOffset = &Control->NIC0Offset;\r
\r
}\r
\r
ASSERT (Attempt->SessionConfigData.Enabled != ISCSI_DISABLED);\r
-\r
} else {\r
- if (Index == 1 && Flag) {\r
+ if ((Index == 1) && Flag) {\r
Entry = mPrivate->AttemptConfigs.ForwardLink;\r
- Flag = FALSE;\r
+ Flag = FALSE;\r
}\r
\r
Attempt = NET_LIST_USER_STRUCT (Entry, ISCSI_ATTEMPT_CONFIG_NVDATA, Link);\r
//\r
// If multipath mode is enabled, only the attempts in MPIO will be recorded in iBFT.\r
//\r
- if (mPrivate->EnableMpio && Attempt->SessionConfigData.Enabled != ISCSI_ENABLED_FOR_MPIO) {\r
+ if (mPrivate->EnableMpio && (Attempt->SessionConfigData.Enabled != ISCSI_ENABLED_FOR_MPIO)) {\r
continue;\r
}\r
\r
\r
Nic->Header.StructureId = EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_NIC_STRUCTURE_ID;\r
Nic->Header.Version = EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_NIC_STRUCTURE_VERSION;\r
- Nic->Header.Length = (UINT16) sizeof (EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_NIC_STRUCTURE);\r
- Nic->Header.Index = (UINT8) Index;\r
+ Nic->Header.Length = (UINT16)sizeof (EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_NIC_STRUCTURE);\r
+ Nic->Header.Index = (UINT8)Index;\r
Nic->Header.Flags = EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_NIC_STRUCTURE_FLAG_BLOCK_VALID |\r
- EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_NIC_STRUCTURE_FLAG_GLOBAL;\r
+ EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_NIC_STRUCTURE_FLAG_GLOBAL;\r
\r
if (Index == 0) {\r
- Nic->Header.Flags |= EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_NIC_STRUCTURE_FLAG_BOOT_SELECTED;\r
+ Nic->Header.Flags |= EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_NIC_STRUCTURE_FLAG_BOOT_SELECTED;\r
}\r
\r
if (NvData->InitiatorInfoFromDhcp) {\r
Nic->Origin = IpPrefixOriginManual;\r
}\r
\r
- if (NvData->IpMode == IP_MODE_IP4 || NvData->IpMode == IP_MODE_AUTOCONFIG) {\r
+ if ((NvData->IpMode == IP_MODE_IP4) || (NvData->IpMode == IP_MODE_AUTOCONFIG)) {\r
//\r
// Get the subnet mask prefix length.\r
//\r
//\r
// Map the various v4 addresses into v6 addresses.\r
//\r
- IScsiMapV4ToV6Addr (&NvData->LocalIp, &Nic->Ip);\r
- IScsiMapV4ToV6Addr (&NvData->Gateway, &Nic->Gateway);\r
+ IScsiMapV4ToV6Addr (&NvData->LocalIp.v4, &Nic->Ip);\r
+ IScsiMapV4ToV6Addr (&NvData->Gateway.v4, &Nic->Gateway);\r
IScsiMapV4ToV6Addr (&Attempt->PrimaryDns.v4, &Nic->PrimaryDns);\r
IScsiMapV4ToV6Addr (&Attempt->SecondaryDns.v4, &Nic->SecondaryDns);\r
IScsiMapV4ToV6Addr (&Attempt->DhcpServer.v4, &Nic->DhcpServer);\r
-\r
- } else if (NvData->IpMode == IP_MODE_IP6 || NvData->IpMode == IP_MODE_AUTOCONFIG) {\r
- //\r
- // TODO: The subnet mask/local ip/gateway/dhcpserver for iBFT-IPv6 needs to be \r
- // confirmed with spec owner.\r
- //\r
-\r
+ } else if ((NvData->IpMode == IP_MODE_IP6) || (NvData->IpMode == IP_MODE_AUTOCONFIG)) {\r
+ Nic->SubnetMaskPrefixLength = NvData->PrefixLength;\r
+ CopyMem (&Nic->Ip, &NvData->LocalIp, sizeof (EFI_IPv6_ADDRESS));\r
+ CopyMem (&Nic->Gateway, &NvData->Gateway, sizeof (EFI_IPv6_ADDRESS));\r
CopyMem (&Nic->PrimaryDns, &Attempt->PrimaryDns, sizeof (EFI_IPv6_ADDRESS));\r
CopyMem (&Nic->SecondaryDns, &Attempt->SecondaryDns, sizeof (EFI_IPv6_ADDRESS));\r
- //\r
- // TODO: DHCP server address cannot be retrieved by DHCPv6 process since \r
- // DHCP server option is removed.\r
- //CopyMem (&Nic->DhcpServer, &Attempt->DhcpServer, sizeof (EFI_IPv6_ADDRESS));\r
- //\r
+ CopyMem (&Nic->DhcpServer, &Attempt->DhcpServer, sizeof (EFI_IPv6_ADDRESS));\r
} else {\r
ASSERT (FALSE);\r
}\r
\r
Nic->VLanTag = NicInfo->VlanId;\r
CopyMem (Nic->Mac, &NicInfo->PermanentAddress, sizeof (Nic->Mac));\r
- Nic->PciLocation = (UINT16) ((NicInfo->BusNumber << 8) |\r
- (NicInfo->DeviceNumber << 3) | NicInfo->FunctionNumber);\r
- *SectionOffset = (UINT16) ((UINTN) Nic - (UINTN) Table);\r
+ Nic->PciLocation = (UINT16)((NicInfo->BusNumber << 8) |\r
+ (NicInfo->DeviceNumber << 3) | NicInfo->FunctionNumber);\r
+ *SectionOffset = (UINT16)((UINTN)Nic - (UINTN)Table);\r
SectionOffset++;\r
\r
//\r
// Fill the Target section.\r
//\r
\r
- Target->Header.StructureId = EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_TARGET_STRUCTURE_ID;\r
- Target->Header.Version = EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_TARGET_STRUCTURE_VERSION;\r
- Target->Header.Length = (UINT16) sizeof (EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_TARGET_STRUCTURE);\r
- Target->Header.Index = (UINT8) Index;\r
- Target->Header.Flags = EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_TARGET_STRUCTURE_FLAG_BLOCK_VALID;\r
+ Target->Header.StructureId = EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_TARGET_STRUCTURE_ID;\r
+ Target->Header.Version = EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_TARGET_STRUCTURE_VERSION;\r
+ Target->Header.Length = (UINT16)sizeof (EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_TARGET_STRUCTURE);\r
+ Target->Header.Index = (UINT8)Index;\r
+ Target->Header.Flags = EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_TARGET_STRUCTURE_FLAG_BLOCK_VALID;\r
\r
if (Index == 0) {\r
- Target->Header.Flags |= EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_TARGET_STRUCTURE_FLAG_BOOT_SELECTED;\r
+ Target->Header.Flags |= EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_TARGET_STRUCTURE_FLAG_BOOT_SELECTED;\r
}\r
\r
- Target->Port = NvData->TargetPort;\r
+ Target->Port = NvData->TargetPort;\r
\r
if (Attempt->AuthenticationType == ISCSI_AUTH_TYPE_CHAP) {\r
- Target->CHAPType = AuthConfig->CHAPType;\r
+ if (AuthConfig->CHAPType == ISCSI_CHAP_UNI) {\r
+ Target->CHAPType = EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_TARGET_STRUCTURE_CHAP_TYPE_CHAP;\r
+ } else if (AuthConfig->CHAPType == ISCSI_CHAP_MUTUAL) {\r
+ Target->CHAPType = EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_TARGET_STRUCTURE_CHAP_TYPE_MUTUAL_CHAP;\r
+ }\r
} else if (Attempt->AuthenticationType == ISCSI_AUTH_TYPE_NONE) {\r
- Target->CHAPType = ISCSI_AUTH_TYPE_NONE;\r
+ Target->CHAPType = EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_TARGET_STRUCTURE_CHAP_TYPE_NO_CHAP;\r
}\r
\r
- Target->NicIndex = (UINT8) Index;\r
+ Target->NicIndex = (UINT8)Index;\r
\r
- if (NvData->IpMode == IP_MODE_IP4 || NvData->IpMode == IP_MODE_AUTOCONFIG) {\r
+ if ((NvData->IpMode == IP_MODE_IP4) || (NvData->IpMode == IP_MODE_AUTOCONFIG)) {\r
IScsiMapV4ToV6Addr (&NvData->TargetIp.v4, &Target->Ip);\r
- } else if (NvData->IpMode == IP_MODE_IP6 || NvData->IpMode == IP_MODE_AUTOCONFIG) {\r
+ } else if ((NvData->IpMode == IP_MODE_IP6) || (NvData->IpMode == IP_MODE_AUTOCONFIG)) {\r
CopyMem (&Target->Ip, &NvData->TargetIp, sizeof (EFI_IPv6_ADDRESS));\r
} else {\r
ASSERT (FALSE);\r
//\r
// Target iSCSI Name, CHAP name/secret, reverse CHAP name/secret.\r
//\r
- Length = (UINT16) AsciiStrLen (NvData->TargetName);\r
+ Length = (UINT16)AsciiStrLen (NvData->TargetName);\r
IScsiAddHeapItem (Heap, NvData->TargetName, Length);\r
\r
Target->IScsiNameLength = Length;\r
- Target->IScsiNameOffset = (UINT16) ((UINTN) *Heap - (UINTN) Table);\r
+ Target->IScsiNameOffset = (UINT16)((UINTN)*Heap - (UINTN)Table);\r
\r
if (Attempt->AuthenticationType == ISCSI_AUTH_TYPE_CHAP) {\r
//\r
// CHAP Name\r
//\r
- Length = (UINT16) AsciiStrLen (AuthConfig->CHAPName);\r
+ Length = (UINT16)AsciiStrLen (AuthConfig->CHAPName);\r
IScsiAddHeapItem (Heap, AuthConfig->CHAPName, Length);\r
- Target->CHAPNameLength = Length;\r
- Target->CHAPNameOffset = (UINT16) ((UINTN) *Heap - (UINTN) Table);\r
+ Target->CHAPNameLength = Length;\r
+ Target->CHAPNameOffset = (UINT16)((UINTN)*Heap - (UINTN)Table);\r
\r
//\r
// CHAP Secret\r
//\r
- Length = (UINT16) AsciiStrLen (AuthConfig->CHAPSecret);\r
+ Length = (UINT16)AsciiStrLen (AuthConfig->CHAPSecret);\r
IScsiAddHeapItem (Heap, AuthConfig->CHAPSecret, Length);\r
- Target->CHAPSecretLength = Length;\r
- Target->CHAPSecretOffset = (UINT16) ((UINTN) *Heap - (UINTN) Table);\r
+ Target->CHAPSecretLength = Length;\r
+ Target->CHAPSecretOffset = (UINT16)((UINTN)*Heap - (UINTN)Table);\r
\r
- if (Target->CHAPType == ISCSI_CHAP_MUTUAL) {\r
+ if (Target->CHAPType == EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_TARGET_STRUCTURE_CHAP_TYPE_MUTUAL_CHAP) {\r
//\r
// Reverse CHAP Name.\r
//\r
- Length = (UINT16) AsciiStrLen (AuthConfig->ReverseCHAPName);\r
+ Length = (UINT16)AsciiStrLen (AuthConfig->ReverseCHAPName);\r
IScsiAddHeapItem (Heap, AuthConfig->ReverseCHAPName, Length);\r
Target->ReverseCHAPNameLength = Length;\r
- Target->ReverseCHAPNameOffset = (UINT16) ((UINTN) *Heap - (UINTN) Table);\r
+ Target->ReverseCHAPNameOffset = (UINT16)((UINTN)*Heap - (UINTN)Table);\r
\r
//\r
// Reverse CHAP Secret.\r
//\r
- Length = (UINT16) AsciiStrLen (AuthConfig->ReverseCHAPSecret);\r
+ Length = (UINT16)AsciiStrLen (AuthConfig->ReverseCHAPSecret);\r
IScsiAddHeapItem (Heap, AuthConfig->ReverseCHAPSecret, Length);\r
Target->ReverseCHAPSecretLength = Length;\r
- Target->ReverseCHAPSecretOffset = (UINT16) ((UINTN) *Heap - (UINTN) Table);\r
+ Target->ReverseCHAPSecretOffset = (UINT16)((UINTN)*Heap - (UINTN)Table);\r
}\r
}\r
\r
- *SectionOffset = (UINT16) ((UINTN) Target - (UINTN) Table);\r
+ *SectionOffset = (UINT16)((UINTN)Target - (UINTN)Table);\r
SectionOffset++;\r
\r
//\r
// Advance to the next NIC/Target pair.\r
//\r
- Nic = (EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_NIC_STRUCTURE *) ((UINTN) Target +\r
- IBFT_ROUNDUP (sizeof (EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_TARGET_STRUCTURE)));\r
- Target = (EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_TARGET_STRUCTURE *) ((UINTN) Nic +\r
- IBFT_ROUNDUP (sizeof (EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_NIC_STRUCTURE)));\r
+ Nic = (EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_NIC_STRUCTURE *)((UINTN)Target +\r
+ IBFT_ROUNDUP (sizeof (EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_TARGET_STRUCTURE)));\r
+ Target = (EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_TARGET_STRUCTURE *)((UINTN)Nic +\r
+ IBFT_ROUNDUP (sizeof (EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_NIC_STRUCTURE)));\r
\r
Index++;\r
}\r
}\r
\r
-\r
/**\r
Publish and remove the iSCSI Boot Firmware Table according to the iSCSI\r
session status.\r
EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_HEADER *Table;\r
EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_POINTER *Rsdp;\r
EFI_ACPI_DESCRIPTION_HEADER *Rsdt;\r
+ EFI_ACPI_DESCRIPTION_HEADER *Xsdt;\r
UINT8 *Heap;\r
UINT8 Checksum;\r
- UINTN Index;\r
\r
+ Rsdt = NULL;\r
+ Xsdt = NULL;\r
\r
- Status = gBS->LocateProtocol (&gEfiAcpiTableProtocolGuid, NULL, (VOID **) &AcpiTableProtocol);\r
+ Status = gBS->LocateProtocol (&gEfiAcpiTableProtocolGuid, NULL, (VOID **)&AcpiTableProtocol);\r
if (EFI_ERROR (Status)) {\r
- return ;\r
+ return;\r
}\r
\r
//\r
// Find ACPI table RSD_PTR from the system table.\r
//\r
- for (Index = 0, Rsdp = NULL; Index < gST->NumberOfTableEntries; Index++) {\r
- if (CompareGuid (&(gST->ConfigurationTable[Index].VendorGuid), &gEfiAcpi20TableGuid) ||\r
- CompareGuid (&(gST->ConfigurationTable[Index].VendorGuid), &gEfiAcpi10TableGuid) ||\r
- CompareGuid (&(gST->ConfigurationTable[Index].VendorGuid), &gEfiAcpiTableGuid)\r
- ) {\r
- //\r
- // A match was found.\r
- //\r
- Rsdp = (EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_POINTER *) gST->ConfigurationTable[Index].VendorTable;\r
- break;\r
- }\r
+ Status = EfiGetSystemConfigurationTable (&gEfiAcpiTableGuid, (VOID **)&Rsdp);\r
+ if (EFI_ERROR (Status)) {\r
+ Status = EfiGetSystemConfigurationTable (&gEfiAcpi10TableGuid, (VOID **)&Rsdp);\r
}\r
\r
- if (Rsdp == NULL) {\r
- return ;\r
- } else {\r
- Rsdt = (EFI_ACPI_DESCRIPTION_HEADER *) (UINTN) Rsdp->RsdtAddress;\r
+ if (EFI_ERROR (Status) || (Rsdp == NULL)) {\r
+ return;\r
+ } else if ((Rsdp->Revision >= EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER_REVISION) && (Rsdp->XsdtAddress != 0)) {\r
+ Xsdt = (EFI_ACPI_DESCRIPTION_HEADER *)(UINTN)Rsdp->XsdtAddress;\r
+ } else if (Rsdp->RsdtAddress != 0) {\r
+ Rsdt = (EFI_ACPI_DESCRIPTION_HEADER *)(UINTN)Rsdp->RsdtAddress;\r
+ }\r
+\r
+ if ((Xsdt == NULL) && (Rsdt == NULL)) {\r
+ return;\r
}\r
\r
if (mIbftInstalled) {\r
mTableKey\r
);\r
if (EFI_ERROR (Status)) {\r
- return ;\r
+ return;\r
}\r
+\r
mIbftInstalled = FALSE;\r
}\r
\r
//\r
// If there is no valid attempt configuration, just return.\r
//\r
- if ((!mPrivate->EnableMpio && mPrivate->ValidSinglePathCount == 0) ||\r
- (mPrivate->EnableMpio && mPrivate->MpioCount <= mPrivate->Krb5MpioCount)) {\r
- return ;\r
+ if ((!mPrivate->EnableMpio && (mPrivate->ValidSinglePathCount == 0)) ||\r
+ (mPrivate->EnableMpio && (mPrivate->MpioCount <= mPrivate->Krb5MpioCount)))\r
+ {\r
+ return;\r
}\r
\r
//\r
//\r
Table = AllocateZeroPool (IBFT_MAX_SIZE);\r
if (Table == NULL) {\r
- return ;\r
+ return;\r
}\r
\r
- Heap = (UINT8 *) Table + IBFT_HEAP_OFFSET;\r
+ Heap = (UINT8 *)Table + IBFT_HEAP_OFFSET;\r
\r
//\r
// Fill in the various section of the iSCSI Boot Firmware Table.\r
//\r
- IScsiInitIbfTableHeader (Table, Rsdt->OemId, &Rsdt->OemTableId);\r
+ if (Rsdp->Revision >= EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER_REVISION) {\r
+ IScsiInitIbfTableHeader (Table, Xsdt->OemId, &Xsdt->OemTableId);\r
+ } else {\r
+ IScsiInitIbfTableHeader (Table, Rsdt->OemId, &Rsdt->OemTableId);\r
+ }\r
+\r
IScsiInitControlSection (Table);\r
IScsiFillInitiatorSection (Table, &Heap);\r
IScsiFillNICAndTargetSections (Table, &Heap);\r
\r
- Checksum = CalculateCheckSum8((UINT8 *)Table, Table->Length);\r
+ Checksum = CalculateCheckSum8 ((UINT8 *)Table, Table->Length);\r
Table->Checksum = Checksum;\r
\r
//\r
Table->Length,\r
&mTableKey\r
);\r
- if (EFI_ERROR(Status)) {\r
+ if (EFI_ERROR (Status)) {\r
return;\r
}\r
\r