--- /dev/null
+/** @file\r
+ EFI SMM Communication Protocol as defined in the PI 1.2 specification.\r
+\r
+ This protocol provides a means of communicating between drivers outside of SMM and SMI \r
+ handlers inside of SMM. \r
+\r
+ Copyright (c) 2009, Intel Corporation \r
+ All rights reserved. This program and the accompanying materials \r
+ are licensed and made available under the terms and conditions of the BSD License \r
+ which accompanies this distribution. The full text of the license may be found at \r
+ http://opensource.org/licenses/bsd-license.php \r
+\r
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+\r
+**/\r
+\r
+#ifndef _SMM_COMMUNICATION_H_\r
+#define _SMM_COMMUNICATION_H_\r
+\r
+#define EFI_SMM_COMMUNICATION_PROTOCOL_GUID \\r
+ { \\r
+ 0xc68ed8e2, 0x9dc6, 0x4cbd, { 0x9d, 0x94, 0xdb, 0x65, 0xac, 0xc5, 0xc3, 0x32 } \\r
+ }\r
+\r
+///\r
+/// To avoid confusion in interpreting frames, the communication buffer should always \r
+/// begin with EFI_SMM_COMMUNICATE_HEADER\r
+///\r
+typedef struct {\r
+ ///\r
+ /// Allows for disambiguation of the message format.\r
+ ///\r
+ EFI_GUID HeaderGuid;\r
+ ///\r
+ /// Describes the size of Data (in bytes) and does not include the size of the header.\r
+ ///\r
+ UINTN MessageLength;\r
+ ///\r
+ /// Designates an array of bytes that is MessageLength in size.\r
+ ///\r
+ UINT8 Data[1];\r
+} EFI_SMM_COMMUNICATE_HEADER;\r
+\r
+typedef struct _EFI_SMM_COMMUNICATION_PROTOCOL EFI_SMM_COMMUNICATION_PROTOCOL;\r
+\r
+/**\r
+ Communicates with a registered handler.\r
+ \r
+ This function provides a service to send and receive messages from a registered UEFI service.\r
+\r
+ @param[in] This The EFI_SMM_COMMUNICATION_PROTOCOL instance.\r
+ @param[in] CommBuffer A pointer to the buffer to convey into SMRAM.\r
+ @param[in] CommSize The size of the data buffer being passed in.On exit, the size of data\r
+ being returned. Zero if the handler does not wish to reply with any data.\r
+\r
+ @retval EFI_SUCCESS The message was successfully posted.\r
+ @retval EFI_INVALID_PARAMETER The CommBuffer was NULL.\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_SMM_COMMUNICATE)(\r
+ IN CONST EFI_SMM_COMMUNICATION_PROTOCOL *This,\r
+ IN OUT VOID *CommBuffer,\r
+ IN OUT UINTN *CommSize\r
+ );\r
+\r
+///\r
+/// EFI SMM Communication Protocol provides runtime services for communicating\r
+/// between DXE drivers and a registered SMI handler.\r
+///\r
+struct _EFI_SMM_COMMUNICATION_PROTOCOL {\r
+ EFI_SMM_COMMUNICATE Communicate;\r
+};\r
+\r
+extern EFI_GUID gEfiSmmCommunicationProtocolGuid;\r
+\r
+#endif\r
+\r
## Include/Protocol/DxeSmmReadyToLock.h\r
gEfiDxeSmmReadyToLockProtocolGuid = { 0x60ff8964, 0xe906, 0x41d0, { 0xaf, 0xed, 0xf2, 0x41, 0xe9, 0x74, 0xe0, 0x8e }}\r
\r
+ ## Include/Protocol/SmmCommunication.h\r
+ gEfiSmmCommunicationProtocolGuid = { 0xc68ed8e2, 0x9dc6, 0x4cbd, { 0x9d, 0x94, 0xdb, 0x65, 0xac, 0xc5, 0xc3, 0x32 }}\r
+\r
#\r
# Protocols defined in UEFI2.1/UEFI2.0/EFI1.1\r
#\r