[contrib] Allow Network Protocol header to display in rom-o-matic
[gpxe.git] / src / arch / i386 / include / gpxe / sbft.h
blob30038436d2c1d6ad7bcca4cebfd67c30c61b502f
1 #ifndef _GPXE_SBFT_H
2 #define _GPXE_SBFT_H
4 /*
5 * Copyright (C) 2009 Fen Systems Ltd <mbrown@fensystems.co.uk>.
6 * All rights reserved.
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
12 * Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
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.
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.
34 FILE_LICENCE ( BSD2 );
36 /** @file
38 * SRP boot firmware table
40 * The working draft specification for the SRP boot firmware table can
41 * be found at
43 * http://etherboot.org/wiki/srp/sbft
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>
53 /** SRP Boot Firmware Table signature */
54 #define SBFT_SIG "sBFT"
56 /** An offset from the start of the sBFT */
57 typedef uint16_t sbft_off_t;
59 /**
60 * SRP Boot Firmware Table
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 ));
75 /**
76 * sBFT SCSI subtable
78 struct sbft_scsi_subtable {
79 /** LUN */
80 struct scsi_lun lun;
81 } __attribute__ (( packed ));
83 /**
84 * sBFT SRP subtable
86 struct sbft_srp_subtable {
87 /** Initiator and target ports */
88 struct srp_port_ids port_ids;
89 } __attribute__ (( packed ));
91 /**
92 * sBFT IB subtable
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 ));
108 * An sBFT created by gPXE
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 ) ));
121 struct srp_device;
123 extern int sbft_fill_data ( struct srp_device *srp );
125 #endif /* _GPXE_SBFT_H */