Alexander Filippov | 1df817f | 2020-09-28 20:02:03 +0300 | [diff] [blame^] | 1 | From 104027fff5db49d60d2ff7256580b8efb6429a27 Mon Sep 17 00:00:00 2001 |
| 2 | From: Alexander Amelkin <a.amelkin@yadro.com> |
| 3 | Date: Wed, 20 Mar 2019 19:33:00 +0300 |
| 4 | Subject: [PATCH] Add boot initiator mailbox interface |
| 5 | |
| 6 | Add the xyz.openbmc_project.Control.Boot.Mailbox interface to allow |
| 7 | for provision of the boot initiator (such as Petitboot or UEFI) with |
| 8 | its specific parameters. This is based on IPMI 2.0 Table 28-14 'Boot |
| 9 | Option Parameters' parameter 7 'Boot initiator mailbox'. |
| 10 | |
| 11 | Partially resolves openbmc/openbmc#3391 |
| 12 | |
| 13 | Change-Id: If2a7dce6fae812fc3f1f325cd07c77f31900cf42 |
| 14 | Signed-off-by: Alexander Amelkin <a.amelkin@yadro.com> |
| 15 | --- |
| 16 | .../Control/Boot/Mailbox/meson.build | 14 +++++ |
| 17 | .../openbmc_project/Control/Boot/meson.build | 15 +++++ |
| 18 | .../Control/Boot/Mailbox.interface.yaml | 63 +++++++++++++++++++ |
| 19 | 3 files changed, 92 insertions(+) |
| 20 | create mode 100644 gen/xyz/openbmc_project/Control/Boot/Mailbox/meson.build |
| 21 | create mode 100644 xyz/openbmc_project/Control/Boot/Mailbox.interface.yaml |
| 22 | |
| 23 | diff --git a/gen/xyz/openbmc_project/Control/Boot/Mailbox/meson.build b/gen/xyz/openbmc_project/Control/Boot/Mailbox/meson.build |
| 24 | new file mode 100644 |
| 25 | index 0000000..149e68a |
| 26 | --- /dev/null |
| 27 | +++ b/gen/xyz/openbmc_project/Control/Boot/Mailbox/meson.build |
| 28 | @@ -0,0 +1,14 @@ |
| 29 | +# Generated file; do not modify. |
| 30 | +generated_sources += custom_target( |
| 31 | + 'xyz/openbmc_project/Control/Boot/Mailbox__cpp'.underscorify(), |
| 32 | + input: [ meson.source_root() / 'xyz/openbmc_project/Control/Boot/Mailbox.interface.yaml', ], |
| 33 | + output: [ 'server.cpp', 'server.hpp', 'client.hpp', ], |
| 34 | + command: [ |
| 35 | + sdbuspp_gen_meson_prog, '--command', 'cpp', |
| 36 | + '--output', meson.current_build_dir(), |
| 37 | + '--tool', sdbusplusplus_prog, |
| 38 | + '--directory', meson.source_root(), |
| 39 | + 'xyz/openbmc_project/Control/Boot/Mailbox', |
| 40 | + ], |
| 41 | +) |
| 42 | + |
| 43 | diff --git a/gen/xyz/openbmc_project/Control/Boot/meson.build b/gen/xyz/openbmc_project/Control/Boot/meson.build |
| 44 | index ba8a19f..6901fc0 100644 |
| 45 | --- a/gen/xyz/openbmc_project/Control/Boot/meson.build |
| 46 | +++ b/gen/xyz/openbmc_project/Control/Boot/meson.build |
| 47 | @@ -1,4 +1,19 @@ |
| 48 | # Generated file; do not modify. |
| 49 | +subdir('Mailbox') |
| 50 | +generated_others += custom_target( |
| 51 | + 'xyz/openbmc_project/Control/Boot/Mailbox__markdown'.underscorify(), |
| 52 | + input: [ meson.source_root() / 'xyz/openbmc_project/Control/Boot/Mailbox.interface.yaml', ], |
| 53 | + output: [ 'Mailbox.md' ], |
| 54 | + command: [ |
| 55 | + sdbuspp_gen_meson_prog, '--command', 'markdown', |
| 56 | + '--output', meson.current_build_dir(), |
| 57 | + '--tool', sdbusplusplus_prog, |
| 58 | + '--directory', meson.source_root(), |
| 59 | + 'xyz/openbmc_project/Control/Boot/Mailbox', |
| 60 | + ], |
| 61 | + build_by_default: true, |
| 62 | +) |
| 63 | + |
| 64 | subdir('Mode') |
| 65 | generated_others += custom_target( |
| 66 | 'xyz/openbmc_project/Control/Boot/Mode__markdown'.underscorify(), |
| 67 | diff --git a/xyz/openbmc_project/Control/Boot/Mailbox.interface.yaml b/xyz/openbmc_project/Control/Boot/Mailbox.interface.yaml |
| 68 | new file mode 100644 |
| 69 | index 0000000..839e8be |
| 70 | --- /dev/null |
| 71 | +++ b/xyz/openbmc_project/Control/Boot/Mailbox.interface.yaml |
| 72 | @@ -0,0 +1,63 @@ |
| 73 | +description: > |
| 74 | + Implement to provide the boot initiator (such as Petitboot or UEFI) |
| 75 | + with its specific parameters. This is based on IPMI 2.0 Table 28-14 |
| 76 | + 'Boot Option Parameters' parameter 7 'Boot initiator mailbox'. |
| 77 | + |
| 78 | +properties: |
| 79 | + - name: Supported |
| 80 | + type: boolean |
| 81 | + flags: |
| 82 | + - const |
| 83 | + default: false |
| 84 | + description: > |
| 85 | + Specifies whether or not the mailbox is supported by the |
| 86 | + boot initiator on this machine. |
| 87 | + |
| 88 | + The property is constant and is only set by the implementation |
| 89 | + on startup. |
| 90 | + |
| 91 | + - name: IANAEnterpriseNumber |
| 92 | + type: uint32 |
| 93 | + flags: |
| 94 | + - const |
| 95 | + default: 0 |
| 96 | + description: > |
| 97 | + The 24-bit IANA Private Enterprise Number for the company or organization |
| 98 | + that has specified the boot initiator. This is a machine-specific |
| 99 | + constant. The implementing application is responsible for setting |
| 100 | + this to the proper machine-specific value (0x000000..0xFFFFFF) |
| 101 | + according to https://www.iana.org/assignments/enterprise-numbers/enterprise-numbers. |
| 102 | + |
| 103 | + The property is constant and is only set by the implementation |
| 104 | + on startup. |
| 105 | + |
| 106 | + - name: Data |
| 107 | + type: array[byte] |
| 108 | + description: > |
| 109 | + The array of data bytes for the boot initiator to treat |
| 110 | + in its specific way. This interface doesn't impose any |
| 111 | + limitiations on the format or make any assumptions regarding |
| 112 | + it. The boot initiator is responsible for parsing this array. |
| 113 | + |
| 114 | + The size of the array is a constant depending on the requirements |
| 115 | + set by the boot initiator used for a particular architecture or |
| 116 | + a machine. The implementing application is responsible for setting |
| 117 | + the size of this array to the proper value. |
| 118 | + |
| 119 | + For conformance to the IPMI 2.0 specification, the size of the array |
| 120 | + plus 3 (the size of IPMI 2.0 representation of IANA Enterprise Number) |
| 121 | + must be a multiple of 16 with the minimum allowed size being 77 |
| 122 | + (5 x 16-byte blocks, minus 3) if mailbox is at all Supported. |
| 123 | + |
| 124 | + For IPMI 2.0 this array is supposed to be split into 16-byte |
| 125 | + blocks by the implementing service (block 0 being made of IANA PEN |
| 126 | + plus first 13 bytes of this array). Please pay special attention |
| 127 | + that this array does NOT include the IANA PEN needed for IPMI 2.0. |
| 128 | + Only the actual PEN-specific data is stored here. |
| 129 | + |
| 130 | + When partially written to, the remaining parts of this array |
| 131 | + must not be automatically cleared. This is per IPMI 2.0 |
| 132 | + specification. |
| 133 | + |
| 134 | + Other interfaces to the boot initiator (such as MCTP) may process |
| 135 | + this array differently. |
| 136 | -- |
| 137 | 2.26.2 |
| 138 | |