home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / asm-mips / highmem.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  2.8 KB  |  105 lines

  1. /*
  2.  * highmem.h: virtual kernel memory mappings for high memory
  3.  *
  4.  * Used in CONFIG_HIGHMEM systems for memory pages which
  5.  * are not addressable by direct kernel virtual addresses.
  6.  *
  7.  * Copyright (C) 1999 Gerhard Wichert, Siemens AG
  8.  *              Gerhard.Wichert@pdb.siemens.de
  9.  *
  10.  *
  11.  * Redesigned the x86 32-bit VM architecture to deal with
  12.  * up to 16 Terabyte physical memory. With current x86 CPUs
  13.  * we now support up to 64 Gigabytes physical RAM.
  14.  *
  15.  * Copyright (C) 1999 Ingo Molnar <mingo@redhat.com>
  16.  */
  17. #ifndef _ASM_HIGHMEM_H
  18. #define _ASM_HIGHMEM_H
  19.  
  20. #ifdef __KERNEL__
  21.  
  22. #include <linux/init.h>
  23. #include <linux/interrupt.h>
  24. #include <asm/kmap_types.h>
  25.  
  26. /* undef for production */
  27. #define HIGHMEM_DEBUG 1
  28.  
  29. /* declarations for highmem.c */
  30. extern unsigned long highstart_pfn, highend_pfn;
  31.  
  32. extern pte_t *kmap_pte;
  33. extern pgprot_t kmap_prot;
  34. extern pte_t *pkmap_page_table;
  35.  
  36. /*
  37.  * Right now we initialize only a single pte table. It can be extended
  38.  * easily, subsequent pte tables have to be allocated in one physical
  39.  * chunk of RAM.
  40.  */
  41. #define PKMAP_BASE (0xfe000000UL)
  42. #define LAST_PKMAP 1024
  43. #define LAST_PKMAP_MASK (LAST_PKMAP-1)
  44. #define PKMAP_NR(virt)  ((virt-PKMAP_BASE) >> PAGE_SHIFT)
  45. #define PKMAP_ADDR(nr)  (PKMAP_BASE + ((nr) << PAGE_SHIFT))
  46.  
  47. extern void * kmap_high(struct page *page);
  48. extern void kunmap_high(struct page *page);
  49.  
  50. /*
  51.  * CONFIG_LIMITED_DMA is for systems with DMA limitations such as Momentum's
  52.  * Jaguar ATX.  This option exploits the highmem code in the kernel so is
  53.  * always enabled together with CONFIG_HIGHMEM but at this time doesn't
  54.  * actually add highmem functionality.
  55.  */
  56.  
  57. #ifdef CONFIG_LIMITED_DMA
  58.  
  59. /*
  60.  * These are the default functions for the no-highmem case from
  61.  * <linux/highmem.h>
  62.  */
  63. static inline void *kmap(struct page *page)
  64. {
  65.     might_sleep();
  66.     return page_address(page);
  67. }
  68.  
  69. #define kunmap(page) do { (void) (page); } while (0)
  70.  
  71. static inline void *kmap_atomic(struct page *page, enum km_type type)
  72. {
  73.     return page_address(page);
  74. }
  75.  
  76. static inline void kunmap_atomic(void *kvaddr, enum km_type type) { }
  77. #define kmap_atomic_pfn(pfn, idx)    page_address(pfn_to_page(pfn))
  78.  
  79. #define kmap_atomic_to_page(ptr) virt_to_page(ptr)
  80.  
  81. #define flush_cache_kmaps()    do { } while (0)
  82.  
  83. #else /* LIMITED_DMA */
  84.  
  85. extern void *__kmap(struct page *page);
  86. extern void __kunmap(struct page *page);
  87. extern void *__kmap_atomic(struct page *page, enum km_type type);
  88. extern void __kunmap_atomic(void *kvaddr, enum km_type type);
  89. extern void *kmap_atomic_pfn(unsigned long pfn, enum km_type type);
  90. extern struct page *__kmap_atomic_to_page(void *ptr);
  91.  
  92. #define kmap            __kmap
  93. #define kunmap            __kunmap
  94. #define kmap_atomic        __kmap_atomic
  95. #define kunmap_atomic        __kunmap_atomic
  96. #define kmap_atomic_to_page    __kmap_atomic_to_page
  97.  
  98. #define flush_cache_kmaps()    flush_cache_all()
  99.  
  100. #endif /* LIMITED_DMA */
  101.  
  102. #endif /* __KERNEL__ */
  103.  
  104. #endif /* _ASM_HIGHMEM_H */
  105.