[infiniband] Add support for the SRP Boot Firmware Table
[people/peper/gpxe.git] / src / arch / i386 / include / gpxe / sbft.h
1 #ifndef _GPXE_SBFT_H
2 #define _GPXE_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_LICENCE ( BSD2 );
35
36 /** @file
37  *
38  * SRP boot firmware table
39  *
40  * The working draft specification for the SRP boot firmware table can
41  * be found at
42  *
43  *   http://etherboot.org/wiki/srp/sbft
44  *
45  */
46
47 #include <stdint.h>
48 #include <gpxe/acpi.h>
49 #include <gpxe/scsi.h>
50 #include <gpxe/srp.h>
51 #include <gpxe/ib_srp.h>
52
53 /** SRP Boot Firmware Table signature */
54 #define SBFT_SIG "sBFT"
55
56 /** An offset from the start of the sBFT */
57 typedef uint16_t sbft_off_t;
58
59 /**
60  * SRP Boot Firmware Table
61  */
62 struct sbft_table {
63         /** ACPI header */
64         struct acpi_description_header acpi;
65         /** Offset to SCSI subtable */
66         sbft_off_t scsi_offset;
67         /** Offset to SRP subtable */
68         sbft_off_t srp_offset;
69         /** Offset to IB subtable, if present */
70         sbft_off_t ib_offset;
71         /** Reserved */
72         uint8_t reserved[6];
73 } __attribute__ (( packed ));
74
75 /**
76  * sBFT SCSI subtable
77  */
78 struct sbft_scsi_subtable {
79         /** LUN */
80         struct scsi_lun lun;
81 } __attribute__ (( packed ));
82
83 /**
84  * sBFT SRP subtable
85  */
86 struct sbft_srp_subtable {
87         /** Initiator and target ports */
88         struct srp_port_ids port_ids;
89 } __attribute__ (( packed ));
90
91 /**
92  * sBFT IB subtable
93  */
94 struct sbft_ib_subtable {
95         /** Source GID */
96         struct ib_gid sgid;
97         /** Destination GID */
98         struct ib_gid dgid;
99         /** Service ID */
100         struct ib_gid_half service_id;
101         /** Partition key */
102         uint16_t pkey;
103         /** Reserved */
104         uint8_t reserved[6];
105 } __attribute__ (( packed ));
106
107 /**
108  * An sBFT created by gPXE
109  */
110 struct gpxe_sbft {
111         /** The table header */
112         struct sbft_table table;
113         /** The SCSI subtable */
114         struct sbft_scsi_subtable scsi;
115         /** The SRP subtable */
116         struct sbft_srp_subtable srp;
117         /** The IB subtable */
118         struct sbft_ib_subtable ib;
119 } __attribute__ (( packed, aligned ( 16 ) ));
120
121 struct srp_device;
122
123 extern int sbft_fill_data ( struct srp_device *srp );
124
125 #endif /* _GPXE_SBFT_H */