| # BIOS Support | |
| Redfish supports the BIOS Attribute Registry, which provides users with a list | |
| of BIOS attributes supported in the BIOS configuration. To incorporate BIOS | |
| attribute registry support in openBMC, BmcWeb is designed to read data from the | |
| Base BIOS Table. PLDM populates the Base BIOS Table for the BIOS Config Manager | |
| based on BIOS JSON files. BIOS functionality is integrated into PLDM according | |
| to the guidelines in the | |
| [PLDM BIOS Specification](https://www.dmtf.org/sites/default/files/standards/documents/DSP0247_1.0.0.pdf). | |
| BIOS attributes, also referred to as BIOS parameters or configuration settings, | |
| are structured within JSON files. Each attribute is defined by its name, type, | |
| and type-specific metadata. PLDM parses | |
| [BIOS JSON file](https://github.com/openbmc/pldm/tree/master/oem/ibm/configurations/bios/com.ibm.Hardware.Chassis.Model.Rainier2U) | |
| and creates the | |
| [Base BIOS Table](https://github.com/openbmc/phosphor-dbus-interfaces/blob/master/yaml/xyz/openbmc_project/BIOSConfig/Manager.interface.yaml#L62) | |
| hosted by [BIOS Config Manager](https://github.com/openbmc/bios-settings-mgr). | |
| The design is documented in | |
| [DesignDoc](https://github.com/openbmc/docs/blob/master/designs/remote-bios-configuration.md). | |
| Redfish supports | |
| [BIOS Attribute registry](https://redfish.dmtf.org/schemas/v1/AttributeRegistry.v1_3_8.json), | |
| which provides users with the list of BIOS attributes supported in the BIOS | |
| configuration. The BIOS Attribute registry data is supposed to be derived from | |
| [Base BIOS Table](https://github.com/openbmc/phosphor-dbus-interfaces/blob/master/yaml/xyz/openbmc_project/BIOSConfig/Manager.interface.yaml#L62). | |
| PLDM populates the Base BIOS Table for BIOS Config Manager based on BIOS Json | |
| files. | |
| After the JSON files are parsed, pldm would also create the string table, | |
| attribute table, and attribute value table as per Section7 in | |
| [PLDM BIOS Specification](https://www.dmtf.org/sites/default/files/standards/documents/DSP0247_1.0.0.pdf). | |
| Those BIOS tables are exchanged with remote PLDM terminus using the | |
| `GetBiosTable` command as defined in DSP0247_1.0.0.pdf Section 8.1. All the | |
| `bios attribute json files are kept under OEM` | |
| [Path](https://github.com/openbmc/pldm/tree/master/oem). BIOS json configuration | |
| is provided in bios_attr.json file which contains attributes of type enum, | |
| integer and string. | |
| Integer Attribute details as documented at Table9 of | |
| [PLDM BIOS Specification](https://www.dmtf.org/sites/default/files/standards/documents/DSP0247_1.0.0.pdf): | |
| ```json | |
| { | |
| "entries": [ | |
| { | |
| "attribute_type": "integer", | |
| "attribute_name": "Attribute Name", | |
| "lower_bound": "The lower bound on the integer value", | |
| "upper_bound": "The upper bound on the integer value", | |
| "scalar_increment": "The scalar value that is used for the increments to this integer ", | |
| "default_value": "The default value of the integer", | |
| "help_text": "Help text about attribute usage", | |
| "display_name": "Attribute Display Name", | |
| "read_only": "Read only Attribute" | |
| } | |
| ] | |
| } | |
| ``` | |
| Enum Attribute details as documented at Table6 of | |
| [PLDM BIOS Specification](https://www.dmtf.org/sites/default/files/standards/documents/DSP0247_1.0.0.pdf): | |
| ```json | |
| { | |
| "entries": [ | |
| { | |
| "attribute_type": "enum", | |
| "attribute_name": "Attribute Name", | |
| "possible_values": [ | |
| "An array of character strings of variable to indicate the possible values of the BIOS attribute" | |
| ], | |
| "default_values": "Default value", | |
| "help_text": "Help text about attribute usage", | |
| "display_name": "Display Name", | |
| "read_only": "Read only Attribute" | |
| } | |
| ] | |
| } | |
| ``` | |
| String Attribute details as documented at Table7 of | |
| [PLDM BIOS Specification](https://www.dmtf.org/sites/default/files/standards/documents/DSP0247_1.0.0.pdf): | |
| ```json | |
| { | |
| "entries": [ | |
| { | |
| "attribute_type": "string", | |
| "attribute_name": "Attribute Name", | |
| "string_type": "It specifies the character encoding format, which can be ASCII, Hex, UTF-8, UTF-16LE, or UTF-16BE. Currently, only ASCII is supported", | |
| "minimum_string_length": "The minimum length of the string in bytes", | |
| "maximum_string_length": "The maximum length of the string in bytes", | |
| "default_string": "The default string itself", | |
| "help_text": "Help text about attribute usage", | |
| "display_name": "Attribute Display Name", | |
| "read_only": "Read only Attribute" | |
| } | |
| ] | |
| } | |
| ``` | |
| As PLDM BIOS Attributes may differ across platforms and systems, supporting | |
| system-specific BIOS attributes is crucial. To achieve this, BIOS JSON files are | |
| organized under folders named after the system type. System type information is | |
| retrieved from the Entity Manager service, which hosts the | |
| [Compatible Interface](https://github.com/openbmc/phosphor-dbus-interfaces/blob/master/yaml/xyz/openbmc_project/Inventory/Decorator/Compatible.interface.yaml). | |
| This interface dynamically populates the Names property with system type | |
| information. However, determining the system type in the application space may | |
| take some time since the compatible interface and the Names property are | |
| dynamically created by the Entity Manager. Consequently, BIOS tables are lazily | |
| constructed upon receiving the system type. | |
| To enable system-specific BIOS attribute support within PLDM, the meson option | |
| `system-specific-bios-json` can be utilized. With `system-specific-bios-json` | |
| option `enabled` BIOS JSON files specific to the system type are fetched during | |
| runtime. |