• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 */
126