File indexing completed on 2025-09-15 09:14:19
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045 #ifndef VKI_FREEBSD_H
0046 #define VKI_FREEBSD_H
0047
0048
0049
0050
0051
0052 #if defined(VGA_x86)
0053 # include "vki-machine-types-x86-freebsd.h"
0054 #elif defined(VGA_amd64)
0055 # include "vki-machine-types-amd64-freebsd.h"
0056 #elif defined(VGA_arm64)
0057 # include "vki-machine-types-arm64-freebsd.h"
0058 #else
0059 # error Unknown platform
0060 #endif
0061
0062 #include <sys/fcntl.h> // O_RDONLY
0063 #include <sys/param.h> // MAXPATHLEN
0064
0065
0066
0067
0068
0069
0070 typedef unsigned long __vki_fd_mask;
0071
0072 #undef __VKI_NFDBITS
0073 #define __VKI_NFDBITS (8 * sizeof(__vki_fd_mask))
0074
0075 #undef __VKI_FD_SETSIZE
0076 #define __VKI_FD_SETSIZE 1024U
0077
0078 #undef __VKI_FDSET_LONGS
0079 #define __VKI_FDSET_LONGS (__VKI_FD_SETSIZE/__VKI_NFDBITS)
0080
0081 #undef __VKI_FDELT
0082 #define __VKI_FDELT(d) ((d) / __VKI_NFDBITS)
0083
0084 #undef __VKI_FDMASK
0085 #define __VKI_FDMASK(d) (1UL << ((d) % __VKI_NFDBITS))
0086
0087 typedef struct {
0088 unsigned long fds_bits [__VKI_FDSET_LONGS];
0089 } __vki_fd_set;
0090
0091
0092
0093
0094
0095 typedef long __vki_key_t;
0096 typedef long __vki_suseconds_t;
0097 typedef struct __timer *__vki_timer_t;
0098 typedef struct __mq *__vki_mqd_t;
0099
0100
0101 typedef vki_uint32_t __vki_blksize_t;
0102 typedef vki_int64_t __vki_blkcnt_t;
0103 typedef vki_int32_t __vki_clockid_t;
0104 typedef vki_int32_t __vki_ct_rune_t;
0105 typedef vki_uint32_t __vki_fflags_t;
0106 typedef vki_uint64_t __vki_fsblkcnt_t;
0107 typedef vki_uint64_t __vki_fsfilcnt_t;
0108 typedef vki_uint32_t __vki_gid_t;
0109 typedef vki_int64_t __vki_id_t;
0110 typedef vki_uint64_t __vki_ino_t;
0111 typedef vki_int32_t __vki_lwpid_t;
0112 typedef vki_uint16_t __vki_mode_t;
0113 typedef vki_uint64_t __vki_nlink_t;
0114 typedef vki_int64_t __vki_off_t;
0115 typedef vki_int32_t __vki_pid_t;
0116 typedef vki_int64_t __vki_rlim_t;
0117 typedef vki_uint8_t __vki_sa_family_t;
0118 typedef vki_uint32_t __vki_socklen_t;
0119 typedef vki_uint32_t __vki_uid_t;
0120 typedef vki_int32_t __vki_useconds_t;
0121 typedef __vki_ct_rune_t __vki_rune_t;
0122 typedef __vki_ct_rune_t __vki_wchar_t;
0123 typedef __vki_ct_rune_t __vki_wint_t;
0124 typedef vki_uint64_t __vki_dev_t;
0125 typedef vki_uint32_t __vki_fixpt_t;
0126
0127
0128
0129
0130
0131
0132 typedef unsigned char vki_u_char;
0133 typedef unsigned short vki_u_short;
0134 typedef unsigned int vki_u_int;
0135 typedef unsigned long vki_u_long;
0136
0137 typedef vki_uint8_t vki_u_int8_t;
0138 typedef vki_uint16_t vki_u_int16_t;
0139 typedef vki_uint32_t vki_u_int32_t;
0140 typedef vki_uint64_t vki_u_int64_t;
0141
0142 typedef vki_uint64_t vki_u_quad_t;
0143 typedef vki_int64_t vki_quad_t;
0144 typedef __vki_caddr_t vki_caddr_t;
0145 typedef __const __vki_caddr_t vki_c_caddr_t;
0146 typedef __volatile __vki_caddr_t vki_v_caddr_t;
0147
0148 typedef __vki_blksize_t vki_blksize_t;
0149 typedef __vki_blkcnt_t vki_blkcnt_t;
0150 typedef __vki_clock_t vki_clock_t;
0151 typedef __vki_clockid_t vki_clockid_t;
0152 typedef __vki_dev_t vki_dev_t;
0153 typedef __vki_fflags_t vki_fflags_t;
0154 typedef __vki_fixpt_t vki_fixpt_t;
0155 typedef __vki_fsblkcnt_t vki_fsblkcnt_t;
0156 typedef __vki_fsfilcnt_t vki_fsfilcnt_t;
0157 typedef __vki_gid_t vki_gid_t;
0158 typedef vki_uint32_t vki_in_addr_t;
0159 typedef vki_uint16_t vki_in_port_t;
0160 typedef __vki_id_t vki_id_t;
0161 typedef __vki_ino_t vki_ino_t;
0162 typedef __vki_key_t vki_key_t;
0163 typedef __vki_lwpid_t vki_lwpid_t;
0164 typedef __vki_mode_t vki_mode_t;
0165 typedef __vki_nlink_t vki_nlink_t;
0166 typedef __vki_off_t vki_off_t;
0167 typedef __vki_pid_t vki_pid_t;
0168 typedef __vki_register_t vki_register_t;
0169 typedef __vki_rlim_t vki_rlim_t;
0170 typedef __vki_segsz_t vki_segsz_t;
0171 typedef __vki_size_t vki_size_t;
0172 typedef __vki_ssize_t vki_ssize_t;
0173 typedef __vki_suseconds_t vki_suseconds_t;
0174 typedef __vki_time_t vki_time_t;
0175 typedef __vki_timer_t vki_timer_t;
0176 typedef __vki_mqd_t vki_mqd_t;
0177 typedef __vki_u_register_t vki_u_register_t;
0178 typedef __vki_uid_t vki_uid_t;
0179 typedef __vki_useconds_t vki_useconds_t;
0180 typedef int vki_cpuwhich_t;
0181 typedef int vki_cpulevel_t;
0182 typedef int vki_cpusetid_t;
0183
0184
0185 typedef __vki_vm_offset_t vki_vm_offset_t;
0186 typedef __vki_vm_ooffset_t vki_vm_ooffset_t;
0187 typedef __vki_vm_paddr_t vki_vm_paddr_t;
0188 typedef __vki_vm_pindex_t vki_vm_pindex_t;
0189 typedef __vki_vm_size_t vki_vm_size_t;
0190
0191
0192
0193
0194
0195 typedef __vki_fd_set vki_fd_set;
0196
0197
0198
0199
0200
0201 #if defined(VGA_x86)
0202 # include "vki-x86-freebsd.h"
0203 #elif defined(VGA_amd64)
0204 # include "vki-amd64-freebsd.h"
0205 #elif defined(VGA_arm64)
0206 # include "vki-arm64-freebsd.h"
0207 #else
0208 # error Unknown platform
0209 #endif
0210
0211
0212
0213
0214 #ifndef ELFMAG
0215 #define ELFMAG "\177ELF"
0216 #endif
0217 #ifndef SELFMAG
0218 #define SELFMAG 4
0219 #endif
0220
0221
0222 #if !defined(ELF_NOTE_GNU)
0223 #define ELF_NOTE_GNU "GNU"
0224 #endif
0225
0226
0227 #define VKI_ELF_NOTE_ROUNDSIZE 4
0228
0229
0230
0231
0232
0233
0234 #define VKI_PATH_MAX 1024
0235
0236
0237
0238
0239
0240
0241 struct vki_timespec {
0242 vki_time_t tv_sec;
0243 long tv_nsec;
0244 };
0245
0246 struct vki_itimerspec {
0247 struct vki_timespec it_interval;
0248 struct vki_timespec it_value;
0249 };
0250
0251
0252
0253
0254
0255 struct vki_timeval {
0256 vki_time_t tv_sec;
0257 vki_suseconds_t tv_usec;
0258 };
0259
0260
0261
0262
0263
0264 #define VKI_CLOCK_REALTIME 0
0265 #define VKI_CLOCK_MONOTONIC 1
0266 #define VKI_CLOCK_PROCESS_CPUTIME_ID 2
0267 #define VKI_CLOCK_THREAD_CPUTIME_ID 3
0268
0269 struct vki_timezone {
0270 int tz_minuteswest;
0271 int tz_dsttime;
0272 };
0273
0274 struct vki_itimerval {
0275 struct vki_timeval it_interval;
0276 struct vki_timeval it_value;
0277 };
0278
0279
0280
0281
0282
0283 struct vki_ntptimeval {
0284 struct vki_timespec time;
0285 long maxerror;
0286 long esterror;
0287 long tai;
0288 int time_state;
0289 };
0290
0291 struct vki_timex {
0292 unsigned int modes;
0293 long offset;
0294 long freq;
0295 long maxerror;
0296 long esterror;
0297 int status;
0298 long constant;
0299 long precision;
0300 long tolerance;
0301
0302
0303 long ppsfreq;
0304 long jitter;
0305 int shift;
0306 long stabil;
0307 long jitcnt;
0308 long calcnt;
0309 long errcnt;
0310 long stbcnt;
0311 };
0312
0313 #define MOD_OFFSET 0x0001
0314 #define MOD_FREQUENCY 0x0002
0315 #define MOD_MAXERROR 0x0004
0316 #define MOD_ESTERROR 0x0008
0317 #define MOD_STATUS 0x0010
0318 #define MOD_TIMECONST 0x0020
0319 #define MOD_PPSMAX 0x0040
0320 #define MOD_TAI 0x0080
0321 #define MOD_MICRO 0x1000
0322 #define MOD_NANO 0x2000
0323 #define MOD_CLKB 0x4000
0324 #define MOD_CLKA 0x8000
0325
0326
0327
0328
0329
0330 struct vki_tms {
0331 vki_clock_t tms_utime;
0332 vki_clock_t tms_stime;
0333 vki_clock_t tms_cutime;
0334 vki_clock_t tms_cstime;
0335 };
0336
0337
0338
0339
0340
0341
0342 struct vki_freebsd11_stat {
0343 vki_uint32_t st_dev;
0344 vki_uint32_t st_ino;
0345 vki_mode_t st_mode;
0346 vki_uint16_t st_nlink;
0347 vki_uid_t st_uid;
0348 vki_gid_t st_gid;
0349 vki_uint32_t st_rdev;
0350 #if 0
0351 struct vki_timespec st_atimespec;
0352 struct vki_timespec st_mtimespec;
0353 struct vki_timespec st_ctimespec;
0354 #else
0355 vki_time_t st_atime;
0356 long st_atime_nsec;
0357 vki_time_t st_mtime;
0358 long st_mtime_nsec;
0359 vki_time_t st_ctime;
0360 long st_ctime_nsec;
0361 #endif
0362 vki_off_t st_size;
0363 vki_blkcnt_t st_blocks;
0364 vki_blksize_t st_blksize;
0365 vki_fflags_t st_flags;
0366 vki_uint32_t st_gen;
0367 vki_int32_t st_lspare;
0368 struct vki_timespec st_birthtimespec;
0369 unsigned int :
0370 (8 / 2) * (16 - (int)sizeof(struct vki_timespec));
0371 unsigned int :
0372 (8 / 2) * (16 - (int)sizeof(struct vki_timespec));
0373 };
0374
0375 #if defined(VGP_x86_freebsd)
0376 #define VKI_STAT_TIME_T_EXT 1
0377 #endif
0378
0379
0380
0381
0382
0383
0384
0385
0386
0387 struct vki_stat {
0388 vki_dev_t st_dev;
0389 vki_ino_t st_ino;
0390 vki_nlink_t st_nlink;
0391 vki_mode_t st_mode;
0392 vki_int16_t st_padding0;
0393 vki_uid_t st_uid;
0394 vki_gid_t st_gid;
0395 vki_int32_t st_padding1;
0396 vki_dev_t st_rdev;
0397 #ifdef VKI_STAT_TIME_T_EXT
0398 vki_int32_t st_atim_ext;
0399 #endif
0400
0401 vki_time_t st_atime;
0402 long st_atime_nsec;
0403 #ifdef VKI_STAT_TIME_T_EXT
0404 vki_int32_t st_mtim_ext;
0405 #endif
0406
0407 vki_time_t st_mtime;
0408 long st_mtime_nsec;
0409 #ifdef VKI_STAT_TIME_T_EXT
0410 vki_int32_t st_ctim_ext;
0411 #endif
0412
0413 vki_time_t st_ctime;
0414 long st_ctime_nsec;
0415 #ifdef VKI_STAT_TIME_T_EXT
0416 vki_int32_t st_btim_ext;
0417 #endif
0418
0419 vki_time_t st_btime;
0420 long st_btime_nsec;
0421 vki_off_t st_size;
0422 vki_blkcnt_t st_blocks;
0423 vki_blksize_t st_blksize;
0424 vki_fflags_t st_flags;
0425 vki_uint64_t st_gen;
0426 vki_uint64_t st_spare[10];
0427 };
0428
0429
0430
0431
0432
0433
0434 struct vki_sched_param {
0435 int sched_priority;
0436 };
0437
0438
0439
0440
0441
0442 #define VKI_SIG_BLOCK 1
0443 #define VKI_SIG_UNBLOCK 2
0444 #define VKI_SIG_SETMASK 3
0445
0446 #define VKI_SIG_DFL ((__vki_sighandler_t)0)
0447 #define VKI_SIG_IGN ((__vki_sighandler_t)1)
0448 #define VKI_SIG_ERR ((__vki_sighandler_t)-1)
0449
0450 typedef void __vki_signalfn_t(int);
0451 typedef __vki_signalfn_t *__vki_sighandler_t;
0452
0453 #define VKI_SIGHUP 1
0454 #define VKI_SIGINT 2
0455 #define VKI_SIGQUIT 3
0456 #define VKI_SIGILL 4
0457 #define VKI_SIGTRAP 5
0458 #define VKI_SIGABRT 6
0459 #define VKI_SIGEMT 7
0460 #define VKI_SIGFPE 8
0461 #define VKI_SIGKILL 9
0462 #define VKI_SIGBUS 10
0463 #define VKI_SIGSEGV 11
0464 #define VKI_SIGSYS 12
0465 #define VKI_SIGPIPE 13
0466 #define VKI_SIGALRM 14
0467 #define VKI_SIGTERM 15
0468 #define VKI_SIGURG 16
0469 #define VKI_SIGSTOP 17
0470 #define VKI_SIGTSTP 18
0471 #define VKI_SIGCONT 19
0472 #define VKI_SIGCHLD 20
0473 #define VKI_SIGTTIN 21
0474 #define VKI_SIGTTOU 22
0475 #define VKI_SIGIO 23
0476 #define VKI_SIGXCPU 24
0477 #define VKI_SIGXFSZ 25
0478 #define VKI_SIGVTALRM 26
0479 #define VKI_SIGPROF 27
0480 #define VKI_SIGWINCH 28
0481 #define VKI_SIGINFO 29
0482 #define VKI_SIGUSR1 30
0483 #define VKI_SIGUSR2 31
0484 #define VKI_SIGTHR 32
0485 #define VKI_SIGLIBRT 33
0486
0487 #define VKI_SIGRTMIN 65
0488 #define VKI_SIGRTMAX 126
0489
0490 #define VKI_SA_ONSTACK 0x0001
0491 #define VKI_SA_RESTART 0x0002
0492 #define VKI_SA_RESETHAND 0x0004
0493 #define VKI_SA_NOCLDSTOP 0x0008
0494 #define VKI_SA_NODEFER 0x0010
0495 #define VKI_SA_NOCLDWAIT 0x0020
0496 #define VKI_SA_SIGINFO 0x0040
0497 #define VKI_SA_RESTORER 0
0498
0499 #define VKI_SS_ONSTACK 0x0001
0500 #define VKI_SS_DISABLE 0x0004
0501
0502 #define VKI_SA_ONESHOT VKI_SA_RESETHAND
0503 #define VKI_SA_NOMASK VKI_SA_NODEFER
0504
0505 struct vki_sigaction {
0506 __vki_sighandler_t ksa_handler;
0507 int sa_flags;
0508 vki_sigset_t sa_mask;
0509 };
0510
0511 typedef struct vki_sigaltstack {
0512 void *ss_sp;
0513 vki_size_t ss_size;
0514 int ss_flags;
0515 } vki_stack_t;
0516
0517 typedef union vki_sigval {
0518 int sival_int;
0519 void *sival_ptr;
0520 } vki_sigval_t;
0521
0522 typedef struct vki_siginfo {
0523 int si_signo;
0524 int si_errno;
0525 int si_code;
0526 vki_pid_t si_pid;
0527 vki_uid_t si_uid;
0528 int si_status;
0529 void *si_addr;
0530 vki_sigval_t si_value;
0531
0532 #ifdef si_band
0533 #undef si_band
0534 #endif
0535 long si_band;
0536 int __spare__[7];
0537 } vki_siginfo_t;
0538
0539
0540
0541
0542 #define VKI_SI_USER 0x10001
0543 #define VKI_SI_QUEUE 0x10002
0544 #define VKI_SI_TIMER 0x10003
0545 #define VKI_SI_ASYNCIO 0x10004
0546 #define VKI_SI_MESGQ 0x10005
0547 #define VKI_SI_KERNEL 0x10006
0548 #define VKI_SI_LWP 0x10007
0549
0550
0551
0552 #define VKI_ILL_ILLOPC 1
0553 #define VKI_ILL_ILLOPN 2
0554 #define VKI_ILL_ILLADR 3
0555 #define VKI_ILL_ILLTRP 4
0556 #define VKI_ILL_PRVOPC 5
0557 #define VKI_ILL_PRVREG 6
0558 #define VKI_ILL_COPROC 7
0559 #define VKI_ILL_BADSTK 8
0560
0561
0562
0563
0564 #define VKI_FPE_INTOVF 1
0565 #define VKI_FPE_INTDIV 2
0566 #define VKI_FPE_FLTDIV 3
0567 #define VKI_FPE_FLTOVF 4
0568 #define VKI_FPE_FLTUND 5
0569 #define VKI_FPE_FLTRES 6
0570 #define VKI_FPE_FLTINV 7
0571 #define VKI_FPE_FLTSUB 8
0572
0573
0574
0575
0576 #define VKI_SEGV_MAPERR 1
0577 #define VKI_SEGV_ACCERR 2
0578
0579 #define VKI_SEGV_PAGE_FAULT 12
0580
0581
0582
0583
0584 #define VKI_BUS_ADRALN 1
0585 #define VKI_BUS_ADRERR 2
0586 #define VKI_BUS_OBJERR 3
0587 #define VKI_BUS_OOMERR 100
0588
0589
0590
0591
0592 #define VKI_TRAP_BRKPT 1
0593 #define VKI_TRAP_TRACE 2
0594 #define VKI_TRAP_DTRACE 3
0595 #define VKI_TRAP_CAP 4
0596
0597
0598
0599
0600 #define VKI_CLD_EXITED 1
0601 #define VKI_CLD_KILLED 2
0602 #define VKI_CLD_DUMPED 3
0603 #define VKI_CLD_TRAPPED 4
0604 #define VKI_CLD_STOPPED 5
0605 #define VKI_CLD_CONTINUED 6
0606
0607 #if 0
0608 typedef struct vki_sigevent {
0609 int sigev_notify;
0610 int sigev_signo;
0611 vki_sigval_t sigev_value;
0612 union {
0613 int _threadid;
0614
0615 struct {
0616 void (*_function)(vki_sigval_t);
0617 void *_attribute;
0618 } _sigev_thread;
0619 long __spare__[8];
0620 } _sigev_un;
0621 } vki_sigevent_t;
0622 #endif
0623
0624 struct vki_sigevent {
0625 int sigev_notify;
0626 union {
0627 int __sigev_signo;
0628 int __sigev_notify_kqueue;
0629 } __sigev_u;
0630 vki_sigval_t sigev_value;
0631 };
0632 #if 0
0633 #define sigev_signo __sigev_u.__sigev_signo
0634 #define sigev_notify_kqueue __sigev_u.__sigev_notify_kqueue
0635 #endif
0636
0637
0638
0639
0640
0641 struct vki_iovec {
0642 void *iov_base;
0643 __vki_size_t iov_len;
0644 };
0645
0646
0647
0648
0649
0650 typedef __vki_sa_family_t vki_sa_family_t;
0651 typedef __vki_socklen_t vki_socklen_t;
0652
0653 struct vki_sockaddr {
0654 vki_uint8_t sa_len;
0655 vki_sa_family_t sa_family;
0656 char sa_data[14];
0657 };
0658
0659 struct vki_msghdr {
0660 void * msg_name;
0661 vki_socklen_t msg_namelen;
0662 struct vki_iovec * msg_iov;
0663 int msg_iovlen;
0664 void * msg_control;
0665 vki_socklen_t msg_controllen;
0666 int msg_flags;
0667 };
0668
0669 struct vki_cmsghdr {
0670 vki_socklen_t cmsg_len;
0671 int cmsg_level;
0672 int cmsg_type;
0673 };
0674
0675 #define __VKI_CMSG_NXTHDR(ctl, len, cmsg) __vki_cmsg_nxthdr((ctl),(len),(cmsg))
0676 #define VKI_CMSG_NXTHDR(mhdr, cmsg) vki_cmsg_nxthdr((mhdr), (cmsg))
0677
0678 #define VKI_CMSG_ALIGN(len) ( ((len)+sizeof(long)-1) & ~(sizeof(long)-1) )
0679
0680 #define VKI_CMSG_DATA(cmsg) ((void *)((char *)(cmsg) + VKI_CMSG_ALIGN(sizeof(struct vki_cmsghdr))))
0681
0682 #define __VKI_CMSG_FIRSTHDR(ctl,len) ((len) >= sizeof(struct vki_cmsghdr) ? \
0683 (struct vki_cmsghdr *)(ctl) : \
0684 (struct vki_cmsghdr *)NULL)
0685 #define VKI_CMSG_FIRSTHDR(msg) __VKI_CMSG_FIRSTHDR((msg)->msg_control, (msg)->msg_controllen)
0686
0687
0688
0689 static __inline struct vki_cmsghdr * __vki_cmsg_nxthdr(void *__ctl, vki_socklen_t __size,
0690 struct vki_cmsghdr *__cmsg)
0691 {
0692 struct vki_cmsghdr * __ptr;
0693
0694 __ptr = (struct vki_cmsghdr*)(((unsigned char *) __cmsg) + VKI_CMSG_ALIGN(__cmsg->cmsg_len));
0695 if ((unsigned long)((char*)(__ptr+1) - (char *) __ctl) > __size)
0696 return (struct vki_cmsghdr *)0;
0697
0698 return __ptr;
0699 }
0700
0701 static __inline struct vki_cmsghdr * vki_cmsg_nxthdr (struct vki_msghdr *__msg, struct vki_cmsghdr *__cmsg)
0702 {
0703 return __vki_cmsg_nxthdr(__msg->msg_control, __msg->msg_controllen, __cmsg);
0704 }
0705
0706 #define VKI_SCM_RIGHTS 0x01
0707
0708 #define VKI_AF_UNIX 1
0709 #define VKI_AF_INET 2
0710 #define VKI_AF_INET6 28
0711
0712 #define VKI_MSG_NOSIGNAL 0x20000
0713
0714 #define VKI_SOL_SOCKET 0xffff
0715
0716 #define VKI_SO_TYPE 0x1008
0717
0718 #define VKI_SOCK_STREAM 1
0719
0720 #include <netinet/tcp.h> // TCP_NODELAY
0721
0722 #define VKI_TCP_NODELAY TCP_NODELAY
0723
0724 #include <netinet/in.h> // IPPROTO_TCP
0725
0726 #define VKI_IPPROTO_TCP IPPROTO_TCP
0727
0728 struct vki_sf_hdtr {
0729 struct iovec *headers;
0730 int hdr_cnt;
0731 struct iovec *trailers;
0732 int trl_cnt;
0733 };
0734
0735
0736
0737
0738
0739
0740 struct vki_in_addr {
0741 vki_in_addr_t s_addr;
0742 };
0743
0744
0745 #define __VKI_SOCK_SIZE__ 16
0746 struct vki_sockaddr_in {
0747 vki_uint8_t sin_len;
0748 vki_sa_family_t sin_family;
0749 vki_in_port_t sin_port;
0750 struct vki_in_addr sin_addr;
0751 char sin_zero[8];
0752 };
0753
0754
0755
0756
0757
0758 struct vki_in6_addr {
0759 union {
0760 vki_uint8_t u6_addr8[16];
0761 vki_uint16_t u6_addr16[8];
0762 vki_uint32_t u6_addr32[4];
0763 } vki_in6_u;
0764 #define vki_s6_addr vki_in6_u.u6_addr8
0765 #define vki_s6_addr16 vki_in6_u.u6_addr16
0766 #define vki_s6_addr32 vki_in6_u.u6_addr32
0767 };
0768
0769 struct vki_sockaddr_in6 {
0770 vki_uint8_t sin6_len;
0771 vki_sa_family_t sin6_family;
0772 vki_uint16_t sin6_port;
0773 vki_uint32_t sin6_flowinfo;
0774 struct vki_in6_addr sin6_addr;
0775 vki_uint32_t sin6_scope_id;
0776 };
0777
0778
0779
0780
0781 #define VKI_SCTP_ALIGN_RESV_PAD 92
0782
0783 typedef vki_uint32_t vki_sctp_assoc_t;
0784
0785 struct vki_sctp_sndrcvinfo {
0786 vki_uint16_t sinfo_stream;
0787 vki_uint16_t sinfo_ssn;
0788 vki_uint16_t sinfo_flags;
0789 vki_uint32_t sinfo_ppid;
0790 vki_uint32_t sinfo_context;
0791 vki_uint32_t sinfo_timetolive;
0792 vki_uint32_t sinfo_tsn;
0793 vki_uint32_t sinfo_cumtsn;
0794 vki_sctp_assoc_t sinfo_assoc_id;
0795 vki_uint16_t sinfo_keynumber;
0796 vki_uint16_t sinfo_keynumber_valid;
0797 vki_uint8_t __reserve_pad[VKI_SCTP_ALIGN_RESV_PAD];
0798 };
0799
0800
0801
0802
0803
0804 #define VKI_UNIX_PATH_MAX 104
0805
0806 struct vki_sockaddr_un {
0807 unsigned char sun_len;
0808 vki_sa_family_t sun_family;
0809 char sun_path[VKI_UNIX_PATH_MAX];
0810 };
0811
0812
0813
0814
0815
0816 struct vki___aiocb_private {
0817 long status;
0818 long error;
0819 void *kernelinfo;
0820 };
0821
0822 typedef struct vki_aiocb {
0823 int aio_fildes;
0824 vki_off_t aio_offset;
0825 volatile void *aio_buf;
0826 vki_size_t aio_nbytes;
0827 int __spare__[2];
0828 void *__spare2__;
0829 int aio_lio_opcode;
0830 int aio_reqprio;
0831 struct vki___aiocb_private _aiocb_private;
0832 struct vki_sigevent aio_sigevent;
0833 } aiocb_t;
0834
0835 #define VKI_LIO_NOP 0x0
0836 #define VKI_LIO_WRITE 0x1
0837 #define VKI_LIO_READ 0x2
0838
0839 #define VKI_LIO_NOWAIT 0x0
0840 #define VKI_LIO_WAIT 0x1
0841
0842
0843 #define VKI_LIO_NOWAIT 0x0
0844
0845
0846
0847
0848
0849 typedef struct vki_fsid {
0850 vki_int32_t val[2];
0851 } vki_fsid_t;
0852 #define VKI_OMFSNAMELEN 16
0853 #define VKI_OMNAMELEN (88 - 2 * sizeof(long))
0854 #define VKI_MFSNAMELEN 16
0855 #define VKI_FREEBSD11_MNAMELEN 88
0856
0857 struct vki_freebsd11_statfs {
0858 vki_uint32_t f_version;
0859 vki_uint32_t f_type;
0860 vki_uint64_t f_flags;
0861 vki_uint64_t f_bsize;
0862 vki_uint64_t f_iosize;
0863 vki_uint64_t f_blocks;
0864 vki_uint64_t f_bfree;
0865 vki_int64_t f_bavail;
0866 vki_uint64_t f_files;
0867 vki_int64_t f_ffree;
0868 vki_uint64_t f_syncwrites;
0869 vki_uint64_t f_asyncwrites;
0870 vki_uint64_t f_syncreads;
0871 vki_uint64_t f_asyncreads;
0872 vki_uint64_t f_spare[10];
0873 vki_uint32_t f_namemax;
0874 vki_uid_t f_owner;
0875 vki_fsid_t f_fsid;
0876 char f_charspare[80];
0877 char f_fstypename[VKI_OMFSNAMELEN];
0878 char f_mntfromname[VKI_FREEBSD11_MNAMELEN];
0879 char f_mntonname[VKI_FREEBSD11_MNAMELEN];
0880 };
0881
0882
0883 #define MAXFIDSZ 16
0884
0885 struct vki_fid {
0886 vki_uint16_t fid_len;
0887 vki_uint16_t fid_reserved;
0888 char fid_data[MAXFIDSZ];
0889 };
0890
0891 struct vki_fhandle {
0892 vki_fsid_t fh_fsid;
0893 struct vki_fid fh_fid;
0894 };
0895
0896
0897 #define VKI_MNAMELEN 1024
0898 struct vki_statfs {
0899 vki_uint32_t f_version;
0900 vki_uint32_t f_type;
0901 vki_uint64_t f_flags;
0902 vki_uint64_t f_bsize;
0903 vki_uint64_t f_iosize;
0904 vki_uint64_t f_blocks;
0905 vki_uint64_t f_bfree;
0906 vki_int64_t f_bavail;
0907 vki_uint64_t f_files;
0908 vki_int64_t f_ffree;
0909 vki_uint64_t f_syncwrites;
0910 vki_uint64_t f_asyncwrites;
0911 vki_uint64_t f_syncreads;
0912 vki_uint64_t f_asyncreads;
0913 vki_uint64_t f_spare[10];
0914 vki_uint32_t f_namemax;
0915 vki_uid_t f_owner;
0916 vki_fsid_t f_fsid;
0917 char f_charspare[80];
0918 char f_fstypename[VKI_MFSNAMELEN];
0919 char f_mntfromname[VKI_MNAMELEN];
0920 char f_mntonname[VKI_MNAMELEN];
0921 };
0922
0923 typedef struct vki_fhandle vki_fhandle_t;
0924
0925
0926
0927
0928
0929 struct vki_winsize {
0930 unsigned short ws_row;
0931 unsigned short ws_col;
0932 unsigned short ws_xpixel;
0933 unsigned short ws_ypixel;
0934 };
0935
0936
0937
0938
0939
0940
0941 typedef unsigned int vki_tcflag_t;
0942 typedef unsigned char vki_cc_t;
0943 typedef unsigned int vki_speed_t;
0944
0945 #define VKI_NCCS 20
0946 struct vki_termios {
0947 vki_tcflag_t c_iflag;
0948 vki_tcflag_t c_oflag;
0949 vki_tcflag_t c_cflag;
0950 vki_tcflag_t c_lflag;
0951 vki_cc_t c_cc[VKI_NCCS];
0952 vki_speed_t c_ispeed;
0953 vki_speed_t c_ospeed;
0954 };
0955
0956
0957
0958
0959
0960
0961
0962
0963
0964
0965
0966 #define _VKI_IOC_BASEBITS 16U
0967 #define _VKI_IOC_NRBITS 8U
0968 #define _VKI_IOC_TYPEBITS 8U
0969
0970 #define _VKI_IOC_SIZEBITS 13U
0971 #define _VKI_IOC_DIRBITS 3U
0972
0973 #define _VKI_IOC_BASEMASK ((1ul << _VKI_IOC_BASEBITS)-1)
0974 #define _VKI_IOC_NRMASK ((1ul << _VKI_IOC_NRBITS)-1)
0975 #define _VKI_IOC_TYPEMASK ((1ul << _VKI_IOC_TYPEBITS)-1)
0976 #define _VKI_IOC_SIZEMASK ((1ul << _VKI_IOC_SIZEBITS)-1)
0977 #define _VKI_IOC_DIRMASK ((1ul << _VKI_IOC_DIRBITS)-1)
0978
0979 #define _VKI_IOC_BASESHIFT 0U
0980 #define _VKI_IOC_NRSHIFT 0U
0981 #define _VKI_IOC_TYPESHIFT (_VKI_IOC_NRSHIFT+_VKI_IOC_NRBITS)
0982 #define _VKI_IOC_SIZESHIFT (_VKI_IOC_TYPESHIFT+_VKI_IOC_TYPEBITS)
0983 #define _VKI_IOC_DIRSHIFT (_VKI_IOC_SIZESHIFT+_VKI_IOC_SIZEBITS)
0984
0985 #define _VKI_IOC_NONE 1U
0986 #define _VKI_IOC_READ 2U
0987 #define _VKI_IOC_WRITE 4U
0988 #define _VKI_IOC_RDWR 6U
0989
0990 #define _VKI_IOC(dir,type,nr,size) \
0991 (((dir) << _VKI_IOC_DIRSHIFT) | \
0992 ((type) << _VKI_IOC_TYPESHIFT) | \
0993 ((nr) << _VKI_IOC_NRSHIFT) | \
0994 ((size) << _VKI_IOC_SIZESHIFT))
0995
0996
0997 extern unsigned int __vki_invalid_size_argument_for_IOC;
0998 #define _VKI_IOC_TYPECHECK(t) \
0999 ((sizeof(t) == sizeof(t[1]) && \
1000 sizeof(t) < (1 << _VKI_IOC_SIZEBITS)) ? \
1001 sizeof(t) : __vki_invalid_size_argument_for_IOC)
1002
1003
1004 #define _VKI_IO(type,nr) _VKI_IOC(_VKI_IOC_NONE,(type),(nr),0)
1005 #define _VKI_IOR(type,nr,size) _VKI_IOC(_VKI_IOC_READ,(type),(nr),(_VKI_IOC_TYPECHECK(size)))
1006 #define _VKI_IOW(type,nr,size) _VKI_IOC(_VKI_IOC_WRITE,(type),(nr),(_VKI_IOC_TYPECHECK(size)))
1007 #define _VKI_IOWR(type,nr,size) _VKI_IOC(_VKI_IOC_READ|_VKI_IOC_WRITE,(type),(nr),(_VKI_IOC_TYPECHECK(size)))
1008
1009
1010 #define _VKI_IOC_DIR(nr) (((nr) >> _VKI_IOC_DIRSHIFT) & _VKI_IOC_DIRMASK)
1011 #define _VKI_IOC_TYPE(nr) (((nr) >> _VKI_IOC_TYPESHIFT) & _VKI_IOC_TYPEMASK)
1012 #define _VKI_IOC_NR(nr) (((nr) >> _VKI_IOC_NRSHIFT) & _VKI_IOC_NRMASK)
1013 #define _VKI_IOC_SIZE(nr) (((nr) >> _VKI_IOC_SIZESHIFT) & _VKI_IOC_SIZEMASK)
1014 #define _VKI_IOC_BASE(nr) (((nr) >> _VKI_IOC_BASESHIFT) & _VKI_IOC_BASEMASK)
1015
1016
1017
1018
1019
1020 #define VKI_GRND_NONBLOCK 0x1U
1021
1022
1023
1024
1025
1026 #define VKI_TIOCFLUSH _VKI_IOW('t', 16, int);
1027 #define VKI_TIOCGETA _VKI_IOR('t', 19, struct vki_termios)
1028 #define VKI_TIOCSETA _VKI_IOR('t', 20, struct vki_termios)
1029 #define VKI_TIOCSETAW _VKI_IOR('t', 21, struct vki_termios)
1030 #define VKI_TIOCSETAF _VKI_IOR('t', 22, struct vki_termios)
1031
1032 #define _VKI_TIOCPTMASTER _VKI_IO('t', 28)
1033
1034 #define VKI_TIOCSWINSZ _VKI_IOW('t', 103, struct vki_winsize)
1035 #define VKI_TIOCGWINSZ _VKI_IOR('t', 104, struct vki_winsize)
1036
1037 #define VKI_TIOCMGET _VKI_IOR('t', 106, int)
1038 #define VKI_TIOCMBIC _VKI_IOW('t', 107, int)
1039 #define VKI_TIOCMBIS _VKI_IOW('t', 108, int)
1040 #define VKI_TIOCMSET _VKI_IOW('t', 109, int)
1041 #define VKI_TIOCSTART _VKI_IO('t', 110)
1042 #define VKI_TIOCSTOP _VKI_IO('t', 111)
1043 #define VKI_TIOCPKT _VKI_IOW('t', 112, int)
1044
1045 #define VKI_TIOCSPGRP _VKI_IOW('t', 118, int)
1046 #define VKI_TIOCGPGRP _VKI_IOR('t', 119, int)
1047 #define VKI_TIOCCBRK _VKI_IO('t', 122)
1048 #define VKI_TIOCSBRK _VKI_IO('t', 123)
1049
1050
1051
1052
1053
1054
1055 #define VKI_FIOCLEX _VKI_IO('f', 1)
1056 #define VKI_FIONCLEX _VKI_IO('f', 2)
1057 #define VKI_FIONREAD _VKI_IOR('f', 127, int)
1058 #define VKI_FIONBIO _VKI_IOW('f', 126, int)
1059 #define VKI_FIOASYNC _VKI_IOW('f', 125, int)
1060 #define VKI_FIOSETOWN _VKI_IOW('f', 124, int)
1061 #define VKI_FIOGETOWN _VKI_IOW('f', 123, int)
1062 struct vki_fiodgname_arg {
1063 int len;
1064 void *buf;
1065 };
1066 #define VKI_FIODGNAME _VKI_IOW('f', 120, struct vki_fiodgname_arg)
1067
1068
1069
1070
1071
1072 struct vki_bpf_program {
1073 vki_u_int bf_len;
1074 struct vki_bpf_insn *bf_insns;
1075 };
1076
1077 typedef vki_u_int32_t vki_bpf_u_int32;
1078
1079 struct vki_bpf_insn {
1080 u_short code;
1081 u_char jt;
1082 u_char jf;
1083 vki_bpf_u_int32 k;
1084 };
1085
1086
1087 #define VKI_BIOCSETF _VKI_IOW('B', 103, struct vki_bpf_program)
1088
1089
1090
1091
1092 #define VKI_IFNAMSIZ 16
1093
1094 struct vki_ifmediareq {
1095 char ifm_name[VKI_IFNAMSIZ];
1096 int ifm_current;
1097 int ifm_mask;
1098 int ifm_status;
1099 int ifm_active;
1100 int ifm_count;
1101 int *ifm_ulist;
1102 };
1103
1104 #define VKI_IFSTATMAX 800
1105 struct vki_ifstat {
1106 char ifs_name[VKI_IFNAMSIZ];
1107 char ascii[VKI_IFSTATMAX + 1];
1108 };
1109
1110 struct vki_ifreq_buffer {
1111 vki_size_t length;
1112 void *buffer;
1113 };
1114
1115 struct vki_ifreq_nv_req {
1116 vki_u_int buf_length;
1117
1118 vki_u_int length;
1119 void *buffer;
1120 };
1121
1122 struct vki_ifreq {
1123 char ifr_name[VKI_IFNAMSIZ];
1124 union {
1125 struct vki_sockaddr ifru_addr;
1126 struct vki_sockaddr ifru_dstaddr;
1127 struct vki_sockaddr ifru_broadaddr;
1128 struct vki_ifreq_buffer ifru_buffer;
1129 short ifru_flags[2];
1130 short ifru_index;
1131 int ifru_jid;
1132 int ifru_metric;
1133 int ifru_mtu;
1134 int ifru_phys;
1135 int ifru_media;
1136 __vki_caddr_t ifru_data;
1137 int ifru_cap[2];
1138 vki_u_int ifru_fib;
1139 vki_u_char ifru_vlan_pcp;
1140 struct vki_ifreq_nv_req ifru_nv;
1141 } ifr_ifru;
1142 };
1143
1144 struct vki_ifconf {
1145 int ifc_len;
1146 union {
1147 __vki_caddr_t ifcu_buf;
1148 struct vki_ifreq *ifcu_req;
1149 } ifc_ifcu;
1150 };
1151
1152 #define VKI_SIOCGIFSTATUS _VKI_IOWR('i', 59, struct vki_ifstat)
1153
1154
1155
1156 #define VKI_SIOCGIFCONF _VKI_IOWR('i', 36, struct vki_ifconf)
1157 #define VKI_SIOCGIFMEDIA _VKI_IOWR('i', 56, struct vki_ifmediareq)
1158
1159
1160
1161
1162
1163 #define VKI_POLLIN 0x0001
1164
1165 struct vki_pollfd {
1166 int fd;
1167 short events;
1168 short revents;
1169 };
1170
1171
1172
1173
1174 struct vki_kevent_freebsd11 {
1175 vki_uintptr_t ident;
1176 vki_int16_t filter;
1177 vki_uint16_t flags;
1178 vki_uint32_t fflags;
1179 vki_intptr_t data;
1180 void *udata;
1181 };
1182
1183 struct vki_kevent {
1184 vki_uintptr_t ident;
1185 vki_int16_t filter;
1186 vki_uint16_t flags;
1187 vki_uint32_t fflags;
1188 vki_int64_t data;
1189 void *udata;
1190 vki_uint64_t ext[4];
1191 };
1192
1193
1194
1195
1196
1197
1198
1199
1200 #define VKI_RUSAGE_SELF 0
1201 #define VKI_RUSAGE_CHILDREN -1
1202 #define VKI_RUSAGE_THREAD 1
1203
1204 struct vki_rusage {
1205 struct vki_timeval ru_utime;
1206 struct vki_timeval ru_stime;
1207 long ru_maxrss;
1208 long ru_ixrss;
1209 long ru_idrss;
1210 long ru_isrss;
1211 long ru_minflt;
1212 long ru_majflt;
1213 long ru_nswap;
1214 long ru_inblock;
1215 long ru_oublock;
1216 long ru_msgsnd;
1217 long ru_msgrcv;
1218 long ru_nsignals;
1219 long ru_nvcsw;
1220 long ru_nivcsw;
1221 };
1222
1223 struct vki_rlimit {
1224 vki_rlim_t rlim_cur;
1225 vki_rlim_t rlim_max;
1226 };
1227
1228 #define VKI_RLIMIT_DATA 2
1229 #define VKI_RLIMIT_STACK 3
1230 #define VKI_RLIMIT_CORE 4
1231 #define VKI_RLIMIT_NOFILE 8
1232
1233 struct vki___wrusage {
1234 struct vki_rusage wru_self;
1235 struct vki_rusage wru_children;
1236 };
1237
1238
1239
1240
1241
1242
1243 #define VKI_PRSTATUS_VERSION 1
1244 struct vki_elf_prstatus {
1245 int pr_version;
1246 vki_size_t pr_statussz;
1247 vki_size_t pr_gregsetsz;
1248 vki_size_t pr_fpregsetsz;
1249 int pr_osreldate;
1250 int pr_cursig;
1251 vki_pid_t pr_pid;
1252 vki_elf_gregset_t pr_reg;
1253 };
1254
1255 #define VKI_ELF_PRARGSZ (80)
1256 #define VKI_MAXCOMLEN (16)
1257
1258 #define VKI_PRPSINFO_VERSION 1
1259 struct vki_elf_prpsinfo {
1260 int pr_version;
1261 vki_size_t pr_psinfosz;
1262 char pr_fname[VKI_MAXCOMLEN+1];
1263 char pr_psargs[VKI_ELF_PRARGSZ];
1264 };
1265
1266
1267
1268
1269
1270 struct vki_mq_attr {
1271 long mq_flags;
1272 long mq_maxmsg;
1273 long mq_msgsize;
1274 long mq_curmsgs;
1275 };
1276
1277
1278
1279
1280
1281 #define VKI_UCF_SWAPPED 1
1282
1283 struct vki_ucontext {
1284 vki_sigset_t uc_sigmask;
1285 struct vki_mcontext uc_mcontext;
1286 struct vki_ucontext* uc_link;
1287 vki_stack_t uc_stack;
1288 int uc_flags;
1289 unsigned int __spare__[4];
1290 };
1291
1292
1293
1294
1295
1296 #define VKI_SYS_NMLN 32
1297
1298 struct vki_utsname {
1299 char sysname[VKI_SYS_NMLN];
1300 char nodename[VKI_SYS_NMLN];
1301 char release[VKI_SYS_NMLN];
1302 char version[VKI_SYS_NMLN];
1303 char machine[VKI_SYS_NMLN];
1304 };
1305
1306 #define VKI_IPC_CREAT 00001000
1307 #define VKI_IPC_EXCL 00002000
1308 #define VKI_IPC_NOWAIT 00004000
1309
1310 #define VKI_IPC_RMID 0
1311 #define VKI_IPC_SET 1
1312 #define VKI_IPC_STAT 2
1313 #define VKI_IPC_INFO 3
1314
1315
1316
1317
1318
1319 struct vki_ipc_perm_old {
1320 unsigned short cuid;
1321 unsigned short cgid;
1322 unsigned short uid;
1323 unsigned short gid;
1324 unsigned short mode;
1325 unsigned short seq;
1326 vki_key_t key;
1327 };
1328
1329 struct vki_ipc_perm {
1330 vki_uid_t cuid;
1331 vki_gid_t cgid;
1332 vki_uid_t uid;
1333 vki_gid_t gid;
1334 vki_mode_t mode;
1335 unsigned short seq;
1336 vki_key_t key;
1337 };
1338
1339
1340
1341
1342
1343 #define VKI_GETALL 6
1344 #define VKI_SETVAL 8
1345 #define VKI_SETALL 9
1346 #define VKI_SEM_STAT 10
1347 #define VKI_SEM_INFO 11
1348
1349 struct vki_semid_ds_old {
1350 struct vki_ipc_perm_old sem_perm;
1351 struct sem *__sem_base;
1352 unsigned short sem_nsems;
1353 vki_time_t sem_otime;
1354 long sem_pad1;
1355 vki_time_t sem_ctime;
1356 long sem_pad2;
1357 long sem_pad3[4];
1358 };
1359
1360
1361
1362 struct vki_semid_ds {
1363 struct vki_ipc_perm sem_perm;
1364
1365 void*sem_base;
1366 unsigned short sem_nsems;
1367 vki_time_t sem_otime;
1368 vki_time_t sem_ctime;
1369 };
1370
1371 struct vki_sembuf {
1372 vki_uint16_t sem_num;
1373 vki_int16_t sem_op;
1374 vki_int16_t sem_flg;
1375 };
1376
1377 union vki_semun {
1378 int val;
1379 struct vki_semid_ds *buf;
1380 vki_uint16_t *array;
1381 };
1382
1383
1384
1385
1386
1387
1388 #define VKI_ERESTART -1
1389 #define VKI_EPERM 1
1390 #define VKI_ENOENT 2
1391 #define VKI_ESRCH 3
1392 #define VKI_EINTR 4
1393 #define VKI_EIO 5
1394 #define VKI_ENXIO 6
1395 #define VKI_E2BIG 7
1396 #define VKI_ENOEXEC 8
1397 #define VKI_EBADF 9
1398 #define VKI_ECHILD 10
1399 #define VKI_EDEADLK 11
1400 #define VKI_ENOMEM 12
1401 #define VKI_EACCES 13
1402 #define VKI_EFAULT 14
1403 #define VKI_ENOTBLK 15
1404 #define VKI_EBUSY 16
1405 #define VKI_EEXIST 17
1406 #define VKI_EXDEV 18
1407 #define VKI_ENODEV 19
1408 #define VKI_ENOTDIR 20
1409 #define VKI_EISDIR 21
1410 #define VKI_EINVAL 22
1411 #define VKI_ENFILE 23
1412 #define VKI_EMFILE 24
1413 #define VKI_ENOTTY 25
1414 #define VKI_ETXTBSY 26
1415 #define VKI_EFBIG 27
1416 #define VKI_ENOSPC 28
1417 #define VKI_ESPIPE 29
1418 #define VKI_EROFS 30
1419 #define VKI_EMLINK 31
1420 #define VKI_EPIPE 32
1421 #define VKI_EDOM 33
1422 #define VKI_ERANGE 34
1423 #define VKI_EAGAIN 35
1424 #define VKI_EWOULDBLOCK VKI_EAGAIN
1425 #define VKI_EINPROGRESS 36
1426 #define VKI_EALREADY 37
1427 #define VKI_ENOTSOCK 38
1428 #define VKI_EDESTADDRREQ 39
1429 #define VKI_EMSGSIZE 40
1430 #define VKI_EPROTOTYPE 41
1431 #define VKI_ENOPROTOOPT 42
1432 #define VKI_EPROTONOSUPPORT 43
1433 #define VKI_ESOCKTNOSUPPORT 44
1434 #define VKI_EOPNOTSUPP 45
1435 #define VKI_ENOTSUP VKI_EOPNOTSUPP
1436 #define VKI_EPFNOSUPPORT 46
1437 #define VKI_EAFNOSUPPORT 47
1438 #define VKI_EADDRINUSE 48
1439 #define VKI_EADDRNOTAVAIL 49
1440 #define VKI_ENETDOWN 50
1441 #define VKI_ENETUNREACH 51
1442 #define VKI_ENETRESET 52
1443 #define VKI_ECONNABORTED 53
1444 #define VKI_ECONNRESET 54
1445 #define VKI_ENOBUFS 55
1446 #define VKI_EISCONN 56
1447 #define VKI_ENOTCONN 57
1448 #define VKI_ESHUTDOWN 58
1449 #define VKI_ETOOMANYREFS 59
1450 #define VKI_ETIMEDOUT 60
1451 #define VKI_ECONNREFUSED 61
1452 #define VKI_ELOOP 62
1453 #define VKI_ENAMETOOLONG 63
1454 #define VKI_EHOSTDOWN 64
1455 #define VKI_EHOSTUNREACH 65
1456 #define VKI_ENOTEMPTY 66
1457 #define VKI_EPROCLIM 67
1458 #define VKI_EUSERS 68
1459 #define VKI_EDQUOT 69
1460 #define VKI_ESTALE 70
1461 #define VKI_EREMOTE 71
1462 #define VKI_EBADRPC 72
1463 #define VKI_ERPCMISMATCH 73
1464 #define VKI_EPROGUNAVAIL 74
1465 #define VKI_EPROGMISMATCH 75
1466 #define VKI_EPROCUNAVAIL 76
1467 #define VKI_ENOLCK 77
1468 #define VKI_ENOSYS 78
1469 #define VKI_EFTYPE 79
1470 #define VKI_EAUTH 80
1471 #define VKI_ENEEDAUTH 81
1472 #define VKI_EIDRM 82
1473 #define VKI_ENOMSG 83
1474 #define VKI_EOVERFLOW 84
1475 #define VKI_ECANCELED 85
1476 #define VKI_EILSEQ 86
1477 #define VKI_ENOATTR 87
1478 #define VKI_EDOOFUS 88
1479 #define VKI_EBADMSG 89
1480 #define VKI_EMULTIHOP 90
1481 #define VKI_ENOLINK 91
1482 #define VKI_EPROTO 92
1483 #define VKI_ENOTCAPABLE 93
1484 #define VKI_ECAPMODE 94
1485
1486
1487
1488
1489
1490 #define VKI_WNOHANG 0x00000001
1491
1492 typedef enum vki_idtype {
1493 VKI_P_PID,
1494 VKI_P_PPID,
1495 VKI_P_PGID,
1496 VKI_P_SID,
1497 VKI_P_CID,
1498 VKI_P_UID,
1499 VKI_P_GID,
1500 VKI_P_ALL,
1501 VKI_P_LWPID,
1502 VKI_P_TASKID,
1503 VKI_P_PROJID,
1504 VLI_P_POOLID,
1505 VKI_P_JAILID,
1506 VKI_P_CTID,
1507 VKI_P_CPUID,
1508 VKI_P_PSETID
1509 } vki_idtype_t;
1510
1511
1512
1513
1514
1515 #define VKI_PROT_NONE 0x00
1516 #define VKI_PROT_READ 0x01
1517 #define VKI_PROT_WRITE 0x02
1518 #define VKI_PROT_EXEC 0x04
1519
1520 #define VKI_MAP_SHARED 0x01
1521 #define VKI_MAP_PRIVATE 0x02
1522 #define VKI_MAP_FIXED 0x10
1523 #define VKI_MAP_NORESERVE 0x0040
1524 #define VKI_MAP_STACK 0x400
1525 #define VKI_MAP_ANON 0x1000
1526 #define VKI_MAP_ANONYMOUS VKI_MAP_ANON
1527
1528
1529
1530
1531
1532 #define VKI_S_IFMT 00170000
1533
1534 #define VKI_S_IFWHT 0160000
1535 #define VKI_S_IFSOCK 0140000
1536 #define VKI_S_IFLNK 0120000
1537 #define VKI_S_IFREG 0100000
1538 #define VKI_S_IFBLK 0060000
1539 #define VKI_S_IFDIR 0040000
1540 #define VKI_S_IFCHR 0020000
1541 #define VKI_S_IFIFO 0010000
1542 #define VKI_S_ISUID 0004000
1543 #define VKI_S_ISGID 0002000
1544 #define VKI_S_ISTXT 0001000
1545
1546 #define VKI_S_ISLNK(m) (((m) & VKI_S_IFMT) == VKI_S_IFLNK)
1547 #define VKI_S_ISREG(m) (((m) & VKI_S_IFMT) == VKI_S_IFREG)
1548 #define VKI_S_ISDIR(m) (((m) & VKI_S_IFMT) == VKI_S_IFDIR)
1549 #define VKI_S_ISCHR(m) (((m) & VKI_S_IFMT) == VKI_S_IFCHR)
1550 #define VKI_S_ISBLK(m) (((m) & VKI_S_IFMT) == VKI_S_IFBLK)
1551 #define VKI_S_ISFIFO(m) (((m) & VKI_S_IFMT) == VKI_S_IFIFO)
1552 #define VKI_S_ISSOCK(m) (((m) & VKI_S_IFMT) == VKI_S_IFSOCK)
1553 #define VKI_S_ISWHT(m) (((m) & VKI_S_IFMT) == VKI_S_IFWHT)
1554
1555 #define VKI_S_IRWXU 00700
1556 #define VKI_S_IRUSR 00400
1557 #define VKI_S_IWUSR 00200
1558 #define VKI_S_IXUSR 00100
1559
1560 #define VKI_S_IRWXG 00070
1561 #define VKI_S_IRGRP 00040
1562 #define VKI_S_IWGRP 00020
1563 #define VKI_S_IXGRP 00010
1564
1565 #define VKI_S_IRWXO 00007
1566 #define VKI_S_IROTH 00004
1567 #define VKI_S_IWOTH 00002
1568 #define VKI_S_IXOTH 00001
1569
1570
1571
1572
1573
1574
1575 struct vki_dirent {
1576 vki_uint32_t d_fileno;
1577 vki_uint16_t d_reclen;
1578 vki_uint8_t d_type;
1579 vki_uint8_t d_namelen;
1580 char vki_d_name[256];
1581 };
1582
1583
1584
1585
1586
1587 #define VKI_O_RDONLY O_RDONLY
1588 #define VKI_O_WRONLY O_WRONLY
1589 #define VKI_O_RDWR O_RDWR
1590
1591 #define VKI_FREAD FREAD
1592 #define VKI_WRITE WRITE
1593
1594 #define VKI_O_NONBLOCK O_NONBLOCK
1595 #define VKI_O_APPEND O_APPEND
1596 #define VKI_O_CREAT O_CREAT
1597 #define VKI_O_TRUNC O_TRUNC
1598 #define VKI_O_EXCL O_EXCL
1599 #define VKI_O_DIRECTORY O_DIRECTORY
1600 #define VKI_O_EXEC O_EXEC
1601 #define VKI_O_SEARCH O_EXEC
1602
1603 #define VKI_AT_FDCWD AT_FDCWD
1604 #define VKI_AT_SYMLINK_NOFOLLOW 0x0200
1605
1606
1607 #define VKI_F_DUPFD 0
1608 #define VKI_F_GETFD 1
1609 #define VKI_F_SETFD 2
1610 #define VKI_F_GETFL 3
1611 #define VKI_F_SETFL 4
1612 #define VKI_F_SETOWN 5
1613 #define VKI_F_GETOWN 6
1614 #define VKI_F_OGETLK 7
1615 #define VKI_F_OSETLK 8
1616 #define VKI_F_OSETLKW 9
1617 #define VKI_F_DUP2FD 10
1618 #define VKI_F_GETLK 11
1619 #define VKI_F_SETLK 12
1620 #define VKI_F_SETLKW 13
1621 #define VKI_F_SETLK_REMOTE 14
1622 #define VKI_F_READAHEAD 15
1623 #define VKI_F_RDAHEAD 16
1624 #define VKI_F_DUPFD_CLOEXEC 17
1625 #define VKI_F_DUP2FD_CLOEXEC 18
1626 #define VKI_F_ADD_SEALS 19
1627 #define VKI_F_GET_SEALS 20
1628 #define VKI_F_ISUNIONSTACK 21
1629
1630 #define VKI_F_KINFO 22
1631
1632
1633 #define VKI_FD_CLOEXEC 1
1634
1635
1636 #define VKI_F_SEAL_SEAL 0x0001
1637 #define VKI_F_SEAL_SHRINK 0x0002
1638 #define VKI_F_SEAL_GROW 0x0004
1639 #define VKI_F_SEAL_WRITE 0x0008
1640
1641 struct vki_spacectl_range {
1642 vki_off_t r_offset;
1643 vki_off_t r_len;
1644 };
1645
1646
1647
1648
1649
1650
1651 #define VKI_SEEK_SET 0
1652 #define VKI_SEEK_CUR 1
1653 #define VKI_SEEK_END 2
1654
1655 #define VKI_F_OK 0
1656 #define VKI_X_OK 0x01
1657 #define VKI_W_OK 0x02
1658 #define VKI_R_OK 0x04
1659
1660 #define VKI_RFSPAWN (1U<<31U)
1661
1662
1663 #define VKI_KCMP_FILE 100
1664 #define VKI_KCMP_FILEOBJ 101
1665 #define VKI_KCMP_FILES 102
1666 #define VKI_KCMP_SIGHAND 103
1667 #define VKI_KCMP_VM 104
1668
1669 #define VKI_CLOSE_RANGE_CLOEXEC (1<<2)
1670
1671
1672
1673
1674
1675 #if 0
1676 #define VKI_MSGSND 11
1677 #define VKI_MSGRCV 12
1678 #define VKI_MSGGET 13
1679 #define VKI_MSGCTL 14
1680 #endif
1681
1682 typedef unsigned long vki_msglen_t;
1683 typedef unsigned long vki_msgqnum_t;
1684
1685 struct vki_msqid_ds_old {
1686 struct vki_ipc_perm_old msg_perm;
1687 struct vki_msg *msg_first;
1688 struct vki_msg *msg_last;
1689 vki_msglen_t msg_cbytes;
1690 vki_msgqnum_t msg_qnum;
1691 vki_msglen_t msg_qbytes;
1692 vki_pid_t msg_lspid;
1693 vki_pid_t msg_lrpid;
1694 vki_time_t msg_stime;
1695 vki_uint32_t msg_pad1;
1696 vki_time_t msg_rtime;
1697 vki_uint32_t msg_pad2;
1698 vki_time_t msg_ctime;
1699 vki_uint32_t msg_pad3;
1700 vki_uint32_t msg_pad4[4];
1701 };
1702
1703 struct vki_msqid_ds {
1704 struct vki_ipc_perm msg_perm;
1705 struct vki_msg *msg_first;
1706 struct vki_msg *msg_last;
1707 vki_msglen_t msg_cbytes;
1708 vki_msgqnum_t msg_qnum;
1709 vki_msglen_t msg_qbytes;
1710 vki_pid_t msg_lspid;
1711 vki_pid_t msg_lrpid;
1712 vki_time_t msg_stime;
1713 vki_time_t msg_rtime;
1714 vki_time_t msg_ctime;
1715 };
1716
1717
1718 struct vki_msgbuf {
1719 long mtype;
1720 char mtext[1];
1721 };
1722
1723
1724
1725
1726
1727
1728 struct vki_shmid_ds_old {
1729 struct vki_ipc_perm_old shm_perm;
1730 int shm_segsz;
1731 vki_pid_t shm_lpid;
1732 vki_pid_t shm_cpid;
1733 short shm_nattch;
1734 vki_time_t shm_atime;
1735 vki_time_t shm_dtime;
1736 vki_time_t shm_ctime;
1737 void *shm_internal;
1738 };
1739
1740
1741 struct vki_shmid_ds {
1742 struct vki_ipc_perm shm_perm;
1743 vki_size_t shm_segsz;
1744 vki_pid_t shm_lpid;
1745 vki_pid_t shm_cpid;
1746 int shm_nattch;
1747 vki_time_t shm_atime;
1748 vki_time_t shm_dtime;
1749 vki_time_t shm_ctime;
1750 };
1751
1752 #define VKI_SHMLBA VKI_PAGE_SIZE
1753 #define VKI_SHM_RDONLY 010000
1754 #define VKI_SHM_ANON (1UL)
1755
1756 #if 0
1757 #define VKI_SHMAT 21
1758 #define VKI_SHMDT 22
1759 #define VKI_SHMGET 23
1760 #define VKI_SHMCTL 24
1761 #endif
1762
1763
1764
1765
1766
1767 #define VKI_PTRACE_TRACEME 0
1768 #define VKI_PTRACE_READ_I 1
1769 #define VKI_PTRACE_READ_D 2
1770
1771 #define VKI_PTRACE_WRITE_I 4
1772 #define VKI_PTRACE_WRITE_D 5
1773
1774 #define VKI_PTRACE_CONTINUE 7
1775 #define VKI_PTRACE_KILL 8
1776 #define VKI_PTRACE_STEP 9
1777 #define VKI_PTRACE_ATTACH 10
1778 #define VKI_PTRACE_DETACH 11
1779 #define VKI_PTRACE_IO 12
1780 #define VKI_PTRACE_LWPINFO 13
1781 #define VKI_PTRACE_GETNUMLWPS 14
1782 #define VKI_PTRACE_GETLWPLIST 15
1783 #define VKI_PTRACE_CLEARSTEP 16
1784 #define VKI_PTRACE_SETSTEP 17
1785 #define VKI_PTRACE_SUSPEND 18
1786 #define VKI_PTRACE_RESUME 19
1787 #define VKI_PTRACE_TO_SCE 20
1788 #define VKI_PTRACE_TO_SCX 21
1789 #define VKI_PTRACE_SYSCALL 22
1790
1791 #define VKI_PTRACE_GETREGS 33
1792 #define VKI_PTRACE_SETREGS 34
1793 #define VKI_PTRACE_GETFPREGS 35
1794 #define VKI_PTRACE_SETFPREGS 36
1795 #define VKI_PTRACE_GETDBREGS 37
1796 #define VKI_PTRACE_SETDBREGS 38
1797
1798 #define VKI_PTRACE_VM_TIMESTAMP 40
1799 #define VKI_PTRACE_VM_ENTRY 41
1800
1801 #define VKI_PTRACE_FIRSTMACH 64
1802
1803 struct vki_ptrace_io_desc {
1804 int piod_op;
1805 void * piod_offs;
1806 void * piod_addr;
1807 vki_size_t piod_len;
1808 };
1809 #define VKI_PIOD_READ_D 1
1810 #define VKI_PIOD_WRITE_D 2
1811 #define VKI_PIOD_READ_I 3
1812 #define VKI_PIOD_WRITE_I 4
1813
1814 struct vki_ptrace_lwpinfo {
1815 vki_lwpid_t pl_lwpid;
1816 int pl_event;
1817 #define VKI_PL_EVENT_NONE 0
1818 #define VKI_PL_EVENT_SIGNAL 1
1819 int pl_flags;
1820 #define VKI_FLAG_SA 0x01
1821 #define VKI_FLAG_BOUND 0x02
1822 vki_sigset_t pl_sigmask;
1823 vki_sigset_t pl_siglist;
1824 };
1825
1826 struct vki_ptrace_vm_entry {
1827 int pve_entry;
1828 int pve_timestamp;
1829 unsigned long pve_start;
1830 unsigned long pve_end;
1831 unsigned long pve_offset;
1832 unsigned int pve_prot;
1833 unsigned int pve_pathlen;
1834 long pve_fileid;
1835 vki_uint32_t pve_fsid;
1836 char *pve_path;
1837 };
1838
1839 #endif
1840
1841
1842
1843
1844
1845
1846 #define VKI_I386_GET_FSBASE 7
1847 #define VKI_I386_SET_FSBASE 8
1848 #define VKI_I386_GET_GSBASE 9
1849 #define VKI_I386_SET_GSBASE 10
1850 #define VKI_I386_GET_XFPUSTATE 11
1851
1852 #define VKI_AMD64_GET_FSBASE 128
1853 #define VKI_AMD64_SET_FSBASE 129
1854 #define VKI_AMD64_GET_GSBASE 130
1855 #define VKI_AMD64_SET_GSBASE 131
1856 #define VKI_AMD64_GET_XFPUSTATE 132
1857
1858
1859
1860
1861
1862 #define VKI_MAXMODNAME 32
1863
1864 typedef union vki_modspecific {
1865 vki_int32_t intval;
1866 vki_uint32_t u_intval;
1867 #if defined(VGP_x86_freebsd)
1868 vki_int32_t longval;
1869 vki_uint32_t u_longval;
1870 #elif defined(VGP_amd64_freebsd) || defined(VGP_arm64_freebsd)
1871 vki_int64_t longval;
1872 vki_uint64_t u_longval;
1873 #else
1874 #error Unknown platform
1875 #endif
1876 } vki_modspecific_t;
1877
1878 struct vki_module_stat {
1879 int version;
1880 char name[VKI_MAXMODNAME];
1881 int refs;
1882 int id;
1883 vki_modspecific_t data;
1884 };
1885
1886
1887
1888
1889
1890 struct vki_rtprio {
1891 vki_uint16_t type;
1892 vki_uint16_t prio;
1893 };
1894
1895 #define VKI_RTP_LOOKUP 0
1896 #define VKI_RTP_SET 1
1897
1898
1899
1900
1901
1902 struct vki_umtx {
1903 unsigned long u_owner;
1904 };
1905
1906 struct vki_umutex {
1907 vki_lwpid_t m_owner;
1908 vki_uint32_t m_flags;
1909 vki_uint32_t m_ceilings[2];
1910 vki_uint32_t m_spare[4];
1911 };
1912
1913 struct vki_ucond {
1914 vki_uint32_t c_has_waiters;
1915 vki_uint32_t c_flags;
1916 vki_uint32_t c_spare[2];
1917 };
1918
1919 struct vki_urwlock {
1920 vki_uint32_t rw_state;
1921 vki_uint32_t rw_flags;
1922 vki_uint32_t rw_blocked_readers;
1923 vki_uint32_t rw_blocked_writers;
1924 vki_uint32_t rw_spare[4];
1925 };
1926
1927 struct vki_usem {
1928 vki_uint32_t has_waiters;
1929 vki_uint32_t count;
1930 vki_uint32_t flags;
1931 };
1932
1933 struct vki_umtx_time {
1934 struct vki_timespec timeout;
1935 vki_uint32_t flags;
1936 vki_uint32_t clockid;
1937 };
1938
1939 struct vki_usem2 {
1940 vki_uint32_t count;
1941 vki_uint32_t flags;
1942 };
1943
1944 struct vki_umtx_robust_lists_params {
1945 vki_uintptr_t robust_list_offset;
1946 vki_uintptr_t robust_priv_list_offset;
1947 vki_uintptr_t robust_inact_offset;
1948 };
1949
1950 #define VKI_UMTX_OP_LOCK 0
1951 #define VKI_UMTX_OP_UNLOCK 1
1952 #define VKI_UMTX_OP_WAIT 2
1953 #define VKI_UMTX_OP_WAKE 3
1954 #define VKI_UMTX_OP_MUTEX_TRYLOCK 4
1955 #define VKI_UMTX_OP_MUTEX_LOCK 5
1956 #define VKI_UMTX_OP_MUTEX_UNLOCK 6
1957 #define VKI_UMTX_OP_SET_CEILING 7
1958 #define VKI_UMTX_OP_CV_WAIT 8
1959 #define VKI_UMTX_OP_CV_SIGNAL 9
1960 #define VKI_UMTX_OP_CV_BROADCAST 10
1961 #define VKI_UMTX_OP_WAIT_UINT 11
1962 #define VKI_UMTX_OP_RW_RDLOCK 12
1963 #define VKI_UMTX_OP_RW_WRLOCK 13
1964 #define VKI_UMTX_OP_RW_UNLOCK 14
1965 #define VKI_UMTX_OP_WAIT_UINT_PRIVATE 15
1966 #define VKI_UMTX_OP_WAKE_PRIVATE 16
1967 #define VKI_UMTX_OP_MUTEX_WAIT 17
1968 #define VKI_UMTX_OP_MUTEX_WAKE 18
1969 #define VKI_UMTX_OP_SEM_WAIT 19
1970 #define VKI_UMTX_OP_SEM_WAKE 20
1971 #define VKI_UMTX_OP_NWAKE_PRIVATE 21
1972 #define VKI_UMTX_OP_MUTEX_WAKE2 22
1973 #define VKI_UMTX_OP_SEM2_WAIT 23
1974 #define VKI_UMTX_OP_SEM2_WAKE 24
1975 #define VKI_UMTX_OP_SHM 25
1976 #define VKI_UMTX_OP_ROBUST_LISTS 26
1977 #define VKI_UMTX_OP_GET_MIN_TIMEOUT 27
1978 #define VKI_UMTX_OP_SET_MIN_TIMEOUT 28
1979
1980 #define VKI_UMTX_SHM_CREAT 0x0001
1981
1982
1983
1984
1985
1986 struct vki_acl_entry {
1987 int ae_tag;
1988 vki_uid_t ae_uid;
1989 vki_mode_t ae_perm;
1990 };
1991
1992 #define VKI_ACL_MAX_ENTRIES 32
1993 struct vki_acl {
1994 int acl_cnt;
1995 struct vki_acl_entry acl_entry[VKI_ACL_MAX_ENTRIES];
1996 };
1997
1998
1999
2000
2001
2002
2003 struct vki_uuid {
2004 vki_uint32_t time_low;
2005 vki_uint16_t time_mid;
2006 vki_uint16_t time_hi_and_version;
2007 vki_uint8_t clock_seq_hi_and_reserved;
2008 vki_uint8_t clock_seq_low;
2009 vki_uint8_t node[6];
2010 };
2011
2012
2013
2014
2015
2016 #define VKI__SS_MAXSIZE 128U
2017 #define VKI__SS_ALIGNSIZE (sizeof(__int64_t))
2018 #define VKI__SS_PAD1SIZE (VKI__SS_ALIGNSIZE - sizeof(unsigned char) - \
2019 sizeof(vki_sa_family_t))
2020 #define VKI__SS_PAD2SIZE (VKI__SS_MAXSIZE - sizeof(unsigned char) - \
2021 sizeof(vki_sa_family_t) - VKI__SS_PAD1SIZE - VKI__SS_ALIGNSIZE)
2022
2023 struct vki_sockaddr_storage {
2024 unsigned char vki_ss_len;
2025 vki_sa_family_t vki_ss_family;
2026 char vki___ss_pad1[VKI__SS_PAD1SIZE];
2027 __int64_t vki___ss_align;
2028 char vki___ss_pad2VKI_[VKI__SS_PAD2SIZE];
2029 };
2030
2031
2032
2033
2034
2035 #define VKI_CAP_RIGHTS_VERSION_00 0
2036 #define VKI_CAP_RIGHTS_VERSION VKI_CAP_RIGHTS_VERSION_00
2037
2038 struct vki_cap_rights {
2039 vki_uint64_t cki_cr_rights[VKI_CAP_RIGHTS_VERSION + 2];
2040 };
2041
2042 typedef struct vki_cap_rights vki_cap_rights_t;
2043
2044
2045
2046
2047
2048
2049 #define VKI_KVME_TYPE_NONE 0
2050 #define VKI_KVME_TYPE_DEFAULT 1
2051 #define VKI_KVME_TYPE_VNODE 2
2052 #define VKI_KVME_TYPE_SWAP 3
2053 #define VKI_KVME_TYPE_DEVICE 4
2054 #define VKI_KVME_TYPE_PHYS 5
2055 #define VKI_KVME_TYPE_DEAD 6
2056 #define VKI_KVME_TYPE_MGTDEVICE 8
2057 #define VKI_KVME_TYPE_GUARD 9
2058 #define VKI_KVME_TYPE_UNKNOWN 255
2059
2060 #define VKI_KVME_PROT_READ 0x00000001
2061 #define VKI_KVME_PROT_WRITE 0x00000002
2062 #define VKI_KVME_PROT_EXEC 0x00000004
2063
2064 #define VKI_KVME_FLAG_COW 0x00000001
2065 #define VKI_KVME_FLAG_NEEDS_COPY 0x00000002
2066 #define VKI_KVME_FLAG_NOCOREDUMP 0x00000004
2067 #define VKI_KVME_FLAG_SUPER 0x00000008
2068 #define VKI_KVME_FLAG_GROWS_UP 0x00000010
2069 #define VKI_KVME_FLAG_GROWS_DOWN 0x00000020
2070 #define VKI_KVME_FLAG_USER_WIRED 0x00000040
2071
2072 struct vki_kinfo_vmentry {
2073 int kve_structsize;
2074 int kve_type;
2075 ULong kve_start;
2076 ULong kve_end;
2077 ULong kve_offset;
2078 ULong kve_fileid;
2079 UInt kve_vn_fsid_freebsd11;
2080 int kve_flags;
2081 int kve_resident;
2082 int kve_private_resident;
2083 int kve_protection;
2084 int kve_ref_count;
2085 int kve_shadow_count;
2086 int kve_vn_type;
2087 ULong kve_vn_size;
2088 UInt kve_vn_rdev_freebsd11;
2089 UShort kve_vn_mode;
2090 UShort kve_status;
2091 ULong kve_vn_fsid;
2092 ULong kve_vn_rdev;
2093 int _kve_ispare[8];
2094 char kve_path[VKI_PATH_MAX];
2095 };
2096
2097 #define VKI_KINFO_FILE_SIZE 1392
2098
2099 struct vki_kinfo_file {
2100 int vki_kf_structsize;
2101 int vki_kf_type;
2102 int vki_kf_fd;
2103 int vki_kf_ref_count;
2104 int vki_kf_flags;
2105 int vki_kf_pad0;
2106 Off64T vki_kf_offset;
2107 union {
2108 struct {
2109
2110 int vki_kf_vnode_type;
2111 int vki_kf_sock_domain;
2112 int vki_kf_sock_type;
2113 int kf_sock_protocol;
2114 struct vki_sockaddr_storage vki_kf_sa_local;
2115 struct vki_sockaddr_storage vki_kf_sa_peer;
2116 };
2117 union {
2118 struct {
2119
2120 vki_uint32_t vki_kf_sock_sendq;
2121
2122 int vki_kf_sock_domain0;
2123
2124 int vki_kf_sock_type0;
2125
2126 int vki_kf_sock_protocol0;
2127
2128 struct vki_sockaddr_storage vki_kf_sa_local;
2129
2130 struct vki_sockaddr_storage vki_kf_sa_peer;
2131
2132 vki_uint64_t vki_kf_sock_pcb;
2133
2134 vki_uint64_t vki_kf_sock_inpcb;
2135
2136 vki_uint64_t vki_kf_sock_unpconn;
2137
2138 vki_uint16_t vki_kf_sock_snd_sb_state;
2139
2140 vki_uint16_t vki_kf_sock_rcv_sb_state;
2141
2142 vki_uint32_t vki_kf_sock_recvq;
2143 } vki_kf_sock;
2144 struct {
2145
2146 int vki_kf_file_type;
2147
2148 int vki_kf_spareint[3];
2149 vki_uint64_t vki_kf_spareint64[30];
2150
2151 vki_uint64_t vki_kf_file_fsid;
2152
2153 vki_uint64_t vki_kf_file_rdev;
2154
2155 vki_uint64_t vki_kf_file_fileid;
2156
2157 vki_uint64_t vki_kf_file_size;
2158
2159 vki_uint32_t vki_kf_file_fsid_freebsd11;
2160
2161 vki_uint32_t kf_file_rdev_freebsd11;
2162
2163 vki_uint16_t vki_kf_file_mode;
2164
2165 vki_uint16_t vki_kf_file_pad0;
2166 vki_uint32_t kf_file_pad1;
2167 } kf_file;
2168 struct {
2169 vki_uint32_t vki_kf_spareint[4];
2170 vki_uint64_t vki_kf_spareint64[32];
2171 vki_uint32_t vki_kf_sem_value;
2172 vki_uint16_t vki_kf_sem_mode;
2173 } kf_sem;
2174 struct {
2175 vki_uint32_t vki_kf_spareint[4];
2176 vki_uint64_t vki_kf_spareint64[32];
2177 vki_uint64_t vki_kf_pipe_addr;
2178 vki_uint64_t vki_kf_pipe_peer;
2179 vki_uint32_t vki_kf_pipe_buffer_cnt;
2180
2181 vki_uint32_t vki_kf_pipe_pad0[3];
2182 } kf_pipe;
2183 struct {
2184 vki_uint32_t vki_kf_spareint[4];
2185 vki_uint64_t vki_kf_spareint64[32];
2186 vki_uint32_t vki_kf_pts_dev_freebsd11;
2187 vki_uint32_t vki_kf_pts_pad0;
2188 vki_uint64_t vki_kf_pts_dev;
2189
2190 vki_uint32_t vki_kf_pts_pad1[4];
2191 } kf_pts;
2192 struct {
2193 vki_uint32_t vki_kf_spareint[4];
2194 vki_uint64_t vki_kf_spareint64[32];
2195 vki_pid_t vki_kf_pid;
2196 } vki_kf_proc;
2197 struct {
2198 vki_uint64_t vki_kf_eventfd_value;
2199 vki_uint32_t vki_kf_eventfd_flags;
2200 } vki_kf_eventfd;
2201 } vki_kf_un;
2202 };
2203 vki_uint16_t vki_kf_status;
2204 vki_uint16_t vki_kf_pad1;
2205 int vki__kf_ispare0;
2206 vki_cap_rights_t vki_kf_cap_rights;
2207 vki_uint64_t vki__kf_cap_spare;
2208
2209 char vki_kf_path[VKI_PATH_MAX];
2210 };
2211
2212
2213
2214
2215 #define VKI_KENV_GET 0
2216 #define VKI_KENV_SET 1
2217 #define VKI_KENV_UNSET 2
2218 #define VKI_KENV_DUMP 3
2219
2220
2221
2222
2223
2224 #include <sys/sysctl.h>
2225
2226 #define VKI_CTL_KERN CTL_KERN
2227 #define VKI_CTL_HW CTL_HW
2228 #define VKI_KERN_PROC KERN_PROC
2229 #define VKI_KERN_PROC_VMMAP KERN_PROC_VMMAP
2230 #define VKI_KERN_PROC_FILEDESC KERN_PROC_FILEDESC
2231 #define VKI_HW_MACHINE HW_MACHINE
2232
2233
2234
2235
2236
2237 struct vki_thr_param {
2238 void (*start_func)(void *);
2239 void *arg;
2240 char *stack_base;
2241 vki_size_t stack_size;
2242 char *tls_base;
2243 vki_size_t tls_size;
2244 long *child_tid;
2245 long *parent_tid;
2246 int flags;
2247 struct vki_rtprio *rtp;
2248 void *spare[3];
2249 };
2250
2251
2252
2253
2254
2255 struct vki_kld_file_stat {
2256 int version;
2257 char name[MAXPATHLEN];
2258 int refs;
2259 int id;
2260 vki_caddr_t address;
2261 vki_size_t size;
2262 char pathname[MAXPATHLEN];
2263 };
2264
2265
2266 struct vki_kld_sym_lookup {
2267 int version;
2268 char *symname;
2269 unsigned long symvalue;
2270 vki_size_t symsize;
2271 };
2272
2273 #if !defined(VKI_INIT_ARCH_ELF_STATE)
2274
2275
2276
2277
2278
2279 struct vki_arch_elf_state {
2280 };
2281
2282 # define VKI_INIT_ARCH_ELF_STATE { }
2283
2284 #endif
2285
2286
2287
2288
2289
2290 #define VKI_Q_QUOTAON 0x0100
2291 #define VKI_Q_QUOTAOFF 0x0200
2292 #define VKI_Q_GETQUOTA32 0x0300
2293 #define VKI_Q_SETQUOTA32 0x0400
2294 #define VKI_Q_SETUSE32 0x0500
2295 #define VKI_Q_SYNC 0x0600
2296 #define VKI_Q_GETQUOTA 0x0700
2297 #define VKI_Q_SETQUOTA 0x0800
2298 #define VKI_Q_SETUSE 0x0900
2299 #define VKI_Q_GETQUOTASIZE 0x0A00
2300
2301
2302
2303
2304
2305 #define VKI_BITSET_BITS (sizeof(long) * 8)
2306
2307 #define vki__howmany(x, y) (((x) + ((y) - 1)) / (y))
2308
2309 #define vki__bitset_words(_s) (vki__howmany(_s, VKI_BITSET_BITS))
2310
2311 #define VKI_BITSET_DEFINE(t, _s) \
2312 struct t { \
2313 long __bits[vki__bitset_words((_s))]; \
2314 }
2315
2316
2317
2318
2319
2320 #define VKI_DOMAINSET_MAXSIZE 256
2321
2322 #ifndef VKI_DOMAINSET_SETSIZE
2323 #define VKI_DOMAINSET_SETSIZE VKI_DOMAINSET_MAXSIZE
2324 #endif
2325
2326 VKI_BITSET_DEFINE(vki_domainset, VKI_DOMAINSET_SETSIZE);
2327
2328 typedef struct vki_domainset vki_domainset_t;
2329
2330
2331
2332
2333
2334 #define VKI_PROC_SPROTECT 1
2335 #define VKI_PROC_REAP_ACQUIRE 2
2336 #define VKI_PROC_REAP_RELEASE 3
2337 #define VKI_PROC_REAP_STATUS 4
2338 #define VKI_PROC_REAP_GETPIDS 5
2339 #define VKI_PROC_REAP_KILL 6
2340 #define VKI_PROC_TRACE_CTL 7
2341 #define VKI_PROC_TRACE_STATUS 8
2342 #define VKI_PROC_TRAPCAP_CTL 9
2343 #define VKI_PROC_TRAPCAP_STATUS 10
2344 #define VKI_PROC_PDEATHSIG_CTL 11
2345 #define VKI_PROC_PDEATHSIG_STATUS 12
2346 #define VKI_PROC_ASLR_CTL 13
2347 #define VKI_PROC_ASLR_STATUS 14
2348 #define VKI_PROC_STACKGAP_CTL 17
2349 #define VKI_PROC_STACKGAP_STATUS 18
2350 #define VKI_PROC_NO_NEW_PRIVS_CTL 19
2351 #define VKI_PROC_NO_NEW_PRIVS_STATUS 20
2352 #define VKI_PROC_WXMAP_CTL 21
2353 #define VKI_PROC_WXMAP_STATUS 22
2354
2355 struct vki_procctl_reaper_status {
2356 vki_u_int rs_flags;
2357 vki_u_int rs_children;
2358 vki_u_int rs_descendants;
2359 vki_pid_t rs_reaper;
2360 vki_pid_t rs_pid;
2361 vki_u_int rs_pad0[15];
2362 };
2363
2364 struct vki_procctl_reaper_pidinfo;
2365
2366 struct vki_procctl_reaper_pids {
2367 vki_u_int rp_count;
2368 vki_u_int rp_pad0[15];
2369 struct vki_procctl_reaper_pidinfo *rp_pids;
2370 };
2371
2372 struct vki_procctl_reaper_kill {
2373 int rk_sig;
2374 vki_u_int rk_flags;
2375 vki_pid_t rk_subtree;
2376 vki_u_int rk_killed;
2377 vki_pid_t rk_fpid;
2378 vki_u_int rk_pad0[15];
2379 };
2380
2381
2382
2383
2384
2385 struct vki_jail {
2386 uint32_t version;
2387 char *path;
2388 char *hostname;
2389 char *jailname;
2390 uint32_t ip4s;
2391 uint32_t ip6s;
2392 struct in_addr *ip4;
2393 struct in6_addr *ip6;
2394 };
2395
2396
2397
2398
2399
2400 struct vki_ps_strings {
2401 char** ps_argvstr;
2402 unsigned int ps_nargvstr;
2403
2404 char** ps_envstr;
2405 unsigned int ps_nenvstr;
2406 };
2407
2408
2409
2410
2411
2412 #define VKI_AT_NULL 0
2413 #define VKI_AT_IGNORE 1
2414 #define VKI_AT_EXECFD 2
2415 #define VKI_AT_PHDR 3
2416 #define VKI_AT_PHENT 4
2417 #define VKI_AT_PHNUM 5
2418 #define VKI_AT_PAGESZ 6
2419 #define VKI_AT_BASE 7
2420 #define VKI_AT_FLAGS 8
2421 #define VKI_AT_ENTRY 9
2422 #define VKI_AT_NOTELF 10
2423 #define VKI_AT_UID 11
2424 #define VKI_AT_EUID 12
2425 #define VKI_AT_GID 13
2426 #define VKI_AT_EGID 14
2427 #define VKI_AT_EXECPATH 15
2428 #define VKI_AT_CANARY 16
2429 #define VKI_AT_CANARYLEN 17
2430 #define VKI_AT_OSRELDATE 18
2431 #define VKI_AT_NCPUS 19
2432 #define VKI_AT_PAGESIZES 20
2433 #define VKI_AT_PAGESIZESLEN 21
2434 #define VKI_AT_TIMEKEEP 22
2435 #define VKI_AT_STACKPROT 23
2436 #define VKI_AT_EHDRFLAGS 24
2437 #define VKI_AT_HWCAP 25
2438 #define VKI_AT_HWCAP2 26
2439
2440 #define VKI_AT_BSDFLAGS 27
2441 #define VKI_AT_ARGC 28
2442 #define VKI_AT_ARGV 29
2443 #define VKI_AT_ENVC 30
2444 #define VKI_AT_ENVV 31
2445 #define VKI_AT_PS_STRINGS 32
2446
2447 #define VKI_AT_FXRNG 33
2448 #define VKI_AT_KPRELOAD 34
2449
2450 #define VKI_AT_USRSTACKBASE 35
2451 #define VKI_AT_USRSTACKLIM 36
2452
2453
2454
2455
2456 #define VKI_NT_FREEBSD_ABI_TAG 1
2457 #define VKI_NT_FREEBSD_FEATURE_CTL 4
2458 #define VKI_NT_FREEBSD_FCTL_STKGAP_DISABLE 0x00000004
2459 #define VKI_NT_FREEBSD_FCTL_WXNEEDED 0x00000008
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489 #if defined(VGP_arm64_freebsd)
2490 #define vki_mode_t vki_int32_t
2491 #endif
2492
2493
2494
2495
2496
2497 typedef unsigned long vki_u_long;
2498 typedef unsigned int vki_u_int;
2499 #define VKI_PCI_MAXNAMELEN 16
2500
2501 typedef enum {
2502 VKI_PCI_GETCONF_LAST_DEVICE,
2503 VKI_PCI_GETCONF_LIST_CHANGED,
2504 VKI_PCI_GETCONF_MORE_DEVS,
2505 VKI_PCI_GETCONF_ERROR
2506 } vki_pci_getconf_status;
2507
2508 typedef enum {
2509 VKI_PCI_GETCONF_NO_MATCH = 0x0000,
2510 VKI_PCI_GETCONF_MATCH_DOMAIN = 0x0001,
2511 VKI_PCI_GETCONF_MATCH_BUS = 0x0002,
2512 VKI_PCI_GETCONF_MATCH_DEV = 0x0004,
2513 VKI_PCI_GETCONF_MATCH_FUNC = 0x0008,
2514 VKI_PCI_GETCONF_MATCH_NAME = 0x0010,
2515 VKI_PCI_GETCONF_MATCH_UNIT = 0x0020,
2516 VKI_PCI_GETCONF_MATCH_VENDOR = 0x0040,
2517 VKI_PCI_GETCONF_MATCH_DEVICE = 0x0080,
2518 VKI_PCI_GETCONF_MATCH_CLASS = 0x0100
2519 } vki_pci_getconf_flags;
2520
2521 struct vki_pcisel {
2522 vki_uint32_t pc_domain;
2523 vki_uint8_t pc_bus;
2524 vki_uint8_t pc_dev;
2525 vki_uint8_t pc_func;
2526 };
2527
2528 struct vki_pci_conf {
2529 struct vki_pcisel pc_sel;
2530 vki_uint8_t pc_hdr;
2531 vki_uint16_t pc_subvendor;
2532 vki_uint16_t pc_subdevice;
2533
2534 vki_uint16_t pc_vendor;
2535 vki_uint16_t pc_device;
2536
2537 vki_uint8_t pc_class;
2538 vki_uint8_t pc_subclass;
2539 vki_uint8_t pc_progif;
2540 vki_uint8_t pc_revid;
2541 char pd_name[VKI_PCI_MAXNAMELEN + 1];
2542 vki_u_long pd_unit;
2543 };
2544
2545 struct vki_pci_match_conf {
2546 struct vki_pcisel pc_sel;
2547 char pd_name[VKI_PCI_MAXNAMELEN + 1];
2548 vki_u_long pd_unit;
2549 vki_uint16_t pc_vendor;
2550 vki_uint16_t pc_device;
2551 vki_uint8_t pc_class;
2552 vki_pci_getconf_flags flags;
2553 };
2554
2555 struct vki_pci_conf_io {
2556 vki_uint32_t pat_buf_len;
2557 vki_uint32_t num_patterns;
2558 struct vki_pci_match_conf *patterns;
2559 vki_uint32_t match_buf_len;
2560 vki_uint32_t num_matches;
2561 struct vki_pci_conf *matches;
2562 vki_uint32_t offset;
2563 vki_uint32_t generation;
2564 vki_pci_getconf_status status;
2565 };
2566
2567 #define VKI_PCIOCGETCONF _VKI_IOWR('p', 5, struct vki_pci_conf_io)
2568
2569
2570
2571
2572
2573 #define VKI_CAM_MAX_CDBLEN 16
2574
2575 typedef unsigned int vki_path_id_t;
2576 typedef unsigned int vki_target_id_t;
2577 typedef unsigned int vki_lun_id_t;
2578
2579 typedef struct {
2580 vki_uint32_t priority;
2581 vki_uint32_t generation;
2582 int index;
2583 } vki_cam_pinfo;
2584
2585
2586
2587
2588
2589
2590 struct vki_ata_params {
2591 vki_u_int16_t config;
2592 vki_u_int16_t cylinders;
2593 vki_u_int16_t specconf;
2594 vki_u_int16_t heads;
2595 vki_u_int16_t obsolete4;
2596 vki_u_int16_t obsolete5;
2597 vki_u_int16_t sectors;
2598 vki_u_int16_t vendor7[3];
2599 vki_u_int8_t serial[20];
2600 vki_u_int16_t retired20;
2601 vki_u_int16_t retired21;
2602 vki_u_int16_t obsolete22;
2603 vki_u_int8_t revision[8];
2604 vki_u_int8_t model[40];
2605 vki_u_int16_t sectors_intr;
2606 vki_u_int16_t usedmovsd;
2607 vki_u_int16_t capabilities1;
2608 vki_u_int16_t capabilities2;
2609 vki_u_int16_t retired_piomode;
2610 vki_u_int16_t retired_dmamode;
2611 vki_u_int16_t atavalid;
2612 vki_u_int16_t current_cylinders;
2613 vki_u_int16_t current_heads;
2614 vki_u_int16_t current_sectors;
2615 vki_u_int16_t current_size_1;
2616 vki_u_int16_t current_size_2;
2617 vki_u_int16_t multi;
2618 vki_u_int16_t lba_size_1;
2619 vki_u_int16_t lba_size_2;
2620 vki_u_int16_t obsolete62;
2621 vki_u_int16_t mwdmamodes;
2622 vki_u_int16_t apiomodes;
2623
2624 vki_u_int16_t mwdmamin;
2625 vki_u_int16_t mwdmarec;
2626 vki_u_int16_t pioblind;
2627 vki_u_int16_t pioiordy;
2628 vki_u_int16_t support3;
2629 vki_u_int16_t reserved70;
2630 vki_u_int16_t rlsovlap;
2631 vki_u_int16_t rlsservice;
2632 vki_u_int16_t reserved73;
2633 vki_u_int16_t reserved74;
2634 vki_u_int16_t queue;
2635 vki_u_int16_t satacapabilities;
2636 vki_u_int16_t satacapabilities2;
2637 vki_u_int16_t satasupport;
2638 vki_u_int16_t sataenabled;
2639 vki_u_int16_t version_major;
2640 vki_u_int16_t version_minor;
2641
2642 struct {
2643 vki_u_int16_t command1;
2644 vki_u_int16_t command2;
2645 vki_u_int16_t extension;
2646 } __packed support, enabled;
2647
2648 vki_u_int16_t udmamodes;
2649 vki_u_int16_t erase_time;
2650 vki_u_int16_t enhanced_erase_time;
2651 vki_u_int16_t apm_value;
2652 vki_u_int16_t master_passwd_revision;
2653 vki_u_int16_t hwres;
2654 vki_u_int16_t acoustic;
2655 vki_u_int16_t stream_min_req_size;
2656 vki_u_int16_t stream_transfer_time;
2657 vki_u_int16_t stream_access_latency;
2658 vki_u_int32_t stream_granularity;
2659 vki_u_int16_t lba_size48_1;
2660 vki_u_int16_t lba_size48_2;
2661 vki_u_int16_t lba_size48_3;
2662 vki_u_int16_t lba_size48_4;
2663 vki_u_int16_t reserved104;
2664 vki_u_int16_t max_dsm_blocks;
2665 vki_u_int16_t pss;
2666 vki_u_int16_t isd;
2667 vki_u_int16_t wwn[4];
2668 vki_u_int16_t reserved112[5];
2669 vki_u_int16_t lss_1;
2670 vki_u_int16_t lss_2;
2671 vki_u_int16_t support2;
2672 vki_u_int16_t enabled2;
2673 vki_u_int16_t reserved121[6];
2674 vki_u_int16_t removable_status;
2675 vki_u_int16_t security_status;
2676 vki_u_int16_t reserved129[31];
2677 vki_u_int16_t cfa_powermode1;
2678 vki_u_int16_t reserved161;
2679 vki_u_int16_t cfa_kms_support;
2680 vki_u_int16_t cfa_trueide_modes;
2681 vki_u_int16_t cfa_memory_modes;
2682 vki_u_int16_t reserved165[4];
2683 vki_u_int16_t support_dsm;
2684 vki_u_int16_t reserved170[6];
2685 vki_u_int8_t media_serial[60];
2686 vki_u_int16_t sct;
2687 vki_u_int16_t reserved206[2];
2688 vki_u_int16_t lsalign;
2689 vki_u_int16_t wrv_sectors_m3_1;
2690 vki_u_int16_t wrv_sectors_m3_2;
2691 vki_u_int16_t wrv_sectors_m2_1;
2692 vki_u_int16_t wrv_sectors_m2_2;
2693 vki_u_int16_t nv_cache_caps;
2694 vki_u_int16_t nv_cache_size_1;
2695 vki_u_int16_t nv_cache_size_2;
2696 vki_u_int16_t media_rotation_rate;
2697 vki_u_int16_t reserved218;
2698 vki_u_int16_t nv_cache_opt;
2699 vki_u_int16_t wrv_mode;
2700 vki_u_int16_t reserved221;
2701 vki_u_int16_t transport_major;
2702 vki_u_int16_t transport_minor;
2703 vki_u_int16_t reserved224[31];
2704 vki_u_int16_t integrity;
2705 } __packed;
2706
2707
2708
2709
2710
2711 struct vki_callout_handle {
2712 struct vki_callout *callout;
2713 };
2714
2715
2716
2717
2718
2719
2720 struct vki_scsi_sense_data {
2721 vki_u_int8_t error_code;
2722 vki_u_int8_t segment;
2723 vki_u_int8_t flags;
2724 vki_u_int8_t info[4];
2725 vki_u_int8_t extra_len;
2726 vki_u_int8_t cmd_spec_info[4];
2727 vki_u_int8_t add_sense_code;
2728 vki_u_int8_t add_sense_code_qual;
2729 vki_u_int8_t fru;
2730 vki_u_int8_t sense_key_spec[3];
2731 vki_u_int8_t extra_bytes[14];
2732 #define VKI_SSD_FULL_SIZE sizeof(struct vki_scsi_sense_data)
2733 };
2734
2735 struct vki_scsi_inquiry_data {
2736 vki_uint8_t device;
2737 vki_uint8_t dev_qual2;
2738 vki_uint8_t version;
2739 vki_uint8_t response_format;
2740 vki_uint8_t additional_length;
2741 vki_uint8_t spc3_flags;
2742 vki_uint8_t spc2_flags;
2743 vki_uint8_t flags;
2744 #define VKI_SID_VENDOR_SIZE 8
2745 char vendor[VKI_SID_VENDOR_SIZE];
2746 #define VKI_SID_PRODUCT_SIZE 16
2747 char product[VKI_SID_PRODUCT_SIZE];
2748 #define VKI_SID_REVISION_SIZE 4
2749 char revision[VKI_SID_REVISION_SIZE];
2750 #define VKI_SID_VENDOR_SPECIFIC_0_SIZE 20
2751 vki_uint8_t vendor_specific0[VKI_SID_VENDOR_SPECIFIC_0_SIZE];
2752 vki_uint8_t spi3data;
2753 vki_uint8_t reserved2;
2754
2755
2756
2757 vki_uint8_t version1[2];
2758 vki_uint8_t version2[2];
2759 vki_uint8_t version3[2];
2760 vki_uint8_t version4[2];
2761 vki_uint8_t version5[2];
2762 vki_uint8_t version6[2];
2763 vki_uint8_t version7[2];
2764 vki_uint8_t version8[2];
2765
2766 vki_uint8_t reserved3[22];
2767
2768 #define VKI_SID_VENDOR_SPECIFIC_1_SIZE 160
2769 vki_uint8_t vendor_specific1[VKI_SID_VENDOR_SPECIFIC_1_SIZE];
2770 };
2771
2772
2773
2774
2775
2776 #define VKI_SLIST_ENTRY(type) \
2777 struct { \
2778 struct type *sle_next; \
2779 }
2780
2781 #define VKI_LIST_ENTRY(type) \
2782 struct { \
2783 struct type *le_next; \
2784 struct type **le_prev; \
2785 }
2786
2787 #define VKI_STAILQ_ENTRY(type) \
2788 struct { \
2789 struct type *stqe_next; \
2790 }
2791
2792 #ifdef VKI_QUEUE_MACRO_DEBUG_TRACE
2793 struct vki_qm_trace {
2794 unsigned long lastline;
2795 unsigned long prevline;
2796 const char *lastfile;
2797 const char *prevfile;
2798 };
2799
2800 #define VKI_TRACEBUF struct vki_qm_trace trace;
2801 #else
2802 #define VKI_TRACEBUF
2803 #endif
2804
2805 #define VKI_TAILQ_ENTRY(type) \
2806 struct { \
2807 struct type *tqe_next; \
2808 struct type **tqe_prev; \
2809 VKI_TRACEBUF \
2810 }
2811
2812
2813
2814
2815
2816
2817 #define VKI_CAM_VERSION 0x1a
2818
2819 typedef union {
2820 VKI_LIST_ENTRY(vki_ccb_hdr) le;
2821 VKI_SLIST_ENTRY(vki_ccb_hdr) sle;
2822 VKI_TAILQ_ENTRY(vki_ccb_hdr) tqe;
2823 VKI_STAILQ_ENTRY(vki_ccb_hdr) stqe;
2824 } vki_camq_entry;
2825
2826 typedef enum {
2827
2828 VKI_XPT_FC_QUEUED = 0x100,
2829
2830 VKI_XPT_FC_USER_CCB = 0x200,
2831 VKI_XPT_FC_XPT_ONLY = 0x400,
2832
2833 VKI_XPT_FC_DEV_QUEUED = 0x800 | VKI_XPT_FC_QUEUED,
2834
2835
2836 VKI_XPT_NOOP = 0x00,
2837
2838 VKI_XPT_SCSI_IO = 0x01 | VKI_XPT_FC_DEV_QUEUED,
2839
2840 VKI_XPT_GDEV_TYPE = 0x02,
2841
2842 VKI_XPT_GDEVLIST = 0x03,
2843
2844 VKI_XPT_PATH_INQ = 0x04,
2845
2846 VKI_XPT_REL_SIMQ = 0x05,
2847
2848 VKI_XPT_SASYNC_CB = 0x06,
2849
2850 VKI_XPT_SDEV_TYPE = 0x07,
2851
2852 VKI_XPT_SCAN_BUS = 0x08 | VKI_XPT_FC_QUEUED | VKI_XPT_FC_USER_CCB
2853 | VKI_XPT_FC_XPT_ONLY,
2854
2855 VKI_XPT_DEV_MATCH = 0x09 | VKI_XPT_FC_XPT_ONLY,
2856
2857 VKI_XPT_DEBUG = 0x0a,
2858
2859 VKI_XPT_PATH_STATS = 0x0b,
2860
2861 VKI_XPT_GDEV_STATS = 0x0c,
2862
2863 VKI_XPT_FREEZE_QUEUE = 0x0d,
2864
2865
2866 VKI_XPT_ABORT = 0x10,
2867
2868 VKI_XPT_RESET_BUS = 0x11 | VKI_XPT_FC_XPT_ONLY,
2869
2870 VKI_XPT_RESET_DEV = 0x12 | VKI_XPT_FC_DEV_QUEUED,
2871
2872 VKI_XPT_TERM_IO = 0x13,
2873
2874 VKI_XPT_SCAN_LUN = 0x14 | VKI_XPT_FC_QUEUED | VKI_XPT_FC_USER_CCB
2875 | VKI_XPT_FC_XPT_ONLY,
2876
2877 VKI_XPT_GET_TRAN_SETTINGS = 0x15,
2878
2879
2880
2881
2882 VKI_XPT_SET_TRAN_SETTINGS = 0x16,
2883
2884
2885
2886
2887 VKI_XPT_CALC_GEOMETRY = 0x17,
2888
2889
2890
2891
2892
2893 VKI_XPT_ATA_IO = 0x18 | VKI_XPT_FC_DEV_QUEUED,
2894
2895 VKI_XPT_GET_SIM_KNOB = 0x18,
2896
2897
2898
2899
2900 VKI_XPT_SET_SIM_KNOB = 0x19,
2901
2902
2903
2904
2905 VKI_XPT_ENG_INQ = 0x20 | VKI_XPT_FC_XPT_ONLY,
2906
2907 VKI_XPT_ENG_EXEC = 0x21 | VKI_XPT_FC_DEV_QUEUED,
2908
2909
2910
2911 VKI_XPT_EN_LUN = 0x30,
2912
2913 VKI_XPT_TARGET_IO = 0x31 | VKI_XPT_FC_DEV_QUEUED,
2914
2915 VKI_XPT_ACCEPT_TARGET_IO = 0x32 | VKI_XPT_FC_QUEUED | VKI_XPT_FC_USER_CCB,
2916
2917 VKI_XPT_CONT_TARGET_IO = 0x33 | VKI_XPT_FC_DEV_QUEUED,
2918
2919 VKI_XPT_IMMED_NOTIFY = 0x34 | VKI_XPT_FC_QUEUED | VKI_XPT_FC_USER_CCB,
2920
2921 VKI_XPT_NOTIFY_ACK = 0x35,
2922
2923 VKI_XPT_IMMEDIATE_NOTIFY = 0x36 | VKI_XPT_FC_QUEUED | VKI_XPT_FC_USER_CCB,
2924
2925 VKI_XPT_NOTIFY_ACKNOWLEDGE = 0x37 | VKI_XPT_FC_QUEUED | VKI_XPT_FC_USER_CCB,
2926
2927 VKI_XPT_REPROBE_LUN = 0x38 | VKI_XPT_FC_QUEUED | VKI_XPT_FC_USER_CCB,
2928
2929
2930 VKI_XPT_MMC_SET_TRAN_SETTINGS = 0x40 | VKI_XPT_FC_DEV_QUEUED,
2931 VKI_XPT_MMC_GET_TRAN_SETTINGS = 0x41 | VKI_XPT_FC_DEV_QUEUED,
2932
2933 VKI_XPT_VUNIQUE = 0x80
2934 } vki_xpt_opcode;
2935
2936
2937
2938 typedef enum {
2939 VKI_CAM_CDB_POINTER = 0x00000001,
2940 VKI_CAM_unused1 = 0x00000002,
2941 VKI_CAM_unused2 = 0x00000004,
2942 VKI_CAM_NEGOTIATE = 0x00000008,
2943
2944
2945
2946 VKI_CAM_DATA_ISPHYS = 0x00000010,
2947 VKI_CAM_DIS_AUTOSENSE = 0x00000020,
2948 VKI_CAM_DIR_BOTH = 0x00000000,
2949 VKI_CAM_DIR_IN = 0x00000040,
2950 VKI_CAM_DIR_OUT = 0x00000080,
2951 VKI_CAM_DIR_NONE = 0x000000C0,
2952 VKI_CAM_DIR_MASK = 0x000000C0,
2953 VKI_CAM_DATA_VADDR = 0x00000000,
2954 VKI_CAM_DATA_PADDR = 0x00000010,
2955 VKI_CAM_DATA_SG = 0x00040000,
2956 VKI_CAM_DATA_SG_PADDR = 0x00040010,
2957 VKI_CAM_DATA_BIO = 0x00200000,
2958 VKI_CAM_DATA_MASK = 0x00240010,
2959 VKI_CAM_unused3 = 0x00000100,
2960 VKI_CAM_unused4 = 0x00000200,
2961 VKI_CAM_DEV_QFRZDIS = 0x00000400,
2962 VKI_CAM_DEV_QFREEZE = 0x00000800,
2963 VKI_CAM_HIGH_POWER = 0x00001000,
2964 VKI_CAM_SENSE_PTR = 0x00002000,
2965 VKI_CAM_SENSE_PHYS = 0x00004000,
2966 VKI_CAM_TAG_ACTION_VALID = 0x00008000,
2967 VKI_CAM_PASS_ERR_RECOVER = 0x00010000,
2968 VKI_CAM_DIS_DISCONNECT = 0x00020000,
2969 VKI_CAM_unused5 = 0x00080000,
2970 VKI_CAM_unused6 = 0x00100000,
2971 VKI_CAM_CDB_PHYS = 0x00400000,
2972 VKI_CAM_unused7 = 0x00800000,
2973
2974
2975 VKI_CAM_unused8 = 0x01000000,
2976 VKI_CAM_unused9 = 0x02000000,
2977 VKI_CAM_unused10 = 0x04000000,
2978 VKI_CAM_unused11 = 0x08000000,
2979 VKI_CAM_unused12 = 0x10000000,
2980 VKI_CAM_unused13 = 0x20000000,
2981 VKI_CAM_unused14 = 0x40000000,
2982
2983
2984 VKI_CAM_SEND_SENSE = 0x08000000,
2985 VKI_CAM_unused15 = 0x10000000,
2986 VKI_CAM_unused16 = 0x20000000,
2987 VKI_CAM_SEND_STATUS = 0x40000000,
2988
2989 VKI_CAM_UNLOCKED = 0x80000000
2990 } vki_ccb_flags;
2991
2992 typedef union {
2993 void *ptr;
2994 vki_u_long field;
2995 vki_uint8_t bytes[sizeof(vki_uintptr_t)];
2996 } vki_ccb_priv_entry;
2997
2998 #define VKI_IOCDBLEN VKI_CAM_MAX_CDBLEN
2999 #define VKI_CCB_PERIPH_PRIV_SIZE 2
3000 #define VKI_CCB_SIM_PRIV_SIZE 2
3001
3002 typedef union {
3003 vki_ccb_priv_entry entries[VKI_CCB_PERIPH_PRIV_SIZE];
3004 vki_uint8_t bytes[VKI_CCB_PERIPH_PRIV_SIZE * sizeof(vki_ccb_priv_entry)];
3005 } vki_ccb_ppriv_area;
3006
3007 typedef union {
3008 vki_ccb_priv_entry entries[VKI_CCB_SIM_PRIV_SIZE];
3009 vki_uint8_t bytes[VKI_CCB_SIM_PRIV_SIZE * sizeof(vki_ccb_priv_entry)];
3010 } vki_ccb_spriv_area;
3011
3012 union vki_ccb;
3013 struct vki_cam_periph;
3014
3015 typedef struct {
3016 struct vki_timeval *etime;
3017 vki_uintptr_t sim_data;
3018 vki_uintptr_t periph_data;
3019 } vki_ccb_qos_area;
3020
3021 struct vki_ccb_hdr {
3022 vki_cam_pinfo pinfo;
3023 vki_camq_entry xpt_links;
3024 vki_camq_entry sim_links;
3025 vki_camq_entry periph_links;
3026 #if BYTE_ORDER == LITTLE_ENDIAN
3027 vki_uint16_t retry_count;
3028 vki_uint16_t alloc_flags;
3029 #else
3030 vki_uint16_t alloc_flags;
3031 vki_uint16_t retry_count;
3032 #endif
3033 void (*cbfcnp)(struct vki_cam_periph *, union vki_ccb *);
3034
3035 vki_xpt_opcode func_code;
3036 vki_uint32_t status;
3037 struct vki_cam_path *path;
3038 vki_path_id_t path_id;
3039 vki_target_id_t target_id;
3040 vki_lun_id_t target_lun;
3041 vki_uint32_t flags;
3042 vki_uint32_t xflags;
3043 vki_ccb_ppriv_area periph_priv;
3044 vki_ccb_spriv_area sim_priv;
3045 vki_ccb_qos_area qos;
3046 vki_uint32_t timeout;
3047 struct vki_timeval softtimeout;
3048 };
3049
3050 typedef union {
3051 vki_u_int8_t *cdb_ptr;
3052
3053 vki_u_int8_t cdb_bytes[VKI_IOCDBLEN];
3054 } vki_cdb_t;
3055
3056
3057
3058
3059
3060
3061 struct vki_ccb_scsiio {
3062 struct vki_ccb_hdr ccb_h;
3063 union vki_ccb *next_ccb;
3064 vki_u_int8_t *req_map;
3065 vki_u_int8_t *data_ptr;
3066 vki_u_int32_t dxfer_len;
3067
3068 struct vki_scsi_sense_data sense_data;
3069 vki_u_int8_t sense_len;
3070 vki_u_int8_t cdb_len;
3071 vki_u_int16_t sglist_cnt;
3072 vki_u_int8_t scsi_status;
3073 vki_u_int8_t sense_resid;
3074 vki_u_int32_t resid;
3075 vki_cdb_t cdb_io;
3076 vki_u_int8_t *msg_ptr;
3077 vki_u_int16_t msg_len;
3078 vki_u_int8_t tag_action;
3079
3080
3081
3082
3083
3084 vki_uint8_t priority;
3085 vki_u_int tag_id;
3086 vki_u_int init_id;
3087 };
3088
3089 typedef enum {
3090 VKI_CAM_DEV_MATCH_LAST,
3091 VKI_CAM_DEV_MATCH_MORE,
3092 VKI_CAM_DEV_MATCH_LIST_CHANGED,
3093 VKI_CAM_DEV_MATCH_SIZE_ERROR,
3094 VKI_CAM_DEV_MATCH_ERROR
3095 } vki_ccb_dev_match_status;
3096
3097
3098 struct vki_dev_match_pattern;
3099
3100 typedef enum {
3101 VKI_DEV_MATCH_PERIPH,
3102 VKI_DEV_MATCH_DEVICE,
3103 VKI_DEV_MATCH_BUS
3104 } vki_dev_match_type;
3105
3106 #define VKI_DEV_IDLEN 16
3107
3108 struct vki_periph_match_result {
3109 char periph_name[VKI_DEV_IDLEN];
3110 vki_uint32_t unit_number;
3111 vki_path_id_t path_id;
3112 vki_target_id_t target_id;
3113 vki_lun_id_t target_lun;
3114 };
3115
3116 typedef enum {
3117 VKI_PROTO_UNKNOWN,
3118 VKI_PROTO_UNSPECIFIED,
3119 VKI_PROTO_SCSI,
3120 VKI_PROTO_ATA,
3121 VKI_PROTO_ATAPI,
3122 VKI_PROTO_SATAPM,
3123 VKI_PROTO_SEMB,
3124 VKI_PROTO_NVME,
3125 VKI_PROTO_MMCSD,
3126 } vki_cam_proto;
3127
3128 typedef enum {
3129 VKI_DEV_RESULT_NOFLAG = 0x00,
3130 VKI_DEV_RESULT_UNCONFIGURED = 0x01
3131 } vki_dev_result_flags;
3132
3133
3134 struct vki_device_match_result {
3135 vki_path_id_t path_id;
3136 vki_target_id_t target_id;
3137 vki_lun_id_t target_lun;
3138 vki_cam_proto protocol;
3139 struct vki_scsi_inquiry_data inq_data;
3140 struct vki_ata_params ident_data;
3141 vki_dev_result_flags flags;
3142 };
3143
3144 struct vki_bus_match_result {
3145 vki_path_id_t path_id;
3146 char dev_name[VKI_DEV_IDLEN];
3147 vki_uint32_t unit_number;
3148 vki_uint32_t bus_id;
3149 };
3150
3151 union vki_match_result {
3152 struct vki_periph_match_result periph_result;
3153 struct vki_device_match_result device_result;
3154 struct vki_bus_match_result bus_result;
3155 };
3156
3157 struct vki_dev_match_result {
3158 vki_dev_match_type type;
3159 union vki_match_result result;
3160 };
3161
3162 typedef enum {
3163 VKI_CAM_DEV_POS_NONE = 0x000,
3164 VKI_CAM_DEV_POS_BUS = 0x001,
3165 VKI_CAM_DEV_POS_TARGET = 0x002,
3166 VKI_CAM_DEV_POS_DEVICE = 0x004,
3167 VKI_CAM_DEV_POS_PERIPH = 0x008,
3168 VKI_CAM_DEV_POS_PDPTR = 0x010,
3169 VKI_CAM_DEV_POS_TYPEMASK = 0xf00,
3170 VKI_CAM_DEV_POS_EDT = 0x100,
3171 VKI_CAM_DEV_POS_PDRV = 0x200
3172 } vki_dev_pos_type;
3173
3174 struct vki_ccb_dm_cookie {
3175 void *bus;
3176 void *target;
3177 void *device;
3178 void *periph;
3179 void *pdrv;
3180 };
3181
3182 struct vki_ccb_dev_position {
3183 vki_u_int generations[4];
3184 #define VKI_CAM_BUS_GENERATION 0x00
3185 #define VKI_CAM_TARGET_GENERATION 0x01
3186 #define VKI_CAM_DEV_GENERATION 0x02
3187 #define VKI_CAM_PERIPH_GENERATION 0x03
3188 vki_dev_pos_type position_type;
3189 struct vki_ccb_dm_cookie cookie;
3190 };
3191
3192 struct vki_ccb_dev_match {
3193 struct vki_ccb_hdr ccb_h;
3194 vki_ccb_dev_match_status status;
3195 vki_uint32_t num_patterns;
3196 vki_uint32_t pattern_buf_len;
3197 struct vki_dev_match_pattern *patterns;
3198 vki_uint32_t num_matches;
3199 vki_uint32_t match_buf_len;
3200 struct vki_dev_match_result *matches;
3201 struct vki_ccb_dev_position pos;
3202 };
3203
3204
3205
3206
3207
3208
3209
3210 union vki_ccb {
3211
3212 struct vki_ccb_hdr ccb_h;
3213 struct vki_ccb_scsiio csio;
3214 #if 0
3215 struct ccb_getdev cgd;
3216 struct ccb_getdevlist cgdl;
3217 struct ccb_pathinq cpi;
3218 struct ccb_relsim crs;
3219 struct ccb_setasync csa;
3220 struct ccb_setdev csd;
3221 struct ccb_pathstats cpis;
3222 struct ccb_getdevstats cgds;
3223 #endif
3224 struct vki_ccb_dev_match cdm;
3225 #if 0
3226 struct ccb_trans_settings cts;
3227 struct ccb_calc_geometry ccg;
3228 struct ccb_sim_knob knob;
3229 struct ccb_abort cab;
3230 struct ccb_resetbus crb;
3231 struct ccb_resetdev crd;
3232 struct ccb_termio tio;
3233 struct ccb_accept_tio atio;
3234 struct ccb_scsiio ctio;
3235 struct ccb_en_lun cel;
3236 struct ccb_immed_notify cin;
3237 struct ccb_notify_ack cna;
3238 struct ccb_immediate_notify cin1;
3239 struct ccb_notify_acknowledge cna2;
3240 struct ccb_eng_inq cei;
3241 struct ccb_eng_exec cee;
3242 struct ccb_rescan crcn;
3243 struct ccb_debug cdbg;
3244 struct ccb_ataio ataio;
3245 #endif
3246 char make_union_right_size[0x4E0];
3247 };
3248
3249 #define VKI_CAMIOCOMMAND _VKI_IOWR(VKI_CAM_VERSION, 2, union vki_ccb)
3250
3251
3252
3253
3254