• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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