linux-bk/include/asm-arm/memory.h
<<
>>
Prefs
   1/*
   2 *  linux/include/asm-arm/memory.h
   3 *
   4 *  Copyright (C) 2000-2002 Russell King
   5 *
   6 * This program is free software; you can redistribute it and/or modify
   7 * it under the terms of the GNU General Public License version 2 as
   8 * published by the Free Software Foundation.
   9 *
  10 *  Note: this file should not be included by non-asm/.h files
  11 */
  12#ifndef __ASM_ARM_MEMORY_H
  13#define __ASM_ARM_MEMORY_H
  14
  15#include <linux/config.h>
  16#include <asm/arch/memory.h>
  17
  18#ifndef TASK_SIZE
  19/*
  20 * TASK_SIZE - the maximum size of a user space task.
  21 * TASK_UNMAPPED_BASE - the lower boundary of the mmap VM area
  22 */
  23#define TASK_SIZE               (0xbf000000UL)
  24#define TASK_UNMAPPED_BASE      (0x40000000UL)
  25#endif
  26
  27/*
  28 * The maximum size of a 26-bit user space task.
  29 */
  30#define TASK_SIZE_26            (0x04000000UL)
  31
  32/*
  33 * Page offset: 3GB
  34 */
  35#ifndef PAGE_OFFSET
  36#define PAGE_OFFSET             (0xc0000000UL)
  37#endif
  38
  39/*
  40 * Physical vs virtual RAM address space conversion.  These are
  41 * private definitions which should NOT be used outside memory.h
  42 * files.  Use virt_to_phys/phys_to_virt/__pa/__va instead.
  43 */
  44#ifndef __virt_to_phys
  45#define __virt_to_phys(x)       ((x) - PAGE_OFFSET + PHYS_OFFSET)
  46#define __phys_to_virt(x)       ((x) - PHYS_OFFSET + PAGE_OFFSET)
  47#endif
  48
  49/*
  50 * The module space lives between the addresses given by TASK_SIZE
  51 * and PAGE_OFFSET - it must be within 32MB of the kernel text.
  52 */
  53#define MODULE_END      (PAGE_OFFSET)
  54#define MODULE_START    (MODULE_END - 16*1048576)
  55
  56#if TASK_SIZE > MODULE_START
  57#error Top of user space clashes with start of module space
  58#endif
  59
  60#ifndef __ASSEMBLY__
  61
  62/*
  63 * The DMA mask corresponding to the maximum bus address allocatable
  64 * using GFP_DMA.  The default here places no restriction on DMA
  65 * allocations.  This must be the smallest DMA mask in the system,
  66 * so a successful GFP_DMA allocation will always satisfy this.
  67 */
  68#ifndef ISA_DMA_THRESHOLD
  69#define ISA_DMA_THRESHOLD       (0xffffffffULL)
  70#endif
  71
  72#ifndef arch_adjust_zones
  73#define arch_adjust_zones(node,size,holes) do { } while (0)
  74#endif
  75
  76/*
  77 * PFNs are used to describe any physical page; this means
  78 * PFN 0 == physical address 0.
  79 *
  80 * This is the PFN of the first RAM page in the kernel
  81 * direct-mapped view.  We assume this is the first page
  82 * of RAM in the mem_map as well.
  83 */
  84#define PHYS_PFN_OFFSET (PHYS_OFFSET >> PAGE_SHIFT)
  85
  86/*
  87 * These are *only* valid on the kernel direct mapped RAM memory.
  88 * Note: Drivers should NOT use these.  They are the wrong
  89 * translation for translating DMA addresses.  Use the driver
  90 * DMA support - see dma-mapping.h.
  91 */
  92static inline unsigned long virt_to_phys(void *x)
  93{
  94        return __virt_to_phys((unsigned long)(x));
  95}
  96
  97static inline void *phys_to_virt(unsigned long x)
  98{
  99        return (void *)(__phys_to_virt((unsigned long)(x)));
 100}
 101
 102/*
 103 * Drivers should NOT use these either.
 104 */
 105#define __pa(x)                 __virt_to_phys((unsigned long)(x))
 106#define __va(x)                 ((void *)__phys_to_virt((unsigned long)(x)))
 107
 108/*
 109 * Virtual <-> DMA view memory address translations
 110 * Again, these are *only* valid on the kernel direct mapped RAM
 111 * memory.  Use of these is *deprecated*.
 112 */
 113#define virt_to_bus(x)          (__virt_to_bus((unsigned long)(x)))
 114#define bus_to_virt(x)          ((void *)(__bus_to_virt((unsigned long)(x))))
 115
 116/*
 117 * Conversion between a struct page and a physical address.
 118 *
 119 * Note: when converting an unknown physical address to a
 120 * struct page, the resulting pointer must be validated
 121 * using VALID_PAGE().  It must return an invalid struct page
 122 * for any physical address not corresponding to a system
 123 * RAM address.
 124 *
 125 *  page_to_pfn(page)   convert a struct page * to a PFN number
 126 *  pfn_to_page(pfn)    convert a _valid_ PFN number to struct page *
 127 *  pfn_valid(pfn)      indicates whether a PFN number is valid
 128 *
 129 *  virt_to_page(k)     convert a _valid_ virtual address to struct page *
 130 *  virt_addr_valid(k)  indicates whether a virtual address is valid
 131 */
 132#ifndef CONFIG_DISCONTIGMEM
 133
 134#define page_to_pfn(page)       (((page) - mem_map) + PHYS_PFN_OFFSET)
 135#define pfn_to_page(pfn)        ((mem_map + (pfn)) - PHYS_PFN_OFFSET)
 136#define pfn_valid(pfn)          ((pfn) >= PHYS_PFN_OFFSET && (pfn) < (PHYS_PFN_OFFSET + max_mapnr))
 137
 138#define virt_to_page(kaddr)     (pfn_to_page(__pa(kaddr) >> PAGE_SHIFT))
 139#define virt_addr_valid(kaddr)  ((unsigned long)(kaddr) >= PAGE_OFFSET && (unsigned long)(kaddr) < (unsigned long)high_memory)
 140
 141#define PHYS_TO_NID(addr)       (0)
 142
 143#else /* CONFIG_DISCONTIGMEM */
 144
 145/*
 146 * This is more complex.  We have a set of mem_map arrays spread
 147 * around in memory.
 148 */
 149#include <linux/numa.h>
 150
 151#define page_to_pfn(page)                                       \
 152        (( (page) - page_zone(page)->zone_mem_map)              \
 153          + page_zone(page)->zone_start_pfn)
 154#define pfn_to_page(pfn)                                        \
 155        (PFN_TO_MAPBASE(pfn) + LOCAL_MAP_NR((pfn) << PAGE_SHIFT))
 156#define pfn_valid(pfn)          (PFN_TO_NID(pfn) < MAX_NUMNODES)
 157
 158#define virt_to_page(kaddr)                                     \
 159        (ADDR_TO_MAPBASE(kaddr) + LOCAL_MAP_NR(kaddr))
 160#define virt_addr_valid(kaddr)  (KVADDR_TO_NID(kaddr) < MAX_NUMNODES)
 161
 162/*
 163 * Common discontigmem stuff.
 164 *  PHYS_TO_NID is used by the ARM kernel/setup.c
 165 */
 166#define PHYS_TO_NID(addr)       PFN_TO_NID((addr) >> PAGE_SHIFT)
 167
 168#endif /* !CONFIG_DISCONTIGMEM */
 169
 170/*
 171 * For BIO.  "will die".  Kill me when bio_to_phys() and bvec_to_phys() die.
 172 */
 173#define page_to_phys(page)      (page_to_pfn(page) << PAGE_SHIFT)
 174
 175/*
 176 * Optional device DMA address remapping. Do _not_ use directly!
 177 * We should really eliminate virt_to_bus() here - it's deprecated.
 178 */
 179#ifndef __arch_page_to_dma
 180#define page_to_dma(dev, page)          ((dma_addr_t)__virt_to_bus(page_address(page)))
 181#define dma_to_virt(dev, addr)          (__bus_to_virt(addr))
 182#define virt_to_dma(dev, addr)          (__virt_to_bus(addr))
 183#else
 184#define page_to_dma(dev, page)          (__arch_page_to_dma(dev, page))
 185#define dma_to_virt(dev, addr)          (__arch_dma_to_virt(dev, addr))
 186#define virt_to_dma(dev, addr)          (__arch_virt_to_dma(dev, addr))
 187#endif
 188
 189#endif
 190
 191#endif
 192
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.