diff options
author | Angel Pons <th3fanbus@gmail.com> | 2021-05-20 16:43:08 +0200 |
---|---|---|
committer | Angel Pons <th3fanbus@gmail.com> | 2021-05-28 11:37:25 +0000 |
commit | 9bc780fc9fef78f5af8f2d93190ab4c5876cca60 (patch) | |
tree | 8f8e7f3ba13f6ff79e0a280aa8a65dd9c1abaf27 /Documentation | |
parent | 17852e61df41877a7f2a37f0af547017d0bcc735 (diff) |
option: Allow mainboards to implement the API
Some mainboards need a mainboard-specific mechanism to access option
values. Allow mainboards to implement the option API. Also, add some
documentation about the current option API, and describe when should
one reimplement the option API in mainboard code: only when the code
is mainboard-specific to comply with externally-imposed constraints.
Change-Id: Idccdb9a008b1ebb89821961659f27b1c0b17d29c
Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com>
Signed-off-by: Angel Pons <th3fanbus@gmail.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/54729
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Arthur Heymans <arthur@aheymans.xyz>
Diffstat (limited to 'Documentation')
-rw-r--r-- | Documentation/index.md | 1 | ||||
-rw-r--r-- | Documentation/lib/option.md | 31 |
2 files changed, 32 insertions, 0 deletions
diff --git a/Documentation/index.md b/Documentation/index.md index 9870cf3108..c518c5085b 100644 --- a/Documentation/index.md +++ b/Documentation/index.md @@ -183,6 +183,7 @@ Contents: * [Mainboard](mainboard/index.md) * [Payloads](lib/payloads/index.md) * [Libraries](lib/index.md) +* [Options](lib/option.md) * [Security](security/index.md) * [SuperIO](superio/index.md) * [Vendorcode](vendorcode/index.md) diff --git a/Documentation/lib/option.md b/Documentation/lib/option.md new file mode 100644 index 0000000000..eb63390ec7 --- /dev/null +++ b/Documentation/lib/option.md @@ -0,0 +1,31 @@ +# Option API + +The option API around the `set_option(const char *name, void *val)` and +`get_option(void *dest, const char *name)` functions deprecated in favor +of a type-safe API. + +Historically, options were stored in RTC battery-backed CMOS RAM inside +the chipset on PC platforms. Nowadays, options can also be stored in the +same flash chip as the boot firmware or through some BMC interface. + +The new type-safe option framework can be used by calling +`enum cb_err set_uint_option(const char *name, unsigned int value)` and +`unsigned int get_uint_option(const char *name, const unsigned int fallback)`. + +The default setting is `OPTION_BACKEND_NONE`, which disables any runtime +configurable options. If supported by a mainboard, the `USE_OPTION_TABLE` +and `USE_MAINBOARD_SPECIFIC_OPTION_BACKEND` choices are visible, and can +be selected to enable runtime configurability. + +# Mainboard-specific option backend + +Mainboards with a mainboard-specific (vendor-defined) method to access +options can select `HAVE_MAINBOARD_SPECIFIC_OPTION_BACKEND` to provide +implementations of the option API accessors. To allow choosing between +multiple option backends, the mainboard-specific implementation should +only be built when `USE_MAINBOARD_SPECIFIC_OPTION_BACKEND` is selected. + +Where possible, using a generic, mainboard-independent mechanism should +be preferred over reinventing the wheel in mainboard-specific code. The +mainboard-specific approach should only be used when the option storage +mechanism has to satisfy externally-imposed, vendor-defined constraints. |