]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Network/VlanConfigDxe/VlanConfigImpl.c
Clean up the private GUID definition in module Level.
[mirror_edk2.git] / MdeModulePkg / Universal / Network / VlanConfigDxe / VlanConfigImpl.c
index 8d72f585d040a0f9056face6c2022f19dcc737ea..ea70d5e28d0e0ba8fd65acf00c7bf942f5a4e4e2 100644 (file)
@@ -1,8 +1,8 @@
 /** @file\r
   HII Config Access protocol implementation of VLAN configuration module.\r
 \r
-Copyright (c) 2009, Intel Corporation.<BR>\r
-All rights reserved. This program and the accompanying materials\r
+Copyright (c) 2009 - 2011, 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
 text of the license may be found at<BR>\r
@@ -15,7 +15,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \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
@@ -37,7 +36,7 @@ VENDOR_DEVICE_PATH              mHiiVendorDevicePathNode = {
       (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8)\r
     }\r
   },\r
-  VLAN_CONFIG_PRIVATE_GUID\r
+  VLAN_CONFIG_FORM_SET_GUID\r
 };\r
 \r
 /**\r
@@ -61,7 +60,7 @@ VENDOR_DEVICE_PATH              mHiiVendorDevicePathNode = {
 \r
   @retval EFI_SUCCESS            The Results is filled with the requested values.\r
   @retval EFI_OUT_OF_RESOURCES   Not enough memory to store the results.\r
-  @retval EFI_INVALID_PARAMETER  Request is NULL, illegal syntax, or unknown name.\r
+  @retval EFI_INVALID_PARAMETER  Request is illegal syntax, or unknown name.\r
   @retval EFI_NOT_FOUND          Routing data doesn't match any storage in this\r
                                  driver.\r
 \r
@@ -75,14 +74,29 @@ VlanExtractConfig (
        OUT EFI_STRING                            *Results\r
   )\r
 {\r
-  EFI_STATUS          Status;\r
-  UINTN               BufferSize;\r
-  VLAN_CONFIGURATION  Configuration;\r
+  EFI_STATUS                 Status;\r
+  UINTN                      BufferSize;\r
+  VLAN_CONFIGURATION         Configuration;\r
+  VLAN_CONFIG_PRIVATE_DATA  *PrivateData;\r
+  EFI_STRING                 ConfigRequestHdr;\r
+  EFI_STRING                 ConfigRequest;\r
+  BOOLEAN                    AllocatedRequest;\r
+  UINTN                      Size;\r
 \r
-  if (Request == NULL) {\r
+  if (Progress == NULL || Results == NULL) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
+  *Progress = Request;\r
+  if ((Request != NULL) && !HiiIsConfigHdrMatch (Request, &gVlanConfigFormSetGuid, mVlanStorageName)) {\r
+    return EFI_NOT_FOUND;\r
+  }\r
+\r
+  ConfigRequestHdr = NULL;\r
+  ConfigRequest    = NULL;\r
+  AllocatedRequest = FALSE;\r
+  Size             = 0;\r
+\r
   //\r
   // Retrieve the pointer to the UEFI HII Config Routing Protocol\r
   //\r
@@ -94,16 +108,49 @@ VlanExtractConfig (
   //\r
   // Convert buffer data to <ConfigResp> by helper function BlockToConfig()\r
   //\r
+  PrivateData = VLAN_CONFIG_PRIVATE_DATA_FROM_THIS (This);\r
   ZeroMem (&Configuration, sizeof (VLAN_CONFIGURATION));\r
-  BufferSize = sizeof (VLAN_CONFIG_PRIVATE_DATA);\r
+  BufferSize = sizeof (Configuration);\r
+  ConfigRequest = Request;\r
+  if ((Request == NULL) || (StrStr (Request, L"OFFSET") == NULL)) {\r
+    //\r
+    // Request has no request element, construct full request string.\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 (&gVlanConfigFormSetGuid, mVlanStorageName, PrivateData->DriverHandle);\r
+    Size = (StrLen (ConfigRequestHdr) + 32 + 1) * sizeof (CHAR16);\r
+    ConfigRequest = AllocateZeroPool (Size);\r
+    ASSERT (ConfigRequest != NULL);\r
+    AllocatedRequest = TRUE;\r
+    UnicodeSPrint (ConfigRequest, Size, L"%s&OFFSET=0&WIDTH=%016LX", ConfigRequestHdr, (UINT64)BufferSize);\r
+    FreePool (ConfigRequestHdr);\r
+  }\r
+\r
   Status = mHiiConfigRouting->BlockToConfig (\r
                                 mHiiConfigRouting,\r
-                                Request,\r
+                                ConfigRequest,\r
                                 (UINT8 *) &Configuration,\r
                                 BufferSize,\r
                                 Results,\r
                                 Progress\r
                                 );\r
+  //\r
+  // Free the allocated config request string.\r
+  //\r
+  if (AllocatedRequest) {\r
+    FreePool (ConfigRequest);\r
+    ConfigRequest = NULL;\r
+  }\r
+  //\r
+  // Set Progress string to the original request string.\r
+  //\r
+  if (Request == NULL) {\r
+    *Progress = NULL;\r
+  } else if (StrStr (Request, L"OFFSET") == NULL) {\r
+    *Progress = Request + StrLen (Request);\r
+  }\r
+\r
   return Status;\r
 }\r
 \r
@@ -139,7 +186,7 @@ VlanRouteConfig (
   }\r
 \r
   *Progress = Configuration;\r
-  if (!HiiIsConfigHdrMatch (Configuration, &mVlanFormSetGuid, mVlanStorageName)) {\r
+  if (!HiiIsConfigHdrMatch (Configuration, &gVlanConfigFormSetGuid, mVlanStorageName)) {\r
     return EFI_NOT_FOUND;\r
   }\r
 \r
@@ -188,85 +235,95 @@ VlanCallback (
 \r
   PrivateData = VLAN_CONFIG_PRIVATE_DATA_FROM_THIS (This);\r
 \r
-  if (Action == EFI_BROWSER_ACTION_FORM_OPEN) {\r
-    //\r
-    // On FORM_OPEN event, update current VLAN list\r
-    //\r
-    VlanUpdateForm (PrivateData);\r
-\r
+  if ((Action == EFI_BROWSER_ACTION_FORM_OPEN) || (Action == EFI_BROWSER_ACTION_FORM_CLOSE)) {\r
     return EFI_SUCCESS;\r
   }\r
 \r
-  //\r
-  // Get Browser data\r
-  //\r
-  Configuration = AllocateZeroPool (sizeof (VLAN_CONFIGURATION));\r
-  ASSERT (Configuration != NULL);\r
-  HiiGetBrowserData (&mVlanFormSetGuid, mVlanStorageName, sizeof (VLAN_CONFIGURATION), (UINT8 *) Configuration);\r
-\r
-  VlanConfig = PrivateData->VlanConfig;\r
-\r
-  switch (QuestionId) {\r
-  case VLAN_ADD_QUESTION_ID:\r
+  if (Action == EFI_BROWSER_ACTION_CHANGING) {\r
     //\r
-    // Add a VLAN\r
+    // Get Browser data\r
     //\r
-    VlanConfig->Set (VlanConfig, Configuration->VlanId, Configuration->Priority);\r
-    VlanUpdateForm (PrivateData);\r
+    Configuration = AllocateZeroPool (sizeof (VLAN_CONFIGURATION));\r
+    ASSERT (Configuration != NULL);\r
+    HiiGetBrowserData (&gVlanConfigFormSetGuid, mVlanStorageName, sizeof (VLAN_CONFIGURATION), (UINT8 *) Configuration);\r
 \r
-    //\r
-    // Connect the newly created VLAN device\r
-    //\r
-    VlanHandle = NetLibGetVlanHandle (PrivateData->ControllerHandle, Configuration->VlanId);\r
-    if (VlanHandle == NULL) {\r
+    VlanConfig = PrivateData->VlanConfig;\r
+\r
+    switch (QuestionId) {\r
+    case VLAN_ADD_QUESTION_ID:\r
       //\r
-      // There may be no child handle created for VLAN ID 0, connect the parent handle\r
+      // Add a VLAN\r
       //\r
-      VlanHandle = PrivateData->ControllerHandle;\r
-    }\r
-    gBS->ConnectController (VlanHandle, NULL, NULL, TRUE);\r
+      VlanConfig->Set (VlanConfig, Configuration->VlanId, Configuration->Priority);\r
+      VlanUpdateForm (PrivateData);\r
 \r
-    //\r
-    // Clear UI data\r
-    //\r
-    *ActionRequest = EFI_BROWSER_ACTION_REQUEST_SUBMIT;\r
-    Configuration->VlanId = 0;\r
-    Configuration->Priority = 0;\r
-    break;\r
+      //\r
+      // Connect the newly created VLAN device\r
+      //\r
+      VlanHandle = NetLibGetVlanHandle (PrivateData->ControllerHandle, Configuration->VlanId);\r
+      if (VlanHandle == NULL) {\r
+        //\r
+        // There may be no child handle created for VLAN ID 0, connect the parent handle\r
+        //\r
+        VlanHandle = PrivateData->ControllerHandle;\r
+      }\r
+      gBS->ConnectController (VlanHandle, NULL, NULL, TRUE);\r
 \r
-  case VLAN_REMOVE_QUESTION_ID:\r
-    //\r
-    // Remove VLAN\r
-    //\r
-    for (Index = 0; Index < PrivateData->NumberOfVlan; Index++) {\r
-      if (Configuration->VlanList[Index] != 0) {\r
+      //\r
+      // Clear UI data\r
+      //\r
+      *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_APPLY;\r
+      Configuration->VlanId = 0;\r
+      Configuration->Priority = 0;\r
+      break;\r
+\r
+    case VLAN_REMOVE_QUESTION_ID:\r
+      //\r
+      // Remove VLAN\r
+      //\r
+      ASSERT (PrivateData->NumberOfVlan <= MAX_VLAN_NUMBER);\r
+      for (Index = 0; Index < PrivateData->NumberOfVlan; Index++) {\r
+        if (Configuration->VlanList[Index] != 0) {\r
+          //\r
+          // Checkbox is selected, need remove this VLAN\r
+          //\r
+          VlanConfig->Remove (VlanConfig, PrivateData->VlanId[Index]);\r
+        }\r
+      }\r
+\r
+      VlanUpdateForm (PrivateData);\r
+      if (PrivateData->NumberOfVlan == 0) {\r
         //\r
-        // Checkbox is selected, need remove this VLAN\r
+        // No VLAN device now, connect the physical NIC handle.\r
+        // Note: PrivateData->NumberOfVlan has been updated by VlanUpdateForm()\r
         //\r
-        VlanConfig->Remove (VlanConfig, PrivateData->VlanId[Index]);\r
+        gBS->ConnectController (PrivateData->ControllerHandle, NULL, NULL, TRUE);\r
       }\r
-    }\r
 \r
-    VlanUpdateForm (PrivateData);\r
-    if (PrivateData->NumberOfVlan == 0) {\r
+      *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_APPLY;\r
+      ZeroMem (Configuration->VlanList, MAX_VLAN_NUMBER);\r
+      break;\r
+\r
+    case VLAN_UPDATE_QUESTION_ID:\r
       //\r
-      // No VLAN device now, connect the physical NIC handle.\r
-      // Note: PrivateData->NumberOfVlan has been updated by VlanUpdateForm()\r
+      // Update current VLAN list into Form.\r
       //\r
-      gBS->ConnectController (PrivateData->ControllerHandle, NULL, NULL, TRUE);\r
-    }\r
+      VlanUpdateForm (PrivateData);\r
+      break;\r
 \r
-    *ActionRequest = EFI_BROWSER_ACTION_REQUEST_SUBMIT;\r
-    ZeroMem (Configuration->VlanList, MAX_VLAN_NUMBER);\r
-    break;\r
+    default:\r
+      break;\r
+    }\r
 \r
-  default:\r
-    break;\r
+    HiiSetBrowserData (&gVlanConfigFormSetGuid, mVlanStorageName, sizeof (VLAN_CONFIGURATION), (UINT8 *) Configuration, NULL);\r
+    FreePool (Configuration);\r
+    return EFI_SUCCESS;\r
   }\r
 \r
-  HiiSetBrowserData (&mVlanFormSetGuid, mVlanStorageName, sizeof (VLAN_CONFIGURATION), (UINT8 *) Configuration, NULL);\r
-  FreePool (Configuration);\r
-  return EFI_SUCCESS;\r
+  //\r
+  // All other action return unsupported.\r
+  //\r
+  return EFI_UNSUPPORTED;\r
 }\r
 \r
 \r
@@ -386,7 +443,7 @@ VlanUpdateForm (
 \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
@@ -421,7 +478,7 @@ InstallVlanConfigForm (
   EFI_STATUS                      Status;\r
   EFI_HII_HANDLE                  HiiHandle;\r
   EFI_HANDLE                      DriverHandle;\r
-  CHAR16                          Str[40];\r
+  CHAR16                          Str[26 + sizeof (EFI_MAC_ADDRESS) * 2 + 1];\r
   CHAR16                          *MacString;\r
   EFI_DEVICE_PATH_PROTOCOL        *ChildDevicePath;\r
   EFI_HII_CONFIG_ACCESS_PROTOCOL  *ConfigAccess;\r
@@ -457,7 +514,7 @@ InstallVlanConfigForm (
   // Publish the HII package list\r
   //\r
   HiiHandle = HiiAddPackages (\r
-                &mVlanFormSetGuid,\r
+                &gVlanConfigFormSetGuid,\r
                 DriverHandle,\r
                 VlanConfigDxeStrings,\r
                 VlanConfigBin,\r
@@ -469,7 +526,7 @@ InstallVlanConfigForm (
   PrivateData->HiiHandle = HiiHandle;\r
 \r
   //\r
-  // Update formset title\r
+  // Update formset title help string.\r
   //\r
   MacString = NULL;\r
   Status = NetLibGetMacString (PrivateData->ControllerHandle, PrivateData->ImageHandle, &MacString);\r
@@ -479,21 +536,21 @@ InstallVlanConfigForm (
   PrivateData->MacString = MacString;\r
 \r
   StrCpy (Str, L"VLAN Configuration (MAC:");\r
-  StrCat (Str, MacString);\r
+  StrnCat (Str, MacString, sizeof (EFI_MAC_ADDRESS) * 2);\r
   StrCat (Str, L")");\r
   HiiSetString (\r
     HiiHandle,\r
-    STRING_TOKEN (STR_VLAN_FORM_SET_TITLE),\r
+    STRING_TOKEN (STR_VLAN_FORM_SET_TITLE_HELP),\r
     Str,\r
     NULL\r
     );\r
 \r
   //\r
-  // Update form title\r
+  // Update form title help string.\r
   //\r
   HiiSetString (\r
     HiiHandle,\r
-    STRING_TOKEN (STR_VLAN_FORM_TITLE),\r
+    STRING_TOKEN (STR_VLAN_FORM_HELP),\r
     Str,\r
     NULL\r
     );\r