Per latest design direction, we've abandoned treating the PRM Module Update Lock as an exported object. There was concern sharing the PRM module address space (where the lock structure resided in a data section) with the OS kernel mode driver. The lock will now be entirely maintained in OS context with interaces to control the lock available to ASL (for _DSM invocation) and OS native code (for direct call). Cc: Andrew Fish <afish@apple.com> Cc: Kang Gao <kang.gao@intel.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Cc: Michael Kubacki <michael.kubacki@microsoft.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Benjamin You <benjamin.you@intel.com> Cc: Liu Yun <yun.y.liu@intel.com> Cc: Ankit Sinha <ankit.sinha@intel.com> Cc: Nate DeSimone <nathaniel.l.desimone@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Acked-by: Michael D Kinney <michael.d.kinney@intel.com> Acked-by: Liming Gao <gaoliming@byosoft.com.cn> Acked-by: Leif Lindholm <quic_llindhol@quicinc.com> Reviewed-by: Ankit Sinha <ankit.sinha@intel.com>
100 lines
6.3 KiB
C
100 lines
6.3 KiB
C
/** @file
|
|
|
|
Definition for the Platform Runtime Mechanism (PRM) ACPI table (PRMT).
|
|
|
|
Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
|
|
Copyright (c) Microsoft Corporation
|
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
|
|
**/
|
|
|
|
#ifndef PRMT_ACPI_TABLE_H_
|
|
#define PRMT_ACPI_TABLE_H_
|
|
|
|
#include <Base.h>
|
|
#include <IndustryStandard/Acpi10.h>
|
|
|
|
#define PRM_TABLE_SIGNATURE SIGNATURE_32 ('P', 'R', 'M', 'T')
|
|
|
|
#define PRM_TABLE_REVISION 0x0
|
|
#define PRM_MODULE_INFORMATION_STRUCT_REVISION 0x00
|
|
#define PRM_HANDLER_INFORMATION_STRUCT_REVISION 0x00
|
|
|
|
#pragma pack(push, 1)
|
|
|
|
//
|
|
// Platform Runtime Mechanism (PRM) ACPI Table (PRMT) structures
|
|
//
|
|
typedef struct {
|
|
UINT16 StructureRevision; ///< Revision of this structure
|
|
UINT16 StructureLength; ///< Length in bytes of this structure
|
|
GUID Identifier; ///< GUID of the PRM handler for this structure
|
|
UINT64 PhysicalAddress; ///< Physical address of this PRM handler
|
|
#ifdef ALLOCATE_CONTEXT_BUFFER_IN_FW
|
|
UINT64 PrmContextBuffer; ///< Physical address of the context buffer for this
|
|
///< PRM handler (PRM_CONTEXT_BUFFER *)
|
|
#else
|
|
UINT64 StaticDataBuffer; ///< Physical address of the static data buffer for
|
|
///< this PRM handler (PRM_DATA_BUFFER *)
|
|
UINT64 AcpiParameterBuffer; ///< Physical address of the parameter buffer
|
|
///< for this PRM handler (PRM_DATA_BUFFER *)
|
|
///< that is only used in the case of _DSM invocation.
|
|
///< If _DSM invocation is not used, this value is
|
|
///< ignored.
|
|
#endif
|
|
|
|
} PRM_HANDLER_INFORMATION_STRUCT;
|
|
|
|
typedef struct {
|
|
UINT16 StructureRevision; ///< Revision of this structure
|
|
UINT16 StructureLength; ///< Length in bytes of this structure including the
|
|
///< variable length PRM Handler Info array
|
|
GUID Identifier; ///< GUID of the PRM module for this structure
|
|
UINT16 MajorRevision; ///< PRM module major revision
|
|
UINT16 MinorRevision; ///< PRM module minor revision
|
|
UINT16 HandlerCount; ///< Number of entries in the Handler Info array
|
|
UINT32 HandlerInfoOffset; ///< Offset in bytes from the beginning of this
|
|
///< structure to the Handler Info array
|
|
UINT64 RuntimeMmioRanges; ///< Physical address of the PRM MMIO Ranges
|
|
///< structure (PRM_MODULE_RUNTIME_MMIO_RANGES *)
|
|
PRM_HANDLER_INFORMATION_STRUCT HandlerInfoStructure[1];
|
|
} PRM_MODULE_INFORMATION_STRUCT;
|
|
|
|
typedef struct {
|
|
EFI_ACPI_DESCRIPTION_HEADER Header; ///< Standard ACPI description header
|
|
UINT32 PrmModuleInfoOffset; ///< Offset in bytes from the beginning of this
|
|
///< structure to the PRM Module Info array
|
|
UINT32 PrmModuleInfoCount; ///< Number of entries in the PRM Module Info array
|
|
PRM_MODULE_INFORMATION_STRUCT PrmModuleInfoStructure[1];
|
|
} PRM_ACPI_DESCRIPTION_TABLE;
|
|
|
|
#pragma pack(pop)
|
|
|
|
//
|
|
// Helper macros to build PRM Information structures
|
|
//
|
|
// Todo: Revisit whether to use; currently both macros are not used
|
|
//
|
|
#define PRM_MODULE_INFORMATION_STRUCTURE(ModuleGuid, ModuleRevision, HandlerCount, PrmHanderInfoStructureArray) { \
|
|
{ \
|
|
PRM_MODULE_INFORMATION_STRUCT_REVISION, /* UINT16 StructureRevision; */ \
|
|
(OFFSET_OF (PRM_MODULE_INFORMATION_STRUCT, HandlerInfoStructure) + (HandlerCount * sizeof (PRM_HANDLER_INFORMATION_STRUCT))) /* UINT16 StructureLength; */ \
|
|
ModuleGuid, /* GUID ModuleGuid; */ \
|
|
ModuleRevision, /* UINT16 ModuleRevision */ \
|
|
HandlerCount, /* UINT16 HandlerCount */ \
|
|
OFFSET_OF (PRM_MODULE_INFORMATION_STRUCT, HandlerInfoOffset), /* UINT32 HandlerInfoOffset */ \
|
|
PrmHanderInfoStructureArray /* PRM_HANDLER_INFORMATION_STRUCT HandlerInfoStructure */ \
|
|
} \
|
|
}
|
|
|
|
#define PRM_HANDLER_INFORMATION_STRUCTURE(HandlerGuid, PhysicalAddress) { \
|
|
{ \
|
|
PRM_HANDLER_INFORMATION_STRUCT_REVISION, /* UINT16 StructureRevision; */ \
|
|
sizeof (PRM_HANDLER_INFORMATION_STRUCT), /* UINT16 StructureLength; */ \
|
|
HandlerGuid, /* GUID HandlerGuid; */ \
|
|
PhysicalAddress, /* UINT64 PhysicalAddress */ \
|
|
} \
|
|
}
|
|
|
|
#endif // _PRMT_ACPI_TABLE_H_
|