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

嵌入式Linux

开发平台:

Unix_Linux

  1. /* $Id: page.h,v 1.38 2001/11/30 01:04:10 davem Exp $ */
  2. #ifndef _SPARC64_PAGE_H
  3. #define _SPARC64_PAGE_H
  4. #define PAGE_SHIFT   13
  5. #ifndef __ASSEMBLY__
  6. /* I have my suspicions... -DaveM */
  7. #define PAGE_SIZE    (1UL << PAGE_SHIFT)
  8. #else
  9. #define PAGE_SIZE    (1 << PAGE_SHIFT)
  10. #endif
  11. #define PAGE_MASK    (~(PAGE_SIZE-1))
  12. #ifdef __KERNEL__
  13. #ifndef __ASSEMBLY__
  14. #ifdef CONFIG_DEBUG_BUGVERBOSE
  15. extern void do_BUG(const char *file, int line);
  16. #define BUG() do {
  17. do_BUG(__FILE__, __LINE__);
  18. __builtin_trap();
  19. } while (0)
  20. #else
  21. #define BUG() __builtin_trap()
  22. #endif
  23. #define PAGE_BUG(page) BUG()
  24. extern void _clear_page(void *page);
  25. #define clear_page(X) _clear_page((void *)(X))
  26. extern void clear_user_page(void *page, unsigned long vaddr);
  27. extern void copy_user_page(void *to, void *from, unsigned long vaddr);
  28. /* GROSS, defining this makes gcc pass these types as aggregates,
  29.  * and thus on the stack, turn this crap off... -DaveM
  30.  */
  31. /* #define STRICT_MM_TYPECHECKS */
  32. #ifdef STRICT_MM_TYPECHECKS
  33. /* These are used to make use of C type-checking.. */
  34. typedef struct { unsigned long pte; } pte_t;
  35. typedef struct { unsigned long iopte; } iopte_t;
  36. typedef struct { unsigned int pmd; } pmd_t;
  37. typedef struct { unsigned int pgd; } pgd_t;
  38. typedef struct { unsigned long ctxd; } ctxd_t;
  39. typedef struct { unsigned long pgprot; } pgprot_t;
  40. typedef struct { unsigned long iopgprot; } iopgprot_t;
  41. #define pte_val(x) ((x).pte)
  42. #define iopte_val(x) ((x).iopte)
  43. #define pmd_val(x)      ((unsigned long)(x).pmd)
  44. #define pgd_val(x) ((unsigned long)(x).pgd)
  45. #define ctxd_val(x) ((x).ctxd)
  46. #define pgprot_val(x) ((x).pgprot)
  47. #define iopgprot_val(x) ((x).iopgprot)
  48. #define __pte(x) ((pte_t) { (x) } )
  49. #define __iopte(x) ((iopte_t) { (x) } )
  50. #define __pmd(x)        ((pmd_t) { (x) } )
  51. #define __pgd(x) ((pgd_t) { (x) } )
  52. #define __ctxd(x) ((ctxd_t) { (x) } )
  53. #define __pgprot(x) ((pgprot_t) { (x) } )
  54. #define __iopgprot(x) ((iopgprot_t) { (x) } )
  55. #else
  56. /* .. while these make it easier on the compiler */
  57. typedef unsigned long pte_t;
  58. typedef unsigned long iopte_t;
  59. typedef unsigned int pmd_t;
  60. typedef unsigned int pgd_t;
  61. typedef unsigned long ctxd_t;
  62. typedef unsigned long pgprot_t;
  63. typedef unsigned long iopgprot_t;
  64. #define pte_val(x) (x)
  65. #define iopte_val(x) (x)
  66. #define pmd_val(x)      ((unsigned long)(x))
  67. #define pgd_val(x) ((unsigned long)(x))
  68. #define ctxd_val(x) (x)
  69. #define pgprot_val(x) (x)
  70. #define iopgprot_val(x) (x)
  71. #define __pte(x) (x)
  72. #define __iopte(x) (x)
  73. #define __pmd(x)        (x)
  74. #define __pgd(x) (x)
  75. #define __ctxd(x) (x)
  76. #define __pgprot(x) (x)
  77. #define __iopgprot(x) (x)
  78. #endif /* (STRICT_MM_TYPECHECKS) */
  79. #define TASK_UNMAPPED_BASE ((current->thread.flags & SPARC_FLAG_32BIT) ? 
  80.  (0x0000000070000000UL) : (PAGE_OFFSET))
  81. #endif /* !(__ASSEMBLY__) */
  82. /* to align the pointer to the (next) page boundary */
  83. #define PAGE_ALIGN(addr) (((addr)+PAGE_SIZE-1)&PAGE_MASK)
  84. #ifndef __ASSEMBLY__
  85. /* Do prdele, look what happens to be in %g4... */
  86. register unsigned long PAGE_OFFSET asm("g4");
  87. #else
  88. #define PAGE_OFFSET 0xFFFFF80000000000
  89. #endif
  90. #define __pa(x) ((unsigned long)(x) - PAGE_OFFSET)
  91. #define __va(x) ((void *)((unsigned long) (x) + PAGE_OFFSET))
  92. #define virt_to_page(kaddr) (mem_map + ((__pa(kaddr)-phys_base) >> PAGE_SHIFT))
  93. #define VALID_PAGE(page) ((page - mem_map) < max_mapnr)
  94. #define virt_to_phys __pa
  95. #define phys_to_virt __va
  96. #ifndef __ASSEMBLY__
  97. /* The following structure is used to hold the physical
  98.  * memory configuration of the machine.  This is filled in
  99.  * probe_memory() and is later used by mem_init() to set up
  100.  * mem_map[].  We statically allocate SPARC_PHYS_BANKS of
  101.  * these structs, this is arbitrary.  The entry after the
  102.  * last valid one has num_bytes==0.
  103.  */
  104. struct sparc_phys_banks {
  105. unsigned long base_addr;
  106. unsigned long num_bytes;
  107. };
  108. #define SPARC_PHYS_BANKS 32
  109. extern struct sparc_phys_banks sp_banks[SPARC_PHYS_BANKS];
  110. /* Pure 2^n version of get_order */
  111. extern __inline__ int get_order(unsigned long size)
  112. {
  113. int order;
  114. size = (size-1) >> (PAGE_SHIFT-1);
  115. order = -1;
  116. do {
  117. size >>= 1;
  118. order++;
  119. } while (size);
  120. return order;
  121. }
  122. #endif /* !(__ASSEMBLY__) */
  123. #endif /* !(__KERNEL__) */
  124. #endif /* !(_SPARC64_PAGE_H) */