]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Include/Protocol/SwapAddressRange.h
Committing changes to the comments, to improve code documentation.
[mirror_edk2.git] / MdeModulePkg / Include / Protocol / SwapAddressRange.h
1 /** @file
2 The EFI_SWAP_ADDRESS_RANGE_PROTOCOL is used to abstract the swap operation of boot block
3 and backup block of FV. This swap is especially needed when updating the boot block of FV. If any
4 power failure happens during the boot block update, the swapped backup block (now the boot block)
5 can boot the machine with the old boot block backed up in it. The swap operation is platform dependent, so
6 other protocols such as FTW (Fault Tolerant Write) should use this protocol instead of handling hardware directly.
7
8 Copyright (c) 2009, Intel Corporation
9 All rights reserved. This program and the accompanying materials
10 are licensed and made available under the terms and conditions of the BSD License
11 which accompanies this distribution. The full text of the license may be found at
12 http://opensource.org/licenses/bsd-license.php
13
14 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
15 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
16
17 **/
18
19 #ifndef _EFI_SWAP_ADDRESS_RANGE_PROTOCOL_H_
20 #define _EFI_SWAP_ADDRESS_RANGE_PROTOCOL_H_
21
22 #define EFI_SWAP_ADDRESS_RANGE_PROTOCOL_GUID \
23 { \
24 0x1259f60d, 0xb754, 0x468e, {0xa7, 0x89, 0x4d, 0xb8, 0x5d, 0x55, 0xe8, 0x7e } \
25 }
26
27 //
28 // Forward reference for pure ANSI compatability
29 //
30 typedef struct _EFI_SWAP_ADDRESS_RANGE_PROTOCOL EFI_SWAP_ADDRESS_RANGE_PROTOCOL;
31
32 #define EFI_UNSUPPORT_LOCK 0
33 #define EFI_SOFTWARE_LOCK 1
34 #define EFI_HARDWARE_LOCK 2
35
36 typedef UINT8 EFI_SWAP_LOCK_CAPABILITY;
37
38 //
39 // Protocol APIs
40 //
41
42 /**
43 This function gets the address range location of
44 boot block and backup block.
45
46 @param This Indicates the calling context.
47 @param BootBlockBase Base address of current boot block.
48 @param BootBlockSize Size (in bytes) of current boot block.
49 @param BackupBlockBase Base address of current backup block.
50 @param BackupBlockSize Size (in bytes) of current backup block.
51
52 @retval EFI_SUCCESS The call was successful.
53
54 **/
55 typedef
56 EFI_STATUS
57 (EFIAPI *EFI_GET_RANGE_LOCATION) (
58 IN EFI_SWAP_ADDRESS_RANGE_PROTOCOL * This,
59 OUT EFI_PHYSICAL_ADDRESS * BootBlockBase,
60 OUT UINTN *BootBlockSize,
61 OUT EFI_PHYSICAL_ADDRESS * BackupBlockBase,
62 OUT UINTN *BackupBlockSize
63 );
64
65 /**
66 This service checks if the boot block and backup block has been swapped.
67
68 @param This Indicates the calling context.
69 @param SwapState True if the boot block and backup block has been swapped.
70 False if the boot block and backup block has not been swapped.
71
72 @retval EFI_SUCCESS The call was successful.
73
74 **/
75 typedef
76 EFI_STATUS
77 (EFIAPI *EFI_GET_SWAP_STATE) (
78 IN EFI_SWAP_ADDRESS_RANGE_PROTOCOL * This,
79 OUT BOOLEAN *SwapState
80 );
81
82 /**
83 This service swaps the boot block and backup block, or swaps them back.
84
85 It also acquires and releases software swap lock during operation. The setting of the new swap state
86 is not affected by the old swap state.
87
88 @param This Indicates the calling context.
89 @param NewSwapState True to swap real boot block and backup block, False to swap them back.
90
91 @retval EFI_SUCCESS The call was successful.
92 @retval EFI_ABORTED Set swap state error
93
94 **/
95 typedef
96 EFI_STATUS
97 (EFIAPI *EFI_SET_SWAP_STATE) (
98 IN EFI_SWAP_ADDRESS_RANGE_PROTOCOL * This,
99 IN BOOLEAN NewSwapState
100 );
101
102
103
104 /**
105 This service checks if a Real Time Clock (RTC) power failure happened.
106
107 If parameter RtcPowerFailed is true after the function returns, RTC power supply failed or was removed.
108 It is recommended to check RTC power status before calling GetSwapState().
109
110 @param This Indicates the calling context.
111 @param RtcPowerFailed True if the RTC (Real Time Clock) power failed or was removed.
112
113 @retval EFI_SUCCESS The call was successful.
114
115 **/
116 typedef
117 EFI_STATUS
118 (EFIAPI *EFI_GET_RTC_POWER_STATUS) (
119 IN EFI_SWAP_ADDRESS_RANGE_PROTOCOL * This,
120 OUT BOOLEAN *RtcPowerFailed
121 );
122
123 /**
124 This service returns all lock methods for swap operations that the current platform supports. Could be software lock, hardware lock, or unsupport lock.
125 Note that software and hardware lock methods can be used simultaneously.
126
127 @param This Indicates the calling context.
128 @param LockCapability Current lock method for swap operation.
129
130 @retval EFI_SUCCESS The call was successful.
131
132 **/
133 typedef
134 EFI_STATUS
135 (EFIAPI *EFI_GET_SWAP_LOCK_CAPABILITY) (
136 IN EFI_SWAP_ADDRESS_RANGE_PROTOCOL * This,
137 OUT EFI_SWAP_LOCK_CAPABILITY * LockCapability
138 );
139
140
141
142 /**
143 This service is used to acquire or release appointed kind of lock for Swap Address Range operation.
144
145 Note that software and hardware lock mothod can be used simultaneously.
146
147 @param This Indicates the calling context.
148 @param LockCapability Indicates which lock to acquire or release.
149 @param NewLockState True to acquire lock, False to release lock.
150
151 @retval EFI_SUCCESS The call was successful.
152
153 **/
154 typedef
155 EFI_STATUS
156 (EFIAPI *EFI_SET_SWAP_LOCK) (
157 IN EFI_SWAP_ADDRESS_RANGE_PROTOCOL * This,
158 IN EFI_SWAP_LOCK_CAPABILITY LockCapability,
159 IN BOOLEAN NewLockState
160 );
161
162 struct _EFI_SWAP_ADDRESS_RANGE_PROTOCOL {
163 EFI_GET_RANGE_LOCATION GetRangeLocation; // has output parameters for base and length
164 EFI_GET_SWAP_STATE GetSwapState; // are ranges swapped or not
165 EFI_SET_SWAP_STATE SetSwapState; // swap or unswap ranges
166 EFI_GET_RTC_POWER_STATUS GetRtcPowerStatus; // checks RTC battery, or whatever...
167 EFI_GET_SWAP_LOCK_CAPABILITY GetSwapLockCapability; // Get TOP_SWAP lock capability,
168 EFI_SET_SWAP_LOCK SetSwapLock; // Set TOP_SWAP lock state
169 };
170
171 extern EFI_GUID gEfiSwapAddressRangeProtocolGuid;
172
173 #endif