summaryrefslogtreecommitdiffstats
path: root/MdePkg/Include/IndustryStandard/IScsiBootFirmwareTable.h
blob: 1fd2d6df7231df15e2f8cda4ee4ef75d9086078f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
/** @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.<BR>
  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