Linux Audio

Check our new training course

Loading...
v6.8
  1/* SPDX-License-Identifier: GPL-2.0 */
  2/*
  3 * Copyright 2003 PathScale Inc
  4 * Derived from include/asm-i386/pgtable.h
  5 */
  6
  7#ifndef __UM_PGTABLE_3LEVEL_H
  8#define __UM_PGTABLE_3LEVEL_H
  9
 10#include <asm-generic/pgtable-nopud.h>
 11
 12/* PGDIR_SHIFT determines what a third-level page table entry can map */
 13
 14#ifdef CONFIG_64BIT
 15#define PGDIR_SHIFT	30
 16#else
 17#define PGDIR_SHIFT	31
 18#endif
 19#define PGDIR_SIZE	(1UL << PGDIR_SHIFT)
 20#define PGDIR_MASK	(~(PGDIR_SIZE-1))
 21
 22/* PMD_SHIFT determines the size of the area a second-level page table can
 23 * map
 24 */
 25
 26#define PMD_SHIFT	21
 27#define PMD_SIZE	(1UL << PMD_SHIFT)
 28#define PMD_MASK	(~(PMD_SIZE-1))
 29
 30/*
 31 * entries per page directory level
 32 */
 33
 34#define PTRS_PER_PTE 512
 35#ifdef CONFIG_64BIT
 36#define PTRS_PER_PMD 512
 37#define PTRS_PER_PGD 512
 38#else
 39#define PTRS_PER_PMD 1024
 40#define PTRS_PER_PGD 1024
 41#endif
 42
 43#define USER_PTRS_PER_PGD ((TASK_SIZE + (PGDIR_SIZE - 1)) / PGDIR_SIZE)
 
 44
 45#define pte_ERROR(e) \
 46        printk("%s:%d: bad pte %p(%016lx).\n", __FILE__, __LINE__, &(e), \
 47	       pte_val(e))
 48#define pmd_ERROR(e) \
 49        printk("%s:%d: bad pmd %p(%016lx).\n", __FILE__, __LINE__, &(e), \
 50	       pmd_val(e))
 51#define pgd_ERROR(e) \
 52        printk("%s:%d: bad pgd %p(%016lx).\n", __FILE__, __LINE__, &(e), \
 53	       pgd_val(e))
 54
 55#define pud_none(x)	(!(pud_val(x) & ~_PAGE_NEWPAGE))
 56#define	pud_bad(x)	((pud_val(x) & (~PAGE_MASK & ~_PAGE_USER)) != _KERNPG_TABLE)
 57#define pud_present(x)	(pud_val(x) & _PAGE_PRESENT)
 58#define pud_populate(mm, pud, pmd) \
 59	set_pud(pud, __pud(_PAGE_TABLE + __pa(pmd)))
 60
 
 
 
 61#define set_pud(pudptr, pudval) (*(pudptr) = (pudval))
 
 62
 63static inline int pgd_newpage(pgd_t pgd)
 64{
 65	return(pgd_val(pgd) & _PAGE_NEWPAGE);
 66}
 67
 68static inline void pgd_mkuptodate(pgd_t pgd) { pgd_val(pgd) &= ~_PAGE_NEWPAGE; }
 69
 
 
 
 70#define set_pmd(pmdptr, pmdval) (*(pmdptr) = (pmdval))
 
 71
 72static inline void pud_clear (pud_t *pud)
 73{
 74	set_pud(pud, __pud(_PAGE_NEWPAGE));
 75}
 76
 77#define pud_page(pud) phys_to_page(pud_val(pud) & PAGE_MASK)
 78#define pud_pgtable(pud) ((pmd_t *) __va(pud_val(pud) & PAGE_MASK))
 79
 80static inline unsigned long pte_pfn(pte_t pte)
 81{
 82	return phys_to_pfn(pte_val(pte));
 83}
 84
 85static inline pte_t pfn_pte(unsigned long page_nr, pgprot_t pgprot)
 86{
 87	pte_t pte;
 88	phys_t phys = pfn_to_phys(page_nr);
 89
 90	pte_set_val(pte, phys, pgprot);
 91	return pte;
 92}
 93
 94static inline pmd_t pfn_pmd(unsigned long page_nr, pgprot_t pgprot)
 95{
 96	return __pmd((page_nr << PAGE_SHIFT) | pgprot_val(pgprot));
 97}
 98
 99#endif
