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/i386/linux/linux.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 /*-
    2  * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
    3  *
    4  * Copyright (c) 1994-1996 Søren Schmidt
    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 AND CONTRIBUTORS ``AS IS'' AND
   17  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   19  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
   20  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   21  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   22  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   23  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   24  * LIABILITY, 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  * $FreeBSD$
   28  */
   29 
   30 #ifndef _I386_LINUX_H_
   31 #define _I386_LINUX_H_
   32 
   33 #include <sys/abi_compat.h>
   34 
   35 #include <compat/linux/linux.h>
   36 #include <i386/linux/linux_syscall.h>
   37 
   38 #define LINUX_LEGACY_SYSCALLS
   39 
   40 #define LINUX_DTRACE    linuxulator
   41 
   42 /*
   43  * Provide a separate set of types for the Linux types.
   44  */
   45 typedef int             l_int;
   46 typedef int32_t         l_long;
   47 typedef int64_t         l_longlong;
   48 typedef short           l_short;
   49 typedef unsigned int    l_uint;
   50 typedef uint32_t        l_ulong;
   51 typedef uint64_t        l_ulonglong;
   52 typedef unsigned short  l_ushort;
   53 
   54 typedef char            *l_caddr_t;
   55 typedef l_ulong         l_uintptr_t;
   56 typedef l_long          l_clock_t;
   57 typedef l_int           l_daddr_t;
   58 typedef l_ushort        l_dev_t;
   59 typedef l_uint          l_gid_t;
   60 typedef l_ushort        l_gid16_t;
   61 typedef l_ulong         l_ino_t;
   62 typedef l_int           l_key_t;
   63 typedef l_longlong      l_loff_t;
   64 typedef l_ushort        l_mode_t;
   65 typedef l_long          l_off_t;
   66 typedef l_int           l_pid_t;
   67 typedef l_uint          l_size_t;
   68 typedef l_long          l_suseconds_t;
   69 typedef l_long          l_time_t;
   70 typedef l_longlong      l_time64_t;
   71 typedef l_uint          l_uid_t;
   72 typedef l_ushort        l_uid16_t;
   73 typedef l_int           l_timer_t;
   74 typedef l_int           l_mqd_t;
   75 typedef l_ulong         l_fd_mask;
   76 
   77 #include <compat/linux/linux_siginfo.h>
   78 
   79 typedef struct {
   80         l_int           val[2];
   81 } l_fsid_t;
   82 
   83 typedef struct {
   84         l_time_t        tv_sec;
   85         l_suseconds_t   tv_usec;
   86 } l_timeval;
   87 
   88 typedef struct {
   89         l_time64_t      tv_sec;
   90         l_time64_t      tv_usec;
   91 } l_sock_timeval;
   92 
   93 #define l_fd_set        fd_set
   94 
   95 /*
   96  * Miscellaneous
   97  */
   98 #define LINUX_AT_COUNT          20      /* Count of used aux entry types.
   99                                          * Keep this synchronized with
  100                                          * linux_fixup_elf() code.
  101                                          */
  102 struct l___sysctl_args
  103 {
  104         l_int           *name;
  105         l_int           nlen;
  106         void            *oldval;
  107         l_size_t        *oldlenp;
  108         void            *newval;
  109         l_size_t        newlen;
  110         l_ulong         __spare[4];
  111 };
  112 
  113 /* Resource limits */
  114 #define LINUX_RLIMIT_CPU        0
  115 #define LINUX_RLIMIT_FSIZE      1
  116 #define LINUX_RLIMIT_DATA       2
  117 #define LINUX_RLIMIT_STACK      3
  118 #define LINUX_RLIMIT_CORE       4
  119 #define LINUX_RLIMIT_RSS        5
  120 #define LINUX_RLIMIT_NPROC      6
  121 #define LINUX_RLIMIT_NOFILE     7
  122 #define LINUX_RLIMIT_MEMLOCK    8
  123 #define LINUX_RLIMIT_AS         9       /* Address space limit */
  124 
  125 #define LINUX_RLIM_NLIMITS      10
  126 
  127 struct l_rlimit {
  128         l_ulong rlim_cur;
  129         l_ulong rlim_max;
  130 };
  131 
  132 struct l_mmap_argv {
  133         l_uintptr_t     addr;
  134         l_size_t        len;
  135         l_int           prot;
  136         l_int           flags;
  137         l_int           fd;
  138         l_off_t         pgoff;
  139 };
  140 
  141 /*
  142  * stat family of syscalls
  143  */
  144 struct l_timespec {
  145         l_time_t        tv_sec;
  146         l_long          tv_nsec;
  147 };
  148 
  149 /* __kernel_timespec */
  150 struct l_timespec64 {
  151         l_time64_t      tv_sec;
  152         l_longlong      tv_nsec;
  153 };
  154 
  155 struct l_newstat {
  156         l_ushort        st_dev;
  157         l_ushort        __pad1;
  158         l_ulong         st_ino;
  159         l_ushort        st_mode;
  160         l_ushort        st_nlink;
  161         l_ushort        st_uid;
  162         l_ushort        st_gid;
  163         l_ushort        st_rdev;
  164         l_ushort        __pad2;
  165         l_ulong         st_size;
  166         l_ulong         st_blksize;
  167         l_ulong         st_blocks;
  168         struct l_timespec       st_atim;
  169         struct l_timespec       st_mtim;
  170         struct l_timespec       st_ctim;
  171         l_ulong         __unused4;
  172         l_ulong         __unused5;
  173 };
  174 
  175 struct l_stat {
  176         l_ushort        st_dev;
  177         l_ulong         st_ino;
  178         l_ushort        st_mode;
  179         l_ushort        st_nlink;
  180         l_ushort        st_uid;
  181         l_ushort        st_gid;
  182         l_ushort        st_rdev;
  183         l_long          st_size;
  184         struct l_timespec       st_atim;
  185         struct l_timespec       st_mtim;
  186         struct l_timespec       st_ctim;
  187         l_long          st_blksize;
  188         l_long          st_blocks;
  189         l_ulong         st_flags;
  190         l_ulong         st_gen;
  191 };
  192 
  193 struct l_stat64 {
  194         l_ushort        st_dev;
  195         u_char          __pad0[10];
  196         l_ulong         __st_ino;
  197         l_uint          st_mode;
  198         l_uint          st_nlink;
  199         l_ulong         st_uid;
  200         l_ulong         st_gid;
  201         l_ushort        st_rdev;
  202         u_char          __pad3[10];
  203         l_longlong      st_size;
  204         l_ulong         st_blksize;
  205         l_ulong         st_blocks;
  206         l_ulong         __pad4;
  207         struct l_timespec       st_atim;
  208         struct l_timespec       st_mtim;
  209         struct l_timespec       st_ctim;
  210         l_ulonglong     st_ino;
  211 };
  212 
  213 struct l_statfs64 {
  214         l_int           f_type;
  215         l_int           f_bsize;
  216         uint64_t        f_blocks;
  217         uint64_t        f_bfree;
  218         uint64_t        f_bavail;
  219         uint64_t        f_files;
  220         uint64_t        f_ffree;
  221         l_fsid_t        f_fsid;
  222         l_int           f_namelen;
  223         l_int           f_frsize;
  224         l_int           f_flags;
  225         l_int           f_spare[4];
  226 };
  227 
  228 /* sigaction flags */
  229 #define LINUX_SA_NOCLDSTOP      0x00000001
  230 #define LINUX_SA_NOCLDWAIT      0x00000002
  231 #define LINUX_SA_SIGINFO        0x00000004
  232 #define LINUX_SA_RESTORER       0x04000000
  233 #define LINUX_SA_ONSTACK        0x08000000
  234 #define LINUX_SA_RESTART        0x10000000
  235 #define LINUX_SA_INTERRUPT      0x20000000
  236 #define LINUX_SA_NOMASK         0x40000000
  237 #define LINUX_SA_ONESHOT        0x80000000
  238 
  239 /* sigaltstack */
  240 #define LINUX_MINSIGSTKSZ       2048
  241 
  242 typedef void    (*l_handler_t)(l_int);
  243 typedef l_ulong l_osigset_t;
  244 
  245 typedef struct {
  246         l_handler_t     lsa_handler;
  247         l_osigset_t     lsa_mask;
  248         l_ulong         lsa_flags;
  249         void    (*lsa_restorer)(void);
  250 } l_osigaction_t;
  251 
  252 typedef struct {
  253         l_handler_t     lsa_handler;
  254         l_ulong         lsa_flags;
  255         void    (*lsa_restorer)(void);
  256         l_sigset_t      lsa_mask;
  257 } l_sigaction_t;
  258 
  259 typedef struct {
  260         l_uintptr_t     ss_sp;
  261         l_int           ss_flags;
  262         l_size_t        ss_size;
  263 } l_stack_t;
  264 
  265 extern struct sysentvec linux_sysvec;
  266 
  267 /*
  268  * arch specific open/fcntl flags
  269  */
  270 #define LINUX_F_GETLK64         12
  271 #define LINUX_F_SETLK64         13
  272 #define LINUX_F_SETLKW64        14
  273 
  274 union l_semun {
  275         l_int           val;
  276         l_uintptr_t     buf;
  277         l_ushort        *array;
  278         l_uintptr_t     __buf;
  279         l_uintptr_t     __pad;
  280 };
  281 
  282 struct l_ifmap {
  283         l_ulong         mem_start;
  284         l_ulong         mem_end;
  285         l_ushort        base_addr;
  286         u_char          irq;
  287         u_char          dma;
  288         u_char          port;
  289 };
  290 
  291 struct l_ifreq {
  292         union {
  293                 char    ifrn_name[LINUX_IFNAMSIZ];
  294         } ifr_ifrn;
  295 
  296         union {
  297                 struct l_sockaddr       ifru_addr;
  298                 struct l_sockaddr       ifru_dstaddr;
  299                 struct l_sockaddr       ifru_broadaddr;
  300                 struct l_sockaddr       ifru_netmask;
  301                 struct l_sockaddr       ifru_hwaddr;
  302                 l_short         ifru_flags[1];
  303                 l_int           ifru_ivalue;
  304                 l_int           ifru_mtu;
  305                 struct l_ifmap  ifru_map;
  306                 char            ifru_slave[LINUX_IFNAMSIZ];
  307                 l_caddr_t       ifru_data;
  308         } ifr_ifru;
  309 };
  310 
  311 #define ifr_name        ifr_ifrn.ifrn_name      /* Interface name */
  312 #define ifr_hwaddr      ifr_ifru.ifru_hwaddr    /* MAC address */
  313 #define ifr_ifindex     ifr_ifru.ifru_ivalue    /* Interface index */
  314 
  315 struct l_user_desc {
  316         l_uint          entry_number;
  317         l_uint          base_addr;
  318         l_uint          limit;
  319         l_uint          seg_32bit:1;
  320         l_uint          contents:2;
  321         l_uint          read_exec_only:1;
  322         l_uint          limit_in_pages:1;
  323         l_uint          seg_not_present:1;
  324         l_uint          useable:1;
  325 };
  326 
  327 struct l_desc_struct {
  328         unsigned long   a, b;
  329 };
  330 
  331 #define LINUX_LOWERWORD 0x0000ffff
  332 
  333 /*
  334  * Macros which does the same thing as those in Linux include/asm-um/ldt-i386.h.
  335  * These convert Linux user space descriptor to machine one.
  336  */
  337 #define LINUX_LDT_entry_a(info)                                 \
  338         ((((info)->base_addr & LINUX_LOWERWORD) << 16) |        \
  339         ((info)->limit & LINUX_LOWERWORD))
  340 
  341 #define LINUX_ENTRY_B_READ_EXEC_ONLY    9
  342 #define LINUX_ENTRY_B_CONTENTS          10
  343 #define LINUX_ENTRY_B_SEG_NOT_PRESENT   15
  344 #define LINUX_ENTRY_B_BASE_ADDR         16
  345 #define LINUX_ENTRY_B_USEABLE           20
  346 #define LINUX_ENTRY_B_SEG32BIT          22
  347 #define LINUX_ENTRY_B_LIMIT             23
  348 
  349 #define LINUX_LDT_entry_b(info)                                                 \
  350         (((info)->base_addr & 0xff000000) |                                     \
  351         ((info)->limit & 0xf0000) |                                             \
  352         ((info)->contents << LINUX_ENTRY_B_CONTENTS) |                          \
  353         (((info)->seg_not_present == 0) << LINUX_ENTRY_B_SEG_NOT_PRESENT) |     \
  354         (((info)->base_addr & 0x00ff0000) >> LINUX_ENTRY_B_BASE_ADDR) |         \
  355         (((info)->read_exec_only == 0) << LINUX_ENTRY_B_READ_EXEC_ONLY) |       \
  356         ((info)->seg_32bit << LINUX_ENTRY_B_SEG32BIT) |                         \
  357         ((info)->useable << LINUX_ENTRY_B_USEABLE) |                            \
  358         ((info)->limit_in_pages << LINUX_ENTRY_B_LIMIT) | 0x7000)
  359 
  360 #define LINUX_LDT_empty(info)           \
  361         ((info)->base_addr == 0 &&      \
  362         (info)->limit == 0 &&           \
  363         (info)->contents == 0 &&        \
  364         (info)->seg_not_present == 1 && \
  365         (info)->read_exec_only == 1 &&  \
  366         (info)->seg_32bit == 0 &&       \
  367         (info)->limit_in_pages == 0 &&  \
  368         (info)->useable == 0)
  369 
  370 /*
  371  * Macros for converting segments.
  372  * They do the same as those in arch/i386/kernel/process.c in Linux.
  373  */
  374 #define LINUX_GET_BASE(desc)                            \
  375         ((((desc)->a >> 16) & LINUX_LOWERWORD) |        \
  376         (((desc)->b << 16) & 0x00ff0000) |              \
  377         ((desc)->b & 0xff000000))
  378 
  379 #define LINUX_GET_LIMIT(desc)                   \
  380         (((desc)->a & LINUX_LOWERWORD) |        \
  381         ((desc)->b & 0xf0000))
  382 
  383 #define LINUX_GET_32BIT(desc)           \
  384         (((desc)->b >> LINUX_ENTRY_B_SEG32BIT) & 1)
  385 #define LINUX_GET_CONTENTS(desc)        \
  386         (((desc)->b >> LINUX_ENTRY_B_CONTENTS) & 3)
  387 #define LINUX_GET_WRITABLE(desc)        \
  388         (((desc)->b >> LINUX_ENTRY_B_READ_EXEC_ONLY) & 1)
  389 #define LINUX_GET_LIMIT_PAGES(desc)     \
  390         (((desc)->b >> LINUX_ENTRY_B_LIMIT) & 1)
  391 #define LINUX_GET_PRESENT(desc)         \
  392         (((desc)->b >> LINUX_ENTRY_B_SEG_NOT_PRESENT) & 1)
  393 #define LINUX_GET_USEABLE(desc)         \
  394         (((desc)->b >> LINUX_ENTRY_B_USEABLE) & 1)
  395 
  396 #define linux_copyout_rusage(r, u)      copyout(r, u, sizeof(*r))
  397 
  398 /* robust futexes */
  399 struct linux_robust_list {
  400         struct linux_robust_list        *next;
  401 };
  402 
  403 struct linux_robust_list_head {
  404         struct linux_robust_list        list;
  405         l_long                          futex_offset;
  406         struct linux_robust_list        *pending_list;
  407 };
  408 
  409 #endif /* !_I386_LINUX_H_ */

Cache object: 1b8420344f1f26a71293b1ac5a69ca6a


[ 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.