-/**\r
- Flush data from PCI controller specific address to mapped system\r
- memory address.\r
-\r
- @param Ehc The EHCI device.\r
- @param Urb The URB to unmap.\r
-\r
- @retval EFI_SUCCESS Success to flush data to mapped system memory.\r
- @retval EFI_DEVICE_ERROR Fail to flush data to mapped system memory.\r
-\r
-**/\r
-EFI_STATUS\r
-EhcFlushAsyncIntMap (\r
- IN USB2_HC_DEV *Ehc,\r
- IN URB *Urb\r
- )\r
-{\r
- EFI_STATUS Status;\r
- EFI_PHYSICAL_ADDRESS PhyAddr;\r
- EFI_PCI_IO_PROTOCOL_OPERATION MapOp;\r
- EFI_PCI_IO_PROTOCOL *PciIo;\r
- UINTN Len;\r
- VOID *Map;\r
-\r
- PciIo = Ehc->PciIo;\r
- Len = Urb->DataLen;\r
-\r
- if (Urb->Ep.Direction == EfiUsbDataIn) {\r
- MapOp = EfiPciIoOperationBusMasterWrite;\r
- } else {\r
- MapOp = EfiPciIoOperationBusMasterRead;\r
- }\r
-\r
- Status = PciIo->Unmap (PciIo, Urb->DataMap);\r
- if (EFI_ERROR (Status)) {\r
- goto ON_ERROR;\r
- }\r
-\r
- Urb->DataMap = NULL;\r
-\r
- Status = PciIo->Map (PciIo, MapOp, Urb->Data, &Len, &PhyAddr, &Map);\r
- if (EFI_ERROR (Status) || (Len != Urb->DataLen)) {\r
- goto ON_ERROR;\r
- }\r
-\r
- Urb->DataPhy = (VOID *) ((UINTN) PhyAddr);\r
- Urb->DataMap = Map;\r
- return EFI_SUCCESS;\r
-\r
-ON_ERROR:\r
- return EFI_DEVICE_ERROR;\r
-}\r
-\r
-\r