100
v5.9
  1/* SPDX-License-Identifier: GPL-2.0 */
  2/*
  3 * Copyright 2003 PathScale Inc
  4 * Derived from include/asm-i386/pgtable.h
  5 */
  6
  7#ifndef __UM_PGTABLE_3LEVEL_H
  8#define __UM_PGTABLE_3LEVEL_H
  9
 10#include <asm-generic/pgtable-nopud.h>
 11
 12/* PGDIR_SHIFT determines what a third-level page table entry can map */
 13
 14#ifdef CONFIG_64BIT
 15#define PGDIR_SHIFT	30
 16#else
 17#define PGDIR_SHIFT	31
 18#endif
 19#define PGDIR_SIZE	(1UL << PGDIR_SHIFT)
 20#define PGDIR_MASK	(~(PGDIR_SIZE-1))
 21
 22/* PMD_SHIFT determines the size of the area a second-level page table can
 23 * map
 24 */
 25
 26#define PMD_SHIFT	21
 27#define PMD_SIZE	(1UL << PMD_SHIFT)
 28#define PMD_MASK	(~(PMD_SIZE-1))
 29
 30/*
 31 * entries per page directory level
 32 */
 33
 34#define PTRS_PER_PTE 512
 35#ifdef CONFIG_64BIT
 36#define PTRS_PER_PMD 512
 37#define PTRS_PER_PGD 512
 38#else
 39#define PTRS_PER_PMD 1024
 40#define PTRS_PER_PGD 1024
 41#endif
 42
 43#define USER_PTRS_PER_PGD ((TASK_SIZE + (PGDIR_SIZE - 1)) / PGDIR_SIZE)
 44#define FIRST_USER_ADDRESS	0UL
 45
 46#define pte_ERROR(e) \
 47        printk("%s:%d: bad pte %p(%016lx).\n", __FILE__, __LINE__, &(e), \
 48	       pte_val(e))
 49#define pmd_ERROR(e) \
 50        printk("%s:%d: bad pmd %p(%016lx).\n", __FILE__, __LINE__, &(e), \
 51	       pmd_val(e))
 52#define pgd_ERROR(e) \
 53        printk("%s:%d: bad pgd %p(%016lx).\n", __FILE__, __LINE__, &(e), \
 54	       pgd_val(e))
 55
 56#define pud_none(x)	(!(pud_val(x) & ~_PAGE_NEWPAGE))
 57#define	pud_bad(x)	((pud_val(x) & (~PAGE_MASK & ~_PAGE_USER)) != _KERNPG_TABLE)
 58#define pud_present(x)	(pud_val(x) & _PAGE_PRESENT)
 59#define pud_populate(mm, pud, pmd) \
 60	set_pud(pud, __pud(_PAGE_TABLE + __pa(pmd)))
 61
 62#ifdef CONFIG_64BIT
 63#define set_pud(pudptr, pudval) set_64bit((u64 *) (pudptr), pud_val(pudval))
 64#else
 65#define set_pud(pudptr, pudval) (*(pudptr) = (pudval))
 66#endif
 67
 68static inline int pgd_newpage(pgd_t pgd)
 69{
 70	return(pgd_val(pgd) & _PAGE_NEWPAGE);
 71}
 72
 73static inline void pgd_mkuptodate(pgd_t pgd) { pgd_val(pgd) &= ~_PAGE_NEWPAGE; }
 74
 75#ifdef CONFIG_64BIT
 76#define set_pmd(pmdptr, pmdval) set_64bit((u64 *) (pmdptr), pmd_val(pmdval))
 77#else
 78#define set_pmd(pmdptr, pmdval) (*(pmdptr) = (pmdval))
 79#endif
 80
 81static inline void pud_clear (pud_t *pud)
 82{
 83	set_pud(pud, __pud(_PAGE_NEWPAGE));
 84}
 85
 86#define pud_page(pud) phys_to_page(pud_val(pud) & PAGE_MASK)
 87#define pud_page_vaddr(pud) ((unsigned long) __va(pud_val(pud) & PAGE_MASK))
 88
 89static inline unsigned long pte_pfn(pte_t pte)
 90{
 91	return phys_to_pfn(pte_val(pte));
 92}
 93
 94static inline pte_t pfn_pte(unsigned long page_nr, pgprot_t pgprot)
 95{
 96	pte_t pte;
 97	phys_t phys = pfn_to_phys(page_nr);
 98
 99	pte_set_val(pte, phys, pgprot);
100	return pte;
101}
102
103static inline pmd_t pfn_pmd(unsigned long page_nr, pgprot_t pgprot)
104{
105	return __pmd((page_nr << PAGE_SHIFT) | pgprot_val(pgprot));
106}
107
108#endif
109