1/** @file 2 The definition for iSCSI Boot Firmware Table, it's defined in Microsoft's 3 iSCSI Boot Firmware Table(iBFT) as Defined in ACPI 3.0b Specification. 4 5 Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR> 6 This program and the accompanying materials 7 are licensed and made available under the terms and conditions of the BSD License 8 which accompanies this distribution. The full text of the license may be found at 9 http://opensource.org/licenses/bsd-license.php 10 11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 13 14**/ 15 16#ifndef _ISCSI_BOOT_FIRMWARE_TABLE_H_ 17#define _ISCSI_BOOT_FIRMWARE_TABLE_H_ 18 19#define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_REVISION 0x01 20#define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_STRUCTURE_ALIGNMENT 8 21 22/// 23/// Structure Type/ID 24/// 25#define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_RESERVED_STRUCTURE_ID 0 26#define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_CONTROL_STRUCTURE_ID 1 27#define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_INITIATOR_STRUCTURE_ID 2 28#define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_NIC_STRUCTURE_ID 3 29#define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_TARGET_STRUCTURE_ID 4 30#define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_EXTERNSIONS_STRUCTURE_ID 5 31 32/// 33/// from the definition of IP_PREFIX_ORIGIN Enumeration in MSDN, 34/// not defined in Microsoft iBFT document. 35/// 36typedef enum { 37 IpPrefixOriginOther = 0, 38 IpPrefixOriginManual, 39 IpPrefixOriginWellKnown, 40 IpPrefixOriginDhcp, 41 IpPrefixOriginRouterAdvertisement, 42 IpPrefixOriginUnchanged = 16 43} IP_PREFIX_VALUE; 44 45#pragma pack(1) 46 47/// 48/// iBF Table Header 49/// 50typedef struct { 51 UINT32 Signature; 52 UINT32 Length; 53 UINT8 Revision; 54 UINT8 Checksum; 55 UINT8 OemId[6]; 56 UINT64 OemTableId; 57 UINT8 Reserved[24]; 58} EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_HEADER; 59 60/// 61/// Common Header of Boot Firmware Table Structure 62/// 63typedef struct { 64 UINT8 StructureId; 65 UINT8 Version; 66 UINT16 Length; 67 UINT8 Index; 68 UINT8 Flags; 69} EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_STRUCTURE_HEADER; 70 71/// 72/// Control Structure 73/// 74typedef struct { 75 EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_STRUCTURE_HEADER Header; 76 UINT16 Extensions; 77 UINT16 InitiatorOffset; 78 UINT16 NIC0Offset; 79 UINT16 Target0Offset; 80 UINT16 NIC1Offset; 81 UINT16 Target1Offset; 82} EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_CONTROL_STRUCTURE; 83 84#define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_CONTROL_STRUCTURE_VERSION 0x1 85 86#define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_CONTROL_STRUCTURE_FLAG_BOOT_FAILOVER BIT0 87 88/// 89/// Initiator Structure 90/// 91typedef struct { 92 EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_STRUCTURE_HEADER Header; 93 EFI_IPv6_ADDRESS ISnsServer; 94 EFI_IPv6_ADDRESS SlpServer; 95 EFI_IPv6_ADDRESS PrimaryRadiusServer; 96 EFI_IPv6_ADDRESS SecondaryRadiusServer; 97 UINT16 IScsiNameLength; 98 UINT16 IScsiNameOffset; 99} EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_INITIATOR_STRUCTURE; 100 101#define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_INITIATOR_STRUCTURE_VERSION 0x1 102 103#define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_INITIATOR_STRUCTURE_FLAG_BLOCK_VALID BIT0 104#define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_INITIATOR_STRUCTURE_FLAG_BOOT_SELECTED BIT1 105 106/// 107/// NIC Structure 108/// 109typedef struct { 110 EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_STRUCTURE_HEADER Header; 111 EFI_IPv6_ADDRESS Ip; 112 UINT8 SubnetMaskPrefixLength; 113 UINT8 Origin; 114 EFI_IPv6_ADDRESS Gateway; 115 EFI_IPv6_ADDRESS PrimaryDns; 116 EFI_IPv6_ADDRESS SecondaryDns; 117 EFI_IPv6_ADDRESS DhcpServer; 118 UINT16 VLanTag; 119 UINT8 Mac[6]; 120 UINT16 PciLocation; 121 UINT16 HostNameLength; 122 UINT16 HostNameOffset; 123} EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_NIC_STRUCTURE; 124 125#define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_NIC_STRUCTURE_VERSION 0x1 126 127#define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_NIC_STRUCTURE_FLAG_BLOCK_VALID BIT0 128#define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_NIC_STRUCTURE_FLAG_BOOT_SELECTED BIT1 129#define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_NIC_STRUCTURE_FLAG_GLOBAL BIT2 130 131/// 132/// Target Structure 133/// 134typedef struct { 135 EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_STRUCTURE_HEADER Header; 136 EFI_IPv6_ADDRESS Ip; 137 UINT16 Port; 138 UINT8 BootLun[8]; 139 UINT8 CHAPType; 140 UINT8 NicIndex; 141 UINT16 IScsiNameLength; 142 UINT16 IScsiNameOffset; 143 UINT16 CHAPNameLength; 144 UINT16 CHAPNameOffset; 145 UINT16 CHAPSecretLength; 146 UINT16 CHAPSecretOffset; 147 UINT16 ReverseCHAPNameLength; 148 UINT16 ReverseCHAPNameOffset; 149 UINT16 ReverseCHAPSecretLength; 150 UINT16 ReverseCHAPSecretOffset; 151} EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_TARGET_STRUCTURE; 152 153#define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_TARGET_STRUCTURE_VERSION 0x1 154 155#define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_TARGET_STRUCTURE_FLAG_BLOCK_VALID BIT0 156#define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_TARGET_STRUCTURE_FLAG_BOOT_SELECTED BIT1 157#define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_TARGET_STRUCTURE_FLAG_RADIUS_CHAP BIT2 158#define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_TARGET_STRUCTURE_FLAG_RADIUS_RCHAP BIT3 159 160#define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_TARGET_STRUCTURE_CHAP_TYPE_NO_CHAP 0 161#define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_TARGET_STRUCTURE_CHAP_TYPE_CHAP 1 162#define EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_TARGET_STRUCTURE_CHAP_TYPE_MUTUAL_CHAP 2 163 164#pragma pack() 165 166#endif 167 168