====== SRP boot firmware table ====== ===== Introduction ===== The SRP Boot Firmware Table (sBFT) is a block of information containing various parameters useful to the SRP boot process. It is the mechanism whereby the boot firmware conveys information about the boot device to the loaded operating system. ===== Location ===== The sBFT can be located by scanning through base memory (address 0x00000 to address 0x09FFFF) for the table header signature. The table must be aligned on a 16-byte boundary, and the checksum must be correct. ===== Conventions ===== The sBFT follows the structure of an ACPI table. All scalar quantities are little-endian. All fields marked as reserved must be filled with zeroes. ===== Structure ===== The sBFT consists of an ACPI Subtable, a SCSI Subtable, an SRP Subtable, and one or more transport-specific subtables such as the IB Subtable. ^ Content ^ Byte Offset ^ Byte Length ^ | ACPI Subtable | 0 | 36 | | Offset to SCSI Subtable | 36 | 2 | | Offset to SRP Subtable | 38 | 2 | | Offset to IB Subtable | 40 | 2 | | Reserved | 42 | 6 | == Offset to SCSI Subtable == This is the offset (in bytes from the start of the sBFT) to the SCSI Subtable. == Offset to SRP Subtable == This is the offset (in bytes from the start of the sBFT) to the SRP Subtable. == Offset to IB Subtable == This is the offset (in bytes from the start of the sBFT) to the IB Subtable. A zero value indicates that no IB Subtable is present. ===== ACPI Subtable ===== The ACPI Subtable contains the generic header fields to allow for identification of the sBFT. ^ Field ^ Byte Offset ^ Byte Length ^ | Signature | 0 | 4 | | Length | 4 | 4 | | Revision | 8 | 1 | | Checksum | 9 | 1 | | OEMID | 10 | 6 | | OEM Table ID | 16 | 8 | | Reserved | 24 | 12 | == Signature == 'sBFT' signature for the SRP Boot Firmware Table. == Length == Length in bytes of the entire sBFT, including the signature. == Revision == Must be set to 1. == Checksum == Entire table must sum to zero. == OEMID == ACPI OEM ID. All unused trailing bytes must be zero. == OEM Table ID == For the sBFT the Table ID is the Manufacturer's Model ID. All unused trailing bytes must be zero. ===== SCSI Subtable ===== The SCSI Subtable contains values that are required for all SRP sessions, independent of transport type. ^ Field ^ Byte Offset ^ Byte Length ^ | Logical unit number | 0 | 8 | == Logical unit number == This is the SCSI LUN, as defined by the SCSI Architecture Model-2 standard. ===== SRP Subtable ===== The SRP Subtable contains values that are required for all SRP sessions, independent of transport type. ^ Field ^ Byte Offset ^ Byte Length ^ | Initiator port identifier | 0 | 16 | | Target port identifier | 16 | 16 | == Initiator port identifier == This is the initiator port identifier as defined in the SRP specification and used in the SRP_LOGIN_REQ request. == Target port identifier == This is the target port identifier as defined in the SRP specification and used in the SRP_LOGIN_REQ request. ===== IB Subtable ===== The IB Subtable, if present, contains values that are required for all SRP sessions running over Infiniband transport. Note that the SRP specification imposes an Infiniband-specific interpretation on the initiator and target port identifiers as found in the SRP Subtable (above); some values with Infiniband-specific meanings (e.g. the I/O Controller GUID) can therefore be derived from the values in the SRP Subtable and are not duplicated here in the IB Subtable. ^ Field ^ Byte Offset ^ Byte Length ^ | Source GID | 0 | 16 | | Destination GID | 16 | 16 | | Service identifier | 32 | 8 | | Partition key | 40 | 2 | | Reserved | 42 | 6 | == Source GID == This is a GID belonging to the HCA port used to initiate the SRP connection. == Destination GID == This is the GID of the SRP target. == Service identifier == This is the service identifier of the SRP target. == Partition key == This is the partition key of the SRP target.