File indexing completed on 2026-08-05 09:35:50
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 #define VKI_GETRLIMITUSAGE_EUID 0x0001
1234
1235 struct vki___wrusage {
1236 struct vki_rusage wru_self;
1237 struct vki_rusage wru_children;
1238 };
1239
1240
1241
1242
1243
1244
1245 #define VKI_PRSTATUS_VERSION 1
1246 struct vki_elf_prstatus {
1247 int pr_version;
1248 vki_size_t pr_statussz;
1249 vki_size_t pr_gregsetsz;
1250 vki_size_t pr_fpregsetsz;
1251 int pr_osreldate;
1252 int pr_cursig;
1253 vki_pid_t pr_pid;
1254 vki_elf_gregset_t pr_reg;
1255 };
1256
1257 #define VKI_ELF_PRARGSZ (80)
1258 #define VKI_MAXCOMLEN (16)
1259
1260 #define VKI_PRPSINFO_VERSION 1
1261 struct vki_elf_prpsinfo {
1262 int pr_version;
1263 vki_size_t pr_psinfosz;
1264 char pr_fname[VKI_MAXCOMLEN+1];
1265 char pr_psargs[VKI_ELF_PRARGSZ];
1266 };
1267
1268
1269
1270
1271
1272 struct vki_mq_attr {
1273 long mq_flags;
1274 long mq_maxmsg;
1275 long mq_msgsize;
1276 long mq_curmsgs;
1277 };
1278
1279
1280
1281
1282
1283 #define VKI_UCF_SWAPPED 1
1284
1285 struct vki_ucontext {
1286 vki_sigset_t uc_sigmask;
1287 struct vki_mcontext uc_mcontext;
1288 struct vki_ucontext* uc_link;
1289 vki_stack_t uc_stack;
1290 int uc_flags;
1291 unsigned int __spare__[4];
1292 };
1293
1294
1295
1296
1297
1298 #define VKI_SYS_NMLN 32
1299
1300 struct vki_utsname {
1301 char sysname[VKI_SYS_NMLN];
1302 char nodename[VKI_SYS_NMLN];
1303 char release[VKI_SYS_NMLN];
1304 char version[VKI_SYS_NMLN];
1305 char machine[VKI_SYS_NMLN];
1306 };
1307
1308 #define VKI_IPC_CREAT 00001000
1309 #define VKI_IPC_EXCL 00002000
1310 #define VKI_IPC_NOWAIT 00004000
1311
1312 #define VKI_IPC_RMID 0
1313 #define VKI_IPC_SET 1
1314 #define VKI_IPC_STAT 2
1315 #define VKI_IPC_INFO 3
1316
1317
1318
1319
1320
1321 struct vki_ipc_perm_old {
1322 unsigned short cuid;
1323 unsigned short cgid;
1324 unsigned short uid;
1325 unsigned short gid;
1326 unsigned short mode;
1327 unsigned short seq;
1328 vki_key_t key;
1329 };
1330
1331 struct vki_ipc_perm {
1332 vki_uid_t cuid;
1333 vki_gid_t cgid;
1334 vki_uid_t uid;
1335 vki_gid_t gid;
1336 vki_mode_t mode;
1337 unsigned short seq;
1338 vki_key_t key;
1339 };
1340
1341
1342
1343
1344
1345 #define VKI_GETALL 6
1346 #define VKI_SETVAL 8
1347 #define VKI_SETALL 9
1348 #define VKI_SEM_STAT 10
1349 #define VKI_SEM_INFO 11
1350
1351 struct vki_semid_ds_old {
1352 struct vki_ipc_perm_old sem_perm;
1353 struct sem *__sem_base;
1354 unsigned short sem_nsems;
1355 vki_time_t sem_otime;
1356 long sem_pad1;
1357 vki_time_t sem_ctime;
1358 long sem_pad2;
1359 long sem_pad3[4];
1360 };
1361
1362
1363
1364 struct vki_semid_ds {
1365 struct vki_ipc_perm sem_perm;
1366
1367 void*sem_base;
1368 unsigned short sem_nsems;
1369 vki_time_t sem_otime;
1370 vki_time_t sem_ctime;
1371 };
1372
1373 struct vki_sembuf {
1374 vki_uint16_t sem_num;
1375 vki_int16_t sem_op;
1376 vki_int16_t sem_flg;
1377 };
1378
1379 union vki_semun {
1380 int val;
1381 struct vki_semid_ds *buf;
1382 vki_uint16_t *array;
1383 };
1384
1385
1386
1387
1388
1389
1390 #define VKI_ERESTART -1
1391 #define VKI_EPERM 1
1392 #define VKI_ENOENT 2
1393 #define VKI_ESRCH 3
1394 #define VKI_EINTR 4
1395 #define VKI_EIO 5
1396 #define VKI_ENXIO 6
1397 #define VKI_E2BIG 7
1398 #define VKI_ENOEXEC 8
1399 #define VKI_EBADF 9
1400 #define VKI_ECHILD 10
1401 #define VKI_EDEADLK 11
1402 #define VKI_ENOMEM 12
1403 #define VKI_EACCES 13
1404 #define VKI_EFAULT 14
1405 #define VKI_ENOTBLK 15
1406 #define VKI_EBUSY 16
1407 #define VKI_EEXIST 17
1408 #define VKI_EXDEV 18
1409 #define VKI_ENODEV 19
1410 #define VKI_ENOTDIR 20
1411 #define VKI_EISDIR 21
1412 #define VKI_EINVAL 22
1413 #define VKI_ENFILE 23
1414 #define VKI_EMFILE 24
1415 #define VKI_ENOTTY 25
1416 #define VKI_ETXTBSY 26
1417 #define VKI_EFBIG 27
1418 #define VKI_ENOSPC 28
1419 #define VKI_ESPIPE 29
1420 #define VKI_EROFS 30
1421 #define VKI_EMLINK 31
1422 #define VKI_EPIPE 32
1423 #define VKI_EDOM 33
1424 #define VKI_ERANGE 34
1425 #define VKI_EAGAIN 35
1426 #define VKI_EWOULDBLOCK VKI_EAGAIN
1427 #define VKI_EINPROGRESS 36
1428 #define VKI_EALREADY 37
1429 #define VKI_ENOTSOCK 38
1430 #define VKI_EDESTADDRREQ 39
1431 #define VKI_EMSGSIZE 40
1432 #define VKI_EPROTOTYPE 41
1433 #define VKI_ENOPROTOOPT 42
1434 #define VKI_EPROTONOSUPPORT 43
1435 #define VKI_ESOCKTNOSUPPORT 44
1436 #define VKI_EOPNOTSUPP 45
1437 #define VKI_ENOTSUP VKI_EOPNOTSUPP
1438 #define VKI_EPFNOSUPPORT 46
1439 #define VKI_EAFNOSUPPORT 47
1440 #define VKI_EADDRINUSE 48
1441 #define VKI_EADDRNOTAVAIL 49
1442 #define VKI_ENETDOWN 50
1443 #define VKI_ENETUNREACH 51
1444 #define VKI_ENETRESET 52
1445 #define VKI_ECONNABORTED 53
1446 #define VKI_ECONNRESET 54
1447 #define VKI_ENOBUFS 55
1448 #define VKI_EISCONN 56
1449 #define VKI_ENOTCONN 57
1450 #define VKI_ESHUTDOWN 58
1451 #define VKI_ETOOMANYREFS 59
1452 #define VKI_ETIMEDOUT 60
1453 #define VKI_ECONNREFUSED 61
1454 #define VKI_ELOOP 62
1455 #define VKI_ENAMETOOLONG 63
1456 #define VKI_EHOSTDOWN 64
1457 #define VKI_EHOSTUNREACH 65
1458 #define VKI_ENOTEMPTY 66
1459 #define VKI_EPROCLIM 67
1460 #define VKI_EUSERS 68
1461 #define VKI_EDQUOT 69
1462 #define VKI_ESTALE 70
1463 #define VKI_EREMOTE 71
1464 #define VKI_EBADRPC 72
1465 #define VKI_ERPCMISMATCH 73
1466 #define VKI_EPROGUNAVAIL 74
1467 #define VKI_EPROGMISMATCH 75
1468 #define VKI_EPROCUNAVAIL 76
1469 #define VKI_ENOLCK 77
1470 #define VKI_ENOSYS 78
1471 #define VKI_EFTYPE 79
1472 #define VKI_EAUTH 80
1473 #define VKI_ENEEDAUTH 81
1474 #define VKI_EIDRM 82
1475 #define VKI_ENOMSG 83
1476 #define VKI_EOVERFLOW 84
1477 #define VKI_ECANCELED 85
1478 #define VKI_EILSEQ 86
1479 #define VKI_ENOATTR 87
1480 #define VKI_EDOOFUS 88
1481 #define VKI_EBADMSG 89
1482 #define VKI_EMULTIHOP 90
1483 #define VKI_ENOLINK 91
1484 #define VKI_EPROTO 92
1485 #define VKI_ENOTCAPABLE 93
1486 #define VKI_ECAPMODE 94
1487
1488
1489
1490
1491
1492 #define VKI_WNOHANG 0x00000001
1493
1494 typedef enum vki_idtype {
1495 VKI_P_PID,
1496 VKI_P_PPID,
1497 VKI_P_PGID,
1498 VKI_P_SID,
1499 VKI_P_CID,
1500 VKI_P_UID,
1501 VKI_P_GID,
1502 VKI_P_ALL,
1503 VKI_P_LWPID,
1504 VKI_P_TASKID,
1505 VKI_P_PROJID,
1506 VLI_P_POOLID,
1507 VKI_P_JAILID,
1508 VKI_P_CTID,
1509 VKI_P_CPUID,
1510 VKI_P_PSETID
1511 } vki_idtype_t;
1512
1513
1514
1515
1516
1517 #define VKI_PROT_NONE 0x00
1518 #define VKI_PROT_READ 0x01
1519 #define VKI_PROT_WRITE 0x02
1520 #define VKI_PROT_EXEC 0x04
1521
1522 #define VKI_MAP_SHARED 0x01
1523 #define VKI_MAP_PRIVATE 0x02
1524 #define VKI_MAP_FIXED 0x10
1525 #define VKI_MAP_NORESERVE 0x0040
1526 #define VKI_MAP_STACK 0x400
1527 #define VKI_MAP_ANON 0x1000
1528 #define VKI_MAP_ANONYMOUS VKI_MAP_ANON
1529 #define VKI_MAP_GUARD 0x00002000
1530
1531 #define VKI_MAP_ALIGNED(n) ((n) << VKI_MAP_ALIGNMENT_SHIFT)
1532 #define VKI_MAP_ALIGNMENT_SHIFT 24
1533 #define VKI_MAP_ALIGNMENT_MASK VKI_MAP_ALIGNED(0xff)
1534 #define VKI_MAP_ALIGNED_SUPER VKI_MAP_ALIGNED(1)
1535
1536
1537
1538
1539
1540
1541
1542 #define VKI_S_IFMT 00170000
1543
1544 #define VKI_S_IFWHT 0160000
1545 #define VKI_S_IFSOCK 0140000
1546 #define VKI_S_IFLNK 0120000
1547 #define VKI_S_IFREG 0100000
1548 #define VKI_S_IFBLK 0060000
1549 #define VKI_S_IFDIR 0040000
1550 #define VKI_S_IFCHR 0020000
1551 #define VKI_S_IFIFO 0010000
1552 #define VKI_S_ISUID 0004000
1553 #define VKI_S_ISGID 0002000
1554 #define VKI_S_ISTXT 0001000
1555
1556 #define VKI_S_ISLNK(m) (((m) & VKI_S_IFMT) == VKI_S_IFLNK)
1557 #define VKI_S_ISREG(m) (((m) & VKI_S_IFMT) == VKI_S_IFREG)
1558 #define VKI_S_ISDIR(m) (((m) & VKI_S_IFMT) == VKI_S_IFDIR)
1559 #define VKI_S_ISCHR(m) (((m) & VKI_S_IFMT) == VKI_S_IFCHR)
1560 #define VKI_S_ISBLK(m) (((m) & VKI_S_IFMT) == VKI_S_IFBLK)
1561 #define VKI_S_ISFIFO(m) (((m) & VKI_S_IFMT) == VKI_S_IFIFO)
1562 #define VKI_S_ISSOCK(m) (((m) & VKI_S_IFMT) == VKI_S_IFSOCK)
1563 #define VKI_S_ISWHT(m) (((m) & VKI_S_IFMT) == VKI_S_IFWHT)
1564
1565 #define VKI_S_IRWXU 00700
1566 #define VKI_S_IRUSR 00400
1567 #define VKI_S_IWUSR 00200
1568 #define VKI_S_IXUSR 00100
1569
1570 #define VKI_S_IRWXG 00070
1571 #define VKI_S_IRGRP 00040
1572 #define VKI_S_IWGRP 00020
1573 #define VKI_S_IXGRP 00010
1574
1575 #define VKI_S_IRWXO 00007
1576 #define VKI_S_IROTH 00004
1577 #define VKI_S_IWOTH 00002
1578 #define VKI_S_IXOTH 00001
1579
1580
1581
1582
1583
1584
1585 struct vki_dirent {
1586 vki_uint32_t d_fileno;
1587 vki_uint16_t d_reclen;
1588 vki_uint8_t d_type;
1589 vki_uint8_t d_namelen;
1590 char vki_d_name[256];
1591 };
1592
1593
1594
1595
1596
1597 #define VKI_O_RDONLY O_RDONLY
1598 #define VKI_O_WRONLY O_WRONLY
1599 #define VKI_O_RDWR O_RDWR
1600
1601 #define VKI_FREAD FREAD
1602 #define VKI_WRITE WRITE
1603
1604 #define VKI_O_NONBLOCK O_NONBLOCK
1605 #define VKI_O_APPEND O_APPEND
1606 #define VKI_O_CREAT O_CREAT
1607 #define VKI_O_TRUNC O_TRUNC
1608 #define VKI_O_EXCL O_EXCL
1609 #define VKI_O_DIRECTORY O_DIRECTORY
1610 #define VKI_O_EXEC O_EXEC
1611 #define VKI_O_SEARCH O_EXEC
1612
1613 #define VKI_AT_FDCWD AT_FDCWD
1614 #define VKI_AT_SYMLINK_NOFOLLOW 0x0200
1615
1616
1617 #define VKI_F_DUPFD 0
1618 #define VKI_F_GETFD 1
1619 #define VKI_F_SETFD 2
1620 #define VKI_F_GETFL 3
1621 #define VKI_F_SETFL 4
1622 #define VKI_F_SETOWN 5
1623 #define VKI_F_GETOWN 6
1624 #define VKI_F_OGETLK 7
1625 #define VKI_F_OSETLK 8
1626 #define VKI_F_OSETLKW 9
1627 #define VKI_F_DUP2FD 10
1628 #define VKI_F_GETLK 11
1629 #define VKI_F_SETLK 12
1630 #define VKI_F_SETLKW 13
1631 #define VKI_F_SETLK_REMOTE 14
1632 #define VKI_F_READAHEAD 15
1633 #define VKI_F_RDAHEAD 16
1634 #define VKI_F_DUPFD_CLOEXEC 17
1635 #define VKI_F_DUP2FD_CLOEXEC 18
1636 #define VKI_F_ADD_SEALS 19
1637 #define VKI_F_GET_SEALS 20
1638 #define VKI_F_ISUNIONSTACK 21
1639
1640 #define VKI_F_KINFO 22
1641
1642
1643 #define VKI_FD_CLOEXEC 1
1644
1645
1646 #define VKI_F_SEAL_SEAL 0x0001
1647 #define VKI_F_SEAL_SHRINK 0x0002
1648 #define VKI_F_SEAL_GROW 0x0004
1649 #define VKI_F_SEAL_WRITE 0x0008
1650
1651 struct vki_spacectl_range {
1652 vki_off_t r_offset;
1653 vki_off_t r_len;
1654 };
1655
1656
1657
1658
1659
1660
1661 #define VKI_SEEK_SET 0
1662 #define VKI_SEEK_CUR 1
1663 #define VKI_SEEK_END 2
1664
1665 #define VKI_F_OK 0
1666 #define VKI_X_OK 0x01
1667 #define VKI_W_OK 0x02
1668 #define VKI_R_OK 0x04
1669
1670 #define VKI_RFSPAWN (1U<<31U)
1671
1672
1673 #define VKI_KCMP_FILE 100
1674 #define VKI_KCMP_FILEOBJ 101
1675 #define VKI_KCMP_FILES 102
1676 #define VKI_KCMP_SIGHAND 103
1677 #define VKI_KCMP_VM 104
1678
1679 #define VKI_CLOSE_RANGE_CLOEXEC (1<<2)
1680
1681
1682
1683
1684
1685 #if 0
1686 #define VKI_MSGSND 11
1687 #define VKI_MSGRCV 12
1688 #define VKI_MSGGET 13
1689 #define VKI_MSGCTL 14
1690 #endif
1691
1692 typedef unsigned long vki_msglen_t;
1693 typedef unsigned long vki_msgqnum_t;
1694
1695 struct vki_msqid_ds_old {
1696 struct vki_ipc_perm_old msg_perm;
1697 struct vki_msg *msg_first;
1698 struct vki_msg *msg_last;
1699 vki_msglen_t msg_cbytes;
1700 vki_msgqnum_t msg_qnum;
1701 vki_msglen_t msg_qbytes;
1702 vki_pid_t msg_lspid;
1703 vki_pid_t msg_lrpid;
1704 vki_time_t msg_stime;
1705 vki_uint32_t msg_pad1;
1706 vki_time_t msg_rtime;
1707 vki_uint32_t msg_pad2;
1708 vki_time_t msg_ctime;
1709 vki_uint32_t msg_pad3;
1710 vki_uint32_t msg_pad4[4];
1711 };
1712
1713 struct vki_msqid_ds {
1714 struct vki_ipc_perm msg_perm;
1715 struct vki_msg *msg_first;
1716 struct vki_msg *msg_last;
1717 vki_msglen_t msg_cbytes;
1718 vki_msgqnum_t msg_qnum;
1719 vki_msglen_t msg_qbytes;
1720 vki_pid_t msg_lspid;
1721 vki_pid_t msg_lrpid;
1722 vki_time_t msg_stime;
1723 vki_time_t msg_rtime;
1724 vki_time_t msg_ctime;
1725 };
1726
1727
1728 struct vki_msgbuf {
1729 long mtype;
1730 char mtext[1];
1731 };
1732
1733
1734
1735
1736
1737
1738 struct vki_shmid_ds_old {
1739 struct vki_ipc_perm_old shm_perm;
1740 int shm_segsz;
1741 vki_pid_t shm_lpid;
1742 vki_pid_t shm_cpid;
1743 short shm_nattch;
1744 vki_time_t shm_atime;
1745 vki_time_t shm_dtime;
1746 vki_time_t shm_ctime;
1747 void *shm_internal;
1748 };
1749
1750
1751 struct vki_shmid_ds {
1752 struct vki_ipc_perm shm_perm;
1753 vki_size_t shm_segsz;
1754 vki_pid_t shm_lpid;
1755 vki_pid_t shm_cpid;
1756 int shm_nattch;
1757 vki_time_t shm_atime;
1758 vki_time_t shm_dtime;
1759 vki_time_t shm_ctime;
1760 };
1761
1762 #define VKI_SHMLBA VKI_PAGE_SIZE
1763 #define VKI_SHM_RDONLY 010000
1764 #define VKI_SHM_ANON (1UL)
1765
1766 #if 0
1767 #define VKI_SHMAT 21
1768 #define VKI_SHMDT 22
1769 #define VKI_SHMGET 23
1770 #define VKI_SHMCTL 24
1771 #endif
1772
1773
1774
1775
1776
1777 #define VKI_PTRACE_TRACEME 0
1778 #define VKI_PTRACE_READ_I 1
1779 #define VKI_PTRACE_READ_D 2
1780
1781 #define VKI_PTRACE_WRITE_I 4
1782 #define VKI_PTRACE_WRITE_D 5
1783
1784 #define VKI_PTRACE_CONTINUE 7
1785 #define VKI_PTRACE_KILL 8
1786 #define VKI_PTRACE_STEP 9
1787 #define VKI_PTRACE_ATTACH 10
1788 #define VKI_PTRACE_DETACH 11
1789 #define VKI_PTRACE_IO 12
1790 #define VKI_PTRACE_LWPINFO 13
1791 #define VKI_PTRACE_GETNUMLWPS 14
1792 #define VKI_PTRACE_GETLWPLIST 15
1793 #define VKI_PTRACE_CLEARSTEP 16
1794 #define VKI_PTRACE_SETSTEP 17
1795 #define VKI_PTRACE_SUSPEND 18
1796 #define VKI_PTRACE_RESUME 19
1797 #define VKI_PTRACE_TO_SCE 20
1798 #define VKI_PTRACE_TO_SCX 21
1799 #define VKI_PTRACE_SYSCALL 22
1800
1801 #define VKI_PTRACE_GETREGS 33
1802 #define VKI_PTRACE_SETREGS 34
1803 #define VKI_PTRACE_GETFPREGS 35
1804 #define VKI_PTRACE_SETFPREGS 36
1805 #define VKI_PTRACE_GETDBREGS 37
1806 #define VKI_PTRACE_SETDBREGS 38
1807
1808 #define VKI_PTRACE_VM_TIMESTAMP 40
1809 #define VKI_PTRACE_VM_ENTRY 41
1810
1811 #define VKI_PTRACE_FIRSTMACH 64
1812
1813 struct vki_ptrace_io_desc {
1814 int piod_op;
1815 void * piod_offs;
1816 void * piod_addr;
1817 vki_size_t piod_len;
1818 };
1819 #define VKI_PIOD_READ_D 1
1820 #define VKI_PIOD_WRITE_D 2
1821 #define VKI_PIOD_READ_I 3
1822 #define VKI_PIOD_WRITE_I 4
1823
1824 struct vki_ptrace_lwpinfo {
1825 vki_lwpid_t pl_lwpid;
1826 int pl_event;
1827 #define VKI_PL_EVENT_NONE 0
1828 #define VKI_PL_EVENT_SIGNAL 1
1829 int pl_flags;
1830 #define VKI_FLAG_SA 0x01
1831 #define VKI_FLAG_BOUND 0x02
1832 vki_sigset_t pl_sigmask;
1833 vki_sigset_t pl_siglist;
1834 };
1835
1836 struct vki_ptrace_vm_entry {
1837 int pve_entry;
1838 int pve_timestamp;
1839 unsigned long pve_start;
1840 unsigned long pve_end;
1841 unsigned long pve_offset;
1842 unsigned int pve_prot;
1843 unsigned int pve_pathlen;
1844 long pve_fileid;
1845 vki_uint32_t pve_fsid;
1846 char *pve_path;
1847 };
1848
1849 #endif
1850
1851
1852
1853
1854
1855
1856 #define VKI_I386_GET_FSBASE 7
1857 #define VKI_I386_SET_FSBASE 8
1858 #define VKI_I386_GET_GSBASE 9
1859 #define VKI_I386_SET_GSBASE 10
1860 #define VKI_I386_GET_XFPUSTATE 11
1861 #define VKI_I386_SET_PKRU 12
1862 #define VKI_I386_CLEAR_PKRU 13
1863
1864 #define VKI_AMD64_GET_FSBASE 128
1865 #define VKI_AMD64_SET_FSBASE 129
1866 #define VKI_AMD64_GET_GSBASE 130
1867 #define VKI_AMD64_SET_GSBASE 131
1868 #define VKI_AMD64_GET_XFPUSTATE 132
1869 #define VKI_AMD64_SET_PKRU 133
1870 #define VKI_AMD64_CLEAR_PKRU 134
1871 #define VKI_AMD64_GET_TLSBASE 135
1872 #define VKI_AMD64_SET_TLSBASE 136
1873
1874
1875
1876
1877
1878
1879 #define VKI_MAXMODNAME 32
1880
1881 typedef union vki_modspecific {
1882 vki_int32_t intval;
1883 vki_uint32_t u_intval;
1884 #if defined(VGP_x86_freebsd)
1885 vki_int32_t longval;
1886 vki_uint32_t u_longval;
1887 #elif defined(VGP_amd64_freebsd) || defined(VGP_arm64_freebsd)
1888 vki_int64_t longval;
1889 vki_uint64_t u_longval;
1890 #else
1891 #error Unknown platform
1892 #endif
1893 } vki_modspecific_t;
1894
1895 struct vki_module_stat {
1896 int version;
1897 char name[VKI_MAXMODNAME];
1898 int refs;
1899 int id;
1900 vki_modspecific_t data;
1901 };
1902
1903
1904
1905
1906
1907 struct vki_rtprio {
1908 vki_uint16_t type;
1909 vki_uint16_t prio;
1910 };
1911
1912 #define VKI_RTP_LOOKUP 0
1913 #define VKI_RTP_SET 1
1914
1915
1916
1917
1918
1919 struct vki_umtx {
1920 unsigned long u_owner;
1921 };
1922
1923 struct vki_umutex {
1924 vki_lwpid_t m_owner;
1925 vki_uint32_t m_flags;
1926 vki_uint32_t m_ceilings[2];
1927 vki_uint32_t m_spare[4];
1928 };
1929
1930 struct vki_ucond {
1931 vki_uint32_t c_has_waiters;
1932 vki_uint32_t c_flags;
1933 vki_uint32_t c_spare[2];
1934 };
1935
1936 struct vki_urwlock {
1937 vki_uint32_t rw_state;
1938 vki_uint32_t rw_flags;
1939 vki_uint32_t rw_blocked_readers;
1940 vki_uint32_t rw_blocked_writers;
1941 vki_uint32_t rw_spare[4];
1942 };
1943
1944 struct vki_usem {
1945 vki_uint32_t has_waiters;
1946 vki_uint32_t count;
1947 vki_uint32_t flags;
1948 };
1949
1950 struct vki_umtx_time {
1951 struct vki_timespec timeout;
1952 vki_uint32_t flags;
1953 vki_uint32_t clockid;
1954 };
1955
1956 struct vki_usem2 {
1957 vki_uint32_t count;
1958 vki_uint32_t flags;
1959 };
1960
1961 struct vki_umtx_robust_lists_params {
1962 vki_uintptr_t robust_list_offset;
1963 vki_uintptr_t robust_priv_list_offset;
1964 vki_uintptr_t robust_inact_offset;
1965 };
1966
1967 #define VKI_UMTX_OP_LOCK 0
1968 #define VKI_UMTX_OP_UNLOCK 1
1969 #define VKI_UMTX_OP_WAIT 2
1970 #define VKI_UMTX_OP_WAKE 3
1971 #define VKI_UMTX_OP_MUTEX_TRYLOCK 4
1972 #define VKI_UMTX_OP_MUTEX_LOCK 5
1973 #define VKI_UMTX_OP_MUTEX_UNLOCK 6
1974 #define VKI_UMTX_OP_SET_CEILING 7
1975 #define VKI_UMTX_OP_CV_WAIT 8
1976 #define VKI_UMTX_OP_CV_SIGNAL 9
1977 #define VKI_UMTX_OP_CV_BROADCAST 10
1978 #define VKI_UMTX_OP_WAIT_UINT 11
1979 #define VKI_UMTX_OP_RW_RDLOCK 12
1980 #define VKI_UMTX_OP_RW_WRLOCK 13
1981 #define VKI_UMTX_OP_RW_UNLOCK 14
1982 #define VKI_UMTX_OP_WAIT_UINT_PRIVATE 15
1983 #define VKI_UMTX_OP_WAKE_PRIVATE 16
1984 #define VKI_UMTX_OP_MUTEX_WAIT 17
1985 #define VKI_UMTX_OP_MUTEX_WAKE 18
1986 #define VKI_UMTX_OP_SEM_WAIT 19
1987 #define VKI_UMTX_OP_SEM_WAKE 20
1988 #define VKI_UMTX_OP_NWAKE_PRIVATE 21
1989 #define VKI_UMTX_OP_MUTEX_WAKE2 22
1990 #define VKI_UMTX_OP_SEM2_WAIT 23
1991 #define VKI_UMTX_OP_SEM2_WAKE 24
1992 #define VKI_UMTX_OP_SHM 25
1993 #define VKI_UMTX_OP_ROBUST_LISTS 26
1994 #define VKI_UMTX_OP_GET_MIN_TIMEOUT 27
1995 #define VKI_UMTX_OP_SET_MIN_TIMEOUT 28
1996
1997 #define VKI_UMTX_SHM_CREAT 0x0001
1998
1999
2000
2001
2002
2003 struct vki_acl_entry {
2004 int ae_tag;
2005 vki_uid_t ae_uid;
2006 vki_mode_t ae_perm;
2007 };
2008
2009 #define VKI_ACL_MAX_ENTRIES 32
2010 struct vki_acl {
2011 int acl_cnt;
2012 struct vki_acl_entry acl_entry[VKI_ACL_MAX_ENTRIES];
2013 };
2014
2015
2016
2017
2018
2019
2020 struct vki_uuid {
2021 vki_uint32_t time_low;
2022 vki_uint16_t time_mid;
2023 vki_uint16_t time_hi_and_version;
2024 vki_uint8_t clock_seq_hi_and_reserved;
2025 vki_uint8_t clock_seq_low;
2026 vki_uint8_t node[6];
2027 };
2028
2029
2030
2031
2032
2033 #define VKI__SS_MAXSIZE 128U
2034 #define VKI__SS_ALIGNSIZE (sizeof(__int64_t))
2035 #define VKI__SS_PAD1SIZE (VKI__SS_ALIGNSIZE - sizeof(unsigned char) - \
2036 sizeof(vki_sa_family_t))
2037 #define VKI__SS_PAD2SIZE (VKI__SS_MAXSIZE - sizeof(unsigned char) - \
2038 sizeof(vki_sa_family_t) - VKI__SS_PAD1SIZE - VKI__SS_ALIGNSIZE)
2039
2040 struct vki_sockaddr_storage {
2041 unsigned char vki_ss_len;
2042 vki_sa_family_t vki_ss_family;
2043 char vki___ss_pad1[VKI__SS_PAD1SIZE];
2044 __int64_t vki___ss_align;
2045 char vki___ss_pad2VKI_[VKI__SS_PAD2SIZE];
2046 };
2047
2048
2049
2050
2051
2052 #define VKI_CAP_RIGHTS_VERSION_00 0
2053 #define VKI_CAP_RIGHTS_VERSION VKI_CAP_RIGHTS_VERSION_00
2054
2055 struct vki_cap_rights {
2056 vki_uint64_t cki_cr_rights[VKI_CAP_RIGHTS_VERSION + 2];
2057 };
2058
2059 typedef struct vki_cap_rights vki_cap_rights_t;
2060
2061
2062
2063
2064
2065
2066 #define VKI_KVME_TYPE_NONE 0
2067 #define VKI_KVME_TYPE_DEFAULT 1
2068 #define VKI_KVME_TYPE_VNODE 2
2069 #define VKI_KVME_TYPE_SWAP 3
2070 #define VKI_KVME_TYPE_DEVICE 4
2071 #define VKI_KVME_TYPE_PHYS 5
2072 #define VKI_KVME_TYPE_DEAD 6
2073 #define VKI_KVME_TYPE_MGTDEVICE 8
2074 #define VKI_KVME_TYPE_GUARD 9
2075 #define VKI_KVME_TYPE_UNKNOWN 255
2076
2077 #define VKI_KVME_PROT_READ 0x00000001
2078 #define VKI_KVME_PROT_WRITE 0x00000002
2079 #define VKI_KVME_PROT_EXEC 0x00000004
2080
2081 #define VKI_KVME_FLAG_COW 0x00000001
2082 #define VKI_KVME_FLAG_NEEDS_COPY 0x00000002
2083 #define VKI_KVME_FLAG_NOCOREDUMP 0x00000004
2084 #define VKI_KVME_FLAG_SUPER 0x00000008
2085 #define VKI_KVME_FLAG_GROWS_UP 0x00000010
2086 #define VKI_KVME_FLAG_GROWS_DOWN 0x00000020
2087 #define VKI_KVME_FLAG_USER_WIRED 0x00000040
2088
2089 struct vki_kinfo_vmentry {
2090 int kve_structsize;
2091 int kve_type;
2092 ULong kve_start;
2093 ULong kve_end;
2094 ULong kve_offset;
2095 ULong kve_fileid;
2096 UInt kve_vn_fsid_freebsd11;
2097 int kve_flags;
2098 int kve_resident;
2099 int kve_private_resident;
2100 int kve_protection;
2101 int kve_ref_count;
2102 int kve_shadow_count;
2103 int kve_vn_type;
2104 ULong kve_vn_size;
2105 UInt kve_vn_rdev_freebsd11;
2106 UShort kve_vn_mode;
2107 UShort kve_status;
2108 ULong kve_vn_fsid;
2109 ULong kve_vn_rdev;
2110 int _kve_ispare[8];
2111 char kve_path[VKI_PATH_MAX];
2112 };
2113
2114 #define VKI_KINFO_FILE_SIZE 1392
2115
2116 struct vki_kinfo_file {
2117 int vki_kf_structsize;
2118 int vki_kf_type;
2119 int vki_kf_fd;
2120 int vki_kf_ref_count;
2121 int vki_kf_flags;
2122 int vki_kf_pad0;
2123 Off64T vki_kf_offset;
2124 union {
2125 struct {
2126
2127 int vki_kf_vnode_type;
2128 int vki_kf_sock_domain;
2129 int vki_kf_sock_type;
2130 int kf_sock_protocol;
2131 struct vki_sockaddr_storage vki_kf_sa_local;
2132 struct vki_sockaddr_storage vki_kf_sa_peer;
2133 };
2134 union {
2135 struct {
2136
2137 vki_uint32_t vki_kf_sock_sendq;
2138
2139 int vki_kf_sock_domain0;
2140
2141 int vki_kf_sock_type0;
2142
2143 int vki_kf_sock_protocol0;
2144
2145 struct vki_sockaddr_storage vki_kf_sa_local;
2146
2147 struct vki_sockaddr_storage vki_kf_sa_peer;
2148
2149 vki_uint64_t vki_kf_sock_pcb;
2150
2151 vki_uint64_t vki_kf_sock_inpcb;
2152
2153 vki_uint64_t vki_kf_sock_unpconn;
2154
2155 vki_uint16_t vki_kf_sock_snd_sb_state;
2156
2157 vki_uint16_t vki_kf_sock_rcv_sb_state;
2158
2159 vki_uint32_t vki_kf_sock_recvq;
2160 } vki_kf_sock;
2161 struct {
2162
2163 int vki_kf_file_type;
2164
2165 int vki_kf_spareint[3];
2166 vki_uint64_t vki_kf_spareint64[30];
2167
2168 vki_uint64_t vki_kf_file_fsid;
2169
2170 vki_uint64_t vki_kf_file_rdev;
2171
2172 vki_uint64_t vki_kf_file_fileid;
2173
2174 vki_uint64_t vki_kf_file_size;
2175
2176 vki_uint32_t vki_kf_file_fsid_freebsd11;
2177
2178 vki_uint32_t kf_file_rdev_freebsd11;
2179
2180 vki_uint16_t vki_kf_file_mode;
2181
2182 vki_uint16_t vki_kf_file_pad0;
2183 vki_uint32_t kf_file_pad1;
2184 } kf_file;
2185 struct {
2186 vki_uint32_t vki_kf_spareint[4];
2187 vki_uint64_t vki_kf_spareint64[32];
2188 vki_uint32_t vki_kf_sem_value;
2189 vki_uint16_t vki_kf_sem_mode;
2190 } kf_sem;
2191 struct {
2192 vki_uint32_t vki_kf_spareint[4];
2193 vki_uint64_t vki_kf_spareint64[32];
2194 vki_uint64_t vki_kf_pipe_addr;
2195 vki_uint64_t vki_kf_pipe_peer;
2196 vki_uint32_t vki_kf_pipe_buffer_cnt;
2197
2198 vki_uint32_t vki_kf_pipe_pad0[3];
2199 } kf_pipe;
2200 struct {
2201 vki_uint32_t vki_kf_spareint[4];
2202 vki_uint64_t vki_kf_spareint64[32];
2203 vki_uint32_t vki_kf_pts_dev_freebsd11;
2204 vki_uint32_t vki_kf_pts_pad0;
2205 vki_uint64_t vki_kf_pts_dev;
2206
2207 vki_uint32_t vki_kf_pts_pad1[4];
2208 } kf_pts;
2209 struct {
2210 vki_uint32_t vki_kf_spareint[4];
2211 vki_uint64_t vki_kf_spareint64[32];
2212 vki_pid_t vki_kf_pid;
2213 } vki_kf_proc;
2214 struct {
2215 vki_uint64_t vki_kf_eventfd_value;
2216 vki_uint32_t vki_kf_eventfd_flags;
2217 } vki_kf_eventfd;
2218 } vki_kf_un;
2219 };
2220 vki_uint16_t vki_kf_status;
2221 vki_uint16_t vki_kf_pad1;
2222 int vki__kf_ispare0;
2223 vki_cap_rights_t vki_kf_cap_rights;
2224 vki_uint64_t vki__kf_cap_spare;
2225
2226 char vki_kf_path[VKI_PATH_MAX];
2227 };
2228
2229
2230
2231
2232 #define VKI_KENV_GET 0
2233 #define VKI_KENV_SET 1
2234 #define VKI_KENV_UNSET 2
2235 #define VKI_KENV_DUMP 3
2236 #define VKI_KENV_DUMP_LOADER 4
2237 #define VKI_KENV_DUMP_STATIC 5
2238
2239
2240
2241
2242
2243 struct vki_kexec_segment {
2244 void *buf;
2245 vki_size_t bufsz;
2246 vki_vm_paddr_t mem;
2247 vki_vm_size_t memsz;
2248 };
2249
2250
2251
2252
2253
2254
2255 #include <sys/sysctl.h>
2256
2257 #define VKI_CTL_KERN CTL_KERN
2258 #define VKI_CTL_HW CTL_HW
2259 #define VKI_KERN_PROC KERN_PROC
2260 #define VKI_KERN_PROC_VMMAP KERN_PROC_VMMAP
2261 #define VKI_KERN_PROC_FILEDESC KERN_PROC_FILEDESC
2262 #define VKI_HW_MACHINE HW_MACHINE
2263
2264
2265
2266
2267
2268 struct vki_thr_param {
2269 void (*start_func)(void *);
2270 void *arg;
2271 char *stack_base;
2272 vki_size_t stack_size;
2273 char *tls_base;
2274 vki_size_t tls_size;
2275 long *child_tid;
2276 long *parent_tid;
2277 int flags;
2278 struct vki_rtprio *rtp;
2279 void *spare[3];
2280 };
2281
2282
2283
2284
2285
2286 struct vki_kld_file_stat {
2287 int version;
2288 char name[MAXPATHLEN];
2289 int refs;
2290 int id;
2291 vki_caddr_t address;
2292 vki_size_t size;
2293 char pathname[MAXPATHLEN];
2294 };
2295
2296
2297 struct vki_kld_sym_lookup {
2298 int version;
2299 char *symname;
2300 unsigned long symvalue;
2301 vki_size_t symsize;
2302 };
2303
2304 #if !defined(VKI_INIT_ARCH_ELF_STATE)
2305
2306
2307
2308
2309
2310 struct vki_arch_elf_state {
2311 };
2312
2313 # define VKI_INIT_ARCH_ELF_STATE { }
2314
2315 #endif
2316
2317
2318
2319
2320
2321 #define VKI_Q_QUOTAON 0x0100
2322 #define VKI_Q_QUOTAOFF 0x0200
2323 #define VKI_Q_GETQUOTA32 0x0300
2324 #define VKI_Q_SETQUOTA32 0x0400
2325 #define VKI_Q_SETUSE32 0x0500
2326 #define VKI_Q_SYNC 0x0600
2327 #define VKI_Q_GETQUOTA 0x0700
2328 #define VKI_Q_SETQUOTA 0x0800
2329 #define VKI_Q_SETUSE 0x0900
2330 #define VKI_Q_GETQUOTASIZE 0x0A00
2331
2332
2333
2334
2335
2336 #define VKI_BITSET_BITS (sizeof(long) * 8)
2337
2338 #define vki__howmany(x, y) (((x) + ((y) - 1)) / (y))
2339
2340 #define vki__bitset_words(_s) (vki__howmany(_s, VKI_BITSET_BITS))
2341
2342 #define VKI_BITSET_DEFINE(t, _s) \
2343 struct t { \
2344 long __bits[vki__bitset_words((_s))]; \
2345 }
2346
2347
2348
2349
2350
2351 #define VKI_DOMAINSET_MAXSIZE 256
2352
2353 #ifndef VKI_DOMAINSET_SETSIZE
2354 #define VKI_DOMAINSET_SETSIZE VKI_DOMAINSET_MAXSIZE
2355 #endif
2356
2357 VKI_BITSET_DEFINE(vki_domainset, VKI_DOMAINSET_SETSIZE);
2358
2359 typedef struct vki_domainset vki_domainset_t;
2360
2361
2362
2363
2364
2365 #define VKI_PROC_SPROTECT 1
2366 #define VKI_PROC_REAP_ACQUIRE 2
2367 #define VKI_PROC_REAP_RELEASE 3
2368 #define VKI_PROC_REAP_STATUS 4
2369 #define VKI_PROC_REAP_GETPIDS 5
2370 #define VKI_PROC_REAP_KILL 6
2371 #define VKI_PROC_TRACE_CTL 7
2372 #define VKI_PROC_TRACE_STATUS 8
2373 #define VKI_PROC_TRAPCAP_CTL 9
2374 #define VKI_PROC_TRAPCAP_STATUS 10
2375 #define VKI_PROC_PDEATHSIG_CTL 11
2376 #define VKI_PROC_PDEATHSIG_STATUS 12
2377 #define VKI_PROC_ASLR_CTL 13
2378 #define VKI_PROC_ASLR_STATUS 14
2379 #define VKI_PROC_STACKGAP_CTL 17
2380 #define VKI_PROC_STACKGAP_STATUS 18
2381 #define VKI_PROC_NO_NEW_PRIVS_CTL 19
2382 #define VKI_PROC_NO_NEW_PRIVS_STATUS 20
2383 #define VKI_PROC_WXMAP_CTL 21
2384 #define VKI_PROC_WXMAP_STATUS 22
2385
2386 struct vki_procctl_reaper_status {
2387 vki_u_int rs_flags;
2388 vki_u_int rs_children;
2389 vki_u_int rs_descendants;
2390 vki_pid_t rs_reaper;
2391 vki_pid_t rs_pid;
2392 vki_u_int rs_pad0[15];
2393 };
2394
2395 struct vki_procctl_reaper_pidinfo;
2396
2397 struct vki_procctl_reaper_pids {
2398 vki_u_int rp_count;
2399 vki_u_int rp_pad0[15];
2400 struct vki_procctl_reaper_pidinfo *rp_pids;
2401 };
2402
2403 struct vki_procctl_reaper_kill {
2404 int rk_sig;
2405 vki_u_int rk_flags;
2406 vki_pid_t rk_subtree;
2407 vki_u_int rk_killed;
2408 vki_pid_t rk_fpid;
2409 vki_u_int rk_pad0[15];
2410 };
2411
2412
2413
2414
2415
2416 struct vki_jail {
2417 uint32_t version;
2418 char *path;
2419 char *hostname;
2420 char *jailname;
2421 uint32_t ip4s;
2422 uint32_t ip6s;
2423 struct in_addr *ip4;
2424 struct in6_addr *ip6;
2425 };
2426
2427
2428
2429
2430
2431 struct vki_ps_strings {
2432 char** ps_argvstr;
2433 unsigned int ps_nargvstr;
2434
2435 char** ps_envstr;
2436 unsigned int ps_nenvstr;
2437 };
2438
2439
2440
2441
2442
2443 #define VKI_AT_NULL 0
2444 #define VKI_AT_IGNORE 1
2445 #define VKI_AT_EXECFD 2
2446 #define VKI_AT_PHDR 3
2447 #define VKI_AT_PHENT 4
2448 #define VKI_AT_PHNUM 5
2449 #define VKI_AT_PAGESZ 6
2450 #define VKI_AT_BASE 7
2451 #define VKI_AT_FLAGS 8
2452 #define VKI_AT_ENTRY 9
2453 #define VKI_AT_NOTELF 10
2454 #define VKI_AT_UID 11
2455 #define VKI_AT_EUID 12
2456 #define VKI_AT_GID 13
2457 #define VKI_AT_EGID 14
2458 #define VKI_AT_EXECPATH 15
2459 #define VKI_AT_CANARY 16
2460 #define VKI_AT_CANARYLEN 17
2461 #define VKI_AT_OSRELDATE 18
2462 #define VKI_AT_NCPUS 19
2463 #define VKI_AT_PAGESIZES 20
2464 #define VKI_AT_PAGESIZESLEN 21
2465 #define VKI_AT_TIMEKEEP 22
2466 #define VKI_AT_STACKPROT 23
2467 #define VKI_AT_EHDRFLAGS 24
2468 #define VKI_AT_HWCAP 25
2469 #define VKI_AT_HWCAP2 26
2470
2471 #define VKI_AT_BSDFLAGS 27
2472 #define VKI_AT_ARGC 28
2473 #define VKI_AT_ARGV 29
2474 #define VKI_AT_ENVC 30
2475 #define VKI_AT_ENVV 31
2476 #define VKI_AT_PS_STRINGS 32
2477
2478 #define VKI_AT_FXRNG 33
2479 #define VKI_AT_KPRELOAD 34
2480
2481 #define VKI_AT_USRSTACKBASE 35
2482 #define VKI_AT_USRSTACKLIM 36
2483
2484 #define AT_CHERI_STATS 37
2485 #define AT_HWCAP3 38
2486 #define AT_HWCAP4 39
2487
2488
2489
2490
2491 #define VKI_NT_FREEBSD_ABI_TAG 1
2492 #define VKI_NT_FREEBSD_FEATURE_CTL 4
2493 #define VKI_NT_FREEBSD_FCTL_STKGAP_DISABLE 0x00000004
2494 #define VKI_NT_FREEBSD_FCTL_WXNEEDED 0x00000008
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524 #if defined(VGP_arm64_freebsd)
2525 #define vki_mode_t vki_int32_t
2526 #endif
2527
2528
2529
2530
2531
2532 typedef unsigned long vki_u_long;
2533 typedef unsigned int vki_u_int;
2534 #define VKI_PCI_MAXNAMELEN 16
2535
2536 typedef enum {
2537 VKI_PCI_GETCONF_LAST_DEVICE,
2538 VKI_PCI_GETCONF_LIST_CHANGED,
2539 VKI_PCI_GETCONF_MORE_DEVS,
2540 VKI_PCI_GETCONF_ERROR
2541 } vki_pci_getconf_status;
2542
2543 typedef enum {
2544 VKI_PCI_GETCONF_NO_MATCH = 0x0000,
2545 VKI_PCI_GETCONF_MATCH_DOMAIN = 0x0001,
2546 VKI_PCI_GETCONF_MATCH_BUS = 0x0002,
2547 VKI_PCI_GETCONF_MATCH_DEV = 0x0004,
2548 VKI_PCI_GETCONF_MATCH_FUNC = 0x0008,
2549 VKI_PCI_GETCONF_MATCH_NAME = 0x0010,
2550 VKI_PCI_GETCONF_MATCH_UNIT = 0x0020,
2551 VKI_PCI_GETCONF_MATCH_VENDOR = 0x0040,
2552 VKI_PCI_GETCONF_MATCH_DEVICE = 0x0080,
2553 VKI_PCI_GETCONF_MATCH_CLASS = 0x0100
2554 } vki_pci_getconf_flags;
2555
2556 struct vki_pcisel {
2557 vki_uint32_t pc_domain;
2558 vki_uint8_t pc_bus;
2559 vki_uint8_t pc_dev;
2560 vki_uint8_t pc_func;
2561 };
2562
2563 struct vki_pci_conf {
2564 struct vki_pcisel pc_sel;
2565 vki_uint8_t pc_hdr;
2566 vki_uint16_t pc_subvendor;
2567 vki_uint16_t pc_subdevice;
2568
2569 vki_uint16_t pc_vendor;
2570 vki_uint16_t pc_device;
2571
2572 vki_uint8_t pc_class;
2573 vki_uint8_t pc_subclass;
2574 vki_uint8_t pc_progif;
2575 vki_uint8_t pc_revid;
2576 char pd_name[VKI_PCI_MAXNAMELEN + 1];
2577 vki_u_long pd_unit;
2578 };
2579
2580 struct vki_pci_match_conf {
2581 struct vki_pcisel pc_sel;
2582 char pd_name[VKI_PCI_MAXNAMELEN + 1];
2583 vki_u_long pd_unit;
2584 vki_uint16_t pc_vendor;
2585 vki_uint16_t pc_device;
2586 vki_uint8_t pc_class;
2587 vki_pci_getconf_flags flags;
2588 };
2589
2590 struct vki_pci_conf_io {
2591 vki_uint32_t pat_buf_len;
2592 vki_uint32_t num_patterns;
2593 struct vki_pci_match_conf *patterns;
2594 vki_uint32_t match_buf_len;
2595 vki_uint32_t num_matches;
2596 struct vki_pci_conf *matches;
2597 vki_uint32_t offset;
2598 vki_uint32_t generation;
2599 vki_pci_getconf_status status;
2600 };
2601
2602 #define VKI_PCIOCGETCONF _VKI_IOWR('p', 5, struct vki_pci_conf_io)
2603
2604
2605
2606
2607
2608 #define VKI_CAM_MAX_CDBLEN 16
2609
2610 typedef unsigned int vki_path_id_t;
2611 typedef unsigned int vki_target_id_t;
2612 typedef unsigned int vki_lun_id_t;
2613
2614 typedef struct {
2615 vki_uint32_t priority;
2616 vki_uint32_t generation;
2617 int index;
2618 } vki_cam_pinfo;
2619
2620
2621
2622
2623
2624
2625 struct vki_ata_params {
2626 vki_u_int16_t config;
2627 vki_u_int16_t cylinders;
2628 vki_u_int16_t specconf;
2629 vki_u_int16_t heads;
2630 vki_u_int16_t obsolete4;
2631 vki_u_int16_t obsolete5;
2632 vki_u_int16_t sectors;
2633 vki_u_int16_t vendor7[3];
2634 vki_u_int8_t serial[20];
2635 vki_u_int16_t retired20;
2636 vki_u_int16_t retired21;
2637 vki_u_int16_t obsolete22;
2638 vki_u_int8_t revision[8];
2639 vki_u_int8_t model[40];
2640 vki_u_int16_t sectors_intr;
2641 vki_u_int16_t usedmovsd;
2642 vki_u_int16_t capabilities1;
2643 vki_u_int16_t capabilities2;
2644 vki_u_int16_t retired_piomode;
2645 vki_u_int16_t retired_dmamode;
2646 vki_u_int16_t atavalid;
2647 vki_u_int16_t current_cylinders;
2648 vki_u_int16_t current_heads;
2649 vki_u_int16_t current_sectors;
2650 vki_u_int16_t current_size_1;
2651 vki_u_int16_t current_size_2;
2652 vki_u_int16_t multi;
2653 vki_u_int16_t lba_size_1;
2654 vki_u_int16_t lba_size_2;
2655 vki_u_int16_t obsolete62;
2656 vki_u_int16_t mwdmamodes;
2657 vki_u_int16_t apiomodes;
2658
2659 vki_u_int16_t mwdmamin;
2660 vki_u_int16_t mwdmarec;
2661 vki_u_int16_t pioblind;
2662 vki_u_int16_t pioiordy;
2663 vki_u_int16_t support3;
2664 vki_u_int16_t reserved70;
2665 vki_u_int16_t rlsovlap;
2666 vki_u_int16_t rlsservice;
2667 vki_u_int16_t reserved73;
2668 vki_u_int16_t reserved74;
2669 vki_u_int16_t queue;
2670 vki_u_int16_t satacapabilities;
2671 vki_u_int16_t satacapabilities2;
2672 vki_u_int16_t satasupport;
2673 vki_u_int16_t sataenabled;
2674 vki_u_int16_t version_major;
2675 vki_u_int16_t version_minor;
2676
2677 struct {
2678 vki_u_int16_t command1;
2679 vki_u_int16_t command2;
2680 vki_u_int16_t extension;
2681 } __packed support, enabled;
2682
2683 vki_u_int16_t udmamodes;
2684 vki_u_int16_t erase_time;
2685 vki_u_int16_t enhanced_erase_time;
2686 vki_u_int16_t apm_value;
2687 vki_u_int16_t master_passwd_revision;
2688 vki_u_int16_t hwres;
2689 vki_u_int16_t acoustic;
2690 vki_u_int16_t stream_min_req_size;
2691 vki_u_int16_t stream_transfer_time;
2692 vki_u_int16_t stream_access_latency;
2693 vki_u_int32_t stream_granularity;
2694 vki_u_int16_t lba_size48_1;
2695 vki_u_int16_t lba_size48_2;
2696 vki_u_int16_t lba_size48_3;
2697 vki_u_int16_t lba_size48_4;
2698 vki_u_int16_t reserved104;
2699 vki_u_int16_t max_dsm_blocks;
2700 vki_u_int16_t pss;
2701 vki_u_int16_t isd;
2702 vki_u_int16_t wwn[4];
2703 vki_u_int16_t reserved112[5];
2704 vki_u_int16_t lss_1;
2705 vki_u_int16_t lss_2;
2706 vki_u_int16_t support2;
2707 vki_u_int16_t enabled2;
2708 vki_u_int16_t reserved121[6];
2709 vki_u_int16_t removable_status;
2710 vki_u_int16_t security_status;
2711 vki_u_int16_t reserved129[31];
2712 vki_u_int16_t cfa_powermode1;
2713 vki_u_int16_t reserved161;
2714 vki_u_int16_t cfa_kms_support;
2715 vki_u_int16_t cfa_trueide_modes;
2716 vki_u_int16_t cfa_memory_modes;
2717 vki_u_int16_t reserved165[4];
2718 vki_u_int16_t support_dsm;
2719 vki_u_int16_t reserved170[6];
2720 vki_u_int8_t media_serial[60];
2721 vki_u_int16_t sct;
2722 vki_u_int16_t reserved206[2];
2723 vki_u_int16_t lsalign;
2724 vki_u_int16_t wrv_sectors_m3_1;
2725 vki_u_int16_t wrv_sectors_m3_2;
2726 vki_u_int16_t wrv_sectors_m2_1;
2727 vki_u_int16_t wrv_sectors_m2_2;
2728 vki_u_int16_t nv_cache_caps;
2729 vki_u_int16_t nv_cache_size_1;
2730 vki_u_int16_t nv_cache_size_2;
2731 vki_u_int16_t media_rotation_rate;
2732 vki_u_int16_t reserved218;
2733 vki_u_int16_t nv_cache_opt;
2734 vki_u_int16_t wrv_mode;
2735 vki_u_int16_t reserved221;
2736 vki_u_int16_t transport_major;
2737 vki_u_int16_t transport_minor;
2738 vki_u_int16_t reserved224[31];
2739 vki_u_int16_t integrity;
2740 } __packed;
2741
2742
2743
2744
2745
2746 struct vki_callout_handle {
2747 struct vki_callout *callout;
2748 };
2749
2750
2751
2752
2753
2754
2755 struct vki_scsi_sense_data {
2756 vki_u_int8_t error_code;
2757 vki_u_int8_t segment;
2758 vki_u_int8_t flags;
2759 vki_u_int8_t info[4];
2760 vki_u_int8_t extra_len;
2761 vki_u_int8_t cmd_spec_info[4];
2762 vki_u_int8_t add_sense_code;
2763 vki_u_int8_t add_sense_code_qual;
2764 vki_u_int8_t fru;
2765 vki_u_int8_t sense_key_spec[3];
2766 vki_u_int8_t extra_bytes[14];
2767 #define VKI_SSD_FULL_SIZE sizeof(struct vki_scsi_sense_data)
2768 };
2769
2770 struct vki_scsi_inquiry_data {
2771 vki_uint8_t device;
2772 vki_uint8_t dev_qual2;
2773 vki_uint8_t version;
2774 vki_uint8_t response_format;
2775 vki_uint8_t additional_length;
2776 vki_uint8_t spc3_flags;
2777 vki_uint8_t spc2_flags;
2778 vki_uint8_t flags;
2779 #define VKI_SID_VENDOR_SIZE 8
2780 char vendor[VKI_SID_VENDOR_SIZE];
2781 #define VKI_SID_PRODUCT_SIZE 16
2782 char product[VKI_SID_PRODUCT_SIZE];
2783 #define VKI_SID_REVISION_SIZE 4
2784 char revision[VKI_SID_REVISION_SIZE];
2785 #define VKI_SID_VENDOR_SPECIFIC_0_SIZE 20
2786 vki_uint8_t vendor_specific0[VKI_SID_VENDOR_SPECIFIC_0_SIZE];
2787 vki_uint8_t spi3data;
2788 vki_uint8_t reserved2;
2789
2790
2791
2792 vki_uint8_t version1[2];
2793 vki_uint8_t version2[2];
2794 vki_uint8_t version3[2];
2795 vki_uint8_t version4[2];
2796 vki_uint8_t version5[2];
2797 vki_uint8_t version6[2];
2798 vki_uint8_t version7[2];
2799 vki_uint8_t version8[2];
2800
2801 vki_uint8_t reserved3[22];
2802
2803 #define VKI_SID_VENDOR_SPECIFIC_1_SIZE 160
2804 vki_uint8_t vendor_specific1[VKI_SID_VENDOR_SPECIFIC_1_SIZE];
2805 };
2806
2807
2808
2809
2810
2811 #define VKI_SLIST_ENTRY(type) \
2812 struct { \
2813 struct type *sle_next; \
2814 }
2815
2816 #define VKI_LIST_ENTRY(type) \
2817 struct { \
2818 struct type *le_next; \
2819 struct type **le_prev; \
2820 }
2821
2822 #define VKI_STAILQ_ENTRY(type) \
2823 struct { \
2824 struct type *stqe_next; \
2825 }
2826
2827 #ifdef VKI_QUEUE_MACRO_DEBUG_TRACE
2828 struct vki_qm_trace {
2829 unsigned long lastline;
2830 unsigned long prevline;
2831 const char *lastfile;
2832 const char *prevfile;
2833 };
2834
2835 #define VKI_TRACEBUF struct vki_qm_trace trace;
2836 #else
2837 #define VKI_TRACEBUF
2838 #endif
2839
2840 #define VKI_TAILQ_ENTRY(type) \
2841 struct { \
2842 struct type *tqe_next; \
2843 struct type **tqe_prev; \
2844 VKI_TRACEBUF \
2845 }
2846
2847
2848
2849
2850
2851
2852 #define VKI_CAM_VERSION 0x1a
2853
2854 typedef union {
2855 VKI_LIST_ENTRY(vki_ccb_hdr) le;
2856 VKI_SLIST_ENTRY(vki_ccb_hdr) sle;
2857 VKI_TAILQ_ENTRY(vki_ccb_hdr) tqe;
2858 VKI_STAILQ_ENTRY(vki_ccb_hdr) stqe;
2859 } vki_camq_entry;
2860
2861 typedef enum {
2862
2863 VKI_XPT_FC_QUEUED = 0x100,
2864
2865 VKI_XPT_FC_USER_CCB = 0x200,
2866 VKI_XPT_FC_XPT_ONLY = 0x400,
2867
2868 VKI_XPT_FC_DEV_QUEUED = 0x800 | VKI_XPT_FC_QUEUED,
2869
2870
2871 VKI_XPT_NOOP = 0x00,
2872
2873 VKI_XPT_SCSI_IO = 0x01 | VKI_XPT_FC_DEV_QUEUED,
2874
2875 VKI_XPT_GDEV_TYPE = 0x02,
2876
2877 VKI_XPT_GDEVLIST = 0x03,
2878
2879 VKI_XPT_PATH_INQ = 0x04,
2880
2881 VKI_XPT_REL_SIMQ = 0x05,
2882
2883 VKI_XPT_SASYNC_CB = 0x06,
2884
2885 VKI_XPT_SDEV_TYPE = 0x07,
2886
2887 VKI_XPT_SCAN_BUS = 0x08 | VKI_XPT_FC_QUEUED | VKI_XPT_FC_USER_CCB
2888 | VKI_XPT_FC_XPT_ONLY,
2889
2890 VKI_XPT_DEV_MATCH = 0x09 | VKI_XPT_FC_XPT_ONLY,
2891
2892 VKI_XPT_DEBUG = 0x0a,
2893
2894 VKI_XPT_PATH_STATS = 0x0b,
2895
2896 VKI_XPT_GDEV_STATS = 0x0c,
2897
2898 VKI_XPT_FREEZE_QUEUE = 0x0d,
2899
2900
2901 VKI_XPT_ABORT = 0x10,
2902
2903 VKI_XPT_RESET_BUS = 0x11 | VKI_XPT_FC_XPT_ONLY,
2904
2905 VKI_XPT_RESET_DEV = 0x12 | VKI_XPT_FC_DEV_QUEUED,
2906
2907 VKI_XPT_TERM_IO = 0x13,
2908
2909 VKI_XPT_SCAN_LUN = 0x14 | VKI_XPT_FC_QUEUED | VKI_XPT_FC_USER_CCB
2910 | VKI_XPT_FC_XPT_ONLY,
2911
2912 VKI_XPT_GET_TRAN_SETTINGS = 0x15,
2913
2914
2915
2916
2917 VKI_XPT_SET_TRAN_SETTINGS = 0x16,
2918
2919
2920
2921
2922 VKI_XPT_CALC_GEOMETRY = 0x17,
2923
2924
2925
2926
2927
2928 VKI_XPT_ATA_IO = 0x18 | VKI_XPT_FC_DEV_QUEUED,
2929
2930 VKI_XPT_GET_SIM_KNOB = 0x18,
2931
2932
2933
2934
2935 VKI_XPT_SET_SIM_KNOB = 0x19,
2936
2937
2938
2939
2940 VKI_XPT_ENG_INQ = 0x20 | VKI_XPT_FC_XPT_ONLY,
2941
2942 VKI_XPT_ENG_EXEC = 0x21 | VKI_XPT_FC_DEV_QUEUED,
2943
2944
2945
2946 VKI_XPT_EN_LUN = 0x30,
2947
2948 VKI_XPT_TARGET_IO = 0x31 | VKI_XPT_FC_DEV_QUEUED,
2949
2950 VKI_XPT_ACCEPT_TARGET_IO = 0x32 | VKI_XPT_FC_QUEUED | VKI_XPT_FC_USER_CCB,
2951
2952 VKI_XPT_CONT_TARGET_IO = 0x33 | VKI_XPT_FC_DEV_QUEUED,
2953
2954 VKI_XPT_IMMED_NOTIFY = 0x34 | VKI_XPT_FC_QUEUED | VKI_XPT_FC_USER_CCB,
2955
2956 VKI_XPT_NOTIFY_ACK = 0x35,
2957
2958 VKI_XPT_IMMEDIATE_NOTIFY = 0x36 | VKI_XPT_FC_QUEUED | VKI_XPT_FC_USER_CCB,
2959
2960 VKI_XPT_NOTIFY_ACKNOWLEDGE = 0x37 | VKI_XPT_FC_QUEUED | VKI_XPT_FC_USER_CCB,
2961
2962 VKI_XPT_REPROBE_LUN = 0x38 | VKI_XPT_FC_QUEUED | VKI_XPT_FC_USER_CCB,
2963
2964
2965 VKI_XPT_MMC_SET_TRAN_SETTINGS = 0x40 | VKI_XPT_FC_DEV_QUEUED,
2966 VKI_XPT_MMC_GET_TRAN_SETTINGS = 0x41 | VKI_XPT_FC_DEV_QUEUED,
2967
2968 VKI_XPT_VUNIQUE = 0x80
2969 } vki_xpt_opcode;
2970
2971
2972
2973 typedef enum {
2974 VKI_CAM_CDB_POINTER = 0x00000001,
2975 VKI_CAM_unused1 = 0x00000002,
2976 VKI_CAM_unused2 = 0x00000004,
2977 VKI_CAM_NEGOTIATE = 0x00000008,
2978
2979
2980
2981 VKI_CAM_DATA_ISPHYS = 0x00000010,
2982 VKI_CAM_DIS_AUTOSENSE = 0x00000020,
2983 VKI_CAM_DIR_BOTH = 0x00000000,
2984 VKI_CAM_DIR_IN = 0x00000040,
2985 VKI_CAM_DIR_OUT = 0x00000080,
2986 VKI_CAM_DIR_NONE = 0x000000C0,
2987 VKI_CAM_DIR_MASK = 0x000000C0,
2988 VKI_CAM_DATA_VADDR = 0x00000000,
2989 VKI_CAM_DATA_PADDR = 0x00000010,
2990 VKI_CAM_DATA_SG = 0x00040000,
2991 VKI_CAM_DATA_SG_PADDR = 0x00040010,
2992 VKI_CAM_DATA_BIO = 0x00200000,
2993 VKI_CAM_DATA_MASK = 0x00240010,
2994 VKI_CAM_unused3 = 0x00000100,
2995 VKI_CAM_unused4 = 0x00000200,
2996 VKI_CAM_DEV_QFRZDIS = 0x00000400,
2997 VKI_CAM_DEV_QFREEZE = 0x00000800,
2998 VKI_CAM_HIGH_POWER = 0x00001000,
2999 VKI_CAM_SENSE_PTR = 0x00002000,
3000 VKI_CAM_SENSE_PHYS = 0x00004000,
3001 VKI_CAM_TAG_ACTION_VALID = 0x00008000,
3002 VKI_CAM_PASS_ERR_RECOVER = 0x00010000,
3003 VKI_CAM_DIS_DISCONNECT = 0x00020000,
3004 VKI_CAM_unused5 = 0x00080000,
3005 VKI_CAM_unused6 = 0x00100000,
3006 VKI_CAM_CDB_PHYS = 0x00400000,
3007 VKI_CAM_unused7 = 0x00800000,
3008
3009
3010 VKI_CAM_unused8 = 0x01000000,
3011 VKI_CAM_unused9 = 0x02000000,
3012 VKI_CAM_unused10 = 0x04000000,
3013 VKI_CAM_unused11 = 0x08000000,
3014 VKI_CAM_unused12 = 0x10000000,
3015 VKI_CAM_unused13 = 0x20000000,
3016 VKI_CAM_unused14 = 0x40000000,
3017
3018
3019 VKI_CAM_SEND_SENSE = 0x08000000,
3020 VKI_CAM_unused15 = 0x10000000,
3021 VKI_CAM_unused16 = 0x20000000,
3022 VKI_CAM_SEND_STATUS = 0x40000000,
3023
3024 VKI_CAM_UNLOCKED = 0x80000000
3025 } vki_ccb_flags;
3026
3027 typedef union {
3028 void *ptr;
3029 vki_u_long field;
3030 vki_uint8_t bytes[sizeof(vki_uintptr_t)];
3031 } vki_ccb_priv_entry;
3032
3033 #define VKI_IOCDBLEN VKI_CAM_MAX_CDBLEN
3034 #define VKI_CCB_PERIPH_PRIV_SIZE 2
3035 #define VKI_CCB_SIM_PRIV_SIZE 2
3036
3037 typedef union {
3038 vki_ccb_priv_entry entries[VKI_CCB_PERIPH_PRIV_SIZE];
3039 vki_uint8_t bytes[VKI_CCB_PERIPH_PRIV_SIZE * sizeof(vki_ccb_priv_entry)];
3040 } vki_ccb_ppriv_area;
3041
3042 typedef union {
3043 vki_ccb_priv_entry entries[VKI_CCB_SIM_PRIV_SIZE];
3044 vki_uint8_t bytes[VKI_CCB_SIM_PRIV_SIZE * sizeof(vki_ccb_priv_entry)];
3045 } vki_ccb_spriv_area;
3046
3047 union vki_ccb;
3048 struct vki_cam_periph;
3049
3050 typedef struct {
3051 struct vki_timeval *etime;
3052 vki_uintptr_t sim_data;
3053 vki_uintptr_t periph_data;
3054 } vki_ccb_qos_area;
3055
3056 struct vki_ccb_hdr {
3057 vki_cam_pinfo pinfo;
3058 vki_camq_entry xpt_links;
3059 vki_camq_entry sim_links;
3060 vki_camq_entry periph_links;
3061 #if BYTE_ORDER == LITTLE_ENDIAN
3062 vki_uint16_t retry_count;
3063 vki_uint16_t alloc_flags;
3064 #else
3065 vki_uint16_t alloc_flags;
3066 vki_uint16_t retry_count;
3067 #endif
3068 void (*cbfcnp)(struct vki_cam_periph *, union vki_ccb *);
3069
3070 vki_xpt_opcode func_code;
3071 vki_uint32_t status;
3072 struct vki_cam_path *path;
3073 vki_path_id_t path_id;
3074 vki_target_id_t target_id;
3075 vki_lun_id_t target_lun;
3076 vki_uint32_t flags;
3077 vki_uint32_t xflags;
3078 vki_ccb_ppriv_area periph_priv;
3079 vki_ccb_spriv_area sim_priv;
3080 vki_ccb_qos_area qos;
3081 vki_uint32_t timeout;
3082 struct vki_timeval softtimeout;
3083 };
3084
3085 typedef union {
3086 vki_u_int8_t *cdb_ptr;
3087
3088 vki_u_int8_t cdb_bytes[VKI_IOCDBLEN];
3089 } vki_cdb_t;
3090
3091
3092
3093
3094
3095
3096 struct vki_ccb_scsiio {
3097 struct vki_ccb_hdr ccb_h;
3098 union vki_ccb *next_ccb;
3099 vki_u_int8_t *req_map;
3100 vki_u_int8_t *data_ptr;
3101 vki_u_int32_t dxfer_len;
3102
3103 struct vki_scsi_sense_data sense_data;
3104 vki_u_int8_t sense_len;
3105 vki_u_int8_t cdb_len;
3106 vki_u_int16_t sglist_cnt;
3107 vki_u_int8_t scsi_status;
3108 vki_u_int8_t sense_resid;
3109 vki_u_int32_t resid;
3110 vki_cdb_t cdb_io;
3111 vki_u_int8_t *msg_ptr;
3112 vki_u_int16_t msg_len;
3113 vki_u_int8_t tag_action;
3114
3115
3116
3117
3118
3119 vki_uint8_t priority;
3120 vki_u_int tag_id;
3121 vki_u_int init_id;
3122 };
3123
3124 typedef enum {
3125 VKI_CAM_DEV_MATCH_LAST,
3126 VKI_CAM_DEV_MATCH_MORE,
3127 VKI_CAM_DEV_MATCH_LIST_CHANGED,
3128 VKI_CAM_DEV_MATCH_SIZE_ERROR,
3129 VKI_CAM_DEV_MATCH_ERROR
3130 } vki_ccb_dev_match_status;
3131
3132
3133 struct vki_dev_match_pattern;
3134
3135 typedef enum {
3136 VKI_DEV_MATCH_PERIPH,
3137 VKI_DEV_MATCH_DEVICE,
3138 VKI_DEV_MATCH_BUS
3139 } vki_dev_match_type;
3140
3141 #define VKI_DEV_IDLEN 16
3142
3143 struct vki_periph_match_result {
3144 char periph_name[VKI_DEV_IDLEN];
3145 vki_uint32_t unit_number;
3146 vki_path_id_t path_id;
3147 vki_target_id_t target_id;
3148 vki_lun_id_t target_lun;
3149 };
3150
3151 typedef enum {
3152 VKI_PROTO_UNKNOWN,
3153 VKI_PROTO_UNSPECIFIED,
3154 VKI_PROTO_SCSI,
3155 VKI_PROTO_ATA,
3156 VKI_PROTO_ATAPI,
3157 VKI_PROTO_SATAPM,
3158 VKI_PROTO_SEMB,
3159 VKI_PROTO_NVME,
3160 VKI_PROTO_MMCSD,
3161 } vki_cam_proto;
3162
3163 typedef enum {
3164 VKI_DEV_RESULT_NOFLAG = 0x00,
3165 VKI_DEV_RESULT_UNCONFIGURED = 0x01
3166 } vki_dev_result_flags;
3167
3168
3169 struct vki_device_match_result {
3170 vki_path_id_t path_id;
3171 vki_target_id_t target_id;
3172 vki_lun_id_t target_lun;
3173 vki_cam_proto protocol;
3174 struct vki_scsi_inquiry_data inq_data;
3175 struct vki_ata_params ident_data;
3176 vki_dev_result_flags flags;
3177 };
3178
3179 struct vki_bus_match_result {
3180 vki_path_id_t path_id;
3181 char dev_name[VKI_DEV_IDLEN];
3182 vki_uint32_t unit_number;
3183 vki_uint32_t bus_id;
3184 };
3185
3186 union vki_match_result {
3187 struct vki_periph_match_result periph_result;
3188 struct vki_device_match_result device_result;
3189 struct vki_bus_match_result bus_result;
3190 };
3191
3192 struct vki_dev_match_result {
3193 vki_dev_match_type type;
3194 union vki_match_result result;
3195 };
3196
3197 typedef enum {
3198 VKI_CAM_DEV_POS_NONE = 0x000,
3199 VKI_CAM_DEV_POS_BUS = 0x001,
3200 VKI_CAM_DEV_POS_TARGET = 0x002,
3201 VKI_CAM_DEV_POS_DEVICE = 0x004,
3202 VKI_CAM_DEV_POS_PERIPH = 0x008,
3203 VKI_CAM_DEV_POS_PDPTR = 0x010,
3204 VKI_CAM_DEV_POS_TYPEMASK = 0xf00,
3205 VKI_CAM_DEV_POS_EDT = 0x100,
3206 VKI_CAM_DEV_POS_PDRV = 0x200
3207 } vki_dev_pos_type;
3208
3209 struct vki_ccb_dm_cookie {
3210 void *bus;
3211 void *target;
3212 void *device;
3213 void *periph;
3214 void *pdrv;
3215 };
3216
3217 struct vki_ccb_dev_position {
3218 vki_u_int generations[4];
3219 #define VKI_CAM_BUS_GENERATION 0x00
3220 #define VKI_CAM_TARGET_GENERATION 0x01
3221 #define VKI_CAM_DEV_GENERATION 0x02
3222 #define VKI_CAM_PERIPH_GENERATION 0x03
3223 vki_dev_pos_type position_type;
3224 struct vki_ccb_dm_cookie cookie;
3225 };
3226
3227 struct vki_ccb_dev_match {
3228 struct vki_ccb_hdr ccb_h;
3229 vki_ccb_dev_match_status status;
3230 vki_uint32_t num_patterns;
3231 vki_uint32_t pattern_buf_len;
3232 struct vki_dev_match_pattern *patterns;
3233 vki_uint32_t num_matches;
3234 vki_uint32_t match_buf_len;
3235 struct vki_dev_match_result *matches;
3236 struct vki_ccb_dev_position pos;
3237 };
3238
3239
3240
3241
3242
3243
3244
3245 union vki_ccb {
3246
3247 struct vki_ccb_hdr ccb_h;
3248 struct vki_ccb_scsiio csio;
3249 #if 0
3250 struct ccb_getdev cgd;
3251 struct ccb_getdevlist cgdl;
3252 struct ccb_pathinq cpi;
3253 struct ccb_relsim crs;
3254 struct ccb_setasync csa;
3255 struct ccb_setdev csd;
3256 struct ccb_pathstats cpis;
3257 struct ccb_getdevstats cgds;
3258 #endif
3259 struct vki_ccb_dev_match cdm;
3260 #if 0
3261 struct ccb_trans_settings cts;
3262 struct ccb_calc_geometry ccg;
3263 struct ccb_sim_knob knob;
3264 struct ccb_abort cab;
3265 struct ccb_resetbus crb;
3266 struct ccb_resetdev crd;
3267 struct ccb_termio tio;
3268 struct ccb_accept_tio atio;
3269 struct ccb_scsiio ctio;
3270 struct ccb_en_lun cel;
3271 struct ccb_immed_notify cin;
3272 struct ccb_notify_ack cna;
3273 struct ccb_immediate_notify cin1;
3274 struct ccb_notify_acknowledge cna2;
3275 struct ccb_eng_inq cei;
3276 struct ccb_eng_exec cee;
3277 struct ccb_rescan crcn;
3278 struct ccb_debug cdbg;
3279 struct ccb_ataio ataio;
3280 #endif
3281 char make_union_right_size[0x4E0];
3282 };
3283
3284 #define VKI_CAMIOCOMMAND _VKI_IOWR(VKI_CAM_VERSION, 2, union vki_ccb)
3285
3286
3287
3288
3289 struct vki_setcred {
3290 vki_uid_t sc_uid;
3291 vki_uid_t sc_ruid;
3292 vki_uid_t sc_svuid;
3293 vki_gid_t sc_gid;
3294 vki_gid_t sc_rgid;
3295 vki_gid_t sc_svgid;
3296 vki_u_int sc_pad;
3297 vki_u_int sc_supp_groups_nb;
3298 vki_gid_t *sc_supp_groups;
3299 struct vki_mac *sc_label;
3300 };
3301
3302
3303
3304
3305
3306