mirror of
https://github.com/justinian/jsix.git
synced 2025-12-11 08:54:31 -08:00
Bring Intel/HP efi source into project, remove gnu-efi
This commit is contained in:
133
src/include/efi/protocol/efivar.h
Normal file
133
src/include/efi/protocol/efivar.h
Normal file
@@ -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.
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user