• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /** @file
2 This is an example of how a driver retrieve HII data using HII Package List
3 Protocol, and how to publish the HII data.
4 
5 Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
6 This program and the accompanying materials
7 are licensed and made available under the terms and conditions of the BSD License
8 which accompanies this distribution.  The full text of the license may be found at
9 http://opensource.org/licenses/bsd-license.php
10 
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
13 
14 **/
15 
16 #include <Uefi.h>
17 #include <Guid/HiiResourceSampleHii.h>
18 #include <Protocol/HiiPackageList.h>
19 #include <Library/DevicePathLib.h>
20 #include <Library/UefiDriverEntryPoint.h>
21 #include <Library/UefiBootServicesTableLib.h>
22 #include <Library/UefiHiiServicesLib.h>
23 #include <Library/HiiLib.h>
24 
25 #pragma pack(1)
26 ///
27 /// HII specific Vendor Device Path definition.
28 ///
29 typedef struct {
30   VENDOR_DEVICE_PATH             VendorDevicePath;
31   EFI_DEVICE_PATH_PROTOCOL       End;
32 } HII_VENDOR_DEVICE_PATH;
33 #pragma pack()
34 
35 
36 EFI_HII_HANDLE  mHiiHandle = NULL;
37 EFI_HANDLE      mDriverHandle = NULL;
38 
39 HII_VENDOR_DEVICE_PATH  mHiiVendorDevicePath = {
40   {
41     {
42       HARDWARE_DEVICE_PATH,
43       HW_VENDOR_DP,
44       {
45         (UINT8) (sizeof (VENDOR_DEVICE_PATH)),
46         (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8)
47       }
48     },
49     HII_RESOURCE_SAMPLE_FORM_SET_GUID
50   },
51   {
52     END_DEVICE_PATH_TYPE,
53     END_ENTIRE_DEVICE_PATH_SUBTYPE,
54     {
55       (UINT8) (END_DEVICE_PATH_LENGTH),
56       (UINT8) ((END_DEVICE_PATH_LENGTH) >> 8)
57     }
58   }
59 };
60 
61 /**
62   Main entry for this driver.
63 
64   @param[in] ImageHandle     Image handle this driver.
65   @param[in] SystemTable     Pointer to SystemTable.
66 
67   @retval EFI_SUCESS     This function always complete successfully.
68 
69 **/
70 EFI_STATUS
71 EFIAPI
HiiResourcesSampleInit(IN EFI_HANDLE ImageHandle,IN EFI_SYSTEM_TABLE * SystemTable)72 HiiResourcesSampleInit (
73   IN EFI_HANDLE                   ImageHandle,
74   IN EFI_SYSTEM_TABLE             *SystemTable
75   )
76 {
77   EFI_STATUS                      Status;
78   EFI_HII_PACKAGE_LIST_HEADER     *PackageList;
79 
80   //
81   // Retrieve HII package list from ImageHandle
82   //
83   Status = gBS->OpenProtocol (
84                   ImageHandle,
85                   &gEfiHiiPackageListProtocolGuid,
86                   (VOID **) &PackageList,
87                   ImageHandle,
88                   NULL,
89                   EFI_OPEN_PROTOCOL_GET_PROTOCOL
90                   );
91   if (EFI_ERROR (Status)) {
92     return Status;
93   }
94 
95   //
96   // Publish sample Fromset
97   //
98   Status = gBS->InstallProtocolInterface (
99                   &mDriverHandle,
100                   &gEfiDevicePathProtocolGuid,
101                   EFI_NATIVE_INTERFACE,
102                   &mHiiVendorDevicePath
103                   );
104   if (EFI_ERROR (Status)) {
105     return Status;
106   }
107 
108   //
109   // Publish HII package list to HII Database.
110   //
111   Status = gHiiDatabase->NewPackageList (
112                           gHiiDatabase,
113                           PackageList,
114                           mDriverHandle,
115                           &mHiiHandle
116                           );
117   if (EFI_ERROR (Status)) {
118     return Status;
119   }
120 
121   return EFI_SUCCESS;
122 }
123 
124 /**
125   Unloads the application and its installed protocol.
126 
127   @param[in]  ImageHandle       Handle that identifies the image to be unloaded.
128 
129   @retval EFI_SUCCESS           The image has been unloaded.
130 **/
131 EFI_STATUS
132 EFIAPI
HiiResourcesSampleUnload(IN EFI_HANDLE ImageHandle)133 HiiResourcesSampleUnload (
134   IN EFI_HANDLE  ImageHandle
135   )
136 {
137   if (mDriverHandle != NULL) {
138     gBS->UninstallProtocolInterface (
139             mDriverHandle,
140             &gEfiDevicePathProtocolGuid,
141             &mHiiVendorDevicePath
142            );
143     mDriverHandle = NULL;
144   }
145 
146   if (mHiiHandle != NULL) {
147     HiiRemovePackages (mHiiHandle);
148     mHiiHandle = NULL;
149   }
150 
151   return EFI_SUCCESS;
152 }
153