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

Linux/Unix编程

开发平台:

Unix_Linux

  1. #ifndef __ASM_SH_PAGE_H
  2. #define __ASM_SH_PAGE_H
  3. /*
  4.  * Copyright (C) 1999  Niibe Yutaka
  5.  */
  6. /*
  7.    [ P0/U0 (virtual) ] 0x00000000     <------ User space
  8.    [ P1 (fixed)   cached ] 0x80000000     <------ Kernel space
  9.    [ P2 (fixed)  non-cachable] 0xA0000000     <------ Physical access
  10.    [ P3 (virtual) cached] 0xC0000000     <------ vmalloced area
  11.    [ P4 control   ] 0xE0000000
  12.  */
  13. #include <linux/config.h>
  14. /* PAGE_SHIFT determines the page size */
  15. #define PAGE_SHIFT 12
  16. #define PAGE_SIZE (1UL << PAGE_SHIFT)
  17. #define PAGE_MASK (~(PAGE_SIZE-1))
  18. #define PTE_MASK PAGE_MASK
  19. #ifdef __KERNEL__
  20. #ifndef __ASSEMBLY__
  21. extern void clear_page(void *to);
  22. extern void copy_page(void *to, void *from);
  23. #if defined(__sh3__)
  24. #define clear_user_page(page, vaddr) clear_page(page)
  25. #define copy_user_page(to, from, vaddr) copy_page(to, from)
  26. #elif defined(__SH4__)
  27. extern void clear_user_page(void *to, unsigned long address);
  28. extern void copy_user_page(void *to, void *from, unsigned long address);
  29. extern void __clear_user_page(void *to, void *orig_to);
  30. extern void __copy_user_page(void *to, void *from, void *orig_to);
  31. #endif
  32. /*
  33.  * These are used to make use of C type-checking..
  34.  */
  35. typedef struct { unsigned long pte; } pte_t;
  36. typedef struct { unsigned long pmd; } pmd_t;
  37. typedef struct { unsigned long pgd; } pgd_t;
  38. typedef struct { unsigned long pgprot; } pgprot_t;
  39. #define pte_val(x) ((x).pte)
  40. #define pmd_val(x) ((x).pmd)
  41. #define pgd_val(x) ((x).pgd)
  42. #define pgprot_val(x) ((x).pgprot)
  43. #define __pte(x) ((pte_t) { (x) } )
  44. #define __pmd(x) ((pmd_t) { (x) } )
  45. #define __pgd(x) ((pgd_t) { (x) } )
  46. #define __pgprot(x) ((pgprot_t) { (x) } )
  47. #endif /* !__ASSEMBLY__ */
  48. /* to align the pointer to the (next) page boundary */
  49. #define PAGE_ALIGN(addr) (((addr)+PAGE_SIZE-1)&PAGE_MASK)
  50. /*
  51.  * IF YOU CHANGE THIS, PLEASE ALSO CHANGE
  52.  *
  53.  * arch/sh/vmlinux.lds.S
  54.  *
  55.  * which has the same constant encoded..
  56.  */
  57. #define __MEMORY_START CONFIG_MEMORY_START
  58. #define __MEMORY_SIZE CONFIG_MEMORY_SIZE
  59. #ifdef CONFIG_DISCONTIGMEM
  60. /* Just for HP690, for now.. */
  61. #define __MEMORY_START_2ND (__MEMORY_START+0x02000000)
  62. #define __MEMORY_SIZE_2ND 0x001000000 /* 16MB */
  63. #endif
  64. #define PAGE_OFFSET (0x80000000UL)
  65. #define __pa(x) ((unsigned long)(x)-PAGE_OFFSET)
  66. #define __va(x) ((void *)((unsigned long)(x)+PAGE_OFFSET))
  67. #ifndef CONFIG_DISCONTIGMEM
  68. #define phys_to_page(phys) (mem_map + (((phys)-__MEMORY_START) >> PAGE_SHIFT))
  69. #define VALID_PAGE(page) ((page - mem_map) < max_mapnr)
  70. #define page_to_phys(page) (((page - mem_map) << PAGE_SHIFT) + __MEMORY_START)
  71. #endif
  72. #define virt_to_page(kaddr) phys_to_page(__pa(kaddr))
  73. #ifndef __ASSEMBLY__
  74. /*
  75.  * Tell the user there is some problem.
  76.  */
  77. #define BUG() do { 
  78. printk("kernel BUG at %s:%d!n", __FILE__, __LINE__); 
  79. asm volatile("nop"); 
  80. } while (0)
  81. #define PAGE_BUG(page) do { 
  82. BUG(); 
  83. } while (0)
  84. /* Pure 2^n version of get_order */
  85. static __inline__ int get_order(unsigned long size)
  86. {
  87. int order;
  88. size = (size-1) >> (PAGE_SHIFT-1);
  89. order = -1;
  90. do {
  91. size >>= 1;
  92. order++;
  93. } while (size);
  94. return order;
  95. }
  96. #endif
  97. #endif /* __KERNEL__ */
  98. #endif /* __ASM_SH_PAGE_H */