{"id":18368628,"url":"https://github.com/openbmc/bios-settings-mgr","last_synced_at":"2025-04-06T17:31:45.676Z","repository":{"id":56013408,"uuid":"278426847","full_name":"openbmc/bios-settings-mgr","owner":"openbmc","description":null,"archived":false,"fork":false,"pushed_at":"2025-03-20T07:22:53.000Z","size":324,"stargazers_count":5,"open_issues_count":1,"forks_count":7,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-22T04:02:00.417Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/openbmc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-07-09T17:19:46.000Z","updated_at":"2025-02-26T16:47:23.000Z","dependencies_parsed_at":"2023-02-17T13:31:25.822Z","dependency_job_id":"5f39f41a-8416-47ab-a171-0882dc64fea1","html_url":"https://github.com/openbmc/bios-settings-mgr","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openbmc%2Fbios-settings-mgr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openbmc%2Fbios-settings-mgr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openbmc%2Fbios-settings-mgr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openbmc%2Fbios-settings-mgr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/openbmc","download_url":"https://codeload.github.com/openbmc/bios-settings-mgr/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247522374,"owners_count":20952534,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-05T23:26:46.885Z","updated_at":"2025-04-06T17:31:45.668Z","avatar_url":"https://github.com/openbmc.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Remote BIOS Configuration\n\n[![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](LICENSE)\n\n## Overview\n\nThe **biosconfig_manager** service enables users to view and modify the BIOS\nsetup configuration parameters remotely through the Baseboard Management\nController (BMC) at any host state. Changes to these parameters will take effect\nupon the next system reboot or immediately, depending on the host firmware.\n\nFor more details, please refer to [design document][rbmc-design-document].\n\n## Features\n\n- **Remote management** of BIOS settings.\n- **Immediate updates** or scheduled changes upon reboot.\n- **Reset BIOS Settings** support through the dbus.\n- **ChangePassword** support to change the BIOS setup password.\n\n## RBC Manager Interface\n\nThe Manager interface exposes methods and properties to Get \u0026 Set BIOS\nattributes via dbus and its documented [here][pdi-manager-bios]\n\n### Object Path\n\n```txt\n/xyz/openbmc_project/BIOSConfig/Manager\n```\n\n### Methods\n\n- **SetAttribute** Sets a specific BIOS attribute to a new value.\n- **GetAttribute** Retrieves the current and pending values of a BIOS attribute.\n\n### Properties\n\n- **ResetBIOSSettings** To reset the BIOS settings based on the Reset Flag.\n- **BaseBIOSTable** Captures the entire BIOS table (collective information of\n  all the BIOS attributes and their properties)\n\n## Signature of `BaseBIOSTable`\n\nThe `BaseBIOSTable` property in the RBC Manager Interface is a complex\ndictionary that defines the structure of BIOS attributes. Its type signature is\nas follows:\n\n```plaintext\ndict[string, struct[\n    enum[self.AttributeType],\n    boolean,\n    string,\n    string,\n    string,\n    variant[int64, string],\n    variant[int64, string],\n    array[struct[enum[self.BoundType], variant[int64, string], string]]\n]]\n```\n\nThis structure consists of:\n\n- **Attribute Name (string)**: The name of the BIOS attribute.\n- **Attribute Type (enum)**: The type of the BIOS attribute (e.g., String,\n  Integer).\n- **Read-only Status (boolean)**: Whether the attribute is read-only.\n- **Display Name (string)**: The human-readable name of the attribute.\n- **Description (string)**: A description of what the attribute does.\n- **Menu Path (string)**: The BIOS menu path where this attribute can be found.\n- **Current Value (variant[int64, string])**: The current value of the\n  attribute.\n- **Default Value (variant[int64, string])**: The default value of the\n  attribute.\n- **Options (array of structs)**: The available options or bounds for this\n  attribute.\n\n### Examples\n\nHere is an example json structure of a `String` attribute with `attributeName`\n`DrdFreqLimit` \u0026 its various properties in BaseBIOSTable signature.\n\n```json\n{\n  \"DdrFreqLimit\": {\n    \"attributeType\": \"xyz.openbmc_project.BIOSConfig.Manager.AttributeType.String\",\n    \"readonlyStatus\": false,\n    \"displayname\": \"Memory Operating Speed Selection\",\n    \"description\": \"Force specific Memory Operating Speed or use Auto setting.\",\n    \"menuPath\": \"Advanced/Memory Configuration/Memory Operating Speed Selection\",\n    \"current\": \"0x00\",\n    \"default\": \"0x0B\",\n    \"options\": [\n      { \"optionstring\": \"auto\", \"optionvalue\": \"enum0\" },\n      { \"optionstring\": \"2133\", \"optionvalue\": \"enum1\" },\n      { \"optionstring\": \"2400\", \"optionvalue\": \"enum2\" },\n      { \"optionstring\": \"2664\", \"optionvalue\": \"enum3\" },\n      { \"optionstring\": \"2933\", \"optionvalue\": \"enum4\" }\n    ]\n  }\n}\n```\n\nHere is another example json structure of a `Integer` attribute with attribute\nwith name `BIOSSerialDebugLevel` \u0026 its various properties in BaseBIOSTable\nsignature.\n\n```json\n{\n  \"BIOSSerialDebugLevel\": {\n    \"attributeType\": \"xyz.openbmc_project.BIOSConfig.Manager.AttributeType.Integer\",\n    \"readonlyStatus\": false,\n    \"displayname\": \"BIOS Serial Debug level\",\n    \"description\": \"BIOS Serial Debug level during system boot.\",\n    \"menuPath\": \"Advanced/Debug Feature Selection\",\n    \"current\": \"0x00\",\n    \"default\": \"0x01\",\n    \"options\": [\n      { \"optionstring\": \"MinBound\", \"optionvalue\": 0 },\n      { \"optionstring\": \"MaxBound\", \"optionvalue\": 4 },\n      { \"optionstring\": \"ScalarIncrement\", \"optionvalue\": 1 }\n    ]\n  }\n}\n```\n\n## Initialization of `BaseBIOSTable`\n\nWhen the `bios-settings-mgr` daemon starts, it initializes with an empty\n`BaseBIOSTable`. It is the responsibility of provider daemons, such as **PLDM**\nor **IPMI**, to populate this table by fetching or defining the BIOS settings.\nThese provider daemons are expected to gather the necessary BIOS attributes and\nvalues from their respective sources (ex: bmc, system firmware) and then\ninitialize the `BaseBIOSTable` property with those settings.\n\n### BIOS with PLDM as Communication Protocol\n\nFor systems that use the **PLDM (Platform Level Data Model)** protocol between\nBMC \u0026 Host, OEM vendors can define their own BIOS attributes in the form of\n[JSON files][pldm-bios-json]. The PLDM daemon parses these files and initializes\nthe `BaseBIOSTable` property accordingly. This allows for flexible and custom\nBIOS configuration options based on the vendor's specifications.\n\nFor more details , refer to the [BIOS Support in PLDM][pldm-bios].\n\n### BIOS with IPMI as Communication Protocol\n\nFor systems that use the **Intelligent Platform Management Interface** protocol\nbetween BMC \u0026 Host, BIOS attributes are gathered from BIOS as an `xml file` \u0026\n`BaseBIOSTable` would then be initialized with the attributes data from the\nparsed xml file.\n\nFor more details, refer to the code [BIOS Support in IPMI][ipmi-intel-bios].\n\n## RBC Password Interface\n\n### Object Path\n\n```txt\nxyz.openbmc_project.BIOSConfig.Password\n```\n\n### Methods\n\n- **ChangePassword**  \n  Used to change the BIOS setup password.\n\n### Properties\n\n- **PasswordInitialized** Used to indicate whether the BIOS password-related\n  details have been received.\n\n[rbmc-design-document]:\n  https://github.com/openbmc/docs/blob/master/designs/remote-bios-configuration.md\n[pldm-bios-json]:\n  https://github.com/openbmc/pldm/blob/master/oem/ibm/configurations/bios/com.ibm.Hardware.Chassis.Model.Rainier2U/bios_attrs.json\n[pldm-bios]: https://github.com/openbmc/pldm?tab=readme-ov-file#bios-support\n[ipmi-intel-bios]:\n  https://github.com/openbmc/intel-ipmi-oem/blob/master/src/biosconfigcommands.cpp\n[pdi-manager-bios]:\n  https://github.com/openbmc/phosphor-dbus-interfaces/blob/master/yaml/xyz/openbmc_project/BIOSConfig/Manager.interface.yaml\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenbmc%2Fbios-settings-mgr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopenbmc%2Fbios-settings-mgr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenbmc%2Fbios-settings-mgr/lists"}