1283424Sdchagin/*- 2283424Sdchagin * Copyright (c) 2013 Dmitry Chagin 3283424Sdchagin * Copyright (c) 1994-1996 S��ren Schmidt 4283424Sdchagin * All rights reserved. 5283424Sdchagin * 6283424Sdchagin * Redistribution and use in source and binary forms, with or without 7283424Sdchagin * modification, are permitted provided that the following conditions 8283424Sdchagin * are met: 9283424Sdchagin * 1. Redistributions of source code must retain the above copyright 10283424Sdchagin * notice, this list of conditions and the following disclaimer 11283424Sdchagin * in this position and unchanged. 12283424Sdchagin * 2. Redistributions in binary form must reproduce the above copyright 13283424Sdchagin * notice, this list of conditions and the following disclaimer in the 14283424Sdchagin * documentation and/or other materials provided with the distribution. 15283424Sdchagin * 3. The name of the author may not be used to endorse or promote products 16283424Sdchagin * derived from this software without specific prior written permission 17283424Sdchagin * 18283424Sdchagin * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 19283424Sdchagin * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 20283424Sdchagin * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 21283424Sdchagin * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 22283424Sdchagin * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 23283424Sdchagin * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24283424Sdchagin * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25283424Sdchagin * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26283424Sdchagin * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 27283424Sdchagin * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28283424Sdchagin * 29283424Sdchagin * $FreeBSD: releng/10.3/sys/amd64/linux/linux.h 294764 2016-01-26 06:05:55Z dchagin $ 30283424Sdchagin */ 31283424Sdchagin 32283424Sdchagin#ifndef _AMD64_LINUX_H_ 33283424Sdchagin#define _AMD64_LINUX_H_ 34283424Sdchagin 35293575Sdchagin#include <compat/linux/linux.h> 36283424Sdchagin#include <amd64/linux/linux_syscall.h> 37283424Sdchagin 38283424Sdchagin/* 39283424Sdchagin * debugging support 40283424Sdchagin */ 41283424Sdchaginextern u_char linux_debug_map[]; 42283424Sdchagin#define ldebug(name) isclr(linux_debug_map, LINUX_SYS_linux_ ## name) 43283424Sdchagin#define ARGS(nm, fmt) "linux(%ld/%ld): "#nm"("fmt")\n", \ 44283424Sdchagin (long)td->td_proc->p_pid, (long)td->td_tid 45283424Sdchagin#define LMSG(fmt) "linux(%ld/%ld): "fmt"\n", \ 46283424Sdchagin (long)td->td_proc->p_pid, (long)td->td_tid 47283424Sdchagin#define LINUX_DTRACE linuxulator 48283424Sdchagin 49283424Sdchagin#define PTRIN(v) (void *)(v) 50283424Sdchagin#define PTROUT(v) (uintptr_t)(v) 51283424Sdchagin 52283424Sdchagin#define CP(src,dst,fld) do { (dst).fld = (src).fld; } while (0) 53283424Sdchagin#define CP2(src,dst,sfld,dfld) do { (dst).dfld = (src).sfld; } while (0) 54283424Sdchagin#define PTRIN_CP(src,dst,fld) \ 55283424Sdchagin do { (dst).fld = PTRIN((src).fld); } while (0) 56283424Sdchagin 57283424Sdchagin/* 58283424Sdchagin * Provide a separate set of types for the Linux types. 59283424Sdchagin */ 60283424Sdchagintypedef int32_t l_int; 61283424Sdchagintypedef int64_t l_long; 62283424Sdchagintypedef int16_t l_short; 63283424Sdchagintypedef uint32_t l_uint; 64283424Sdchagintypedef uint64_t l_ulong; 65283424Sdchagintypedef uint16_t l_ushort; 66283424Sdchagin 67283424Sdchagintypedef l_ulong l_uintptr_t; 68283424Sdchagintypedef l_long l_clock_t; 69283424Sdchagintypedef l_int l_daddr_t; 70283424Sdchagintypedef l_ulong l_dev_t; 71283424Sdchagintypedef l_uint l_gid_t; 72283424Sdchagintypedef l_uint l_uid_t; 73283424Sdchagintypedef l_ulong l_ino_t; 74283424Sdchagintypedef l_int l_key_t; 75283424Sdchagintypedef l_long l_loff_t; 76283424Sdchagintypedef l_uint l_mode_t; 77283424Sdchagintypedef l_long l_off_t; 78283424Sdchagintypedef l_int l_pid_t; 79283424Sdchagintypedef l_ulong l_size_t; 80283424Sdchagintypedef l_long l_ssize_t; 81283424Sdchagintypedef l_long l_suseconds_t; 82283424Sdchagintypedef l_long l_time_t; 83283424Sdchagintypedef l_int l_timer_t; 84283424Sdchagintypedef l_int l_mqd_t; 85283424Sdchagintypedef l_size_t l_socklen_t; 86293548Sdchagintypedef l_ulong l_fd_mask; 87283424Sdchagin 88283424Sdchagintypedef struct { 89283424Sdchagin l_int val[2]; 90283424Sdchagin} l_fsid_t; 91283424Sdchagin 92283424Sdchagintypedef struct { 93283424Sdchagin l_time_t tv_sec; 94283424Sdchagin l_suseconds_t tv_usec; 95283424Sdchagin} l_timeval; 96283424Sdchagin 97283424Sdchagin#define l_fd_set fd_set 98283424Sdchagin 99283424Sdchagin/* 100283424Sdchagin * Miscellaneous 101283424Sdchagin */ 102283424Sdchagin#define LINUX_NAME_MAX 255 103283424Sdchagin#define LINUX_CTL_MAXNAME 10 104283424Sdchagin 105293535Sdchagin#define LINUX_AT_COUNT 19 /* Count of used aux entry types. */ 106283424Sdchagin 107283424Sdchaginstruct l___sysctl_args 108283424Sdchagin{ 109283424Sdchagin l_uintptr_t name; 110283424Sdchagin l_int nlen; 111283424Sdchagin l_uintptr_t oldval; 112283424Sdchagin l_uintptr_t oldlenp; 113283424Sdchagin l_uintptr_t newval; 114283424Sdchagin l_size_t newlen; 115283424Sdchagin l_ulong __spare[4]; 116283424Sdchagin}; 117283424Sdchagin 118283424Sdchagin/* Scheduling policies */ 119283424Sdchagin#define LINUX_SCHED_OTHER 0 120283424Sdchagin#define LINUX_SCHED_FIFO 1 121283424Sdchagin#define LINUX_SCHED_RR 2 122283424Sdchagin 123283424Sdchagin/* Resource limits */ 124283424Sdchagin#define LINUX_RLIMIT_CPU 0 125283424Sdchagin#define LINUX_RLIMIT_FSIZE 1 126283424Sdchagin#define LINUX_RLIMIT_DATA 2 127283424Sdchagin#define LINUX_RLIMIT_STACK 3 128283424Sdchagin#define LINUX_RLIMIT_CORE 4 129283424Sdchagin#define LINUX_RLIMIT_RSS 5 130283424Sdchagin#define LINUX_RLIMIT_NPROC 6 131283424Sdchagin#define LINUX_RLIMIT_NOFILE 7 132283424Sdchagin#define LINUX_RLIMIT_MEMLOCK 8 133283424Sdchagin#define LINUX_RLIMIT_AS 9 /* Address space limit */ 134283424Sdchagin 135283424Sdchagin#define LINUX_RLIM_NLIMITS 10 136283424Sdchagin 137283424Sdchaginstruct l_rlimit { 138283424Sdchagin l_ulong rlim_cur; 139283424Sdchagin l_ulong rlim_max; 140283424Sdchagin}; 141283424Sdchagin 142283424Sdchagin/* mmap options */ 143283424Sdchagin#define LINUX_MAP_SHARED 0x0001 144283424Sdchagin#define LINUX_MAP_PRIVATE 0x0002 145283424Sdchagin#define LINUX_MAP_FIXED 0x0010 146283424Sdchagin#define LINUX_MAP_ANON 0x0020 147283424Sdchagin#define LINUX_MAP_GROWSDOWN 0x0100 148283424Sdchagin 149283424Sdchagin/* 150283424Sdchagin * stat family of syscalls 151283424Sdchagin */ 152283424Sdchaginstruct l_timespec { 153283424Sdchagin l_time_t tv_sec; 154283424Sdchagin l_long tv_nsec; 155283424Sdchagin}; 156283424Sdchagin 157283424Sdchaginstruct l_newstat { 158283424Sdchagin l_dev_t st_dev; 159283424Sdchagin l_ino_t st_ino; 160283424Sdchagin l_ulong st_nlink; 161283424Sdchagin l_uint st_mode; 162283424Sdchagin l_uid_t st_uid; 163283424Sdchagin l_gid_t st_gid; 164283424Sdchagin l_uint __st_pad1; 165283424Sdchagin l_dev_t st_rdev; 166283424Sdchagin l_off_t st_size; 167283424Sdchagin l_long st_blksize; 168283424Sdchagin l_long st_blocks; 169283424Sdchagin struct l_timespec st_atim; 170283424Sdchagin struct l_timespec st_mtim; 171283424Sdchagin struct l_timespec st_ctim; 172283424Sdchagin l_long __unused1; 173283424Sdchagin l_long __unused2; 174283424Sdchagin l_long __unused3; 175283424Sdchagin}; 176283424Sdchagin 177283424Sdchagin/* sigaction flags */ 178283424Sdchagin#define LINUX_SA_NOCLDSTOP 0x00000001 179283424Sdchagin#define LINUX_SA_NOCLDWAIT 0x00000002 180283424Sdchagin#define LINUX_SA_SIGINFO 0x00000004 181283424Sdchagin#define LINUX_SA_RESTORER 0x04000000 182283424Sdchagin#define LINUX_SA_ONSTACK 0x08000000 183283424Sdchagin#define LINUX_SA_RESTART 0x10000000 184283424Sdchagin#define LINUX_SA_INTERRUPT 0x20000000 185283424Sdchagin#define LINUX_SA_NOMASK 0x40000000 186283424Sdchagin#define LINUX_SA_ONESHOT 0x80000000 187283424Sdchagin 188283424Sdchagin/* sigprocmask actions */ 189283424Sdchagin#define LINUX_SIG_BLOCK 0 190283424Sdchagin#define LINUX_SIG_UNBLOCK 1 191283424Sdchagin#define LINUX_SIG_SETMASK 2 192283424Sdchagin 193283424Sdchagin/* sigaltstack */ 194283424Sdchagin#define LINUX_MINSIGSTKSZ 2048 195283424Sdchagin 196283424Sdchagintypedef void (*l_handler_t)(l_int); 197283424Sdchagin 198283424Sdchagintypedef struct { 199283424Sdchagin l_handler_t lsa_handler; 200283424Sdchagin l_ulong lsa_flags; 201283424Sdchagin l_uintptr_t lsa_restorer; 202283424Sdchagin l_sigset_t lsa_mask; 203283424Sdchagin} l_sigaction_t; 204283424Sdchagin 205283424Sdchagintypedef struct { 206283424Sdchagin l_uintptr_t ss_sp; 207283424Sdchagin l_int ss_flags; 208283424Sdchagin l_size_t ss_size; 209283424Sdchagin} l_stack_t; 210283424Sdchagin 211283424Sdchaginstruct l_fpstate { 212283424Sdchagin u_int16_t cwd; 213283424Sdchagin u_int16_t swd; 214283424Sdchagin u_int16_t twd; 215283424Sdchagin u_int16_t fop; 216283424Sdchagin u_int64_t rip; 217283424Sdchagin u_int64_t rdp; 218283424Sdchagin u_int32_t mxcsr; 219283424Sdchagin u_int32_t mxcsr_mask; 220283424Sdchagin u_int32_t st_space[32]; 221283424Sdchagin u_int32_t xmm_space[64]; 222283424Sdchagin u_int32_t reserved2[24]; 223283424Sdchagin}; 224283424Sdchagin 225283424Sdchaginstruct l_sigcontext { 226283424Sdchagin l_ulong sc_r8; 227283424Sdchagin l_ulong sc_r9; 228283424Sdchagin l_ulong sc_r10; 229283424Sdchagin l_ulong sc_r11; 230283424Sdchagin l_ulong sc_r12; 231283424Sdchagin l_ulong sc_r13; 232283424Sdchagin l_ulong sc_r14; 233283424Sdchagin l_ulong sc_r15; 234283424Sdchagin l_ulong sc_rdi; 235283424Sdchagin l_ulong sc_rsi; 236283424Sdchagin l_ulong sc_rbp; 237283424Sdchagin l_ulong sc_rbx; 238283424Sdchagin l_ulong sc_rdx; 239283424Sdchagin l_ulong sc_rax; 240283424Sdchagin l_ulong sc_rcx; 241283424Sdchagin l_ulong sc_rsp; 242283424Sdchagin l_ulong sc_rip; 243283424Sdchagin l_ulong sc_rflags; 244283424Sdchagin l_ushort sc_cs; 245283424Sdchagin l_ushort sc_gs; 246283424Sdchagin l_ushort sc_fs; 247283424Sdchagin l_ushort sc___pad0; 248283424Sdchagin l_ulong sc_err; 249283424Sdchagin l_ulong sc_trapno; 250283424Sdchagin l_sigset_t sc_mask; 251283424Sdchagin l_ulong sc_cr2; 252283424Sdchagin struct l_fpstate *sc_fpstate; 253283424Sdchagin l_ulong sc_reserved1[8]; 254283424Sdchagin}; 255283424Sdchagin 256283424Sdchaginstruct l_ucontext { 257283424Sdchagin l_ulong uc_flags; 258283424Sdchagin l_uintptr_t uc_link; 259283424Sdchagin l_stack_t uc_stack; 260283424Sdchagin struct l_sigcontext uc_mcontext; 261283424Sdchagin l_sigset_t uc_sigmask; 262283424Sdchagin}; 263283424Sdchagin 264283424Sdchagin#define LINUX_SI_PREAMBLE_SIZE (4 * sizeof(int)) 265283424Sdchagin#define LINUX_SI_MAX_SIZE 128 266283424Sdchagin#define LINUX_SI_PAD_SIZE ((LINUX_SI_MAX_SIZE - \ 267283424Sdchagin LINUX_SI_PREAMBLE_SIZE) / sizeof(l_int)) 268283424Sdchagintypedef union l_sigval { 269283424Sdchagin l_int sival_int; 270283424Sdchagin l_uintptr_t sival_ptr; 271283424Sdchagin} l_sigval_t; 272283424Sdchagin 273283424Sdchagintypedef struct l_siginfo { 274283424Sdchagin l_int lsi_signo; 275283424Sdchagin l_int lsi_errno; 276283424Sdchagin l_int lsi_code; 277283424Sdchagin union { 278283424Sdchagin l_int _pad[LINUX_SI_PAD_SIZE]; 279283424Sdchagin 280283424Sdchagin struct { 281283424Sdchagin l_pid_t _pid; 282283424Sdchagin l_uid_t _uid; 283283424Sdchagin } _kill; 284283424Sdchagin 285283424Sdchagin struct { 286283424Sdchagin l_timer_t _tid; 287283424Sdchagin l_int _overrun; 288283424Sdchagin char _pad[sizeof(l_uid_t) - sizeof(int)]; 289283424Sdchagin union l_sigval _sigval; 290283424Sdchagin l_uint _sys_private; 291283424Sdchagin } _timer; 292283424Sdchagin 293283424Sdchagin struct { 294283424Sdchagin l_pid_t _pid; /* sender's pid */ 295283424Sdchagin l_uid_t _uid; /* sender's uid */ 296283424Sdchagin union l_sigval _sigval; 297283424Sdchagin } _rt; 298283424Sdchagin 299283424Sdchagin struct { 300283424Sdchagin l_pid_t _pid; /* which child */ 301283424Sdchagin l_uid_t _uid; /* sender's uid */ 302283424Sdchagin l_int _status; /* exit code */ 303283424Sdchagin l_clock_t _utime; 304283424Sdchagin l_clock_t _stime; 305283424Sdchagin } _sigchld; 306283424Sdchagin 307283424Sdchagin struct { 308283424Sdchagin l_uintptr_t _addr; /* Faulting insn/memory ref. */ 309283424Sdchagin } _sigfault; 310283424Sdchagin 311283424Sdchagin struct { 312283424Sdchagin l_long _band; /* POLL_IN,POLL_OUT,POLL_MSG */ 313283424Sdchagin l_int _fd; 314283424Sdchagin } _sigpoll; 315283424Sdchagin } _sifields; 316283424Sdchagin} l_siginfo_t; 317283424Sdchagin 318283424Sdchagin#define lsi_pid _sifields._kill._pid 319283424Sdchagin#define lsi_uid _sifields._kill._uid 320283424Sdchagin#define lsi_tid _sifields._timer._tid 321283424Sdchagin#define lsi_overrun _sifields._timer._overrun 322283424Sdchagin#define lsi_sys_private _sifields._timer._sys_private 323283424Sdchagin#define lsi_status _sifields._sigchld._status 324283424Sdchagin#define lsi_utime _sifields._sigchld._utime 325283424Sdchagin#define lsi_stime _sifields._sigchld._stime 326283424Sdchagin#define lsi_value _sifields._rt._sigval 327283424Sdchagin#define lsi_int _sifields._rt._sigval.sival_int 328283424Sdchagin#define lsi_ptr _sifields._rt._sigval.sival_ptr 329283424Sdchagin#define lsi_addr _sifields._sigfault._addr 330283424Sdchagin#define lsi_band _sifields._sigpoll._band 331283424Sdchagin#define lsi_fd _sifields._sigpoll._fd 332283424Sdchagin 333283424Sdchagin/* 334283424Sdchagin * We make the stack look like Linux expects it when calling a signal 335283424Sdchagin * handler, but use the BSD way of calling the handler and sigreturn(). 336283424Sdchagin * This means that we need to pass the pointer to the handler too. 337283424Sdchagin * It is appended to the frame to not interfere with the rest of it. 338283424Sdchagin */ 339283424Sdchagin 340283424Sdchaginstruct l_rt_sigframe { 341283424Sdchagin struct l_ucontext sf_sc; 342283424Sdchagin struct l_siginfo sf_si; 343283424Sdchagin l_handler_t sf_handler; 344283424Sdchagin}; 345283424Sdchagin 346283424Sdchagin/* 347283424Sdchagin * mount flags 348283424Sdchagin */ 349283424Sdchagin#define LINUX_MS_RDONLY 0x0001 350283424Sdchagin#define LINUX_MS_NOSUID 0x0002 351283424Sdchagin#define LINUX_MS_NODEV 0x0004 352283424Sdchagin#define LINUX_MS_NOEXEC 0x0008 353283424Sdchagin#define LINUX_MS_REMOUNT 0x0020 354283424Sdchagin 355283424Sdchagin/* 356283424Sdchagin * SystemV IPC defines 357283424Sdchagin */ 358283424Sdchagin#define LINUX_IPC_RMID 0 359283424Sdchagin#define LINUX_IPC_SET 1 360283424Sdchagin#define LINUX_IPC_STAT 2 361283424Sdchagin#define LINUX_IPC_INFO 3 362283424Sdchagin 363283424Sdchagin#define LINUX_SHM_LOCK 11 364283424Sdchagin#define LINUX_SHM_UNLOCK 12 365283424Sdchagin#define LINUX_SHM_STAT 13 366283424Sdchagin#define LINUX_SHM_INFO 14 367283424Sdchagin 368283424Sdchagin#define LINUX_SHM_RDONLY 0x1000 369283424Sdchagin#define LINUX_SHM_RND 0x2000 370283424Sdchagin#define LINUX_SHM_REMAP 0x4000 371283424Sdchagin 372283424Sdchagin/* semctl commands */ 373283424Sdchagin#define LINUX_GETPID 11 374283424Sdchagin#define LINUX_GETVAL 12 375283424Sdchagin#define LINUX_GETALL 13 376283424Sdchagin#define LINUX_GETNCNT 14 377283424Sdchagin#define LINUX_GETZCNT 15 378283424Sdchagin#define LINUX_SETVAL 16 379283424Sdchagin#define LINUX_SETALL 17 380283424Sdchagin#define LINUX_SEM_STAT 18 381283424Sdchagin#define LINUX_SEM_INFO 19 382283424Sdchagin 383283424Sdchaginunion l_semun { 384283424Sdchagin l_int val; 385283424Sdchagin l_uintptr_t buf; 386283424Sdchagin l_uintptr_t array; 387283424Sdchagin l_uintptr_t __buf; 388283424Sdchagin l_uintptr_t __pad; 389283424Sdchagin}; 390283424Sdchagin 391283424Sdchaginstruct l_ipc_perm { 392283424Sdchagin l_key_t key; 393283424Sdchagin l_uid_t uid; 394283424Sdchagin l_gid_t gid; 395283424Sdchagin l_uid_t cuid; 396283424Sdchagin l_gid_t cgid; 397283424Sdchagin l_ushort mode; 398283424Sdchagin l_ushort seq; 399283424Sdchagin}; 400283424Sdchagin 401283424Sdchagin/* 402283424Sdchagin * Socket defines 403283424Sdchagin */ 404283424Sdchagin 405283424Sdchagin#define LINUX_SOL_SOCKET 1 406283424Sdchagin#define LINUX_SOL_IP 0 407283424Sdchagin#define LINUX_SOL_IPX 256 408283424Sdchagin#define LINUX_SOL_AX25 257 409283424Sdchagin#define LINUX_SOL_TCP 6 410283424Sdchagin#define LINUX_SOL_UDP 17 411283424Sdchagin 412283424Sdchagin#define LINUX_SO_DEBUG 1 413283424Sdchagin#define LINUX_SO_REUSEADDR 2 414283424Sdchagin#define LINUX_SO_TYPE 3 415283424Sdchagin#define LINUX_SO_ERROR 4 416283424Sdchagin#define LINUX_SO_DONTROUTE 5 417283424Sdchagin#define LINUX_SO_BROADCAST 6 418283424Sdchagin#define LINUX_SO_SNDBUF 7 419283424Sdchagin#define LINUX_SO_RCVBUF 8 420283424Sdchagin#define LINUX_SO_KEEPALIVE 9 421283424Sdchagin#define LINUX_SO_OOBINLINE 10 422283424Sdchagin#define LINUX_SO_NO_CHECK 11 423283424Sdchagin#define LINUX_SO_PRIORITY 12 424283424Sdchagin#define LINUX_SO_LINGER 13 425283424Sdchagin#define LINUX_SO_PASSCRED 16 426283424Sdchagin#define LINUX_SO_PEERCRED 17 427283424Sdchagin#define LINUX_SO_RCVLOWAT 18 428283424Sdchagin#define LINUX_SO_SNDLOWAT 19 429283424Sdchagin#define LINUX_SO_RCVTIMEO 20 430283424Sdchagin#define LINUX_SO_SNDTIMEO 21 431283424Sdchagin#define LINUX_SO_TIMESTAMP 29 432283424Sdchagin#define LINUX_SO_ACCEPTCONN 30 433283424Sdchagin 434283424Sdchagin#define LINUX_IP_TOS 1 435283424Sdchagin#define LINUX_IP_TTL 2 436283424Sdchagin#define LINUX_IP_HDRINCL 3 437283424Sdchagin#define LINUX_IP_OPTIONS 4 438283424Sdchagin 439283424Sdchagin#define LINUX_IP_MULTICAST_IF 32 440283424Sdchagin#define LINUX_IP_MULTICAST_TTL 33 441283424Sdchagin#define LINUX_IP_MULTICAST_LOOP 34 442283424Sdchagin#define LINUX_IP_ADD_MEMBERSHIP 35 443283424Sdchagin#define LINUX_IP_DROP_MEMBERSHIP 36 444283424Sdchagin 445283424Sdchaginstruct l_sockaddr { 446283424Sdchagin l_ushort sa_family; 447283424Sdchagin char sa_data[14]; 448283424Sdchagin}; 449283424Sdchagin 450283424Sdchaginstruct l_ifmap { 451283424Sdchagin l_ulong mem_start; 452283424Sdchagin l_ulong mem_end; 453283424Sdchagin l_ushort base_addr; 454283424Sdchagin u_char irq; 455283424Sdchagin u_char dma; 456283424Sdchagin u_char port; 457283424Sdchagin} __packed; 458283424Sdchagin 459283424Sdchagin#define LINUX_IFHWADDRLEN 6 460283424Sdchagin#define LINUX_IFNAMSIZ 16 461283424Sdchagin 462283424Sdchaginstruct l_ifreq { 463283424Sdchagin union { 464283424Sdchagin char ifrn_name[LINUX_IFNAMSIZ]; 465283424Sdchagin } ifr_ifrn; 466283424Sdchagin 467283424Sdchagin union { 468283424Sdchagin struct l_sockaddr ifru_addr; 469283424Sdchagin struct l_sockaddr ifru_dstaddr; 470283424Sdchagin struct l_sockaddr ifru_broadaddr; 471283424Sdchagin struct l_sockaddr ifru_netmask; 472283424Sdchagin struct l_sockaddr ifru_hwaddr; 473283424Sdchagin l_short ifru_flags[1]; 474283424Sdchagin l_int ifru_metric; 475283424Sdchagin l_int ifru_mtu; 476283424Sdchagin struct l_ifmap ifru_map; 477283424Sdchagin char ifru_slave[LINUX_IFNAMSIZ]; 478283424Sdchagin l_uintptr_t ifru_data; 479283424Sdchagin } ifr_ifru; 480283424Sdchagin} __packed; 481283424Sdchagin 482283424Sdchagin#define ifr_name ifr_ifrn.ifrn_name /* Interface name */ 483283424Sdchagin#define ifr_hwaddr ifr_ifru.ifru_hwaddr /* MAC address */ 484283424Sdchagin 485283424Sdchaginstruct l_ifconf { 486283424Sdchagin int ifc_len; 487283424Sdchagin union { 488283424Sdchagin l_uintptr_t ifcu_buf; 489283424Sdchagin l_uintptr_t ifcu_req; 490283424Sdchagin } ifc_ifcu; 491283424Sdchagin}; 492283424Sdchagin 493283424Sdchagin#define ifc_buf ifc_ifcu.ifcu_buf 494283424Sdchagin#define ifc_req ifc_ifcu.ifcu_req 495283424Sdchagin 496283424Sdchagin/* 497283424Sdchagin * poll() 498283424Sdchagin */ 499283424Sdchagin#define LINUX_POLLIN 0x0001 500283424Sdchagin#define LINUX_POLLPRI 0x0002 501283424Sdchagin#define LINUX_POLLOUT 0x0004 502283424Sdchagin#define LINUX_POLLERR 0x0008 503283424Sdchagin#define LINUX_POLLHUP 0x0010 504283424Sdchagin#define LINUX_POLLNVAL 0x0020 505283424Sdchagin#define LINUX_POLLRDNORM 0x0040 506283424Sdchagin#define LINUX_POLLRDBAND 0x0080 507283424Sdchagin#define LINUX_POLLWRNORM 0x0100 508283424Sdchagin#define LINUX_POLLWRBAND 0x0200 509283424Sdchagin#define LINUX_POLLMSG 0x0400 510283424Sdchagin 511283424Sdchaginstruct l_pollfd { 512283424Sdchagin l_int fd; 513283424Sdchagin l_short events; 514283424Sdchagin l_short revents; 515283424Sdchagin}; 516283424Sdchagin 517283424Sdchagin 518283424Sdchagin#define LINUX_CLONE_VM 0x00000100 519283424Sdchagin#define LINUX_CLONE_FS 0x00000200 520283424Sdchagin#define LINUX_CLONE_FILES 0x00000400 521283424Sdchagin#define LINUX_CLONE_SIGHAND 0x00000800 522283424Sdchagin#define LINUX_CLONE_PID 0x00001000 /* No longer exist in Linux */ 523283424Sdchagin#define LINUX_CLONE_VFORK 0x00004000 524283424Sdchagin#define LINUX_CLONE_PARENT 0x00008000 525283424Sdchagin#define LINUX_CLONE_THREAD 0x00010000 526283424Sdchagin#define LINUX_CLONE_SETTLS 0x00080000 527283424Sdchagin#define LINUX_CLONE_PARENT_SETTID 0x00100000 528283424Sdchagin#define LINUX_CLONE_CHILD_CLEARTID 0x00200000 529283424Sdchagin#define LINUX_CLONE_CHILD_SETTID 0x01000000 530283424Sdchagin 531283424Sdchagin#define LINUX_ARCH_SET_GS 0x1001 532283424Sdchagin#define LINUX_ARCH_SET_FS 0x1002 533294764Sdchagin#define LINUX_ARCH_GET_FS 0x1003 534294764Sdchagin#define LINUX_ARCH_GET_GS 0x1004 535283424Sdchagin 536283424Sdchagin#define linux_copyout_rusage(r, u) copyout(r, u, sizeof(*r)) 537283424Sdchagin 538283424Sdchagin/* robust futexes */ 539283424Sdchaginstruct linux_robust_list { 540283424Sdchagin l_uintptr_t next; 541283424Sdchagin}; 542283424Sdchagin 543283424Sdchaginstruct linux_robust_list_head { 544283424Sdchagin struct linux_robust_list list; 545283424Sdchagin l_long futex_offset; 546283424Sdchagin l_uintptr_t pending_list; 547283424Sdchagin}; 548283424Sdchagin 549283424Sdchagin#endif /* !_AMD64_LINUX_H_ */ 550