]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Universal/HiiResourcesSampleDxe/HiiResourcesSample.c
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / MdeModulePkg / Universal / HiiResourcesSampleDxe / HiiResourcesSample.c
CommitLineData
6446c987
LG
1/** @file\r
2This is an example of how a driver retrieve HII data using HII Package List\r
3Protocol, and how to publish the HII data.\r
4\r
d1102dba 5Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>\r
9d510e61 6SPDX-License-Identifier: BSD-2-Clause-Patent\r
6446c987
LG
7\r
8**/\r
9\r
10#include <Uefi.h>\r
c8ad2d7a 11#include <Guid/HiiResourceSampleHii.h>\r
6446c987
LG
12#include <Protocol/HiiPackageList.h>\r
13#include <Library/DevicePathLib.h>\r
14#include <Library/UefiDriverEntryPoint.h>\r
15#include <Library/UefiBootServicesTableLib.h>\r
16#include <Library/UefiHiiServicesLib.h>\r
17#include <Library/HiiLib.h>\r
18\r
19#pragma pack(1)\r
20///\r
21/// HII specific Vendor Device Path definition.\r
22///\r
23typedef struct {\r
1436aea4
MK
24 VENDOR_DEVICE_PATH VendorDevicePath;\r
25 EFI_DEVICE_PATH_PROTOCOL End;\r
6446c987
LG
26} HII_VENDOR_DEVICE_PATH;\r
27#pragma pack()\r
28\r
1436aea4 29EFI_HII_HANDLE mHiiHandle = NULL;\r
6446c987
LG
30EFI_HANDLE mDriverHandle = NULL;\r
31\r
32HII_VENDOR_DEVICE_PATH mHiiVendorDevicePath = {\r
33 {\r
34 {\r
35 HARDWARE_DEVICE_PATH,\r
36 HW_VENDOR_DP,\r
37 {\r
1436aea4
MK
38 (UINT8)(sizeof (VENDOR_DEVICE_PATH)),\r
39 (UINT8)((sizeof (VENDOR_DEVICE_PATH)) >> 8)\r
6446c987
LG
40 }\r
41 },\r
c8ad2d7a 42 HII_RESOURCE_SAMPLE_FORM_SET_GUID\r
6446c987
LG
43 },\r
44 {\r
45 END_DEVICE_PATH_TYPE,\r
46 END_ENTIRE_DEVICE_PATH_SUBTYPE,\r
d1102dba 47 {\r
1436aea4
MK
48 (UINT8)(END_DEVICE_PATH_LENGTH),\r
49 (UINT8)((END_DEVICE_PATH_LENGTH) >> 8)\r
6446c987
LG
50 }\r
51 }\r
52};\r
53\r
54/**\r
55 Main entry for this driver.\r
d1102dba 56\r
6446c987
LG
57 @param[in] ImageHandle Image handle this driver.\r
58 @param[in] SystemTable Pointer to SystemTable.\r
59\r
60 @retval EFI_SUCESS This function always complete successfully.\r
61\r
62**/\r
63EFI_STATUS\r
64EFIAPI\r
65HiiResourcesSampleInit (\r
1436aea4
MK
66 IN EFI_HANDLE ImageHandle,\r
67 IN EFI_SYSTEM_TABLE *SystemTable\r
6446c987
LG
68 )\r
69{\r
1436aea4
MK
70 EFI_STATUS Status;\r
71 EFI_HII_PACKAGE_LIST_HEADER *PackageList;\r
6446c987
LG
72\r
73 //\r
74 // Retrieve HII package list from ImageHandle\r
75 //\r
76 Status = gBS->OpenProtocol (\r
77 ImageHandle,\r
78 &gEfiHiiPackageListProtocolGuid,\r
1436aea4 79 (VOID **)&PackageList,\r
6446c987
LG
80 ImageHandle,\r
81 NULL,\r
82 EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
83 );\r
84 if (EFI_ERROR (Status)) {\r
85 return Status;\r
86 }\r
87\r
88 //\r
89 // Publish sample Fromset\r
90 //\r
91 Status = gBS->InstallProtocolInterface (\r
92 &mDriverHandle,\r
93 &gEfiDevicePathProtocolGuid,\r
94 EFI_NATIVE_INTERFACE,\r
95 &mHiiVendorDevicePath\r
96 );\r
97 if (EFI_ERROR (Status)) {\r
98 return Status;\r
99 }\r
100\r
101 //\r
d90434cc 102 // Publish HII package list to HII Database.\r
6446c987
LG
103 //\r
104 Status = gHiiDatabase->NewPackageList (\r
1436aea4
MK
105 gHiiDatabase,\r
106 PackageList,\r
107 mDriverHandle,\r
108 &mHiiHandle\r
109 );\r
6446c987
LG
110 if (EFI_ERROR (Status)) {\r
111 return Status;\r
112 }\r
113\r
114 return EFI_SUCCESS;\r
115}\r
116\r
117/**\r
118 Unloads the application and its installed protocol.\r
119\r
120 @param[in] ImageHandle Handle that identifies the image to be unloaded.\r
121\r
122 @retval EFI_SUCCESS The image has been unloaded.\r
123**/\r
124EFI_STATUS\r
125EFIAPI\r
126HiiResourcesSampleUnload (\r
127 IN EFI_HANDLE ImageHandle\r
128 )\r
129{\r
130 if (mDriverHandle != NULL) {\r
131 gBS->UninstallProtocolInterface (\r
1436aea4
MK
132 mDriverHandle,\r
133 &gEfiDevicePathProtocolGuid,\r
134 &mHiiVendorDevicePath\r
6446c987
LG
135 );\r
136 mDriverHandle = NULL;\r
137 }\r
138\r
139 if (mHiiHandle != NULL) {\r
140 HiiRemovePackages (mHiiHandle);\r
141 mHiiHandle = NULL;\r
142 }\r
143\r
144 return EFI_SUCCESS;\r
145}\r