Home | History | Annotate | Download | only in IndustryStandard
      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 ///
     36 typedef 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 ///
     50 typedef 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 ///
     63 typedef 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 ///
     74 typedef 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 ///
     91 typedef 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 ///
    109 typedef 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 ///
    134 typedef 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