File: /usr/src/linux/include/asm-mips/page.h

1     /* $Id: page.h,v 1.9 2000/02/24 00:13:19 ralf Exp $
2      *
3      * Definitions for page handling
4      *
5      * This file is subject to the terms and conditions of the GNU General Public
6      * License.  See the file "COPYING" in the main directory of this archive
7      * for more details.
8      *
9      * Copyright (C) 1994 - 1999 by Ralf Baechle
10      */
11     #ifndef __ASM_PAGE_H
12     #define __ASM_PAGE_H
13     
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     
19     #ifdef __KERNEL__
20     
21     #ifndef _LANGUAGE_ASSEMBLY
22     
23     #define BUG() do { printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); *(int *)0=0; } while (0)
24     #define PAGE_BUG(page) do {  BUG(); } while (0)
25     
26     extern void (*_clear_page)(void * page);
27     extern void (*_copy_page)(void * to, void * from);
28     
29     #define clear_page(page)	_clear_page(page)
30     #define copy_page(to, from)	_copy_page(to, from)
31     #define clear_user_page(page, vaddr)	clear_page(page)
32     #define copy_user_page(to, from, vaddr)	copy_page(to, from)
33     
34     /*
35      * These are used to make use of C type-checking..
36      */
37     typedef struct { unsigned long pte; } pte_t;
38     typedef struct { unsigned long pmd; } pmd_t;
39     typedef struct { unsigned long pgd; } pgd_t;
40     typedef struct { unsigned long pgprot; } pgprot_t;
41     
42     #define pte_val(x)	((x).pte)
43     #define pmd_val(x)	((x).pmd)
44     #define pgd_val(x)	((x).pgd)
45     #define pgprot_val(x)	((x).pgprot)
46     
47     #define __pte(x)	((pte_t) { (x) } )
48     #define __pme(x)	((pme_t) { (x) } )
49     #define __pgd(x)	((pgd_t) { (x) } )
50     #define __pgprot(x)	((pgprot_t) { (x) } )
51     
52     /* Pure 2^n version of get_order */
53     extern __inline__ int get_order(unsigned long size)
54     {
55     	int order;
56     
57     	size = (size-1) >> (PAGE_SHIFT-1);
58     	order = -1;
59     	do {
60     		size >>= 1;
61     		order++;
62     	} while (size);
63     	return order;
64     }
65     
66     #endif /* _LANGUAGE_ASSEMBLY */
67     
68     /* to align the pointer to the (next) page boundary */
69     #define PAGE_ALIGN(addr)	(((addr)+PAGE_SIZE-1)&PAGE_MASK)
70     
71     /*
72      * This handles the memory map.
73      * We handle pages at KSEG0 for kernels with 32 bit address space.
74      */
75     #define PAGE_OFFSET	0x80000000UL
76     #define __pa(x)		((unsigned long) (x) - PAGE_OFFSET)
77     #define __va(x)		((void *)((unsigned long) (x) + PAGE_OFFSET))
78     #define virt_to_page(kaddr)	(mem_map + (__pa(kaddr) >> PAGE_SHIFT))
79     #define VALID_PAGE(page)	((page - mem_map) < max_mapnr)
80     
81     #endif /* defined (__KERNEL__) */
82     
83     #endif /* __ASM_PAGE_H */
84