| /** @file | |
| MM Sx Dispatch Protocol as defined in PI 1.5 Specification | |
| Volume 4 Management Mode Core Interface. | |
| Provides the parent dispatch service for a given Sx-state source generator. | |
| Copyright (c) 2017, Intel Corporation. All rights reserved.<BR> | |
| SPDX-License-Identifier: BSD-2-Clause-Patent | |
| **/ | |
| #ifndef _MM_SX_DISPATCH_H_ | |
| #define _MM_SX_DISPATCH_H_ | |
| #include <Pi/PiMmCis.h> | |
| #define EFI_MM_SX_DISPATCH_PROTOCOL_GUID \ | |
| { \ | |
| 0x456d2859, 0xa84b, 0x4e47, {0xa2, 0xee, 0x32, 0x76, 0xd8, 0x86, 0x99, 0x7d } \ | |
| } | |
| /// | |
| /// Sleep states S0-S5 | |
| /// | |
| typedef enum { | |
| SxS0, | |
| SxS1, | |
| SxS2, | |
| SxS3, | |
| SxS4, | |
| SxS5, | |
| EfiMaximumSleepType | |
| } EFI_SLEEP_TYPE; | |
| /// | |
| /// Sleep state phase: entry or exit | |
| /// | |
| typedef enum { | |
| SxEntry, | |
| SxExit, | |
| EfiMaximumPhase | |
| } EFI_SLEEP_PHASE; | |
| /// | |
| /// The dispatch function's context | |
| /// | |
| typedef struct { | |
| EFI_SLEEP_TYPE Type; | |
| EFI_SLEEP_PHASE Phase; | |
| } EFI_MM_SX_REGISTER_CONTEXT; | |
| typedef struct _EFI_MM_SX_DISPATCH_PROTOCOL EFI_MM_SX_DISPATCH_PROTOCOL; | |
| /** | |
| Provides the parent dispatch service for a given Sx source generator. | |
| This service registers a function (DispatchFunction) which will be called when the sleep state | |
| event specified by RegisterContext is detected. On return, DispatchHandle contains a | |
| unique handle which may be used later to unregister the function using UnRegister(). | |
| The DispatchFunction will be called with Context set to the same value as was passed into | |
| this function in RegisterContext and with CommBuffer and CommBufferSize set to | |
| NULL and 0 respectively. | |
| @param[in] This Pointer to the EFI_MM_SX_DISPATCH_PROTOCOL instance. | |
| @param[in] DispatchFunction Function to register for handler when the specified sleep state event occurs. | |
| @param[in] RegisterContext Pointer to the dispatch function's context. | |
| The caller fills this context in before calling | |
| the register function to indicate to the register | |
| function which Sx state type and phase the caller | |
| wishes to be called back on. For this intertace, | |
| the Sx driver will call the registered handlers for | |
| all Sx type and phases, so the Sx state handler(s) | |
| must check the Type and Phase field of the Dispatch | |
| context and act accordingly. | |
| @param[out] DispatchHandle Handle of dispatch function, for when interfacing | |
| with the parent Sx state MM driver. | |
| @retval EFI_SUCCESS The dispatch function has been successfully | |
| registered and the MMI source has been enabled. | |
| @retval EFI_UNSUPPORTED The Sx driver or hardware does not support that | |
| Sx Type/Phase. | |
| @retval EFI_DEVICE_ERROR The Sx driver was unable to enable the MMI source. | |
| @retval EFI_INVALID_PARAMETER RegisterContext is invalid. Type & Phase are not | |
| within valid range. | |
| @retval EFI_OUT_OF_RESOURCES There is not enough memory (system or MM) to manage this | |
| child. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EFI_MM_SX_REGISTER)( | |
| IN CONST EFI_MM_SX_DISPATCH_PROTOCOL *This, | |
| IN EFI_MM_HANDLER_ENTRY_POINT DispatchFunction, | |
| IN CONST EFI_MM_SX_REGISTER_CONTEXT *RegisterContext, | |
| OUT EFI_HANDLE *DispatchHandle | |
| ); | |
| /** | |
| Unregisters an Sx-state service. | |
| This service removes the handler associated with DispatchHandle so that it will no longer be | |
| called in response to sleep event. | |
| @param[in] This Pointer to the EFI_MM_SX_DISPATCH_PROTOCOL instance. | |
| @param[in] DispatchHandle Handle of the service to remove. | |
| @retval EFI_SUCCESS The service has been successfully removed. | |
| @retval EFI_INVALID_PARAMETER The DispatchHandle was not valid. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EFI_MM_SX_UNREGISTER)( | |
| IN CONST EFI_MM_SX_DISPATCH_PROTOCOL *This, | |
| IN EFI_HANDLE DispatchHandle | |
| ); | |
| /// | |
| /// Interface structure for the MM Sx Dispatch Protocol | |
| /// | |
| /// The EFI_MM_SX_DISPATCH_PROTOCOL provides the ability to install child handlers to | |
| /// respond to sleep state related events. | |
| /// | |
| struct _EFI_MM_SX_DISPATCH_PROTOCOL { | |
| EFI_MM_SX_REGISTER Register; | |
| EFI_MM_SX_UNREGISTER UnRegister; | |
| }; | |
| extern EFI_GUID gEfiMmSxDispatchProtocolGuid; | |
| #endif |