Home | History | Annotate | Download | only in BootManagerLib
      1 /** @file
      2   The boot manager reference implementation
      3 
      4 Copyright (c) 2004 - 2015, Intel Corporation. All rights reserved.<BR>
      5 This program and the accompanying materials are licensed and made available under
      6 the terms and conditions of the BSD License that accompanies this distribution.
      7 The full text of the license may be found at
      8 http://opensource.org/licenses/bsd-license.php.
      9 
     10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     12 
     13 **/
     14 
     15 #ifndef _EFI_BOOT_MANAGER_H_
     16 #define _EFI_BOOT_MANAGER_H_
     17 
     18 #include <Guid/MdeModuleHii.h>
     19 #include <Guid/GlobalVariable.h>
     20 
     21 #include <Protocol/HiiConfigAccess.h>
     22 #include <Protocol/DevicePathToText.h>
     23 
     24 #include <Library/PrintLib.h>
     25 #include <Library/DebugLib.h>
     26 #include <Library/BaseMemoryLib.h>
     27 #include <Library/UefiBootServicesTableLib.h>
     28 #include <Library/UefiLib.h>
     29 #include <Library/MemoryAllocationLib.h>
     30 #include <Library/UefiRuntimeServicesTableLib.h>
     31 #include <Library/HiiLib.h>
     32 #include <Library/DevicePathLib.h>
     33 #include <Library/UefiBootManagerLib.h>
     34 
     35 #pragma pack(1)
     36 
     37 ///
     38 /// HII specific Vendor Device Path definition.
     39 ///
     40 typedef struct {
     41   VENDOR_DEVICE_PATH             VendorDevicePath;
     42   EFI_DEVICE_PATH_PROTOCOL       End;
     43 } HII_VENDOR_DEVICE_PATH;
     44 #pragma pack()
     45 
     46 //
     47 // These are defined as the same with vfr file
     48 //
     49 #define BOOT_MANAGER_FORMSET_GUID \
     50   { \
     51   0x847bc3fe, 0xb974, 0x446d, {0x94, 0x49, 0x5a, 0xd5, 0x41, 0x2e, 0x99, 0x3b} \
     52   }
     53 
     54 #define BOOT_MANAGER_FORM_ID     0x1000
     55 
     56 #define LABEL_BOOT_OPTION        0x00
     57 #define LABEL_BOOT_OPTION_END    0x01
     58 
     59 //
     60 // Variable created with this flag will be "Efi:...."
     61 //
     62 #define VAR_FLAG  EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE
     63 
     64 //
     65 // These are the VFR compiler generated data representing our VFR data.
     66 //
     67 extern UINT8 BootManagerVfrBin[];
     68 
     69 #define BOOT_MANAGER_CALLBACK_DATA_SIGNATURE  SIGNATURE_32 ('B', 'M', 'C', 'B')
     70 
     71 typedef struct {
     72   UINTN                           Signature;
     73 
     74   //
     75   // HII relative handles
     76   //
     77   EFI_HII_HANDLE                  HiiHandle;
     78   EFI_HANDLE                      DriverHandle;
     79 
     80   //
     81   // Produced protocols
     82   //
     83   EFI_HII_CONFIG_ACCESS_PROTOCOL   ConfigAccess;
     84 } BOOT_MANAGER_CALLBACK_DATA;
     85 
     86 /**
     87   This call back function is registered with Boot Manager formset.
     88   When user selects a boot option, this call back function will
     89   be triggered. The boot option is saved for later processing.
     90 
     91 
     92   @param This            Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
     93   @param Action          Specifies the type of action taken by the browser.
     94   @param QuestionId      A unique value which is sent to the original exporting driver
     95                          so that it can identify the type of data to expect.
     96   @param Type            The type of value for the question.
     97   @param Value           A pointer to the data being sent to the original exporting driver.
     98   @param ActionRequest   On return, points to the action requested by the callback function.
     99 
    100   @retval  EFI_SUCCESS           The callback successfully handled the action.
    101   @retval  EFI_INVALID_PARAMETER The setup browser call this function with invalid parameters.
    102 
    103 **/
    104 EFI_STATUS
    105 EFIAPI
    106 BootManagerCallback (
    107   IN  CONST EFI_HII_CONFIG_ACCESS_PROTOCOL   *This,
    108   IN  EFI_BROWSER_ACTION                     Action,
    109   IN  EFI_QUESTION_ID                        QuestionId,
    110   IN  UINT8                                  Type,
    111   IN  EFI_IFR_TYPE_VALUE                     *Value,
    112   OUT EFI_BROWSER_ACTION_REQUEST             *ActionRequest
    113   );
    114 
    115 /**
    116   This function allows a caller to extract the current configuration for one
    117   or more named elements from the target driver.
    118 
    119 
    120   @param This            - Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
    121   @param Request         - A null-terminated Unicode string in <ConfigRequest> format.
    122   @param Progress        - On return, points to a character in the Request string.
    123                          Points to the string's null terminator if request was successful.
    124                          Points to the most recent '&' before the first failing name/value
    125                          pair (or the beginning of the string if the failure is in the
    126                          first name/value pair) if the request was not successful.
    127   @param Results         - A null-terminated Unicode string in <ConfigAltResp> format which
    128                          has all values filled in for the names in the Request string.
    129                          String to be allocated by the called function.
    130 
    131   @retval  EFI_SUCCESS            The Results is filled with the requested values.
    132   @retval  EFI_OUT_OF_RESOURCES   Not enough memory to store the results.
    133   @retval  EFI_INVALID_PARAMETER  Request is NULL, illegal syntax, or unknown name.
    134   @retval  EFI_NOT_FOUND          Routing data doesn't match any storage in this driver.
    135 
    136 **/
    137 EFI_STATUS
    138 EFIAPI
    139 BootManagerExtractConfig (
    140   IN  CONST EFI_HII_CONFIG_ACCESS_PROTOCOL   *This,
    141   IN  CONST EFI_STRING                       Request,
    142   OUT EFI_STRING                             *Progress,
    143   OUT EFI_STRING                             *Results
    144   );
    145 
    146 /**
    147   This function processes the results of changes in configuration.
    148 
    149 
    150   @param This            - Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
    151   @param Configuration   - A null-terminated Unicode string in <ConfigResp> format.
    152   @param Progress        - A pointer to a string filled in with the offset of the most
    153                          recent '&' before the first failing name/value pair (or the
    154                          beginning of the string if the failure is in the first
    155                          name/value pair) or the terminating NULL if all was successful.
    156 
    157   @retval  EFI_SUCCESS            The Results is processed successfully.
    158   @retval  EFI_INVALID_PARAMETER  Configuration is NULL.
    159   @retval  EFI_NOT_FOUND          Routing data doesn't match any storage in this driver.
    160 
    161 **/
    162 EFI_STATUS
    163 EFIAPI
    164 BootManagerRouteConfig (
    165   IN  CONST EFI_HII_CONFIG_ACCESS_PROTOCOL   *This,
    166   IN  CONST EFI_STRING                       Configuration,
    167   OUT EFI_STRING                             *Progress
    168   );
    169 
    170 #endif
    171