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