Author: emaste
Date: Fri Jun 15 19:09:17 2018
New Revision: 335232
URL: https://svnweb.freebsd.org/changeset/base/335232

Log:
  arm64: add arm64 linux.h based on i386 linuxulator and Linux headers
  
  Sponsored by: Turing Robotic Industries

Added:
  head/sys/arm64/linux/linux.h   (contents, props changed)

Added: head/sys/arm64/linux/linux.h
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/sys/arm64/linux/linux.h        Fri Jun 15 19:09:17 2018        
(r335232)
@@ -0,0 +1,321 @@
+/*-
+ * Copyright (c) 1994-1996 Søren Schmidt
+ * Copyright (c) 2013 Dmitry Chagin
+ * Copyright (c) 2018 Turing Robotic Industries Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * $FreeBSD$
+ */
+#ifndef _ARM64_LINUX_H_
+#define        _ARM64_LINUX_H_
+
+#include <compat/linux/linux.h>
+#include <arm64/linux/linux_syscall.h>
+
+/* Debugging support */
+#define DEBUG
+extern u_char linux_debug_map[];
+#define        ldebug(name)    isclr(linux_debug_map, LINUX_SYS_linux_ ## name)
+#define        ARGS(nm, fmt)   "linux(%ld/%ld): "#nm"("fmt")\n",               
        \
+                       (long)td->td_proc->p_pid, (long)td->td_tid
+#define        LMSG(fmt)       "linux(%ld/%ld): "fmt"\n",                      
        \
