Home | History | Annotate | Line # | Download | only in protocol
      1 /*	$NetBSD: efivar.h,v 1.1.1.1 2014/04/01 16:16:07 jakllsch Exp $	*/
      2 
      3 /*++
      4 
      5 Copyright (c) 1998  Intel Corporation
      6 
      7 Module Name:
      8 
      9 Abstract:
     10 
     11 
     12 
     13 Revision History
     14 
     15 --*/
     16 
     17 
     18 
     19 //
     20 // The variable store protocol interface is specific to the reference
     21 // implementation.  The initialization code adds variable store devices
     22 // to the system, and the FW connects to the devices to provide the
     23 // variable store interfaces through these devices.
     24 //
     25 
     26 //
     27 // Variable Store Device protocol
     28 //
     29 
     30 #define VARIABLE_STORE_PROTOCOL    \
     31     { 0xf088cd91, 0xa046, 0x11d2, {0x8e, 0x42, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
     32 
     33 INTERFACE_DECL(_EFI_VARIABLE_STORE);
     34 
     35 typedef
     36 EFI_STATUS
     37 (EFIAPI *EFI_STORE_CLEAR) (
     38     IN struct _EFI_VARIABLE_STORE   *This,
     39     IN UINTN                        BankNo,
     40     IN OUT VOID                     *Scratch
     41     );
     42 
     43 
     44 typedef
     45 EFI_STATUS
     46 (EFIAPI *EFI_STORE_READ) (
     47     IN struct _EFI_VARIABLE_STORE   *This,
     48     IN UINTN                        BankNo,
     49     IN UINTN                        Offset,
     50     IN UINTN                        BufferSize,
     51     OUT VOID                        *Buffer
     52     );
     53 
     54 typedef
     55 EFI_STATUS
     56 (EFIAPI *EFI_STORE_UPDATE) (
     57     IN struct _EFI_VARIABLE_STORE   *This,
     58     IN UINTN                        BankNo,
     59     IN UINTN                        Offset,
     60     IN UINTN                        BufferSize,
     61     IN VOID                         *Buffer
     62     );
     63 
     64 typedef
     65 EFI_STATUS
     66 (EFIAPI *EFI_STORE_SIZE) (
     67     IN struct _EFI_VARIABLE_STORE   *This,
     68     IN UINTN                        NoBanks
     69     );
     70 
     71 typedef
     72 EFI_STATUS
     73 (EFIAPI *EFI_TRANSACTION_UPDATE) (
     74     IN struct _EFI_VARIABLE_STORE   *This,
     75     IN UINTN                        BankNo,
     76     IN VOID                         *NewContents
     77     );
     78 
     79 typedef struct _EFI_VARIABLE_STORE {
     80 
     81     //
     82     // Number of banks and bank size
     83     //
     84 
     85     UINT32                      Attributes;
     86     UINT32                      BankSize;
     87     UINT32                      NoBanks;
     88 
     89     //
     90     // Functions to access the storage banks
     91     //
     92 
     93     EFI_STORE_CLEAR             ClearStore;
     94     EFI_STORE_READ              ReadStore;
     95     EFI_STORE_UPDATE            UpdateStore;
     96     EFI_STORE_SIZE              SizeStore OPTIONAL;
     97     EFI_TRANSACTION_UPDATE      TransactionUpdate OPTIONAL;
     98 
     99 } EFI_VARIABLE_STORE;
    100 
    101 
    102 //
    103 //
    104 // ClearStore()     - A function to clear the requested storage bank.  A cleared
    105 //      bank contains all "on" bits.
    106 //
    107 // ReadStore()      - Read data from the requested store.
    108 //
    109 // UpdateStore()    - Updates data on the requested store. The FW will only
    110 //      ever issue updates to clear bits in the store. Updates must be
    111 //      performed in LSb to MSb order of the update buffer.
    112 //
    113 // SizeStore()      - An optional function for non-runtime stores that can be
    114 //      dynamically sized.  The FW will only ever increase or decrease the store
    115 //      by 1 banksize at a time, and it is always adding or removing a bank from
    116 //      the end of the store.
    117 //
    118 // By default the FW will update variables and storage banks in an
    119 // "atomic" manner by keeping 1 old copy of the data during an update,
    120 // and recovering appropiately if the power is lost during the middle
    121 // of an operation.  To do this the FW needs to have multiple banks
    122 // of storage dedicated to its use. If that's not possible, the driver
    123 // can implement an atomic bank update function and the FW will allow
    124 // 1 bank in this case.  (It will allow any number of banks,
    125 // but it won't require an "extra" bank to provide its bank transaction
    126 // function).
    127 //
    128 // TransactionUpdate()  - An optional function that can clear & update an
    129 //      entire bank in an "atomic" fashion.  If the operation fails in the
    130 //      middle the driver is responsible for having either the previous copy
    131 //      of the bank's data or the new copy.  A copy that's partially written
    132 //      is not valid as internal data settings may get lost.  Supply this
    133 //      function only when needed.
    134 //
    135 
    136