1*ee0d0305SXi Ruoyao /* SPDX-License-Identifier: GPL-2.0-only */ 2*ee0d0305SXi Ruoyao /* 3*ee0d0305SXi Ruoyao * Copyright (C) 2025 Xi Ruoyao <xry111@xry111.site>. All Rights Reserved. 4*ee0d0305SXi Ruoyao */ 5*ee0d0305SXi Ruoyao #ifndef __ASM_VDSO_GETRANDOM_H 6*ee0d0305SXi Ruoyao #define __ASM_VDSO_GETRANDOM_H 7*ee0d0305SXi Ruoyao 8*ee0d0305SXi Ruoyao #ifndef __ASSEMBLY__ 9*ee0d0305SXi Ruoyao 10*ee0d0305SXi Ruoyao #include <asm/unistd.h> 11*ee0d0305SXi Ruoyao getrandom_syscall(void * _buffer,size_t _len,unsigned int _flags)12*ee0d0305SXi Ruoyaostatic __always_inline ssize_t getrandom_syscall(void *_buffer, size_t _len, unsigned int _flags) 13*ee0d0305SXi Ruoyao { 14*ee0d0305SXi Ruoyao register long ret asm("a0"); 15*ee0d0305SXi Ruoyao register long nr asm("a7") = __NR_getrandom; 16*ee0d0305SXi Ruoyao register void *buffer asm("a0") = _buffer; 17*ee0d0305SXi Ruoyao register size_t len asm("a1") = _len; 18*ee0d0305SXi Ruoyao register unsigned int flags asm("a2") = _flags; 19*ee0d0305SXi Ruoyao 20*ee0d0305SXi Ruoyao asm volatile ("ecall\n" 21*ee0d0305SXi Ruoyao : "+r" (ret) 22*ee0d0305SXi Ruoyao : "r" (nr), "r" (buffer), "r" (len), "r" (flags) 23*ee0d0305SXi Ruoyao : "memory"); 24*ee0d0305SXi Ruoyao 25*ee0d0305SXi Ruoyao return ret; 26*ee0d0305SXi Ruoyao } 27*ee0d0305SXi Ruoyao 28*ee0d0305SXi Ruoyao #endif /* !__ASSEMBLY__ */ 29*ee0d0305SXi Ruoyao 30*ee0d0305SXi Ruoyao #endif /* __ASM_VDSO_GETRANDOM_H */ 31