]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Universal/HiiResourcesSampleDxe/HiiResourcesSample.c
MdeModulePkg: Replace BSD License with BSD+Patent License
[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
24 VENDOR_DEVICE_PATH VendorDevicePath;\r
25 EFI_DEVICE_PATH_PROTOCOL End;\r
26} HII_VENDOR_DEVICE_PATH;\r
27#pragma pack()\r
28\r
29\r
30EFI_HII_HANDLE mHiiHandle = NULL;\r
31EFI_HANDLE mDriverHandle = NULL;\r
32\r
33HII_VENDOR_DEVICE_PATH mHiiVendorDevicePath = {\r
34 {\r
35 {\r
36 HARDWARE_DEVICE_PATH,\r
37 HW_VENDOR_DP,\r
38 {\r
39 (UINT8) (sizeof (VENDOR_DEVICE_PATH)),\r
40 (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8)\r
41 }\r
42 },\r
c8ad2d7a 43 HII_RESOURCE_SAMPLE_FORM_SET_GUID\r
6446c987
LG
44 },\r
45 {\r
46 END_DEVICE_PATH_TYPE,\r
47 END_ENTIRE_DEVICE_PATH_SUBTYPE,\r
d1102dba 48 {\r
6446c987
LG
49 (UINT8) (END_DEVICE_PATH_LENGTH),\r
50 (UINT8) ((END_DEVICE_PATH_LENGTH) >> 8)\r
51 }\r
52 }\r
53};\r
54\r
55/**\r
56 Main entry for this driver.\r
d1102dba 57\r
6446c987
LG
58 @param[in] ImageHandle Image handle this driver.\r
59 @param[in] SystemTable Pointer to SystemTable.\r
60\r
61 @retval EFI_SUCESS This function always complete successfully.\r
62\r
63**/\r
64EFI_STATUS\r
65EFIAPI\r
66HiiResourcesSampleInit (\r
67 IN EFI_HANDLE ImageHandle,\r
68 IN EFI_SYSTEM_TABLE *SystemTable\r
69 )\r
70{\r
71 EFI_STATUS Status;\r
72 EFI_HII_PACKAGE_LIST_HEADER *PackageList;\r
73\r
74 //\r
75 // Retrieve HII package list from ImageHandle\r
76 //\r
77 Status = gBS->OpenProtocol (\r
78 ImageHandle,\r
79 &gEfiHiiPackageListProtocolGuid,\r
80 (VOID **) &PackageList,\r
81 ImageHandle,\r
82 NULL,\r
83 EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
84 );\r
85 if (EFI_ERROR (Status)) {\r
86 return Status;\r
87 }\r
88\r
89 //\r
90 // Publish sample Fromset\r
91 //\r
92 Status = gBS->InstallProtocolInterface (\r
93 &mDriverHandle,\r
94 &gEfiDevicePathProtocolGuid,\r
95 EFI_NATIVE_INTERFACE,\r
96 &mHiiVendorDevicePath\r
97 );\r
98 if (EFI_ERROR (Status)) {\r
99 return Status;\r
100 }\r
101\r
102 //\r
d90434cc 103 // Publish HII package list to HII Database.\r
6446c987
LG
104 //\r
105 Status = gHiiDatabase->NewPackageList (\r
106 gHiiDatabase,\r
107 PackageList,\r
108 mDriverHandle,\r
109 &mHiiHandle\r
110 );\r
111 if (EFI_ERROR (Status)) {\r
112 return Status;\r
113 }\r
114\r
115 return EFI_SUCCESS;\r
116}\r
117\r
118/**\r
119 Unloads the application and its installed protocol.\r
120\r
121 @param[in] ImageHandle Handle that identifies the image to be unloaded.\r
122\r
123 @retval EFI_SUCCESS The image has been unloaded.\r
124**/\r
125EFI_STATUS\r
126EFIAPI\r
127HiiResourcesSampleUnload (\r
128 IN EFI_HANDLE ImageHandle\r
129 )\r
130{\r
131 if (mDriverHandle != NULL) {\r
132 gBS->UninstallProtocolInterface (\r
133 mDriverHandle,\r
134 &gEfiDevicePathProtocolGuid,\r
135 &mHiiVendorDevicePath\r
136 );\r
137 mDriverHandle = NULL;\r
138 }\r
139\r
140 if (mHiiHandle != NULL) {\r
141 HiiRemovePackages (mHiiHandle);\r
142 mHiiHandle = NULL;\r
143 }\r
144\r
145 return EFI_SUCCESS;\r
146}\r