+                       (long)td->td_proc->p_pid, (long)td->td_tid
+#define        LINUX_DTRACE    linuxulator
+
+#define        PTRIN(v)        (void *)(v)
+#define        PTROUT(v)       (uintptr_t)(v)
+
+#define        CP(src,dst,fld) do { (dst).fld = (src).fld; } while (0)
+#define        CP2(src,dst,sfld,dfld) do { (dst).dfld = (src).sfld; } while (0)
+#define        PTRIN_CP(src,dst,fld) \
+       do { (dst).fld = PTRIN((src).fld); } while (0)
+
+/* Provide a separate set of types for the Linux types */
+typedef int32_t                l_int;
+typedef int64_t                l_long;
+typedef int16_t                l_short;
+typedef uint32_t       l_uint;
+typedef uint64_t       l_ulong;
+typedef uint16_t       l_ushort;
+
+typedef l_ulong                l_uintptr_t;
+typedef l_long         l_clock_t;
+typedef l_int          l_daddr_t;
+typedef l_ulong                l_dev_t;
+typedef l_uint         l_gid_t;
+typedef l_ushort       l_gid16_t;      /* XXX */
+typedef l_uint         l_uid_t;
+typedef l_ushort       l_uid16_t;      /* XXX */
+typedef l_ulong                l_ino_t;
+typedef l_int          l_key_t;
+typedef l_long         l_loff_t;
+typedef l_uint         l_mode_t;
+typedef l_long         l_off_t;
+typedef l_int          l_pid_t;
+typedef l_ulong                l_size_t;
+typedef l_long         l_suseconds_t;
+typedef l_long         l_time_t;
+typedef l_int          l_timer_t;      /* XXX */
+typedef l_ulong                l_fd_mask;
+
+typedef struct {
+       l_int           val[2];
+} l_fsid_t;
+
+typedef struct {
+       l_time_t        tv_sec;
+       l_suseconds_t   tv_usec;
+} l_timeval;
+
+#define        l_fd_set        fd_set
+
+/* Miscellaneous */
+#define        LINUX_AT_COUNT          20
+
+struct l___sysctl_args
+{
+       l_uintptr_t     name;
+       l_int           nlen;
+       l_uintptr_t     oldval;
+       l_uintptr_t     oldlenp;
+       l_uintptr_t     newval;
+       l_uintptr_t     newlen;
+       l_ulong         __spare[4];
+};
+
+/* Resource limits */
+#define        LINUX_RLIMIT_CPU        0
+#define        LINUX_RLIMIT_FSIZE      1
+#define        LINUX_RLIMIT_DATA       2
+#define        LINUX_RLIMIT_STACK      3
+#define        LINUX_RLIMIT_CORE       4
+#define        LINUX_RLIMIT_RSS        5
+#define        LINUX_RLIMIT_NPROC      6
+#define        LINUX_RLIMIT_NOFILE     7
+#define        LINUX_RLIMIT_MEMLOCK    8
+#define        LINUX_RLIMIT_AS         9       /* Address space limit */
+
+#define        LINUX_RLIM_NLIMITS      10
+
+struct l_rlimit {
+       l_ulong         rlim_cur;
+       l_ulong         rlim_max;
+};
+
+/* stat family of syscalls */
+struct l_timespec {
+       l_time_t        tv_sec;
+       l_long          tv_nsec;
+};
+
+struct l_newstat {
+       l_dev_t         st_dev;
+       l_ino_t         st_ino;
+       l_uint          st_mode;
+       l_uint          st_nlink;
+
+       l_uid_t         st_uid;
+       l_gid_t         st_gid;
+
+       l_dev_t         st_rdev;
+       l_ulong         __st_pad1;
+       l_off_t         st_size;
+       l_int           st_blksize;
+       l_int           __st_pad2;
+       l_long          st_blocks;
+
+       struct l_timespec       st_atim;
+       struct l_timespec       st_mtim;
+       struct l_timespec       st_ctim;
+       l_uint          __unused1;
+       l_uint          __unused2;
+};
+
+/* sigaction flags */
+#define        LINUX_SA_NOCLDSTOP      0x00000001
+#define        LINUX_SA_NOCLDWAIT      0x00000002
+#define        LINUX_SA_SIGINFO        0x00000004
+#define        LINUX_SA_RESTORER       0x04000000
+#define        LINUX_SA_ONSTACK        0x08000000
+#define        LINUX_SA_RESTART        0x10000000
+#define        LINUX_SA_INTERRUPT      0x20000000      /* XXX */
+#define        LINUX_SA_NOMASK         0x40000000      /* SA_NODEFER */
+#define        LINUX_SA_ONESHOT        0x80000000      /* SA_RESETHAND */
+
+/* sigprocmask actions */
+#define        LINUX_SIG_BLOCK         0
+#define        LINUX_SIG_UNBLOCK       1
+#define        LINUX_SIG_SETMASK       2
+
+/* sigaltstack */
+#define        LINUX_MINSIGSTKSZ       2048            /* XXX */
+
+typedef void   (*l_handler_t)(l_int);
+
+typedef struct {
+       l_handler_t     lsa_handler;
+       l_sigset_t      lsa_mask;
+       l_ulong         lsa_flags;
+       l_uintptr_t     lsa_restorer;
+} l_sigaction_t;                               /* XXX */
+
+typedef struct {
+       l_uintptr_t     ss_sp;
+       l_int           ss_flags;
+       l_size_t        ss_size;
+} l_stack_t;
+
+#define        LINUX_SI_PREAMBLE_SIZE  (4 * sizeof(int))
+#define        LINUX_SI_MAX_SIZE       128
+#define        LINUX_SI_PAD_SIZE       ((LINUX_SI_MAX_SIZE - \
+                                   LINUX_SI_PREAMBLE_SIZE) / sizeof(l_int))
+typedef union l_sigval {
+       l_int           sival_int;
+       l_uintptr_t     sival_ptr;
+} l_sigval_t;
+
+typedef struct l_siginfo {
+       l_int           lsi_signo;
+       l_int           lsi_errno;
+       l_int           lsi_code;
+       union {
+               l_int   _pad[LINUX_SI_PAD_SIZE];
+
+               struct {
+                       l_pid_t         _pid;
+                       l_uid_t         _uid;
+               } _kill;
+
+               struct {
+                       l_timer_t       _tid;
+                       l_int           _overrun;
+                       char            _pad[sizeof(l_uid_t) - sizeof(int)];
+                       union l_sigval  _sigval;
+                       l_uint          _sys_private;
+               } _timer;
+
+               struct {
+                       l_pid_t         _pid;           /* sender's pid */
+                       l_uid_t         _uid;           /* sender's uid */
+                       union l_sigval  _sigval;
+               } _rt;
+
+               struct {
+                       l_pid_t         _pid;           /* which child */
+                       l_uid_t         _uid;           /* sender's uid */
+                       l_int           _status;        /* exit code */
+                       l_clock_t       _utime;
+                       l_clock_t       _stime;
+               } _sigchld;
+
+               struct {
+                       l_uintptr_t     _addr;  /* Faulting insn/memory ref. */
+               } _sigfault;
+
+               struct {
+                       l_long          _band;  /* POLL_IN,POLL_OUT,POLL_MSG */
+                       l_int           _fd;
+               } _sigpoll;
+       } _sifields;
+} l_siginfo_t;
+
+#define        lsi_pid         _sifields._kill._pid
+#define        lsi_uid         _sifields._kill._uid
+#define        lsi_tid         _sifields._timer._tid
+#define        lsi_overrun     _sifields._timer._overrun
+#define        lsi_sys_private _sifields._timer._sys_private
+#define        lsi_status      _sifields._sigchld._status
+#define        lsi_utime       _sifields._sigchld._utime
+#define        lsi_stime       _sifields._sigchld._stime
+#define        lsi_value       _sifields._rt._sigval
+#define        lsi_int         _sifields._rt._sigval.sival_int
+#define        lsi_ptr         _sifields._rt._sigval.sival_ptr
+#define        lsi_addr        _sifields._sigfault._addr
+#define        lsi_band        _sifields._sigpoll._band
+#define        lsi_fd          _sifields._sigpoll._fd
+
+union l_semun {
+       l_int           val;
+       l_uintptr_t     buf;
+       l_uintptr_t     array;
+       l_uintptr_t     __buf;
+       l_uintptr_t     __pad;
+};
+
+struct l_sockaddr {
+       l_ushort        sa_family;
+       char            sa_data[14];
+};
+
+struct l_ifmap {
+       l_ulong         mem_start;
+       l_ulong         mem_end;
+       l_ushort        base_addr;
+       u_char          irq;
+       u_char          dma;
+       u_char          port;
+} __packed;
+
+#define        LINUX_IFHWADDRLEN       6
+#define        LINUX_IFNAMSIZ          16
+
+struct l_ifreq {
+       union {
+               char    ifrn_name[LINUX_IFNAMSIZ];
+       } ifr_ifrn;
+
+       union {
+               struct l_sockaddr       ifru_addr;
+               struct l_sockaddr       ifru_dstaddr;
+               struct l_sockaddr       ifru_broadaddr;
+               struct l_sockaddr       ifru_netmask;
+               struct l_sockaddr       ifru_hwaddr;
+               l_short         ifru_flags[1];
+               l_int           ifru_ivalue;
+               l_int           ifru_mtu;
+               struct l_ifmap  ifru_map;
+               char            ifru_slave[LINUX_IFNAMSIZ];
+               l_uintptr_t     ifru_data;
+       } ifr_ifru;
+} __packed;
+
+#define        ifr_name        ifr_ifrn.ifrn_name      /* Interface name */
+#define        ifr_hwaddr      ifr_ifru.ifru_hwaddr    /* MAC address */
+#define        ifr_ifindex     ifr_ifru.ifru_ivalue    /* Interface index */
+
+#define        linux_copyout_rusage(r, u)      copyout(r, u, sizeof(*r))
+
+/* robust futexes */
+struct linux_robust_list {
+       l_uintptr_t                     next;
+};
+
+struct linux_robust_list_head {
+       struct linux_robust_list        list;
+       l_long                          futex_offset;
+       l_uintptr_t                     pending_list;
+};
+
+#endif /* _ARM64_LINUX_H_ */
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to