]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Library/ExtendedHiiLib/ExtendedHiiLib.c
Clean up ExtendedHiiLib, HiiLib, IfrSupportLib, ExtendedIfrSupportLib for Doxygen...
[mirror_edk2.git] / MdeModulePkg / Library / ExtendedHiiLib / ExtendedHiiLib.c
1 /** @file
2 HII Library implementation that uses DXE protocols and services.
3
4 Copyright (c) 2006 - 2008, Intel Corporation. <BR>
5 All rights reserved. This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
9
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12
13 **/
14
15
16 #include <PiDxe.h>
17
18 #include <Protocol/DevicePath.h>
19
20 #include <Library/BaseMemoryLib.h>
21 #include <Library/DebugLib.h>
22 #include <Library/MemoryAllocationLib.h>
23 #include <Library/UefiBootServicesTableLib.h>
24 #include <MdeModuleHii.h>
25
26
27 //
28 // Hii vendor device path template
29 //
30 HII_VENDOR_DEVICE_PATH mHiiVendorDevicePathTemplate = {
31 {
32 {
33 {
34 HARDWARE_DEVICE_PATH,
35 HW_VENDOR_DP,
36 {
37 (UINT8) (sizeof (HII_VENDOR_DEVICE_PATH_NODE)),
38 (UINT8) ((sizeof (HII_VENDOR_DEVICE_PATH_NODE)) >> 8)
39 }
40 },
41 EFI_IFR_TIANO_GUID
42 },
43 0
44 },
45 {
46 END_DEVICE_PATH_TYPE,
47 END_ENTIRE_DEVICE_PATH_SUBTYPE,
48 {
49 END_DEVICE_PATH_LENGTH
50 }
51 }
52 };
53
54 /**
55 The HII driver handle passed in for HiiDatabase.NewPackageList() requires
56 that there should be DevicePath Protocol installed on it.
57 This routine create a virtual Driver Handle by installing a vendor device
58 path on it, so as to use it to invoke HiiDatabase.NewPackageList().
59 The Device Path created is a Vendor Device Path specific to Intel's implemenation
60 and it is defined as HII_VENDOR_DEVICE_PATH_NODE.
61
62
63 @param DriverHandle Handle to be returned
64
65 @retval EFI_SUCCESS Handle destroy success.
66 @retval EFI_OUT_OF_RESOURCES Not enough memory.
67
68 **/
69 EFI_STATUS
70 EFIAPI
71 HiiLibCreateHiiDriverHandle (
72 OUT EFI_HANDLE *DriverHandle
73 )
74 {
75 EFI_STATUS Status;
76 HII_VENDOR_DEVICE_PATH_NODE *VendorDevicePath;
77 UINT64 MonotonicCount;
78
79 VendorDevicePath = AllocateCopyPool (sizeof (HII_VENDOR_DEVICE_PATH), &mHiiVendorDevicePathTemplate);
80 if (VendorDevicePath == NULL) {
81 return EFI_OUT_OF_RESOURCES;
82 }
83
84 gBS->GetNextMonotonicCount (&MonotonicCount);
85 VendorDevicePath->MonotonicCount = (UINT32) MonotonicCount;
86
87 *DriverHandle = NULL;
88 Status = gBS->InstallProtocolInterface (
89 DriverHandle,
90 &gEfiDevicePathProtocolGuid,
91 EFI_NATIVE_INTERFACE,
92 VendorDevicePath
93 );
94 if (EFI_ERROR (Status)) {
95 return Status;
96 }
97
98 return EFI_SUCCESS;
99 }
100
101
102 /**
103 Destroy the Driver Handle created by CreateHiiDriverHandle().
104
105 If no Device Path protocol is installed on the DriverHandle, then ASSERT.
106 If this Device Path protocol is failed to be uninstalled, then ASSERT.
107
108 @param DriverHandle Handle returned by CreateHiiDriverHandle()
109
110
111 **/
112 VOID
113 EFIAPI
114 HiiLibDestroyHiiDriverHandle (
115 IN EFI_HANDLE DriverHandle
116 )
117 {
118 EFI_STATUS Status;
119 EFI_DEVICE_PATH_PROTOCOL *DevicePath;
120
121 Status = gBS->HandleProtocol (
122 DriverHandle,
123 &gEfiDevicePathProtocolGuid,
124 (VOID **) &DevicePath
125 );
126 ASSERT_EFI_ERROR (Status);
127
128 Status = gBS->UninstallProtocolInterface (
129 DriverHandle,
130 &gEfiDevicePathProtocolGuid,
131 DevicePath
132 );
133 ASSERT_EFI_ERROR (Status);
134
135 FreePool (DevicePath);
136
137 }
138
139
140