[iscsiboot] Remove extraneous comment block
[sanbootconf.git] / driver / ibft.h
1 #ifndef _IBFT_H
2 #define _IBFT_H
3
4 /*
5  * Copyright Fen Systems Ltd. 2007.  Portions of this code are derived
6  * from IBM Corporation Sample Programs.  Copyright IBM Corporation
7  * 2004, 2007.  All rights reserved.
8  *
9  * Permission is hereby granted, free of charge, to any person
10  * obtaining a copy of this software and associated documentation
11  * files (the "Software"), to deal in the Software without
12  * restriction, including without limitation the rights to use, copy,
13  * modify, merge, publish, distribute, sublicense, and/or sell copies
14  * of the Software, and to permit persons to whom the Software is
15  * furnished to do so, subject to the following conditions:
16  *
17  * The above copyright notice and this permission notice shall be
18  * included in all copies or substantial portions of the Software.
19  *
20  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
24  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
25  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
26  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
27  * SOFTWARE.
28  *
29  */
30
31 /** @file
32  *
33  * iSCSI boot firmware table
34  *
35  * The information in this file is derived from the document "iSCSI
36  * Boot Firmware Table (iBFT)" as published by IBM at
37  *
38  * ftp://ftp.software.ibm.com/systems/support/system_x_pdf/ibm_iscsi_boot_firmware_table_v1.02.pdf
39  *
40  */
41
42 #include "acpi.h"
43
44 /** iSCSI Boot Firmware Table signature */
45 #define IBFT_SIG "iBFT"
46
47 /** A string within the iBFT */
48 #pragma pack(1)
49 typedef struct _IBFT_STRING {
50         /** Length of string */
51         USHORT length;
52         /** Offset to string */
53         USHORT offset;
54 } IBFT_STRING, *PIBFT_STRING;
55 #pragma pack()
56
57 /** An IP address within the iBFT */
58 #pragma pack(1)
59 typedef struct _IBFT_IPADDR {
60         /** Reserved; must be zero */
61         USHORT zeroes[5];
62         /** Must be 0xffff if IPv4 address is present, otherwise zero */
63         USHORT ones;
64         /** The IPv4 address, or zero if not present */
65         ULONG in;
66 } IBFT_IPADDR, *PIBFT_IPADDR;
67 #pragma pack()
68
69 /**
70  * iBFT structure header
71  *
72  * This structure is common to several sections within the iBFT.
73  */
74 #pragma pack()
75 typedef struct _IBFT_HEADER {
76         /** Structure ID
77          *
78          * This is an IBFT_STRUCTURE_ID_XXX constant
79          */
80         UCHAR structure_id;
81         /** Version (always 1) */
82         UCHAR version;
83         /** Length, including this header */
84         USHORT length;
85         /** Index 
86          *
87          * This is the number of the NIC or Target, when applicable.
88          */
89         UCHAR index;
90         /** Flags */
91         UCHAR flags;
92 } IBFT_HEADER, *PIBFT_HEADER;
93 #pragma pack()
94
95 /**
96  * iBFT Control structure
97  *
98  */
99 #pragma pack(1)
100 typedef struct _IBFT_CONTROL {
101         /** Common header */
102         IBFT_HEADER header;
103         /** Extensions */
104         USHORT extensions;
105         /** Offset to Initiator structure */
106         USHORT initiator;
107         /** Offset to NIC structure for NIC 0 */
108         USHORT nic_0;
109         /** Offset to Target structure for target 0 */
110         USHORT target_0;
111         /** Offset to NIC structure for NIC 1 */
112         USHORT nic_1;
113         /** Offset to Target structure for target 1 */
114         USHORT target_1;
115 } IBFT_CONTROL, *PIBFT_CONTROL;
116 #pragma pack()
117
118 /** Structure ID for Control section */
119 #define IBFT_STRUCTURE_ID_CONTROL 0x01
120
121 /** Attempt login only to specified target
122  *
123  * If this flag is not set, all targets will be logged in to.
124  */
125 #define IBFT_FL_CONTROL_SINGLE_LOGIN_ONLY 0x01
126
127 /**
128  * iBFT Initiator structure
129  *
130  */
131 #pragma pack(1)
132 typedef struct _IBFT_INITIATOR {
133         /** Common header */
134         IBFT_HEADER header;
135         /** iSNS server */
136         IBFT_IPADDR isns_server;
137         /** SLP server */
138         IBFT_IPADDR slp_server;
139         /** Primary and secondary Radius servers */
140         IBFT_IPADDR radius[2];
141         /** Initiator name */
142         IBFT_STRING initiator_name;
143 } IBFT_INITIATOR, *PIBFT_INITIATOR;
144 #pragma pack()
145
146 /** Structure ID for Initiator section */
147 #define IBFT_STRUCTURE_ID_INITIATOR 0x02
148
149 /** Initiator block valid */
150 #define IBFT_FL_INITIATOR_BLOCK_VALID 0x01
151
152 /** Initiator firmware boot selected */
153 #define IBFT_FL_INITIATOR_FIRMWARE_BOOT_SELECTED 0x02
154
155 /**
156  * iBFT NIC structure
157  *
158  */
159 #pragma pack(1)
160 typedef struct _IBFT_NIC {
161         /** Common header */
162         IBFT_HEADER header;
163         /** IP address */
164         IBFT_IPADDR ip_address;
165         /** Subnet mask
166          *
167          * This is the length of the subnet mask in bits (e.g. /24).
168          */
169         UCHAR subnet_mask_prefix;
170         /** Origin */
171         UCHAR origin;
172         /** Default gateway */
173         IBFT_IPADDR gateway;
174         /** Primary and secondary DNS servers */
175         IBFT_IPADDR dns[2];
176         /** DHCP server */
177         IBFT_IPADDR dhcp;
178         /** VLAN tag */
179         USHORT vlan;
180         /** MAC address */
181         UCHAR mac_address[6];
182         /** PCI bus:dev:fn */
183         USHORT pci_bus_dev_func;
184         /** Hostname */
185         IBFT_STRING hostname;
186 } IBFT_NIC, *PIBFT_NIC;
187 #pragma pack()
188
189 /** Structure ID for NIC section */
190 #define IBFT_STRUCTURE_ID_NIC 0x03
191
192 /** NIC block valid */
193 #define IBFT_FL_NIC_BLOCK_VALID 0x01
194
195 /** NIC firmware boot selected */
196 #define IBFT_FL_NIC_FIRMWARE_BOOT_SELECTED 0x02
197
198 /** NIC global / link local */
199 #define IBFT_FL_NIC_GLOBAL 0x04
200
201 /**
202  * iBFT Target structure
203  *
204  */
205 #pragma pack(1)
206 typedef struct _IBFT_TARGET {
207         /** Common header */
208         IBFT_HEADER header;
209         /** IP address */
210         IBFT_IPADDR ip_address;
211         /** TCP port */
212         USHORT socket;
213         /** Boot LUN */
214         ULONGLONG boot_lun;
215         /** CHAP type
216          *
217          * This is an IBFT_CHAP_XXX constant.
218          */
219         UCHAR chap_type;
220         /** NIC association */
221         UCHAR nic_association;
222         /** Target name */
223         IBFT_STRING target_name;
224         /** CHAP name */
225         IBFT_STRING chap_name;
226         /** CHAP secret */
227         IBFT_STRING chap_secret;
228         /** Reverse CHAP name */
229         IBFT_STRING reverse_chap_name;
230         /** Reverse CHAP secret */
231         IBFT_STRING reverse_chap_secret;
232 } IBFT_TARGET, *PIBFT_TARGET;
233 #pragma pack()
234
235 /** Structure ID for Target section */
236 #define IBFT_STRUCTURE_ID_TARGET 0x04
237
238 /** Target block valid */
239 #define IBFT_FL_TARGET_BLOCK_VALID 0x01
240
241 /** Target firmware boot selected */
242 #define IBFT_FL_TARGET_FIRMWARE_BOOT_SELECTED 0x02
243
244 /** Target use Radius CHAP */
245 #define IBFT_FL_TARGET_USE_CHAP 0x04
246
247 /** Target use Radius rCHAP */
248 #define IBFT_FL_TARGET_USE_RCHAP 0x08
249
250 /* Values for chap_type */
251 #define IBFT_CHAP_NONE          0       /**< No CHAP authentication */
252 #define IBFT_CHAP_ONE_WAY       1       /**< One-way CHAP */
253 #define IBFT_CHAP_MUTUAL        2       /**< Mutual CHAP */
254
255 /**
256  * iSCSI Boot Firmware Table (iBFT)
257  */
258 #pragma pack(1)
259 typedef struct _IBFT_TABLE {
260         /** ACPI header */
261         ACPI_DESCRIPTION_HEADER acpi;
262         /** Reserved */
263         UCHAR reserved[12];
264         /** Control structure */
265         IBFT_CONTROL control;
266 } IBFT_TABLE, *PIBFT_TABLE;
267 #pragma pack()
268
269 #endif /* _IBFT_H */