/** @file The PRM Buffer Context library provides a general abstraction for context buffer management. Copyright (c) Microsoft Corporation SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef PRM_CONTEXT_BUFFER_LIB_H_ #define PRM_CONTEXT_BUFFER_LIB_H_ #include #include #include typedef enum { /// /// Search by the PRM module GUID /// ByModuleGuid, /// /// Search by the PRM handler GUID /// ByHandlerGuid } PRM_GUID_SEARCH_TYPE; /** Finds a PRM context buffer for the given PRM handler GUID. Note: PRM_MODULE_CONTEXT_BUFFERS is at the PRM module level while PRM_CONTEXT_BUFFER is at the PRM handler level. @param[in] HandlerGuid A pointer to the PRM handler GUID. @param[in] ModuleContextBuffers A pointer to the PRM context buffers structure for the PRM module. @param[out] PrmModuleContextBuffer A pointer to a pointer that will be set to the PRM context buffer if successfully found. @retval EFI_SUCCESS The PRM context buffer was found. @retval EFI_INVALID_PARAMETER A required parameter pointer is NULL. @retval EFI_NOT_FOUND The context buffer for the given PRM handler GUID could not be found. **/ EFI_STATUS FindContextBufferInModuleBuffers ( IN CONST EFI_GUID *HandlerGuid, IN CONST PRM_MODULE_CONTEXT_BUFFERS *ModuleContextBuffers, OUT CONST PRM_CONTEXT_BUFFER **ContextBuffer ); /** Returns a PRM context buffers structure for the given PRM search type. This function allows a caller to get the context buffers structure for a PRM module with either the PRM module GUID or the GUID for a PRM handler in the module. Note: PRM_MODULE_CONTEXT_BUFFERS is at the PRM module level while PRM_CONTEXT_BUFFER is at the PRM handler level. @param[in] GuidSearchType The type of GUID passed in the Guid argument. @param[in] Guid A pointer to the GUID of a PRM module or PRM handler. The actual GUID type will be interpreted based on the value passed in GuidSearchType. @param[out] PrmModuleContextBuffers A pointer to a pointer that will be set to the PRM context buffers structure if successfully found. @retval EFI_SUCCESS The PRM context buffers structure was found. @retval EFI_INVALID_PARAMETER A required parameter pointer is NULL. @retval EFI_NOT_FOUND The context buffers for the given GUID could not be found. **/ EFI_STATUS GetModuleContextBuffers ( IN PRM_GUID_SEARCH_TYPE GuidSearchType, IN CONST EFI_GUID *Guid, OUT CONST PRM_MODULE_CONTEXT_BUFFERS **PrmModuleContextBuffers ); /** Returns a PRM context buffer for the given PRM handler. @param[in] PrmHandlerGuid A pointer to the GUID for the PRM handler. @param[in] PrmModuleContextBuffers A pointer to a PRM_MODULE_CONTEXT_BUFFERS structure. If this optional parameter is provided, the handler context buffer will be searched for in this buffer structure which saves time by not performing a global search for the module buffer structure. @param[out] PrmContextBuffer A pointer to a pointer that will be set to the PRM context buffer if successfully found. @retval EFI_SUCCESS The PRM context buffer was found. @retval EFI_INVALID_PARAMETER A required parameter pointer is NULL. @retval EFI_NOT_FOUND The context buffer for the PRM handler could not be found. **/ EFI_STATUS GetContextBuffer ( IN CONST EFI_GUID *PrmHandlerGuid, IN CONST PRM_MODULE_CONTEXT_BUFFERS *PrmModuleContextBuffers OPTIONAL, OUT CONST PRM_CONTEXT_BUFFER **PrmContextBuffer ); #endif