blob: e3da4378a139649d11c17335f9bdae04313f01ef [file] [log] [blame]
Alexander Filippov1df817f2020-09-28 20:02:03 +03001From 104027fff5db49d60d2ff7256580b8efb6429a27 Mon Sep 17 00:00:00 2001
2From: Alexander Amelkin <a.amelkin@yadro.com>
3Date: Wed, 20 Mar 2019 19:33:00 +0300
4Subject: [PATCH] Add boot initiator mailbox interface
5
6Add the xyz.openbmc_project.Control.Boot.Mailbox interface to allow
7for provision of the boot initiator (such as Petitboot or UEFI) with
8its specific parameters. This is based on IPMI 2.0 Table 28-14 'Boot
9Option Parameters' parameter 7 'Boot initiator mailbox'.
10
11Partially resolves openbmc/openbmc#3391
12
13Change-Id: If2a7dce6fae812fc3f1f325cd07c77f31900cf42
14Signed-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
23diff --git a/gen/xyz/openbmc_project/Control/Boot/Mailbox/meson.build b/gen/xyz/openbmc_project/Control/Boot/Mailbox/meson.build
24new file mode 100644
25index 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+
43diff --git a/gen/xyz/openbmc_project/Control/Boot/meson.build b/gen/xyz/openbmc_project/Control/Boot/meson.build
44index 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(),
67diff --git a/xyz/openbmc_project/Control/Boot/Mailbox.interface.yaml b/xyz/openbmc_project/Control/Boot/Mailbox.interface.yaml
68new file mode 100644
69index 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--
1372.26.2
138