Syncboot/gnu-efi/inc/protocol/efivar.h
Curle d588e232c4 Major overhaul of this branch.
This branch has been dedicated to purely the UEFI bootloader.
As such, all other code has been removed.

This code can be compiled with Visual Studio, gcc or llvm.
2019-07-17 21:10:29 +01:00

134 lines
3.8 KiB
C

/*++
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.
//