This is the mail archive of the
ecos-discuss@sourceware.org
mailing list for the eCos project.
Re: Memory mapping routines in ecos
- From: Nick Garnett <nickg at ecoscentric dot com>
- To: Surendra <surenreddy at gmail dot com>
- Cc: ecos-discuss at ecos dot sourceware dot org
- Date: 25 Jul 2006 10:17:30 +0100
- Subject: Re: [ECOS] Memory mapping routines in ecos
- References: <bb52c33e0607231312i4f854feek75dd993d6c674d69@mail.gmail.com>
Surendra <surenreddy@gmail.com> writes:
> Hi,
>
> I am writing a ecos device driver for a PCI chipset on an i386 target.
> I want to know what are the appropriate HAL function calls to achieve
> the following ?
>
> 1. Allocate uncached memory address reagion for DMA
> 2. Convert PCI bus specific address to cpu address and vice versa.
> 3. Physical to Virtual - Virtual to Physical address
>
>
> I have already found the following MACROs defined in hal_arch.h that
> may have been defined for this purpose. But these MACROs do nothing.
>
> // Memory access macros
>
> #define CYGARC_CACHED_ADDRESS(x) (x)
> #define CYGARC_UNCACHED_ADDRESS(x) (x)
> #define CYGARC_PHYSICAL_ADDRESS(x) (x)
> #define CYGARC_VIRTUAL_ADDRESS(x) (x)
>
> Any suggestions ?
> Also, can anyone please explain what Logical, Physical and Virtual
> address mean in ecos?
The IA32 processors go to a lot of effort to ensure that there is a
coherent view of memory from all accessors -- CPU, PCI, DMA etc. For
this reason there is no need for these macros to do anything, the
hardware does it all. So to answer your questions:
1. Any memory you allocate will work. There is no need to specially
allocate uncached memory.
2. On the PC hardware the PCI address space is mapped 1-1 onto the
CPU physical address space. So no need to translate anything.
3. eCos doesn't use the MMU, so the mapping virtual to physical is
1-1.
The definition of address types in eCos are as follows:
Virtual - Mapped through the MMU, the addresses visible to the
CPU. The same memory may be visible in both cached and
uncached versions at different virtual addresses.
Physical - The actual bus addresses of the various memory and device
blocks. Physical addresses are needed to pass to DMA
controllers and other direct access devices.
PCI Address - Within the PCI address space. The values that get put
into the device BAR registers, and which need to be passed to
any PCI DMA controllers. These addresses depend on the setup
of various apertures between the physical and PCI address
spaces. Generally, the translation from virtual to PCI
addresses in handled in the PCI library.
--
Nick Garnett eCos Kernel Architect
http://www.ecoscentric.com The eCos and RedBoot experts
--
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss