page.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:4k
源码类别:

Linux/Unix编程

开发平台:

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