From 709f55c0239dc59e2b16ffe442436e2d46dd4102 Mon Sep 17 00:00:00 2001 From: rsun3 Date: Tue, 1 Sep 2009 07:58:24 +0000 Subject: [PATCH] Add into MdePkg definitions for EFI SMM Communication Protocol as defined in the PI 1.2 specification. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9218 6f19259b-4bc3-4df7-8a09-765794883524 --- MdePkg/Include/Protocol/SmmCommunication.h | 79 ++++++++++++++++++++++ MdePkg/MdePkg.dec | 3 + 2 files changed, 82 insertions(+) create mode 100644 MdePkg/Include/Protocol/SmmCommunication.h diff --git a/MdePkg/Include/Protocol/SmmCommunication.h b/MdePkg/Include/Protocol/SmmCommunication.h new file mode 100644 index 0000000000..f2cbecf9c8 --- /dev/null +++ b/MdePkg/Include/Protocol/SmmCommunication.h @@ -0,0 +1,79 @@ +/** @file + EFI SMM Communication Protocol as defined in the PI 1.2 specification. + + This protocol provides a means of communicating between drivers outside of SMM and SMI + handlers inside of SMM. + + Copyright (c) 2009, Intel Corporation + All rights reserved. This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ + +#ifndef _SMM_COMMUNICATION_H_ +#define _SMM_COMMUNICATION_H_ + +#define EFI_SMM_COMMUNICATION_PROTOCOL_GUID \ + { \ + 0xc68ed8e2, 0x9dc6, 0x4cbd, { 0x9d, 0x94, 0xdb, 0x65, 0xac, 0xc5, 0xc3, 0x32 } \ + } + +/// +/// To avoid confusion in interpreting frames, the communication buffer should always +/// begin with EFI_SMM_COMMUNICATE_HEADER +/// +typedef struct { + /// + /// Allows for disambiguation of the message format. + /// + EFI_GUID HeaderGuid; + /// + /// Describes the size of Data (in bytes) and does not include the size of the header. + /// + UINTN MessageLength; + /// + /// Designates an array of bytes that is MessageLength in size. + /// + UINT8 Data[1]; +} EFI_SMM_COMMUNICATE_HEADER; + +typedef struct _EFI_SMM_COMMUNICATION_PROTOCOL EFI_SMM_COMMUNICATION_PROTOCOL; + +/** + Communicates with a registered handler. + + This function provides a service to send and receive messages from a registered UEFI service. + + @param[in] This The EFI_SMM_COMMUNICATION_PROTOCOL instance. + @param[in] CommBuffer A pointer to the buffer to convey into SMRAM. + @param[in] CommSize The size of the data buffer being passed in.On exit, the size of data + being returned. Zero if the handler does not wish to reply with any data. + + @retval EFI_SUCCESS The message was successfully posted. + @retval EFI_INVALID_PARAMETER The CommBuffer was NULL. +**/ +typedef +EFI_STATUS +(EFIAPI *EFI_SMM_COMMUNICATE)( + IN CONST EFI_SMM_COMMUNICATION_PROTOCOL *This, + IN OUT VOID *CommBuffer, + IN OUT UINTN *CommSize + ); + +/// +/// EFI SMM Communication Protocol provides runtime services for communicating +/// between DXE drivers and a registered SMI handler. +/// +struct _EFI_SMM_COMMUNICATION_PROTOCOL { + EFI_SMM_COMMUNICATE Communicate; +}; + +extern EFI_GUID gEfiSmmCommunicationProtocolGuid; + +#endif + diff --git a/MdePkg/MdePkg.dec b/MdePkg/MdePkg.dec index 835fa989dd..c3e77cb79c 100644 --- a/MdePkg/MdePkg.dec +++ b/MdePkg/MdePkg.dec @@ -596,6 +596,9 @@ ## Include/Protocol/DxeSmmReadyToLock.h gEfiDxeSmmReadyToLockProtocolGuid = { 0x60ff8964, 0xe906, 0x41d0, { 0xaf, 0xed, 0xf2, 0x41, 0xe9, 0x74, 0xe0, 0x8e }} + ## Include/Protocol/SmmCommunication.h + gEfiSmmCommunicationProtocolGuid = { 0xc68ed8e2, 0x9dc6, 0x4cbd, { 0x9d, 0x94, 0xdb, 0x65, 0xac, 0xc5, 0xc3, 0x32 }} + # # Protocols defined in UEFI2.1/UEFI2.0/EFI1.1 #