]> git.proxmox.com Git - mirror_edk2.git/blobdiff - IntelFrameworkModulePkg/Csm/LegacyBiosDxe/LegacySio.c
IntelFrameworkModulePkg/LegacyBios: Get COM base from SerialIo parent
[mirror_edk2.git] / IntelFrameworkModulePkg / Csm / LegacyBiosDxe / LegacySio.c
index 9844d64fd62516c1c009d1319889081000b04f5c..a27a477eaa0eea20dd3ae66a1fde792ff997610d 100644 (file)
@@ -49,8 +49,7 @@ LegacyBiosBuildSioDataFromIsaIo (
   UINTN                               EntryCount;\r
   EFI_OPEN_PROTOCOL_INFORMATION_ENTRY *OpenInfoBuffer;\r
   EFI_BLOCK_IO_PROTOCOL               *BlockIo;\r
-\r
-\r
+  EFI_SERIAL_IO_PROTOCOL              *SerialIo;\r
 \r
   //\r
   // Get the list of ISA controllers in the system\r
@@ -137,10 +136,16 @@ LegacyBiosBuildSioDataFromIsaIo (
         // We want resource for legacy even if no 32-bit driver installed\r
         //\r
         for (ChildIndex = 0; ChildIndex < EntryCount; ChildIndex++) {\r
-          SioSerial           = &SioPtr->Serial[ResourceList->Device.UID];\r
-          SioSerial->Address  = (UINT16) IoResource->StartRange;\r
-          SioSerial->Irq      = (UINT8) InterruptResource->StartRange;\r
-          SioSerial->Mode     = DEVICE_SERIAL_MODE_NORMAL | DEVICE_SERIAL_MODE_DUPLEX_HALF;\r
+          if ((OpenInfoBuffer[ChildIndex].Attributes & EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER) != 0) {\r
+            Status = gBS->HandleProtocol (OpenInfoBuffer[ChildIndex].AgentHandle, &gEfiSerialIoProtocolGuid, (VOID **) &SerialIo);\r
+            if (!EFI_ERROR (Status)) {\r
+              SioSerial           = &SioPtr->Serial[ResourceList->Device.UID];\r
+              SioSerial->Address  = (UINT16) IoResource->StartRange;\r
+              SioSerial->Irq      = (UINT8) InterruptResource->StartRange;\r
+              SioSerial->Mode     = DEVICE_SERIAL_MODE_NORMAL | DEVICE_SERIAL_MODE_DUPLEX_HALF;\r
+              break;\r
+            }\r
+          }\r
         }\r
 \r
         FreePool (OpenInfoBuffer);\r