~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Linux Cross Reference
Linux/include/asm-m68k/page.h

Version: ~ [ 2.4.0 ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 #ifndef _M68K_PAGE_H
  2 #define _M68K_PAGE_H
  3 
  4 #include <linux/config.h>
  5 
  6 /* PAGE_SHIFT determines the page size */
  7 #ifndef CONFIG_SUN3
  8 #define PAGE_SHIFT      (12)
  9 #define PAGE_SIZE       (4096)
 10 #else
 11 #define PAGE_SHIFT      (13)
 12 #define PAGE_SIZE       (8192)
 13 #endif
 14 #define PAGE_MASK       (~(PAGE_SIZE-1))
 15 
 16 #ifdef __KERNEL__
 17 
 18 #include <asm/setup.h>
 19 
 20 #if PAGE_SHIFT < 13
 21 #define KTHREAD_SIZE (8192)
 22 #else
 23 #define KTHREAD_SIZE PAGE_SIZE
 24 #endif
 25  
 26 #ifndef __ASSEMBLY__
 27  
 28 #define get_user_page(vaddr)            __get_free_page(GFP_KERNEL)
 29 #define free_user_page(page, addr)      free_page(addr)
 30 
 31 /*
 32  * We don't need to check for alignment etc.
 33  */
 34 #ifdef CPU_M68040_OR_M68060_ONLY
 35 static inline void copy_page(void *to, void *from)
 36 {
 37   unsigned long tmp;
 38 
 39   __asm__ __volatile__("1:\t"
 40                        ".chip 68040\n\t"
 41                        "move16 %1@+,%0@+\n\t"
 42                        "move16 %1@+,%0@+\n\t"
 43                        ".chip 68k\n\t"
 44                        "dbra  %2,1b\n\t"
 45                        : "=a" (to), "=a" (from), "=d" (tmp)
 46                        : "" (to), "1" (from) , "2" (PAGE_SIZE / 32 - 1)
 47                        );
 48 }
 49 
 50 static inline void clear_page(void *page)
 51 {
 52         unsigned long data, tmp;
 53         void *sp = page;
 54 
 55         data = 0;
 56 
 57         *((unsigned long *)(page))++ = 0;
 58         *((unsigned long *)(page))++ = 0;
 59         *((unsigned long *)(page))++ = 0;
 60         *((unsigned long *)(page))++ = 0;
 61 
 62         __asm__ __volatile__("1:\t"
 63                              ".chip 68040\n\t"
 64                              "move16 %2@+,%0@+\n\t"
 65                              ".chip 68k\n\t"
 66                              "subqw  #8,%2\n\t"
 67                              "subqw  #8,%2\n\t"
 68                              "dbra   %1,1b\n\t"
 69                              : "=a" (page), "=d" (tmp)
 70                              : "a" (sp), "" (page),
 71                                "1" ((PAGE_SIZE - 16) / 16 - 1));
 72 }
 73 
 74 #else
 75 #define clear_page(page)        memset((page), 0, PAGE_SIZE)
 76 #define copy_page(to,from)      memcpy((to), (from), PAGE_SIZE)
 77 #endif
 78 
 79 #define clear_user_page(page, vaddr)    clear_page(page)
 80 #define copy_user_page(to, from, vaddr) copy_page(to, from)
 81 
 82 /*
 83  * These are used to make use of C type-checking..
 84  */
 85 typedef struct { unsigned long pte; } pte_t;
 86 typedef struct { unsigned long pmd[16]; } pmd_t;
 87 typedef struct { unsigned long pgd; } pgd_t;
 88 typedef struct { unsigned long pgprot; } pgprot_t;
 89 
 90 #define pte_val(x)      ((x).pte)
 91 #define pmd_val(x)      ((&x)->pmd[0])
 92 #define pgd_val(x)      ((x).pgd)
 93 #define pgprot_val(x)   ((x).pgprot)
 94 
 95 #define __pte(x)        ((pte_t) { (x) } )
 96 #define __pmd(x)        ((pmd_t) { (x) } )
 97 #define __pgd(x)        ((pgd_t) { (x) } )
 98 #define __pgprot(x)     ((pgprot_t) { (x) } )
 99 
100 /* to align the pointer to the (next) page boundary */
101 #define PAGE_ALIGN(addr)        (((addr)+PAGE_SIZE-1)&PAGE_MASK)
102 
103 /* Pure 2^n version of get_order */
104 extern __inline__ int get_order(unsigned long size)
105 {
106         int order;
107 
108         size = (size-1) >> (PAGE_SHIFT-1);
109         order = -1;
110         do {
111                 size >>= 1;
112                 order++;
113         } while (size);
114         return order;
115 }
116 
117 #endif /* !__ASSEMBLY__ */
118 
119 #include <asm/page_offset.h>
120 
121 #define PAGE_OFFSET             (PAGE_OFFSET_RAW)
122 
123 #ifndef __ASSEMBLY__
124 
125 #ifndef CONFIG_SUN3
126 
127 #ifdef CONFIG_SINGLE_MEMORY_CHUNK
128 extern unsigned long m68k_memoffset;
129 
130 #define __pa(vaddr)             ((unsigned long)(vaddr)+m68k_memoffset)
131 #define __va(paddr)             ((void *)((unsigned long)(paddr)-m68k_memoffset))
132 #else
133 #define __pa(vaddr)             virt_to_phys((void *)vaddr)
134 #define __va(paddr)             phys_to_virt((unsigned long)paddr)
135 #endif
136 
137 #else   /* !CONFIG_SUN3 */
138 /* This #define is a horrible hack to suppress lots of warnings. --m */
139 #define __pa(x) ___pa((unsigned long)x)
140 static inline unsigned long ___pa(unsigned long x)
141 {
142      if(x == 0)
143           return 0;
144      if(x > PAGE_OFFSET)
145         return (x-PAGE_OFFSET);
146      else
147         return (x+0x2000000);
148 }
149 
150 static inline void *__va(unsigned long x)
151 {
152      if(x == 0)
153           return (void *)0;
154 
155      if(x < 0x2000000)
156         return (void *)(x+PAGE_OFFSET);
157      else
158         return (void *)(x-0x2000000);
159 }
160 #endif  /* CONFIG_SUN3 */
161 
162 #define MAP_NR(addr)            (((unsigned long)(addr)-PAGE_OFFSET) >> PAGE_SHIFT)
163 #define virt_to_page(kaddr)     (mem_map + (((unsigned long)(kaddr)-PAGE_OFFSET) >> PAGE_SHIFT))
164 #define VALID_PAGE(page)        ((page - mem_map) < max_mapnr)
165 
166 #ifndef CONFIG_SUN3
167 #define BUG() do { \
168         printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); \
169         asm volatile("illegal"); \
170 } while (0)
171 #else
172 #define BUG() do { \
173         printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); \
174         panic("BUG!"); \
175 } while (0)
176 #endif
177 
178 #define PAGE_BUG(page) do { \
179         BUG(); \
180 } while (0)
181 
182 #endif /* __ASSEMBLY__ */
183 
184 #endif /* __KERNEL__ */
185 
186 #endif /* _M68K_PAGE_H */
187 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.