]> git.proxmox.com Git - mirror_edk2.git/commitdiff
IntelFrameworkModulePkg: Modify IsaSerialDxe to follow driver rules
authorHao Wu <hao.a.wu@intel.com>
Tue, 5 May 2015 02:34:20 +0000 (02:34 +0000)
committerhwu1225 <hwu1225@Edk2>
Tue, 5 May 2015 02:34:20 +0000 (02:34 +0000)
IsaSerialDxe creates child handles and wishes to retrieve the name for
those child controllers.

However, in the IsaSerialComponentNameGetControllerName() function, it
directly return EFI_UNSUPPORTED when ChildHandle != NULL.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Hao Wu <hao.a.wu@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
Reviewed-by: Michael Kinney <michael.d.kinney@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17289 6f19259b-4bc3-4df7-8a09-765794883524

IntelFrameworkModulePkg/Bus/Isa/IsaSerialDxe/ComponentName.c

index 4b17c5423c643a72695dbeac18cd36a1905b7365..ef24008f6b453130e2287c398ee1418c9ec3d263 100644 (file)
@@ -180,16 +180,11 @@ IsaSerialComponentNameGetControllerName (
   OUT CHAR16                                          **ControllerName\r
   )\r
 {\r
-  EFI_STATUS              Status;\r
-  EFI_SERIAL_IO_PROTOCOL  *SerialIo;\r
-  SERIAL_DEV              *SerialDevice;\r
+  EFI_STATUS                Status;\r
+  EFI_SERIAL_IO_PROTOCOL    *SerialIo;\r
+  SERIAL_DEV                *SerialDevice;\r
+  EFI_UNICODE_STRING_TABLE  *ControllerNameTable;\r
 \r
-  //\r
-  // This is a device driver, so ChildHandle must be NULL.\r
-  //\r
-  if (ChildHandle != NULL) {\r
-    return EFI_UNSUPPORTED;\r
-  }\r
   //\r
   // Make sure this driver is currently managing ControllerHandle\r
   //\r
@@ -201,29 +196,44 @@ IsaSerialComponentNameGetControllerName (
   if (EFI_ERROR (Status)) {\r
     return Status;\r
   }\r
-  //\r
-  // Get the Block I/O Protocol on Controller\r
-  //\r
-  Status = gBS->OpenProtocol (\r
-                  ControllerHandle,\r
-                  &gEfiSerialIoProtocolGuid,\r
-                  (VOID **) &SerialIo,\r
-                  gSerialControllerDriver.DriverBindingHandle,\r
-                  ControllerHandle,\r
-                  EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
+\r
+  ControllerNameTable = NULL;\r
+  if (ChildHandle != NULL) {\r
+    Status = EfiTestChildHandle (\r
+               ControllerHandle,\r
+               ChildHandle,\r
+               &gEfiIsaIoProtocolGuid\r
+               );\r
+    if (EFI_ERROR (Status)) {\r
+      return Status;\r
+    }\r
+\r
+    //\r
+    // Get the Serial I/O Protocol from the child handle\r
+    //\r
+    Status = gBS->OpenProtocol (\r
+                    ChildHandle,\r
+                    &gEfiSerialIoProtocolGuid,\r
+                    (VOID **) &SerialIo,\r
+                    gSerialControllerDriver.DriverBindingHandle,\r
+                    ChildHandle,\r
+                    EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
+                    );\r
+    if (EFI_ERROR (Status)) {\r
+      return Status;\r
+    }\r
+\r
+    //\r
+    // Get the Serial Controller's Device structure\r
+    //\r
+    SerialDevice = SERIAL_DEV_FROM_THIS (SerialIo);\r
+    ControllerNameTable = SerialDevice->ControllerNameTable;\r
   }\r
-  //\r
-  // Get the Serial Controller's Device structure\r
-  //\r
-  SerialDevice = SERIAL_DEV_FROM_THIS (SerialIo);\r
 \r
   return LookupUnicodeString2 (\r
            Language,\r
            This->SupportedLanguages,\r
-           SerialDevice->ControllerNameTable,\r
+           ControllerNameTable,\r
            ControllerName,\r
            (BOOLEAN)(This == &gIsaSerialComponentName)\r
            );\r