]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Universal/PlatformDriverOverride/PlatOverMngr/PlatOverMngr.h
Remove over specific library class DevicePathLib
[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 <PiDxe.h>
26
27 #include <Protocol/HiiConfigAccess.h>
28 #include <Protocol/HiiConfigRouting.h>
29 #include <Protocol/HiiDatabase.h>
30 #include <Protocol/LoadedImage.h>
31 #include <Protocol/FirmwareVolumeBlock.h>
32 #include <Protocol/FirmwareVolume2.h>
33 #include <Protocol/PciIo.h>
34 #include <Protocol/BusSpecificDriverOverride.h>
35 #include <Protocol/ComponentName2.h>
36 #include <Protocol/ComponentName.h>
37 #include <Protocol/DevicePathToText.h>
38
39 #include <Library/BaseLib.h>
40 #include <Library/DebugLib.h>
41 #include <Library/UefiLib.h>
42 #include <Library/UefiApplicationEntryPoint.h>
43 #include <Library/UefiBootServicesTableLib.h>
44 #include <Library/PlatDriOverLib.h>
45 #include <Library/IfrSupportLib.h>
46 #include <Library/ExtendedIfrSupportLib.h>
47 #include <Library/BaseMemoryLib.h>
48 #include <Library/MemoryAllocationLib.h>
49 #include <Library/HiiLib.h>
50 #include <Library/ExtendedHiiLib.h>
51 #include <Library/UefiRuntimeServicesTableLib.h>
52
53 #define MIN_ALIGNMENT_SIZE 4
54 #define ALIGN_SIZE(a) ((a % MIN_ALIGNMENT_SIZE) ? MIN_ALIGNMENT_SIZE - (a % MIN_ALIGNMENT_SIZE) : 0)
55
56
57 #define EFI_CALLBACK_INFO_SIGNATURE EFI_SIGNATURE_32 ('C', 'l', 'b', 'k')
58 #define EFI_CALLBACK_INFO_FROM_THIS(a) CR (a, EFI_CALLBACK_INFO, ConfigAccess, EFI_CALLBACK_INFO_SIGNATURE)
59 #define MAX_CHOICE_NUM 0x100
60 #define UPDATE_DATA_SIZE 0x1000
61
62
63 extern UINT8 VfrBin[];
64
65 extern UINT8 PlatOverMngrStrings[];
66
67 //
68 // Following definition is the same as in vfr file
69 //
70 #define PLAT_OVER_MNGR_GUID \
71 { \
72 0x8614567d, 0x35be, 0x4415, 0x8d, 0x88, 0xbd, 0x7d, 0xc, 0x9c, 0x70, 0xc0 \
73 }
74
75 typedef struct {
76 UINT8 DriSelection[100];
77 UINT8 DriOrder[100];
78 UINT8 PciDeviceFilter;
79 } PLAT_OVER_MNGR_DATA;
80
81 #define FORM_ID_DEVICE 0x1234
82 #define FORM_ID_DRIVER 0x1200
83 #define FORM_ID_ORDER 0x1500
84
85 #define KEY_VALUE_DEVICE_OFFSET 0x0100
86 #define KEY_VALUE_DEVICE_MAX 0x04ff
87
88 #define QUESTION_ID_OFFSET 0x0500
89
90 #define KEY_VALUE_DEVICE_REFRESH 0x1234
91 #define KEY_VALUE_DEVICE_FILTER 0x1235
92 #define KEY_VALUE_DEVICE_CLEAR 0x1236
93
94 #define KEY_VALUE_DRIVER_GOTO_PREVIOUS 0x1300
95 #define KEY_VALUE_DRIVER_GOTO_ORDER 0x1301
96
97 #define KEY_VALUE_ORDER_GOTO_PREVIOUS 0x2000
98 #define KEY_VALUE_ORDER_SAVE_AND_EXIT 0x1800
99
100 #define VARSTORE_ID_PLAT_OVER_MNGR 0x1000
101
102 //
103 // Question Id start from 1, so define an offset for it
104 //
105 #define VAR_OFFSET(Field) ((UINTN) &(((PLAT_OVER_MNGR_DATA *) 0)->Field))
106
107 #define DRIVER_SELECTION_VAR_OFFSET (VAR_OFFSET (DriSelection))
108 #define DRIVER_ORDER_VAR_OFFSET (VAR_OFFSET (DriOrder))
109
110 #define DRIVER_SELECTION_QUESTION_ID (VAR_OFFSET (DriSelection) + QUESTION_ID_OFFSET)
111 #define DRIVER_ORDER_QUESTION_ID (VAR_OFFSET (DriOrder) + QUESTION_ID_OFFSET)
112
113 typedef struct {
114 UINTN Signature;
115
116 EFI_HANDLE DriverHandle;
117 EFI_HII_HANDLE RegisteredHandle;
118 PLAT_OVER_MNGR_DATA FakeNvData;
119
120 EFI_HII_CONFIG_ROUTING_PROTOCOL *HiiConfigRouting;
121
122 EFI_HII_CONFIG_ACCESS_PROTOCOL ConfigAccess;
123 } EFI_CALLBACK_INFO;
124
125 typedef struct {
126 EFI_DRIVER_CONFIGURATION_PROTOCOL *DriverConfiguration;
127 EFI_HANDLE DriverImageHandle;
128 EFI_HANDLE ControllerHandle;
129 EFI_HANDLE ChildControllerHandle;
130 //
131 // To avoid created string leak in Hii database, use this token to reuse every token created by the driver
132 //
133 EFI_STRING_ID DescriptionToken;
134 } CFG_PROTOCOL_INVOKER_CHOICE;
135
136 EFI_STATUS
137 EFIAPI
138 PlatOverMngrExtractConfig (
139 IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
140 IN CONST EFI_STRING Request,
141 OUT EFI_STRING *Progress,
142 OUT EFI_STRING *Results
143 );
144
145 EFI_STATUS
146 EFIAPI
147 PlatOverMngrRouteConfig (
148 IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
149 IN CONST EFI_STRING Configuration,
150 OUT EFI_STRING *Progress
151 );
152
153 EFI_STATUS
154 EFIAPI
155 PlatOverMngrCallback (
156 IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
157 IN EFI_BROWSER_ACTION Action,
158 IN EFI_QUESTION_ID KeyValue,
159 IN UINT8 Type,
160 IN EFI_IFR_TYPE_VALUE *Value,
161 OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest
162 );
163
164 CHAR16 *
165 GetImageName (
166 IN EFI_LOADED_IMAGE_PROTOCOL *Image
167 );
168
169 CHAR16 *
170 DevicePathToStr (
171 EFI_DEVICE_PATH_PROTOCOL *DevPath
172 );
173
174
175 EFI_DEVICE_PATH_PROTOCOL *
176 UnpackDevicePath (
177 IN EFI_DEVICE_PATH_PROTOCOL *DevPath
178 );
179
180 #endif