Linux Audio

Check our new training course

Loading...
v6.2
  1/* SPDX-License-Identifier: GPL-2.0 */
  2/*
  3 * Copyright (C) 2020-2022 Loongson Technology Corporation Limited
  4 */
  5#ifndef _ASM_PGTABLE_BITS_H
  6#define _ASM_PGTABLE_BITS_H
  7
  8/* Page table bits */
  9#define	_PAGE_VALID_SHIFT	0
 10#define	_PAGE_ACCESSED_SHIFT	0  /* Reuse Valid for Accessed */
 11#define	_PAGE_DIRTY_SHIFT	1
 12#define	_PAGE_PLV_SHIFT		2  /* 2~3, two bits */
 13#define	_CACHE_SHIFT		4  /* 4~5, two bits */
 14#define	_PAGE_GLOBAL_SHIFT	6
 15#define	_PAGE_HUGE_SHIFT	6  /* HUGE is a PMD bit */
 16#define	_PAGE_PRESENT_SHIFT	7
 17#define	_PAGE_WRITE_SHIFT	8
 18#define	_PAGE_MODIFIED_SHIFT	9
 19#define	_PAGE_PROTNONE_SHIFT	10
 20#define	_PAGE_SPECIAL_SHIFT	11
 21#define	_PAGE_HGLOBAL_SHIFT	12 /* HGlobal is a PMD bit */
 22#define	_PAGE_PFN_SHIFT		12
 
 23#define	_PAGE_PFN_END_SHIFT	48
 
 
 24#define	_PAGE_NO_READ_SHIFT	61
 25#define	_PAGE_NO_EXEC_SHIFT	62
 26#define	_PAGE_RPLV_SHIFT	63
 27
 28/* Used by software */
 29#define _PAGE_PRESENT		(_ULCAST_(1) << _PAGE_PRESENT_SHIFT)
 
 30#define _PAGE_WRITE		(_ULCAST_(1) << _PAGE_WRITE_SHIFT)
 31#define _PAGE_ACCESSED		(_ULCAST_(1) << _PAGE_ACCESSED_SHIFT)
 32#define _PAGE_MODIFIED		(_ULCAST_(1) << _PAGE_MODIFIED_SHIFT)
 33#define _PAGE_PROTNONE		(_ULCAST_(1) << _PAGE_PROTNONE_SHIFT)
 34#define _PAGE_SPECIAL		(_ULCAST_(1) << _PAGE_SPECIAL_SHIFT)
 
 
 
 
 35
 36/* Used by TLB hardware (placed in EntryLo*) */
 37#define _PAGE_VALID		(_ULCAST_(1) << _PAGE_VALID_SHIFT)
 38#define _PAGE_DIRTY		(_ULCAST_(1) << _PAGE_DIRTY_SHIFT)
 39#define _PAGE_PLV		(_ULCAST_(3) << _PAGE_PLV_SHIFT)
 40#define _PAGE_GLOBAL		(_ULCAST_(1) << _PAGE_GLOBAL_SHIFT)
 41#define _PAGE_HUGE		(_ULCAST_(1) << _PAGE_HUGE_SHIFT)
 42#define _PAGE_HGLOBAL		(_ULCAST_(1) << _PAGE_HGLOBAL_SHIFT)
 43#define _PAGE_NO_READ		(_ULCAST_(1) << _PAGE_NO_READ_SHIFT)
 44#define _PAGE_NO_EXEC		(_ULCAST_(1) << _PAGE_NO_EXEC_SHIFT)
 45#define _PAGE_RPLV		(_ULCAST_(1) << _PAGE_RPLV_SHIFT)
 46#define _CACHE_MASK		(_ULCAST_(3) << _CACHE_SHIFT)
 47#define _PFN_SHIFT		(PAGE_SHIFT - 12 + _PAGE_PFN_SHIFT)
 48
 49#define _PAGE_USER	(PLV_USER << _PAGE_PLV_SHIFT)
 50#define _PAGE_KERN	(PLV_KERN << _PAGE_PLV_SHIFT)
 51
 52#define _PFN_MASK (~((_ULCAST_(1) << (_PFN_SHIFT)) - 1) & \
 53		  ((_ULCAST_(1) << (_PAGE_PFN_END_SHIFT)) - 1))
 54
 55/*
 56 * Cache attributes
 57 */
 58#ifndef _CACHE_SUC
 59#define _CACHE_SUC			(0<<_CACHE_SHIFT) /* Strong-ordered UnCached */
 60#endif
 61#ifndef _CACHE_CC
 62#define _CACHE_CC			(1<<_CACHE_SHIFT) /* Coherent Cached */
 63#endif
 64#ifndef _CACHE_WUC
 65#define _CACHE_WUC			(2<<_CACHE_SHIFT) /* Weak-ordered UnCached */
 66#endif
 67
 68#define __READABLE	(_PAGE_VALID)
 69#define __WRITEABLE	(_PAGE_DIRTY | _PAGE_WRITE)
 70
 71#define _PAGE_CHG_MASK	(_PAGE_MODIFIED | _PAGE_SPECIAL | _PFN_MASK | _CACHE_MASK | _PAGE_PLV)
 72#define _HPAGE_CHG_MASK	(_PAGE_MODIFIED | _PAGE_SPECIAL | _PFN_MASK | _CACHE_MASK | _PAGE_PLV | _PAGE_HUGE)
 73
 74#define PAGE_NONE	__pgprot(_PAGE_PROTNONE | _PAGE_NO_READ | \
 75				 _PAGE_USER | _CACHE_CC)
 76#define PAGE_SHARED	__pgprot(_PAGE_PRESENT | _PAGE_WRITE | \
 77				 _PAGE_USER | _CACHE_CC)
 78#define PAGE_READONLY	__pgprot(_PAGE_PRESENT | _PAGE_USER | _CACHE_CC)
 79
 80#define PAGE_KERNEL	__pgprot(_PAGE_PRESENT | __READABLE | __WRITEABLE | \
 81				 _PAGE_GLOBAL | _PAGE_KERN | _CACHE_CC)
 82#define PAGE_KERNEL_SUC __pgprot(_PAGE_PRESENT | __READABLE | __WRITEABLE | \
 83				 _PAGE_GLOBAL | _PAGE_KERN |  _CACHE_SUC)
 84#define PAGE_KERNEL_WUC __pgprot(_PAGE_PRESENT | __READABLE | __WRITEABLE | \
 85				 _PAGE_GLOBAL | _PAGE_KERN |  _CACHE_WUC)
 86
 87#ifndef __ASSEMBLY__
 88
 89#define _PAGE_IOREMAP		pgprot_val(PAGE_KERNEL_SUC)
 90
 91#define pgprot_noncached pgprot_noncached
 92
 93static inline pgprot_t pgprot_noncached(pgprot_t _prot)
 94{
 95	unsigned long prot = pgprot_val(_prot);
 96
 97	prot = (prot & ~_CACHE_MASK) | _CACHE_SUC;
 98
 99	return __pgprot(prot);
100}
101
 
 
102#define pgprot_writecombine pgprot_writecombine
103
104static inline pgprot_t pgprot_writecombine(pgprot_t _prot)
105{
106	unsigned long prot = pgprot_val(_prot);
107
108	prot = (prot & ~_CACHE_MASK) | _CACHE_WUC;
109
110	return __pgprot(prot);
111}
112
113#endif /* !__ASSEMBLY__ */
114
115#endif /* _ASM_PGTABLE_BITS_H */
v6.13.7
  1/* SPDX-License-Identifier: GPL-2.0 */
  2/*
  3 * Copyright (C) 2020-2022 Loongson Technology Corporation Limited
  4 */
  5#ifndef _ASM_PGTABLE_BITS_H
  6#define _ASM_PGTABLE_BITS_H
  7
  8/* Page table bits */
  9#define	_PAGE_VALID_SHIFT	0
 10#define	_PAGE_ACCESSED_SHIFT	0  /* Reuse Valid for Accessed */
 11#define	_PAGE_DIRTY_SHIFT	1
 12#define	_PAGE_PLV_SHIFT		2  /* 2~3, two bits */
 13#define	_CACHE_SHIFT		4  /* 4~5, two bits */
 14#define	_PAGE_GLOBAL_SHIFT	6
 15#define	_PAGE_HUGE_SHIFT	6  /* HUGE is a PMD bit */
 16#define	_PAGE_PRESENT_SHIFT	7
 17#define	_PAGE_WRITE_SHIFT	8
 18#define	_PAGE_MODIFIED_SHIFT	9
 19#define	_PAGE_PROTNONE_SHIFT	10
 20#define	_PAGE_SPECIAL_SHIFT	11
 21#define	_PAGE_HGLOBAL_SHIFT	12 /* HGlobal is a PMD bit */
 22#define	_PAGE_PFN_SHIFT		12
 23#define	_PAGE_SWP_EXCLUSIVE_SHIFT 23
 24#define	_PAGE_PFN_END_SHIFT	48
 25#define	_PAGE_DEVMAP_SHIFT	59
 26#define	_PAGE_PRESENT_INVALID_SHIFT 60
 27#define	_PAGE_NO_READ_SHIFT	61
 28#define	_PAGE_NO_EXEC_SHIFT	62
 29#define	_PAGE_RPLV_SHIFT	63
 30
 31/* Used by software */
 32#define _PAGE_PRESENT		(_ULCAST_(1) << _PAGE_PRESENT_SHIFT)
 33#define _PAGE_PRESENT_INVALID	(_ULCAST_(1) << _PAGE_PRESENT_INVALID_SHIFT)
 34#define _PAGE_WRITE		(_ULCAST_(1) << _PAGE_WRITE_SHIFT)
 35#define _PAGE_ACCESSED		(_ULCAST_(1) << _PAGE_ACCESSED_SHIFT)
 36#define _PAGE_MODIFIED		(_ULCAST_(1) << _PAGE_MODIFIED_SHIFT)
 37#define _PAGE_PROTNONE		(_ULCAST_(1) << _PAGE_PROTNONE_SHIFT)
 38#define _PAGE_SPECIAL		(_ULCAST_(1) << _PAGE_SPECIAL_SHIFT)
 39#define _PAGE_DEVMAP		(_ULCAST_(1) << _PAGE_DEVMAP_SHIFT)
 40
 41/* We borrow bit 23 to store the exclusive marker in swap PTEs. */
 42#define _PAGE_SWP_EXCLUSIVE	(_ULCAST_(1) << _PAGE_SWP_EXCLUSIVE_SHIFT)
 43
 44/* Used by TLB hardware (placed in EntryLo*) */
 45#define _PAGE_VALID		(_ULCAST_(1) << _PAGE_VALID_SHIFT)
 46#define _PAGE_DIRTY		(_ULCAST_(1) << _PAGE_DIRTY_SHIFT)
 47#define _PAGE_PLV		(_ULCAST_(3) << _PAGE_PLV_SHIFT)
 48#define _PAGE_GLOBAL		(_ULCAST_(1) << _PAGE_GLOBAL_SHIFT)
 49#define _PAGE_HUGE		(_ULCAST_(1) << _PAGE_HUGE_SHIFT)
 50#define _PAGE_HGLOBAL		(_ULCAST_(1) << _PAGE_HGLOBAL_SHIFT)
 51#define _PAGE_NO_READ		(_ULCAST_(1) << _PAGE_NO_READ_SHIFT)
 52#define _PAGE_NO_EXEC		(_ULCAST_(1) << _PAGE_NO_EXEC_SHIFT)
 53#define _PAGE_RPLV		(_ULCAST_(1) << _PAGE_RPLV_SHIFT)
 54#define _CACHE_MASK		(_ULCAST_(3) << _CACHE_SHIFT)
 55#define PFN_PTE_SHIFT		(PAGE_SHIFT - 12 + _PAGE_PFN_SHIFT)
 56
 57#define _PAGE_USER	(PLV_USER << _PAGE_PLV_SHIFT)
 58#define _PAGE_KERN	(PLV_KERN << _PAGE_PLV_SHIFT)
 59
 60#define _PFN_MASK (~((_ULCAST_(1) << (PFN_PTE_SHIFT)) - 1) & \
 61		  ((_ULCAST_(1) << (_PAGE_PFN_END_SHIFT)) - 1))
 62
 63/*
 64 * Cache attributes
 65 */
 66#ifndef _CACHE_SUC
 67#define _CACHE_SUC			(0<<_CACHE_SHIFT) /* Strong-ordered UnCached */
 68#endif
 69#ifndef _CACHE_CC
 70#define _CACHE_CC			(1<<_CACHE_SHIFT) /* Coherent Cached */
 71#endif
 72#ifndef _CACHE_WUC
 73#define _CACHE_WUC			(2<<_CACHE_SHIFT) /* Weak-ordered UnCached */
 74#endif
 75
 76#define __READABLE	(_PAGE_VALID)
 77#define __WRITEABLE	(_PAGE_DIRTY | _PAGE_WRITE)
 78
 79#define _PAGE_CHG_MASK	(_PAGE_MODIFIED | _PAGE_SPECIAL | _PAGE_DEVMAP | _PFN_MASK | _CACHE_MASK | _PAGE_PLV)
 80#define _HPAGE_CHG_MASK	(_PAGE_MODIFIED | _PAGE_SPECIAL | _PAGE_DEVMAP | _PFN_MASK | _CACHE_MASK | _PAGE_PLV | _PAGE_HUGE)
 81
 82#define PAGE_NONE	__pgprot(_PAGE_PROTNONE | _PAGE_NO_READ | \
 83				 _PAGE_USER | _CACHE_CC)
 84#define PAGE_SHARED	__pgprot(_PAGE_PRESENT | _PAGE_WRITE | \
 85				 _PAGE_USER | _CACHE_CC)
 86#define PAGE_READONLY	__pgprot(_PAGE_PRESENT | _PAGE_USER | _CACHE_CC)
 87
 88#define PAGE_KERNEL	__pgprot(_PAGE_PRESENT | __READABLE | __WRITEABLE | \
 89				 _PAGE_GLOBAL | _PAGE_KERN | _CACHE_CC)
 90#define PAGE_KERNEL_SUC __pgprot(_PAGE_PRESENT | __READABLE | __WRITEABLE | \
 91				 _PAGE_GLOBAL | _PAGE_KERN |  _CACHE_SUC)
 92#define PAGE_KERNEL_WUC __pgprot(_PAGE_PRESENT | __READABLE | __WRITEABLE | \
 93				 _PAGE_GLOBAL | _PAGE_KERN |  _CACHE_WUC)
 94
 95#ifndef __ASSEMBLY__
 96
 97#define _PAGE_IOREMAP		pgprot_val(PAGE_KERNEL_SUC)
 98
 99#define pgprot_noncached pgprot_noncached
100
101static inline pgprot_t pgprot_noncached(pgprot_t _prot)
102{
103	unsigned long prot = pgprot_val(_prot);
104
105	prot = (prot & ~_CACHE_MASK) | _CACHE_SUC;
106
107	return __pgprot(prot);
108}
109
110extern bool wc_enabled;
111
112#define pgprot_writecombine pgprot_writecombine
113
114static inline pgprot_t pgprot_writecombine(pgprot_t _prot)
115{
116	unsigned long prot = pgprot_val(_prot);
117
118	prot = (prot & ~_CACHE_MASK) | (wc_enabled ? _CACHE_WUC : _CACHE_SUC);
119
120	return __pgprot(prot);
121}
122
123#endif /* !__ASSEMBLY__ */
124
125#endif /* _ASM_PGTABLE_BITS_H */