xref: /OK3568_Linux_fs/kernel/arch/m68k/include/asm/sun3_pgalloc.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /* sun3_pgalloc.h --
3*4882a593Smuzhiyun  * reorganization around 2.3.39, routines moved from sun3_pgtable.h
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  *
6*4882a593Smuzhiyun  * 02/27/2002 -- Modified to support "highpte" implementation in 2.5.5 (Sam)
7*4882a593Smuzhiyun  *
8*4882a593Smuzhiyun  * moved 1/26/2000 Sam Creasey
9*4882a593Smuzhiyun  */
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun #ifndef _SUN3_PGALLOC_H
12*4882a593Smuzhiyun #define _SUN3_PGALLOC_H
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun #include <asm/tlb.h>
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun #include <asm-generic/pgalloc.h>
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun extern const char bad_pmd_string[];
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun #define __pte_free_tlb(tlb,pte,addr)			\
21*4882a593Smuzhiyun do {							\
22*4882a593Smuzhiyun 	pgtable_pte_page_dtor(pte);			\
23*4882a593Smuzhiyun 	tlb_remove_page((tlb), pte);			\
24*4882a593Smuzhiyun } while (0)
25*4882a593Smuzhiyun 
pmd_populate_kernel(struct mm_struct * mm,pmd_t * pmd,pte_t * pte)26*4882a593Smuzhiyun static inline void pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd, pte_t *pte)
27*4882a593Smuzhiyun {
28*4882a593Smuzhiyun 	pmd_val(*pmd) = __pa((unsigned long)pte);
29*4882a593Smuzhiyun }
30*4882a593Smuzhiyun 
pmd_populate(struct mm_struct * mm,pmd_t * pmd,pgtable_t page)31*4882a593Smuzhiyun static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd, pgtable_t page)
32*4882a593Smuzhiyun {
33*4882a593Smuzhiyun 	pmd_val(*pmd) = __pa((unsigned long)page_address(page));
34*4882a593Smuzhiyun }
35*4882a593Smuzhiyun #define pmd_pgtable(pmd) pmd_page(pmd)
36*4882a593Smuzhiyun 
37*4882a593Smuzhiyun /*
38*4882a593Smuzhiyun  * allocating and freeing a pmd is trivial: the 1-entry pmd is
39*4882a593Smuzhiyun  * inside the pgd, so has no extra memory associated with it.
40*4882a593Smuzhiyun  */
41*4882a593Smuzhiyun #define pmd_free(mm, x)			do { } while (0)
42*4882a593Smuzhiyun 
pgd_alloc(struct mm_struct * mm)43*4882a593Smuzhiyun static inline pgd_t * pgd_alloc(struct mm_struct *mm)
44*4882a593Smuzhiyun {
45*4882a593Smuzhiyun      pgd_t *new_pgd;
46*4882a593Smuzhiyun 
47*4882a593Smuzhiyun      new_pgd = (pgd_t *)get_zeroed_page(GFP_KERNEL);
48*4882a593Smuzhiyun      memcpy(new_pgd, swapper_pg_dir, PAGE_SIZE);
49*4882a593Smuzhiyun      memset(new_pgd, 0, (PAGE_OFFSET >> PGDIR_SHIFT));
50*4882a593Smuzhiyun      return new_pgd;
51*4882a593Smuzhiyun }
52*4882a593Smuzhiyun 
53*4882a593Smuzhiyun #endif /* SUN3_PGALLOC_H */
54