All of lore.kernel.org
 help / color / mirror / Atom feed
* pci_alloc_consistent usage
@ 2003-05-23 21:59 Wayne Gowcher
  2003-05-27  9:17 ` Ralf Baechle
  0 siblings, 1 reply; 10+ messages in thread
From: Wayne Gowcher @ 2003-05-23 21:59 UTC (permalink / raw)
  To: Linux-MIPS

I am working on a driver that uses PCI DMA transfers
from system memory to the PCI device. On the 2.4.18
kernel it worked OK, but now when it is recompiled for
2.4.20 it doesn't. Digging into things I have found
that the function virt_to_phys() has been changed from
:
return PHYSADDR(address)

to
return (unsigned long)address - PAGE_OFFSET

Where PAGE_OFFSET is 0x8000 0000, and where PHYSADDR
would AND the address against 0x1FFF FFFF. As far as I
can tell the problem comes from pci_alloc_consistent
doing :

ret = UNCAC_ADDR(ret) 

which converts a 0x8xxx address to 0xAxxx, and then
when you pass this 0xAxxx_xxxx address through
virt_to_phys() you get an address of the form
0x2xxx_xxxx. This 0x2xxx_xxxx is passed to the dma
controller as the physical address to where it must
read / write data, and because it is 0x2xxx_xxxx and
not 0x0xxx_xxxx an exception occurs.

At first I just tried AND'ing out the 0xA.. like
PHYSADDR used to do it, but with that change i no
longer get the exception, but the driver does not dma
the data across - it just sits there.

I read DMA-mapping.txt and it says virt_to_phys() will
be phased out, and should be used, but doesn't
elaborate any further (like how you should do it now
).

So after that long intro, my question is :

Anybody know where I'm going wrong and how to fix
things ?

Also any tips on what drivers to look at for good
examples would also be appreciated.

TIA


__________________________________
Do you Yahoo!?
The New Yahoo! Search - Faster. Easier. Bingo.
http://search.yahoo.com

^ permalink raw reply	[flat|nested] 10+ messages in thread
* pci_alloc_consistent() usage
@ 2004-07-13 13:01 Vadivelan Mani
  2004-07-13 19:29 ` Ralf Baechle
  0 siblings, 1 reply; 10+ messages in thread
From: Vadivelan Mani @ 2004-07-13 13:01 UTC (permalink / raw)
  To: linux-mips

hi,

   I'm writing a wireless driver which requires 8 transmit and 8 receive 
buffers each of size 3KB approx.

These buffers should be in dma capable space.

I've allocated them using pci_alloc_consistent().

I've allocated 128KBytes just to make more space. I've got few doubts.

   1. Can pci_alloc_consistent() be used to allocate memory upto 128KBytes?

If this is not possible, how much can it allocate?



2.)   I would also like to know the exact use of this allocated space to 
transmit or receive a packet.

During transmission i do the following. Plz correct me if i'm wrong because 
i'm new to driver writing.

The device has a register which should be loaded with the transmit buffers 
starting address.

I copy the packet coming from the Kernel in the form of sk_buff structure 
into one of the transmit buffers that i've allocated using memcpy().
And i set the register in the device to initiate transmission of the packet.

Where does the dma transfer concept come in this?
There is no mention of the direction of data transfer in 
pci_alloc_consistent().

I also assumed that allocating buffer in dma capable space was itself enough 
to start dma transfers.

Since i do not have the device now i'm not able to test the code. But i 
would like to write the code before i get the device.

Kindly help me in this.

thanking u in advance.

regards,
vadi.

_________________________________________________________________
Marriage by choice.... http://www.shaadi.com/ptnr.php?ptnr=hmltag Log onto 
Shaadi.com

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2004-07-13 19:30 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-05-23 21:59 pci_alloc_consistent usage Wayne Gowcher
2003-05-27  9:17 ` Ralf Baechle
2003-05-27 10:07   ` Atsushi Nemoto
2003-05-27 10:53     ` Christoph Hellwig
2003-05-27 11:22       ` Ralf Baechle
2003-05-27 11:33         ` Christoph Hellwig
2003-05-27 11:45           ` Ralf Baechle
2003-05-28  1:30         ` Atsushi Nemoto
  -- strict thread matches above, loose matches on Subject: below --
2004-07-13 13:01 pci_alloc_consistent() usage Vadivelan Mani
2004-07-13 19:29 ` Ralf Baechle

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.