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