Home | History | Annotate | Line # | Download | only in aarch64
      1 /*	$NetBSD: linux_machdep.h,v 1.3 2021/11/30 01:52:06 ryo Exp $	*/
      2 
      3 /*-
      4  * Copyright (c) 2021 The NetBSD Foundation, Inc.
      5  * All rights reserved.
      6  *
      7  * Redistribution and use in source and binary forms, with or without
      8  * modification, are permitted provided that the following conditions
      9  * are met:
     10  * 1. Redistributions of source code must retain the above copyright
     11  *    notice, this list of conditions and the following disclaimer.
     12  * 2. Redistributions in binary form must reproduce the above copyright
     13  *    notice, this list of conditions and the following disclaimer in the
     14  *    documentation and/or other materials provided with the distribution.
     15  *
     16  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     17  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     18  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     19  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     20  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     23  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     24  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     25  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     26  * POSSIBILITY OF SUCH DAMAGE.
     27  */
     28 
     29 #ifndef _AARCH64_LINUX_MACHDEP_H
     30 #define _AARCH64_LINUX_MACHDEP_H
     31 
     32 #include <aarch64/reg.h>
     33 #include <compat/linux/common/linux_types.h>
     34 #include <compat/linux/common/linux_signal.h>
     35 #include <compat/linux/common/linux_siginfo.h>
     36 
     37 /* from $LINUXSRC/arch/arm64/include/uapi/asm/sigcontext.h */
     38 struct linux_aarch64_ctx {
     39 	uint32_t magic;
     40 	uint32_t size;
     41 };
     42 
     43 #define FPSIMD_MAGIC	0x46508001
     44 struct fpsimd_context {
     45 	struct linux_aarch64_ctx head;
     46 	uint32_t fpsr;
     47 	uint32_t fpcr;
     48 	union fpelem vregs[32];
     49 };
     50 
     51 /* from $LINUXSRC/arch/arm64/include/uapi/asm/sigcontext.h */
     52 struct linux_sigcontext {
     53 	uint64_t fault_address;
     54 	uint64_t regs[31];
     55 	uint64_t sp;
     56 	uint64_t pc;
     57 	uint64_t pstate;
     58 	uint8_t __reserved[4096] __attribute__((__aligned__(16)));
     59 };
     60 
     61 /* from $LINUXSRC/arch/arm64/include/uapi/asm/ucontext.h */
     62 struct linux_ucontext {
     63 	unsigned long luc_flags;
     64 	struct linux_ucontext *luc_link;
     65 	linux_stack_t luc_stack;
     66 	linux_sigset_t luc_sigmask;
     67 	uint8_t __reserved[1024 / 8 - sizeof(linux_sigset_t)];
     68 	struct linux_sigcontext luc_mcontext;
     69 };
     70 
     71 /* from $LINUXSRC/arch/arm64/kernel/signal.c */
     72 struct linux_rt_sigframe {
     73 	struct linux_siginfo info;
     74 	struct linux_ucontext uc;
     75 };
     76 
     77 /*
     78  * Not required for COMPAT_LINUX,
     79  * but required for COMPAT_LINUX32.
     80  */
     81 struct linux_sys_open_args {
     82 	syscallarg(const char *) path;
     83 	syscallarg(int) flags;
     84 	syscallarg(linux_umode_t) mode;
     85 };
     86 int linux_sys_open(struct lwp *, const struct linux_sys_open_args *, register_t *);
     87 
     88 struct linux_sys_eventfd_args {
     89 	syscallarg(unsigned int) initval;
     90 };
     91 int linux_sys_eventfd(struct lwp *, const struct linux_sys_eventfd_args *, register_t *);
     92 
     93 struct linux_sys_llseek_args {
     94 	syscallarg(int) fd;
     95 	syscallarg(u_int32_t) ohigh;
     96 	syscallarg(u_int32_t) olow;
     97 	syscallarg(void *) res;
     98 	syscallarg(int) whence;
     99 };
    100 int linux_sys_llseek(struct lwp *, const struct linux_sys_llseek_args *, register_t *);
    101 
    102 struct linux_sys_unlink_args {
    103 	syscallarg(const char *) path;
    104 };
    105 int linux_sys_unlink(struct lwp *, const struct linux_sys_unlink_args *, register_t *);
    106 
    107 struct linux_sys_mknod_args {
    108 	syscallarg(const char *) path;
    109 	syscallarg(linux_umode_t) mode;
    110 	syscallarg(unsigned) dev;
    111 };
    112 int linux_sys_mknod(struct lwp *, const struct linux_sys_mknod_args *, register_t *);
    113 
    114 struct linux_sys_alarm_args {
    115 	syscallarg(unsigned int) secs;
    116 };
    117 int linux_sys_alarm(struct lwp *, const struct linux_sys_alarm_args *, register_t *);
    118 
    119 int linux_sys_pause(struct lwp *, const void *, register_t *);
    120 
    121 #ifdef _KERNEL
    122 __BEGIN_DECLS
    123 void linux_syscall_intern(struct proc *);
    124 __END_DECLS
    125 #endif /* !_KERNEL */
    126 
    127 #if BYTE_ORDER != BIG_ENDIAN
    128 #define LINUX_UNAME_ARCH	"aarch64"
    129 #else
    130 #define LINUX_UNAME_ARCH	"aarch64_be"
    131 #endif
    132 #define LINUX_LARGEFILE64
    133 
    134 #endif /* !_AARCH64_LINUX_MACHDEP_H */
    135