xref: /openbmc/hiomapd/Documentation/protocol.md (revision 0bfd90de58825963ff52237b43bba359c08e5bce)
193c8edc9SAndrew JefferyCopyright 2018 IBM
293c8edc9SAndrew Jeffery
36a51e5f4SPatrick WilliamsLicensed under the Apache License, Version 2.0 (the "License"); you may not use
46a51e5f4SPatrick Williamsthis file except in compliance with the License. You may obtain a copy of the
56a51e5f4SPatrick WilliamsLicense at
693c8edc9SAndrew Jeffery
793c8edc9SAndrew Jefferyhttp://www.apache.org/licenses/LICENSE-2.0
893c8edc9SAndrew Jeffery
96a51e5f4SPatrick WilliamsUnless required by applicable law or agreed to in writing, software distributed
106a51e5f4SPatrick Williamsunder the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
116a51e5f4SPatrick WilliamsCONDITIONS OF ANY KIND, either express or implied. See the License for the
126a51e5f4SPatrick Williamsspecific language governing permissions and limitations under the License.
1393c8edc9SAndrew Jeffery
1493c8edc9SAndrew Jeffery# Introduction
1593c8edc9SAndrew Jeffery
1693c8edc9SAndrew JefferyThis document defines a protocol and several transports for flash access
1793c8edc9SAndrew Jefferymediation between the host and the Baseboard Management Controller (BMC).
1893c8edc9SAndrew Jeffery
1993c8edc9SAndrew JefferyThe driving motivation for the protocol is to expose flash devices owned by the
2093c8edc9SAndrew JefferyBMC to the host. Usually, the flash device of interest is the host's firmware
2193c8edc9SAndrew Jefferyflash device - in some platform designs this is owned by the BMC to enable
2293c8edc9SAndrew Jefferylights-out updates of the host firmware.
2393c8edc9SAndrew Jeffery
2493c8edc9SAndrew JefferyAs the flash is owned by the BMC, access by the host to its firmware must be
2593c8edc9SAndrew Jefferyabstracted and mediated. Abstraction and mediation alleviates several problems:
2693c8edc9SAndrew Jeffery
2793c8edc9SAndrew Jeffery1. Proliferation of flash controller driver implementations throughout firmware
2893c8edc9SAndrew Jeffery2. Conflict of access between the host and the BMC to the flash controller
2993c8edc9SAndrew Jeffery3. In some circumstances, mitigates security concerns.
3093c8edc9SAndrew Jeffery
3193c8edc9SAndrew JefferyThe protocol introduced in this document addresses each of these issues.
3293c8edc9SAndrew JefferySpecifically, the document addresses defining a control mechanism for exposing
3393c8edc9SAndrew Jefferyflash data in the LPC firmware space, communicated via functions in the LPC IO
3493c8edc9SAndrew Jefferyspace.
3593c8edc9SAndrew Jeffery
3693c8edc9SAndrew Jeffery# Scope
3793c8edc9SAndrew Jeffery
3893c8edc9SAndrew JefferyThe scope of the document is limited to defining the protocol and its
3993c8edc9SAndrew Jefferytransports, and does not cover the content or structure of the data read or
4093c8edc9SAndrew Jefferywritten to the flash by the host firmware.
4193c8edc9SAndrew Jeffery
4293c8edc9SAndrew JefferyThe definition of transport-specific parameters, for example selection of IPMI
4393c8edc9SAndrew Jeffery`(NetFn, Command)` pairs, is also beyond the scope of the document.
4493c8edc9SAndrew Jeffery
4593c8edc9SAndrew Jeffery# Background, Design and Constraints
4693c8edc9SAndrew Jeffery
4793c8edc9SAndrew JefferyThe protocol was developed to meet requirements on OpenPOWER systems based
486a51e5f4SPatrick Williamsaround the ASPEED BMC System-on-Chips such as the AST2400 and AST2500. The
496a51e5f4SPatrick WilliamsASPEED BMCs have properties and features that need to be taken into account:
5093c8edc9SAndrew Jeffery
5193c8edc9SAndrew Jeffery1. A read-only mapping of the SPI flash devices onto the ARM core's AHB
5293c8edc9SAndrew Jeffery2. Remapping of LPC Firmware cycles onto the AHB (LPC2AHB bridge)
5393c8edc9SAndrew Jeffery3. A reasonable but not significant amount of attached DRAM
5493c8edc9SAndrew Jeffery
5593c8edc9SAndrew JefferyPrior to the development of the protocol described below flash reads were
5693c8edc9SAndrew Jefferyserviced by pointing the LPC2AHB bridge at the read-only flash mapping, and
5793c8edc9SAndrew Jefferywrites were serviced by a separate bridge that suffers significant performance
5893c8edc9SAndrew Jefferyand security issues.
5993c8edc9SAndrew Jeffery
606a51e5f4SPatrick WilliamsPoint 3 serves to justify some of the design decisions embodied in the protocol,
616a51e5f4SPatrick Williamsmainly the complexity required by the flexibility to absorb as much or as little
626a51e5f4SPatrick Williamsreserved memory as desired via the concept of BMC-controlled windowing.
6393c8edc9SAndrew Jeffery
646a51e5f4SPatrick WilliamsThe core concept of the protocol moves access away from the naive routing of LPC
656a51e5f4SPatrick Williamsfirmware cycles onto the host firmware SPI flash AHB mapping, and concentrates
666a51e5f4SPatrick Williamson servicing the LPC firmware cycles from reserved system memory. As the memory
676a51e5f4SPatrick Williamsbacking the LPC2AHB mapping is now writable the protocol meets the host's write
686a51e5f4SPatrick Williamsrequirements by defining commands to open, dirty and flush an in-memory window
696a51e5f4SPatrick Williamsrepresenting the state of the flash. The mechanism to read the flash becomes
706a51e5f4SPatrick Williamssame as write, just that the dirty and flush commands are not legal on such
716a51e5f4SPatrick Williamswindows.
7293c8edc9SAndrew Jeffery
7393c8edc9SAndrew Jeffery## Historic and Future Naming
7493c8edc9SAndrew Jeffery
7593c8edc9SAndrew JefferyThe original transport for the protocol was the ASPEED BMC LPC mailbox
7693c8edc9SAndrew Jefferyinterface, and previous revisions of the protocol documentation referred to the
7793c8edc9SAndrew Jefferyprotocol as the "mailbox" or "mbox" protocol. This naming is now deprecated, as
7893c8edc9SAndrew Jefferythe protocol has grown further transports and naming the protocol by its
7993c8edc9SAndrew Jefferytransport rather than its intent was, on reflection, misguided.
8093c8edc9SAndrew Jeffery
8193c8edc9SAndrew JefferyThe protocol has been tentatively renamed to the "Host I/O Mapping Protocol" or
8293c8edc9SAndrew Jeffery"hiomap". This is a reflection of its true purpose - to control the host's view
8393c8edc9SAndrew Jefferyof data exposed from the BMC.
8493c8edc9SAndrew Jeffery
8593c8edc9SAndrew Jeffery# Protocol Overview
8693c8edc9SAndrew Jeffery
8793c8edc9SAndrew JefferyThe primary flow of the protocol is for the host to send requests to the BMC,
8893c8edc9SAndrew Jefferywhich adjusts the mapping of the LPC firmware space as requested and returns a
8993c8edc9SAndrew Jefferystatus response to the host. These interactions are labelled "commands".
9093c8edc9SAndrew JefferyHowever, as there is now an active software component on the BMC consuming
9193c8edc9SAndrew Jefferyaccess requests, the BMC must occasionally indicate state changes to the host.
9293c8edc9SAndrew JefferySuch interactions are labelled "events". For example, if a user or other system
936a51e5f4SPatrick Williamssoftware on the BMC suspends the host's access to its flash device, the BMC-side
946a51e5f4SPatrick Williamsdaemon implementing the protocol must notify the host that its requests will be
956a51e5f4SPatrick Williamsdenied until further notice.
9693c8edc9SAndrew Jeffery
9793c8edc9SAndrew Jeffery## Protocol Versioning
9893c8edc9SAndrew Jeffery
9993c8edc9SAndrew JefferyTo enable evolution of the command and event interfaces, incremental changes to
1006a51e5f4SPatrick Williamsthe behaviour are defined in new versions of the protocol. The descriptions and
1016a51e5f4SPatrick Williamstables that follow all identify the versions to which they are applicable.
10293c8edc9SAndrew Jeffery
10393c8edc9SAndrew JefferyThe highest currently specified protocol version is version 3.
10493c8edc9SAndrew Jeffery
10593c8edc9SAndrew Jeffery## Table of Commands
10693c8edc9SAndrew Jeffery
10793c8edc9SAndrew Jeffery| ID  | Name                                                  | v1  | v2  | v3  | Description                                                              |
1086a51e5f4SPatrick Williams| --- | ----------------------------------------------------- | --- | --- | --- | ------------------------------------------------------------------------ |
10993c8edc9SAndrew Jeffery| 1   | [`RESET`](#reset-command)                             | ✓   | ✓   | ✓   | Reset the state of the LPC firmware space, closing any active window     |
11093c8edc9SAndrew Jeffery| 2   | [`GET_INFO`](#get_info-command)                       | ✓   | ✓   | ✓   | Perform protocol version negotiation and retrieve fundamental parameters |
11193c8edc9SAndrew Jeffery| 3   | [`GET_FLASH_INFO`](#get_flash_info-command)           | ✓   | ✓   | ✓   | Retrieve flash-specific parameters                                       |
11293c8edc9SAndrew Jeffery| 4   | [`CREATE_READ_WINDOW`](#create_read_window-command)   | ✓   | ✓   | ✓   | Request mapping of a flash region for read                               |
11393c8edc9SAndrew Jeffery| 5   | [`CLOSE`](#close-command)                             | ✓   | ✓   | ✓   | Close the current window, flushing any dirty regions                     |
11493c8edc9SAndrew Jeffery| 6   | [`CREATE_WRITE_WINDOW`](#create_write_window-command) | ✓   | ✓   | ✓   | Request mapping of a flash region for write                              |
11593c8edc9SAndrew Jeffery| 7   | [`MARK_DIRTY`](#mark_dirty-command)                   | ✓   | ✓   | ✓   | Mark a region of a write window as modified                              |
11693c8edc9SAndrew Jeffery| 8   | [`FLUSH`](#flush-command)                             | ✓   | ✓   | ✓   | Flush dirty regions of the write window to flash                         |
11793c8edc9SAndrew Jeffery| 9   | [`ACK`](#ack-command)                                 | ✓   | ✓   | ✓   | Acknowledge the receipt of an event from the BMC                         |
11893c8edc9SAndrew Jeffery| 10  | [`ERASE`](#erase-command)                             |     | ✓   | ✓   | Mark a region of a write window as erased                                |
11993c8edc9SAndrew Jeffery| 11  | [`GET_FLASH_NAME`](#get_flash_name-command)           |     |     | ✓   | Retrieve the name of an indexed flash device                             |
12093c8edc9SAndrew Jeffery| 12  | [`LOCK`](#lock-command)                               |     |     | ✓   | Mark a region of the current flash window as immutable                   |
12193c8edc9SAndrew Jeffery
12293c8edc9SAndrew Jeffery## Table of Events
12393c8edc9SAndrew Jeffery
12493c8edc9SAndrew Jeffery| ID  | Name                                              | v1  | v2  | v3  | Description                                                                                 |
1256a51e5f4SPatrick Williams| --- | ------------------------------------------------- | --- | --- | --- | ------------------------------------------------------------------------------------------- |
12693c8edc9SAndrew Jeffery| 0   | [`PROTOCOL_RESET`](#protocol_reset-event)         | ✓   | ✓   | ✓   | The host is required to perform version negotiation and re-establish its window of interest |
12793c8edc9SAndrew Jeffery| 1   | [`WINDOW_RESET`](#window_reset-event)             |     | ✓   | ✓   | The host must re-establish its window of interest                                           |
12893c8edc9SAndrew Jeffery| 6   | [`FLASH_CONTROL_LOST`](#flash_control_lost-event) |     | ✓   | ✓   | The host should suspend access requests                                                     |
12993c8edc9SAndrew Jeffery| 7   | [`DAEMON_READY`](#daemon_ready-event)             |     | ✓   | ✓   | The daemon is active and can accept commands                                                |
13093c8edc9SAndrew Jeffery
13193c8edc9SAndrew Jeffery## List of Transports
13293c8edc9SAndrew Jeffery
1336a51e5f4SPatrick WilliamsAn essential feature of the protocol is that its behaviour is independent of the
1346a51e5f4SPatrick Williamshost-BMC transport. The command and event interfaces of each transport
13593c8edc9SAndrew Jefferynecessarily reflect the version of the protocol they are implementing, but the
13693c8edc9SAndrew Jefferytransport has no influence otherwise.
13793c8edc9SAndrew Jeffery
13893c8edc9SAndrew JefferyThere are three documented transports for the protocol:
13993c8edc9SAndrew Jeffery
14093c8edc9SAndrew Jeffery1. The [ASPEED BMC LPC Mailbox transport](#mailbox-transport)
14193c8edc9SAndrew Jeffery2. The [IPMI transport](#ipmi-transport)
14293c8edc9SAndrew Jeffery3. The [DBus transport](#dbus-transport)
14393c8edc9SAndrew Jeffery
14493c8edc9SAndrew JefferyThe command layout, routing and event mechanism for each transport all have
14593c8edc9SAndrew Jefferydifferent features and are detailed below. An important note is that command
14693c8edc9SAndrew Jefferydesign is limited by the most constrained transport - the LPC mailbox
14793c8edc9SAndrew Jefferytransport - where only 11 bytes are available for encoding of command
14893c8edc9SAndrew Jefferyparameters.
14993c8edc9SAndrew Jeffery
1506a51e5f4SPatrick WilliamsImplementations must choose to support one or more of the transports outlined in
1516a51e5f4SPatrick Williamsthis document.
15293c8edc9SAndrew Jeffery
15393c8edc9SAndrew JefferyNote that the DBus transport is intended for BMC-internal communications, and
15493c8edc9SAndrew Jefferycan be used to separate a host-interface transport from the protocol
15593c8edc9SAndrew Jefferyimplementation.
15693c8edc9SAndrew Jeffery
15793c8edc9SAndrew Jeffery## Protocol Flow
15893c8edc9SAndrew Jeffery
15993c8edc9SAndrew JefferyThe high-level protocol flow is that the host first issues a `GET_INFO` command
16093c8edc9SAndrew Jefferyto negotiate the protocol version and acquire parameters fundamental to
16193c8edc9SAndrew Jefferyconstructing arguments to and interpreting responses from the commands that
16293c8edc9SAndrew Jefferyfollow.
16393c8edc9SAndrew Jeffery
16493c8edc9SAndrew JefferyOnce `GET_INFO` has successfully completed, the host should request the flash
1656a51e5f4SPatrick Williamsparameters with `GET_FLASH_INFO`. The response provides information on the flash
1666a51e5f4SPatrick Williamscapacity and the size of its erase granule.
16793c8edc9SAndrew Jeffery
16893c8edc9SAndrew JefferyFollowing `GET_FLASH_INFO`, the next act is to establish an active flash window
16993c8edc9SAndrew Jefferywith either one of the `CREATE_READ_WINDOW` or `CREATE_WRITE_WINDOW` commands.
17093c8edc9SAndrew Jeffery
17193c8edc9SAndrew JefferyIn the event of creating a write window the host must inform the BMC of the
17293c8edc9SAndrew Jefferyregions to which it has written with `MARK_DIRTY`- the BMC receives no
17393c8edc9SAndrew Jefferynotification of accesses from the host, they are simply mapped by the LPC2AHB
1746a51e5f4SPatrick Williamsbridge as necessary. As the accesses are to system memory and not the flash the
1756a51e5f4SPatrick Williamschanges identified by the `MARK_DIRTY` commands are not permanent until a
17693c8edc9SAndrew Jeffery`FLUSH` command is received (implicit flushes are discussed below), at which
17793c8edc9SAndrew Jefferypoint the dirty regions of the active window will be written to the flash
17893c8edc9SAndrew Jefferydevice.
17993c8edc9SAndrew Jeffery
18093c8edc9SAndrew JefferyAs an optimisation the host may choose to use the `ERASE` command to indicate
18193c8edc9SAndrew Jefferythat large regions should be set to the erased state. This optimisation saves
18293c8edc9SAndrew Jefferythe associated LPC firmware cycles to write the regions into the erased state.
18393c8edc9SAndrew Jeffery
18493c8edc9SAndrew Jeffery## Version Negotiation
18593c8edc9SAndrew Jeffery
1866a51e5f4SPatrick WilliamsWhen invoking `GET_INFO` the host must provide the BMC its highest supported
1876a51e5f4SPatrick Williamsversion of the protocol. The BMC must respond with a protocol version less than
1886a51e5f4SPatrick Williamsor equal to that requested by the host, or in the event that there is no such
1896a51e5f4SPatrick Williamsvalue, an error code. In the event that an error is returned the host must not
1906a51e5f4SPatrick Williamscontinue to communicate with the BMC. Otherwise, the protocol version returned
1916a51e5f4SPatrick Williamsby the BMC is the agreed protocol version for all further communication. The
1926a51e5f4SPatrick Williamshost may at a future point request a change in protocol version by issuing a
1936a51e5f4SPatrick Williamssubsequent `GET_INFO` command.
19493c8edc9SAndrew Jeffery
19593c8edc9SAndrew Jeffery### Unversioned Commands
19693c8edc9SAndrew Jeffery
19793c8edc9SAndrew JefferyIn some circumstances it is necessary for bootstrap or optimisation purposes to
19893c8edc9SAndrew Jefferysupport unversioned commands. The protocol supports three unversioned commands:
19993c8edc9SAndrew Jeffery
20093c8edc9SAndrew Jeffery1. `RESET`
20193c8edc9SAndrew Jeffery2. `GET_INFO`
20293c8edc9SAndrew Jeffery3. `ACK`
20393c8edc9SAndrew Jeffery
20493c8edc9SAndrew JefferyAll remaining commands have their presence and behaviour specified with respect
20593c8edc9SAndrew Jefferyto the negotiated version of the protocol.
20693c8edc9SAndrew Jeffery
20793c8edc9SAndrew JefferyThe arguments to the `GET_INFO` command are considered unversioned and as a
2086a51e5f4SPatrick Williamsresult are static in nature - the protocol implementation has no means to decode
2096a51e5f4SPatrick Williamsversion-specific arguments as the version has not yet been negotiated. With
2106a51e5f4SPatrick Williamsrespect to the response, the version field is unversioned, but all subsequent
2116a51e5f4SPatrick Williamsfields _may_ be versioned.
21293c8edc9SAndrew Jeffery
21393c8edc9SAndrew Jeffery`RESET` remaining unversioned is an optimisation catering to deeply embedded
2146a51e5f4SPatrick Williamscomponents on the host side that may need access to the command. Keeping `RESET`
2156a51e5f4SPatrick Williamsunversioned removes the complexity of implementing `GET_INFO` with its version
2166a51e5f4SPatrick Williamsnegotiation and minimises the overhead required to get into the pre-boot state.
21793c8edc9SAndrew Jeffery
21893c8edc9SAndrew JefferyDefining `ACK` as unversioned ensures host firmware that has minimal protocol
21993c8edc9SAndrew Jefferysupport can silence interrupts from the BMC as required.
22093c8edc9SAndrew Jeffery
22193c8edc9SAndrew Jeffery## Sequence Numbers
22293c8edc9SAndrew Jeffery
22393c8edc9SAndrew JefferySequence numbers are included in messages for correlation of commands and
22493c8edc9SAndrew Jefferyresponses. v1, v2 and v3 of the protocol permit either zero or one commands to
22593c8edc9SAndrew Jefferybe in progress (yet to receive a response).
22693c8edc9SAndrew Jeffery
22793c8edc9SAndrew JefferyFor generality, the host must generate a sequence number that is unique with
22893c8edc9SAndrew Jefferyrespect to the previous command (one that has received a response) and any
22993c8edc9SAndrew Jefferyin-progress commands. Sequence numbers meeting this requirement are considered
23093c8edc9SAndrew Jefferyvalid. The BMC's response to a command must contain the same sequence number
23193c8edc9SAndrew Jefferyissued by the host as found in the relevant command.
23293c8edc9SAndrew Jeffery
23393c8edc9SAndrew JefferySequence numbers may be reused in accordance with the constraints outlined
23493c8edc9SAndrew Jefferyabove. However, it is not an error if the BMC receives a unversioned command
23593c8edc9SAndrew Jeffery(`RESET`, `GET_INFO` or `ACK`) with an invalid sequence number. For all other
23693c8edc9SAndrew Jefferycases, the BMC must respond with an error if the constraints are violated. If
23793c8edc9SAndrew Jefferythe host receives a sequence-related error response it must consider any
23893c8edc9SAndrew Jefferyin-progress commands to have failed. The host may retry the affected command(s)
23993c8edc9SAndrew Jefferyafter generating a suitable sequence number.
24093c8edc9SAndrew Jeffery
24193c8edc9SAndrew Jeffery## Window Management
24293c8edc9SAndrew Jeffery
24393c8edc9SAndrew JefferyThere is only ever one active window which is the window created by the most
24493c8edc9SAndrew Jefferyrecent `CREATE_READ_WINDOW` or `CREATE_WRITE_WINDOW` call which succeeded. Even
24593c8edc9SAndrew Jefferythough there are two types of windows there can still only be one active window
24693c8edc9SAndrew Jefferyirrespective of type. The host must not write to a read window. The host may
24793c8edc9SAndrew Jefferyread from a write window and the BMC must guarantee that the window reflects
24893c8edc9SAndrew Jefferywhat the host has written there.
24993c8edc9SAndrew Jeffery
2506a51e5f4SPatrick WilliamsA window can be closed by issuing the `CLOSE` command, in which case there is no
2516a51e5f4SPatrick Williamsactive window and the host must not access the LPC firmware space until a window
2526a51e5f4SPatrick Williamsis subsequently opened. If the host closes an active write window then the BMC
2536a51e5f4SPatrick Williamsmust perform an implicit flush. If the host tries to open a new window with an
2546a51e5f4SPatrick Williamsalready active window then the active window is closed (and implicitly flushed
2556a51e5f4SPatrick Williamsif it was a write window). If the new window is successfully opened then it is
2566a51e5f4SPatrick Williamsthe new active window; if the command fails then there is no active window and
2576a51e5f4SPatrick Williamsthe previously active window must no longer be accessed.
25893c8edc9SAndrew Jeffery
25993c8edc9SAndrew JefferyThe host must not access an LPC address other than that which is contained by
26093c8edc9SAndrew Jefferythe active window. The host must not use write management functions (see below)
26193c8edc9SAndrew Jefferyif the active window is a read window or if there is no active window.
26293c8edc9SAndrew Jeffery
26393c8edc9SAndrew Jeffery## Command Parameter Types
26493c8edc9SAndrew Jeffery
2656a51e5f4SPatrick WilliamsIt is common in the protocol definition for command parameters to be represented
2666a51e5f4SPatrick Williamsin terms of a block size. This block size may refer to e.g. the size of the
2676a51e5f4SPatrick Williamserase granule of the flash, or it may be another value entirely. Regardless of
2686a51e5f4SPatrick Williamswhat it represents, the argument values are scaled by the block size determined
2696a51e5f4SPatrick Williamsby version negotiation. Specifying arguments in terms of a block size allows
2706a51e5f4SPatrick Williamstransports to keep a compact representation in constrained implementations such
2716a51e5f4SPatrick Williamsas the LPC mailbox transport.
27293c8edc9SAndrew Jeffery
27393c8edc9SAndrew JefferyNote that for simplicity block size must always be a power-of-2. The block size
27493c8edc9SAndrew Jefferymust also be greater than or equal to 4K regardless of the negotiated protocol
27593c8edc9SAndrew Jefferyversion.
27693c8edc9SAndrew Jeffery
27793c8edc9SAndrew JefferyFinally, conversion between blocks and bytes is achieved by respectively
27893c8edc9SAndrew Jefferydividing or multiplying the quantity by the negotiated block-size.
27993c8edc9SAndrew Jeffery
28093c8edc9SAndrew Jeffery# Transport Overview
28193c8edc9SAndrew Jeffery
28293c8edc9SAndrew JefferySeveral transports are defined for the protocol and are outlined below. The key
28393c8edc9SAndrew Jefferyfeatures of transport support are the wire-format, delivery mechanisms of
28493c8edc9SAndrew Jefferycommands and events, and the definition and delivery of response codes.
28593c8edc9SAndrew Jeffery
28693c8edc9SAndrew JefferyThe DBus transport is the most foreign of the three as it does not encode the
28793c8edc9SAndrew Jefferycommand index or a sequence number; these two elements are handled by the
28893c8edc9SAndrew Jefferyproperties of DBus itself.
28993c8edc9SAndrew Jeffery
29093c8edc9SAndrew Jeffery## Mailbox Transport
29193c8edc9SAndrew Jeffery
2926a51e5f4SPatrick Williams- Multi-byte quantity endianness: Little-endian
2936a51e5f4SPatrick Williams- Command length encoding: Assumed from negotiated protocol version
2946a51e5f4SPatrick Williams- Parameter alignment: Packed (no padding)
2956a51e5f4SPatrick Williams- Command status response: ABI-defined Response byte
2966a51e5f4SPatrick Williams- Event Delivery: ABI-defined BMC Status byte
29793c8edc9SAndrew Jeffery
2986a51e5f4SPatrick WilliamsThe mailbox transport defines the ABI used over the mailbox registers. There are
2996a51e5f4SPatrick Williams16 data registers and several status and control registers for managing
30093c8edc9SAndrew Jefferyinterrupts between the host and the BMC. For the purpose of defining the
30193c8edc9SAndrew Jefferytransport ABI the status and control registers can mostly be disregarded, save
30293c8edc9SAndrew Jefferyfor the necessity of issuing and responding to interrupts on each side.
30393c8edc9SAndrew Jeffery
30493c8edc9SAndrew JefferyAssuming the registers are in a contiguous layout (this is not reflected in the
3056a51e5f4SPatrick Williamshardware, but may be the abstraction presented by the associated kernel driver),
306*0bfd90deSNinad Palsulethe ABI is defined as follows, where the bytes in the range [2, 12] are
307*0bfd90deSNinad Palsuleavailable for command parameters and are defined on a per-command basis.
30893c8edc9SAndrew Jeffery
30993c8edc9SAndrew Jeffery```
31093c8edc9SAndrew Jeffery    0        7         15                    31
31193c8edc9SAndrew Jeffery   +----------+----------+---------------------+
31293c8edc9SAndrew Jeffery 0 | Command  | Sequence |                     |
31393c8edc9SAndrew Jeffery   +----------+----------+---------------------+
31493c8edc9SAndrew Jeffery 4 |                                           |
31593c8edc9SAndrew Jeffery   +-------------------------------------------+
31693c8edc9SAndrew Jeffery 8 |                                           |
31793c8edc9SAndrew Jeffery   +----------+----------+----------+----------+
31893c8edc9SAndrew Jeffery12 |          | Response |  BMC Sts | Host Sts |
31993c8edc9SAndrew Jeffery   +----------+----------+----------+----------+
32093c8edc9SAndrew Jeffery    0        7         15         23         31
32193c8edc9SAndrew Jeffery```
32293c8edc9SAndrew Jeffery
32393c8edc9SAndrew JefferyCommand status response codes are as follows:
32493c8edc9SAndrew Jeffery
32593c8edc9SAndrew Jeffery### Status Codes
32693c8edc9SAndrew Jeffery
32793c8edc9SAndrew Jeffery| ID  | Name           | v1  | v2  | v3  | Description                                          |
3286a51e5f4SPatrick Williams| --- | -------------- | --- | --- | --- | ---------------------------------------------------- |
32993c8edc9SAndrew Jeffery| 1   | `SUCCESS`      | ✓   | ✓   | ✓   | Command completed successfully                       |
33093c8edc9SAndrew Jeffery| 2   | `PARAM_ERROR`  | ✓   | ✓   | ✓   | Error with parameters supplied or command invalid    |
33193c8edc9SAndrew Jeffery| 3   | `WRITE_ERROR`  | ✓   | ✓   | ✓   | Error writing to the backing file system             |
33293c8edc9SAndrew Jeffery| 4   | `SYSTEM_ERROR` | ✓   | ✓   | ✓   | Error in BMC performing system action                |
33393c8edc9SAndrew Jeffery| 5   | `TIMEOUT`      | ✓   | ✓   | ✓   | Timeout in performing action                         |
33493c8edc9SAndrew Jeffery| 6   | `BUSY`         |     | ✓   | ✓   | Flash access suspended, retry later                  |
33593c8edc9SAndrew Jeffery| 7   | `WINDOW_ERROR` |     | ✓   | ✓   | Invalid window state or command invalid for window   |
33693c8edc9SAndrew Jeffery| 8   | `SEQ_ERROR`    |     | ✓   | ✓   | Invalid sequence number supplied with command        |
33793c8edc9SAndrew Jeffery| 9   | `LOCKED_ERROR` |     |     | ✓   | Erased or dirtied region intersected a locked region |
33893c8edc9SAndrew Jeffery
33993c8edc9SAndrew Jeffery## IPMI Transport
34093c8edc9SAndrew Jeffery
3416a51e5f4SPatrick Williams- Multi-byte quantity endianness: Little-endian
3426a51e5f4SPatrick Williams- Command length encoding: Assumed from negotiated protocol version
3436a51e5f4SPatrick Williams- Parameter alignment: Packed (no padding)
3446a51e5f4SPatrick Williams- Command status response: Mapped to IPMI completion codes
3456a51e5f4SPatrick Williams- Event Delivery: Status byte in SEL via `SMS_ATN`
34693c8edc9SAndrew Jeffery
34793c8edc9SAndrew JefferyThe IPMI transport must reserve one `(NetFn, Command)` pair for host-to-BMC
34893c8edc9SAndrew Jefferycommunications and one SEL `(NetFn, Command)` pair for BMC-to-host
34993c8edc9SAndrew Jefferycommunication, signaled by `SMS_ATN`.
35093c8edc9SAndrew Jeffery
35193c8edc9SAndrew JefferyThe wire command framing is as follows:
35293c8edc9SAndrew Jeffery
35393c8edc9SAndrew Jeffery1. The command identifier is the first value and is encoded in one byte
35493c8edc9SAndrew Jeffery2. The sequence number is the second value and is encoded in one byte
35593c8edc9SAndrew Jeffery3. Parameters required by the (version, command) pair follow
35693c8edc9SAndrew Jeffery
35793c8edc9SAndrew Jeffery```
35893c8edc9SAndrew Jeffery    0        7         15                     N
35993c8edc9SAndrew Jeffery   +----------+----------+---------     -------+
36093c8edc9SAndrew Jeffery 0 | Command  | Sequence |          ...        |
36193c8edc9SAndrew Jeffery   +----------+----------+---------     -------+
36293c8edc9SAndrew Jeffery```
36393c8edc9SAndrew Jeffery
36493c8edc9SAndrew Jeffery## DBus Transport
36593c8edc9SAndrew Jeffery
3666a51e5f4SPatrick Williams- Multi-byte quantity endianness: Transport encoded
3676a51e5f4SPatrick Williams- Command length encoding: Transport encoded
3686a51e5f4SPatrick Williams- Parameter alignment: Transport encoded
3696a51e5f4SPatrick Williams- Command status response: Mapped to Unix system error codes
3706a51e5f4SPatrick Williams- Event Delivery: DBus signals and properties per event type
37193c8edc9SAndrew Jeffery
3726a51e5f4SPatrick WilliamsDBus defines its own wire-format for messages, and so support for this transport
3736a51e5f4SPatrick Williamsconcentrates on mapping commands and events onto DBus concepts. Specifically,
3746a51e5f4SPatrick Williamscommands are represented by DBus methods and events are represented by
3756a51e5f4SPatrick Williamsproperties. DBus will automatically generate a `PropertiesChanged` signal for
3766a51e5f4SPatrick Williamschanges to properties allowing consumers to learn of updates as they happen.
37793c8edc9SAndrew Jeffery
37893c8edc9SAndrew JefferyAs the commands are represented by DBus methods there is no need to encode the
37993c8edc9SAndrew Jefferycommand index in the request - this is represented by the appropriate method on
38093c8edc9SAndrew Jefferythe implementation object's interface.
38193c8edc9SAndrew Jeffery
38293c8edc9SAndrew JefferySimilarly, there's no need to encode sequence numbers as DBus handles the
38393c8edc9SAndrew Jefferycorrelation of messages over the bus. As there is no encoding of sequence
38493c8edc9SAndrew Jefferynumbers, there is no need to describe a command status response like
38593c8edc9SAndrew Jeffery`SEQ_ERROR`, which allows a clean mapping to Unix error codes.
38693c8edc9SAndrew Jeffery
38793c8edc9SAndrew JefferyFinally, commands mapped to methods have the number of parameters and types
38893c8edc9SAndrew Jefferydescribed by the method's type signature, though these descriptions concern the
38993c8edc9SAndrew Jefferybasic wire types and not the semantic types relevant to the protocol. The method
39093c8edc9SAndrew Jefferytype signature and parameter ordering are described in the relevant command
39193c8edc9SAndrew Jefferydefinition.
39293c8edc9SAndrew Jeffery
39393c8edc9SAndrew Jeffery# Command Definitions
39493c8edc9SAndrew Jeffery
39593c8edc9SAndrew JefferyThe command identifier values and command-response parameter formats are
39693c8edc9SAndrew Jefferydescribed in tables under headers for each command. The order of the parameters
3976a51e5f4SPatrick Williamsin the parameter tables reflects the order of the parameters in the commands and
3986a51e5f4SPatrick Williamsresponses. The M, I, and D columns represent the Mailbox, IPMI and DBus
39993c8edc9SAndrew Jefferytransports respectively. For the command identifier table the value in these
40093c8edc9SAndrew Jefferycolumns' cells represent the command index, or for DBus, its method name. For
40193c8edc9SAndrew Jefferythe parameter tables the value represent the parameter's offset in the message
40293c8edc9SAndrew Jeffery(disregarding the command and sequence bytes), or in the case of DBus the
4036a51e5f4SPatrick Williamsappropriate
4046a51e5f4SPatrick Williams[type signature](https://dbus.freedesktop.org/doc/dbus-specification.html#basic-types).
40593c8edc9SAndrew Jeffery
40693c8edc9SAndrew Jeffery## `RESET` Command
40793c8edc9SAndrew Jeffery
40893c8edc9SAndrew Jeffery| v1  | v2  | v3  | M   | I   | D     |
4096a51e5f4SPatrick Williams| --- | --- | --- | --- | --- | ----- |
41093c8edc9SAndrew Jeffery| ✓   | ✓   | ✓   | 1   | 1   | Reset |
41193c8edc9SAndrew Jeffery
41293c8edc9SAndrew Jeffery### v1 Parameters
41393c8edc9SAndrew Jeffery
41493c8edc9SAndrew Jeffery<table>
41593c8edc9SAndrew Jeffery<tr>
41693c8edc9SAndrew Jeffery<th>Command</th><th>Response</th>
41793c8edc9SAndrew Jeffery</tr>
41893c8edc9SAndrew Jeffery<tr>
41993c8edc9SAndrew Jeffery<td valign="top">
42093c8edc9SAndrew Jeffery
42193c8edc9SAndrew Jeffery| Parameter | Unit | Size | M   | I   | D   |
4226a51e5f4SPatrick Williams| --------- | ---- | ---- | --- | --- | --- |
42393c8edc9SAndrew Jeffery
42493c8edc9SAndrew Jeffery</td>
42593c8edc9SAndrew Jeffery<td valign="top">
42693c8edc9SAndrew Jeffery
42793c8edc9SAndrew Jeffery| Parameter | Unit | Size | M   | I   | D   |
4286a51e5f4SPatrick Williams| --------- | ---- | ---- | --- | --- | --- |
42993c8edc9SAndrew Jeffery
43093c8edc9SAndrew Jeffery</td>
43193c8edc9SAndrew Jeffery</tr>
43293c8edc9SAndrew Jeffery</table>
43393c8edc9SAndrew Jeffery
43493c8edc9SAndrew Jeffery### v2 Parameters
43593c8edc9SAndrew Jeffery
43693c8edc9SAndrew Jeffery<table>
43793c8edc9SAndrew Jeffery<tr>
43893c8edc9SAndrew Jeffery<th>Command</th><th>Response</th>
43993c8edc9SAndrew Jeffery</tr>
44093c8edc9SAndrew Jeffery<tr>
44193c8edc9SAndrew Jeffery<td valign="top">
44293c8edc9SAndrew Jeffery
44393c8edc9SAndrew Jeffery| Parameter | Unit | Size | M   | I   | D   |
4446a51e5f4SPatrick Williams| --------- | ---- | ---- | --- | --- | --- |
44593c8edc9SAndrew Jeffery
44693c8edc9SAndrew Jeffery</td>
44793c8edc9SAndrew Jeffery<td valign="top">
44893c8edc9SAndrew Jeffery
44993c8edc9SAndrew Jeffery| Parameter | Unit | Size | M   | I   | D   |
4506a51e5f4SPatrick Williams| --------- | ---- | ---- | --- | --- | --- |
45193c8edc9SAndrew Jeffery
45293c8edc9SAndrew Jeffery</td>
45393c8edc9SAndrew Jeffery</tr>
45493c8edc9SAndrew Jeffery</table>
45593c8edc9SAndrew Jeffery
45693c8edc9SAndrew Jeffery### v3 Parameters
45793c8edc9SAndrew Jeffery
45893c8edc9SAndrew Jeffery<table>
45993c8edc9SAndrew Jeffery<tr>
46093c8edc9SAndrew Jeffery<th>Command</th><th>Response</th>
46193c8edc9SAndrew Jeffery</tr>
46293c8edc9SAndrew Jeffery<tr>
46393c8edc9SAndrew Jeffery<td valign="top">
46493c8edc9SAndrew Jeffery
46593c8edc9SAndrew Jeffery| Parameter | Unit | Size | M   | I   | D   |
4666a51e5f4SPatrick Williams| --------- | ---- | ---- | --- | --- | --- |
46793c8edc9SAndrew Jeffery
46893c8edc9SAndrew Jeffery</td>
46993c8edc9SAndrew Jeffery<td valign="top">
47093c8edc9SAndrew Jeffery
47193c8edc9SAndrew Jeffery| Parameter | Unit | Size | M   | I   | D   |
4726a51e5f4SPatrick Williams| --------- | ---- | ---- | --- | --- | --- |
47393c8edc9SAndrew Jeffery
47493c8edc9SAndrew Jeffery</td>
47593c8edc9SAndrew Jeffery</tr>
47693c8edc9SAndrew Jeffery</table>
47793c8edc9SAndrew Jeffery
47893c8edc9SAndrew Jeffery### Description
47993c8edc9SAndrew Jeffery
48093c8edc9SAndrew JefferyRequests the BMC return the LPC firmware space to a state ready for host
48193c8edc9SAndrew Jefferyfirmware bootstrap.
48293c8edc9SAndrew Jeffery
48393c8edc9SAndrew Jeffery## `GET_INFO` Command
48493c8edc9SAndrew Jeffery
48593c8edc9SAndrew Jeffery| v1  | v2  | v3  | M   | I   | D       |
4866a51e5f4SPatrick Williams| --- | --- | --- | --- | --- | ------- |
48793c8edc9SAndrew Jeffery| ✓   | ✓   | ✓   | 2   | 2   | GetInfo |
48893c8edc9SAndrew Jeffery
48993c8edc9SAndrew Jeffery### v1 Parameters
49093c8edc9SAndrew Jeffery
49193c8edc9SAndrew Jeffery<table>
49293c8edc9SAndrew Jeffery<tr>
49393c8edc9SAndrew Jeffery<th>Command</th><th>Response</th>
49493c8edc9SAndrew Jeffery</tr>
49593c8edc9SAndrew Jeffery<tr>
49693c8edc9SAndrew Jeffery<td valign="top">
49793c8edc9SAndrew Jeffery
49893c8edc9SAndrew Jeffery| Parameter | Unit    | Size | M   | I   | D   |
4996a51e5f4SPatrick Williams| --------- | ------- | ---- | --- | --- | --- |
50093c8edc9SAndrew Jeffery| Version   | Version | 1    | 0   | 0   | y   |
50193c8edc9SAndrew Jeffery
50293c8edc9SAndrew Jeffery</td>
50393c8edc9SAndrew Jeffery<td valign="top">
50493c8edc9SAndrew Jeffery
50593c8edc9SAndrew Jeffery| Parameter         | Unit    | Size | M   | I   | D   |
5066a51e5f4SPatrick Williams| ----------------- | ------- | ---- | --- | --- | --- |
50793c8edc9SAndrew Jeffery| Version           | Version | 1    | 0   | 0   | y   |
50893c8edc9SAndrew Jeffery| Read Window Size  | Blocks  | 2    | 1   | 1   | q   |
50993c8edc9SAndrew Jeffery| Write Window Size | Blocks  | 2    | 3   | 3   | q   |
51093c8edc9SAndrew Jeffery
51193c8edc9SAndrew Jeffery</td>
51293c8edc9SAndrew Jeffery</tr>
51393c8edc9SAndrew Jeffery</table>
51493c8edc9SAndrew Jeffery
51593c8edc9SAndrew Jeffery### v2 Parameters
51693c8edc9SAndrew Jeffery
51793c8edc9SAndrew Jeffery<table>
51893c8edc9SAndrew Jeffery<tr>
51993c8edc9SAndrew Jeffery<th>Command</th><th>Response</th>
52093c8edc9SAndrew Jeffery</tr>
52193c8edc9SAndrew Jeffery<tr>
52293c8edc9SAndrew Jeffery<td valign="top">
52393c8edc9SAndrew Jeffery
52493c8edc9SAndrew Jeffery| Parameter | Unit    | Size | M   | I   | D   |
5256a51e5f4SPatrick Williams| --------- | ------- | ---- | --- | --- | --- |
52693c8edc9SAndrew Jeffery| Version   | Version | 1    | 0   | 0   | y   |
52793c8edc9SAndrew Jeffery
52893c8edc9SAndrew Jeffery</td>
52993c8edc9SAndrew Jeffery<td valign="top">
53093c8edc9SAndrew Jeffery
53193c8edc9SAndrew Jeffery| Parameter        | Unit    | Size | M   | I   | D   |
5326a51e5f4SPatrick Williams| ---------------- | ------- | ---- | --- | --- | --- |
53393c8edc9SAndrew Jeffery| Version          | Version | 1    | 0   | 0   | y   |
53493c8edc9SAndrew Jeffery| Block Size Shift | Count   | 1    | 5   | 1   | y   |
53593c8edc9SAndrew Jeffery| Timeout          | Seconds | 2    | 6   | 2   | q   |
53693c8edc9SAndrew Jeffery
53793c8edc9SAndrew Jeffery</td>
53893c8edc9SAndrew Jeffery</tr>
53993c8edc9SAndrew Jeffery</table>
54093c8edc9SAndrew Jeffery
54193c8edc9SAndrew Jeffery### v3 Parameters
54293c8edc9SAndrew Jeffery
54393c8edc9SAndrew Jeffery<table>
54493c8edc9SAndrew Jeffery<tr>
54593c8edc9SAndrew Jeffery<th>Command</th><th>Response</th>
54693c8edc9SAndrew Jeffery</tr>
54793c8edc9SAndrew Jeffery<tr>
54893c8edc9SAndrew Jeffery<td valign="top">
54993c8edc9SAndrew Jeffery
55093c8edc9SAndrew Jeffery| Parameter        | Unit    | Size | M   | I   | D   |
5516a51e5f4SPatrick Williams| ---------------- | ------- | ---- | --- | --- | --- |
55293c8edc9SAndrew Jeffery| Version          | Version | 1    | 0   | 0   | y   |
55393c8edc9SAndrew Jeffery| Block Size Shift | Count   | 1    | 1   | 1   | y   |
55493c8edc9SAndrew Jeffery
55593c8edc9SAndrew Jeffery</td>
55693c8edc9SAndrew Jeffery<td valign="top">
55793c8edc9SAndrew Jeffery
55893c8edc9SAndrew Jeffery| Parameter        | Unit    | Size | M   | I   | D   |
5596a51e5f4SPatrick Williams| ---------------- | ------- | ---- | --- | --- | --- |
56093c8edc9SAndrew Jeffery| Version          | Version | 1    | 0   | 0   | y   |
56193c8edc9SAndrew Jeffery| Block Size Shift | Count   | 1    | 5   | 1   | y   |
56293c8edc9SAndrew Jeffery| Timeout          | Seconds | 2    | 6   | 2   | q   |
56393c8edc9SAndrew Jeffery| Devices          | Count   | 1    | 8   | 4   | y   |
56493c8edc9SAndrew Jeffery
56593c8edc9SAndrew Jeffery</td>
56693c8edc9SAndrew Jeffery</tr>
56793c8edc9SAndrew Jeffery</table>
56893c8edc9SAndrew Jeffery
56993c8edc9SAndrew Jeffery### Description
57093c8edc9SAndrew Jeffery
57193c8edc9SAndrew JefferyThe suggested timeout is a hint to the host as to how long it should wait after
5726a51e5f4SPatrick Williamsissuing a command to the BMC before it times out waiting for a response. This is
5736a51e5f4SPatrick Williamsthe maximum time which the BMC thinks it could take to service any command which
5746a51e5f4SPatrick Williamsthe host could issue. This may be set to zero to indicate that the BMC does not
5756a51e5f4SPatrick Williamswish to provide a hint in which case the host must choose some reasonable value.
57693c8edc9SAndrew Jeffery
57793c8edc9SAndrew JefferyFrom v3 the host may desire a specific block size and thus can request this by
5786a51e5f4SPatrick Williamsgiving a hint to the daemon (may be zero). The daemon may use this to select the
5796a51e5f4SPatrick Williamsblock size which it will use however is free to ignore it. The value in the
58093c8edc9SAndrew Jefferyresponse is the block size which must be used for all further requests until a
58193c8edc9SAndrew Jefferynew size is negotiated by another call to `GET_INFO`.
58293c8edc9SAndrew Jeffery
58393c8edc9SAndrew Jeffery## `GET_FLASH_INFO` Command
58493c8edc9SAndrew Jeffery
58593c8edc9SAndrew Jeffery| v1  | v2  | v3  | M   | I   | D            |
5866a51e5f4SPatrick Williams| --- | --- | --- | --- | --- | ------------ |
58793c8edc9SAndrew Jeffery| ✓   | ✓   | ✓   | 3   | 3   | GetFlashInfo |
58893c8edc9SAndrew Jeffery
58993c8edc9SAndrew Jeffery### v1 Parameters
59093c8edc9SAndrew Jeffery
59193c8edc9SAndrew Jeffery<table>
59293c8edc9SAndrew Jeffery<tr>
59393c8edc9SAndrew Jeffery<th>Command</th><th>Response</th>
59493c8edc9SAndrew Jeffery</tr>
59593c8edc9SAndrew Jeffery<tr>
59693c8edc9SAndrew Jeffery<td valign="top">
59793c8edc9SAndrew Jeffery
59893c8edc9SAndrew Jeffery| Parameter | Unit | Size | M   | I   | D   |
5996a51e5f4SPatrick Williams| --------- | ---- | ---- | --- | --- | --- |
60093c8edc9SAndrew Jeffery
60193c8edc9SAndrew Jeffery</td>
60293c8edc9SAndrew Jeffery<td valign="top">
60393c8edc9SAndrew Jeffery
60493c8edc9SAndrew Jeffery| Parameter     | Unit  | Size | M   | I   | D   |
6056a51e5f4SPatrick Williams| ------------- | ----- | ---- | --- | --- | --- |
60693c8edc9SAndrew Jeffery| Flash Size    | Bytes | 4    | 0   | 0   | u   |
60793c8edc9SAndrew Jeffery| Erase Granule | Bytes | 4    | 4   | 4   | u   |
60893c8edc9SAndrew Jeffery
60993c8edc9SAndrew Jeffery</td>
61093c8edc9SAndrew Jeffery</tr>
61193c8edc9SAndrew Jeffery</table>
61293c8edc9SAndrew Jeffery
61393c8edc9SAndrew Jeffery### v2 Parameters
61493c8edc9SAndrew Jeffery
61593c8edc9SAndrew Jeffery<table>
61693c8edc9SAndrew Jeffery<tr>
61793c8edc9SAndrew Jeffery<th>Command</th><th>Response</th>
61893c8edc9SAndrew Jeffery</tr>
61993c8edc9SAndrew Jeffery<tr>
62093c8edc9SAndrew Jeffery<td valign="top">
62193c8edc9SAndrew Jeffery
62293c8edc9SAndrew Jeffery| Parameter | Unit | Size | M   | I   | D   |
6236a51e5f4SPatrick Williams| --------- | ---- | ---- | --- | --- | --- |
62493c8edc9SAndrew Jeffery
62593c8edc9SAndrew Jeffery</td>
62693c8edc9SAndrew Jeffery<td valign="top">
62793c8edc9SAndrew Jeffery
62893c8edc9SAndrew Jeffery| Parameter     | Unit   | Size | M   | I   | D   |
6296a51e5f4SPatrick Williams| ------------- | ------ | ---- | --- | --- | --- |
63093c8edc9SAndrew Jeffery| Flash Size    | Blocks | 2    | 0   | 0   | q   |
63193c8edc9SAndrew Jeffery| Erase Granule | Blocks | 2    | 2   | 2   | q   |
63293c8edc9SAndrew Jeffery
63393c8edc9SAndrew Jeffery</td>
63493c8edc9SAndrew Jeffery</tr>
63593c8edc9SAndrew Jeffery</table>
63693c8edc9SAndrew Jeffery
63793c8edc9SAndrew Jeffery### v3 Parameters
63893c8edc9SAndrew Jeffery
63993c8edc9SAndrew Jeffery<table>
64093c8edc9SAndrew Jeffery<tr>
64193c8edc9SAndrew Jeffery<th>Command</th><th>Response</th>
64293c8edc9SAndrew Jeffery</tr>
64393c8edc9SAndrew Jeffery<tr>
64493c8edc9SAndrew Jeffery<td valign="top">
64593c8edc9SAndrew Jeffery
64693c8edc9SAndrew Jeffery| Parameter | Unit  | Size | M   | I   | D   |
6476a51e5f4SPatrick Williams| --------- | ----- | ---- | --- | --- | --- |
64893c8edc9SAndrew Jeffery| Device ID | Index | 1    | 0   | 0   | y   |
64993c8edc9SAndrew Jeffery
65093c8edc9SAndrew Jeffery</td>
65193c8edc9SAndrew Jeffery<td valign="top">
65293c8edc9SAndrew Jeffery
65393c8edc9SAndrew Jeffery| Parameter     | Unit   | Size | M   | I   | D   |
6546a51e5f4SPatrick Williams| ------------- | ------ | ---- | --- | --- | --- |
65593c8edc9SAndrew Jeffery| Flash Size    | Blocks | 2    | 0   | 0   | q   |
65693c8edc9SAndrew Jeffery| Erase Granule | Blocks | 2    | 2   | 2   | q   |
65793c8edc9SAndrew Jeffery
65893c8edc9SAndrew Jeffery</td>
65993c8edc9SAndrew Jeffery</tr>
66093c8edc9SAndrew Jeffery</table>
66193c8edc9SAndrew Jeffery
66293c8edc9SAndrew Jeffery## `CREATE_READ_WINDOW` Command
66393c8edc9SAndrew Jeffery
66493c8edc9SAndrew Jeffery| v1  | v2  | v3  | M   | I   | D                |
6656a51e5f4SPatrick Williams| --- | --- | --- | --- | --- | ---------------- |
66693c8edc9SAndrew Jeffery| ✓   | ✓   | ✓   | 4   | 4   | CreateReadWindow |
66793c8edc9SAndrew Jeffery
66893c8edc9SAndrew Jeffery### v1 Parameters
66993c8edc9SAndrew Jeffery
67093c8edc9SAndrew Jeffery<table>
67193c8edc9SAndrew Jeffery<tr>
67293c8edc9SAndrew Jeffery<th>Command</th><th>Response</th>
67393c8edc9SAndrew Jeffery</tr>
67493c8edc9SAndrew Jeffery<tr>
67593c8edc9SAndrew Jeffery<td valign="top">
67693c8edc9SAndrew Jeffery
67793c8edc9SAndrew Jeffery| Parameter    | Unit   | Size | M   | I   | D   |
6786a51e5f4SPatrick Williams| ------------ | ------ | ---- | --- | --- | --- |
67993c8edc9SAndrew Jeffery| Flash Offset | Blocks | 2    | 0   | 0   | q   |
68093c8edc9SAndrew Jeffery
68193c8edc9SAndrew Jeffery</td>
68293c8edc9SAndrew Jeffery<td valign="top">
68393c8edc9SAndrew Jeffery
68493c8edc9SAndrew Jeffery| Parameter     | Unit   | Size | M   | I   | D   |
6856a51e5f4SPatrick Williams| ------------- | ------ | ---- | --- | --- | --- |
68693c8edc9SAndrew Jeffery| LPC FW Offset | Blocks | 2    | 0   | 0   | q   |
68793c8edc9SAndrew Jeffery
68893c8edc9SAndrew Jeffery</td>
68993c8edc9SAndrew Jeffery</tr>
69093c8edc9SAndrew Jeffery</table>
69193c8edc9SAndrew Jeffery
69293c8edc9SAndrew Jeffery### v2 Parameters
69393c8edc9SAndrew Jeffery
69493c8edc9SAndrew Jeffery<table>
69593c8edc9SAndrew Jeffery<tr>
69693c8edc9SAndrew Jeffery<th>Command</th><th>Response</th>
69793c8edc9SAndrew Jeffery</tr>
69893c8edc9SAndrew Jeffery<tr>
69993c8edc9SAndrew Jeffery<td valign="top">
70093c8edc9SAndrew Jeffery
70193c8edc9SAndrew Jeffery| Parameter     | Unit   | Size | M   | I   | D   |
7026a51e5f4SPatrick Williams| ------------- | ------ | ---- | --- | --- | --- |
70393c8edc9SAndrew Jeffery| Flash Address | Blocks | 2    | 0   | 0   | q   |
70493c8edc9SAndrew Jeffery| Length        | Blocks | 2    | 2   | 2   | q   |
70593c8edc9SAndrew Jeffery
70693c8edc9SAndrew Jeffery</td>
70793c8edc9SAndrew Jeffery<td valign="top">
70893c8edc9SAndrew Jeffery
70993c8edc9SAndrew Jeffery| Parameter      | Unit   | Size | M   | I   | D   |
7106a51e5f4SPatrick Williams| -------------- | ------ | ---- | --- | --- | --- |
71193c8edc9SAndrew Jeffery| LPC FW Address | Blocks | 2    | 0   | 0   | q   |
71293c8edc9SAndrew Jeffery| Length         | Blocks | 2    | 2   | 2   | q   |
71393c8edc9SAndrew Jeffery| Flash Address  | blocks | 2    | 4   | 4   | q   |
71493c8edc9SAndrew Jeffery
71593c8edc9SAndrew Jeffery</td>
71693c8edc9SAndrew Jeffery</tr>
71793c8edc9SAndrew Jeffery</table>
71893c8edc9SAndrew Jeffery
71993c8edc9SAndrew Jeffery### v3 Parameters
72093c8edc9SAndrew Jeffery
72193c8edc9SAndrew Jeffery<table>
72293c8edc9SAndrew Jeffery<tr>
72393c8edc9SAndrew Jeffery<th>Command</th><th>Response</th>
72493c8edc9SAndrew Jeffery</tr>
72593c8edc9SAndrew Jeffery<tr>
72693c8edc9SAndrew Jeffery<td valign="top">
72793c8edc9SAndrew Jeffery
72893c8edc9SAndrew Jeffery| Parameter     | Unit   | Size | M   | I   | D   |
7296a51e5f4SPatrick Williams| ------------- | ------ | ---- | --- | --- | --- |
73093c8edc9SAndrew Jeffery| Flash Address | Blocks | 2    | 0   | 0   | q   |
73193c8edc9SAndrew Jeffery| Length        | Blocks | 2    | 2   | 2   | q   |
73293c8edc9SAndrew Jeffery| Device ID     | Index  | 1    | 4   | 4   | y   |
73393c8edc9SAndrew Jeffery
73493c8edc9SAndrew Jeffery</td>
73593c8edc9SAndrew Jeffery<td valign="top">
73693c8edc9SAndrew Jeffery
73793c8edc9SAndrew Jeffery| Parameter      | Unit   | Size | M   | I   | D   |
7386a51e5f4SPatrick Williams| -------------- | ------ | ---- | --- | --- | --- |
73993c8edc9SAndrew Jeffery| LPC FW Address | Blocks | 2    | 0   | 0   | q   |
74093c8edc9SAndrew Jeffery| Length         | Blocks | 2    | 2   | 2   | q   |
74193c8edc9SAndrew Jeffery| Flash Address  | blocks | 2    | 4   | 4   | q   |
74293c8edc9SAndrew Jeffery
74393c8edc9SAndrew Jeffery</td>
74493c8edc9SAndrew Jeffery</tr>
74593c8edc9SAndrew Jeffery</table>
74693c8edc9SAndrew Jeffery
74793c8edc9SAndrew Jeffery### Description
74893c8edc9SAndrew Jeffery
74993c8edc9SAndrew JefferyThe flash offset which the host requests access to is always taken from the
75093c8edc9SAndrew Jefferystart of flash - that is it is an absolute offset into flash.
75193c8edc9SAndrew Jeffery
75293c8edc9SAndrew JefferyLPC bus address is always given from the start of the LPC address space - that
75393c8edc9SAndrew Jefferyis it is an absolute address.
75493c8edc9SAndrew Jeffery
7556a51e5f4SPatrick WilliamsThe requested access size is only a hint. The response indicates the actual size
7566a51e5f4SPatrick Williamsof the window. The BMC may want to use the requested size to pre-load the
75793c8edc9SAndrew Jefferyremainder of the request. The host must not access past the end of the active
75893c8edc9SAndrew Jefferywindow.
75993c8edc9SAndrew Jeffery
76093c8edc9SAndrew JefferyThe flash offset mapped by the window is an absolute flash offset and must be
76193c8edc9SAndrew Jefferyless than or equal to the flash offset requested by the host. It is the
7626a51e5f4SPatrick Williamsresponsibility of the host to use this information to access any offset which is
7636a51e5f4SPatrick Williamsrequired.
76493c8edc9SAndrew Jeffery
76593c8edc9SAndrew JefferyThe requested window size may be zero. In this case the BMC is free to create
76693c8edc9SAndrew Jefferyany sized window but it must contain at least the first block of data requested
76793c8edc9SAndrew Jefferyby the host. A large window is of course preferred and should correspond to the
76893c8edc9SAndrew Jefferydefault size returned in the `GET_INFO` command.
76993c8edc9SAndrew Jeffery
77093c8edc9SAndrew JefferyIf this command returns successfully then the created window is the active
77193c8edc9SAndrew Jefferywindow. If it fails then there is no active window.
77293c8edc9SAndrew Jeffery
77393c8edc9SAndrew Jeffery## `CLOSE` Command
77493c8edc9SAndrew Jeffery
77593c8edc9SAndrew Jeffery| v1  | v2  | v3  | M   | I   | D     |
7766a51e5f4SPatrick Williams| --- | --- | --- | --- | --- | ----- |
77793c8edc9SAndrew Jeffery| ✓   | ✓   | ✓   | 5   | 5   | Close |
77893c8edc9SAndrew Jeffery
77993c8edc9SAndrew Jeffery### v1 Parameters
78093c8edc9SAndrew Jeffery
78193c8edc9SAndrew Jeffery<table>
78293c8edc9SAndrew Jeffery<tr>
78393c8edc9SAndrew Jeffery<th>Command</th><th>Response</th>
78493c8edc9SAndrew Jeffery</tr>
78593c8edc9SAndrew Jeffery<tr>
78693c8edc9SAndrew Jeffery<td valign="top">
78793c8edc9SAndrew Jeffery
78893c8edc9SAndrew Jeffery| Parameter | Unit | Size | M   | I   | D   |
7896a51e5f4SPatrick Williams| --------- | ---- | ---- | --- | --- | --- |
79093c8edc9SAndrew Jeffery
79193c8edc9SAndrew Jeffery</td>
79293c8edc9SAndrew Jeffery<td valign="top">
79393c8edc9SAndrew Jeffery
79493c8edc9SAndrew Jeffery| Parameter | Unit | Size | M   | I   | D   |
7956a51e5f4SPatrick Williams| --------- | ---- | ---- | --- | --- | --- |
79693c8edc9SAndrew Jeffery
79793c8edc9SAndrew Jeffery</td>
79893c8edc9SAndrew Jeffery</tr>
79993c8edc9SAndrew Jeffery</table>
80093c8edc9SAndrew Jeffery
80193c8edc9SAndrew Jeffery### v2 Parameters
80293c8edc9SAndrew Jeffery
80393c8edc9SAndrew Jeffery<table>
80493c8edc9SAndrew Jeffery<tr>
80593c8edc9SAndrew Jeffery<th>Command</th><th>Response</th>
80693c8edc9SAndrew Jeffery</tr>
80793c8edc9SAndrew Jeffery<tr>
80893c8edc9SAndrew Jeffery<td valign="top">
80993c8edc9SAndrew Jeffery
81093c8edc9SAndrew Jeffery| Parameter | Unit  | Size | M   | I   | D   |
8116a51e5f4SPatrick Williams| --------- | ----- | ---- | --- | --- | --- |
81293c8edc9SAndrew Jeffery| Flags     | Field | 1    | 0   | 0   | y   |
81393c8edc9SAndrew Jeffery
81493c8edc9SAndrew Jeffery</td>
81593c8edc9SAndrew Jeffery<td valign="top">
81693c8edc9SAndrew Jeffery
81793c8edc9SAndrew Jeffery| Parameter | Unit | Size | M   | I   | D   |
8186a51e5f4SPatrick Williams| --------- | ---- | ---- | --- | --- | --- |
81993c8edc9SAndrew Jeffery
82093c8edc9SAndrew Jeffery</td>
82193c8edc9SAndrew Jeffery</tr>
82293c8edc9SAndrew Jeffery</table>
82393c8edc9SAndrew Jeffery
82493c8edc9SAndrew Jeffery### v3 Parameters
82593c8edc9SAndrew Jeffery
82693c8edc9SAndrew Jeffery<table>
82793c8edc9SAndrew Jeffery<tr>
82893c8edc9SAndrew Jeffery<th>Command</th><th>Response</th>
82993c8edc9SAndrew Jeffery</tr>
83093c8edc9SAndrew Jeffery<tr>
83193c8edc9SAndrew Jeffery<td valign="top">
83293c8edc9SAndrew Jeffery
83393c8edc9SAndrew Jeffery| Parameter | Unit  | Size | M   | I   | D   |
8346a51e5f4SPatrick Williams| --------- | ----- | ---- | --- | --- | --- |
83593c8edc9SAndrew Jeffery| Flags     | Field | 1    | 0   | 0   | y   |
83693c8edc9SAndrew Jeffery
83793c8edc9SAndrew Jeffery</td>
83893c8edc9SAndrew Jeffery<td valign="top">
83993c8edc9SAndrew Jeffery
84093c8edc9SAndrew Jeffery| Parameter | Unit | Size | M   | I   | D   |
8416a51e5f4SPatrick Williams| --------- | ---- | ---- | --- | --- | --- |
84293c8edc9SAndrew Jeffery
84393c8edc9SAndrew Jeffery</td>
84493c8edc9SAndrew Jeffery</tr>
84593c8edc9SAndrew Jeffery</table>
84693c8edc9SAndrew Jeffery
84793c8edc9SAndrew Jeffery### Description
84893c8edc9SAndrew Jeffery
8496a51e5f4SPatrick WilliamsCloses the active window. Any further access to the LPC bus address specified to
8506a51e5f4SPatrick Williamsaddress the previously active window will have undefined effects. If the active
8516a51e5f4SPatrick Williamswindow is a write window then the BMC must perform an implicit flush.
85293c8edc9SAndrew Jeffery
85393c8edc9SAndrew JefferyThe Flags argument allows the host to provide some hints to the BMC. Defined
85493c8edc9SAndrew Jefferyvalues are:
85593c8edc9SAndrew Jeffery
85693c8edc9SAndrew Jeffery```
85793c8edc9SAndrew Jeffery0x01 - Short Lifetime:
85893c8edc9SAndrew Jeffery       The window is unlikely to be accessed anytime again in the near future.
85993c8edc9SAndrew Jeffery       The effect of this will depend on BMC implementation. In the event that
86093c8edc9SAndrew Jeffery       the BMC performs some caching the BMC daemon could mark data contained
86193c8edc9SAndrew Jeffery       in a window closed with this flag as first to be evicted from the cache.
86293c8edc9SAndrew Jeffery```
86393c8edc9SAndrew Jeffery
86493c8edc9SAndrew Jeffery## `CREATE_WRITE_WINDOW` Command
86593c8edc9SAndrew Jeffery
86693c8edc9SAndrew Jeffery| v1  | v2  | v3  | M   | I   | D                 |
8676a51e5f4SPatrick Williams| --- | --- | --- | --- | --- | ----------------- |
86893c8edc9SAndrew Jeffery| ✓   | ✓   | ✓   | 6   | 6   | CreateWriteWindow |
86993c8edc9SAndrew Jeffery
87093c8edc9SAndrew Jeffery### v1 Parameters
87193c8edc9SAndrew Jeffery
87293c8edc9SAndrew Jeffery<table>
87393c8edc9SAndrew Jeffery<tr>
87493c8edc9SAndrew Jeffery<th>Command</th><th>Response</th>
87593c8edc9SAndrew Jeffery</tr>
87693c8edc9SAndrew Jeffery<tr>
87793c8edc9SAndrew Jeffery<td valign="top">
87893c8edc9SAndrew Jeffery
87993c8edc9SAndrew Jeffery| Parameter    | Unit   | Size | M   | I   | D   |
8806a51e5f4SPatrick Williams| ------------ | ------ | ---- | --- | --- | --- |
88193c8edc9SAndrew Jeffery| Flash Offset | Blocks | 2    | 0   | 0   | q   |
88293c8edc9SAndrew Jeffery
88393c8edc9SAndrew Jeffery</td>
88493c8edc9SAndrew Jeffery<td valign="top">
88593c8edc9SAndrew Jeffery
88693c8edc9SAndrew Jeffery| Parameter     | Unit   | Size | M   | I   | D   |
8876a51e5f4SPatrick Williams| ------------- | ------ | ---- | --- | --- | --- |
88893c8edc9SAndrew Jeffery| LPC FW Offset | Blocks | 2    | 0   | 0   | q   |
88993c8edc9SAndrew Jeffery
89093c8edc9SAndrew Jeffery</td>
89193c8edc9SAndrew Jeffery</tr>
89293c8edc9SAndrew Jeffery</table>
89393c8edc9SAndrew Jeffery
89493c8edc9SAndrew Jeffery### v2 Parameters
89593c8edc9SAndrew Jeffery
89693c8edc9SAndrew Jeffery<table>
89793c8edc9SAndrew Jeffery<tr>
89893c8edc9SAndrew Jeffery<th>Command</th><th>Response</th>
89993c8edc9SAndrew Jeffery</tr>
90093c8edc9SAndrew Jeffery<tr>
90193c8edc9SAndrew Jeffery<td valign="top">
90293c8edc9SAndrew Jeffery
90393c8edc9SAndrew Jeffery| Parameter     | Unit   | Size | M   | I   | D   |
9046a51e5f4SPatrick Williams| ------------- | ------ | ---- | --- | --- | --- |
90593c8edc9SAndrew Jeffery| Flash Address | Blocks | 2    | 0   | 0   | q   |
90693c8edc9SAndrew Jeffery| Length        | Blocks | 2    | 2   | 2   | q   |
90793c8edc9SAndrew Jeffery
90893c8edc9SAndrew Jeffery</td>
90993c8edc9SAndrew Jeffery<td valign="top">
91093c8edc9SAndrew Jeffery
91193c8edc9SAndrew Jeffery| Parameter      | Unit   | Size | M   | I   | D   |
9126a51e5f4SPatrick Williams| -------------- | ------ | ---- | --- | --- | --- |
91393c8edc9SAndrew Jeffery| LPC FW Address | Blocks | 2    | 0   | 0   | q   |
91493c8edc9SAndrew Jeffery| Length         | Blocks | 2    | 2   | 2   | q   |
91593c8edc9SAndrew Jeffery| Flash Address  | blocks | 2    | 4   | 4   | q   |
91693c8edc9SAndrew Jeffery
91793c8edc9SAndrew Jeffery</td>
91893c8edc9SAndrew Jeffery</tr>
91993c8edc9SAndrew Jeffery</table>
92093c8edc9SAndrew Jeffery
92193c8edc9SAndrew Jeffery### v3 Parameters
92293c8edc9SAndrew Jeffery
92393c8edc9SAndrew Jeffery<table>
92493c8edc9SAndrew Jeffery<tr>
92593c8edc9SAndrew Jeffery<th>Command</th><th>Response</th>
92693c8edc9SAndrew Jeffery</tr>
92793c8edc9SAndrew Jeffery<tr>
92893c8edc9SAndrew Jeffery<td valign="top">
92993c8edc9SAndrew Jeffery
93093c8edc9SAndrew Jeffery| Parameter     | Unit   | Size | M   | I   | D   |
9316a51e5f4SPatrick Williams| ------------- | ------ | ---- | --- | --- | --- |
93293c8edc9SAndrew Jeffery| Flash Address | Blocks | 2    | 0   | 0   | q   |
93393c8edc9SAndrew Jeffery| Length        | Blocks | 2    | 2   | 2   | q   |
93493c8edc9SAndrew Jeffery| Device ID     | Index  | 1    | 4   | 4   | y   |
93593c8edc9SAndrew Jeffery
93693c8edc9SAndrew Jeffery</td>
93793c8edc9SAndrew Jeffery<td valign="top">
93893c8edc9SAndrew Jeffery
93993c8edc9SAndrew Jeffery| Parameter      | Unit   | Size | M   | I   | D   |
9406a51e5f4SPatrick Williams| -------------- | ------ | ---- | --- | --- | --- |
94193c8edc9SAndrew Jeffery| LPC FW Address | Blocks | 2    | 0   | 0   | q   |
94293c8edc9SAndrew Jeffery| Length         | Blocks | 2    | 2   | 2   | q   |
94393c8edc9SAndrew Jeffery| Flash Address  | blocks | 2    | 4   | 4   | q   |
94493c8edc9SAndrew Jeffery
94593c8edc9SAndrew Jeffery</td>
94693c8edc9SAndrew Jeffery</tr>
94793c8edc9SAndrew Jeffery</table>
94893c8edc9SAndrew Jeffery
94993c8edc9SAndrew Jeffery### Description
95093c8edc9SAndrew Jeffery
95193c8edc9SAndrew JefferyThe flash offset which the host requests access to is always taken from the
95293c8edc9SAndrew Jefferystart of flash - that is it is an absolute offset into flash.
95393c8edc9SAndrew Jeffery
95493c8edc9SAndrew JefferyLPC bus address is always given from the start of the LPC address space - that
95593c8edc9SAndrew Jefferyis it is an absolute address.
95693c8edc9SAndrew Jeffery
9576a51e5f4SPatrick WilliamsThe requested access size is only a hint. The response indicates the actual size
9586a51e5f4SPatrick Williamsof the window. The BMC may want to use the requested size to pre-load the
95993c8edc9SAndrew Jefferyremainder of the request. The host must not access past the end of the active
96093c8edc9SAndrew Jefferywindow.
96193c8edc9SAndrew Jeffery
96293c8edc9SAndrew JefferyThe flash offset mapped by the window is an absolute flash offset and must be
96393c8edc9SAndrew Jefferyless than or equal to the flash offset requested by the host. It is the
9646a51e5f4SPatrick Williamsresponsibility of the host to use this information to access any offset which is
9656a51e5f4SPatrick Williamsrequired.
96693c8edc9SAndrew Jeffery
96793c8edc9SAndrew JefferyThe requested window size may be zero. In this case the BMC is free to create
96893c8edc9SAndrew Jefferyany sized window but it must contain at least the first block of data requested
96993c8edc9SAndrew Jefferyby the host. A large window is of course preferred and should correspond to the
97093c8edc9SAndrew Jefferydefault size returned in the `GET_INFO` command.
97193c8edc9SAndrew Jeffery
97293c8edc9SAndrew JefferyIf this command returns successfully then the created window is the active
97393c8edc9SAndrew Jefferywindow. If it fails then there is no active window.
97493c8edc9SAndrew Jeffery
97593c8edc9SAndrew Jeffery## `MARK_DIRTY` Command
97693c8edc9SAndrew Jeffery
97793c8edc9SAndrew Jeffery| v1  | v2  | v3  | M   | I   | D         |
9786a51e5f4SPatrick Williams| --- | --- | --- | --- | --- | --------- |
97993c8edc9SAndrew Jeffery| ✓   | ✓   | ✓   | 7   | 7   | MarkDirty |
98093c8edc9SAndrew Jeffery
98193c8edc9SAndrew Jeffery### v1 Parameters
98293c8edc9SAndrew Jeffery
98393c8edc9SAndrew Jeffery<table>
98493c8edc9SAndrew Jeffery<tr>
98593c8edc9SAndrew Jeffery<th>Command</th><th>Response</th>
98693c8edc9SAndrew Jeffery</tr>
98793c8edc9SAndrew Jeffery<tr>
98893c8edc9SAndrew Jeffery<td valign="top">
98993c8edc9SAndrew Jeffery
99093c8edc9SAndrew Jeffery| Parameter    | Unit   | Size | M   | I   | D   |
9916a51e5f4SPatrick Williams| ------------ | ------ | ---- | --- | --- | --- |
99293c8edc9SAndrew Jeffery| Flash Offset | Blocks | 2    | 0   | 0   | q   |
99393c8edc9SAndrew Jeffery| Length       | Bytes  | 4    | 2   | 2   | u   |
99493c8edc9SAndrew Jeffery
99593c8edc9SAndrew Jeffery</td>
99693c8edc9SAndrew Jeffery<td valign="top">
99793c8edc9SAndrew Jeffery
99893c8edc9SAndrew Jeffery| Parameter | Unit | Size | M   | I   | D   |
9996a51e5f4SPatrick Williams| --------- | ---- | ---- | --- | --- | --- |
100093c8edc9SAndrew Jeffery
100193c8edc9SAndrew Jeffery</td>
100293c8edc9SAndrew Jeffery</tr>
100393c8edc9SAndrew Jeffery</table>
100493c8edc9SAndrew Jeffery
100593c8edc9SAndrew Jeffery### v2 Parameters
100693c8edc9SAndrew Jeffery
100793c8edc9SAndrew Jeffery<table>
100893c8edc9SAndrew Jeffery<tr>
100993c8edc9SAndrew Jeffery<th>Command</th><th>Response</th>
101093c8edc9SAndrew Jeffery</tr>
101193c8edc9SAndrew Jeffery<tr>
101293c8edc9SAndrew Jeffery<td valign="top">
101393c8edc9SAndrew Jeffery
101493c8edc9SAndrew Jeffery| Parameter     | Unit   | Size | M   | I   | D   |
10156a51e5f4SPatrick Williams| ------------- | ------ | ---- | --- | --- | --- |
101693c8edc9SAndrew Jeffery| Window Offset | Blocks | 2    | 0   | 0   | q   |
101793c8edc9SAndrew Jeffery| Length        | Blocks | 2    | 2   | 2   | q   |
101893c8edc9SAndrew Jeffery
101993c8edc9SAndrew Jeffery</td>
102093c8edc9SAndrew Jeffery<td valign="top">
102193c8edc9SAndrew Jeffery
102293c8edc9SAndrew Jeffery| Parameter | Unit | Size | M   | I   | D   |
10236a51e5f4SPatrick Williams| --------- | ---- | ---- | --- | --- | --- |
102493c8edc9SAndrew Jeffery
102593c8edc9SAndrew Jeffery</td>
102693c8edc9SAndrew Jeffery</tr>
102793c8edc9SAndrew Jeffery</table>
102893c8edc9SAndrew Jeffery
102993c8edc9SAndrew Jeffery### v3 Parameters
103093c8edc9SAndrew Jeffery
103193c8edc9SAndrew Jeffery<table>
103293c8edc9SAndrew Jeffery<tr>
103393c8edc9SAndrew Jeffery<th>Command</th><th>Response</th>
103493c8edc9SAndrew Jeffery</tr>
103593c8edc9SAndrew Jeffery<tr>
103693c8edc9SAndrew Jeffery<td valign="top">
103793c8edc9SAndrew Jeffery
103893c8edc9SAndrew Jeffery| Parameter     | Unit   | Size | M   | I   | D   |
10396a51e5f4SPatrick Williams| ------------- | ------ | ---- | --- | --- | --- |
104093c8edc9SAndrew Jeffery| Window Offset | Blocks | 2    | 0   | 0   | q   |
104193c8edc9SAndrew Jeffery| Length        | Blocks | 2    | 2   | 2   | q   |
104293c8edc9SAndrew Jeffery| Flags         | Field  | 1    | 4   | 4   | y   |
104393c8edc9SAndrew Jeffery
104493c8edc9SAndrew Jeffery</td>
104593c8edc9SAndrew Jeffery<td valign="top">
104693c8edc9SAndrew Jeffery
104793c8edc9SAndrew Jeffery| Parameter | Unit | Size | M   | I   | D   |
10486a51e5f4SPatrick Williams| --------- | ---- | ---- | --- | --- | --- |
104993c8edc9SAndrew Jeffery
105093c8edc9SAndrew Jeffery</td>
105193c8edc9SAndrew Jeffery</tr>
105293c8edc9SAndrew Jeffery</table>
105393c8edc9SAndrew Jeffery
105493c8edc9SAndrew Jeffery### Description
105593c8edc9SAndrew Jeffery
10566a51e5f4SPatrick WilliamsThe BMC has no method for intercepting writes that occur over the LPC bus. The
10576a51e5f4SPatrick Williamshost must explicitly notify the daemon of where and when a write has occurred so
10586a51e5f4SPatrick Williamsit can be flushed to backing storage.
105993c8edc9SAndrew Jeffery
10606a51e5f4SPatrick WilliamsOffsets are given as an absolute (either into flash (V1) or the active window
10616a51e5f4SPatrick Williams(V2)) and a zero offset refers to the first block. If the offset + number
10626a51e5f4SPatrick Williamsexceeds the size of the active window then the command must not succeed.
106393c8edc9SAndrew Jeffery
106493c8edc9SAndrew JefferyThe host can give a hint to the daemon that is doesn't have to erase a flash
10656a51e5f4SPatrick Williamsarea before writing to it by setting bit zero of the Flags parameter. This means
10666a51e5f4SPatrick Williamsthat the daemon will blindly perform a write to that area and will not try to
10676a51e5f4SPatrick Williamserase it before hand. This can be used if the host knows that a large area has
10686a51e5f4SPatrick Williamsalready been erased for example but then wants to perform many small writes.
106993c8edc9SAndrew Jeffery
107093c8edc9SAndrew Jeffery## `FLUSH` Command
107193c8edc9SAndrew Jeffery
107293c8edc9SAndrew Jeffery| v1  | v2  | v3  | M   | I   | D     |
10736a51e5f4SPatrick Williams| --- | --- | --- | --- | --- | ----- |
107493c8edc9SAndrew Jeffery| ✓   | ✓   | ✓   | 8   | 8   | Flush |
107593c8edc9SAndrew Jeffery
107693c8edc9SAndrew Jeffery### v1 Parameters
107793c8edc9SAndrew Jeffery
107893c8edc9SAndrew Jeffery<table>
107993c8edc9SAndrew Jeffery<tr>
108093c8edc9SAndrew Jeffery<th>Command</th><th>Response</th>
108193c8edc9SAndrew Jeffery</tr>
108293c8edc9SAndrew Jeffery<tr>
108393c8edc9SAndrew Jeffery<td valign="top">
108493c8edc9SAndrew Jeffery
108593c8edc9SAndrew Jeffery| Parameter    | Unit   | Size | M   | I   | D   |
10866a51e5f4SPatrick Williams| ------------ | ------ | ---- | --- | --- | --- |
108793c8edc9SAndrew Jeffery| Flash Offset | Blocks | 2    | 0   | 0   | q   |
108893c8edc9SAndrew Jeffery| Length       | Bytes  | 4    | 2   | 2   | u   |
108993c8edc9SAndrew Jeffery
109093c8edc9SAndrew Jeffery</td>
109193c8edc9SAndrew Jeffery<td valign="top">
109293c8edc9SAndrew Jeffery
109393c8edc9SAndrew Jeffery| Parameter | Unit | Size | M   | I   | D   |
10946a51e5f4SPatrick Williams| --------- | ---- | ---- | --- | --- | --- |
109593c8edc9SAndrew Jeffery
109693c8edc9SAndrew Jeffery</td>
109793c8edc9SAndrew Jeffery</tr>
109893c8edc9SAndrew Jeffery</table>
109993c8edc9SAndrew Jeffery
110093c8edc9SAndrew Jeffery### v2 Parameters
110193c8edc9SAndrew Jeffery
110293c8edc9SAndrew Jeffery<table>
110393c8edc9SAndrew Jeffery<tr>
110493c8edc9SAndrew Jeffery<th>Command</th><th>Response</th>
110593c8edc9SAndrew Jeffery</tr>
110693c8edc9SAndrew Jeffery<tr>
110793c8edc9SAndrew Jeffery<td valign="top">
110893c8edc9SAndrew Jeffery
110993c8edc9SAndrew Jeffery| Parameter | Unit | Size | M   | I   | D   |
11106a51e5f4SPatrick Williams| --------- | ---- | ---- | --- | --- | --- |
111193c8edc9SAndrew Jeffery
111293c8edc9SAndrew Jeffery</td>
111393c8edc9SAndrew Jeffery<td valign="top">
111493c8edc9SAndrew Jeffery
111593c8edc9SAndrew Jeffery| Parameter | Unit | Size | M   | I   | D   |
11166a51e5f4SPatrick Williams| --------- | ---- | ---- | --- | --- | --- |
111793c8edc9SAndrew Jeffery
111893c8edc9SAndrew Jeffery</td>
111993c8edc9SAndrew Jeffery</tr>
112093c8edc9SAndrew Jeffery</table>
112193c8edc9SAndrew Jeffery
112293c8edc9SAndrew Jeffery### v3 Parameters
112393c8edc9SAndrew Jeffery
112493c8edc9SAndrew Jeffery<table>
112593c8edc9SAndrew Jeffery<tr>
112693c8edc9SAndrew Jeffery<th>Command</th><th>Response</th>
112793c8edc9SAndrew Jeffery</tr>
112893c8edc9SAndrew Jeffery<tr>
112993c8edc9SAndrew Jeffery<td valign="top">
113093c8edc9SAndrew Jeffery
113193c8edc9SAndrew Jeffery| Parameter | Unit | Size | M   | I   | D   |
11326a51e5f4SPatrick Williams| --------- | ---- | ---- | --- | --- | --- |
113393c8edc9SAndrew Jeffery
113493c8edc9SAndrew Jeffery</td>
113593c8edc9SAndrew Jeffery<td valign="top">
113693c8edc9SAndrew Jeffery
113793c8edc9SAndrew Jeffery| Parameter | Unit | Size | M   | I   | D   |
11386a51e5f4SPatrick Williams| --------- | ---- | ---- | --- | --- | --- |
113993c8edc9SAndrew Jeffery
114093c8edc9SAndrew Jeffery</td>
114193c8edc9SAndrew Jeffery</tr>
114293c8edc9SAndrew Jeffery</table>
114393c8edc9SAndrew Jeffery
114493c8edc9SAndrew Jeffery### Description
114593c8edc9SAndrew Jeffery
114693c8edc9SAndrew JefferyFlushes any dirty/erased blocks in the active window to the backing storage.
114793c8edc9SAndrew Jeffery
114893c8edc9SAndrew JefferyIn V1 this can also be used to mark parts of the flash dirty and flush in a
11496a51e5f4SPatrick Williamssingle command. In V2 the explicit mark dirty command must be used before a call
11506a51e5f4SPatrick Williamsto flush since there are no longer any arguments. If the offset + length exceeds
11516a51e5f4SPatrick Williamsthe size of the active window then the command must not succeed.
115293c8edc9SAndrew Jeffery
115393c8edc9SAndrew Jeffery## `ACK` Command
115493c8edc9SAndrew Jeffery
115593c8edc9SAndrew Jeffery| v1  | v2  | v3  | M   | I   | D   |
11566a51e5f4SPatrick Williams| --- | --- | --- | --- | --- | --- |
115793c8edc9SAndrew Jeffery| ✓   | ✓   | ✓   | 9   | 9   | Ack |
115893c8edc9SAndrew Jeffery
115993c8edc9SAndrew Jeffery### v1 Parameters
116093c8edc9SAndrew Jeffery
116193c8edc9SAndrew Jeffery<table>
116293c8edc9SAndrew Jeffery<tr>
116393c8edc9SAndrew Jeffery<th>Command</th><th>Response</th>
116493c8edc9SAndrew Jeffery</tr>
116593c8edc9SAndrew Jeffery<tr>
116693c8edc9SAndrew Jeffery<td valign="top">
116793c8edc9SAndrew Jeffery
116893c8edc9SAndrew Jeffery| Parameter | Unit  | Size | M   | I   | D   |
11696a51e5f4SPatrick Williams| --------- | ----- | ---- | --- | --- | --- |
117093c8edc9SAndrew Jeffery| Ack Mask  | Field | 1    | 0   | 0   | y   |
117193c8edc9SAndrew Jeffery
117293c8edc9SAndrew Jeffery</td>
117393c8edc9SAndrew Jeffery<td valign="top">
117493c8edc9SAndrew Jeffery
117593c8edc9SAndrew Jeffery| Parameter | Unit | Size | M   | I   | D   |
11766a51e5f4SPatrick Williams| --------- | ---- | ---- | --- | --- | --- |
117793c8edc9SAndrew Jeffery
117893c8edc9SAndrew Jeffery</td>
117993c8edc9SAndrew Jeffery</tr>
118093c8edc9SAndrew Jeffery</table>
118193c8edc9SAndrew Jeffery
118293c8edc9SAndrew Jeffery### v2 Parameters
118393c8edc9SAndrew Jeffery
118493c8edc9SAndrew Jeffery<table>
118593c8edc9SAndrew Jeffery<tr>
118693c8edc9SAndrew Jeffery<th>Command</th><th>Response</th>
118793c8edc9SAndrew Jeffery</tr>
118893c8edc9SAndrew Jeffery<tr>
118993c8edc9SAndrew Jeffery<td valign="top">
119093c8edc9SAndrew Jeffery
119193c8edc9SAndrew Jeffery| Parameter | Unit  | Size | M   | I   | D   |
11926a51e5f4SPatrick Williams| --------- | ----- | ---- | --- | --- | --- |
119393c8edc9SAndrew Jeffery| Ack Mask  | Field | 1    | 0   | 0   | y   |
119493c8edc9SAndrew Jeffery
119593c8edc9SAndrew Jeffery</td>
119693c8edc9SAndrew Jeffery<td valign="top">
119793c8edc9SAndrew Jeffery
119893c8edc9SAndrew Jeffery| Parameter | Unit | Size | M   | I   | D   |
11996a51e5f4SPatrick Williams| --------- | ---- | ---- | --- | --- | --- |
120093c8edc9SAndrew Jeffery
120193c8edc9SAndrew Jeffery</td>
120293c8edc9SAndrew Jeffery</tr>
120393c8edc9SAndrew Jeffery</table>
120493c8edc9SAndrew Jeffery
120593c8edc9SAndrew Jeffery### v3 Parameters
120693c8edc9SAndrew Jeffery
120793c8edc9SAndrew Jeffery<table>
120893c8edc9SAndrew Jeffery<tr>
120993c8edc9SAndrew Jeffery<th>Command</th><th>Response</th>
121093c8edc9SAndrew Jeffery</tr>
121193c8edc9SAndrew Jeffery<tr>
121293c8edc9SAndrew Jeffery<td valign="top">
121393c8edc9SAndrew Jeffery
121493c8edc9SAndrew Jeffery| Parameter | Unit  | Size | M   | I   | D   |
12156a51e5f4SPatrick Williams| --------- | ----- | ---- | --- | --- | --- |
121693c8edc9SAndrew Jeffery| Ack Mask  | Field | 1    | 0   | 0   | y   |
121793c8edc9SAndrew Jeffery
121893c8edc9SAndrew Jeffery</td>
121993c8edc9SAndrew Jeffery<td valign="top">
122093c8edc9SAndrew Jeffery
122193c8edc9SAndrew Jeffery| Parameter | Unit | Size | M   | I   | D   |
12226a51e5f4SPatrick Williams| --------- | ---- | ---- | --- | --- | --- |
122393c8edc9SAndrew Jeffery
122493c8edc9SAndrew Jeffery</td>
122593c8edc9SAndrew Jeffery</tr>
122693c8edc9SAndrew Jeffery</table>
122793c8edc9SAndrew Jeffery
122893c8edc9SAndrew Jeffery### Description
122993c8edc9SAndrew Jeffery
123093c8edc9SAndrew JefferyThe host should use this command to acknowledge BMC events propagated to the
123193c8edc9SAndrew Jefferyhost.
123293c8edc9SAndrew Jeffery
123393c8edc9SAndrew Jeffery## `ERASE` Command
123493c8edc9SAndrew Jeffery
123593c8edc9SAndrew Jeffery| v1  | v2  | v3  | M   | I   | D     |
12366a51e5f4SPatrick Williams| --- | --- | --- | --- | --- | ----- |
123793c8edc9SAndrew Jeffery|     | ✓   | ✓   | 10  | 10  | Erase |
123893c8edc9SAndrew Jeffery
123993c8edc9SAndrew Jeffery### v2 Parameters
124093c8edc9SAndrew Jeffery
124193c8edc9SAndrew Jeffery<table>
124293c8edc9SAndrew Jeffery<tr>
124393c8edc9SAndrew Jeffery<th>Command</th><th>Response</th>
124493c8edc9SAndrew Jeffery</tr>
124593c8edc9SAndrew Jeffery<tr>
124693c8edc9SAndrew Jeffery<td valign="top">
124793c8edc9SAndrew Jeffery
124893c8edc9SAndrew Jeffery| Parameter     | Unit   | Size | M   | I   | D   |
12496a51e5f4SPatrick Williams| ------------- | ------ | ---- | --- | --- | --- |
125093c8edc9SAndrew Jeffery| Window Offset | Blocks | 2    | 0   | 0   | q   |
125193c8edc9SAndrew Jeffery| Length        | Blocks | 2    | 2   | 2   | q   |
125293c8edc9SAndrew Jeffery
125393c8edc9SAndrew Jeffery</td>
125493c8edc9SAndrew Jeffery<td valign="top">
125593c8edc9SAndrew Jeffery
125693c8edc9SAndrew Jeffery| Parameter | Unit | Size | M   | I   | D   |
12576a51e5f4SPatrick Williams| --------- | ---- | ---- | --- | --- | --- |
125893c8edc9SAndrew Jeffery
125993c8edc9SAndrew Jeffery</td>
126093c8edc9SAndrew Jeffery</tr>
126193c8edc9SAndrew Jeffery</table>
126293c8edc9SAndrew Jeffery
126393c8edc9SAndrew Jeffery### v3 Parameters
126493c8edc9SAndrew Jeffery
126593c8edc9SAndrew Jeffery<table>
126693c8edc9SAndrew Jeffery<tr>
126793c8edc9SAndrew Jeffery<th>Command</th><th>Response</th>
126893c8edc9SAndrew Jeffery</tr>
126993c8edc9SAndrew Jeffery<tr>
127093c8edc9SAndrew Jeffery<td valign="top">
127193c8edc9SAndrew Jeffery
127293c8edc9SAndrew Jeffery| Parameter     | Unit   | Size | M   | I   | D   |
12736a51e5f4SPatrick Williams| ------------- | ------ | ---- | --- | --- | --- |
127493c8edc9SAndrew Jeffery| Window Offset | Blocks | 2    | 0   | 0   | q   |
127593c8edc9SAndrew Jeffery| Length        | Blocks | 2    | 2   | 2   | q   |
127693c8edc9SAndrew Jeffery
127793c8edc9SAndrew Jeffery</td>
127893c8edc9SAndrew Jeffery<td valign="top">
127993c8edc9SAndrew Jeffery
128093c8edc9SAndrew Jeffery| Parameter | Unit | Size | M   | I   | D   |
12816a51e5f4SPatrick Williams| --------- | ---- | ---- | --- | --- | --- |
128293c8edc9SAndrew Jeffery
128393c8edc9SAndrew Jeffery</td>
128493c8edc9SAndrew Jeffery</tr>
128593c8edc9SAndrew Jeffery</table>
128693c8edc9SAndrew Jeffery
128793c8edc9SAndrew Jeffery### Description
128893c8edc9SAndrew Jeffery
128993c8edc9SAndrew JefferyThis command allows the host to erase a large area without the need to
129093c8edc9SAndrew Jefferyindividually write 0xFF repetitively.
129193c8edc9SAndrew Jeffery
12926a51e5f4SPatrick WilliamsOffset is the offset within the active window to start erasing from (zero refers
12936a51e5f4SPatrick Williamsto the first block of the active window) and number is the number of blocks of
12946a51e5f4SPatrick Williamsthe active window to erase starting at offset. If the offset + number exceeds
12956a51e5f4SPatrick Williamsthe size of the active window then the command must not succeed.
129693c8edc9SAndrew Jeffery
129793c8edc9SAndrew Jeffery## `GET_FLASH_NAME` Command
129893c8edc9SAndrew Jeffery
129993c8edc9SAndrew Jeffery| v1  | v2  | v3  | M   | I   | D            |
13006a51e5f4SPatrick Williams| --- | --- | --- | --- | --- | ------------ |
130193c8edc9SAndrew Jeffery|     |     | ✓   | 11  | 11  | GetFlashName |
130293c8edc9SAndrew Jeffery
130393c8edc9SAndrew Jeffery### v3 Parameters
130493c8edc9SAndrew Jeffery
130593c8edc9SAndrew Jeffery<table>
130693c8edc9SAndrew Jeffery<tr>
130793c8edc9SAndrew Jeffery<th>Command</th><th>Response</th>
130893c8edc9SAndrew Jeffery</tr>
130993c8edc9SAndrew Jeffery<tr>
131093c8edc9SAndrew Jeffery<td valign="top">
131193c8edc9SAndrew Jeffery
131293c8edc9SAndrew Jeffery| Parameter | Unit  | Size | M   | I   | D   |
13136a51e5f4SPatrick Williams| --------- | ----- | ---- | --- | --- | --- |
131493c8edc9SAndrew Jeffery| Device ID | Index | 1    | 0   | 0   | y   |
131593c8edc9SAndrew Jeffery
131693c8edc9SAndrew Jeffery</td>
131793c8edc9SAndrew Jeffery<td valign="top">
131893c8edc9SAndrew Jeffery
131993c8edc9SAndrew Jeffery| Parameter   | Unit   | Size | M   | I   | D   |
13206a51e5f4SPatrick Williams| ----------- | ------ | ---- | --- | --- | --- |
132193c8edc9SAndrew Jeffery| Name length | Bytes  | 1    | 0   | 0   | -   |
132293c8edc9SAndrew Jeffery| Name        | String | 10   | 1   | 1   | s   |
132393c8edc9SAndrew Jeffery
132493c8edc9SAndrew Jeffery</td>
132593c8edc9SAndrew Jeffery</tr>
132693c8edc9SAndrew Jeffery</table>
132793c8edc9SAndrew Jeffery
132893c8edc9SAndrew Jeffery### Description
132993c8edc9SAndrew Jeffery
133093c8edc9SAndrew JefferyDescribes a flash with some kind of identifier useful to the host system.
133193c8edc9SAndrew Jeffery
133293c8edc9SAndrew JefferyThe length in the response is the number of response arguments as part of the
133393c8edc9SAndrew Jefferyflash name field which the host should expect to have been populated.
133493c8edc9SAndrew Jeffery
133593c8edc9SAndrew JefferyNote that DBus encodes the string length in its string type, so the explicit
133693c8edc9SAndrew Jefferylength is omitted from the DBus message.
133793c8edc9SAndrew Jeffery
133893c8edc9SAndrew Jeffery## `LOCK` Command
133993c8edc9SAndrew Jeffery
134093c8edc9SAndrew Jeffery| v1  | v2  | v3  | M   | I   | D    |
13416a51e5f4SPatrick Williams| --- | --- | --- | --- | --- | ---- |
134293c8edc9SAndrew Jeffery|     |     | ✓   | 12  | 12  | Lock |
134393c8edc9SAndrew Jeffery
134493c8edc9SAndrew Jeffery### v3 Parameters
134593c8edc9SAndrew Jeffery
134693c8edc9SAndrew Jeffery<table>
134793c8edc9SAndrew Jeffery<tr>
134893c8edc9SAndrew Jeffery<th>Command</th><th>Response</th>
134993c8edc9SAndrew Jeffery</tr>
135093c8edc9SAndrew Jeffery<tr>
135193c8edc9SAndrew Jeffery<td valign="top">
135293c8edc9SAndrew Jeffery
135393c8edc9SAndrew Jeffery| Parameter    | Unit   | Size | M   | I   | D   |
13546a51e5f4SPatrick Williams| ------------ | ------ | ---- | --- | --- | --- |
135593c8edc9SAndrew Jeffery| Flash Offset | Blocks | 2    | 0   | 0   | q   |
135693c8edc9SAndrew Jeffery| Length       | Blocks | 2    | 2   | 2   | q   |
135793c8edc9SAndrew Jeffery| Device ID    | Index  | 1    | 4   | 4   | y   |
135893c8edc9SAndrew Jeffery
135993c8edc9SAndrew Jeffery</td>
136093c8edc9SAndrew Jeffery<td valign="top">
136193c8edc9SAndrew Jeffery
136293c8edc9SAndrew Jeffery| Parameter | Unit | Size | M   | I   | D   |
13636a51e5f4SPatrick Williams| --------- | ---- | ---- | --- | --- | --- |
136493c8edc9SAndrew Jeffery
136593c8edc9SAndrew Jeffery</td>
136693c8edc9SAndrew Jeffery</tr>
136793c8edc9SAndrew Jeffery</table>
136893c8edc9SAndrew Jeffery
136993c8edc9SAndrew Jeffery### Description
137093c8edc9SAndrew Jeffery
137193c8edc9SAndrew JefferyLock an area of flash so that the host can't mark it dirty or erased. If the
137293c8edc9SAndrew Jefferyrequested area is within the current window and that area is currently marked
137393c8edc9SAndrew Jefferydirty or erased then this command must fail.
137493c8edc9SAndrew Jeffery
137593c8edc9SAndrew Jeffery# Event Definitions
137693c8edc9SAndrew Jeffery
137793c8edc9SAndrew JefferyThe M, I, and D columns represent the Mailbox, IPMI and DBus transports
137893c8edc9SAndrew Jefferyrespectively. The values in the M, I or D columns represent the events' bit
137993c8edc9SAndrew Jefferyindex in the status byte, or in the case of the DBus transport the name of the
1380fd4fa34dSAndrew Jefferyrelevant property.
138193c8edc9SAndrew Jeffery
1382fd4fa34dSAndrew JefferyFor the DBus interface, properties are used for all event types regardless of
13836a51e5f4SPatrick Williamswhether they should be acknowledged or not as part of the protocol. This ensures
13846a51e5f4SPatrick Williamsthat state changes can be published atomically.
138593c8edc9SAndrew Jeffery
138693c8edc9SAndrew Jeffery## `PROTOCOL_RESET` Event
138793c8edc9SAndrew Jeffery
138893c8edc9SAndrew Jeffery| v1  | v2  | v3  | M   | I   | D             |
13896a51e5f4SPatrick Williams| --- | --- | --- | --- | --- | ------------- |
139093c8edc9SAndrew Jeffery| ✓   | ✓   | ✓   | 0   | 0   | ProtocolReset |
139193c8edc9SAndrew Jeffery
139293c8edc9SAndrew Jeffery### Description
139393c8edc9SAndrew Jeffery
139493c8edc9SAndrew JefferyUsed to inform the host that a protocol reset has occurred, likely due to
139593c8edc9SAndrew Jefferyrestarting the daemon. The host must perform protocol version negotiation again
139693c8edc9SAndrew Jefferyand must assume it has no active window. The host must also assume that any
139793c8edc9SAndrew Jefferyin-flight commands have failed.
139893c8edc9SAndrew Jeffery
139993c8edc9SAndrew Jeffery## `WINDOW_RESET` Event
140093c8edc9SAndrew Jeffery
140193c8edc9SAndrew Jeffery| v1  | v2  | v3  | M   | I   | D           |
14026a51e5f4SPatrick Williams| --- | --- | --- | --- | --- | ----------- |
140393c8edc9SAndrew Jeffery|     | ✓   | ✓   | 1   | 1   | WindowReset |
140493c8edc9SAndrew Jeffery
140593c8edc9SAndrew Jeffery### Description
140693c8edc9SAndrew Jeffery
140793c8edc9SAndrew JefferyThe host must assume that its active window has been closed and that it no
140893c8edc9SAndrew Jefferylonger has an active window. The host is not required to perform protocol
14096a51e5f4SPatrick Williamsversion negotiation again. The host must assume that any in-flight commands have
14106a51e5f4SPatrick Williamsfailed.
141193c8edc9SAndrew Jeffery
141293c8edc9SAndrew Jeffery## `FLASH_CONTROL_LOST` Event
141393c8edc9SAndrew Jeffery
141493c8edc9SAndrew Jeffery| v1  | v2  | v3  | M   | I   | D                |
14156a51e5f4SPatrick Williams| --- | --- | --- | --- | --- | ---------------- |
141693c8edc9SAndrew Jeffery|     | ✓   | ✓   | 6   | 6   | FlashControlLost |
141793c8edc9SAndrew Jeffery
141893c8edc9SAndrew Jeffery### Description
141993c8edc9SAndrew Jeffery
142093c8edc9SAndrew JefferyThe BMC daemon has been suspended and thus no longer controls access to the
142193c8edc9SAndrew Jefferyflash (most likely because some other process on the BMC required direct access
142293c8edc9SAndrew Jefferyto the flash and has suspended the BMC daemon to preclude concurrent access).
142393c8edc9SAndrew Jeffery
142493c8edc9SAndrew JefferyThe BMC daemon must clear this bit itself when it regains control of the flash
142593c8edc9SAndrew Jeffery(the host isn't able to clear it through an acknowledge command).
142693c8edc9SAndrew Jeffery
142793c8edc9SAndrew JefferyThe host must not assume that the contents of the active window correctly
142893c8edc9SAndrew Jefferyreflect the contents of flash while this bit is set.
142993c8edc9SAndrew Jeffery
143093c8edc9SAndrew Jeffery## `DAEMON_READY` Event
143193c8edc9SAndrew Jeffery
143293c8edc9SAndrew Jeffery| v1  | v2  | v3  | M   | I   | D           |
14336a51e5f4SPatrick Williams| --- | --- | --- | --- | --- | ----------- |
143493c8edc9SAndrew Jeffery|     | ✓   | ✓   | 7   | 7   | DaemonReady |
143593c8edc9SAndrew Jeffery
143693c8edc9SAndrew Jeffery### Description
143793c8edc9SAndrew Jeffery
14386a51e5f4SPatrick WilliamsUsed to inform the host that the BMC daemon is ready to accept command requests.
14396a51e5f4SPatrick WilliamsThe host isn't able to clear this bit through an acknowledge command, the BMC
14406a51e5f4SPatrick Williamsdaemon must clear it before it terminates (assuming it didn't terminate
144193c8edc9SAndrew Jefferyunexpectedly).
144293c8edc9SAndrew Jeffery
144393c8edc9SAndrew JefferyThe host should not expect a response while this bit is not set.
144493c8edc9SAndrew Jeffery
14456a51e5f4SPatrick WilliamsNote that this bit being set is not a guarantee that the BMC daemon will respond
14466a51e5f4SPatrick Williamsas it or the BMC may have crashed without clearing it.
1447