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

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

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

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

~ [ 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.