--- zzzz-none-000/linux-2.6.13.1/drivers/usb/host/ohci-mem.c 2005-09-10 02:42:58.000000000 +0000 +++ ohio-7170-487/linux-2.6.13.1/drivers/usb/host/ohci-mem.c 2007-05-11 17:26:09.000000000 +0000 @@ -91,6 +91,9 @@ td = dma_pool_alloc (hc->td_cache, mem_flags, &dma); if (td) { +#ifdef CONFIG_USB_OHCI_DMA_ADDRESS_TRANSLATION + dma = DMA_TO_OHCI_ADDRESS (dma); +#endif /* in case hc fetches it, make it look dead */ memset (td, 0, sizeof *td); td->hwNextTD = cpu_to_hc32 (hc, dma); @@ -111,7 +114,7 @@ *prev = td->td_hash; else if ((td->hwINFO & cpu_to_hc32(hc, TD_DONE)) != 0) ohci_dbg (hc, "no hash for td %p\n", td); - dma_pool_free (hc->td_cache, td, td->td_dma); + dma_pool_free (hc->td_cache, td, OHCI_TO_DMA_ADDRESS (td->td_dma)); } /*-------------------------------------------------------------------------*/ @@ -127,7 +130,7 @@ if (ed) { memset (ed, 0, sizeof (*ed)); INIT_LIST_HEAD (&ed->td_list); - ed->dma = dma; + ed->dma = DMA_TO_OHCI_ADDRESS (dma); } return ed; } @@ -135,6 +138,6 @@ static void ed_free (struct ohci_hcd *hc, struct ed *ed) { - dma_pool_free (hc->ed_cache, ed, ed->dma); + dma_pool_free (hc->ed_cache, ed, OHCI_TO_DMA_ADDRESS (ed->dma)); }