--- /dev/null
+/**\r
+ This protocol is used to report and control what BIOS is mapped to the\r
+ BIOS address space anchored at 4GB boundary.\r
+\r
+ This protocol is EFI compatible.\r
+\r
+ E.G. For current generation ICH, the 4GB-16MB to 4GB range can be mapped\r
+ to PCI, SPI, or FWH.\r
+\r
+Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved.<BR>\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
+\r
+\r
+#ifndef _EFI_ACTIVE_BIOS_PROTOCOL_H_\r
+#define _EFI_ACTIVE_BIOS_PROTOCOL_H_\r
+\r
+//\r
+// Define the protocol GUID\r
+//\r
+#define EFI_ACTIVE_BIOS_PROTOCOL_GUID \\r
+ { 0xebbe2d1b, 0x1647, 0x4bda, {0xab, 0x9a, 0x78, 0x63, 0xe3, 0x96, 0xd4, 0x1a} }\r
+\r
+typedef struct _EFI_ACTIVE_BIOS_PROTOCOL EFI_ACTIVE_BIOS_PROTOCOL;\r
+\r
+//\r
+// Protocol definitions\r
+//\r
+typedef enum {\r
+ ActiveBiosStateSpi,\r
+ ActiveBiosStatePci,\r
+ ActiveBiosStateLpc,\r
+ ActiveBiosStateMax\r
+} EFI_ACTIVE_BIOS_STATE;\r
+\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_ACTIVE_BIOS_SET_ACTIVE_BIOS_STATE) (\r
+ IN EFI_ACTIVE_BIOS_PROTOCOL *This,\r
+ IN EFI_ACTIVE_BIOS_STATE DesiredState,\r
+ IN UINTN Key\r
+ );\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ Change the current active BIOS settings to the requested state.\r
+ The caller is responsible for requesting a supported state from\r
+ the EFI_ACTIVE_BIOS_STATE selections.\r
+\r
+ This will fail if someone has locked the interface and the correct key is\r
+ not provided.\r
+\r
+Arguments:\r
+\r
+ This Pointer to the EFI_ACTIVE_BIOS_PROTOCOL instance.\r
+ DesiredState The requested state to configure the system for.\r
+ Key If the interface is locked, Key must be the Key\r
+ returned from the LockState function call.\r
+\r
+Returns:\r
+\r
+ EFI_SUCCESS Command succeed.\r
+ EFI_ACCESS_DENIED The interface is currently locked.\r
+ EFI_DEVICE_ERROR Device error, command aborts abnormally.\r
+\r
+--*/\r
+\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_ACTIVE_BIOS_LOCK_ACTIVE_BIOS_STATE) (\r
+ IN EFI_ACTIVE_BIOS_PROTOCOL *This,\r
+ IN BOOLEAN Lock,\r
+ IN OUT UINTN *Key\r
+ );\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ Lock the current active BIOS state from further changes. This allows a\r
+ caller to implement a critical section. This is optionally supported\r
+ functionality. Size conscious implementations may choose to require\r
+ callers cooperate without support from this protocol.\r
+\r
+Arguments:\r
+\r
+ This Pointer to the EFI_ACTIVE_BIOS_PROTOCOL instance.\r
+ Lock TRUE to lock the current state, FALSE to unlock.\r
+ Key If Lock is TRUE, then a key will be returned. If\r
+ Lock is FALSE, the key returned from the prior call\r
+ to lock the protocol must be provided to unlock the\r
+ protocol. The value of Key is undefined except that it\r
+ will never be 0.\r
+\r
+Returns:\r
+\r
+ EFI_SUCCESS Command succeed.\r
+ EFI_UNSUPPORTED The function is not supported.\r
+ EFI_ACCESS_DENIED The interface is currently locked.\r
+ EFI_DEVICE_ERROR Device error, command aborts abnormally.\r
+\r
+--*/\r
+\r
+//\r
+// Protocol definition\r
+//\r
+// Note that some functions are optional. This means that they may be NULL.\r
+// Caller is required to verify that an optional function is defined by checking\r
+// that the value is not NULL.\r
+//\r
+struct _EFI_ACTIVE_BIOS_PROTOCOL {\r
+ EFI_ACTIVE_BIOS_STATE State;\r
+ EFI_ACTIVE_BIOS_SET_ACTIVE_BIOS_STATE SetState;\r
+ EFI_ACTIVE_BIOS_LOCK_ACTIVE_BIOS_STATE LockState;\r
+};\r
+\r
+//\r
+// Extern the GUID for protocol users.\r
+//\r
+extern EFI_GUID gEfiActiveBiosProtocolGuid;\r
+\r
+#endif\r