Viewing file: efivar.h (3.77 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/*++
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. //
|