/** @file The definition for iSCSI Boot Firmware Table, it's defined in Microsoft's iSCSI Boot Firmware Table(iBFT) as Defined in ACPI 3.0b Specification. Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef _ISCSI_BOOT_FIRMWARE_TABLE_H_ #define _ISCSI_BOOT_FIRMWARE_TABLE_H_ #define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_REVISION 0x01 #define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_STRUCTURE_ALIGNMENT 8 /// /// Structure Type/ID /// #define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_RESERVED_STRUCTURE_ID 0 #define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_CONTROL_STRUCTURE_ID 1 #define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_INITIATOR_STRUCTURE_ID 2 #define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_NIC_STRUCTURE_ID 3 #define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_TARGET_STRUCTURE_ID 4 #define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_EXTERNSIONS_STRUCTURE_ID 5 /// /// from the definition of IP_PREFIX_ORIGIN Enumeration in MSDN, /// not defined in Microsoft iBFT document. /// typedef enum { IpPrefixOriginOther = 0, IpPrefixOriginManual, IpPrefixOriginWellKnown, IpPrefixOriginDhcp, IpPrefixOriginRouterAdvertisement, IpPrefixOriginUnchanged = 16 } IP_PREFIX_VALUE; #pragma pack(1) /// /// iBF Table Header /// typedef struct { UINT32 Signature; UINT32 Length; UINT8 Revision; UINT8 Checksum; UINT8 OemId[6]; UINT64 OemTableId; UINT8 Reserved[24]; } EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_HEADER; /// /// Common Header of Boot Firmware Table Structure /// typedef struct { UINT8 StructureId; UINT8 Version; UINT16 Length; UINT8 Index; UINT8 Flags; } EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_STRUCTURE_HEADER; /// /// Control Structure /// typedef struct { EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_STRUCTURE_HEADER Header; UINT16 Extensions; UINT16 InitiatorOffset; UINT16 NIC0Offset; UINT16 Target0Offset; UINT16 NIC1Offset; UINT16 Target1Offset; } EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_CONTROL_STRUCTURE; #define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_CONTROL_STRUCTURE_VERSION 0x1 #define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_CONTROL_STRUCTURE_FLAG_BOOT_FAILOVER BIT0 /// /// Initiator Structure /// typedef struct { EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_STRUCTURE_HEADER Header; EFI_IPv6_ADDRESS ISnsServer; EFI_IPv6_ADDRESS SlpServer; EFI_IPv6_ADDRESS PrimaryRadiusServer; EFI_IPv6_ADDRESS SecondaryRadiusServer; UINT16 IScsiNameLength; UINT16 IScsiNameOffset; } EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_INITIATOR_STRUCTURE; #define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_INITIATOR_STRUCTURE_VERSION 0x1 #define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_INITIATOR_STRUCTURE_FLAG_BLOCK_VALID BIT0 #define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_INITIATOR_STRUCTURE_FLAG_BOOT_SELECTED BIT1 /// /// NIC Structure /// typedef struct { EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_STRUCTURE_HEADER Header; EFI_IPv6_ADDRESS Ip; UINT8 SubnetMaskPrefixLength; UINT8 Origin; EFI_IPv6_ADDRESS Gateway; EFI_IPv6_ADDRESS PrimaryDns; EFI_IPv6_ADDRESS SecondaryDns; EFI_IPv6_ADDRESS DhcpServer; UINT16 VLanTag; UINT8 Mac[6]; UINT16 PciLocation; UINT16 HostNameLength; UINT16 HostNameOffset; } EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_NIC_STRUCTURE; #define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_NIC_STRUCTURE_VERSION 0x1 #define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_NIC_STRUCTURE_FLAG_BLOCK_VALID BIT0 #define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_NIC_STRUCTURE_FLAG_BOOT_SELECTED BIT1 #define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_NIC_STRUCTURE_FLAG_GLOBAL BIT2 /// /// Target Structure /// typedef struct { EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_STRUCTURE_HEADER Header; EFI_IPv6_ADDRESS Ip; UINT16 Port; UINT8 BootLun[8]; UINT8 CHAPType; UINT8 NicIndex; UINT16 IScsiNameLength; UINT16 IScsiNameOffset; UINT16 CHAPNameLength; UINT16 CHAPNameOffset; UINT16 CHAPSecretLength; UINT16 CHAPSecretOffset; UINT16 ReverseCHAPNameLength; UINT16 ReverseCHAPNameOffset; UINT16 ReverseCHAPSecretLength; UINT16 ReverseCHAPSecretOffset; } EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_TARGET_STRUCTURE; #define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_TARGET_STRUCTURE_VERSION 0x1 #define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_TARGET_STRUCTURE_FLAG_BLOCK_VALID BIT0 #define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_TARGET_STRUCTURE_FLAG_BOOT_SELECTED BIT1 #define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_TARGET_STRUCTURE_FLAG_RADIUS_CHAP BIT2 #define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_TARGET_STRUCTURE_FLAG_RADIUS_RCHAP BIT3 #define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_TARGET_STRUCTURE_CHAP_TYPE_NO_CHAP 0 #define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_TARGET_STRUCTURE_CHAP_TYPE_CHAP 1 #define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_TARGET_STRUCTURE_CHAP_TYPE_MUTUAL_CHAP 2 #pragma pack() #endif