Home | History | Annotate | Download | only in FormCallback
      1 /*++
      2 
      3 Copyright (c) 2004, Intel Corporation. All rights reserved.<BR>
      4 This program and the accompanying materials
      5 are licensed and made available under the terms and conditions of the BSD License
      6 which accompanies this distribution.  The full text of the license may be found at
      7 http://opensource.org/licenses/bsd-license.php
      8 
      9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     11 
     12 Module Name:
     13 
     14     FormCallback.h
     15 
     16 Abstract:
     17 
     18   The EFI_FORM_CALLBACK_PROTOCOL is the defined interface for access to custom
     19   NV storage devices as well as communication of user selections in a more
     20   interactive environment.  This protocol should be published by hardware
     21   specific drivers which want to export access to custom hardware storage or
     22   publish IFR which has a requirement to call back the original driver.
     23 
     24 --*/
     25 
     26 #ifndef _FORM_CALLBACK_H_
     27 #define _FORM_CALLBACK_H_
     28 
     29 #include EFI_PROTOCOL_DEFINITION (FormBrowser)
     30 
     31 #define EFI_FORM_CALLBACK_PROTOCOL_GUID \
     32   { \
     33     0xf3e4543d, 0xcf35, 0x6cef, {0x35, 0xc4, 0x4f, 0xe6, 0x34, 0x4d, 0xfc, 0x54} \
     34   }
     35 
     36 //
     37 // Forward reference for pure ANSI compatability
     38 //
     39 typedef struct _EFI_FORM_CALLBACK_PROTOCOL  EFI_FORM_CALLBACK_PROTOCOL;
     40 
     41 #define RESET_REQUIRED  1 // Flags setting to signify that the callback operation resulted in an eventual
     42 // reset to be done upon exit of the browser
     43 //
     44 #define EXIT_REQUIRED   2   // Flags setting to signify that after the processing of the callback results - exit the browser
     45 #define SAVE_REQUIRED   4   // Flags setting to signify that after the processing of the callback results - save the NV data
     46 #define NV_CHANGED      8   // Flags setting to signify that after the processing of the callback results - turn the NV flag on
     47 #define NV_NOT_CHANGED  16  // Flags setting to signify that after the processing of the callback results - turn the NV flag off
     48 #pragma pack(1)
     49 typedef struct {
     50   UINT8   OpCode;           // Likely a string, numeric, or one-of
     51   UINT8   Length;           // Length of the EFI_IFR_DATA_ENTRY packet
     52   UINT16  Flags;            // Flags settings to determine what behavior is desired from the browser after the callback
     53   VOID    *Data;            // The data in the form based on the op-code type - this is not a pointer to the data, the data follows immediately
     54   // If the OpCode is a OneOf or Numeric type - Data is a UINT16 value
     55   // If the OpCode is a String type - Data is a CHAR16[x] type
     56   // If the OpCode is a Checkbox type - Data is a UINT8 value
     57   // If the OpCode is a NV Access type - Data is a EFI_IFR_NV_DATA structure
     58   //
     59 } EFI_IFR_DATA_ENTRY;
     60 
     61 typedef struct {
     62   VOID                *NvRamMap;  // If the flag of the op-code specified retrieval of a copy of the NVRAM map,
     63   // this is a pointer to a buffer copy
     64   //
     65   UINT32              EntryCount; // How many EFI_IFR_DATA_ENTRY entries
     66   EFI_IFR_DATA_ENTRY  Data[1];    // The in-line Data entries.
     67 } EFI_IFR_DATA_ARRAY;
     68 
     69 typedef union {
     70   EFI_IFR_DATA_ARRAY  DataArray;  // Primarily used by those who call back to their drivers and use HII as a repository
     71   EFI_IFR_PACKET      DataPacket; // Primarily used by those which do not use HII as a repository
     72   CHAR16              String[1];  // If returning an error - fill the string with null-terminated contents
     73 } EFI_HII_CALLBACK_PACKET;
     74 #pragma pack()
     75 //
     76 // The following types are currently defined:
     77 //
     78 typedef
     79 EFI_STATUS
     80 (EFIAPI *EFI_NV_READ) (
     81   IN     EFI_FORM_CALLBACK_PROTOCOL    * This,
     82   IN     CHAR16                        *VariableName,
     83   IN     EFI_GUID                      * VendorGuid,
     84   OUT    UINT32                        *Attributes OPTIONAL,
     85   IN OUT UINTN                         *DataSize,
     86   OUT    VOID                          *Buffer
     87   );
     88 
     89 typedef
     90 EFI_STATUS
     91 (EFIAPI *EFI_NV_WRITE) (
     92   IN     EFI_FORM_CALLBACK_PROTOCOL    * This,
     93   IN     CHAR16                        *VariableName,
     94   IN     EFI_GUID                      * VendorGuid,
     95   IN     UINT32                        Attributes,
     96   IN     UINTN                         DataSize,
     97   IN     VOID                          *Buffer,
     98   OUT    BOOLEAN                       *ResetRequired
     99   );
    100 
    101 typedef
    102 EFI_STATUS
    103 (EFIAPI *EFI_FORM_CALLBACK) (
    104   IN     EFI_FORM_CALLBACK_PROTOCOL    * This,
    105   IN     UINT16                        KeyValue,
    106   IN     EFI_IFR_DATA_ARRAY            * Data,
    107   OUT    EFI_HII_CALLBACK_PACKET       **Packet
    108   );
    109 
    110 struct _EFI_FORM_CALLBACK_PROTOCOL {
    111   EFI_NV_READ       NvRead;
    112   EFI_NV_WRITE      NvWrite;
    113   EFI_FORM_CALLBACK Callback;
    114 };
    115 
    116 extern EFI_GUID gEfiFormCallbackProtocolGuid;
    117 
    118 #endif
    119