diff options
author | Hao Wu <hao.a.wu@intel.com> | 2015-05-05 02:34:20 +0000 |
---|---|---|
committer | hwu1225 <hwu1225@Edk2> | 2015-05-05 02:34:20 +0000 |
commit | bc19591807481c898bd7126bc5badfaab698722b (patch) | |
tree | e777a87e99ae9becc4172d5fe10dcff068fd5e02 /IntelFrameworkModulePkg/Bus/Isa | |
parent | 724dcbb27247de46b1f09bc082198598cc9bad0d (diff) | |
download | edk2-platforms-bc19591807481c898bd7126bc5badfaab698722b.tar.xz |
IntelFrameworkModulePkg: Modify IsaSerialDxe to follow driver rules
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
Diffstat (limited to 'IntelFrameworkModulePkg/Bus/Isa')
-rw-r--r-- | IntelFrameworkModulePkg/Bus/Isa/IsaSerialDxe/ComponentName.c | 64 |
1 files changed, 37 insertions, 27 deletions
diff --git a/IntelFrameworkModulePkg/Bus/Isa/IsaSerialDxe/ComponentName.c b/IntelFrameworkModulePkg/Bus/Isa/IsaSerialDxe/ComponentName.c index 4b17c5423c..ef24008f6b 100644 --- a/IntelFrameworkModulePkg/Bus/Isa/IsaSerialDxe/ComponentName.c +++ b/IntelFrameworkModulePkg/Bus/Isa/IsaSerialDxe/ComponentName.c @@ -180,17 +180,12 @@ IsaSerialComponentNameGetControllerName ( OUT CHAR16 **ControllerName
)
{
- EFI_STATUS Status;
- EFI_SERIAL_IO_PROTOCOL *SerialIo;
- SERIAL_DEV *SerialDevice;
+ EFI_STATUS Status;
+ EFI_SERIAL_IO_PROTOCOL *SerialIo;
+ SERIAL_DEV *SerialDevice;
+ EFI_UNICODE_STRING_TABLE *ControllerNameTable;
//
- // This is a device driver, so ChildHandle must be NULL.
- //
- if (ChildHandle != NULL) {
- return EFI_UNSUPPORTED;
- }
- //
// Make sure this driver is currently managing ControllerHandle
//
Status = EfiTestManagedDevice (
@@ -201,29 +196,44 @@ IsaSerialComponentNameGetControllerName ( if (EFI_ERROR (Status)) {
return Status;
}
- //
- // Get the Block I/O Protocol on Controller
- //
- Status = gBS->OpenProtocol (
- ControllerHandle,
- &gEfiSerialIoProtocolGuid,
- (VOID **) &SerialIo,
- gSerialControllerDriver.DriverBindingHandle,
- ControllerHandle,
- EFI_OPEN_PROTOCOL_GET_PROTOCOL
- );
- if (EFI_ERROR (Status)) {
- return Status;
+
+ ControllerNameTable = NULL;
+ if (ChildHandle != NULL) {
+ Status = EfiTestChildHandle (
+ ControllerHandle,
+ ChildHandle,
+ &gEfiIsaIoProtocolGuid
+ );
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ //
+ // Get the Serial I/O Protocol from the child handle
+ //
+ Status = gBS->OpenProtocol (
+ ChildHandle,
+ &gEfiSerialIoProtocolGuid,
+ (VOID **) &SerialIo,
+ gSerialControllerDriver.DriverBindingHandle,
+ ChildHandle,
+ EFI_OPEN_PROTOCOL_GET_PROTOCOL
+ );
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ //
+ // Get the Serial Controller's Device structure
+ //
+ SerialDevice = SERIAL_DEV_FROM_THIS (SerialIo);
+ ControllerNameTable = SerialDevice->ControllerNameTable;
}
- //
- // Get the Serial Controller's Device structure
- //
- SerialDevice = SERIAL_DEV_FROM_THIS (SerialIo);
return LookupUnicodeString2 (
Language,
This->SupportedLanguages,
- SerialDevice->ControllerNameTable,
+ ControllerNameTable,
ControllerName,
(BOOLEAN)(This == &gIsaSerialComponentName)
);
|