0,0 → 1,133 |
/*++ |
|
Copyright (c) 1998 Intel Corporation |
|
Module Name: |
|
Abstract: |
|
|
|
Revision History |
|
--*/ |
|
|
|
// |
// The variable store protocol interface is specific to the reference |
// implementation. The initialization code adds variable store devices |
// to the system, and the FW connects to the devices to provide the |
// variable store interfaces through these devices. |
// |
|
// |
// Variable Store Device protocol |
// |
|
#define VARIABLE_STORE_PROTOCOL \ |
{ 0xf088cd91, 0xa046, 0x11d2, {0x8e, 0x42, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} } |
|
INTERFACE_DECL(_EFI_VARIABLE_STORE); |
|
typedef |
EFI_STATUS |
(EFIAPI *EFI_STORE_CLEAR) ( |
IN struct _EFI_VARIABLE_STORE *This, |
IN UINTN BankNo, |
IN OUT VOID *Scratch |
); |
|
|
typedef |
EFI_STATUS |
(EFIAPI *EFI_STORE_READ) ( |
IN struct _EFI_VARIABLE_STORE *This, |
IN UINTN BankNo, |
IN UINTN Offset, |
IN UINTN BufferSize, |
OUT VOID *Buffer |
); |
|
typedef |
EFI_STATUS |
(EFIAPI *EFI_STORE_UPDATE) ( |
IN struct _EFI_VARIABLE_STORE *This, |
IN UINTN BankNo, |
IN UINTN Offset, |
IN UINTN BufferSize, |
IN VOID *Buffer |
); |
|
typedef |
EFI_STATUS |
(EFIAPI *EFI_STORE_SIZE) ( |
IN struct _EFI_VARIABLE_STORE *This, |
IN UINTN NoBanks |
); |
|
typedef |
EFI_STATUS |
(EFIAPI *EFI_TRANSACTION_UPDATE) ( |
IN struct _EFI_VARIABLE_STORE *This, |
IN UINTN BankNo, |
IN VOID *NewContents |
); |
|
typedef struct _EFI_VARIABLE_STORE { |
|
// |
// Number of banks and bank size |
// |
|
UINT32 Attributes; |
UINT32 BankSize; |
UINT32 NoBanks; |
|
// |
// Functions to access the storage banks |
// |
|
EFI_STORE_CLEAR ClearStore; |
EFI_STORE_READ ReadStore; |
EFI_STORE_UPDATE UpdateStore; |
EFI_STORE_SIZE SizeStore OPTIONAL; |
EFI_TRANSACTION_UPDATE TransactionUpdate OPTIONAL; |
|
} EFI_VARIABLE_STORE; |
|
|
// |
// |
// ClearStore() - A function to clear the requested storage bank. A cleared |
// bank contains all "on" bits. |
// |
// ReadStore() - Read data from the requested store. |
// |
// UpdateStore() - Updates data on the requested store. The FW will only |
// ever issue updates to clear bits in the store. Updates must be |
// performed in LSb to MSb order of the update buffer. |
// |
// SizeStore() - An optional function for non-runtime stores that can be |
// dynamically sized. The FW will only ever increase or decrease the store |
// by 1 banksize at a time, and it is always adding or removing a bank from |
// the end of the store. |
// |
// By default the FW will update variables and storage banks in an |
// "atomic" manner by keeping 1 old copy of the data during an update, |
// and recovering appropiately if the power is lost during the middle |
// of an operation. To do this the FW needs to have multiple banks |
// of storage dedicated to its use. If that's not possible, the driver |
// can implement an atomic bank update function and the FW will allow |
// 1 bank in this case. (It will allow any number of banks, |
// but it won't require an "extra" bank to provide its bank transaction |
// function). |
// |
// TransactionUpdate() - An optional function that can clear & update an |
// entire bank in an "atomic" fashion. If the operation fails in the |
// middle the driver is responsible for having either the previous copy |
// of the bank's data or the new copy. A copy that's partially written |
// is not valid as internal data settings may get lost. Supply this |
// function only when needed. |
// |
|