From: Matthew Wilcox <matthew@wil.cx>
To: Anil kumar <anils_r@yahoo.com>
Cc: linux-kernel@vger.kernel.org, linux-scsi@vger.kernel.org
Subject: Re: bus_to_virt equivalent
Date: Mon, 7 Nov 2005 18:37:22 -0700 [thread overview]
Message-ID: <20051108013722.GK23749@parisc-linux.org> (raw)
In-Reply-To: <20051107235247.67981.qmail@web32402.mail.mud.yahoo.com>
On Mon, Nov 07, 2005 at 03:52:47PM -0800, Anil kumar wrote:
> Hi,
>
> I am trying to port bus_to_virt and virt_to_bus to the
> DMA-mapping scheme.
> I found a way to move virt_to_bus() as follows:
> page = virt_to_page(cmd->request_buffer);
> offset = (unsigned long)address & ~PAGE_MASK;
> dma_addr_t addr = pci_map_page(dev, page, offset,
> size,direction);
>
> But now I want to get virtual address for dma_addr_t.
Did you *read* DMA-mapping.txt?
Drivers converted fully to this interface should not use virt_to_bus
any longer, nor should they use bus_to_virt. Some drivers have to
be changed a little bit, because
*there is no longer an equivalent to bus_to_virt in the dynamic
DMA mapping scheme*
- you have to always store the DMA addresses returned by the
pci_alloc_consistent, pci_pool_alloc, and pci_map_single calls
(pci_map_sg stores them in the scatterlist itself if the platform
supports dynamic DMA mapping in hardware) in your driver structures
and/or in the card registers.
The reason for this is that there may be many physical addresses which
correspond to the same bus address. For example (this is on an HP rx8620)
the bus address c001b000 maps to 00000f000001b000 for device 00:03.0,
00000f010001b000 for device 40:03.0, 00000f020001b000 for device 80:03.0
and 00000f030001b000 for device c0:03.0.
Now, maybe we should add a function:
unsigned long device_bus_addr_to_phys(struct device *dev, dma_addr_t handle);
but we don't have one yet. So you have to follow the rules above.
next prev parent reply other threads:[~2005-11-08 1:37 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-11-07 23:52 bus_to_virt equivalent Anil kumar
2005-11-08 1:37 ` Matthew Wilcox [this message]
2005-11-08 22:47 ` Anil kumar
2005-11-08 22:53 ` Russell King
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20051108013722.GK23749@parisc-linux.org \
--to=matthew@wil.cx \
--cc=anils_r@yahoo.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox