]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Universal/PlatformDriverOverride/PlatOverMngr/PlatOverMngr.h
The driver and library in MdePkg, MdeModulePkg and Nt32Pkg that don't depend on PI...
[mirror_edk2.git] / MdeModulePkg / Universal / PlatformDriverOverride / PlatOverMngr / PlatOverMngr.h
CommitLineData
a6f164a7 1/** @file\r
2\r
3Copyright (c) 2007 - 2008, Intel Corporation\r
4All rights reserved. This program and the accompanying materials\r
5are licensed and made available under the terms and conditions of the BSD License\r
6which accompanies this distribution. The full text of the license may be found at\r
7http://opensource.org/licenses/bsd-license.php\r
8\r
9THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
10WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
11\r
12Module Name:\r
13\r
14 PlatOverMngr.h\r
15\r
16Abstract:\r
17\r
18 Function prototype for platform driver override manager driver\r
19\r
20**/\r
21\r
22#ifndef _PLAT_OVER_MNGR_H_\r
23#define _PLAT_OVER_MNGR_H_\r
24\r
a6f164a7 25#include <PiDxe.h>\r
26\r
27#include <Protocol/HiiConfigAccess.h>\r
28#include <Protocol/HiiConfigRouting.h>\r
29#include <Protocol/HiiDatabase.h>\r
30#include <Protocol/LoadedImage.h>\r
31#include <Protocol/FirmwareVolumeBlock.h>\r
32#include <Protocol/FirmwareVolume2.h>\r
33#include <Protocol/PciIo.h>\r
34#include <Protocol/BusSpecificDriverOverride.h>\r
35#include <Protocol/ComponentName2.h>\r
36#include <Protocol/ComponentName.h>\r
37#include <Protocol/DevicePathToText.h>\r
38\r
39#include <Library/BaseLib.h>\r
40#include <Library/DebugLib.h>\r
41#include <Library/UefiLib.h>\r
42#include <Library/UefiApplicationEntryPoint.h>\r
43#include <Library/UefiBootServicesTableLib.h>\r
44#include <Library/PlatDriOverLib.h>\r
45#include <Library/IfrSupportLib.h>\r
46#include <Library/ExtendedIfrSupportLib.h>\r
47#include <Library/BaseMemoryLib.h>\r
48#include <Library/MemoryAllocationLib.h>\r
49#include <Library/HiiLib.h>\r
50#include <Library/ExtendedHiiLib.h>\r
51#include <Library/UefiRuntimeServicesTableLib.h>\r
52#include <Library/DevicePathLib.h>\r
53\r
54\r
55#define MIN_ALIGNMENT_SIZE 4\r
56#define ALIGN_SIZE(a) ((a % MIN_ALIGNMENT_SIZE) ? MIN_ALIGNMENT_SIZE - (a % MIN_ALIGNMENT_SIZE) : 0)\r
57\r
58\r
59#define EFI_CALLBACK_INFO_SIGNATURE EFI_SIGNATURE_32 ('C', 'l', 'b', 'k')\r
60#define EFI_CALLBACK_INFO_FROM_THIS(a) CR (a, EFI_CALLBACK_INFO, ConfigAccess, EFI_CALLBACK_INFO_SIGNATURE)\r
61#define MAX_CHOICE_NUM 0x100\r
62#define UPDATE_DATA_SIZE 0x1000\r
63\r
64\r
65extern UINT8 VfrBin[];\r
66\r
67extern UINT8 PlatOverMngrStrings[];\r
68\r
69//\r
70// Following definition is the same as in vfr file\r
71//\r
72#define PLAT_OVER_MNGR_GUID \\r
73 { \\r
74 0x8614567d, 0x35be, 0x4415, 0x8d, 0x88, 0xbd, 0x7d, 0xc, 0x9c, 0x70, 0xc0 \\r
75 }\r
76\r
77typedef struct {\r
78 UINT8 DriSelection[100];\r
79 UINT8 DriOrder[100];\r
80 UINT8 PciDeviceFilter;\r
81} PLAT_OVER_MNGR_DATA;\r
82\r
83#define FORM_ID_DEVICE 0x1234\r
84#define FORM_ID_DRIVER 0x1200\r
85#define FORM_ID_ORDER 0x1500\r
86\r
87#define KEY_VALUE_DEVICE_OFFSET 0x0100\r
88#define KEY_VALUE_DEVICE_MAX 0x04ff\r
89\r
90#define QUESTION_ID_OFFSET 0x0500\r
91\r
92#define KEY_VALUE_DEVICE_REFRESH 0x1234\r
93#define KEY_VALUE_DEVICE_FILTER 0x1235\r
94#define KEY_VALUE_DEVICE_CLEAR 0x1236\r
95\r
96#define KEY_VALUE_DRIVER_GOTO_PREVIOUS 0x1300\r
97#define KEY_VALUE_DRIVER_GOTO_ORDER 0x1301\r
98\r
99#define KEY_VALUE_ORDER_GOTO_PREVIOUS 0x2000\r
100#define KEY_VALUE_ORDER_SAVE_AND_EXIT 0x1800\r
101\r
102#define VARSTORE_ID_PLAT_OVER_MNGR 0x1000\r
103\r
104//\r
105// Question Id start from 1, so define an offset for it\r
106//\r
107#define VAR_OFFSET(Field) ((UINTN) &(((PLAT_OVER_MNGR_DATA *) 0)->Field))\r
108\r
109#define DRIVER_SELECTION_VAR_OFFSET (VAR_OFFSET (DriSelection))\r
110#define DRIVER_ORDER_VAR_OFFSET (VAR_OFFSET (DriOrder))\r
111\r
112#define DRIVER_SELECTION_QUESTION_ID (VAR_OFFSET (DriSelection) + QUESTION_ID_OFFSET)\r
113#define DRIVER_ORDER_QUESTION_ID (VAR_OFFSET (DriOrder) + QUESTION_ID_OFFSET)\r
114\r
115typedef struct {\r
116 UINTN Signature;\r
117\r
118 EFI_HANDLE DriverHandle;\r
119 EFI_HII_HANDLE RegisteredHandle;\r
120 PLAT_OVER_MNGR_DATA FakeNvData;\r
121\r
122 EFI_HII_CONFIG_ROUTING_PROTOCOL *HiiConfigRouting;\r
123\r
124 EFI_HII_CONFIG_ACCESS_PROTOCOL ConfigAccess;\r
125} EFI_CALLBACK_INFO;\r
126\r
127typedef struct {\r
128 EFI_DRIVER_CONFIGURATION_PROTOCOL *DriverConfiguration;\r
129 EFI_HANDLE DriverImageHandle;\r
130 EFI_HANDLE ControllerHandle;\r
131 EFI_HANDLE ChildControllerHandle;\r
132 //\r
133 // To avoid created string leak in Hii database, use this token to reuse every token created by the driver\r
134 //\r
135 EFI_STRING_ID DescriptionToken;\r
136} CFG_PROTOCOL_INVOKER_CHOICE;\r
137\r
138EFI_STATUS\r
139EFIAPI\r
140PlatOverMngrExtractConfig (\r
141 IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,\r
142 IN CONST EFI_STRING Request,\r
143 OUT EFI_STRING *Progress,\r
144 OUT EFI_STRING *Results\r
145 );\r
146\r
147EFI_STATUS\r
148EFIAPI\r
149PlatOverMngrRouteConfig (\r
150 IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,\r
151 IN CONST EFI_STRING Configuration,\r
152 OUT EFI_STRING *Progress\r
153 );\r
154\r
155EFI_STATUS\r
156EFIAPI\r
157PlatOverMngrCallback (\r
158 IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,\r
159 IN EFI_BROWSER_ACTION Action,\r
160 IN EFI_QUESTION_ID KeyValue,\r
161 IN UINT8 Type,\r
162 IN EFI_IFR_TYPE_VALUE *Value,\r
163 OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest\r
164 );\r
165\r
166CHAR16 *\r
167GetImageName (\r
168 IN EFI_LOADED_IMAGE_PROTOCOL *Image\r
169 );\r
170\r
171CHAR16 *\r
172DevicePathToStr (\r
173 EFI_DEVICE_PATH_PROTOCOL *DevPath\r
174 );\r
175\r
176\r
177EFI_DEVICE_PATH_PROTOCOL *\r
178UnpackDevicePath (\r
179 IN EFI_DEVICE_PATH_PROTOCOL *DevPath\r
180 );\r
181\r
182#endif\r