Mercurial > ecos
comparison packages/hal/arm/sa11x0/cerf/current/include/plf_mmap.h @ 208:e0c0827131d1 ecos
Merge from eCos master repository on 2002-05-20-20:11:54-BST
| author | jlarmour |
|---|---|
| date | Mon, 20 May 2002 22:19:26 +0000 |
| parents | |
| children | d2c90368aeef |
comparison
equal
deleted
inserted
replaced
| 207:74c807ddde34 | 208:e0c0827131d1 |
|---|---|
| 1 #ifndef CYGONCE_HAL_SA11X0_PLATFORM_PLF_MMAP_H | |
| 2 #define CYGONCE_HAL_SA11X0_PLATFORM_PLF_MMAP_H | |
| 3 /*============================================================================= | |
| 4 // | |
| 5 // plf_mmap.h | |
| 6 // | |
| 7 // Platform specific memory map support | |
| 8 // | |
| 9 //============================================================================= | |
| 10 //####ECOSGPLCOPYRIGHTBEGIN#### | |
| 11 // ------------------------------------------- | |
| 12 // This file is part of eCos, the Embedded Configurable Operating System. | |
| 13 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. | |
| 14 // | |
| 15 // eCos is free software; you can redistribute it and/or modify it under | |
| 16 // the terms of the GNU General Public License as published by the Free | |
| 17 // Software Foundation; either version 2 or (at your option) any later version. | |
| 18 // | |
| 19 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY | |
| 20 // WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 21 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 22 // for more details. | |
| 23 // | |
| 24 // You should have received a copy of the GNU General Public License along | |
| 25 // with eCos; if not, write to the Free Software Foundation, Inc., | |
| 26 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. | |
| 27 // | |
| 28 // As a special exception, if other files instantiate templates or use macros | |
| 29 // or inline functions from this file, or you compile this file and link it | |
| 30 // with other works to produce a work based on this file, this file does not | |
| 31 // by itself cause the resulting work to be covered by the GNU General Public | |
| 32 // License. However the source code for this file must still be made available | |
| 33 // in accordance with section (3) of the GNU General Public License. | |
| 34 // | |
| 35 // This exception does not invalidate any other reasons why a work based on | |
| 36 // this file might be covered by the GNU General Public License. | |
| 37 // | |
| 38 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. | |
| 39 // at http://sources.redhat.com/ecos/ecos-license | |
| 40 // ------------------------------------------- | |
| 41 //####ECOSGPLCOPYRIGHTEND#### | |
| 42 //============================================================================= | |
| 43 //#####DESCRIPTIONBEGIN#### | |
| 44 // | |
| 45 // Author(s): hmt | |
| 46 // Contributors: hmt | |
| 47 // Date: 2001-01-04 | |
| 48 // Purpose: Intel SA11x0 series platform-specific memory mapping macros | |
| 49 // Description: Macros to convert a cached, virtual address to | |
| 50 // 1) an uncached adddress for the same memory (if available) | |
| 51 // 2) the equivalent physical address for giving to external | |
| 52 // hardware eg. DMA engines. | |
| 53 // | |
| 54 // NB: this mapping is expressed here statically, independent | |
| 55 // of the actual mapping installed in the MMAP table. So if | |
| 56 // someone changes that, or its initialisation is changed, | |
| 57 // then this module must change. This is intended to be | |
| 58 // efficient at a cost of generality. It is also intended to | |
| 59 // be called with constants (such as &my_struct) as input | |
| 60 // args, so that all the work can be done at compile time, | |
| 61 // with optimization on. | |
| 62 // | |
| 63 // Usage: #include <cyg/hal/hal_cache.h> | |
| 64 // (which includes this file itself) | |
| 65 // | |
| 66 //####DESCRIPTIONEND#### | |
| 67 // | |
| 68 //===========================================================================*/ | |
| 69 | |
| 70 #include <cyg/hal/hal_misc.h> | |
| 71 | |
| 72 // Get the pagesize for a particular virtual address: | |
| 73 | |
| 74 // This does not depend on the vaddr. | |
| 75 #define HAL_MM_PAGESIZE( vaddr, pagesize ) CYG_MACRO_START \ | |
| 76 (pagesize) = SZ_1M; \ | |
| 77 CYG_MACRO_END | |
| 78 | |
| 79 // Get the physical address from a virtual address: | |
| 80 | |
| 81 // Only RAM and ROM are mapped; we just pass through all other values, | |
| 82 // rather than detecting nonexistent areas here. | |
| 83 | |
| 84 #define HAL_VIRT_TO_PHYS_ADDRESS( vaddr, paddr ) CYG_MACRO_START \ | |
| 85 cyg_uint32 _v_ = (cyg_uint32)(vaddr); \ | |
| 86 if ( 32 * SZ_1M > _v_ ) /* 32Mb of SDRAM Bank 0 from 0-32Mb */ \ | |
| 87 _v_ += 0xc00u * SZ_1M; \ | |
| 88 else if ( 0x500u * SZ_1M > _v_ ) /* Space between RAM and mapped ROM */\ | |
| 89 /* no change */ ; \ | |
| 90 else if ( 0x520u * SZ_1M > _v_ ) /* Mapped boot ROM size 32Mb */ \ | |
| 91 _v_ -= 0x500u * SZ_1M; \ | |
| 92 else if ( 0xf00u * SZ_1M > _v_ ) /* Space between ROM and mapped I/O */\ | |
| 93 /* no change */ ; \ | |
| 94 else if ( 0xf10u * SZ_1M > _v_ ) /* Mapped I/O size 16Mb */ \ | |
| 95 _v_ = (_v_ - 0xf00u * SZ_1M) + (0x080u * SZ_1M); \ | |
| 96 else /* Rest of it */ \ | |
| 97 /* no change */ ; \ | |
| 98 (paddr) = _v_; \ | |
| 99 CYG_MACRO_END | |
| 100 | |
| 101 // Get the virtual address for a physical address: | |
| 102 | |
| 103 // Only RAM and ROM are mapped; we just pass through all other values, | |
| 104 // rather than detecting nonexistent areas here. | |
| 105 | |
| 106 #define HAL_PHYS_TO_VIRT_ADDRESS( paddr, vaddr ) CYG_MACRO_START \ | |
| 107 cyg_uint32 _p_ = (cyg_uint32)(paddr); \ | |
| 108 if ( 32 * SZ_1M > _p_ ) /* 32Mb Boot ROM mapped to 0x500Mb */ \ | |
| 109 _p_ += 0x500u * SZ_1M; \ | |
| 110 else if ( 0x080u * SZ_1M > _p_ ) /* Space between ROM and I/O */ \ | |
| 111 /* no change */ ; \ | |
| 112 else if ( 0x090u * SZ_1M > _p_ ) /* I/O size 16Mb */ \ | |
| 113 _p_ = (_p_ - 0x080u * SZ_1M) + (0xf00u * SZ_1M); \ | |
| 114 else if ( 0xc00u * SZ_1M > _p_ ) /* Space between I/O and SDRAM */ \ | |
| 115 /* no change */ ; \ | |
| 116 else if ( 0xc20u * SZ_1M > _p_ ) /* Raw RAM size 32Mb */ \ | |
| 117 _p_ -= 0xc00u * SZ_1M; \ | |
| 118 else /* Rest of it */ \ | |
| 119 /* no change */ ; \ | |
| 120 (vaddr) = _p_ ; \ | |
| 121 CYG_MACRO_END | |
| 122 | |
| 123 // Get a non-cacheable address for accessing the same store as a virtual | |
| 124 // (assumed cachable) address: | |
| 125 | |
| 126 // Only RAM is mapped: ROM is only available cachable, everything else is | |
| 127 // not cachable anyway. | |
| 128 | |
| 129 #define HAL_VIRT_TO_UNCACHED_ADDRESS( vaddr, uaddr ) CYG_MACRO_START \ | |
| 130 cyg_uint32 _v_ = (cyg_uint32)(vaddr); \ | |
| 131 if ( 32 * SZ_1M > _v_ ) /* 32Mb of SDRAM Bank 0 from 0-32Mb */ \ | |
| 132 _v_ += 0xc00u * SZ_1M; \ | |
| 133 else /* Everything else is already uncacheable or is ROM */ \ | |
| 134 /* no change */ ; \ | |
| 135 (uaddr) = _v_ ; \ | |
| 136 CYG_MACRO_END | |
| 137 | |
| 138 //--------------------------------------------------------------------------- | |
| 139 #endif // CYGONCE_HAL_SA11X0_PLATFORM_PLF_MMAP_H | |
| 140 // EOF plf_mmap.h |
