/usr/src/linux-headers-5.15.0-181/arch/powerpc/include/asm
NameSizeModeActions
book3s/-0755rm
nohash/-0755rm
vdso/-0755rm
8xx_immap.h140990644editdlrm
accounting.h9080644editdlrm
agp.h5250644editdlrm
archrandom.h8380644editdlrm
asm-compat.h18820644editdlrm
asm-const.h4680644editdlrm
asm-offsets.h350644editdlrm
asm-prototypes.h51300644editdlrm
async_tx.h9080644editdlrm
atomic.h142670644editdlrm
backlight.h11150644editdlrm
barrier.h39770644editdlrm
bitops.h79130644editdlrm
bootx.h11420644editdlrm
bpf_perf_event.h2330644editdlrm
btext.h10060644editdlrm
bug.h40900644editdlrm
cache.h28880644editdlrm
cacheflush.h38510644editdlrm
cell-pmu.h34960644editdlrm
cell-regs.h97990644editdlrm
checksum.h57230644editdlrm
clocksource.h1850644editdlrm
cmpxchg.h122800644editdlrm
code-patching-asm.h3970644editdlrm
code-patching.h54430644editdlrm
compat.h33040644editdlrm
context_tracking.h2450644editdlrm
copro.h5930644editdlrm
cpm.h250644editdlrm
cpm1.h217110644editdlrm
cpm2.h495980644editdlrm
cpufeature.h9980644editdlrm
cpuidle.h34070644editdlrm
cputable.h232110644editdlrm
cputhreads.h38560644editdlrm
cputime.h30690644editdlrm
cpu_has_feature.h13390644editdlrm
cpu_setup_power.h5070644editdlrm
crashdump-ppc64.h6240644editdlrm
current.h6800644editdlrm
dbdma.h38090644editdlrm
dbell.h40250644editdlrm
dcr-generic.h9300644editdlrm
dcr-mmio.h10260644editdlrm
dcr-native.h38590644editdlrm
dcr-regs.h58460644editdlrm
dcr.h21080644editdlrm
debug.h18860644editdlrm
delay.h32970644editdlrm
device.h10160644editdlrm
disassemble.h21890644editdlrm
dma-direct.h3910644editdlrm
dma.h107250644editdlrm
drmem.h29700644editdlrm
dtl.h15150644editdlrm
dt_cpu_ftrs.h7560644editdlrm
edac.h11050644editdlrm
eeh.h153670644editdlrm
eeh_event.h8260644editdlrm
ehv_pic.h9630644editdlrm
elf.h62830644editdlrm
elfnote.h5270644editdlrm
emergency-restart.h430644editdlrm
emulated_ops.h20720644editdlrm
epapr_hcalls.h168270644editdlrm
exception-64e.h57850644editdlrm
exception-64s.h43500644editdlrm
exec.h2460644editdlrm
extable.h12050644editdlrm
fadump-internal.h43520644editdlrm
fadump.h10950644editdlrm
fb.h4830644editdlrm
feature-fixups.h98280644editdlrm
firmware.h53270644editdlrm
fixmap.h37230644editdlrm
floppy.h51110644editdlrm
fsl_85xx_cache_sram.h8120644editdlrm
fsl_gtm.h12030644editdlrm
fsl_hcalls.h176150644editdlrm
fsl_lbc.h104890644editdlrm
fsl_pamu_stash.h4110644editdlrm
fsl_pm.h11830644editdlrm
fs_pd.h10460644editdlrm
ftrace.h35500644editdlrm
futex.h22460644editdlrm
grackle.h3310644editdlrm
hardirq.h9480644editdlrm
head-64.h55070644editdlrm
heathrow.h25950644editdlrm
highmem.h20790644editdlrm
hmi.h9710644editdlrm
hugetlb.h21860644editdlrm
hvcall.h212500644editdlrm
hvconsole.h7900644editdlrm
hvcserver.h14730644editdlrm
hvsi.h28500644editdlrm
hw_breakpoint.h37350644editdlrm
hw_irq.h112180644editdlrm
hydra.h29480644editdlrm
i8259.h3610644editdlrm
ibmebus.h22040644editdlrm
icswx.h50900644editdlrm
ide.h5860644editdlrm
idle.h23720644editdlrm
imc-pmu.h39830644editdlrm
immap_cpm2.h107490644editdlrm
inst.h36830644editdlrm
interrupt.h183530644editdlrm
io-defs.h31640644editdlrm
io-workarounds.h13130644editdlrm
io.h313870644editdlrm
iommu.h102830644editdlrm
io_event_irq.h17460644editdlrm
ipic.h31410644editdlrm
irq.h13200644editdlrm
irqflags.h17770644editdlrm
irq_work.h2130644editdlrm
isa-bridge.h6540644editdlrm
jump_label.h13510644editdlrm
kasan.h13960644editdlrm
Kbuild2860644editdlrm
kdebug.h2910644editdlrm
kdump.h13990644editdlrm
kexec.h48380644editdlrm
kexec_ranges.h9430644editdlrm
keylargo.h110610644editdlrm
kfence.h6500644editdlrm
kgdb.h21560644editdlrm
kprobes.h28150644editdlrm
kup.h32970644editdlrm
kvm_asm.h49520644editdlrm
kvm_book3s.h172200644editdlrm
kvm_book3s_32.h8160644editdlrm
kvm_book3s_64.h183330644editdlrm
kvm_book3s_asm.h37770644editdlrm
kvm_book3s_uvmem.h27380644editdlrm
kvm_booke.h22330644editdlrm
kvm_booke_hv_asm.h19600644editdlrm
kvm_fpu.h21990644editdlrm
kvm_guest.h5660644editdlrm
kvm_host.h219660644editdlrm
kvm_para.h7520644editdlrm
kvm_ppc.h366990644editdlrm
libata-portmap.h2490644editdlrm
linkage.h5010644editdlrm
livepatch.h11400644editdlrm
local.h32580644editdlrm
lppaca.h50150644editdlrm
lv1call.h185550644editdlrm
machdep.h96300644editdlrm
macio.h39850644editdlrm
mc146818rtc.h7360644editdlrm
mce.h63960644editdlrm
mediabay.h13750644editdlrm
membarrier.h8770644editdlrm
mem_encrypt.h5320644editdlrm
mman.h14710644editdlrm
mmiowb.h3740644editdlrm
mmu.h112440644editdlrm
mmu_context.h96460644editdlrm
mmzone.h10030644editdlrm
module.h22840644editdlrm
module.lds.h950644editdlrm
mpc5xxx.h4390644editdlrm
mpc6xx.h1430644editdlrm
mpc52xx.h111000644editdlrm
mpc52xx_psc.h101250644editdlrm
mpc85xx.h23820644editdlrm
mpc5121.h38630644editdlrm
mpc8260.h7420644editdlrm
mpic.h143090644editdlrm
mpic_msgr.h34410644editdlrm
mpic_timer.h11830644editdlrm
msi_bitmap.h8670644editdlrm
nmi.h5790644editdlrm
nvram.h28340644editdlrm
ohare.h16840644editdlrm
opal-api.h316800644editdlrm
opal.h178430644editdlrm
paca.h87830644editdlrm
page.h103620644editdlrm
page_32.h16260644editdlrm
page_64.h27160644editdlrm
paravirt.h38810644editdlrm
parport.h9560644editdlrm
pasemi_dma.h232730644editdlrm
pci-bridge.h94810644editdlrm
pci.h36050644editdlrm
percpu.h8150644editdlrm
perf_event.h15090644editdlrm
perf_event_fsl_emb.h12520644editdlrm
perf_event_server.h71040644editdlrm
pgalloc.h20670644editdlrm
pgtable-be-types.h26010644editdlrm
pgtable-types.h18950644editdlrm
pgtable.h40470644editdlrm
pkeys.h42790644editdlrm
plpar_wrappers.h101930644editdlrm
pmac_feature.h133960644editdlrm
pmac_low_i2c.h31000644editdlrm
pmac_pfunc.h82370644editdlrm
pmc.h11160644editdlrm
pmi.h11770644editdlrm
pnv-ocxl.h30690644editdlrm
pnv-pci.h24320644editdlrm
powernv.h4540644editdlrm
ppc-opcode.h314190644editdlrm
ppc-pci.h22820644editdlrm
ppc4xx.h3280644editdlrm
ppc_asm.h205300644editdlrm
probes.h15420644editdlrm
processor.h118980644editdlrm
prom.h73240644editdlrm
ps3.h152190644editdlrm
ps3av.h234220644editdlrm
ps3gpu.h19280644editdlrm
ps3stor.h14080644editdlrm
pte-walk.h22810644editdlrm
ptrace.h105080644editdlrm
qspinlock.h20640644editdlrm
qspinlock_paravirt.h2210644editdlrm
reg.h644650644editdlrm
reg_8xx.h28670644editdlrm
reg_a2.h61280644editdlrm
reg_booke.h338820644editdlrm
reg_fsl_emb.h39610644editdlrm
rheap.h25780644editdlrm
rio.h4240644editdlrm
rtas-types.h29390644editdlrm
rtas.h125740644editdlrm
runlatch.h11840644editdlrm
seccomp.h10430644editdlrm
sections.h19820644editdlrm
secure_boot.h4760644editdlrm
security_features.h35090644editdlrm
secvar.h7650644editdlrm
serial.h4730644editdlrm
setjmp.h4000644editdlrm
setup.h24750644editdlrm
set_memory.h11600644editdlrm
sfp-machine.h126760644editdlrm
shmparam.h2060644editdlrm
signal.h3200644editdlrm
simple_spinlock.h66620644editdlrm
simple_spinlock_types.h4810644editdlrm
slice.h11210644editdlrm
smp.h78040644editdlrm
smu.h197890644editdlrm
sparsemem.h8430644editdlrm
spinlock.h4720644editdlrm
spinlock_types.h3820644editdlrm
spu.h239630644editdlrm
spu_csa.h61660644editdlrm
spu_info.h2720644editdlrm
spu_priv1.h51860644editdlrm
sstep.h47300644editdlrm
stackprotector.h7880644editdlrm
stacktrace.h2970644editdlrm
string.h25220644editdlrm
svm.h6520644editdlrm
swab.h1730644editdlrm
swiotlb.h3740644editdlrm
switch_to.h29660644editdlrm
synch.h20670644editdlrm
syscall.h30570644editdlrm
syscalls.h21890644editdlrm
task_size_32.h5440644editdlrm
task_size_64.h23900644editdlrm
tce.h8920644editdlrm
termios.h6530644editdlrm
thread_info.h61660644editdlrm
time.h29970644editdlrm
timex.h4630644editdlrm
tlb.h23080644editdlrm
tlbflush.h2710644editdlrm
tm.h6240644editdlrm
topology.h35360644editdlrm
trace.h46950644editdlrm
trace_clock.h3720644editdlrm
tsi108.h32640644editdlrm
tsi108_irq.h39160644editdlrm
tsi108_pci.h11910644editdlrm
types.h8220644editdlrm
uaccess.h142070644editdlrm
udbg.h20030644editdlrm
uic.h4030644editdlrm
ultravisor-api.h9410644editdlrm
ultravisor.h21010644editdlrm
uninorth.h84100644editdlrm
unistd.h14450644editdlrm
uprobes.h8010644editdlrm
user.h21920644editdlrm
vas.h75800644editdlrm
vdso.h10960644editdlrm
vdso_datapage.h35700644editdlrm
vermagic.h4900644editdlrm
vga.h12730644editdlrm
vio.h47340644editdlrm
vmalloc.h5540644editdlrm
word-at-a-time.h48780644editdlrm
xics.h45390644editdlrm
xive-regs.h50830644editdlrm
xive.h51910644editdlrm
xmon.h7330644editdlrm
xor.h10170644editdlrm
xor_altivec.h6830644editdlrm
Edit: /usr/src/linux-headers-5.15.0-181/arch/powerpc/include/asm/page.h (10362B)
/* SPDX-License-Identifier: GPL-2.0-or-later */ #ifndef _ASM_POWERPC_PAGE_H #define _ASM_POWERPC_PAGE_H /* * Copyright (C) 2001,2005 IBM Corporation. */ #ifndef __ASSEMBLY__ #include #include #else #include #endif #include /* * On regular PPC32 page size is 4K (but we support 4K/16K/64K/256K pages * on PPC44x and 4K/16K on 8xx). For PPC64 we support either 4K or 64K software * page size. When using 64K pages however, whether we are really supporting * 64K pages in HW or not is irrelevant to those definitions. */ #define PAGE_SHIFT CONFIG_PPC_PAGE_SHIFT #define PAGE_SIZE (ASM_CONST(1) << PAGE_SHIFT) #ifndef __ASSEMBLY__ #ifndef CONFIG_HUGETLB_PAGE #define HPAGE_SHIFT PAGE_SHIFT #elif defined(CONFIG_PPC_BOOK3S_64) extern unsigned int hpage_shift; #define HPAGE_SHIFT hpage_shift #elif defined(CONFIG_PPC_8xx) #define HPAGE_SHIFT 19 /* 512k pages */ #elif defined(CONFIG_PPC_FSL_BOOK3E) #define HPAGE_SHIFT 22 /* 4M pages */ #endif #define HPAGE_SIZE ((1UL) << HPAGE_SHIFT) #define HPAGE_MASK (~(HPAGE_SIZE - 1)) #define HUGETLB_PAGE_ORDER (HPAGE_SHIFT - PAGE_SHIFT) #define HUGE_MAX_HSTATE (MMU_PAGE_COUNT-1) #endif /* * Subtle: (1 << PAGE_SHIFT) is an int, not an unsigned long. So if we * assign PAGE_MASK to a larger type it gets extended the way we want * (i.e. with 1s in the high bits) */ #define PAGE_MASK (~((1 << PAGE_SHIFT) - 1)) /* * KERNELBASE is the virtual address of the start of the kernel, it's often * the same as PAGE_OFFSET, but _might not be_. * * The kdump dump kernel is one example where KERNELBASE != PAGE_OFFSET. * * PAGE_OFFSET is the virtual address of the start of lowmem. * * PHYSICAL_START is the physical address of the start of the kernel. * * MEMORY_START is the physical address of the start of lowmem. * * KERNELBASE, PAGE_OFFSET, and PHYSICAL_START are all configurable on * ppc32 and based on how they are set we determine MEMORY_START. * * For the linear mapping the following equation should be true: * KERNELBASE - PAGE_OFFSET = PHYSICAL_START - MEMORY_START * * Also, KERNELBASE >= PAGE_OFFSET and PHYSICAL_START >= MEMORY_START * * There are two ways to determine a physical address from a virtual one: * va = pa + PAGE_OFFSET - MEMORY_START * va = pa + KERNELBASE - PHYSICAL_START * * If you want to know something's offset from the start of the kernel you * should subtract KERNELBASE. * * If you want to test if something's a kernel address, use is_kernel_addr(). */ #define KERNELBASE ASM_CONST(CONFIG_KERNEL_START) #define PAGE_OFFSET ASM_CONST(CONFIG_PAGE_OFFSET) #define LOAD_OFFSET ASM_CONST((CONFIG_KERNEL_START-CONFIG_PHYSICAL_START)) #if defined(CONFIG_NONSTATIC_KERNEL) #ifndef __ASSEMBLY__ extern phys_addr_t memstart_addr; extern phys_addr_t kernstart_addr; #if defined(CONFIG_RELOCATABLE) && defined(CONFIG_PPC32) extern long long virt_phys_offset; #endif #endif /* __ASSEMBLY__ */ #define PHYSICAL_START kernstart_addr #else /* !CONFIG_NONSTATIC_KERNEL */ #define PHYSICAL_START ASM_CONST(CONFIG_PHYSICAL_START) #endif /* See Description below for VIRT_PHYS_OFFSET */ #if defined(CONFIG_PPC32) && defined(CONFIG_BOOKE) #ifdef CONFIG_RELOCATABLE #define VIRT_PHYS_OFFSET virt_phys_offset #else #define VIRT_PHYS_OFFSET (KERNELBASE - PHYSICAL_START) #endif #endif #ifdef CONFIG_PPC64 #define MEMORY_START 0UL #elif defined(CONFIG_NONSTATIC_KERNEL) #define MEMORY_START memstart_addr #else #define MEMORY_START (PHYSICAL_START + PAGE_OFFSET - KERNELBASE) #endif #ifdef CONFIG_FLATMEM #define ARCH_PFN_OFFSET ((unsigned long)(MEMORY_START >> PAGE_SHIFT)) #ifndef __ASSEMBLY__ extern unsigned long max_mapnr; static inline bool pfn_valid(unsigned long pfn) { unsigned long min_pfn = ARCH_PFN_OFFSET; return pfn >= min_pfn && pfn < max_mapnr; } #endif #endif #define virt_to_pfn(kaddr) (__pa(kaddr) >> PAGE_SHIFT) #define virt_to_page(kaddr) pfn_to_page(virt_to_pfn(kaddr)) #define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT) #define virt_addr_valid(vaddr) ({ \ unsigned long _addr = (unsigned long)vaddr; \ _addr >= PAGE_OFFSET && _addr < (unsigned long)high_memory && \ pfn_valid(virt_to_pfn(_addr)); \ }) /* * On Book-E parts we need __va to parse the device tree and we can't * determine MEMORY_START until then. However we can determine PHYSICAL_START * from information at hand (program counter, TLB lookup). * * On BookE with RELOCATABLE && PPC32 * * With RELOCATABLE && PPC32, we support loading the kernel at any physical * address without any restriction on the page alignment. * * We find the runtime address of _stext and relocate ourselves based on * the following calculation: * * virtual_base = ALIGN_DOWN(KERNELBASE,256M) + * MODULO(_stext.run,256M) * and create the following mapping: * * ALIGN_DOWN(_stext.run,256M) => ALIGN_DOWN(KERNELBASE,256M) * * When we process relocations, we cannot depend on the * existing equation for the __va()/__pa() translations: * * __va(x) = (x) - PHYSICAL_START + KERNELBASE * * Where: * PHYSICAL_START = kernstart_addr = Physical address of _stext * KERNELBASE = Compiled virtual address of _stext. * * This formula holds true iff, kernel load address is TLB page aligned. * * In our case, we need to also account for the shift in the kernel Virtual * address. * * E.g., * * Let the kernel be loaded at 64MB and KERNELBASE be 0xc0000000 (same as PAGE_OFFSET). * In this case, we would be mapping 0 to 0xc0000000, and kernstart_addr = 64M * * Now __va(1MB) = (0x100000) - (0x4000000) + 0xc0000000 * = 0xbc100000 , which is wrong. * * Rather, it should be : 0xc0000000 + 0x100000 = 0xc0100000 * according to our mapping. * * Hence we use the following formula to get the translations right: * * __va(x) = (x) - [ PHYSICAL_START - Effective KERNELBASE ] * * Where : * PHYSICAL_START = dynamic load address.(kernstart_addr variable) * Effective KERNELBASE = virtual_base = * = ALIGN_DOWN(KERNELBASE,256M) + * MODULO(PHYSICAL_START,256M) * * To make the cost of __va() / __pa() more light weight, we introduce * a new variable virt_phys_offset, which will hold : * * virt_phys_offset = Effective KERNELBASE - PHYSICAL_START * = ALIGN_DOWN(KERNELBASE,256M) - * ALIGN_DOWN(PHYSICALSTART,256M) * * Hence : * * __va(x) = x - PHYSICAL_START + Effective KERNELBASE * = x + virt_phys_offset * * and * __pa(x) = x + PHYSICAL_START - Effective KERNELBASE * = x - virt_phys_offset * * On non-Book-E PPC64 PAGE_OFFSET and MEMORY_START are constants so use * the other definitions for __va & __pa. */ #if defined(CONFIG_PPC32) && defined(CONFIG_BOOKE) #define __va(x) ((void *)(unsigned long)((phys_addr_t)(x) + VIRT_PHYS_OFFSET)) #define __pa(x) ((phys_addr_t)(unsigned long)(x) - VIRT_PHYS_OFFSET) #else #ifdef CONFIG_PPC64 #define VIRTUAL_WARN_ON(x) WARN_ON(IS_ENABLED(CONFIG_DEBUG_VIRTUAL) && (x)) /* * gcc miscompiles (unsigned long)(&static_var) - PAGE_OFFSET * with -mcmodel=medium, so we use & and | instead of - and + on 64-bit. * This also results in better code generation. */ #define __va(x) \ ({ \ VIRTUAL_WARN_ON((unsigned long)(x) >= PAGE_OFFSET); \ (void *)(unsigned long)((phys_addr_t)(x) | PAGE_OFFSET); \ }) #define __pa(x) \ ({ \ VIRTUAL_WARN_ON((unsigned long)(x) < PAGE_OFFSET); \ (unsigned long)(x) & 0x0fffffffffffffffUL; \ }) #else /* 32-bit, non book E */ #define __va(x) ((void *)(unsigned long)((phys_addr_t)(x) + PAGE_OFFSET - MEMORY_START)) #define __pa(x) ((unsigned long)(x) - PAGE_OFFSET + MEMORY_START) #endif #endif /* * Unfortunately the PLT is in the BSS in the PPC32 ELF ABI, * and needs to be executable. This means the whole heap ends * up being executable. */ #define VM_DATA_DEFAULT_FLAGS32 VM_DATA_FLAGS_TSK_EXEC #define VM_DATA_DEFAULT_FLAGS64 VM_DATA_FLAGS_NON_EXEC #ifdef __powerpc64__ #include #else #include #endif /* * Don't compare things with KERNELBASE or PAGE_OFFSET to test for * "kernelness", use is_kernel_addr() - it should do what you want. */ #ifdef CONFIG_PPC_BOOK3E_64 #define is_kernel_addr(x) ((x) >= 0x8000000000000000ul) #elif defined(CONFIG_PPC_BOOK3S_64) #define is_kernel_addr(x) ((x) >= PAGE_OFFSET) #else #define is_kernel_addr(x) ((x) >= TASK_SIZE) #endif #ifndef CONFIG_PPC_BOOK3S_64 /* * Use the top bit of the higher-level page table entries to indicate whether * the entries we point to contain hugepages. This works because we know that * the page tables live in kernel space. If we ever decide to support having * page tables at arbitrary addresses, this breaks and will have to change. */ #ifdef CONFIG_PPC64 #define PD_HUGE 0x8000000000000000UL #else #define PD_HUGE 0x80000000 #endif #else /* CONFIG_PPC_BOOK3S_64 */ /* * Book3S 64 stores real addresses in the hugepd entries to * avoid overlaps with _PAGE_PRESENT and _PAGE_PTE. */ #define HUGEPD_ADDR_MASK (0x0ffffffffffffffful & ~HUGEPD_SHIFT_MASK) #endif /* CONFIG_PPC_BOOK3S_64 */ /* * Some number of bits at the level of the page table that points to * a hugepte are used to encode the size. This masks those bits. * On 8xx, HW assistance requires 4k alignment for the hugepte. */ #ifdef CONFIG_PPC_8xx #define HUGEPD_SHIFT_MASK 0xfff #else #define HUGEPD_SHIFT_MASK 0x3f #endif #ifndef __ASSEMBLY__ #ifdef CONFIG_PPC_BOOK3S_64 #include #else #include #endif #ifndef CONFIG_HUGETLB_PAGE #define is_hugepd(pdep) (0) #define pgd_huge(pgd) (0) #endif /* CONFIG_HUGETLB_PAGE */ struct page; extern void clear_user_page(void *page, unsigned long vaddr, struct page *pg); extern void copy_user_page(void *to, void *from, unsigned long vaddr, struct page *p); extern int devmem_is_allowed(unsigned long pfn); #ifdef CONFIG_PPC_SMLPAR void arch_free_page(struct page *page, int order); #define HAVE_ARCH_FREE_PAGE #endif struct vm_area_struct; extern unsigned long kernstart_virt_addr; static inline unsigned long kaslr_offset(void) { return kernstart_virt_addr - KERNELBASE; } #include #endif /* __ASSEMBLY__ */ #include #endif /* _ASM_POWERPC_PAGE_H */