Blame view

include/asm-sparc/page.h 4.53 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
3
4
5
6
7
8
9
  /* $Id: page.h,v 1.55 2000/10/30 21:01:41 davem Exp $
   * page.h:  Various defines and such for MMU operations on the Sparc for
   *          the Linux kernel.
   *
   * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
   */
  
  #ifndef _SPARC_PAGE_H
  #define _SPARC_PAGE_H
09087a1a8   David Woodhouse   Fix exported head...
10
  #ifdef __KERNEL__
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
11
12
13
14
15
16
17
18
19
20
21
22
  #ifdef CONFIG_SUN4
  #define PAGE_SHIFT   13
  #else
  #define PAGE_SHIFT   12
  #endif
  #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))
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
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
  #include <asm/btfixup.h>
  
  #ifndef __ASSEMBLY__
  
  #define clear_page(page)	 memset((void *)(page), 0, PAGE_SIZE)
  #define copy_page(to,from) 	memcpy((void *)(to), (void *)(from), PAGE_SIZE)
  #define clear_user_page(addr, vaddr, page)	\
  	do { 	clear_page(addr);		\
  		sparc_flush_page_to_ram(page);	\
  	} while (0)
  #define copy_user_page(to, from, vaddr, page)	\
  	do {	copy_page(to, from);		\
  		sparc_flush_page_to_ram(page);	\
  	} while (0)
  
  /* 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+1];
  
  /* Cache alias structure.  Entry is valid if context != -1. */
  struct cache_palias {
  	unsigned long vaddr;
  	int context;
  };
  
  extern struct cache_palias *sparc_aliases;
  
  /* passing structs on the Sparc slow us down tremendously... */
  
  /* #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 long pmdv[16]; } pmd_t;
  typedef struct { unsigned long 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)      ((x).pmdv[0])
  #define pgd_val(x)	((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) } ) */ /* XXX procedure with loop */
  #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 struct { unsigned long pmdv[16]; } pmd_t;
  typedef unsigned long 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)      ((x).pmdv[0])
  #define pgd_val(x)	(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) */ /* XXX later */
  #define __pgd(x)	(x)
  #define __ctxd(x)	(x)
  #define __pgprot(x)	(x)
  #define __iopgprot(x)	(x)
  
  #endif
  
  extern unsigned long sparc_unmapped_base;
  
  BTFIXUPDEF_SETHI(sparc_unmapped_base)
  
  #define TASK_UNMAPPED_BASE	BTFIXUP_SETHI(sparc_unmapped_base)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
  #else /* !(__ASSEMBLY__) */
  
  #define __pgprot(x)	(x)
  
  #endif /* !(__ASSEMBLY__) */
  
  /* to align the pointer to the (next) page boundary */
  #define PAGE_ALIGN(addr)  (((addr)+PAGE_SIZE-1)&PAGE_MASK)
  
  #define PAGE_OFFSET	0xf0000000
  #ifndef __ASSEMBLY__
  extern unsigned long phys_base;
  extern unsigned long pfn_base;
  #endif
  #define __pa(x)			((unsigned long)(x) - PAGE_OFFSET + phys_base)
  #define __va(x)			((void *)((unsigned long) (x) - phys_base + PAGE_OFFSET))
  
  #define virt_to_phys		__pa
  #define phys_to_virt		__va
064b2a076   KAMEZAWA Hiroyuki   [PATCH] unify pfn...
149
  #define ARCH_PFN_OFFSET		(pfn_base)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
150
151
152
153
154
155
156
  #define virt_to_page(kaddr)	(mem_map + ((((unsigned long)(kaddr)-PAGE_OFFSET)>>PAGE_SHIFT)))
  
  #define pfn_valid(pfn)		(((pfn) >= (pfn_base)) && (((pfn)-(pfn_base)) < max_mapnr))
  #define virt_addr_valid(kaddr)	((((unsigned long)(kaddr)-PAGE_OFFSET)>>PAGE_SHIFT) < max_mapnr)
  
  #define VM_DATA_DEFAULT_FLAGS	(VM_READ | VM_WRITE | VM_EXEC | \
  				 VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)
064b2a076   KAMEZAWA Hiroyuki   [PATCH] unify pfn...
157
  #include <asm-generic/memory_model.h>
fd4fd5aac   Stephen Rothwell   [PATCH] mm: conso...
158
  #include <asm-generic/page.h>
09087a1a8   David Woodhouse   Fix exported head...
159
  #endif /* __KERNEL__ */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
160
  #endif /* _SPARC_PAGE_H */