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
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.
18 Function prototype for platform driver override manager driver
22 #ifndef _PLAT_OVER_MNGR_H_
23 #define _PLAT_OVER_MNGR_H_
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>
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>
57 #define MIN_ALIGNMENT_SIZE 4
58 #define ALIGN_SIZE(a) ((a % MIN_ALIGNMENT_SIZE) ? MIN_ALIGNMENT_SIZE - (a % MIN_ALIGNMENT_SIZE) : 0)
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
67 extern UINT8 VfrBin
[];
69 extern UINT8 PlatOverMngrStrings
[];
72 // Following definition is the same as in vfr file
74 #define PLAT_OVER_MNGR_GUID \
76 0x8614567d, 0x35be, 0x4415, 0x8d, 0x88, 0xbd, 0x7d, 0xc, 0x9c, 0x70, 0xc0 \
80 UINT8 DriSelection
[100];
82 UINT8 PciDeviceFilter
;
83 } PLAT_OVER_MNGR_DATA
;
85 #define FORM_ID_DEVICE 0x1234
86 #define FORM_ID_DRIVER 0x1200
87 #define FORM_ID_ORDER 0x1500
89 #define KEY_VALUE_DEVICE_OFFSET 0x0100
90 #define KEY_VALUE_DEVICE_MAX 0x04ff
92 #define QUESTION_ID_OFFSET 0x0500
94 #define KEY_VALUE_DEVICE_REFRESH 0x1234
95 #define KEY_VALUE_DEVICE_FILTER 0x1235
96 #define KEY_VALUE_DEVICE_CLEAR 0x1236
98 #define KEY_VALUE_DRIVER_GOTO_PREVIOUS 0x1300
99 #define KEY_VALUE_DRIVER_GOTO_ORDER 0x1301
101 #define KEY_VALUE_ORDER_GOTO_PREVIOUS 0x2000
102 #define KEY_VALUE_ORDER_SAVE_AND_EXIT 0x1800
104 #define VARSTORE_ID_PLAT_OVER_MNGR 0x1000
107 // Question Id start from 1, so define an offset for it
109 #define VAR_OFFSET(Field) ((UINTN) &(((PLAT_OVER_MNGR_DATA *) 0)->Field))
111 #define DRIVER_SELECTION_VAR_OFFSET (VAR_OFFSET (DriSelection))
112 #define DRIVER_ORDER_VAR_OFFSET (VAR_OFFSET (DriOrder))
114 #define DRIVER_SELECTION_QUESTION_ID (VAR_OFFSET (DriSelection) + QUESTION_ID_OFFSET)
115 #define DRIVER_ORDER_QUESTION_ID (VAR_OFFSET (DriOrder) + QUESTION_ID_OFFSET)
120 EFI_HANDLE DriverHandle
;
121 EFI_HII_HANDLE RegisteredHandle
;
122 PLAT_OVER_MNGR_DATA FakeNvData
;
124 EFI_HII_CONFIG_ROUTING_PROTOCOL
*HiiConfigRouting
;
126 EFI_HII_CONFIG_ACCESS_PROTOCOL ConfigAccess
;
130 EFI_DRIVER_CONFIGURATION_PROTOCOL
*DriverConfiguration
;
131 EFI_HANDLE DriverImageHandle
;
132 EFI_HANDLE ControllerHandle
;
133 EFI_HANDLE ChildControllerHandle
;
135 // To avoid created string leak in Hii database, use this token to reuse every token created by the driver
137 EFI_STRING_ID DescriptionToken
;
138 } CFG_PROTOCOL_INVOKER_CHOICE
;
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
151 PlatOverMngrRouteConfig (
152 IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL
*This
,
153 IN CONST EFI_STRING Configuration
,
154 OUT EFI_STRING
*Progress
159 PlatOverMngrCallback (
160 IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL
*This
,
161 IN EFI_BROWSER_ACTION Action
,
162 IN EFI_QUESTION_ID KeyValue
,
164 IN EFI_IFR_TYPE_VALUE
*Value
,
165 OUT EFI_BROWSER_ACTION_REQUEST
*ActionRequest
170 IN EFI_LOADED_IMAGE_PROTOCOL
*Image
175 EFI_DEVICE_PATH_PROTOCOL
*DevPath
179 EFI_DEVICE_PATH_PROTOCOL
*
181 IN EFI_DEVICE_PATH_PROTOCOL
*DevPath