18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
48c2ecf20Sopenharmony_ci * Copyright 2003 PathScale, Inc.
58c2ecf20Sopenharmony_ci * Derived from include/asm-i386/pgalloc.h and include/asm-i386/pgtable.h
68c2ecf20Sopenharmony_ci */
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ci#ifndef __UM_PGALLOC_H
98c2ecf20Sopenharmony_ci#define __UM_PGALLOC_H
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_ci#include <linux/mm.h>
128c2ecf20Sopenharmony_ci
138c2ecf20Sopenharmony_ci#include <asm-generic/pgalloc.h>
148c2ecf20Sopenharmony_ci
158c2ecf20Sopenharmony_ci#define pmd_populate_kernel(mm, pmd, pte) \
168c2ecf20Sopenharmony_ci	set_pmd(pmd, __pmd(_PAGE_TABLE + (unsigned long) __pa(pte)))
178c2ecf20Sopenharmony_ci
188c2ecf20Sopenharmony_ci#define pmd_populate(mm, pmd, pte) 				\
198c2ecf20Sopenharmony_ci	set_pmd(pmd, __pmd(_PAGE_TABLE +			\
208c2ecf20Sopenharmony_ci		((unsigned long long)page_to_pfn(pte) <<	\
218c2ecf20Sopenharmony_ci			(unsigned long long) PAGE_SHIFT)))
228c2ecf20Sopenharmony_ci#define pmd_pgtable(pmd) pmd_page(pmd)
238c2ecf20Sopenharmony_ci
248c2ecf20Sopenharmony_ci/*
258c2ecf20Sopenharmony_ci * Allocate and free page tables.
268c2ecf20Sopenharmony_ci */
278c2ecf20Sopenharmony_ciextern pgd_t *pgd_alloc(struct mm_struct *);
288c2ecf20Sopenharmony_ci
298c2ecf20Sopenharmony_ci#define __pte_free_tlb(tlb,pte, address)		\
308c2ecf20Sopenharmony_cido {							\
318c2ecf20Sopenharmony_ci	pgtable_pte_page_dtor(pte);			\
328c2ecf20Sopenharmony_ci	tlb_remove_page((tlb),(pte));			\
338c2ecf20Sopenharmony_ci} while (0)
348c2ecf20Sopenharmony_ci
358c2ecf20Sopenharmony_ci#ifdef CONFIG_3_LEVEL_PGTABLES
368c2ecf20Sopenharmony_ci
378c2ecf20Sopenharmony_ci#define __pmd_free_tlb(tlb, pmd, address)		\
388c2ecf20Sopenharmony_cido {							\
398c2ecf20Sopenharmony_ci	pgtable_pmd_page_dtor(virt_to_page(pmd));	\
408c2ecf20Sopenharmony_ci	tlb_remove_page((tlb),virt_to_page(pmd));	\
418c2ecf20Sopenharmony_ci} while (0)						\
428c2ecf20Sopenharmony_ci
438c2ecf20Sopenharmony_ci#endif
448c2ecf20Sopenharmony_ci
458c2ecf20Sopenharmony_ci#endif
468c2ecf20Sopenharmony_ci
47