[install] Add reg_set_sz() function
[sanbootconf.git] / driver / sbft.h
1 #ifndef _SBFT_H
2 #define _SBFT_H
3
4 /*
5  * Copyright (C) 2009 Fen Systems Ltd <mbrown@fensystems.co.uk>.
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  *
12  *   Redistributions of source code must retain the above copyright
13  *   notice, this list of conditions and the following disclaimer.
14  *
15  *   Redistributions in binary form must reproduce the above copyright
16  *   notice, this list of conditions and the following disclaimer in
17  *   the documentation and/or other materials provided with the
18  *   distribution.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
24  * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
25  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
26  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
27  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
29  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
31  * OF THE POSSIBILITY OF SUCH DAMAGE.
32  */
33
34 /** @file
35  *
36  * SRP boot firmware table
37  *
38  * The working draft specification for the SRP boot firmware table can
39  * be found at
40  *
41  *   http://etherboot.org/wiki/srp/sbft
42  *
43  */
44
45 #include "acpi.h"
46
47 /** SRP Boot Firmware Table signature */
48 #define SBFT_SIG "sBFT"
49
50 /**
51  * SRP Boot Firmware Table
52  */
53 #pragma pack(1)
54 typedef struct _SBFT_TABLE {
55         /** ACPI header */
56         ACPI_DESCRIPTION_HEADER acpi;
57         /** Offset to SCSI subtable */
58         USHORT scsi_offset;
59         /** Offset to SRP subtable */
60         USHORT srp_offset;
61         /** Offset to IB subtable, if present */
62         USHORT ib_offset;
63         /** Reserved */
64         UCHAR reserved[6];
65 } SBFT_TABLE, *PSBFT_TABLE;
66 #pragma pack()
67
68 /**
69  * sBFT SCSI subtable
70  */
71 #pragma pack(1)
72 typedef struct _SBFT_SCSI_SUBTABLE {
73         /** LUN */
74         ULONGLONG lun;
75 } SBFT_SCSI_SUBTABLE, *PSBFT_SCSI_SUBTABLE;
76 #pragma pack()
77
78 /** An SRP port ID */
79 #pragma pack(1)
80 typedef struct _SRP_PORT_ID {
81         union {
82                 UCHAR bytes[16];
83                 USHORT words[8];
84                 ULONG dwords[4];
85         } u;
86 } SRP_PORT_ID, *PSRP_PORT_ID;
87 #pragma pack()
88
89 /**
90  * sBFT SRP subtable
91  */
92 #pragma pack(1)
93 typedef struct _SBFT_SRP_SUBTABLE {
94         /** Initiator port identifier */
95         SRP_PORT_ID initiator_port_id;
96         /** Target port identifier */
97         SRP_PORT_ID target_port_id;
98 } SBFT_SRP_SUBTABLE, *PSBFT_SRP_SUBTABLE;
99 #pragma pack()
100
101 /** An Infiniband GUID */
102 #pragma pack(1)
103 typedef struct _IB_GUID {
104         union {
105                 UCHAR bytes[8];
106                 USHORT words[4];
107                 ULONG dwords[2];
108         } u;
109 } IB_GUID, *PIB_GUID;
110 #pragma pack()
111
112 /** An Infiniband GID */
113 #pragma pack(1)
114 typedef struct _IB_GID {
115         union {
116                 UCHAR bytes[16];
117                 USHORT words[8];
118                 ULONG dwords[4];
119                 IB_GUID guid[2];
120         } u;
121 } IB_GID, *PIB_GID;
122 #pragma pack()
123
124 /**
125  * sBFT IB subtable
126  */
127 #pragma pack(1)
128 typedef struct _SBFT_IB_SUBTABLE {
129         /** Source GID */
130         IB_GID sgid;
131         /** Destination GID */
132         IB_GID dgid;
133         /** Service ID */
134         IB_GUID service_id;
135         /** Partition key */
136         USHORT pkey;
137         /** Reserved */
138         UCHAR reserved[6];
139 } SBFT_IB_SUBTABLE, *PSBFT_IB_SUBTABLE;
140 #pragma pack()
141
142 extern VOID parse_sbft ( PSBFT_TABLE sbft );
143
144 #endif /* _SBFT_H */