xref: /openbmc/linux/include/asm-generic/page.h (revision 2612e3bbc0386368a850140a6c9b990cd496a5ec)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
25c01b46bSArnd Bergmann #ifndef __ASM_GENERIC_PAGE_H
35c01b46bSArnd Bergmann #define __ASM_GENERIC_PAGE_H
45c01b46bSArnd Bergmann /*
55c01b46bSArnd Bergmann  * Generic page.h implementation, for NOMMU architectures.
65c01b46bSArnd Bergmann  * This provides the dummy definitions for the memory management.
75c01b46bSArnd Bergmann  */
85c01b46bSArnd Bergmann 
95c01b46bSArnd Bergmann #ifdef CONFIG_MMU
10d724444aSMike Rapoport #error need to provide a real asm/page.h
115c01b46bSArnd Bergmann #endif
125c01b46bSArnd Bergmann 
135c01b46bSArnd Bergmann 
145c01b46bSArnd Bergmann /* PAGE_SHIFT determines the page size */
155c01b46bSArnd Bergmann 
165c01b46bSArnd Bergmann #define PAGE_SHIFT	12
175c01b46bSArnd Bergmann #ifdef __ASSEMBLY__
185c01b46bSArnd Bergmann #define PAGE_SIZE	(1 << PAGE_SHIFT)
195c01b46bSArnd Bergmann #else
205c01b46bSArnd Bergmann #define PAGE_SIZE	(1UL << PAGE_SHIFT)
215c01b46bSArnd Bergmann #endif
225c01b46bSArnd Bergmann #define PAGE_MASK	(~(PAGE_SIZE-1))
235c01b46bSArnd Bergmann 
245c01b46bSArnd Bergmann #include <asm/setup.h>
255c01b46bSArnd Bergmann 
265c01b46bSArnd Bergmann #ifndef __ASSEMBLY__
275c01b46bSArnd Bergmann 
285c01b46bSArnd Bergmann #define clear_page(page)	memset((page), 0, PAGE_SIZE)
295c01b46bSArnd Bergmann #define copy_page(to,from)	memcpy((to), (from), PAGE_SIZE)
305c01b46bSArnd Bergmann 
315c01b46bSArnd Bergmann #define clear_user_page(page, vaddr, pg)	clear_page(page)
325c01b46bSArnd Bergmann #define copy_user_page(to, from, vaddr, pg)	copy_page(to, from)
335c01b46bSArnd Bergmann 
345c01b46bSArnd Bergmann /*
355c01b46bSArnd Bergmann  * These are used to make use of C type-checking..
365c01b46bSArnd Bergmann  */
375c01b46bSArnd Bergmann typedef struct {
385c01b46bSArnd Bergmann 	unsigned long pte;
395c01b46bSArnd Bergmann } pte_t;
405c01b46bSArnd Bergmann typedef struct {
415c01b46bSArnd Bergmann 	unsigned long pmd[16];
425c01b46bSArnd Bergmann } pmd_t;
435c01b46bSArnd Bergmann typedef struct {
445c01b46bSArnd Bergmann 	unsigned long pgd;
455c01b46bSArnd Bergmann } pgd_t;
465c01b46bSArnd Bergmann typedef struct {
475c01b46bSArnd Bergmann 	unsigned long pgprot;
485c01b46bSArnd Bergmann } pgprot_t;
495c01b46bSArnd Bergmann typedef struct page *pgtable_t;
505c01b46bSArnd Bergmann 
515c01b46bSArnd Bergmann #define pte_val(x)	((x).pte)
525c01b46bSArnd Bergmann #define pmd_val(x)	((&x)->pmd[0])
535c01b46bSArnd Bergmann #define pgd_val(x)	((x).pgd)
545c01b46bSArnd Bergmann #define pgprot_val(x)	((x).pgprot)
555c01b46bSArnd Bergmann 
565c01b46bSArnd Bergmann #define __pte(x)	((pte_t) { (x) } )
575c01b46bSArnd Bergmann #define __pmd(x)	((pmd_t) { (x) } )
585c01b46bSArnd Bergmann #define __pgd(x)	((pgd_t) { (x) } )
595c01b46bSArnd Bergmann #define __pgprot(x)	((pgprot_t) { (x) } )
605c01b46bSArnd Bergmann 
615c01b46bSArnd Bergmann extern unsigned long memory_start;
625c01b46bSArnd Bergmann extern unsigned long memory_end;
635c01b46bSArnd Bergmann 
645c01b46bSArnd Bergmann #endif /* !__ASSEMBLY__ */
655c01b46bSArnd Bergmann 
665c01b46bSArnd Bergmann #define PAGE_OFFSET		(0)
675c01b46bSArnd Bergmann 
68b7a0556eSMark Salter #ifndef ARCH_PFN_OFFSET
69b7a0556eSMark Salter #define ARCH_PFN_OFFSET		(PAGE_OFFSET >> PAGE_SHIFT)
70b7a0556eSMark Salter #endif
71b7a0556eSMark Salter 
725c01b46bSArnd Bergmann #ifndef __ASSEMBLY__
735c01b46bSArnd Bergmann 
74b7a0556eSMark Salter #define __va(x) ((void *)((unsigned long) (x)))
75b7a0556eSMark Salter #define __pa(x) ((unsigned long) (x))
765c01b46bSArnd Bergmann 
virt_to_pfn(const void * kaddr)77*2d78057fSLinus Walleij static inline unsigned long virt_to_pfn(const void *kaddr)
78*2d78057fSLinus Walleij {
79*2d78057fSLinus Walleij 	return __pa(kaddr) >> PAGE_SHIFT;
80*2d78057fSLinus Walleij }
81*2d78057fSLinus Walleij #define virt_to_pfn virt_to_pfn
pfn_to_virt(unsigned long pfn)82*2d78057fSLinus Walleij static inline void *pfn_to_virt(unsigned long pfn)
83*2d78057fSLinus Walleij {
84*2d78057fSLinus Walleij 	return __va(pfn) << PAGE_SHIFT;
85*2d78057fSLinus Walleij }
86*2d78057fSLinus Walleij #define pfn_to_virt pfn_to_virt
875c01b46bSArnd Bergmann 
8806d5e032SSonic Zhang #define virt_to_page(addr)	pfn_to_page(virt_to_pfn(addr))
8906d5e032SSonic Zhang #define page_to_virt(page)	pfn_to_virt(page_to_pfn(page))
905c01b46bSArnd Bergmann 
915c01b46bSArnd Bergmann #ifndef page_to_phys
925c01b46bSArnd Bergmann #define page_to_phys(page)      ((dma_addr_t)page_to_pfn(page) << PAGE_SHIFT)
935c01b46bSArnd Bergmann #endif
945c01b46bSArnd Bergmann 
955c01b46bSArnd Bergmann #define	virt_addr_valid(kaddr)	(((void *)(kaddr) >= (void *)PAGE_OFFSET) && \
965c01b46bSArnd Bergmann 				((void *)(kaddr) < (void *)memory_end))
975c01b46bSArnd Bergmann 
985c01b46bSArnd Bergmann #endif /* __ASSEMBLY__ */
995c01b46bSArnd Bergmann 
1005c01b46bSArnd Bergmann #include <asm-generic/memory_model.h>
1015c01b46bSArnd Bergmann #include <asm-generic/getorder.h>
1025c01b46bSArnd Bergmann 
1035c01b46bSArnd Bergmann #endif /* __ASM_GENERIC_PAGE_H */
104