/** @file\r
HII Config Access protocol implementation of VLAN configuration module.\r
\r
-Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2009 - 2012, Intel Corporation. All rights reserved.<BR>\r
This program and the accompanying materials\r
are licensed and made available under the terms and conditions\r
of the BSD License which accompanies this distribution. The full\r
\r
#include "VlanConfigImpl.h"\r
\r
-EFI_GUID mVlanFormSetGuid = VLAN_CONFIG_PRIVATE_GUID;\r
CHAR16 mVlanStorageName[] = L"VlanNvData";\r
EFI_HII_CONFIG_ROUTING_PROTOCOL *mHiiConfigRouting = NULL;\r
\r
(UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8)\r
}\r
},\r
- VLAN_CONFIG_PRIVATE_GUID\r
+ VLAN_CONFIG_FORM_SET_GUID\r
};\r
\r
/**\r
}\r
\r
*Progress = Request;\r
- if ((Request != NULL) && !HiiIsConfigHdrMatch (Request, &mVlanFormSetGuid, mVlanStorageName)) {\r
+ if ((Request != NULL) && !HiiIsConfigHdrMatch (Request, &gVlanConfigFormSetGuid, mVlanStorageName)) {\r
return EFI_NOT_FOUND;\r
}\r
\r
// Allocate and fill a buffer large enough to hold the <ConfigHdr> template\r
// followed by "&OFFSET=0&WIDTH=WWWWWWWWWWWWWWWW" followed by a Null-terminator\r
//\r
- ConfigRequestHdr = HiiConstructConfigHdr (&mVlanFormSetGuid, mVlanStorageName, PrivateData->DriverHandle);\r
+ ConfigRequestHdr = HiiConstructConfigHdr (&gVlanConfigFormSetGuid, mVlanStorageName, PrivateData->DriverHandle);\r
Size = (StrLen (ConfigRequestHdr) + 32 + 1) * sizeof (CHAR16);\r
ConfigRequest = AllocateZeroPool (Size);\r
ASSERT (ConfigRequest != NULL);\r
}\r
\r
*Progress = Configuration;\r
- if (!HiiIsConfigHdrMatch (Configuration, &mVlanFormSetGuid, mVlanStorageName)) {\r
+ if (!HiiIsConfigHdrMatch (Configuration, &gVlanConfigFormSetGuid, mVlanStorageName)) {\r
return EFI_NOT_FOUND;\r
}\r
\r
return EFI_SUCCESS;\r
}\r
\r
- if (Action == EFI_BROWSER_ACTION_CHANGING) {\r
+ if ((Action != EFI_BROWSER_ACTION_CHANGED) && (Action != EFI_BROWSER_ACTION_CHANGING)) {\r
//\r
- // Get Browser data\r
+ // All other action return unsupported.\r
//\r
- Configuration = AllocateZeroPool (sizeof (VLAN_CONFIGURATION));\r
- ASSERT (Configuration != NULL);\r
- HiiGetBrowserData (&mVlanFormSetGuid, mVlanStorageName, sizeof (VLAN_CONFIGURATION), (UINT8 *) Configuration);\r
+ return EFI_UNSUPPORTED;\r
+ }\r
\r
- VlanConfig = PrivateData->VlanConfig;\r
+ //\r
+ // Get Browser data\r
+ //\r
+ Configuration = AllocateZeroPool (sizeof (VLAN_CONFIGURATION));\r
+ ASSERT (Configuration != NULL);\r
+ HiiGetBrowserData (&gVlanConfigFormSetGuid, mVlanStorageName, sizeof (VLAN_CONFIGURATION), (UINT8 *) Configuration);\r
\r
+ VlanConfig = PrivateData->VlanConfig;\r
+\r
+ if (Action == EFI_BROWSER_ACTION_CHANGED) {\r
switch (QuestionId) {\r
case VLAN_ADD_QUESTION_ID:\r
//\r
//\r
// Clear UI data\r
//\r
- *ActionRequest = EFI_BROWSER_ACTION_REQUEST_SUBMIT;\r
+ *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_APPLY;\r
Configuration->VlanId = 0;\r
Configuration->Priority = 0;\r
break;\r
gBS->ConnectController (PrivateData->ControllerHandle, NULL, NULL, TRUE);\r
}\r
\r
- *ActionRequest = EFI_BROWSER_ACTION_REQUEST_SUBMIT;\r
+ *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_APPLY;\r
ZeroMem (Configuration->VlanList, MAX_VLAN_NUMBER);\r
break;\r
\r
+ default:\r
+ break;\r
+ }\r
+ } else if (Action == EFI_BROWSER_ACTION_CHANGING) {\r
+ switch (QuestionId) {\r
case VLAN_UPDATE_QUESTION_ID:\r
//\r
// Update current VLAN list into Form.\r
default:\r
break;\r
}\r
-\r
- HiiSetBrowserData (&mVlanFormSetGuid, mVlanStorageName, sizeof (VLAN_CONFIGURATION), (UINT8 *) Configuration, NULL);\r
- FreePool (Configuration);\r
- return EFI_SUCCESS;\r
}\r
-\r
- //\r
- // All other action return unsupported.\r
- //\r
- return EFI_UNSUPPORTED;\r
+ \r
+ HiiSetBrowserData (&gVlanConfigFormSetGuid, mVlanStorageName, sizeof (VLAN_CONFIGURATION), (UINT8 *) Configuration, NULL);\r
+ FreePool (Configuration);\r
+ return EFI_SUCCESS;\r
}\r
\r
\r
\r
HiiUpdateForm (\r
PrivateData->HiiHandle, // HII handle\r
- &mVlanFormSetGuid, // Formset GUID\r
+ &gVlanConfigFormSetGuid, // Formset GUID\r
VLAN_CONFIGURATION_FORM_ID, // Form ID\r
StartOpCodeHandle, // Label for where to insert opcodes\r
EndOpCodeHandle // Replace data\r
CHAR16 *MacString;\r
EFI_DEVICE_PATH_PROTOCOL *ChildDevicePath;\r
EFI_HII_CONFIG_ACCESS_PROTOCOL *ConfigAccess;\r
+ EFI_VLAN_CONFIG_PROTOCOL *VlanConfig;\r
\r
//\r
// Create child handle and install HII Config Access Protocol\r
}\r
PrivateData->DriverHandle = DriverHandle;\r
\r
+ //\r
+ // Establish the parent-child relationship between the new created\r
+ // child handle and the ControllerHandle.\r
+ //\r
+ Status = gBS->OpenProtocol (\r
+ PrivateData->ControllerHandle,\r
+ &gEfiVlanConfigProtocolGuid,\r
+ (VOID **)&VlanConfig,\r
+ PrivateData->ImageHandle,\r
+ PrivateData->DriverHandle,\r
+ EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
+\r
//\r
// Publish the HII package list\r
//\r
HiiHandle = HiiAddPackages (\r
- &mVlanFormSetGuid,\r
+ &gVlanConfigFormSetGuid,\r
DriverHandle,\r
VlanConfigDxeStrings,\r
VlanConfigBin,\r
PrivateData->HiiHandle = NULL;\r
}\r
\r
+ //\r
+ // End the parent-child relationship.\r
+ //\r
+ gBS->CloseProtocol (\r
+ PrivateData->ControllerHandle,\r
+ &gEfiVlanConfigProtocolGuid,\r
+ PrivateData->ImageHandle,\r
+ PrivateData->DriverHandle\r
+ );\r
+\r
//\r
// Uninstall HII Config Access Protocol\r
//\r