1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
/**
**/
/**
Copyright (c) 2012 - 2014, 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 that 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.
@file
ActiveBios.h
@brief
This protocol is used to report and control what BIOS is mapped to the
BIOS address space anchored at 4GB boundary.
This protocol is EFI compatible.
E.G. For current generation ICH, the 4GB-16MB to 4GB range can be mapped
to PCI, SPI, or FWH.
**/
#ifndef _EFI_ACTIVE_BIOS_PROTOCOL_H_
#define _EFI_ACTIVE_BIOS_PROTOCOL_H_
//
#define EFI_ACTIVE_BIOS_PROTOCOL_GUID \
{ \
0xebbe2d1b, 0x1647, 0x4bda, 0xab, 0x9a, 0x78, 0x63, 0xe3, 0x96, 0xd4, 0x1a \
}
extern EFI_GUID gEfiActiveBiosProtocolGuid;
///
/// Forward reference for ANSI C compatibility
///
typedef struct _EFI_ACTIVE_BIOS_PROTOCOL EFI_ACTIVE_BIOS_PROTOCOL;
///
/// Protocol definitions
///
typedef enum {
ActiveBiosStateSpi,
ActiveBiosStatePci, /// Obsolete since VLV
ActiveBiosStateLpc,
ActiveBiosStateMax
} EFI_ACTIVE_BIOS_STATE;
typedef
EFI_STATUS
(EFIAPI *EFI_ACTIVE_BIOS_SET_ACTIVE_BIOS_STATE) (
IN EFI_ACTIVE_BIOS_PROTOCOL * This,
IN EFI_ACTIVE_BIOS_STATE DesiredState,
IN UINTN Key
)
/**
@brief
Change the current active BIOS settings to the requested state.
The caller is responsible for requesting a supported state from
the EFI_ACTIVE_BIOS_STATE selections.
This will fail if someone has locked the interface and the correct key is
not provided.
@param[in] This Pointer to the EFI_ACTIVE_BIOS_PROTOCOL instance.
@param[in] DesiredState The requested state to configure the system for.
@param[in] Key If the interface is locked, Key must be the Key
returned from the LockState function call.
@retval EFI_SUCCESS The function completed successfully
@retval EFI_ACCESS_DENIED The interface is currently locked.
**/
;
typedef
EFI_STATUS
(EFIAPI *EFI_ACTIVE_BIOS_LOCK_ACTIVE_BIOS_STATE) (
IN EFI_ACTIVE_BIOS_PROTOCOL * This,
IN BOOLEAN Lock,
IN OUT UINTN *Key
);
/**
@brief
Lock the current active BIOS state from further changes. This allows a
caller to implement a critical section. This is optionally supported
functionality. Size conscious implementations may choose to require
callers cooperate without support from this protocol.
@param[in] This Pointer to the EFI_ACTIVE_BIOS_PROTOCOL instance.
@param[in] Lock TRUE to lock the current state, FALSE to unlock.
@param[in] Key If Lock is TRUE, then a key will be returned. If
Lock is FALSE, the key returned from the prior call
to lock the protocol must be provided to unlock the
protocol. The value of Key is undefined except that
it cannot be 0.
@retval EFI_SUCCESS Command succeed.
@exception EFI_UNSUPPORTED The function is not supported.
@retval EFI_ACCESS_DENIED The interface is currently locked.
@retval EFI_DEVICE_ERROR Device error, command aborts abnormally.
**/
///
/// Protocol definition
///
/// Note that some functions are optional. This means that they may be NULL.
/// Caller is required to verify that an optional function is defined by checking
/// that the value is not NULL.
///
struct _EFI_ACTIVE_BIOS_PROTOCOL {
EFI_ACTIVE_BIOS_STATE State;
EFI_ACTIVE_BIOS_SET_ACTIVE_BIOS_STATE SetState;
EFI_ACTIVE_BIOS_LOCK_ACTIVE_BIOS_STATE LockState;
};
#endif
|