The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/compat/netbsd32/netbsd32.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*      $NetBSD: netbsd32.h,v 1.77.4.1 2008/11/25 17:31:26 snj Exp $    */
    2 
    3 /*
    4  * Copyright (c) 1998, 2001, 2008 Matthew R. Green
    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 AUTHOR ``AS IS'' AND ANY EXPRESS OR
   17  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   18  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
   19  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
   20  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
   21  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
   22  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
   23  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   24  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   25  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   26  * SUCH DAMAGE.
   27  */
   28 
   29 #ifndef _COMPAT_NETBSD32_NETBSD32_H_
   30 #define _COMPAT_NETBSD32_NETBSD32_H_
   31 /* We need to change the size of register_t */
   32 #ifdef syscallargs
   33 #undef syscallargs
   34 #endif
   35 /*
   36  * NetBSD 32-bit compatibility module.
   37  */
   38 
   39 #include <sys/systm.h>
   40 #include <sys/mount.h>
   41 #include <sys/stat.h>
   42 #include <sys/statvfs.h>
   43 #include <sys/syscallargs.h>
   44 #include <sys/ipc.h>
   45 #include <sys/shm.h>
   46 #include <sys/ucontext.h>
   47 #include <compat/sys/ucontext.h>
   48 #include <compat/sys/mount.h>
   49 
   50 /*
   51  * first, define the basic types we need.
   52  */
   53 
   54 typedef int32_t netbsd32_long;
   55 typedef uint32_t netbsd32_u_long;
   56 
   57 typedef uint32_t netbsd32_clock_t;
   58 typedef uint32_t netbsd32_size_t;
   59 typedef int32_t netbsd32_ssize_t;
   60 typedef int32_t netbsd32_clockid_t;
   61 typedef int32_t netbsd32_key_t;
   62 typedef int32_t netbsd32_intptr_t;
   63 typedef uint32_t netbsd32_uintptr_t;
   64 
   65 /* netbsd32_[u]int64 are machine dependant and defined below */
   66 
   67 /*
   68  * machine depedant section; must define:
   69  *      netbsd32_pointer_t
   70  *              - 32-bit pointer type, normally uint32_t but can be int32_t
   71  *                for platforms which rely on sign-extension of pointers
   72  *                such as SH-5.
   73  *      NETBSD32PTR64(p32)
   74  *              - Translate a 32-bit pointer into something valid in a
   75  *                64-bit context.
   76  *      struct netbsd32_sigcontext
   77  *              - 32bit compatibility sigcontext structure for this arch.
   78  *      netbsd32_sigcontextp_t
   79  *              - type of pointer to above, normally uint32_t
   80  *      void netbsd32_setregs(struct proc *p, struct exec_package *pack,
   81  *          unsigned long stack);
   82  *      int netbsd32_sigreturn(struct proc *p, void *v,
   83  *          register_t *retval);
   84  *      void netbsd32_sendsig(sig_t catcher, int sig, int mask, u_long code);
   85  *      char netbsd32_esigcode[], netbsd32_sigcode[]
   86  *              - the above are abvious
   87  *
   88  * pull in the netbsd32 machine dependant header, that may help with the
   89  * above, or it may be provided via the MD layer itself.
   90  */
   91 #include <machine/netbsd32_machdep.h>
   92 
   93 /* netbsd32_machdep.h will have (typically) defined:
   94 #define NETBSD32_POINTER_TYPE uint32_t
   95 typedef struct { NETBSD32_POINTER_TYPE i32; } netbsd32_pointer_t;
   96 */
   97 
   98 /*
   99  * Conversion functions for the rest of the compat32 code:
  100  *
  101  * NETBSD32PTR64()      Convert user-supplied 32bit pointer to 'void *'
  102  * NETBSD32PTR32()      Assign a 'void *' to a 32bit pointer variable
  103  * NETBSD32PTR32PLUS()  Add an integer to a 32bit pointer
  104  *
  105  * Under rare circumstances the following get used:
  106  *
  107  * NETBSD32PTR32I()     Convert 'void *' to the 32bit pointer base type.
  108  * NETBSD32IPTR64()     Convert 32bit pointer base type to 'void *'
  109  */
  110 #define NETBSD32PTR64(p32)              NETBSD32IPTR64((p32).i32)
  111 #define NETBSD32PTR32(p32, p64)         ((p32).i32 = NETBSD32PTR32I(p64))
  112 #define NETBSD32PTR32PLUS(p32, incr)    ((p32).i32 += incr)
  113 
  114 static __inline NETBSD32_POINTER_TYPE
  115 NETBSD32PTR32I(const void *p64) { return (uintptr_t)p64; }
  116 static __inline void *
  117 NETBSD32IPTR64(NETBSD32_POINTER_TYPE p32) { return (void *)(intptr_t)p32; }
  118 
  119 /* Nothing should be using the raw type, so kill it */
  120 #undef NETBSD32_POINTER_TYPE
  121 
  122 /*
  123  * 64 bit integers only have 4-byte alignment on some 32 bit ports,
  124  * but always have 8-byte alignment on 64 bit systems.
  125  * NETBSD32_INT64_ALIGN may be __attribute__((__aligned__(4)))
  126  */
  127 typedef int64_t netbsd32_int64 NETBSD32_INT64_ALIGN;
  128 typedef uint64_t netbsd32_uint64 NETBSD32_INT64_ALIGN;
  129 #undef NETBSD32_INT64_ALIGN
  130 
  131 /*
  132  * all pointers are netbsd32_pointer_t (defined in <machine/netbsd32_machdep.h>)
  133  */
  134 
  135 typedef netbsd32_pointer_t netbsd32_voidp;
  136 typedef netbsd32_pointer_t netbsd32_u_shortp;
  137 typedef netbsd32_pointer_t netbsd32_charp;
  138 typedef netbsd32_pointer_t netbsd32_u_charp;
  139 typedef netbsd32_pointer_t netbsd32_charpp;
  140 typedef netbsd32_pointer_t netbsd32_size_tp;
  141 typedef netbsd32_pointer_t netbsd32_intp;
  142 typedef netbsd32_pointer_t netbsd32_longp;
  143 typedef netbsd32_pointer_t netbsd32_caddrp;
  144 typedef netbsd32_pointer_t netbsd32_caddr;
  145 typedef netbsd32_pointer_t netbsd32_gid_tp;
  146 typedef netbsd32_pointer_t netbsd32_fsid_tp_t;
  147 typedef netbsd32_pointer_t netbsd32_lwpidp;
  148 typedef netbsd32_pointer_t netbsd32_ucontextp;
  149 typedef netbsd32_pointer_t netbsd32_caddr_t;
  150 typedef netbsd32_pointer_t netbsd32_lwpctlp;
  151 
  152 /*
  153  * now, the compatibility structures and their fake pointer types.
  154  */
  155 
  156 /* from <sys/types.h> */
  157 typedef netbsd32_pointer_t netbsd32_fd_setp_t;
  158 typedef netbsd32_intptr_t netbsd32_semid_t;
  159 typedef netbsd32_pointer_t netbsd32_semidp_t;
  160 
  161 /* from <sys/uio.h> */
  162 typedef netbsd32_pointer_t netbsd32_iovecp_t;
  163 struct netbsd32_iovec {
  164         netbsd32_voidp   iov_base;      /* Base address. */
  165         netbsd32_size_t  iov_len;       /* Length. */
  166 };
  167 
  168 /* from <sys/time.h> */
  169 typedef int32_t netbsd32_timer_t;
  170 typedef int32_t netbsd32_time_t;
  171 typedef netbsd32_pointer_t netbsd32_timerp_t;
  172 
  173 typedef netbsd32_pointer_t netbsd32_timespecp_t;
  174 struct netbsd32_timespec {
  175         netbsd32_time_t tv_sec;                 /* seconds */
  176         netbsd32_long   tv_nsec;        /* and nanoseconds */
  177 };
  178 
  179 typedef netbsd32_pointer_t netbsd32_timevalp_t;
  180 struct netbsd32_timeval {
  181         netbsd32_long   tv_sec;         /* seconds */
  182         netbsd32_long   tv_usec;        /* and microseconds */
  183 };
  184 
  185 typedef netbsd32_pointer_t netbsd32_timezonep_t;
  186 struct netbsd32_timezone {
  187         int     tz_minuteswest; /* minutes west of Greenwich */
  188         int     tz_dsttime;     /* type of dst correction */
  189 };
  190 
  191 typedef netbsd32_pointer_t netbsd32_itimervalp_t;
  192 struct  netbsd32_itimerval {
  193         struct  netbsd32_timeval it_interval;   /* timer interval */
  194         struct  netbsd32_timeval it_value;      /* current value */
  195 };
  196 
  197 typedef netbsd32_pointer_t netbsd32_itimerspecp_t;
  198 struct netbsd32_itimerspec {
  199         struct netbsd32_timespec it_interval;
  200         struct netbsd32_timespec it_value;
  201 };
  202 
  203 /* from <sys/mount.h> */
  204 typedef netbsd32_pointer_t netbsd32_fidp_t;
  205 
  206 typedef netbsd32_pointer_t netbsd32_fhandlep_t;
  207 typedef netbsd32_pointer_t netbsd32_compat_30_fhandlep_t;
  208 
  209 typedef netbsd32_pointer_t netbsd32_statfsp_t;
  210 struct netbsd32_statfs {
  211         short   f_type;                 /* type of file system */
  212         unsigned short  f_flags;        /* copy of mount flags */
  213         netbsd32_long   f_bsize;        /* fundamental file system block size */
  214         netbsd32_long   f_iosize;       /* optimal transfer block size */
  215         netbsd32_long   f_blocks;       /* total data blocks in file system */
  216         netbsd32_long   f_bfree;        /* free blocks in fs */
  217         netbsd32_long   f_bavail;       /* free blocks avail to non-superuser */
  218         netbsd32_long   f_files;        /* total file nodes in file system */
  219         netbsd32_long   f_ffree;        /* free file nodes in fs */
  220         fsid_t  f_fsid;                 /* file system id */
  221         uid_t   f_owner;                /* user that mounted the file system */
  222         netbsd32_long   f_spare[4];     /* spare for later */
  223         char    f_fstypename[MFSNAMELEN]; /* fs type name */
  224         char    f_mntonname[MNAMELEN];    /* directory on which mounted */
  225         char    f_mntfromname[MNAMELEN];  /* mounted file system */
  226 };
  227 
  228 /* from <sys/poll.h> */
  229 typedef netbsd32_pointer_t netbsd32_pollfdp_t;
  230 
  231 /* from <sys/resource.h> */
  232 typedef netbsd32_pointer_t netbsd32_rusagep_t;
  233 struct  netbsd32_rusage {
  234         struct netbsd32_timeval ru_utime;/* user time used */
  235         struct netbsd32_timeval ru_stime;/* system time used */
  236         netbsd32_long   ru_maxrss;      /* max resident set size */
  237         netbsd32_long   ru_ixrss;       /* integral shared memory size */
  238         netbsd32_long   ru_idrss;       /* integral unshared data " */
  239         netbsd32_long   ru_isrss;       /* integral unshared stack " */
  240         netbsd32_long   ru_minflt;      /* page reclaims */
  241         netbsd32_long   ru_majflt;      /* page faults */
  242         netbsd32_long   ru_nswap;       /* swaps */
  243         netbsd32_long   ru_inblock;     /* block input operations */
  244         netbsd32_long   ru_oublock;     /* block output operations */
  245         netbsd32_long   ru_msgsnd;      /* messages sent */
  246         netbsd32_long   ru_msgrcv;      /* messages received */
  247         netbsd32_long   ru_nsignals;    /* signals received */
  248         netbsd32_long   ru_nvcsw;       /* voluntary context switches */
  249         netbsd32_long   ru_nivcsw;      /* involuntary " */
  250 };
  251 
  252 typedef netbsd32_pointer_t netbsd32_orlimitp_t;
  253 
  254 typedef netbsd32_pointer_t netbsd32_rlimitp_t;
  255 
  256 struct netbsd32_loadavg {
  257         fixpt_t ldavg[3];
  258         netbsd32_long   fscale;
  259 };
  260 
  261 /* from <sys/ipc.h> */
  262 typedef netbsd32_pointer_t netbsd32_ipc_permp_t;
  263 struct netbsd32_ipc_perm {
  264         uid_t           cuid;   /* creator user id */
  265         gid_t           cgid;   /* creator group id */
  266         uid_t           uid;    /* user id */
  267         gid_t           gid;    /* group id */
  268         mode_t          mode;   /* r/w permission */
  269         unsigned short  _seq;   /* sequence # (to generate unique msg/sem/shm id) */
  270         netbsd32_key_t  _key;   /* user specified msg/sem/shm key */
  271 };
  272 struct netbsd32_ipc_perm14 {
  273         unsigned short  cuid;   /* creator user id */
  274         unsigned short  cgid;   /* creator group id */
  275         unsigned short  uid;    /* user id */
  276         unsigned short  gid;    /* group id */
  277         unsigned short  mode;   /* r/w permission */
  278         unsigned short  seq;    /* sequence # (to generate unique msg/sem/shm id) */
  279         netbsd32_key_t  key;    /* user specified msg/sem/shm key */
  280 };
  281 
  282 /* from <sys/msg.h> */
  283 typedef netbsd32_pointer_t netbsd32_msgp_t;
  284 struct netbsd32_msg {
  285         netbsd32_msgp_t msg_next;       /* next msg in the chain */
  286         netbsd32_long   msg_type;       /* type of this message */
  287                                         /* >0 -> type of this message */
  288                                         /* 0 -> free header */
  289         unsigned short  msg_ts;         /* size of this message */
  290         short   msg_spot;               /* location of start of msg in buffer */
  291 };
  292 
  293 typedef netbsd32_pointer_t netbsd32_msqid_dsp_t;
  294 typedef uint32_t netbsd32_msgqnum_t;
  295 typedef netbsd32_size_t netbsd32_msglen_t;
  296 
  297 struct netbsd32_msqid_ds {
  298         struct netbsd32_ipc_perm msg_perm;      /* operation permission strucure */
  299         netbsd32_msgqnum_t      msg_qnum;       /* number of messages in the queue */
  300         netbsd32_msglen_t       msg_qbytes;     /* max # of bytes in the queue */
  301         pid_t           msg_lspid;      /* process ID of last msgsend() */
  302         pid_t           msg_lrpid;      /* process ID of last msgrcv() */
  303         netbsd32_time_t         msg_stime;      /* time of last msgsend() */
  304         netbsd32_time_t         msg_rtime;      /* time of last msgrcv() */
  305         netbsd32_time_t         msg_ctime;      /* time of last change */
  306 
  307         /*
  308          * These members are private and used only in the internal
  309          * implementation of this interface.
  310          */
  311         netbsd32_msgp_t _msg_first;     /* first message in the queue */
  312         netbsd32_msgp_t _msg_last;      /* last message in the queue */
  313         netbsd32_msglen_t _msg_cbytes;  /* # of bytes currently in queue */
  314 };
  315 struct netbsd32_msqid_ds14 {
  316         struct  netbsd32_ipc_perm14 msg_perm;   /* msg queue permission bits */
  317         netbsd32_msgp_t msg_first;      /* first message in the queue */
  318         netbsd32_msgp_t msg_last;       /* last message in the queue */
  319         netbsd32_u_long msg_cbytes;     /* number of bytes in use on the queue */
  320         netbsd32_u_long msg_qnum;       /* number of msgs in the queue */
  321         netbsd32_u_long msg_qbytes;     /* max # of bytes on the queue */
  322         pid_t msg_lspid;                /* pid of last msgsnd() */
  323         pid_t msg_lrpid;                /* pid of last msgrcv() */
  324         netbsd32_time_t msg_stime;      /* time of last msgsnd() */
  325         netbsd32_long   msg_pad1;
  326         netbsd32_time_t msg_rtime;      /* time of last msgrcv() */
  327         netbsd32_long   msg_pad2;
  328         netbsd32_time_t msg_ctime;      /* time of last msgctl() */
  329         netbsd32_long   msg_pad3;
  330         netbsd32_long   msg_pad4[4];
  331 };
  332 
  333 /* from  <sys/sa.h> */
  334 typedef netbsd32_pointer_t netbsd32_sa_upcall_t;
  335 typedef netbsd32_pointer_t netbsd32_sa_upcallp_t;
  336 
  337 void    netbsd32_cpu_upcall(struct lwp *, int, int, int, void *, void *,
  338     void *, sa_upcall_t);
  339 
  340 /* from <sys/sem.h> */
  341 typedef netbsd32_pointer_t netbsd32_semp_t;
  342 
  343 typedef netbsd32_pointer_t netbsd32_semid_dsp_t;
  344 struct netbsd32_semid_ds {
  345         struct netbsd32_ipc_perm        sem_perm;/* operation permission struct */
  346         unsigned short  sem_nsems;      /* number of sems in set */
  347         netbsd32_time_t sem_otime;      /* last operation time */
  348         netbsd32_time_t sem_ctime;      /* last change time */
  349 
  350         /*
  351          * These members are private and used only in the internal
  352          * implementation of this interface.
  353          */
  354         netbsd32_semp_t _sem_base;      /* pointer to first semaphore in set */
  355 };
  356 
  357 struct netbsd32_semid_ds14 {
  358         struct netbsd32_ipc_perm14      sem_perm;/* operation permission struct */
  359         netbsd32_semp_t sem_base;       /* pointer to first semaphore in set */
  360         unsigned short  sem_nsems;      /* number of sems in set */
  361         netbsd32_time_t sem_otime;      /* last operation time */
  362         netbsd32_long   sem_pad1;       /* SVABI/386 says I need this here */
  363         netbsd32_time_t sem_ctime;      /* last change time */
  364                                         /* Times measured in secs since */
  365                                         /* 00:00:00 GMT, Jan. 1, 1970 */
  366         netbsd32_long   sem_pad2;       /* SVABI/386 says I need this here */
  367         netbsd32_long   sem_pad3[4];    /* SVABI/386 says I need this here */
  368 };
  369 
  370 typedef uint32_t netbsd32_semunu_t;
  371 typedef netbsd32_pointer_t netbsd32_semunp_t;
  372 union netbsd32_semun {
  373         int     val;                    /* value for SETVAL */
  374         netbsd32_semid_dsp_t buf;       /* buffer for IPC_STAT & IPC_SET */
  375         netbsd32_u_shortp array;        /* array for GETALL & SETALL */
  376 };
  377 
  378 typedef netbsd32_pointer_t netbsd32_sembufp_t;
  379 struct netbsd32_sembuf {
  380         unsigned short  sem_num;        /* semaphore # */
  381         short           sem_op;         /* semaphore operation */
  382         short           sem_flg;        /* operation flags */
  383 };
  384 
  385 /* from <sys/shm.h> */
  386 typedef netbsd32_pointer_t netbsd32_shmid_dsp_t;
  387 struct netbsd32_shmid_ds {
  388         struct netbsd32_ipc_perm shm_perm; /* operation permission structure */
  389         netbsd32_size_t shm_segsz;      /* size of segment in bytes */
  390         pid_t           shm_lpid;       /* process ID of last shm op */
  391         pid_t           shm_cpid;       /* process ID of creator */
  392         shmatt_t        shm_nattch;     /* number of current attaches */
  393         netbsd32_time_t shm_atime;      /* time of last shmat() */
  394         netbsd32_time_t shm_dtime;      /* time of last shmdt() */
  395         netbsd32_time_t shm_ctime;      /* time of last change by shmctl() */
  396         netbsd32_voidp  _shm_internal;  /* sysv stupidity */
  397 };
  398 
  399 struct netbsd32_shmid_ds14 {
  400         struct netbsd32_ipc_perm14 shm_perm; /* operation permission structure */
  401         int             shm_segsz;      /* size of segment in bytes */
  402         pid_t           shm_lpid;       /* process ID of last shm op */
  403         pid_t           shm_cpid;       /* process ID of creator */
  404         short           shm_nattch;     /* number of current attaches */
  405         netbsd32_time_t shm_atime;      /* time of last shmat() */
  406         netbsd32_time_t shm_dtime;      /* time of last shmdt() */
  407         netbsd32_time_t shm_ctime;      /* time of last change by shmctl() */
  408         netbsd32_voidp  _shm_internal;  /* sysv stupidity */
  409 };
  410 
  411 /* from <sys/signal.h> */
  412 typedef netbsd32_pointer_t netbsd32_sigsetp_t;
  413 typedef netbsd32_pointer_t netbsd32_sigactionp_t;
  414 struct  netbsd32_sigaction {
  415         netbsd32_voidp netbsd32_sa_handler;     /* signal handler */
  416         sigset_t netbsd32_sa_mask;              /* signal mask to apply */
  417         int     netbsd32_sa_flags;              /* see signal options below */
  418 };
  419 
  420 typedef netbsd32_pointer_t netbsd32_sigaltstack13p_t;
  421 struct netbsd32_sigaltstack13 {
  422         netbsd32_charp  ss_sp;          /* signal stack base */
  423         int     ss_size;                /* signal stack length */
  424         int     ss_flags;               /* SS_DISABLE and/or SS_ONSTACK */
  425 };
  426 
  427 typedef netbsd32_pointer_t netbsd32_sigaltstackp_t;
  428 struct netbsd32_sigaltstack {
  429         netbsd32_voidp  ss_sp;          /* signal stack base */
  430         netbsd32_size_t ss_size;        /* signal stack length */
  431         int     ss_flags;               /* SS_DISABLE and/or SS_ONSTACK */
  432 };
  433 
  434 typedef netbsd32_pointer_t netbsd32_sigstackp_t;
  435 struct  netbsd32_sigstack {
  436         netbsd32_voidp  ss_sp;          /* signal stack pointer */
  437         int     ss_onstack;             /* current status */
  438 };
  439 
  440 typedef netbsd32_pointer_t netbsd32_sigvecp_t;
  441 struct  netbsd32_sigvec {
  442         netbsd32_voidp sv_handler;      /* signal handler */
  443         int     sv_mask;                /* signal mask to apply */
  444         int     sv_flags;               /* see signal options below */
  445 };
  446 
  447 typedef netbsd32_pointer_t netbsd32_siginfop_t;
  448 
  449 union netbsd32_sigval {
  450         int     sival_int;
  451         netbsd32_voidp  sival_ptr;
  452 };
  453 
  454 typedef netbsd32_pointer_t netbsd32_sigeventp_t;
  455 struct netbsd32_sigevent {
  456         int     sigev_notify;
  457         int     sigev_signo;
  458         union netbsd32_sigval   sigev_value;
  459         netbsd32_voidp  sigev_notify_function;
  460         netbsd32_voidp  sigev_notify_attributes;
  461 };
  462 
  463 /* from <sys/sigtypes.h> */
  464 typedef netbsd32_pointer_t netbsd32_stackp_t;
  465 
  466 /* from <sys/socket.h> */
  467 typedef netbsd32_pointer_t netbsd32_sockaddrp_t;
  468 typedef netbsd32_pointer_t netbsd32_osockaddrp_t;
  469 
  470 typedef netbsd32_pointer_t netbsd32_msghdrp_t;
  471 struct netbsd32_msghdr {
  472         netbsd32_caddr_t msg_name;              /* optional address */
  473         unsigned int    msg_namelen;            /* size of address */
  474         netbsd32_iovecp_t msg_iov;              /* scatter/gather array */
  475         unsigned int    msg_iovlen;             /* # elements in msg_iov */
  476         netbsd32_caddr_t msg_control;           /* ancillary data, see below */
  477         unsigned int    msg_controllen;         /* ancillary data buffer len */
  478         int     msg_flags;              /* flags on received message */
  479 };
  480 
  481 typedef netbsd32_pointer_t netbsd32_omsghdrp_t;
  482 struct netbsd32_omsghdr {
  483         netbsd32_caddr_t msg_name;              /* optional address */
  484         int              msg_namelen;           /* size of address */
  485         netbsd32_iovecp_t msg_iov;              /* scatter/gather array */
  486         int              msg_iovlen;            /* # elements in msg_iov */
  487         netbsd32_caddr_t msg_accrights;         /* access rights sent/recvd */
  488         int              msg_accrightslen;
  489 };
  490 
  491 /* from <sys/stat.h> */
  492 typedef netbsd32_pointer_t netbsd32_stat12p_t;
  493 struct netbsd32_stat12 {                /* NetBSD-1.2 stat struct */
  494         dev_t           st_dev;         /* inode's device */
  495         uint32_t        st_ino;         /* inode's number */
  496         uint16_t        st_mode;        /* inode protection mode */
  497         uint16_t        st_nlink;       /* number of hard links */
  498         uid_t           st_uid;         /* user ID of the file's owner */
  499         gid_t           st_gid;         /* group ID of the file's group */
  500         dev_t           st_rdev;        /* device type */
  501         struct netbsd32_timespec st_atimespec;/* time of last access */
  502         struct netbsd32_timespec st_mtimespec;/* time of last data modification */
  503         struct netbsd32_timespec st_ctimespec;/* time of last file status change */
  504         netbsd32_int64  st_size;        /* file size, in bytes */
  505         netbsd32_int64  st_blocks;      /* blocks allocated for file */
  506         uint32_t        st_blksize;     /* optimal blocksize for I/O */
  507         uint32_t        st_flags;       /* user defined flags for file */
  508         uint32_t        st_gen;         /* file generation number */
  509         int32_t         st_lspare;
  510         netbsd32_int64  st_qspare[2];
  511 };
  512 
  513 typedef netbsd32_pointer_t netbsd32_stat43p_t;
  514 struct netbsd32_stat43 {                /* BSD-4.3 stat struct */
  515         uint16_t  st_dev;               /* inode's device */
  516         uint32_t  st_ino;               /* inode's number */
  517         uint16_t  st_mode;              /* inode protection mode */
  518         uint16_t  st_nlink;             /* number of hard links */
  519         uint16_t  st_uid;               /* user ID of the file's owner */
  520         uint16_t  st_gid;               /* group ID of the file's group */
  521         uint16_t  st_rdev;              /* device type */
  522         int32_t   st_size;              /* file size, in bytes */
  523         struct netbsd32_timespec st_atimespec;/* time of last access */
  524         struct netbsd32_timespec st_mtimespec;/* time of last data modification */
  525         struct netbsd32_timespec st_ctimespec;/* time of last file status change */
  526         int32_t   st_blksize;           /* optimal blocksize for I/O */
  527         int32_t   st_blocks;            /* blocks allocated for file */
  528         uint32_t  st_flags;             /* user defined flags for file */
  529         uint32_t  st_gen;               /* file generation number */
  530 };
  531 typedef netbsd32_pointer_t netbsd32_stat13p_t;
  532 struct netbsd32_stat13 {
  533         dev_t     st_dev;               /* inode's device */
  534         uint32_t  st_ino;               /* inode's number */
  535         mode_t    st_mode;              /* inode protection mode */
  536         nlink_t   st_nlink;             /* number of hard links */
  537         uid_t     st_uid;               /* user ID of the file's owner */
  538         gid_t     st_gid;               /* group ID of the file's group */
  539         dev_t     st_rdev;              /* device type */
  540         struct netbsd32_timespec st_atimespec;/* time of last access */
  541         struct netbsd32_timespec st_mtimespec;/* time of last data modification */
  542         struct netbsd32_timespec st_ctimespec;/* time of last file status change */
  543         netbsd32_int64    st_size;              /* file size, in bytes */
  544         netbsd32_uint64  st_blocks;             /* blocks allocated for file */
  545         blksize_t st_blksize;           /* optimal blocksize for I/O */
  546         uint32_t  st_flags;             /* user defined flags for file */
  547         uint32_t  st_gen;               /* file generation number */
  548         uint32_t  st_spare;             /* file generation number */
  549         struct    netbsd32_timespec st_birthtimespec;
  550         uint32_t  st_spare2;
  551 };
  552 
  553 typedef netbsd32_pointer_t netbsd32_statp_t;
  554 struct netbsd32_stat {
  555         dev_t           st_dev;         /* inode's device */
  556         mode_t          st_mode;        /* inode protection mode */
  557         netbsd32_uint64 st_ino;         /* inode's number */
  558         nlink_t         st_nlink;       /* number of hard links */
  559         uid_t           st_uid;         /* user ID of the file's owner */
  560         gid_t           st_gid;         /* group ID of the file's group */
  561         dev_t           st_rdev;        /* device type */
  562         struct netbsd32_timespec st_atimespec;/* time of last access */
  563         struct netbsd32_timespec st_mtimespec;/* time of last data modification */
  564         struct netbsd32_timespec st_ctimespec;/* time of last file status change */
  565         struct netbsd32_timespec st_birthtimespec; /* time of creation */
  566         netbsd32_int64  st_size;        /* file size, in bytes */
  567         netbsd32_uint64 st_blocks;      /* blocks allocated for file */
  568         blksize_t       st_blksize;     /* optimal blocksize for I/O */
  569         uint32_t        st_flags;       /* user defined flags for file */
  570         uint32_t        st_gen;         /* file generation number */
  571         uint32_t        st_spare[2];
  572 };
  573 
  574 /* from <sys/statvfs.h> */
  575 typedef netbsd32_pointer_t netbsd32_statvfsp_t;
  576 struct netbsd32_statvfs {
  577         netbsd32_u_long f_flag;         /* copy of mount exported flags */
  578         netbsd32_u_long f_bsize;        /* system block size */
  579         netbsd32_u_long f_frsize;       /* system fragment size */
  580         netbsd32_u_long f_iosize;       /* optimal file system block size */
  581         netbsd32_uint64 f_blocks;       /* number of blocks in file system */
  582         netbsd32_uint64 f_bfree;        /* free blocks avail in file system */
  583         netbsd32_uint64 f_bavail;       /* free blocks avail to non-root */
  584         netbsd32_uint64 f_bresvd;       /* blocks reserved for root */
  585         netbsd32_uint64 f_files;        /* total file nodes in file system */
  586         netbsd32_uint64 f_ffree;        /* free file nodes in file system */
  587         netbsd32_uint64 f_favail;       /* free file nodes avail to non-root */
  588         netbsd32_uint64 f_fresvd;       /* file nodes reserved for root */
  589         netbsd32_uint64 f_syncreads;    /* count of sync reads since mount */
  590         netbsd32_uint64 f_syncwrites;   /* count of sync writes since mount */
  591         netbsd32_uint64 f_asyncreads;   /* count of async reads since mount */
  592         netbsd32_uint64 f_asyncwrites;  /* count of async writes since mount */
  593         fsid_t          f_fsidx;        /* NetBSD compatible fsid */
  594         netbsd32_u_long f_fsid;         /* Posix compatible fsid */
  595         netbsd32_u_long f_namemax;      /* maximum filename length */
  596         uid_t           f_owner;        /* user that mounted the file system */
  597         uint32_t        f_spare[4];     /* spare space */
  598         char    f_fstypename[_VFS_NAMELEN]; /* fs type name */
  599         char    f_mntonname[_VFS_MNAMELEN];  /* directory on which mounted */
  600         char    f_mntfromname[_VFS_MNAMELEN];  /* mounted file system */
  601 };
  602 
  603 /* from <sys/timex.h> */
  604 typedef netbsd32_pointer_t netbsd32_ntptimevalp_t;
  605 struct netbsd32_ntptimeval30 {
  606         struct netbsd32_timeval time;   /* current time (ro) */
  607         netbsd32_long maxerror; /* maximum error (us) (ro) */
  608         netbsd32_long esterror; /* estimated error (us) (ro) */
  609 };
  610 struct netbsd32_ntptimeval {
  611         struct netbsd32_timespec time;  /* current time (ro) */
  612         netbsd32_long maxerror; /* maximum error (us) (ro) */
  613         netbsd32_long esterror; /* estimated error (us) (ro) */
  614         netbsd32_long tai;      /* TAI offset */
  615         int time_state;         /* time status */
  616 };
  617 
  618 typedef netbsd32_pointer_t netbsd32_timexp_t;
  619 struct netbsd32_timex {
  620         unsigned int modes;     /* clock mode bits (wo) */
  621         netbsd32_long offset;   /* time offset (us) (rw) */
  622         netbsd32_long freq;     /* frequency offset (scaled ppm) (rw) */
  623         netbsd32_long maxerror; /* maximum error (us) (rw) */
  624         netbsd32_long esterror; /* estimated error (us) (rw) */
  625         int status;             /* clock status bits (rw) */
  626         netbsd32_long constant; /* pll time constant (rw) */
  627         netbsd32_long precision;        /* clock precision (us) (ro) */
  628         netbsd32_long tolerance;        /* clock frequency tolerance (scaled
  629                                  * ppm) (ro) */
  630         /*
  631          * The following read-only structure members are implemented
  632          * only if the PPS signal discipline is configured in the
  633          * kernel.
  634          */
  635         netbsd32_long ppsfreq;  /* pps frequency (scaled ppm) (ro) */
  636         netbsd32_long jitter;   /* pps jitter (us) (ro) */
  637         int shift;              /* interval duration (s) (shift) (ro) */
  638         netbsd32_long stabil;   /* pps stability (scaled ppm) (ro) */
  639         netbsd32_long jitcnt;   /* jitter limit exceeded (ro) */
  640         netbsd32_long calcnt;   /* calibration intervals (ro) */
  641         netbsd32_long errcnt;   /* calibration errors (ro) */
  642         netbsd32_long stbcnt;   /* stability limit exceeded (ro) */
  643 };
  644 
  645 /* from <ufs/lfs/lfs.h> */
  646 typedef netbsd32_pointer_t netbsd32_block_infop_t;  /* XXX broken */
  647 
  648 /* from <sys/utsname.h> */
  649 typedef netbsd32_pointer_t netbsd32_utsnamep_t;
  650 
  651 /* from <compat/common/kern_info_09.c> */
  652 typedef netbsd32_pointer_t netbsd32_outsnamep_t;
  653 
  654 /* from <arch/sparc{,64}/include/vuid_event.h> */
  655 typedef struct firm_event32 {
  656         unsigned short  id;             /* key or MS_* or LOC_[XY]_DELTA */
  657         unsigned short  pad;            /* unused, at least by X11 */
  658         int     value;          /* VKEY_{UP,DOWN} or locator delta */
  659         struct netbsd32_timeval time;
  660 } Firm_event32;
  661 
  662 /* from <sys/uuid.h> */
  663 typedef netbsd32_pointer_t netbsd32_uuidp_t;
  664 
  665 /* from <sys/event.h> */
  666 typedef netbsd32_pointer_t netbsd32_keventp_t;
  667 
  668 struct netbsd32_kevent {
  669         netbsd32_uintptr_t      ident;
  670         uint32_t                filter;
  671         uint32_t                flags;
  672         uint32_t                fflags;
  673         netbsd32_int64          data;
  674         netbsd32_intptr_t       udata;
  675 };
  676 
  677 /* from <sys/sched.h> */
  678 typedef netbsd32_pointer_t netbsd32_sched_paramp_t;
  679 typedef netbsd32_pointer_t netbsd32_cpusetp_t;
  680 
  681 #if 0
  682 int     netbsd32_kevent(struct lwp *, void *, register_t *);
  683 #endif
  684 
  685 /*
  686  * here are some macros to convert between netbsd32 and sparc64 types.
  687  * note that they do *NOT* act like good macros and put ()'s around all
  688  * arguments cuz this _breaks_ SCARG().
  689  */
  690 #define NETBSD32TO64(s32uap, uap, name) \
  691             SCARG(uap, name) = SCARG(s32uap, name)
  692 #define NETBSD32TOP(s32uap, uap, name, type) \
  693             SCARG(uap, name) = SCARG_P32(s32uap, name)
  694 #define NETBSD32TOX(s32uap, uap, name, type) \
  695             SCARG(uap, name) = (type)SCARG(s32uap, name)
  696 #define NETBSD32TOX64(s32uap, uap, name, type) \
  697             SCARG(uap, name) = (type)(long)SCARG(s32uap, name)
  698 
  699 /* and some standard versions */
  700 #define NETBSD32TO64_UAP(name)          NETBSD32TO64(uap, &ua, name);
  701 #define NETBSD32TOP_UAP(name, type)     NETBSD32TOP(uap, &ua, name, type);
  702 #define NETBSD32TOX_UAP(name, type)     NETBSD32TOX(uap, &ua, name, type);
  703 #define NETBSD32TOX64_UAP(name, type)   NETBSD32TOX64(uap, &ua, name, type);
  704 
  705 #define SCARG_P32(uap, name) NETBSD32PTR64(SCARG(uap, name))
  706 
  707 int     coredump_netbsd32(struct lwp *, void *);
  708 
  709 /*
  710  * random other stuff
  711  */
  712 #include <compat/common/compat_util.h>
  713 #include <compat/sys/siginfo.h>
  714 
  715 vaddr_t netbsd32_vm_default_addr(struct proc *, vaddr_t, vsize_t);
  716 void netbsd32_adjust_limits(struct proc *);
  717 
  718 void    netbsd32_si_to_si32(siginfo32_t *, const siginfo_t *);
  719 void    netbsd32_si32_to_si(siginfo_t *, const siginfo32_t *);
  720 
  721 void    startlwp32(void *);
  722 struct netbsd32___semctl14_args;
  723 int     do_netbsd32___semctl14(struct lwp *, const struct netbsd32___semctl14_args *, register_t *, void *);
  724 
  725 struct iovec *netbsd32_get_iov(struct netbsd32_iovec *, int, struct iovec *,
  726             int);
  727 
  728 #ifdef SYSCTL_SETUP_PROTO
  729 SYSCTL_SETUP_PROTO(netbsd32_sysctl_emul_setup);
  730 #endif /* SYSCTL_SETUP_PROTO */
  731 #endif /* _COMPAT_NETBSD32_NETBSD32_H_ */

Cache object: bb0406238c7dc27dbc3303fe1ead1a0f


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.