--- /dev/null
+/**\r
+**/\r
+/**\r
+\r
+Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved\r
+\r
+ This program and the accompanying materials are licensed and made available under\r
+ the terms and conditions of the BSD License that accompanies this distribution.\r
+ 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
+ @file\r
+ SmmIchnDispatchEx.h\r
+\r
+ @brief\r
+ SmmIchnDispatch Extended Protocol\r
+\r
+**/\r
+#ifndef _EFI_SMM_ICHN_DISPATCH_EX_H_\r
+#define _EFI_SMM_ICHN_DISPATCH_EX_H_\r
+\r
+#ifdef ECP_FLAG\r
+#include <Protocol/SmmIchnDispatch/SmmIchnDispatch.h>\r
+#else\r
+#include <Protocol/SmmIchnDispatch.h>\r
+#endif\r
+\r
+#define EFI_SMM_ICHN_DISPATCH_EX_PROTOCOL_GUID \\r
+ { \\r
+ 0x3920405b, 0xc897, 0x44da, 0x88, 0xf3, 0x4c, 0x49, 0x8a, 0x6f, 0xf7, 0x36 \\r
+ }\r
+extern EFI_GUID gEfiSmmIchnDispatchExProtocolGuid;\r
+\r
+///\r
+/// Forward reference for ANSI C compatibility\r
+///\r
+typedef struct _EFI_SMM_ICHN_DISPATCH_EX_PROTOCOL EFI_SMM_ICHN_DISPATCH_EX_PROTOCOL;\r
+\r
+///\r
+/// Related Definitions\r
+///\r
+///\r
+/// Ichn Dispatch Extended Types\r
+///\r
+typedef enum {\r
+ IchnExPciExpress = NUM_ICHN_TYPES + 1,\r
+ IchnExMonitor,\r
+ IchnExSpi,\r
+ IchnExQRT,\r
+ IchnExGpioUnlock,\r
+ IchnExTmrOverflow,\r
+ IchnExPcie0Hotplug,\r
+ IchnExPcie1Hotplug,\r
+ IchnExPcie2Hotplug,\r
+ IchnExPcie3Hotplug,\r
+ IchnExPcie0LinkActive,\r
+ IchnExPcie1LinkActive,\r
+ IchnExPcie2LinkActive,\r
+ IchnExPcie3LinkActive,\r
+ ///\r
+ /// INSERT NEW ITEMS JUST BEFORE THIS LINE\r
+ ///\r
+ IchnExTypeMAX /// the maximum number of items in this enumeration\r
+} EFI_SMM_ICHN_EX_SMI_TYPE;\r
+\r
+typedef struct {\r
+ EFI_SMM_ICHN_EX_SMI_TYPE Type;\r
+} EFI_SMM_ICHN_DISPATCH_EX_CONTEXT;\r
+\r
+///\r
+/// Member functions\r
+///\r
+typedef\r
+VOID\r
+(EFIAPI *EFI_SMM_ICHN_DISPATCH_EX) (\r
+ IN EFI_HANDLE DispatchHandle,\r
+ IN EFI_SMM_ICHN_DISPATCH_EX_CONTEXT * DispatchContext\r
+ );\r
+\r
+/**\r
+\r
+ @brief\r
+ Dispatch function for a ICH n Extended specific SMI handler.\r
+\r
+ @param[in] DispatchHandle Handle of this dispatch function.\r
+ @param[in] DispatchContext Pointer to the dispatch function's context.\r
+ The DispatchContext fields are filled in\r
+ by the dispatching driver prior to\r
+ invoking this dispatch function.\r
+\r
+ @retval None\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_SMM_ICHN_EX_REGISTER) (\r
+ IN EFI_SMM_ICHN_DISPATCH_EX_PROTOCOL * This,\r
+ IN EFI_SMM_ICHN_DISPATCH_EX DispatchFunction,\r
+ IN EFI_SMM_ICHN_DISPATCH_EX_CONTEXT * DispatchContext,\r
+ OUT EFI_HANDLE * DispatchHandle\r
+ );\r
+\r
+/**\r
+\r
+ @brief\r
+ Register a child SMI source dispatch function with a parent SMM driver\r
+\r
+ @param[in] This Protocol instance pointer.\r
+ @param[in] DispatchFunction Pointer to dispatch function to be invoked for\r
+ this SMI source\r
+ @param[in] DispatchContext Pointer to the dispatch function's context.\r
+ The caller fills this context in before calling\r
+ the register function to indicate to the register\r
+ function the ICHN SMI source for which the dispatch\r
+ function should be invoked.\r
+ @param[in] DispatchHandle Handle of dispatch function, for when interfacing\r
+ with the parent SMM driver.\r
+\r
+ @retval EFI_SUCCESS The dispatch function has been successfully\r
+ registered and the SMI source has been enabled.\r
+ @retval EFI_DEVICE_ERROR The driver was unable to enable the SMI source.\r
+ @retval EFI_OUT_OF_RESOURCES Not enough memory (system or SMM) to manage this\r
+ child.\r
+ @retval EFI_INVALID_PARAMETER DispatchContext is invalid. The ICHN input value\r
+ is not within valid range.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_SMM_ICHN_EX_UNREGISTER) (\r
+ IN EFI_SMM_ICHN_DISPATCH_EX_PROTOCOL * This,\r
+ IN EFI_HANDLE DispatchHandle\r
+ );\r
+\r
+/**\r
+\r
+ @brief\r
+ Unregister a child SMI source dispatch function with a parent SMM driver\r
+\r
+ @param[in] This Protocol instance pointer.\r
+ @param[in] DispatchHandle Handle of dispatch function to deregister.\r
+\r
+ @retval EFI_SUCCESS The dispatch function has been successfully\r
+ unregistered and the SMI source has been disabled\r
+ if there are no other registered child dispatch\r
+ functions for this SMI source.\r
+ @retval EFI_INVALID_PARAMETER Handle is invalid.\r
+ @retval Others TBD\r
+\r
+**/\r
+\r
+///\r
+/// Interface structure for the SMM Ich n specific SMI Dispatch Protocol\r
+///\r
+typedef struct _EFI_SMM_ICHN_DISPATCH_EX_PROTOCOL {\r
+ EFI_SMM_ICHN_EX_REGISTER Register;\r
+ EFI_SMM_ICHN_EX_UNREGISTER UnRegister;\r
+};\r
+\r
+#endif\r