1*c6b99bedSHuacai Chen /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*c6b99bedSHuacai Chen /* 3*c6b99bedSHuacai Chen * Author: Huacai Chen <chenhuacai@loongson.cn> 4*c6b99bedSHuacai Chen * Copyright (C) 2020-2022 Loongson Technology Corporation Limited 5*c6b99bedSHuacai Chen */ 6*c6b99bedSHuacai Chen 7*c6b99bedSHuacai Chen #ifndef __ASSEMBLY__ 8*c6b99bedSHuacai Chen 9*c6b99bedSHuacai Chen #include <asm/asm.h> 10*c6b99bedSHuacai Chen #include <asm/page.h> 11*c6b99bedSHuacai Chen 12*c6b99bedSHuacai Chen static inline unsigned long get_vdso_base(void) 13*c6b99bedSHuacai Chen { 14*c6b99bedSHuacai Chen unsigned long addr; 15*c6b99bedSHuacai Chen 16*c6b99bedSHuacai Chen __asm__( 17*c6b99bedSHuacai Chen " la.pcrel %0, _start\n" 18*c6b99bedSHuacai Chen : "=r" (addr) 19*c6b99bedSHuacai Chen : 20*c6b99bedSHuacai Chen :); 21*c6b99bedSHuacai Chen 22*c6b99bedSHuacai Chen return addr; 23*c6b99bedSHuacai Chen } 24*c6b99bedSHuacai Chen 25*c6b99bedSHuacai Chen static inline const struct vdso_data *get_vdso_data(void) 26*c6b99bedSHuacai Chen { 27*c6b99bedSHuacai Chen return (const struct vdso_data *)(get_vdso_base() - PAGE_SIZE); 28*c6b99bedSHuacai Chen } 29*c6b99bedSHuacai Chen 30*c6b99bedSHuacai Chen #endif /* __ASSEMBLY__ */ 31