linux-bk/include/asm-i386/page.h
<<
>>
Prefs
   1#ifndef _I386_PAGE_H
   2#define _I386_PAGE_H
   3
   4/* PAGE_SHIFT determines the page size */
   5#define PAGE_SHIFT      12
   6#define PAGE_SIZE       (1UL << PAGE_SHIFT)
   7#define PAGE_MASK       (~(PAGE_SIZE-1))
   8
   9#define LARGE_PAGE_MASK (~(LARGE_PAGE_SIZE-1))
  10#define LARGE_PAGE_SIZE (1UL << PMD_SHIFT)
  11
  12#ifdef __KERNEL__
  13#ifndef __ASSEMBLY__
  14
  15#include <linux/config.h>
  16
  17#ifdef CONFIG_X86_USE_3DNOW
  18
  19#include <asm/mmx.h>
  20
  21#define clear_page(page)        mmx_clear_page((void *)(page))
  22#define copy_page(to,from)      mmx_copy_page(to,from)
  23
  24#else
  25
  26/*
  27 *      On older X86 processors it's not a win to use MMX here it seems.
  28 *      Maybe the K6-III ?
  29 */
  30 
  31#define clear_page(page)        memset((void *)(page), 0, PAGE_SIZE)
  32#define copy_page(to,from)      memcpy((void *)(to), (void *)(from), PAGE_SIZE)
  33
  34#endif
  35
  36#define clear_user_page(page, vaddr, pg)        clear_page(page)
  37#define copy_user_page(to, from, vaddr, pg)     copy_page(to, from)
  38
  39/*
  40 * These are used to make use of C type-checking..
  41 */
  42#ifdef CONFIG_X86_PAE
  43extern unsigned long long __supported_pte_mask;
  44extern int nx_enabled;
  45typedef struct { unsigned long pte_low, pte_high; } pte_t;
  46typedef struct { unsigned long long pmd; } pmd_t;
  47typedef struct { unsigned long long pgd; } pgd_t;
  48typedef struct { unsigned long long pgprot; } pgprot_t;
  49#define pte_val(x)      ((x).pte_low | ((unsigned long long)(x).pte_high << 32))
  50#define HPAGE_SHIFT     21
  51#else
  52#define nx_enabled 0
  53typedef struct { unsigned long pte_low; } pte_t;
  54typedef struct { unsigned long pmd; } pmd_t;
  55typedef struct { unsigned long pgd; } pgd_t;
  56typedef struct { unsigned long pgprot; } pgprot_t;
  57#define boot_pte_t pte_t /* or would you rather have a typedef */
  58#define pte_val(x)      ((x).pte_low)
  59#define HPAGE_SHIFT     22
  60#endif
  61#define PTE_MASK        PAGE_MASK
  62
  63#ifdef CONFIG_HUGETLB_PAGE
  64#define HPAGE_SIZE      ((1UL) << HPAGE_SHIFT)
  65#define HPAGE_MASK      (~(HPAGE_SIZE - 1))
  66#define HUGETLB_PAGE_ORDER      (HPAGE_SHIFT - PAGE_SHIFT)
  67#endif
  68
  69
  70#define pmd_val(x)      ((x).pmd)
  71#define pgd_val(x)      ((x).pgd)
  72#define pgprot_val(x)   ((x).pgprot)
  73
  74#define __pte(x) ((pte_t) { (x) } )
  75#define __pmd(x) ((pmd_t) { (x) } )
  76#define __pgd(x) ((pgd_t) { (x) } )
  77#define __pgprot(x)     ((pgprot_t) { (x) } )
  78
  79#endif /* !__ASSEMBLY__ */
  80
  81/* to align the pointer to the (next) page boundary */
  82#define PAGE_ALIGN(addr)        (((addr)+PAGE_SIZE-1)&PAGE_MASK)
  83
  84/*
  85 * This handles the memory map.. We could make this a config
  86 * option, but too many people screw it up, and too few need
  87 * it.
  88 *
  89 * A __PAGE_OFFSET of 0xC0000000 means that the kernel has
  90 * a virtual address space of one gigabyte, which limits the
  91 * amount of physical memory you can use to about 950MB. 
  92 *
  93 * If you want more physical memory than this then see the CONFIG_HIGHMEM4G
  94 * and CONFIG_HIGHMEM64G options in the kernel configuration.
  95 */
  96
  97/*
  98 * This much address space is reserved for vmalloc() and iomap()
  99 * as well as fixmap mappings.
 100 */
 101#define __VMALLOC_RESERVE       (128 << 20)
 102
 103#ifndef __ASSEMBLY__
 104
 105/* Pure 2^n version of get_order */
 106static __inline__ int get_order(unsigned long size)
 107{
 108        int order;
 109
 110        size = (size-1) >> (PAGE_SHIFT-1);
 111        order = -1;
 112        do {
 113                size >>= 1;
 114                order++;
 115        } while (size);
 116        return order;
 117}
 118
 119#endif /* __ASSEMBLY__ */
 120
 121#ifdef __ASSEMBLY__
 122#define __PAGE_OFFSET           (0xC0000000)
 123#else
 124#define __PAGE_OFFSET           (0xC0000000UL)
 125#endif
 126
 127
 128#define PAGE_OFFSET             ((unsigned long)__PAGE_OFFSET)
 129#define VMALLOC_RESERVE         ((unsigned long)__VMALLOC_RESERVE)
 130#define MAXMEM                  (-__PAGE_OFFSET-__VMALLOC_RESERVE)
 131#define __pa(x)                 ((unsigned long)(x)-PAGE_OFFSET)
 132#define __va(x)                 ((void *)((unsigned long)(x)+PAGE_OFFSET))
 133#define pfn_to_kaddr(pfn)      __va((pfn) << PAGE_SHIFT)
 134#ifndef CONFIG_DISCONTIGMEM
 135#define pfn_to_page(pfn)        (mem_map + (pfn))
 136#define page_to_pfn(page)       ((unsigned long)((page) - mem_map))
 137#define pfn_valid(pfn)          ((pfn) < max_mapnr)
 138#endif /* !CONFIG_DISCONTIGMEM */
 139#define virt_to_page(kaddr)     pfn_to_page(__pa(kaddr) >> PAGE_SHIFT)
 140
 141#define virt_addr_valid(kaddr)  pfn_valid(__pa(kaddr) >> PAGE_SHIFT)
 142
 143#define VM_DATA_DEFAULT_FLAGS \
 144        (VM_READ | VM_WRITE | \
 145        ((current->personality & READ_IMPLIES_EXEC) ? VM_EXEC : 0 ) | \
 146                 VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)
 147
 148#endif /* __KERNEL__ */
 149
 150#endif /* _I386_PAGE_H */
 151
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.