getrandom.h 832 B

123456789101112131415161718192021222324252627282930313233
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Copyright (C) 2024 Xi Ruoyao <xry111@xry111.site>. All Rights Reserved.
  4. */
  5. #ifndef __ASM_VDSO_GETRANDOM_H
  6. #define __ASM_VDSO_GETRANDOM_H
  7. #ifndef __ASSEMBLER__
  8. #include <asm/unistd.h>
  9. #include <asm/vdso/vdso.h>
  10. static __always_inline ssize_t getrandom_syscall(void *_buffer, size_t _len, unsigned int _flags)
  11. {
  12. register long ret asm("a0");
  13. register long nr asm("a7") = __NR_getrandom;
  14. register void *buffer asm("a0") = _buffer;
  15. register size_t len asm("a1") = _len;
  16. register unsigned int flags asm("a2") = _flags;
  17. asm volatile(
  18. " syscall 0\n"
  19. : "=r" (ret)
  20. : "r" (nr), "r" (buffer), "r" (len), "r" (flags)
  21. : "$t0", "$t1", "$t2", "$t3", "$t4", "$t5", "$t6", "$t7", "$t8",
  22. "memory");
  23. return ret;
  24. }
  25. #endif /* !__ASSEMBLER__ */
  26. #endif /* __ASM_VDSO_GETRANDOM_H */