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