]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Universal/Network/VlanConfigDxe/VlanConfigDriver.c
Clean up the private GUID definition in module Level.
[mirror_edk2.git] / MdeModulePkg / Universal / Network / VlanConfigDxe / VlanConfigDriver.c
CommitLineData
779ae357 1/** @file\r
2 The driver binding for VLAN configuration module.\r
3\r
e5eed7d3
HT
4Copyright (c) 2009, Intel Corporation. All rights reserved.<BR>\r
5This program and the accompanying materials\r
779ae357 6are licensed and made available under the terms and conditions\r
7of the BSD License which accompanies this distribution. The full\r
8text of the license may be found at<BR>\r
9http://opensource.org/licenses/bsd-license.php\r
10\r
11THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
12WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
13\r
14**/\r
15\r
16#include "VlanConfigImpl.h"\r
17\r
779ae357 18EFI_DRIVER_BINDING_PROTOCOL gVlanConfigDriverBinding = {\r
19 VlanConfigDriverBindingSupported,\r
20 VlanConfigDriverBindingStart,\r
21 VlanConfigDriverBindingStop,\r
22 0xa,\r
23 NULL,\r
24 NULL\r
25};\r
26\r
27/**\r
28 The entry point for IP4 config driver which install the driver\r
29 binding and component name protocol on its image.\r
30\r
31 @param[in] ImageHandle The image handle of the driver.\r
32 @param[in] SystemTable The system table.\r
33\r
34 @retval EFI_SUCCES All the related protocols are installed on the driver.\r
35 @retval Others Failed to install protocols.\r
36\r
37**/\r
38EFI_STATUS\r
39EFIAPI\r
40VlanConfigDriverEntryPoint (\r
41 IN EFI_HANDLE ImageHandle,\r
42 IN EFI_SYSTEM_TABLE *SystemTable\r
43 )\r
44{\r
45 return EfiLibInstallDriverBindingComponentName2 (\r
46 ImageHandle,\r
47 SystemTable,\r
48 &gVlanConfigDriverBinding,\r
49 ImageHandle,\r
50 &gVlanConfigComponentName,\r
51 &gVlanConfigComponentName2\r
52 );\r
53}\r
54\r
55\r
56/**\r
57 Test to see if this driver supports ControllerHandle.\r
58\r
59 @param[in] This Protocol instance pointer.\r
60 @param[in] ControllerHandle Handle of device to test\r
61 @param[in] RemainingDevicePath Optional parameter use to pick a specific child\r
62 device to start.\r
63\r
64 @retval EFI_SUCCES This driver supports this device\r
65 @retval EFI_ALREADY_STARTED This driver is already running on this device\r
66 @retval other This driver does not support this device\r
67\r
68**/\r
69EFI_STATUS\r
70EFIAPI\r
71VlanConfigDriverBindingSupported (\r
72 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
73 IN EFI_HANDLE ControllerHandle,\r
74 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL\r
75 )\r
76{\r
77 EFI_STATUS Status;\r
78 EFI_VLAN_CONFIG_PROTOCOL *VlanConfig;\r
79\r
80 Status = gBS->OpenProtocol (\r
81 ControllerHandle,\r
82 &gEfiVlanConfigProtocolGuid,\r
83 (VOID **) &VlanConfig,\r
84 This->DriverBindingHandle,\r
85 ControllerHandle,\r
86 EFI_OPEN_PROTOCOL_BY_DRIVER\r
87 );\r
88 if (EFI_ERROR (Status)) {\r
89 return Status;\r
90 }\r
91\r
92 //\r
93 // Close the VlanConfig protocol opened for supported test\r
94 //\r
95 gBS->CloseProtocol (\r
96 ControllerHandle,\r
97 &gEfiVlanConfigProtocolGuid,\r
98 This->DriverBindingHandle,\r
99 ControllerHandle\r
100 );\r
101\r
102 return Status;\r
103}\r
104\r
105\r
106/**\r
107 Start this driver on ControllerHandle.\r
108\r
109 @param[in] This Protocol instance pointer.\r
110 @param[in] ControllerHandle Handle of device to bind driver to\r
111 @param[in] RemainingDevicePath Optional parameter use to pick a specific child\r
112 device to start.\r
113\r
114 @retval EFI_SUCCES This driver is added to ControllerHandle\r
115 @retval EFI_ALREADY_STARTED This driver is already running on ControllerHandle\r
116 @retval other This driver does not support this device\r
117\r
118**/\r
119EFI_STATUS\r
120EFIAPI\r
121VlanConfigDriverBindingStart (\r
122 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
123 IN EFI_HANDLE ControllerHandle,\r
124 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL\r
125 )\r
126{\r
127 EFI_STATUS Status;\r
128 EFI_VLAN_CONFIG_PROTOCOL *VlanConfig;\r
129 EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
130 VLAN_CONFIG_PRIVATE_DATA *PrivateData;\r
131\r
132 //\r
133 // Check for multiple start\r
134 //\r
135 Status = gBS->OpenProtocol (\r
136 ControllerHandle,\r
c8ad2d7a 137 &gEfiCallerIdGuid,\r
779ae357 138 (VOID **) &PrivateData,\r
139 This->DriverBindingHandle,\r
140 ControllerHandle,\r
141 EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
142 );\r
143 if (!EFI_ERROR (Status)) {\r
144 return EFI_ALREADY_STARTED;\r
145 }\r
146\r
147 //\r
148 // Open VlanConfig protocol by driver\r
149 //\r
150 Status = gBS->OpenProtocol (\r
151 ControllerHandle,\r
152 &gEfiVlanConfigProtocolGuid,\r
153 (VOID **) &VlanConfig,\r
154 This->DriverBindingHandle,\r
155 ControllerHandle,\r
156 EFI_OPEN_PROTOCOL_BY_DRIVER\r
157 );\r
158 if (EFI_ERROR (Status)) {\r
159 return Status;\r
160 }\r
161\r
162 //\r
163 // Get parent device path\r
164 //\r
165 Status = gBS->OpenProtocol (\r
166 ControllerHandle,\r
167 &gEfiDevicePathProtocolGuid,\r
168 (VOID **) &DevicePath,\r
169 This->DriverBindingHandle,\r
170 ControllerHandle,\r
171 EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
172 );\r
173 if (EFI_ERROR (Status)) {\r
174 goto ErrorExit;\r
175 }\r
176\r
177 //\r
178 // Create a private data for this network device\r
179 //\r
180 PrivateData = AllocateCopyPool (sizeof (VLAN_CONFIG_PRIVATE_DATA), &mVlanConfigPrivateDateTemplate);\r
181 if (PrivateData == NULL) {\r
182 Status = EFI_OUT_OF_RESOURCES;\r
183 goto ErrorExit;\r
184 }\r
185\r
186 PrivateData->ImageHandle = This->DriverBindingHandle;\r
187 PrivateData->ControllerHandle = ControllerHandle;\r
188 PrivateData->VlanConfig = VlanConfig;\r
189 PrivateData->ParentDevicePath = DevicePath;\r
190\r
191 //\r
192 // Install VLAN configuration form\r
193 //\r
194 Status = InstallVlanConfigForm (PrivateData);\r
195 if (EFI_ERROR (Status)) {\r
196 goto ErrorExit;\r
197 }\r
198\r
199 //\r
200 // Install private GUID\r
201 //\r
202 Status = gBS->InstallMultipleProtocolInterfaces (\r
203 &ControllerHandle,\r
c8ad2d7a 204 &gEfiCallerIdGuid,\r
779ae357 205 PrivateData,\r
206 NULL\r
207 );\r
208 if (EFI_ERROR (Status)) {\r
209 goto ErrorExit;\r
210 }\r
211 return Status;\r
212\r
213ErrorExit:\r
214 gBS->CloseProtocol (\r
215 ControllerHandle,\r
216 &gEfiVlanConfigProtocolGuid,\r
217 This->DriverBindingHandle,\r
218 ControllerHandle\r
219 );\r
220\r
221 gBS->CloseProtocol (\r
222 ControllerHandle,\r
223 &gEfiDevicePathProtocolGuid,\r
224 This->DriverBindingHandle,\r
225 ControllerHandle\r
226 );\r
227\r
228 if (PrivateData != NULL) {\r
229 UninstallVlanConfigForm (PrivateData);\r
230 FreePool (PrivateData);\r
231 }\r
232\r
233 return Status;\r
234}\r
235\r
236\r
237/**\r
238 Stop this driver on ControllerHandle.\r
239\r
240 @param[in] This Protocol instance pointer.\r
241 @param[in] ControllerHandle Handle of device to stop driver on\r
242 @param[in] NumberOfChildren Number of Handles in ChildHandleBuffer. If number\r
243 of children is zero stop the entire bus driver.\r
244 @param[in] ChildHandleBuffer List of Child Handles to Stop.\r
245\r
246 @retval EFI_SUCCES This driver is removed ControllerHandle\r
247 @retval other This driver was not removed from this device\r
248\r
249**/\r
250EFI_STATUS\r
251EFIAPI\r
252VlanConfigDriverBindingStop (\r
253 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
254 IN EFI_HANDLE ControllerHandle,\r
255 IN UINTN NumberOfChildren,\r
256 IN EFI_HANDLE *ChildHandleBuffer\r
257 )\r
258{\r
259 EFI_STATUS Status;\r
260 VLAN_CONFIG_PRIVATE_DATA *PrivateData;\r
261\r
262 //\r
263 // Retrieve the PrivateData from ControllerHandle\r
264 //\r
265 Status = gBS->OpenProtocol (\r
266 ControllerHandle,\r
c8ad2d7a 267 &gEfiCallerIdGuid,\r
779ae357 268 (VOID **) &PrivateData,\r
269 This->DriverBindingHandle,\r
270 ControllerHandle,\r
271 EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
272 );\r
273 if (EFI_ERROR (Status)) {\r
274 return Status;\r
275 }\r
276 ASSERT (PrivateData->Signature == VLAN_CONFIG_PRIVATE_DATA_SIGNATURE);\r
277\r
278 //\r
279 // Uninstall VLAN configuration Form\r
280 //\r
281 UninstallVlanConfigForm (PrivateData);\r
282\r
283 //\r
284 // Uninstall the private GUID\r
285 //\r
286 Status = gBS->UninstallMultipleProtocolInterfaces (\r
287 ControllerHandle,\r
c8ad2d7a 288 &gEfiCallerIdGuid,\r
779ae357 289 PrivateData,\r
290 NULL\r
291 );\r
292 if (EFI_ERROR (Status)) {\r
293 return Status;\r
294 }\r
295\r
296 Status = gBS->CloseProtocol (\r
297 ControllerHandle,\r
298 &gEfiVlanConfigProtocolGuid,\r
299 This->DriverBindingHandle,\r
300 ControllerHandle\r
301 );\r
302 return Status;\r
303}\r