From: "Nate DeSimone" <nathaniel.l.desimone@intel.com>
To: devel@edk2.groups.io
Cc: Chasel Chiu <chasel.chiu@intel.com>,
Liming Gao <gaoliming@byosoft.com.cn>,
Eric Dong <eric.dong@intel.com>,
Michael Kubacki <michael.kubacki@microsoft.com>,
Isaac Oram <isaac.w.oram@intel.com>
Subject: [edk2-platforms] [PATCH v4 0/4] Add Large Variable Libraries
Date: Tue, 6 Apr 2021 20:04:22 -0700 [thread overview]
Message-ID: <20210407030426.8075-1-nathaniel.l.desimone@intel.com> (raw)
Changes from V3:
- Added header guards
- Documented the possibility of returning EFI_UNSUPPORTED
- Added MM_CORE_STANDALONE to the StandaloneMm library
implementations
- Documented library constructor return status
- Moved LargeVariableReadLib and LargeVariableWriteLib into
a single BaseLargeVariableLib folder
- Added LargeVariableCommon.h for shared macro definitions
- Converted some debug macros from DEBUG_INFO to DEBUG_VERBOSE
Changes from V2:
- Added comment to LargeVariableLib INF and header files
describing the usage for drivers that cannot assume that
PcdMaxVariableSize has been set to a certain minimum value.
Changes from V1:
- Changed prefix from "Min" to "VarLib"
- Better comments
- Added more whitespace for readability
- Removed unused INF sections
- Better debug messages
This patch series introduces libaries that enable large data sets
to be stored using the UEFI Variable Services. At present, most
UEFI Variable Services implementations have a maximum variable
size of <=64KB. The exact value varies depending on platform.
These libaries enable a data set to use as much space as needed,
up to the remaining space in the UEFI Variable non-volatile storage.
To implement this, I have broken the problem down into two parts:
1. Phase angostic UEFI Variable access.
2. Storage of data across multiple UEFI Variables.
For the first part, I have created two new LibraryClasses:
VariableReadLib and VariableWriteLib. I have provided
implementation instances of VariableReadLib for PEI, DXE, and SMM.
For VariableWriteLib, I have provided implementation instances for
DXE and SMM. This enables code that accesses UEFI variables
to be written in a matter than is phase agnostic, so the same
code can be used in PEI, DXE, or SMM without modification.
The second part involves another two new LibaryClasses:
LargeVariableReadLib and LargeVariableWriteLib. Only one BASE
implementation is needed for both of these as the phase dependent
code was seperated out in the first piece. These libraries provide
logic to calculate the maximum size of an individual UEFI variable
and split the data into as many smaller pieces as needed to store
the entire data set in the UEFI Variable storage. They also provide
the ability to stitch the data back together when it is read.
Deleting the data will delete all variables used to store it.
Cc: Chasel Chiu <chasel.chiu@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Eric Dong <eric.dong@intel.com>
Cc: Michael Kubacki <michael.kubacki@microsoft.com>
Cc: Isaac Oram <isaac.w.oram@intel.com>
Signed-off-by: Nate DeSimone <nathaniel.l.desimone@intel.com>
Nate DeSimone (4):
MinPlatformPkg: Add VariableReadLib
MinPlatformPkg: Add VariableWriteLib
MinPlatformPkg: Add LargeVariableReadLib
MinPlatformPkg: Add LargeVariableWriteLib
.../Include/Dsc/CoreCommonLib.dsc | 6 +-
.../MinPlatformPkg/Include/Dsc/CoreDxeLib.dsc | 12 +-
.../MinPlatformPkg/Include/Dsc/CorePeiLib.dsc | 9 +-
.../Include/Library/LargeVariableReadLib.h | 61 +++
.../Include/Library/LargeVariableWriteLib.h | 69 +++
.../Include/Library/VariableReadLib.h | 94 ++++
.../Include/Library/VariableWriteLib.h | 138 ++++++
.../BaseLargeVariableReadLib.inf | 51 ++
.../BaseLargeVariableWriteLib.inf | 51 ++
.../LargeVariableCommon.h | 47 ++
.../LargeVariableReadLib.c | 176 +++++++
.../LargeVariableWriteLib.c | 450 ++++++++++++++++++
.../DxeRuntimeVariableReadLib.c | 117 +++++
.../DxeRuntimeVariableReadLib.inf | 41 ++
.../DxeRuntimeVariableWriteLib.c | 265 +++++++++++
.../DxeRuntimeVariableWriteLib.inf | 49 ++
.../PeiVariableReadLib/PeiVariableReadLib.c | 155 ++++++
.../PeiVariableReadLib/PeiVariableReadLib.inf | 42 ++
.../SmmVariableReadCommon.c | 116 +++++
.../StandaloneMmVariableReadLib.inf | 50 ++
.../StandaloneMmVariableReadLibConstructor.c | 51 ++
.../TraditionalMmVariableReadLib.inf | 49 ++
.../TraditionalMmVariableReadLibConstructor.c | 51 ++
.../SmmVariableWriteCommon.c | 171 +++++++
.../StandaloneMmVariableWriteLib.inf | 45 ++
.../StandaloneMmVariableWriteLibConstructor.c | 51 ++
.../TraditionalMmVariableWriteLib.inf | 44 ++
...TraditionalMmVariableWriteLibConstructor.c | 51 ++
.../Intel/MinPlatformPkg/MinPlatformPkg.dsc | 4 +-
29 files changed, 2506 insertions(+), 10 deletions(-)
create mode 100644 Platform/Intel/MinPlatformPkg/Include/Library/LargeVariableReadLib.h
create mode 100644 Platform/Intel/MinPlatformPkg/Include/Library/LargeVariableWriteLib.h
create mode 100644 Platform/Intel/MinPlatformPkg/Include/Library/VariableReadLib.h
create mode 100644 Platform/Intel/MinPlatformPkg/Include/Library/VariableWriteLib.h
create mode 100644 Platform/Intel/MinPlatformPkg/Library/BaseLargeVariableLib/BaseLargeVariableReadLib.inf
create mode 100644 Platform/Intel/MinPlatformPkg/Library/BaseLargeVariableLib/BaseLargeVariableWriteLib.inf
create mode 100644 Platform/Intel/MinPlatformPkg/Library/BaseLargeVariableLib/LargeVariableCommon.h
create mode 100644 Platform/Intel/MinPlatformPkg/Library/BaseLargeVariableLib/LargeVariableReadLib.c
create mode 100644 Platform/Intel/MinPlatformPkg/Library/BaseLargeVariableLib/LargeVariableWriteLib.c
create mode 100644 Platform/Intel/MinPlatformPkg/Library/DxeRuntimeVariableReadLib/DxeRuntimeVariableReadLib.c
create mode 100644 Platform/Intel/MinPlatformPkg/Library/DxeRuntimeVariableReadLib/DxeRuntimeVariableReadLib.inf
create mode 100644 Platform/Intel/MinPlatformPkg/Library/DxeRuntimeVariableWriteLib/DxeRuntimeVariableWriteLib.c
create mode 100644 Platform/Intel/MinPlatformPkg/Library/DxeRuntimeVariableWriteLib/DxeRuntimeVariableWriteLib.inf
create mode 100644 Platform/Intel/MinPlatformPkg/Library/PeiVariableReadLib/PeiVariableReadLib.c
create mode 100644 Platform/Intel/MinPlatformPkg/Library/PeiVariableReadLib/PeiVariableReadLib.inf
create mode 100644 Platform/Intel/MinPlatformPkg/Library/SmmVariableReadLib/SmmVariableReadCommon.c
create mode 100644 Platform/Intel/MinPlatformPkg/Library/SmmVariableReadLib/StandaloneMmVariableReadLib.inf
create mode 100644 Platform/Intel/MinPlatformPkg/Library/SmmVariableReadLib/StandaloneMmVariableReadLibConstructor.c
create mode 100644 Platform/Intel/MinPlatformPkg/Library/SmmVariableReadLib/TraditionalMmVariableReadLib.inf
create mode 100644 Platform/Intel/MinPlatformPkg/Library/SmmVariableReadLib/TraditionalMmVariableReadLibConstructor.c
create mode 100644 Platform/Intel/MinPlatformPkg/Library/SmmVariableWriteLib/SmmVariableWriteCommon.c
create mode 100644 Platform/Intel/MinPlatformPkg/Library/SmmVariableWriteLib/StandaloneMmVariableWriteLib.inf
create mode 100644 Platform/Intel/MinPlatformPkg/Library/SmmVariableWriteLib/StandaloneMmVariableWriteLibConstructor.c
create mode 100644 Platform/Intel/MinPlatformPkg/Library/SmmVariableWriteLib/TraditionalMmVariableWriteLib.inf
create mode 100644 Platform/Intel/MinPlatformPkg/Library/SmmVariableWriteLib/TraditionalMmVariableWriteLibConstructor.c
--
2.27.0.windows.1
next reply other threads:[~2021-04-07 3:06 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-07 3:04 Nate DeSimone [this message]
2021-04-07 3:04 ` [edk2-platforms] [PATCH v4 1/4] MinPlatformPkg: Add VariableReadLib Nate DeSimone
2021-04-07 3:04 ` [edk2-platforms] [PATCH v4 2/4] MinPlatformPkg: Add VariableWriteLib Nate DeSimone
2021-04-07 3:04 ` [edk2-platforms] [PATCH v4 3/4] MinPlatformPkg: Add LargeVariableReadLib Nate DeSimone
2021-04-07 3:04 ` [edk2-platforms] [PATCH v4 4/4] MinPlatformPkg: Add LargeVariableWriteLib Nate DeSimone
2021-04-07 4:03 ` [edk2-devel] [edk2-platforms] [PATCH v4 0/4] Add Large Variable Libraries Michael Kubacki
2021-04-07 5:00 ` Chiu, Chasel
2021-04-07 19:15 ` Nate DeSimone
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210407030426.8075-1-nathaniel.l.desimone@intel.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox