mirror of
https://github.com/tianocore/edk2.git
synced 2025-09-01 06:25:55 +00:00

Built on top of the MetadataObjLib, this library aims to provide functions for each METADATA_ID to: - Generate new Metadata on the fly: the caller provides minimal information for a METADATA_ID, and the library generates the missing information. - Validate all the Metadata objects for a METADATA_ID. For instance, _UID must be unique for a _HID/_CID/EISAID. This patch also adds support for generation/validation of: - UIDs: For each EISAID or NameId, UIDs must be unique. The generation if UIDs is done by a per-EISAID/NameId incrementing counter. The validation of the Metadata consists in checking for the uniqueness of the UID per EISAID/NameId. - ProximityDomains: Proximity Domain Ids are generated by a counter, starting from 0. The validation of the Metadata consists in checking for the uniqueness of the proximity domain Ids. Signed-off-by: Pierre Gondois <pierre.gondois@arm.com>
145 lines
5.0 KiB
C
145 lines
5.0 KiB
C
/** @file
|
|
Metadata Handler Library.
|
|
|
|
Copyright (c) 2025, Arm Limited. All rights reserved.
|
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
**/
|
|
|
|
#ifndef METADATA_HANDLER_H_
|
|
#define METADATA_HANDLER_H_
|
|
|
|
/** Query the MetadataObjLib for metadata matching the input (Type/Token).
|
|
If the metadata exists, return it.
|
|
Otherwise:
|
|
- Generate a new metadata object
|
|
- Add it to the MetadataObjLib
|
|
- return it
|
|
|
|
@param[in] Root Root of the Metadata information.
|
|
@param[in] Type METADATA_TYPE of the entry to generate.
|
|
@param[in] Token Token uniquely identifying an entry among other
|
|
objects with the input METADATA_TYPE.
|
|
@param[in] Context Optional context to use during the Metadata generation.
|
|
@param[in, out] Metadata On input, can contain METADATA_TYPE-specific information.
|
|
On output and if success, contains the generated
|
|
Metadata object.
|
|
@param[in] MetadataSize Size of the input Metadata.
|
|
|
|
@retval EFI_SUCCESS Success.
|
|
@retval EFI_INVALID_PARAMETER A parameter is invalid.
|
|
**/
|
|
typedef EFI_STATUS (EFIAPI *METADATA_GENERATOR)(
|
|
IN METADATA_ROOT_HANDLE Root,
|
|
IN METADATA_TYPE Type,
|
|
IN CM_OBJECT_TOKEN Token,
|
|
IN VOID *Context,
|
|
IN OUT VOID *Metadata,
|
|
IN UINT32 MetadataSize
|
|
);
|
|
|
|
/** Validate the Metadata.
|
|
|
|
@retval EFI_SUCCESS Success.
|
|
@retval EFI_INVALID_PARAMETER A parameter is invalid.
|
|
**/
|
|
typedef EFI_STATUS (EFIAPI *METADATA_VALIDATOR)(
|
|
IN METADATA_ROOT_HANDLE Root
|
|
);
|
|
|
|
/** Metadata Handlers.
|
|
*/
|
|
typedef struct MetadataHandlers {
|
|
METADATA_GENERATOR Generate;
|
|
METADATA_VALIDATOR Validate;
|
|
} METADATA_HANDLERS;
|
|
|
|
/** Query the MetadataObjLib for metadata matching the input (Type/Token).
|
|
If the metadata exists, return it.
|
|
Otherwise:
|
|
- Generate a new metadata object
|
|
- Add it to the MetadataObjLib
|
|
- return it
|
|
|
|
@param[in] Root Root of the Metadata information.
|
|
@param[in] Type METADATA_TYPE of the entry to generate.
|
|
@param[in] Token Token uniquely identifying an entry among other
|
|
objects with the input METADATA_TYPE.
|
|
@param[in] Context Optional context to use during the Metadata generation.
|
|
@param[in, out] Metadata On input, can contain METADATA_TYPE-specific information.
|
|
On output and if success, contains the generated
|
|
Metadata object.
|
|
@param[in] MetadataSize Size of the input Metadata.
|
|
|
|
@retval EFI_SUCCESS Success.
|
|
@retval EFI_INVALID_PARAMETER A parameter is invalid.
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
MetadataGenerateUid (
|
|
IN METADATA_ROOT_HANDLE Root,
|
|
IN METADATA_TYPE Type,
|
|
IN CM_OBJECT_TOKEN Token,
|
|
IN VOID *Context,
|
|
IN OUT VOID *Metadata,
|
|
IN UINT32 MetadataSize
|
|
);
|
|
|
|
/** Validate the Metadata.
|
|
|
|
@param[in] Root Root of the Metadata information.
|
|
|
|
@retval EFI_SUCCESS Success.
|
|
@retval EFI_INVALID_PARAMETER A parameter is invalid.
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
MetadataValidateUid (
|
|
IN METADATA_ROOT_HANDLE Root
|
|
);
|
|
|
|
/** Query the MetadataObjLib for metadata matching the input (Type/Token).
|
|
If the metadata exists, return it.
|
|
Otherwise:
|
|
- Generate a new metadata object
|
|
- Add it to the MetadataObjLib
|
|
- return it
|
|
|
|
@param[in] Root Root of the Metadata information.
|
|
@param[in] Type METADATA_TYPE of the entry to generate.
|
|
@param[in] Token Token uniquely identifying an entry among other
|
|
objects with the input METADATA_TYPE.
|
|
@param[in] Context Optional context to use during the Metadata generation.
|
|
@param[in, out] Metadata On input, can contain METADATA_TYPE-specific information.
|
|
On output and if success, contains the generated
|
|
Metadata object.
|
|
@param[in] MetadataSize Size of the input Metadata.
|
|
|
|
@retval EFI_SUCCESS Success.
|
|
@retval EFI_INVALID_PARAMETER A parameter is invalid.
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
MetadataGenerateProximityDomain (
|
|
IN METADATA_ROOT_HANDLE Root,
|
|
IN METADATA_TYPE Type,
|
|
IN CM_OBJECT_TOKEN Token,
|
|
IN VOID *Context,
|
|
IN OUT VOID *Metadata,
|
|
IN UINT32 MetadataSize
|
|
);
|
|
|
|
/** Validate the Metadata.
|
|
|
|
@param[in] Root Root of the Metadata information.
|
|
|
|
@retval EFI_SUCCESS Success.
|
|
@retval EFI_INVALID_PARAMETER A parameter is invalid.
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
MetadataValidateProximityDomain (
|
|
IN METADATA_ROOT_HANDLE Root
|
|
);
|
|
|
|
#endif // METADATA_HANDLER_H_
|