diff options
author | erictian <erictian@6f19259b-4bc3-4df7-8a09-765794883524> | 2010-03-19 06:54:35 +0000 |
---|---|---|
committer | erictian <erictian@6f19259b-4bc3-4df7-8a09-765794883524> | 2010-03-19 06:54:35 +0000 |
commit | aa91de055c5e15a716f3a0ce6bf5a1c28fda9e56 (patch) | |
tree | 33ac167e3bd420086aeb2fecabc0332733f4130d /MdeModulePkg/Bus/Pci/EhciDxe | |
parent | 33f30f1ee3490739c6b84de1bbecc3f9a63a5591 (diff) | |
download | edk2-platforms-aa91de055c5e15a716f3a0ce6bf5a1c28fda9e56.tar.xz |
Fix a bug that usb keybarod can not work well when it is inserted at a usb 2.0 hub.
It's due to AsyncInterruptList does not update the corresponding QTDHw->Data with pci bus master address.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10286 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'MdeModulePkg/Bus/Pci/EhciDxe')
-rw-r--r-- | MdeModulePkg/Bus/Pci/EhciDxe/EhciSched.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/MdeModulePkg/Bus/Pci/EhciDxe/EhciSched.c b/MdeModulePkg/Bus/Pci/EhciDxe/EhciSched.c index 58d4a303dc..0b9d7608ac 100644 --- a/MdeModulePkg/Bus/Pci/EhciDxe/EhciSched.c +++ b/MdeModulePkg/Bus/Pci/EhciDxe/EhciSched.c @@ -904,7 +904,12 @@ EhcUpdateAsyncRequest ( QtdHw->ErrCnt = QTD_MAX_ERR;
QtdHw->CurPage = 0;
QtdHw->TotalBytes = (UINT32) Qtd->DataLen;
- QtdHw->Page[0] = EHC_LOW_32BIT (Qtd->Data);
+ //
+ // calculate physical address by offset.
+ //
+ PciAddr = (UINTN)Urb->DataPhy + ((UINTN)Qtd->Data - (UINTN)Urb->Data);
+ QtdHw->Page[0] = EHC_LOW_32BIT (PciAddr);
+ QtdHw->PageHigh[0]= EHC_HIGH_32BIT (PciAddr);
}
//
|