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