@samitouri / QOSamiQemu / commits / 45ddfc2bf9

bsd-user: Add FreeBSD ioctl command table

Add os-ioctl-cmds.h containing the complete ioctl command table mapping TARGET_* ioctl commands to their handlers. Uses IOCTL and IOCTL_SPECIAL macros for table generation. Signed-off-by: Stacey Son <sson@FreeBSD.org> Signed-off-by: Alexander Kabaev <kan@FreeBSD.org> Reviewed-by: Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com> Signed-off-by: Warner Losh <imp@bsdimp.com>

Stacey Son committed Mar 13, 2026 at 22:13 UTC 45ddfc2bf95dc7f118aeac2ba080525c9605aef3
1 file changed +149
bsd-user/freebsd/os-ioctl-cmds.h new
+149
@@ -0,0 +1,149 @@
1 +/*
2 + * FreeBSD file related system call shims and definitions
3 + *
4 + * Copyright (c) 2014 Stacey D. Son
5 + *
6 + * SPDX-License-Identifier: GPL-2.0-or-later
7 + */
8 +
9 +/* sys/ttycom.h tty(4) */
10 +IOCTL(TIOCSETD, IOC_W, MK_PTR(TYPE_INT))
11 +IOCTL(TIOCGETD, IOC_R, MK_PTR(TYPE_INT))
12 +IOCTL(TIOCSBRK, IOC_, TYPE_NULL)
13 +IOCTL(TIOCCBRK, IOC_, TYPE_NULL)
14 +IOCTL(TIOCSDTR, IOC_, TYPE_NULL)
15 +IOCTL(TIOCCDTR, IOC_, TYPE_NULL)
16 +IOCTL(TIOCGPGRP, IOC_R, MK_PTR(TYPE_INT))
17 +IOCTL(TIOCSPGRP, IOC_W, MK_PTR(TYPE_INT))
18 +IOCTL(TIOCGETA, IOC_R, MK_PTR(MK_STRUCT(STRUCT_termios)))
19 +IOCTL(TIOCSETA, IOC_W, MK_PTR(MK_STRUCT(STRUCT_termios)))
20 +IOCTL(TIOCSETAW, IOC_W, MK_PTR(MK_STRUCT(STRUCT_termios)))
21 +IOCTL(TIOCSETAF, IOC_W, MK_PTR(MK_STRUCT(STRUCT_termios)))
22 +IOCTL(TIOCPTMASTER, IOC_, TYPE_NULL)
23 +IOCTL(TIOCOUTQ, IOC_R, MK_PTR(TYPE_INT))
24 +IOCTL(TIOCSTI, IOC_W, MK_PTR(TYPE_CHAR))
25 +IOCTL(TIOCNOTTY, IOC_, TYPE_NULL)
26 +IOCTL(TIOCSTOP, IOC_, TYPE_NULL)
27 +IOCTL(TIOCSTART, IOC_, TYPE_NULL)
28 +IOCTL(TIOCPKT, IOC_W, MK_PTR(TYPE_INT))
29 +IOCTL(TIOCSCTTY, IOC_, TYPE_NULL)
30 +IOCTL(TIOCDRAIN, IOC_, TYPE_NULL)
31 +IOCTL(TIOCEXCL, IOC_, TYPE_NULL)
32 +IOCTL(TIOCNXCL, IOC_, TYPE_NULL)
33 +IOCTL(TIOCFLUSH, IOC_W, MK_PTR(TYPE_INT))
34 +IOCTL(TIOCGWINSZ, IOC_R, MK_PTR(MK_STRUCT(STRUCT_winsize)))
35 +IOCTL(TIOCSWINSZ, IOC_W, MK_PTR(MK_STRUCT(STRUCT_winsize)))
36 +IOCTL(TIOCCONS, IOC_W, MK_PTR(TYPE_INT))
37 +IOCTL(TIOCMSET, IOC_W, MK_PTR(TYPE_INT))
38 +IOCTL(TIOCMGET, IOC_R, MK_PTR(TYPE_INT))
39 +IOCTL(TIOCMBIS, IOC_W, MK_PTR(TYPE_INT))
40 +IOCTL(TIOCMBIC, IOC_W, MK_PTR(TYPE_INT))
41 +
42 +/* sys/filio.h */
43 +IOCTL(FIOCLEX, IOC_, TYPE_NULL)
44 +IOCTL(FIONCLEX, IOC_, TYPE_NULL)
45 +IOCTL(FIONREAD, IOC_R, MK_PTR(TYPE_INT))
46 +IOCTL(FIONBIO, IOC_W, MK_PTR(TYPE_INT))
47 +IOCTL(FIOASYNC, IOC_W, MK_PTR(TYPE_INT))
48 +IOCTL(FIOSETOWN, IOC_W, MK_PTR(TYPE_INT))
49 +IOCTL(FIOGETOWN, IOC_R, MK_PTR(TYPE_INT))
50 +IOCTL(FIODTYPE, IOC_R, MK_PTR(TYPE_INT))
51 +IOCTL(FIOGETLBA, IOC_R, MK_PTR(TYPE_INT))
52 +IOCTL(FIODGNAME, IOC_W, MK_PTR(MK_STRUCT(STRUCT_fiodgname_arg)))
53 +IOCTL(FIONWRITE, IOC_R, MK_PTR(TYPE_INT))
54 +IOCTL(FIONSPACE, IOC_R, MK_PTR(TYPE_INT))
55 +IOCTL(FIOSEEKDATA, IOC_RW, MK_PTR(TYPE_ULONG))
56 +IOCTL(FIOSEEKHOLE, IOC_RW, MK_PTR(TYPE_ULONG))
57 +
58 +/* crypto/cryptodev.h */
59 +IOCTL_SPECIAL(CIOCGSESSION, IOC_RW, do_ioctl_unsupported, TYPE_INT)
60 +
61 +/* netinet6/in6_var.h */
62 +IOCTL_SPECIAL(SIOCGIFAFLAG_IN6, IOC_RW, do_ioctl_in6_ifreq_sockaddr_int,
63 + MK_PTR(MK_STRUCT(STRUCT_in6_ifreq_int)))
64 +IOCTL_SPECIAL(SIOCGIFALIFETIME_IN6, IOC_RW, do_ioctl_in6_ifreq_sockaddr_int,
65 + MK_PTR(MK_STRUCT(STRUCT_in6_ifreq_int)))
66 +IOCTL(SIOCGIFPSRCADDR_IN6, IOC_RW,
67 + MK_PTR(MK_STRUCT(STRUCT_in6_ifreq_sockaddr_in6)))
68 +IOCTL(SIOCGIFINFO_IN6, IOC_W | IOC_R, MK_PTR(MK_STRUCT(STRUCT_in6_ndireq)))
69 +IOCTL(SIOCGDEFIFACE_IN6, IOC_W | IOC_R, MK_PTR(MK_STRUCT(STRUCT_in6_ndifreq)))
70 +
71 +/* sys/disk.h */
72 +IOCTL(DIOCGSECTORSIZE, IOC_R, MK_PTR(TYPE_INT))
73 +IOCTL(DIOCGMEDIASIZE, IOC_R, MK_PTR(TYPE_LONGLONG))
74 +
75 +/* sys/sockio.h */
76 +IOCTL_SPECIAL(SIOCGIFMAC, IOC_RW, do_ioctl_unsupported,
77 + MK_PTR(MK_STRUCT(STRUCT_ifreq_int)))
78 +
79 +IOCTL(SIOCGIFCONF, IOC_RW, MK_PTR(MK_STRUCT(STRUCT_ifconf)))
80 +
81 +IOCTL(SIOCGIFFLAGS, IOC_W | IOC_R, MK_PTR(MK_STRUCT(STRUCT_ifreq_short)))
82 +IOCTL(SIOCSIFFLAGS, IOC_W, MK_PTR(MK_STRUCT(STRUCT_ifreq_short)))
83 +
84 +IOCTL(SIOCGIFMETRIC, IOC_W | IOC_R, MK_PTR(MK_STRUCT(STRUCT_ifreq_int)))
85 +IOCTL(SIOCSIFMETRIC, IOC_W, MK_PTR(MK_STRUCT(STRUCT_ifreq_int)))
86 +IOCTL(SIOCGIFMTU, IOC_W | IOC_R, MK_PTR(MK_STRUCT(STRUCT_ifreq_int)))
87 +IOCTL(SIOCSIFMTU, IOC_W, MK_PTR(MK_STRUCT(STRUCT_ifreq_int)))
88 +IOCTL(SIOCGIFINDEX, IOC_W | IOC_R, MK_PTR(MK_STRUCT(STRUCT_ifreq_int)))
89 +IOCTL(SIOCGIFFIB, IOC_W | IOC_R, MK_PTR(MK_STRUCT(STRUCT_ifreq_int)))
90 +#ifdef SIOCGTUNFIB
91 +IOCTL(SIOCGTUNFIB, IOC_W | IOC_R, MK_PTR(MK_STRUCT(STRUCT_ifreq_int)))
92 +#endif
93 +
94 +IOCTL(SIOCGIFCAP, IOC_W | IOC_R, MK_PTR(MK_STRUCT(STRUCT_ifreq_cap)))
95 +
96 +IOCTL(SIOCGIFADDR, IOC_W | IOC_R, MK_PTR(MK_STRUCT(STRUCT_ifreq_sockaddr)))
97 +IOCTL(SIOCSIFADDR, IOC_W, MK_PTR(MK_STRUCT(STRUCT_ifreq_sockaddr)))
98 +IOCTL(SIOCGIFBRDADDR, IOC_W | IOC_R, MK_PTR(MK_STRUCT(STRUCT_ifreq_sockaddr)))
99 +IOCTL(SIOCSIFBRDADDR, IOC_W, MK_PTR(MK_STRUCT(STRUCT_ifreq_sockaddr)))
100 +IOCTL(SIOCGIFDSTADDR, IOC_W | IOC_R, MK_PTR(MK_STRUCT(STRUCT_ifreq_sockaddr)))
101 +IOCTL(SIOCSIFDSTADDR, IOC_W, MK_PTR(MK_STRUCT(STRUCT_ifreq_sockaddr)))
102 +IOCTL(SIOCGIFNETMASK, IOC_W | IOC_R, MK_PTR(MK_STRUCT(STRUCT_ifreq_sockaddr)))
103 +IOCTL(SIOCSIFNETMASK, IOC_W, MK_PTR(MK_STRUCT(STRUCT_ifreq_sockaddr)))
104 +IOCTL(SIOCADDMULTI, IOC_W, MK_PTR(MK_STRUCT(STRUCT_ifreq_sockaddr)))
105 +IOCTL(SIOCDELMULTI, IOC_W, MK_PTR(MK_STRUCT(STRUCT_ifreq_sockaddr)))
106 +IOCTL(SIOCGIFPSRCADDR, IOC_W | IOC_R,
107 + MK_PTR(MK_STRUCT(STRUCT_ifreq_sockaddr)))
108 +
109 +IOCTL(SIOCGIFGENERIC, IOC_W | IOC_R, MK_PTR(MK_STRUCT(STRUCT_ifreq_ptr)))
110 +
111 +IOCTL(SIOCGIFDESCR, IOC_W | IOC_R, MK_PTR(MK_STRUCT(STRUCT_ifreq_buf)))
112 +
113 +IOCTL(SIOCGDRVSPEC, IOC_W | IOC_R, MK_PTR(MK_STRUCT(STRUCT_ifdrv)))
114 +
115 +IOCTL(SIOCGIFGROUP, IOC_W | IOC_R, MK_PTR(MK_STRUCT(STRUCT_ifgroupreq_ptr)))
116 +
117 +IOCTL(SIOCGIFMEDIA, IOC_W | IOC_R, MK_PTR(MK_STRUCT(STRUCT_ifmediareq)))
118 +#ifdef SIOCGIFXMEDIA
119 +IOCTL(SIOCGIFXMEDIA, IOC_W | IOC_R, MK_PTR(MK_STRUCT(STRUCT_ifmediareq)))
120 +#endif
121 +
122 +IOCTL(SIOCGIFSTATUS, IOC_W | IOC_R, MK_PTR(MK_STRUCT(STRUCT_ifstat)))
123 +
124 +/* net/if_gre.h */
125 +IOCTL(GREGKEY, IOC_W | IOC_R, MK_PTR(MK_STRUCT(STRUCT_ifreq_ptr)))
126 +#ifdef GREGOPTS
127 +IOCTL(GREGOPTS, IOC_W | IOC_R, MK_PTR(MK_STRUCT(STRUCT_ifreq_ptr)))
128 +#endif
129 +
130 +/* net/if_gif.h */
131 +IOCTL(GIFGOPTS, IOC_W | IOC_R, MK_PTR(MK_STRUCT(STRUCT_ifreq_ptr)))
132 +
133 +/* net/if_pfsync.h */
134 +#ifdef SIOCGETPFSYNC
135 +IOCTL(SIOCGETPFSYNC, IOC_W | IOC_R, MK_PTR(MK_STRUCT(STRUCT_ifreq_ptr)))
136 +#endif
137 +
138 +/* net80211/ieee80211_ioctl.h */
139 +IOCTL(SIOCG80211, IOC_W | IOC_R, MK_PTR(MK_STRUCT(STRUCT_ieee80211req)))
140 +
141 +/* net/if_lagg.h */
142 +IOCTL(SIOCGLAGGPORT, IOC_W | IOC_R,
143 + MK_PTR(MK_STRUCT(STRUCT_lagg_reqport_lacp_opreq)))
144 +IOCTL(SIOCGLAGG, IOC_W | IOC_R,
145 + MK_PTR(MK_STRUCT(STRUCT_lagg_reqall_lacp_opreq)))
146 +IOCTL(SIOCGLAGGFLAGS, IOC_W | IOC_R, MK_PTR(MK_STRUCT(STRUCT_lagg_reqflags)))
147 +#ifdef SIOCGLAGGOPTS
148 +IOCTL(SIOCGLAGGOPTS, IOC_W | IOC_R, MK_PTR(MK_STRUCT(STRUCT_lagg_reqopts)))
149 +#endif