Re: [RFT][PATCH] generic device DMA implementation

Adam J. Richter (adam@yggdrasil.com)
Sat, 28 Dec 2002 07:41:04 -0800


David Brownell wrote:
>Adam J. Richter wrote:
>> At 2002-12-28 1:29:54 GMT, David Brownell wrote:
>>
>>>Isn't the goal to make sure that for every kind of "struct device *"
^^^^^
>>>it should be possible to use those dma_*() calls, without BUGging
>>>out.
>>
>> No.
>>
>>>If that's not true ... then why were they defined?
>>
>> So that other memory mapped busses such as ISA and sbus
>> can use them.

>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/