• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /** @file
2 The device manager reference implement
3 
4 Copyright (c) 2004 - 2015, Intel Corporation. All rights reserved.<BR>
5 This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution.  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 _DEVICE_MANAGER_H_
16 #define _DEVICE_MANAGER_H_
17 
18 #include <Guid/MdeModuleHii.h>
19 #include <Guid/HiiPlatformSetupFormset.h>
20 
21 #include <Protocol/HiiConfigAccess.h>
22 #include <Protocol/PciIo.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/MemoryAllocationLib.h>
29 #include <Library/BaseLib.h>
30 #include <Library/HiiLib.h>
31 #include <Library/DevicePathLib.h>
32 #include <Library/UefiHiiServicesLib.h>
33 
34 //
35 // These are defined as the same with vfr file
36 //
37 #define DEVICE_MANAGER_FORMSET_GUID  \
38   { \
39   0x3ebfa8e6, 0x511d, 0x4b5b, {0xa9, 0x5f, 0xfb, 0x38, 0x26, 0xf, 0x1c, 0x27} \
40   }
41 
42 #define LABEL_END                            0xffff
43 #define LABEL_FORM_ID_OFFSET                 0x0100
44 
45 #define DEVICE_MANAGER_FORM_ID               0x1000
46 #define NETWORK_DEVICE_LIST_FORM_ID          0x1001
47 #define NETWORK_DEVICE_FORM_ID               0x1002
48 #define DEVICE_KEY_OFFSET                    0x4000
49 #define NETWORK_DEVICE_LIST_KEY_OFFSET       0x2000
50 
51 #define MAX_KEY_SECTION_LEN                  0x1000
52 
53 #define QUESTION_NETWORK_DEVICE_ID           0x3FFF
54 //
55 // These are the VFR compiler generated data representing our VFR data.
56 //
57 extern UINT8  DeviceManagerVfrBin[];
58 
59 #define DEVICE_MANAGER_CALLBACK_DATA_SIGNATURE  SIGNATURE_32 ('D', 'M', 'C', 'B')
60 
61 ///
62 /// HII specific Vendor Device Path definition.
63 ///
64 typedef struct {
65   VENDOR_DEVICE_PATH             VendorDevicePath;
66   EFI_DEVICE_PATH_PROTOCOL       End;
67 } HII_VENDOR_DEVICE_PATH;
68 
69 typedef struct {
70   UINTN                           Signature;
71 
72   ///
73   /// Device Manager HII relative handles
74   ///
75   EFI_HII_HANDLE                  HiiHandle;
76 
77   EFI_HANDLE                      DriverHandle;
78 
79   ///
80   /// Device Manager Produced protocols
81   ///
82   EFI_HII_CONFIG_ACCESS_PROTOCOL  ConfigAccess;
83 
84   ///
85   /// Configuration data
86   ///
87   UINT8                           VideoBios;
88 } DEVICE_MANAGER_CALLBACK_DATA;
89 
90 typedef struct {
91   EFI_STRING_ID    PromptId;
92   EFI_QUESTION_ID  QuestionId;
93 }MENU_INFO_ITEM;
94 
95 typedef struct {
96   UINTN           CurListLen;
97   UINTN           MaxListLen;
98   MENU_INFO_ITEM  *NodeList;
99 } MAC_ADDRESS_NODE_LIST;
100 
101 #define DEVICE_MANAGER_CALLBACK_DATA_FROM_THIS(a) \
102   CR (a, \
103       DEVICE_MANAGER_CALLBACK_DATA, \
104       ConfigAccess, \
105       DEVICE_MANAGER_CALLBACK_DATA_SIGNATURE \
106       )
107 typedef struct {
108   EFI_STRING_ID  StringId;
109   UINT16         Class;
110 } DEVICE_MANAGER_MENU_ITEM;
111 
112 /**
113   This function allows a caller to extract the current configuration for one
114   or more named elements from the target driver.
115 
116 
117   @param This            Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
118   @param Request         A null-terminated Unicode string in <ConfigRequest> format.
119   @param Progress        On return, points to a character in the Request string.
120                          Points to the string's null terminator if request was successful.
121                          Points to the most recent '&' before the first failing name/value
122                          pair (or the beginning of the string if the failure is in the
123                          first name/value pair) if the request was not successful.
124   @param Results         A null-terminated Unicode string in <ConfigAltResp> format which
125                          has all values filled in for the names in the Request string.
126                          String to be allocated by the called function.
127 
128   @retval  EFI_SUCCESS            The Results is filled with the requested values.
129   @retval  EFI_OUT_OF_RESOURCES   Not enough memory to store the results.
130   @retval  EFI_INVALID_PARAMETER  Request is illegal syntax, or unknown name.
131   @retval  EFI_NOT_FOUND          Routing data doesn't match any storage in this driver.
132 
133 **/
134 EFI_STATUS
135 EFIAPI
136 DeviceManagerExtractConfig (
137   IN  CONST EFI_HII_CONFIG_ACCESS_PROTOCOL   *This,
138   IN  CONST EFI_STRING                       Request,
139   OUT EFI_STRING                             *Progress,
140   OUT EFI_STRING                             *Results
141   );
142 
143 /**
144   This function processes the results of changes in configuration.
145 
146 
147   @param This            Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
148   @param Configuration   A null-terminated Unicode string in <ConfigResp> format.
149   @param Progress        A pointer to a string filled in with the offset of the most
150                          recent '&' before the first failing name/value pair (or the
151                          beginning of the string if the failure is in the first
152                          name/value pair) or the terminating NULL if all was successful.
153 
154   @retval  EFI_SUCCESS            The Results is processed successfully.
155   @retval  EFI_INVALID_PARAMETER  Configuration is NULL.
156   @retval  EFI_NOT_FOUND          Routing data doesn't match any storage in this driver.
157 
158 **/
159 EFI_STATUS
160 EFIAPI
161 DeviceManagerRouteConfig (
162   IN  CONST EFI_HII_CONFIG_ACCESS_PROTOCOL   *This,
163   IN  CONST EFI_STRING                       Configuration,
164   OUT EFI_STRING                             *Progress
165   );
166 
167 /**
168   This function is invoked if user selected a interactive opcode from Device Manager's
169   Formset. If user set VBIOS, the new value is saved to EFI variable.
170 
171   @param This            Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
172   @param Action          Specifies the type of action taken by the browser.
173   @param QuestionId      A unique value which is sent to the original exporting driver
174                          so that it can identify the type of data to expect.
175   @param Type            The type of value for the question.
176   @param Value           A pointer to the data being sent to the original exporting driver.
177   @param ActionRequest   On return, points to the action requested by the callback function.
178 
179   @retval  EFI_SUCCESS           The callback successfully handled the action.
180   @retval  EFI_INVALID_PARAMETER The setup browser call this function with invalid parameters.
181 
182 **/
183 EFI_STATUS
184 EFIAPI
185 DeviceManagerCallback (
186   IN  CONST EFI_HII_CONFIG_ACCESS_PROTOCOL   *This,
187   IN  EFI_BROWSER_ACTION                     Action,
188   IN  EFI_QUESTION_ID                        QuestionId,
189   IN  UINT8                                  Type,
190   IN  EFI_IFR_TYPE_VALUE                     *Value,
191   OUT EFI_BROWSER_ACTION_REQUEST             *ActionRequest
192   );
193 
194 #endif
195