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
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