diff --git a/PrmPkg/PrmConfigDxe/PrmConfigDxe.c b/PrmPkg/PrmConfigDxe/PrmConfigDxe.c index 7215c2e1dc..c547db3eca 100644 --- a/PrmPkg/PrmConfigDxe/PrmConfigDxe.c +++ b/PrmPkg/PrmConfigDxe/PrmConfigDxe.c @@ -26,10 +26,8 @@ #define _DBGMSGID_ "[PRMCONFIG]" STATIC UINTN mMaxRuntimeMmioRangeCount; -STATIC UINTN mMaxStaticDataBufferCount; GLOBAL_REMOVE_IF_UNREFERENCED STATIC PRM_RUNTIME_MMIO_RANGES **mRuntimeMmioRanges; -GLOBAL_REMOVE_IF_UNREFERENCED STATIC PRM_DATA_BUFFER ***mStaticDataBuffers; /** Converts the runtime memory range physical addresses to virtual addresses. @@ -181,32 +179,12 @@ StoreVirtualMemoryAddressChangePointers ( UINTN HandleCount; UINTN HandleIndex; UINTN RangeIndex; -#ifdef ALLOCATE_CONTEXT_BUFFER_IN_FW - UINTN BufferIndex; - UINTN StaticDataBufferIndex; - PRM_CONTEXT_BUFFER *CurrentContextBuffer; -#endif EFI_HANDLE *HandleBuffer; PRM_CONFIG_PROTOCOL *PrmConfigProtocol; DEBUG ((DEBUG_INFO, "%a %a - Entry.\n", _DBGMSGID_, __FUNCTION__)); RangeIndex = 0; -#ifdef ALLOCATE_CONTEXT_BUFFER_IN_FW - StaticDataBufferIndex = 0; - - mStaticDataBuffers = AllocateRuntimeZeroPool (sizeof (*mStaticDataBuffers) * mMaxStaticDataBufferCount); - if (mStaticDataBuffers == NULL && mMaxStaticDataBufferCount > 0) { - DEBUG (( - DEBUG_ERROR, - " %a %a: Memory allocation for PRM static data buffer pointer array failed.\n", - _DBGMSGID_, - __FUNCTION__ - )); - ASSERT (FALSE); - return; - } -#endif mRuntimeMmioRanges = AllocateRuntimeZeroPool (sizeof (*mRuntimeMmioRanges) * mMaxRuntimeMmioRangeCount); if (mRuntimeMmioRanges == NULL && mMaxRuntimeMmioRangeCount > 0) { @@ -240,28 +218,6 @@ StoreVirtualMemoryAddressChangePointers ( continue; } -#ifdef ALLOCATE_CONTEXT_BUFFER_IN_FW - for (BufferIndex = 0; BufferIndex < PrmConfigProtocol->ModuleContextBuffers.BufferCount; BufferIndex++) { - CurrentContextBuffer = &(PrmConfigProtocol->ModuleContextBuffers.Buffer[BufferIndex]); - - if (CurrentContextBuffer->StaticDataBuffer != NULL) { - if (StaticDataBufferIndex >= mMaxStaticDataBufferCount) { - Status = EFI_BUFFER_TOO_SMALL; - DEBUG (( - DEBUG_ERROR, - " %a %a: Index out of bounds - Actual count (%d) of PRM data buffers exceeds maximum count (%d).\n", - _DBGMSGID_, - __FUNCTION__, - StaticDataBufferIndex + 1, - mMaxStaticDataBufferCount - )); - ASSERT_EFI_ERROR (Status); - return; - } - mStaticDataBuffers[StaticDataBufferIndex++] = &CurrentContextBuffer->StaticDataBuffer; - } - } -#endif if (PrmConfigProtocol->ModuleContextBuffers.RuntimeMmioRanges != NULL) { if (RangeIndex >= mMaxRuntimeMmioRangeCount) { Status = EFI_BUFFER_TOO_SMALL; @@ -286,15 +242,6 @@ StoreVirtualMemoryAddressChangePointers ( __FUNCTION__, RangeIndex )); -#ifdef ALLOCATE_CONTEXT_BUFFER_IN_FW - DEBUG (( - DEBUG_INFO, - " %a %a: %d static buffers saved for future virtual memory conversion.\n", - _DBGMSGID_, - __FUNCTION__, - StaticDataBufferIndex - )); -#endif } } @@ -396,15 +343,6 @@ PrmConfigVirtualAddressChangeEvent ( { UINTN Index; -#ifdef ALLOCATE_CONTEXT_BUFFER_IN_FW - // - // Convert static data buffer pointers - // - for (Index = 0; Index < mMaxStaticDataBufferCount; Index++) { - gRT->ConvertPointer (0x0, (VOID **) mStaticDataBuffers[Index]); - } -#endif - // // Convert runtime MMIO ranges // @@ -485,9 +423,6 @@ PrmConfigEndOfDxeNotification ( CurrentContextBuffer->HandlerGuid )); } - if (CurrentContextBuffer->StaticDataBuffer != NULL) { - mMaxStaticDataBufferCount++; - } } DEBUG ((DEBUG_INFO, " %a %a: Module context buffer validation complete.\n", _DBGMSGID_, __FUNCTION__)); @@ -551,13 +486,6 @@ PrmConfigEntryPoint ( ); ASSERT_EFI_ERROR (Status); - DEBUG ((DEBUG_INFO, " %a %a: Context buffers will be allocated in ", _DBGMSGID_, __FUNCTION__)); -#ifdef ALLOCATE_CONTEXT_BUFFER_IN_FW - DEBUG ((DEBUG_INFO, "firmware.\n")); -#else - DEBUG ((DEBUG_INFO, "the operating system.\n")); -#endif - // // Register a notification function for virtual address change // diff --git a/PrmPkg/PrmLoaderDxe/PrmAcpiTable.h b/PrmPkg/PrmLoaderDxe/PrmAcpiTable.h index ca09be3892..ec3be529d1 100644 --- a/PrmPkg/PrmLoaderDxe/PrmAcpiTable.h +++ b/PrmPkg/PrmLoaderDxe/PrmAcpiTable.h @@ -30,10 +30,6 @@ typedef struct { 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 @@ -41,8 +37,6 @@ typedef struct { ///< 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 { diff --git a/PrmPkg/PrmLoaderDxe/PrmLoaderDxe.c b/PrmPkg/PrmLoaderDxe/PrmLoaderDxe.c index e2a838ea29..433d81cf80 100644 --- a/PrmPkg/PrmLoaderDxe/PrmLoaderDxe.c +++ b/PrmPkg/PrmLoaderDxe/PrmLoaderDxe.c @@ -738,11 +738,7 @@ ProcessPrmModules ( &CurrentContextBuffer ); if (!EFI_ERROR (Status)) { -#ifdef ALLOCATE_CONTEXT_BUFFER_IN_FW - CurrentHandlerInfoStruct->PrmContextBuffer = (UINT64) (UINTN) CurrentContextBuffer; -#else CurrentHandlerInfoStruct->StaticDataBuffer = (UINT64) (UINTN) CurrentContextBuffer->StaticDataBuffer; -#endif } Status = GetExportEntryAddress ( diff --git a/PrmPkg/PrmPkg.dsc b/PrmPkg/PrmPkg.dsc index d3aeffa152..6d352dfadb 100644 --- a/PrmPkg/PrmPkg.dsc +++ b/PrmPkg/PrmPkg.dsc @@ -110,8 +110,3 @@ [BuildOptions] # Force deprecated interfaces off *_*_*_CC_FLAGS = -D DISABLE_NEW_DEPRECATED_INTERFACES - -# Append package-specific build settings -!ifdef $(ALLOCATE_CONTEXT_BUFFER_IN_FW) - *_*_*_CC_FLAGS = -D ALLOCATE_CONTEXT_BUFFER_IN_FW -!endif diff --git a/PrmPkg/Readme.md b/PrmPkg/Readme.md index f430006905..52b44a95dd 100644 --- a/PrmPkg/Readme.md +++ b/PrmPkg/Readme.md @@ -68,17 +68,11 @@ record (POR) configuration. The following list are the currently defined build flags (if any) that may be passed to the `build` command (e.g. -D FLAG=VALUE). -* `ALLOCATE_CONTEXT_BUFFER_IN_FW` - Allocates the context buffer for each PRM handler in the firmware instead of - the operating system (OS). +* NONE - No build flags are currently used. Additional detail: The context buffer structure is defined in [PrmContextBuffer.h](PrmPkg/Include/PrmContextBuffer.h). - This structure can be instantiated by either firmware with a physical pointer to the buffer placed in the - `PRM_HANDLER_INFORMATION_STRUCT` for each handler wherein the OS would convert that physical pointer and pass it - as a virtual address pointer to each PRM handler. Alternatively, the context buffer can be allocated and populated - by the OS where it would get all the information to populate the context buffer from other structures. - - The default is for the OS to allocate and populate the buffer. The alternative option of the firmware doing this - work is kept in the source code until broader OS testing is completed. + This structure is passed as the context buffer to PRM handlers. The structure actually passed to PRM handlers is + allocated and populated by the OS where it gets all the information to populate the context buffer from other structures. ## Overview At a high-level, PRM can be viewed from three levels of granularity: diff --git a/PrmPkg/Samples/PrmSampleContextBufferModule/Library/DxeContextBufferModuleConfigLib/DxeContextBufferModuleConfigLib.c b/PrmPkg/Samples/PrmSampleContextBufferModule/Library/DxeContextBufferModuleConfigLib/DxeContextBufferModuleConfigLib.c index b0b12c012a..c222c961f2 100644 --- a/PrmPkg/Samples/PrmSampleContextBufferModule/Library/DxeContextBufferModuleConfigLib/DxeContextBufferModuleConfigLib.c +++ b/PrmPkg/Samples/PrmSampleContextBufferModule/Library/DxeContextBufferModuleConfigLib/DxeContextBufferModuleConfigLib.c @@ -151,16 +151,7 @@ ContextBufferModuleConfigLibConstructor ( // // Allocate and populate the context buffer // -#ifdef ALLOCATE_CONTEXT_BUFFER_IN_FW - // - // The context buffer allocated in FW will continue being used at OS runtime so it must - // be a runtime services data buffer. - // - // This sample module uses a single context buffer for all the handlers - // Todo: This can be done more elegantly in the future. Likely though a library service. - // - PrmContextBuffer = AllocateRuntimeZeroPool (sizeof (*PrmContextBuffer)); -#else + // // This context buffer is not actually used by PRM handler at OS runtime. The OS will allocate // the actual context buffer passed to the PRM handler. @@ -170,7 +161,6 @@ ContextBufferModuleConfigLibConstructor ( // PRM_HANDLER_INFORMATION_STRUCT and PRM_MODULE_INFORMATION_STRUCT respectively for the PRM handler. // PrmContextBuffer = AllocateZeroPool (sizeof (*PrmContextBuffer)); -#endif ASSERT (PrmContextBuffer != NULL); if (PrmContextBuffer == NULL) { Status = EFI_OUT_OF_RESOURCES;