Subversion Repositories HelenOS

Rev

Rev 2726 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

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