Home | History | Annotate | Download | only in asm-arm
      1 /*
      2  *  linux/include/asm-arm/memory.h
      3  *
      4  *  Copyright (C) 2000-2002 Russell King
      5  *  modification for nommu, Hyok S. Choi, 2004
      6  *
      7  * This program is free software; you can redistribute it and/or modify
      8  * it under the terms of the GNU General Public License version 2 as
      9  * published by the Free Software Foundation.
     10  *
     11  *  Note: this file should not be included by non-asm/.h files
     12  */
     13 #ifndef __ASM_ARM_MEMORY_H
     14 #define __ASM_ARM_MEMORY_H
     15 
     16 /*
     17  * Allow for constants defined here to be used from assembly code
     18  * by prepending the UL suffix only with actual C code compilation.
     19  */
     20 #ifndef __ASSEMBLY__
     21 #define UL(x) (x##UL)
     22 #else
     23 #define UL(x) (x)
     24 #endif
     25 
     26 #include <linux/compiler.h>
     27 #include <asm/arch/memory.h>
     28 #include <asm/sizes.h>
     29 
     30 #ifdef CONFIG_MMU
     31 
     32 #ifndef TASK_SIZE
     33 /*
     34  * TASK_SIZE - the maximum size of a user space task.
     35  * TASK_UNMAPPED_BASE - the lower boundary of the mmap VM area
     36  */
     37 #define TASK_SIZE		UL(0xbf000000)
     38 #define TASK_UNMAPPED_BASE	UL(0x40000000)
     39 #endif
     40 
     41 /*
     42  * The maximum size of a 26-bit user space task.
     43  */
     44 #define TASK_SIZE_26		UL(0x04000000)
     45 
     46 /*
     47  * Page offset: 3GB
     48  */
     49 #ifndef PAGE_OFFSET
     50 #define PAGE_OFFSET		UL(0xc0000000)
     51 #endif
     52 
     53 /*
     54  * The module space lives between the addresses given by TASK_SIZE
     55  * and PAGE_OFFSET - it must be within 32MB of the kernel text.
     56  */
     57 #define MODULE_END		(PAGE_OFFSET)
     58 #define MODULE_START		(MODULE_END - 16*1048576)
     59 
     60 #if TASK_SIZE > MODULE_START
     61 #error Top of user space clashes with start of module space
     62 #endif
     63 
     64 /*
     65  * The XIP kernel gets mapped at the bottom of the module vm area.
     66  * Since we use sections to map it, this macro replaces the physical address
     67  * with its virtual address while keeping offset from the base section.
     68  */
     69 #define XIP_VIRT_ADDR(physaddr)  (MODULE_START + ((physaddr) & 0x000fffff))
     70 
     71 /*
     72  * Allow 16MB-aligned ioremap pages
     73  */
     74 #define IOREMAP_MAX_ORDER	24
     75 
     76 #else /* CONFIG_MMU */
     77 
     78 /*
     79  * The limitation of user task size can grow up to the end of free ram region.
     80  * It is difficult to define and perhaps will never meet the original meaning
     81  * of this define that was meant to.
     82  * Fortunately, there is no reference for this in noMMU mode, for now.
     83  */
     84 #ifndef TASK_SIZE
     85 #define TASK_SIZE		(CONFIG_DRAM_SIZE)
     86 #endif
     87 
     88 #ifndef TASK_UNMAPPED_BASE
     89 #define TASK_UNMAPPED_BASE	UL(0x00000000)
     90 #endif
     91 
     92 #ifndef PHYS_OFFSET
     93 #define PHYS_OFFSET 		(CONFIG_DRAM_BASE)
     94 #endif
     95 
     96 #ifndef END_MEM
     97 #define END_MEM     		(CONFIG_DRAM_BASE + CONFIG_DRAM_SIZE)
     98 #endif
     99 
    100 #ifndef PAGE_OFFSET
    101 #define PAGE_OFFSET		(PHYS_OFFSET)
    102 #endif
    103 
    104 /*
    105  * The module can be at any place in ram in nommu mode.
    106  */
    107 #define MODULE_END		(END_MEM)
    108 #define MODULE_START		(PHYS_OFFSET)
    109 
    110 #endif /* !CONFIG_MMU */
    111 
    112 /*
    113  * Size of DMA-consistent memory region.  Must be multiple of 2M,
    114  * between 2MB and 14MB inclusive.
    115  */
    116 #ifndef CONSISTENT_DMA_SIZE
    117 #define CONSISTENT_DMA_SIZE SZ_2M
    118 #endif
    119 
    120 /*
    121  * Physical vs virtual RAM address space conversion.  These are
    122  * private definitions which should NOT be used outside memory.h
    123  * files.  Use virt_to_phys/phys_to_virt/__pa/__va instead.
    124  */
    125 #ifndef __virt_to_phys
    126 #define __virt_to_phys(x)	((x) - PAGE_OFFSET + PHYS_OFFSET)
    127 #define __phys_to_virt(x)	((x) - PHYS_OFFSET + PAGE_OFFSET)
    128 #endif
    129 
    130 /*
    131  * Convert a physical address to a Page Frame Number and back
    132  */
    133 #define	__phys_to_pfn(paddr)	((paddr) >> PAGE_SHIFT)
    134 #define	__pfn_to_phys(pfn)	((pfn) << PAGE_SHIFT)
    135 
    136 #ifndef __ASSEMBLY__
    137 
    138 /*
    139  * The DMA mask corresponding to the maximum bus address allocatable
    140  * using GFP_DMA.  The default here places no restriction on DMA
    141  * allocations.  This must be the smallest DMA mask in the system,
    142  * so a successful GFP_DMA allocation will always satisfy this.
    143  */
    144 #ifndef ISA_DMA_THRESHOLD
    145 #define ISA_DMA_THRESHOLD	(0xffffffffULL)
    146 #endif
    147 
    148 #ifndef arch_adjust_zones
    149 #define arch_adjust_zones(node,size,holes) do { } while (0)
    150 #endif
    151 
    152 /*
    153  * PFNs are used to describe any physical page; this means
    154  * PFN 0 == physical address 0.
    155  *
    156  * This is the PFN of the first RAM page in the kernel
    157  * direct-mapped view.  We assume this is the first page
    158  * of RAM in the mem_map as well.
    159  */
    160 #define PHYS_PFN_OFFSET	(PHYS_OFFSET >> PAGE_SHIFT)
    161 
    162 /*
    163  * These are *only* valid on the kernel direct mapped RAM memory.
    164  * Note: Drivers should NOT use these.  They are the wrong
    165  * translation for translating DMA addresses.  Use the driver
    166  * DMA support - see dma-mapping.h.
    167  */
    168 static inline unsigned long virt_to_phys(void *x)
    169 {
    170 	return __virt_to_phys((unsigned long)(x));
    171 }
    172 
    173 static inline void *phys_to_virt(unsigned long x)
    174 {
    175 	return (void *)(__phys_to_virt((unsigned long)(x)));
    176 }
    177 
    178 /*
    179  * Drivers should NOT use these either.
    180  */
    181 #define __pa(x)			__virt_to_phys((unsigned long)(x))
    182 #define __va(x)			((void *)__phys_to_virt((unsigned long)(x)))
    183 #define pfn_to_kaddr(pfn)	__va((pfn) << PAGE_SHIFT)
    184 
    185 /*
    186  * Virtual <-> DMA view memory address translations
    187  * Again, these are *only* valid on the kernel direct mapped RAM
    188  * memory.  Use of these is *deprecated* (and that doesn't mean
    189  * use the __ prefixed forms instead.)  See dma-mapping.h.
    190  */
    191 static inline __deprecated unsigned long virt_to_bus(void *x)
    192 {
    193 	return __virt_to_bus((unsigned long)x);
    194 }
    195 
    196 static inline __deprecated void *bus_to_virt(unsigned long x)
    197 {
    198 	return (void *)__bus_to_virt(x);
    199 }
    200 
    201 /*
    202  * Conversion between a struct page and a physical address.
    203  *
    204  * Note: when converting an unknown physical address to a
    205  * struct page, the resulting pointer must be validated
    206  * using VALID_PAGE().  It must return an invalid struct page
    207  * for any physical address not corresponding to a system
    208  * RAM address.
    209  *
    210  *  page_to_pfn(page)	convert a struct page * to a PFN number
    211  *  pfn_to_page(pfn)	convert a _valid_ PFN number to struct page *
    212  *  pfn_valid(pfn)	indicates whether a PFN number is valid
    213  *
    214  *  virt_to_page(k)	convert a _valid_ virtual address to struct page *
    215  *  virt_addr_valid(k)	indicates whether a virtual address is valid
    216  */
    217 #ifndef CONFIG_DISCONTIGMEM
    218 #define ARCH_PFN_OFFSET		PHYS_PFN_OFFSET
    219 #define pfn_valid(pfn)		((pfn) >= PHYS_PFN_OFFSET && (pfn) < (PHYS_PFN_OFFSET + max_mapnr))
    220 
    221 #define virt_to_page(kaddr)	pfn_to_page(__pa(kaddr) >> PAGE_SHIFT)
    222 #define virt_addr_valid(kaddr)	((unsigned long)(kaddr) >= PAGE_OFFSET && (unsigned long)(kaddr) < (unsigned long)high_memory)
    223 
    224 #define PHYS_TO_NID(addr)	(0)
    225 
    226 #else /* CONFIG_DISCONTIGMEM */
    227 
    228 /*
    229  * This is more complex.  We have a set of mem_map arrays spread
    230  * around in memory.
    231  */
    232 #include <linux/numa.h>
    233 #define arch_pfn_to_nid(pfn)	PFN_TO_NID(pfn)
    234 #define arch_local_page_offset(pfn, nid) LOCAL_MAP_NR((pfn) << PAGE_SHIFT)
    235 
    236 #define pfn_valid(pfn)						\
    237 	({							\
    238 		unsigned int nid = PFN_TO_NID(pfn);		\
    239 		int valid = nid < MAX_NUMNODES;			\
    240 		if (valid) {					\
    241 			pg_data_t *node = NODE_DATA(nid);	\
    242 			valid = (pfn - node->node_start_pfn) <	\
    243 				node->node_spanned_pages;	\
    244 		}						\
    245 		valid;						\
    246 	})
    247 
    248 #define virt_to_page(kaddr)					\
    249 	(ADDR_TO_MAPBASE(kaddr) + LOCAL_MAP_NR(kaddr))
    250 
    251 #define virt_addr_valid(kaddr)	(KVADDR_TO_NID(kaddr) < MAX_NUMNODES)
    252 
    253 /*
    254  * Common discontigmem stuff.
    255  *  PHYS_TO_NID is used by the ARM kernel/setup.c
    256  */
    257 #define PHYS_TO_NID(addr)	PFN_TO_NID((addr) >> PAGE_SHIFT)
    258 
    259 #endif /* !CONFIG_DISCONTIGMEM */
    260 
    261 /*
    262  * For BIO.  "will die".  Kill me when bio_to_phys() and bvec_to_phys() die.
    263  */
    264 #define page_to_phys(page)	(page_to_pfn(page) << PAGE_SHIFT)
    265 
    266 /*
    267  * Optional device DMA address remapping. Do _not_ use directly!
    268  * We should really eliminate virt_to_bus() here - it's deprecated.
    269  */
    270 #ifndef __arch_page_to_dma
    271 #define page_to_dma(dev, page)		((dma_addr_t)__virt_to_bus((unsigned long)page_address(page)))
    272 #define dma_to_virt(dev, addr)		((void *)__bus_to_virt(addr))
    273 #define virt_to_dma(dev, addr)		((dma_addr_t)__virt_to_bus((unsigned long)(addr)))
    274 #else
    275 #define page_to_dma(dev, page)		(__arch_page_to_dma(dev, page))
    276 #define dma_to_virt(dev, addr)		(__arch_dma_to_virt(dev, addr))
    277 #define virt_to_dma(dev, addr)		(__arch_virt_to_dma(dev, addr))
    278 #endif
    279 
    280 /*
    281  * Optional coherency support.  Currently used only by selected
    282  * Intel XSC3-based systems.
    283  */
    284 #ifndef arch_is_coherent
    285 #define arch_is_coherent()		0
    286 #endif
    287 
    288 #endif
    289 
    290 #include <asm-generic/memory_model.h>
    291 
    292 #endif
    293