edk2/DynamicTablesPkg/Library/Common/MetadataHandlerLib/MetadataHandler.h
Pierre Gondois d15e48853c DynamicTablesPkg: Add MetadataHandlerLib library
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>
2025-06-11 12:24:35 +00:00

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_