{"id":18368653,"url":"https://github.com/openbmc/google-ipmi-sys","last_synced_at":"2025-04-06T17:31:47.416Z","repository":{"id":43816664,"uuid":"149165116","full_name":"openbmc/google-ipmi-sys","owner":"openbmc","description":"Google OEM IPMI Commands expected for Host Stack","archived":false,"fork":false,"pushed_at":"2025-02-01T13:54:09.000Z","size":1143,"stargazers_count":2,"open_issues_count":0,"forks_count":2,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-03-22T04:02:03.098Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","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":"2018-09-17T17:49:39.000Z","updated_at":"2025-01-31T20:37:42.000Z","dependencies_parsed_at":"2023-01-21T06:15:45.832Z","dependency_job_id":"aa0f045e-ebbd-4b08-88a3-678cce9eadb3","html_url":"https://github.com/openbmc/google-ipmi-sys","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%2Fgoogle-ipmi-sys","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openbmc%2Fgoogle-ipmi-sys/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openbmc%2Fgoogle-ipmi-sys/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openbmc%2Fgoogle-ipmi-sys/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/openbmc","download_url":"https://codeload.github.com/openbmc/google-ipmi-sys/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247522390,"owners_count":20952540,"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:54.669Z","updated_at":"2025-04-06T17:31:46.611Z","avatar_url":"https://github.com/openbmc.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"### Sys Commands (0x32)\n\nThere are and will be a variety of sys specific commands.\n\n#### Cablecheck - SubCommand 0x00\n\nThe cablecheck command checks whether the BMC is seeing traffic between itself\nand the host's NIC. Sys specifies which if_name is expected to be connected. The\nBMC presently only checks traffic on the interface specified. There are now\nethernet statistics available over IPMI, which can be checked directly in lieu\nof this.\n\nRequest\n\n| Byte(s)  | Value          | Data                                          |\n| -------- | -------------- | --------------------------------------------- |\n| 0x00     | 0x00           | Subcommand                                    |\n| 0x01     | If_name length | Where you expect the cable, eth0 or eth1, etc |\n| 0x02 ... | The name       | The string, not null-terminated               |\n\nResponse\n\n| Byte(s) | Value     | Data                    |\n| ------- | --------- | ----------------------- |\n| 0x00    | 0x00      | Subcommand              |\n| 0x01    | 0x00/0x01 | 0 for false, 1 for true |\n\n#### CpldVersion - SubCommand 0x01\n\nAny CPLD on the system that can only be read directly via the BMC can have its\nversion exported to Sys via the cpld version command.\n\nRequest\n\n| Byte(s) | Value   | Data                                                            |\n| ------- | ------- | --------------------------------------------------------------- |\n| 0x00    | 0x01    | Subcommand                                                      |\n| 0x01    | CPLD ID | A one-byte identifier for the CPLD file to read, unsigned byte. |\n\nResponse\n\n| Byte(s) | Value | Data                  |\n| ------- | ----- | --------------------- |\n| 0x00    | 0x01  | Subcommand            |\n| 0x01    | Major | Major version         |\n| 0x02    | Minor | Minor Version         |\n| 0x03    | Sub 1 | Third version number  |\n| 0x04    | Sub 2 | Fourth version number |\n\n**Per the above, if the version number doesn't fit in a byte it'll be cast to\nsize.**\n\n#### GetEthDevice - SubCommand 0x02\n\nThe BMC itself must have hard-coded into the image, which ethernet device is\nconnected to the host NIC. This is true also in the mapping of ethernet device\nto channel number. Alternatively, you can pass a specific interface name for\nchannel lookup. The channel number is used to configure the ethernet device over\nIPMI, instead of the interface name. This is because we leverage the current\nIPMI command set to read and write the networking configuration. Sys can be\nprogrammed already to have this information in the board protobuf, however, this\ninformation -- can be read from the BMC over IPMI.\n\nRequest\n\n| Byte(s) | Value   | Data                                               |\n| ------- | ------- | -------------------------------------------------- |\n| 0x00    | 0x02    | Subcommand                                         |\n| 0x01... | if_name | (optional) The interface name, not null-terminated |\n\nResponse\n\n| Byte(s) | Value          | Data                                                                                                                        |\n| ------- | -------------- | --------------------------------------------------------------------------------------------------------------------------- |\n| 0x00    | 0x02           | Subcommand                                                                                                                  |\n| 0x01    | Channel number | The IPMI channel number for use with the network configuration commands (such as reading the MAC or IP address of the BMC). |\n| 0x02    | if_name length | The length of the if_name in bytes.                                                                                         |\n| 0x03... | if_name        | The interface name, not null-terminated                                                                                     |\n\n#### DelayedHardReset - SubCommand 0x03\n\nSys needs to be able to tell the BMC to reset the host but given a delay in\nseconds.\n\nRequest\n\n| Byte(s)    | Value | Data                      |\n| ---------- | ----- | ------------------------- |\n| 0x00       | 0x03  | Subcommand                |\n| 0x01..0x04 |       | Seconds to delay (uint32) |\n\nResponse\n\n| Byte(s) | Value | Data       |\n| ------- | ----- | ---------- |\n| 0x00    | 0x03  | Subcommand |\n\n### GetPCIeSlotsCount - SubCommand 0x04\n\nSys can get the total number of PCIe slots from BMC using this command. When BMC\nreceives this command, BMC can enumerate over all the PCIe slots and create a\nhashmap with all the available PCIe slot name - I2C bus number mappings. BMC can\nthen send the total number of PCIe slots as part of this command response.\n\nRequest\n\n| Byte(s) | Value | Data       |\n| ------- | ----- | ---------- |\n| 0x00    | 0x04  | Subcommand |\n\nResponse\n\n| Byte(s) | Value                      | Data                       |\n| ------- | -------------------------- | -------------------------- |\n| 0x00    | 0x04                       | Subcommand                 |\n| 0x01    | Total number of PCIe slots | Total number of PCIe slots |\n\n### GetPCIeSlotI2cBusMapping - SubCommand 0x05\n\nIf Sys gets N total slots as part of the above command, then Sys can send this\ncommand N times with Entry IDs ranging from 0 to N - 1. Say, Sys sends this\ncommand with Entry ID as 1, BMC can go and fetch the first PCIe slot name - I2C\nbus number mapping from the hashmap created above and then send the PCIe slot\nname and I2C bus number as part of the command response.\n\nRequest\n\n| Byte(s) | Value    | Data                             |\n| ------- | -------- | -------------------------------- |\n| 0x00    | 0x05     | Subcommand                       |\n| 0x01    | Entry ID | Entry ID ranging from 0 to N - 1 |\n\nResponse\n\n| Byte(s) | Value                 | Data                                                     |\n| ------- | --------------------- | -------------------------------------------------------- |\n| 0x00    | 0x05                  | Subcommand                                               |\n| 0x01    | I2C bus number        | The I2C bus number which is input to the above PCIe slot |\n| 0x02    | PCIe slot name length | The PCIe slot name length                                |\n| 0x03... | PCIe slot name        | The PCIe slot name without null terminator               |\n\n### GetEntityName - SubCommand 0x06\n\nGsys can get the \"Entity ID:Entity Instance\" to Entity name mapping from BMC\nusing this command. When BMC receives this command, BMC can check the related\nJSON file and then send the name for that particular entity as this command\nresponse.\n\nRequest\n\n| Byte(s) | Value           | Data            |\n| ------- | --------------- | --------------- |\n| 0x00    | 0x06            | Subcommand      |\n| 0x01    | Entity ID       | Entity ID       |\n| 0x02    | Entity Instance | Entity Instance |\n\nResponse\n\n| Byte(s)             | Value                      | Data                                |\n| ------------------- | -------------------------- | ----------------------------------- |\n| 0x00                | 0x06                       | Subcommand                          |\n| 0x01                | Entity name length (say N) | Entity name length                  |\n| 0x02...0x02 + N - 1 | Entity name                | Entity name without null terminator |\n\n### GetMachineName - SubCommand 0x07\n\nThe BMC parses /etc/os-release for the OPENBMC_TARGET_MACHINE field and returns\nits value.\n\nRequest\n\n| Byte(s) | Value | Data       |\n| ------- | ----- | ---------- |\n| 0x00    | 0x06  | Subcommand |\n\nResponse\n\n| Byte(s)             | Value                     | Data                               |\n| ------------------- | ------------------------- | ---------------------------------- |\n| 0x00                | 0x06                      | Subcommand                         |\n| 0x01                | Model name length (say N) | Model name length                  |\n| 0x02...0x02 + N - 1 | Model name                | Model name without null terminator |\n\n### HardResetOnShutdown - SubCommand 0x08\n\nTells the BMC to powercycle the next time the host shuts down.\n\nRequest\n\n| Byte(s) | Value | Data       |\n| ------- | ----- | ---------- |\n| 0x00    | 0x08  | Subcommand |\n\nResponse\n\n| Byte(s) | Value | Data       |\n| ------- | ----- | ---------- |\n| 0x00    | 0x08  | Subcommand |\n\n### GetFlashSize - SubCommand 0x09\n\nRequest the physical size of the BMC flash.\n\nRequest\n\n| Byte(s) | Value | Data       |\n| ------- | ----- | ---------- |\n| 0x00    | 0x09  | Subcommand |\n\nResponse\n\n| Byte(s)     | Value      | Data       |\n| ----------- | ---------- | ---------- |\n| 0x00        | 0x09       | Subcommand |\n| 0x01...0x04 | Flash size | Flash size |\n\n### HostPowerOff - SubCommand 0x0A\n\nSys command needs to be able to let the BMC knows host attempt S5 shutdown, it\nneed power-off the Host gracefully and disable the watchdog with given time\ndelay.\n\nRequest\n\n| Byte(s)    | Value | Data                      |\n| ---------- | ----- | ------------------------- |\n| 0x00       | 0x0A  | Subcommand                |\n| 0x01..0x04 |       | Seconds to delay (uint32) |\n\nResponse\n\n| Byte(s) | Value | Data       |\n| ------- | ----- | ---------- |\n| 0x00    | 0x0A  | Subcommand |\n\n### AccelOobDeviceCount - SubCommand 0x0B\n\nQuery the number of available devices from the google-accel-oob service.\n\nIf not enough data is proveded, `IPMI_CC_REQ_DATA_LEN_INVALID` is returned.\n\nRequest\n\n| Byte(s) | Value | Data       |\n| ------- | ----- | ---------- |\n| 0x00    | 0x0B  | Subcommand |\n\nResponse\n\n| Byte(s)    | Value | Data                        |\n| ---------- | ----- | --------------------------- |\n| 0x00       | 0x0B  | Subcommand                  |\n| 0x01..0x04 |       | Number of devices available |\n\n### AccelOobDeviceName - SubCommand 0x0C\n\nQuery the name of a single device from the google-accel-oob service.\n\nThis name is used as the identifier for the AccelOobRead and AccelOobWrite\ncommands.\n\nIndex values start at zero and go up to (but don't include) the device count.\n\nThe name of the device is exactly as it appears in DBus, except for the common\n\"/com/google/customAccel/\" prefix. This prefix is removed to reduce the size of\nthe IPMI packet.\n\nDBus requires all element names to be non-empty strings of ASCII characters\n\"[A-Z][a-z][0-9]\\_\", separated by ASCII '/'. Therefore, all device names will be\nvalid ASCII strings (1 byte/character).\n\nFor convenience, the name string is followed by a single 0x00 (NULL terminator)\nbyte which is not included as part of the length.\n\nThe length field (byte 5) is the number of bytes in the name string (not\nincluding the trailing NULL terminator byte).\n\nThe maximum length for any name is 43 bytes (not including the trailing NULL).\n\nIf a name is longer than 43 bytes, `IPMI_CC_REQ_DATA_TRUNCATED` is returned.\nThese names will not be usable in the rest of the API. Changing the name\nrequires code changes to the `managed_acceld` service binary.\n\nIf not enough data is proveded, `IPMI_CC_REQ_DATA_LEN_INVALID` is returned.\n\nIf a name does not begin with the expected \"/com/google/customAccel/\" prefix,\n`IPMI_CC_INVALID` is returned. This indicates a change in the DBus API for the\ngoogle-accel-oob service that requires a matching code change in the handler.\n\nRequest\n\n| Byte(s) | Value | Data               |\n| ------- | ----- | ------------------ |\n| 0x00    | 0x0C  | Subcommand         |\n| 0x05    |       | Length of the name |\n| 0x06..n |       | Name of the device |\n\nResponse\n\n| Byte(s)    | Value | Data                |\n| ---------- | ----- | ------------------- |\n| 0x00       | 0x0C  | Subcommand          |\n| 0x01..0x04 |       | Index of the device |\n| 0x05       |       | Length of the name  |\n| 0x06..n    |       | Name of the device  |\n\n### AccelOobRead - SubCommand 0x0D\n\nRead a PCIe CSR from a device.\n\nLength is the length of the name, in bytes.\n\nThe device name gets prepended with \"/com/google/customAccel/\" and sent to DBus.\nThis string must **NOT** have a trailing NULL terminator.\n\nThe token is an arbitrary byte that gets echoed back in the reply; it is not\ninterpreted by the service at all. This is used to disambiguate identical\nrequests so clients can check for lost transactions.\n\nAddress is the 64b PCIe address to read from.\n\nNumber of bytes is the size of the read, in bytes (max 8). The value is subject\nto hardware limitations (both PCIe and ASIC), so it will generally be 1, 2, 4,\nor 8.\n\nThe register data is always returned in 8 bytes (uint64) in little Endian order.\nIf fewer than than 8 bytes are read, the MSBs are padded with 0s.\n\nOn success, the response ends with the data read as a single uint64.\n\nIf the number of bytes requested would not fit in a single IPMI payload,\n`IPMI_CC_REQUESTED_TOO_MANY_BYTES` is returned.\n\nIf not enough data is proveded, `IPMI_CC_REQ_DATA_LEN_INVALID` is returned.\n\nRequest\n\n| Byte(s)   | Value | Data                                           |\n| --------- | ----- | ---------------------------------------------- |\n| 0x00      | 0x0D  | Subcommand                                     |\n| 0x01      |       | Number of bytes in the device name             |\n| 0x02..n   |       | Name of the device (from `AccelOobDeviceName`) |\n| n+1       |       | Token                                          |\n| n+2..n+10 |       | Address                                        |\n| n+11      |       | Number of bytes                                |\n\nResponse\n\n| Byte(s)    | Value | Data                                  |\n| ---------- | ----- | ------------------------------------- |\n| 0x00       | 0x0D  | Subcommand                            |\n| 0x01       |       | Number of bytes in the device name    |\n| 0x02..n    |       | Name of the device (no trailing NULL) |\n| n+1        |       | Token                                 |\n| n+2..n+10  |       | Address                               |\n| n+11       |       | Number of bytes                       |\n| n+12..n+20 |       | Data                                  |\n\n### AccelOobWrite - SubCommand 0x0E\n\nWrite a PCIe CSR from a device.\n\nAll parameters are identical to AccelOobRead (above). The only difference is the\nregister data becomes an input parameter (in the Request) instead of an output\nvalue (in the Response).\n\nAs with read, the register data must be 8 bytes (uint64) in little Endian order.\nIf fewer than 8 bytes will be written, only the LSBs will be read and the the\nMSBs will be ignored.\n\nAll fields returned in the Response are simply a copy of the Request.\n\nOn success, `IPMI_CC_OK` is returned.\n\nIf not enough data is proveded, `IPMI_CC_REQ_DATA_LEN_INVALID` is returned.\n\nRequest\n\n| Byte(s)    | Value | Data                                           |\n| ---------- | ----- | ---------------------------------------------- |\n| 0x00       | 0x0D  | Subcommand                                     |\n| 0x01       |       | Number of bytes in the device name             |\n| 0x02..n    |       | Name of the device (from `AccelOobDeviceName`) |\n| n+1        |       | Token                                          |\n| n+2..n+10  |       | Address                                        |\n| n+11       |       | Number of bytes                                |\n| n+12..n+20 |       | Data                                           |\n\nResponse\n\n| Byte(s)    | Value | Data                                  |\n| ---------- | ----- | ------------------------------------- |\n| 0x00       | 0x0D  | Subcommand                            |\n| 0x01       |       | Number of bytes in the device name    |\n| 0x02..n    |       | Name of the device (no trailing NULL) |\n| n+1        |       | Token                                 |\n| n+2..n+10  |       | Address                               |\n| n+11       |       | Number of bytes                       |\n| n+12..n+20 |       | Data                                  |\n\n### PCIe Bifurcation - SubCommand 0x0F\n\nSys command to return the highest level of bifurcation for the target PCIe Slot.\n\nRequest\n\n| Byte(s) | Value          | Data                 |\n| ------- | -------------- | -------------------- |\n| 0x00    | 0x0F           | Subcommand           |\n| 0x01    | PE slot number | Index of the PE slot |\n\nResponse\n\n| Byte(s)            | Value             | Data                                                                              |\n| ------------------ | ----------------- | --------------------------------------------------------------------------------- |\n| 0x00               | 0x0F              | Subcommand                                                                        |\n| 0x01               | Config length (N) | Number of bytes needed for the bifurcation config                                 |\n| 0x02..0x02 + N - 1 | Lanes per device  | Each byte represents the number of lanes bonded together for each endpoint device |\n\n### GetBmcMode - SubCommand 0x10\n\nRequest the operational mode of the BMC.\n\nRequest\n\n| Byte(s) | Value | Data       |\n| ------- | ----- | ---------- |\n| 0x00    | 0x10  | Subcommand |\n\nResponse\n\n| Byte(s) | Value            | Data                                                                                                          |\n| ------- | ---------------- | ------------------------------------------------------------------------------------------------------------- |\n| 0x00    | 0x10             | Subcommand                                                                                                    |\n| 0x01    | Current BMC MODE | \u003cul\u003e\u003cli\u003e0 -\u003e Non Bare Metal Mode\u003c/li\u003e\u003cli\u003e1 -\u003e Bare Metal Mode\u003c/li\u003e\u003cli\u003e2 -\u003e Bare Metal Cleaning Mode\u003c/li\u003e\u003c/ul\u003e |\n\n### LinuxBootDone - SubCommand 0x11\n\nNotify the BMC that LinuxBoot is finished and will kexec into the OS\nmomentarily.\n\nIf in bare metal mode, the BMC will disable IPMI upon receiving this command, to\nprotect against a malicious OS. For this reason, the BMC may not respond to this\ncommand.\n\nIf not in bare metal mode, this command has no effect.\n\nRequest\n\n| Byte(s) | Value | Data       |\n| ------- | ----- | ---------- |\n| 0x00    | 0x11  | Subcommand |\n\nResponse (if applicable)\n\n| Byte(s) | Value | Data       |\n| ------- | ----- | ---------- |\n| 0x00    | 0x11  | Subcommand |\n\n### SysGetAccelVrSettings - SubCommand 0x15\n\nGet the accel's VR setting value for the given chip and settings ID\n\nCurrently 3 settings are supported. [0] IdleMode [1] PowerBrake [2] Loadline\n\nOn success, the response contains 2 bytes containing the setting value.\n\nIf not enough data is proveded, `IPMI_CC_REQ_DATA_LEN_INVALID` is returned.\n\nRequest\n\n| Byte(s) | Value | Data       |\n| ------- | ----- | ---------- |\n| 0x00    | 0x15  | Subcommand |\n| 0x01    |       | Chip ID    |\n| 0x02    |       | SettingsID |\n\nResponse (if applicable)\n\n| Byte(s)    | Value | Data           |\n| ---------- | ----- | -------------- |\n| 0x00       | 0x15  | Subcommand     |\n| 0x01..0x02 | 0x15  | Settings Value |\n\n### SysSetAccelVrSettings - SubCommand 0x16\n\nUpdate the VR settings of a given accel device for a specific settings id.\n\nCurrently 3 settings are supported. [0] IdleMode [1] PowerBrake [2] Loadline\n\nThe settings value parameter is a 2 byte value and is expected in little endian\nformat\n\nOn success, `IPMI_CC_OK` is returned.\n\nIf not enough data is proveded, `IPMI_CC_REQ_DATA_LEN_INVALID` is returned.\n\nRequest\n\n| Byte(s)    | Value | Data           |\n| ---------- | ----- | -------------- |\n| 0x00       | 0x16  | Subcommand     |\n| 0x01       |       | Chip ID        |\n| 0x02       |       | Settings ID    |\n| 0x03..0x04 | 0x16  | Settings Value |\n\nResponse (if applicable)\n\n| Byte(s) | Value | Data       |\n| ------- | ----- | ---------- |\n| 0x00    | 0x16  | Subcommand |\n\n### GetBMInstanceProperty - SubCommand 0x17\n\nRead a BM instance property, specify the property to read following the enum.\n\nThe response contains the length of the property string to read in bytes\nfollowed by the property string which does **NOT** have a NULL terminator.\n\nRequest\n\n| Byte(s) | Value | Data                                                                                                                                 |\n| ------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------ |\n| 0x00    | 0x17  | Subcommand                                                                                                                           |\n| 0x01    |       | 0x0: AssetTag \u003cbr\u003e0x1: BoardSerialNumber \u003cbr\u003e0x2: Family \u003cbr\u003e0x3: ProductName \u003cbr\u003e0x4: SKU \u003cbr\u003e0x5: SystemSerialNumber \u003cbr\u003e0x6: UUID |\n\nResponse\n\n| Byte(s)           | Value              | Data                                                             |\n| ----------------- | ------------------ | ---------------------------------------------------------------- |\n| 0x00              | 0x17               | Subcommand                                                       |\n| 0x01              | String Length (N)  | Number of bytes to read for property string - Size limited to 64 |\n| 0x2..0x02 + N - 1 | String of property | String, not null-terminated                                      |\n\n### ReadBiosSetting - SubCommand 0x18\n\nRead a BIOS setting, set at `/run/oem_bios_setting`.\n\nThe response contains the length of the BIOS setting followed by the BIOS\nsetting bytes read.\n\nRequest\n\n| Byte(s) | Value | Data       |\n| ------- | ----- | ---------- |\n| 0x00    | 0x18  | Subcommand |\n\nResponse\n\n| Byte(s)           | Value         | Data                                         |\n| ----------------- | ------------- | -------------------------------------------- |\n| 0x00              | 0x18          | Subcommand                                   |\n| 0x01              | Length (N)    | Number of payload bytes - Size limited to 64 |\n| 0x2..0x02 + N - 1 | Payload bytes | Payload bytes                                |\n\n### WriteBiosSetting - SubCommand 0x19\n\nWrite a BIOS setting, set at `/run/oem_bios_setting`.\n\nThe response contains the length of the BIOS setting followed by the BIOS\nsetting bytes read.\n\nRequest\n\n| Byte(s)           | Value         | Data                                         |\n| ----------------- | ------------- | -------------------------------------------- |\n| 0x00              | 0x19          | Subcommand                                   |\n| 0x01              | Length (N)    | Number of payload bytes - Size limited to 64 |\n| 0x2..0x02 + N - 1 | Payload bytes | Payload bytes                                |\n\nResponse\n\n| Byte(s) | Value      | Data                                 |\n| ------- | ---------- | ------------------------------------ |\n| 0x00    | 0x19       | Subcommand                           |\n| 0x01    | Length (N) | Number of bytes successfully written |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenbmc%2Fgoogle-ipmi-sys","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopenbmc%2Fgoogle-ipmi-sys","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenbmc%2Fgoogle-ipmi-sys/lists"}