aboutsummaryrefslogtreecommitdiff
path: root/efi32/include/efi/protocol/efivar.h
diff options
context:
space:
mode:
Diffstat (limited to 'efi32/include/efi/protocol/efivar.h')
-rw-r--r--efi32/include/efi/protocol/efivar.h133
1 files changed, 133 insertions, 0 deletions
diff --git a/efi32/include/efi/protocol/efivar.h b/efi32/include/efi/protocol/efivar.h
new file mode 100644
index 0000000..92dc506
--- /dev/null
+++ b/efi32/include/efi/protocol/efivar.h
@@ -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.
+//
+