>That sounds like a "yes", not a "no" ... except for devices on busses
^^^^^^
Then it's not "every", which was your question. I guess I need
to understand better how to interpret your questions.
>that don't have do memory mapped I/O. It's what I described: dma_*()
>calls being used with struct device, without BUGging out.
Let's see if we agree. The behavior I expect is:
addr = dma_malloc(&some_usb_device->dev,size, &dma_addr,DMA_CONSISTENT)
===> BUG()
addr = dma_malloc(host_dev(some_usb_device), &dma_addr, DMA_CONSISTENT)
===> some consistent memory (or NULL).
where host_dev would be something like:
struct device *host_dev(struct usb_device *usbdev)
{
struct usb_hcd *hcd = usbdev->bus->hcpriv;
return &hcd->pdev->device; /* actually, this would become &hcd->dev */
}
>> USB devices should do DMA operations with respect to their USB
>> host adapters, typically a PCI device. For example, imagine a machine
>> with two USB controllers on different bus instances.
>USB already does that ... you write as if it didn't.
I wasn't aware of it. I've looked up the code now. Thanks
for the pointer. With generic DMA operations, we can delete most of
drivers/bus/usb/core/buffer.c, specifically
hcd_buffer_{alloc,free,{,un}map{,_sg},dmasync,sync_sg}, and their
method pointers in struct usb_operations in drivers/usb/core/hcd.[ch]
without introducing PCI dependency.
I hope this clarifies things. Please let me know if you think
we still disagree on something.
Adam J. Richter __ ______________ 575 Oroville Road
adam@yggdrasil.com \ / Milpitas, California 95035
+1 408 309-6081 | g g d r a s i l United States of America
"Free Software For The Rest Of Us."
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/