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