page.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:5k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /* $Id: page.h,v 1.55 2000/10/30 21:01:41 davem Exp $
  2.  * page.h:  Various defines and such for MMU operations on the Sparc for
  3.  *          the Linux kernel.
  4.  *
  5.  * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
  6.  */
  7. #ifndef _SPARC_PAGE_H
  8. #define _SPARC_PAGE_H
  9. #include <linux/config.h>
  10. #ifdef CONFIG_SUN4
  11. #define PAGE_SHIFT   13
  12. #else
  13. #define PAGE_SHIFT   12
  14. #endif
  15. #ifndef __ASSEMBLY__
  16. /* I have my suspicions... -DaveM */
  17. #define PAGE_SIZE    (1UL << PAGE_SHIFT)
  18. #else
  19. #define PAGE_SIZE    (1 << PAGE_SHIFT)
  20. #endif
  21. #define PAGE_MASK    (~(PAGE_SIZE-1))
  22. #ifdef __KERNEL__
  23. #include <asm/head.h>       /* for KERNBASE */
  24. #include <asm/btfixup.h>
  25. /* This is always 2048*sizeof(long), doesn't change with PAGE_SIZE */
  26. #define TASK_UNION_SIZE 8192
  27. #ifndef __ASSEMBLY__
  28. /*
  29.  * XXX I am hitting compiler bugs with __builtin_trap. This has
  30.  * hit me before and rusty was blaming his netfilter bugs on
  31.  * this so lets disable it. - Anton
  32.  */
  33. #if 0
  34. /* We need the mb()'s so we don't trigger a compiler bug - Anton */
  35. #define BUG() do { 
  36. mb(); 
  37. __builtin_trap(); 
  38. mb(); 
  39. } while(0)
  40. #else
  41. #define BUG() do { 
  42. printk("kernel BUG at %s:%d!n", __FILE__, __LINE__); *(int *)0=0; 
  43. } while (0)
  44. #endif
  45. #define PAGE_BUG(page) BUG()
  46. #define clear_page(page)  memset((void *)(page), 0, PAGE_SIZE)
  47. #define copy_page(to,from)  memcpy((void *)(to), (void *)(from), PAGE_SIZE)
  48. #define clear_user_page(page, vaddr) clear_page(page)
  49. #define copy_user_page(to, from, vaddr) copy_page(to, from)
  50. /* The following structure is used to hold the physical
  51.  * memory configuration of the machine.  This is filled in
  52.  * probe_memory() and is later used by mem_init() to set up
  53.  * mem_map[].  We statically allocate SPARC_PHYS_BANKS of
  54.  * these structs, this is arbitrary.  The entry after the
  55.  * last valid one has num_bytes==0.
  56.  */
  57. struct sparc_phys_banks {
  58.   unsigned long base_addr;
  59.   unsigned long num_bytes;
  60. };
  61. #define SPARC_PHYS_BANKS 32
  62. extern struct sparc_phys_banks sp_banks[SPARC_PHYS_BANKS];
  63. /* Cache alias structure.  Entry is valid if context != -1. */
  64. struct cache_palias {
  65. unsigned long vaddr;
  66. int context;
  67. };
  68. extern struct cache_palias *sparc_aliases;
  69. /* passing structs on the Sparc slow us down tremendously... */
  70. /* #define STRICT_MM_TYPECHECKS */
  71. #ifdef STRICT_MM_TYPECHECKS
  72. /*
  73.  * These are used to make use of C type-checking..
  74.  */
  75. typedef struct { unsigned long pte; } pte_t;
  76. typedef struct { unsigned long iopte; } iopte_t;
  77. typedef struct { unsigned long pmd; } pmd_t;
  78. typedef struct { unsigned long pgd; } pgd_t;
  79. typedef struct { unsigned long ctxd; } ctxd_t;
  80. typedef struct { unsigned long pgprot; } pgprot_t;
  81. typedef struct { unsigned long iopgprot; } iopgprot_t;
  82. #define pte_val(x) ((x).pte)
  83. #define iopte_val(x) ((x).iopte)
  84. #define pmd_val(x)      ((x).pmd)
  85. #define pgd_val(x) ((x).pgd)
  86. #define ctxd_val(x) ((x).ctxd)
  87. #define pgprot_val(x) ((x).pgprot)
  88. #define iopgprot_val(x) ((x).iopgprot)
  89. #define __pte(x) ((pte_t) { (x) } )
  90. #define __iopte(x) ((iopte_t) { (x) } )
  91. #define __pmd(x)        ((pmd_t) { (x) } )
  92. #define __pgd(x) ((pgd_t) { (x) } )
  93. #define __ctxd(x) ((ctxd_t) { (x) } )
  94. #define __pgprot(x) ((pgprot_t) { (x) } )
  95. #define __iopgprot(x) ((iopgprot_t) { (x) } )
  96. #else
  97. /*
  98.  * .. while these make it easier on the compiler
  99.  */
  100. typedef unsigned long pte_t;
  101. typedef unsigned long iopte_t;
  102. typedef unsigned long pmd_t;
  103. typedef unsigned long pgd_t;
  104. typedef unsigned long ctxd_t;
  105. typedef unsigned long pgprot_t;
  106. typedef unsigned long iopgprot_t;
  107. #define pte_val(x) (x)
  108. #define iopte_val(x) (x)
  109. #define pmd_val(x)      (x)
  110. #define pgd_val(x) (x)
  111. #define ctxd_val(x) (x)
  112. #define pgprot_val(x) (x)
  113. #define iopgprot_val(x) (x)
  114. #define __pte(x) (x)
  115. #define __iopte(x) (x)
  116. #define __pmd(x)        (x)
  117. #define __pgd(x) (x)
  118. #define __ctxd(x) (x)
  119. #define __pgprot(x) (x)
  120. #define __iopgprot(x) (x)
  121. #endif
  122. extern unsigned long sparc_unmapped_base;
  123. BTFIXUPDEF_SETHI(sparc_unmapped_base)
  124. #define TASK_UNMAPPED_BASE BTFIXUP_SETHI(sparc_unmapped_base)
  125. /* Pure 2^n version of get_order */
  126. extern __inline__ int get_order(unsigned long size)
  127. {
  128. int order;
  129. size = (size-1) >> (PAGE_SHIFT-1);
  130. order = -1;
  131. do {
  132. size >>= 1;
  133. order++;
  134. } while (size);
  135. return order;
  136. }
  137. #else /* !(__ASSEMBLY__) */
  138. #define __pgprot(x) (x)
  139. #endif /* !(__ASSEMBLY__) */
  140. /* to align the pointer to the (next) page boundary */
  141. #define PAGE_ALIGN(addr)  (((addr)+PAGE_SIZE-1)&PAGE_MASK)
  142. #define PAGE_OFFSET 0xf0000000
  143. #define __pa(x)                 ((unsigned long)(x) - PAGE_OFFSET)
  144. #define __va(x)                 ((void *)((unsigned long) (x) + PAGE_OFFSET))
  145. #define virt_to_page(kaddr) (mem_map + (__pa(kaddr) >> PAGE_SHIFT))
  146. #define VALID_PAGE(page) ((page - mem_map) < max_mapnr)
  147. #endif /* __KERNEL__ */
  148. #endif /* _SPARC_PAGE_H */