]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blame - arch/arc/include/asm/page.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500
[mirror_ubuntu-jammy-kernel.git] / arch / arc / include / asm / page.h
CommitLineData
d2912cb1 1/* SPDX-License-Identifier: GPL-2.0-only */
3be80aae
VG
2/*
3 * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
3be80aae 4 */
3be80aae
VG
5#ifndef __ASM_ARC_PAGE_H
6#define __ASM_ARC_PAGE_H
7
8c2f4a8d 8#include <uapi/asm/page.h>
3be80aae 9
5dda4dc5
VG
10#ifndef __ASSEMBLY__
11
5dda4dc5
VG
12#define clear_page(paddr) memset((paddr), 0, PAGE_SIZE)
13#define copy_page(to, from) memcpy((to), (from), PAGE_SIZE)
14
4102b533
VG
15struct vm_area_struct;
16struct page;
17
18#define __HAVE_ARCH_COPY_USER_HIGHPAGE
19
20void copy_user_highpage(struct page *to, struct page *from,
21 unsigned long u_vaddr, struct vm_area_struct *vma);
22void clear_user_page(void *to, unsigned long u_vaddr, struct page *page);
23
5dda4dc5
VG
24#undef STRICT_MM_TYPECHECKS
25
26#ifdef STRICT_MM_TYPECHECKS
27/*
28 * These are used to make use of C type-checking..
29 */
30typedef struct {
5035cd5b
VG
31#ifdef CONFIG_ARC_HAS_PAE40
32 unsigned long long pte;
33#else
5dda4dc5 34 unsigned long pte;
5035cd5b 35#endif
5dda4dc5
VG
36} pte_t;
37typedef struct {
38 unsigned long pgd;
39} pgd_t;
40typedef struct {
41 unsigned long pgprot;
42} pgprot_t;
5dda4dc5
VG
43
44#define pte_val(x) ((x).pte)
45#define pgd_val(x) ((x).pgd)
46#define pgprot_val(x) ((x).pgprot)
47
48#define __pte(x) ((pte_t) { (x) })
49#define __pgd(x) ((pgd_t) { (x) })
50#define __pgprot(x) ((pgprot_t) { (x) })
51
4368902b
GBY
52#define pte_pgprot(x) __pgprot(pte_val(x))
53
5dda4dc5
VG
54#else /* !STRICT_MM_TYPECHECKS */
55
5a364c2a
VG
56#ifdef CONFIG_ARC_HAS_PAE40
57typedef unsigned long long pte_t;
58#else
5dda4dc5 59typedef unsigned long pte_t;
5a364c2a 60#endif
5dda4dc5
VG
61typedef unsigned long pgd_t;
62typedef unsigned long pgprot_t;
5dda4dc5
VG
63
64#define pte_val(x) (x)
65#define pgd_val(x) (x)
66#define pgprot_val(x) (x)
67#define __pte(x) (x)
fe6c1b86 68#define __pgd(x) (x)
5dda4dc5 69#define __pgprot(x) (x)
4368902b 70#define pte_pgprot(x) (x)
5dda4dc5
VG
71
72#endif
73
e8a75963
VG
74typedef pte_t * pgtable_t;
75
2519d753
VG
76/*
77 * Use virt_to_pfn with caution:
78 * If used in pte or paddr related macros, it could cause truncation
79 * in PAE40 builds
80 * As a rule of thumb, only use it in helpers starting with virt_
81 * You have been warned !
82 */
c2ff5cf2
VG
83#define virt_to_pfn(kaddr) (__pa(kaddr) >> PAGE_SHIFT)
84
9ed68785 85#define ARCH_PFN_OFFSET virt_to_pfn(CONFIG_LINUX_RAM_BASE)
5dda4dc5 86
26f9d5fd 87#ifdef CONFIG_FLATMEM
c2ff5cf2 88#define pfn_valid(pfn) (((pfn) - ARCH_PFN_OFFSET) < max_mapnr)
26f9d5fd 89#endif
5dda4dc5
VG
90
91/*
92 * __pa, __va, virt_to_page (ALERT: deprecated, don't use them)
93 *
94 * These macros have historically been misnamed
95 * virt here means link-address/program-address as embedded in object code.
c2ff5cf2 96 * And for ARC, link-addr = physical address
5dda4dc5 97 */
2519d753 98#define __pa(vaddr) ((unsigned long)(vaddr))
5dda4dc5
VG
99#define __va(paddr) ((void *)((unsigned long)(paddr)))
100
26f9d5fd 101#define virt_to_page(kaddr) pfn_to_page(virt_to_pfn(kaddr))
c2ff5cf2 102#define virt_addr_valid(kaddr) pfn_valid(virt_to_pfn(kaddr))
5dda4dc5 103
3abc9448 104/* Default Permissions for stack/heaps pages (Non Executable) */
93312b6d 105#define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)
5dda4dc5
VG
106
107#define WANT_PAGE_VIRTUAL 1
108
109#include <asm-generic/memory_model.h> /* page_to_pfn, pfn_to_page */
110#include <asm-generic/getorder.h>
111
3be80aae
VG
112#endif /* !__ASSEMBLY__ */
113
3be80aae 114#endif