xref: /netbsd/sys/kern/compat_stub.c (revision a0264c55)
1*a0264c55Spgoyette /* $NetBSD: compat_stub.c,v 1.5 2019/01/29 04:10:10 pgoyette Exp $	*/
2cc17ee2eSpgoyette 
3cc17ee2eSpgoyette /*-
4cc17ee2eSpgoyette  * Copyright (c) 2018 The NetBSD Foundation, Inc.
5cc17ee2eSpgoyette  * All rights reserved.
6cc17ee2eSpgoyette  *
7cc17ee2eSpgoyette  * This code is derived from software contributed to The NetBSD Foundation
8cc17ee2eSpgoyette  * by Paul Goyette
9cc17ee2eSpgoyette  *
10cc17ee2eSpgoyette  * Redistribution and use in source and binary forms, with or without
11cc17ee2eSpgoyette  * modification, are permitted provided that the following conditions
12cc17ee2eSpgoyette  * are met:
13cc17ee2eSpgoyette  * 1. Redistributions of source code must retain the above copyright
14cc17ee2eSpgoyette  *    notice, this list of conditions and the following disclaimer.
15cc17ee2eSpgoyette  * 2. Redistributions in binary form must reproduce the above copyright
16cc17ee2eSpgoyette  *    notice, this list of conditions and the following disclaimer in the
17cc17ee2eSpgoyette  *    documentation and/or other materials provided with the distribution.
18cc17ee2eSpgoyette  *
19cc17ee2eSpgoyette  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20cc17ee2eSpgoyette  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21cc17ee2eSpgoyette  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22cc17ee2eSpgoyette  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23cc17ee2eSpgoyette  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24cc17ee2eSpgoyette  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25cc17ee2eSpgoyette  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26cc17ee2eSpgoyette  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27cc17ee2eSpgoyette  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28cc17ee2eSpgoyette  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29cc17ee2eSpgoyette  * POSSIBILITY OF SUCH DAMAGE.
30cc17ee2eSpgoyette  */
31cc17ee2eSpgoyette 
32cc17ee2eSpgoyette #include <sys/cdefs.h>
33cc17ee2eSpgoyette 
34cc17ee2eSpgoyette #ifdef _KERNEL_OPT
35cc17ee2eSpgoyette #include "opt_ntp.h"
36cc17ee2eSpgoyette #include "opt_sctp.h"
37cc17ee2eSpgoyette #endif
38cc17ee2eSpgoyette 
39cc17ee2eSpgoyette #include <sys/systm.h>
40cc17ee2eSpgoyette #include <sys/compat_stub.h>
41cc17ee2eSpgoyette 
42cc17ee2eSpgoyette #ifdef NTP
43cc17ee2eSpgoyette #include <sys/timespec.h>
44cc17ee2eSpgoyette #include <sys/timex.h>
45cc17ee2eSpgoyette #endif
46cc17ee2eSpgoyette 
47cc17ee2eSpgoyette #ifdef SCTP
48cc17ee2eSpgoyette #include <netinet/sctp_asconf.h>
49cc17ee2eSpgoyette #endif
50cc17ee2eSpgoyette 
51cc17ee2eSpgoyette /*
52cc17ee2eSpgoyette  * Routine vectors for compat_50___sys_ntp_gettime
53cc17ee2eSpgoyette  *
54cc17ee2eSpgoyette  * MP-hooks not needed since the NTP code is not modular
55cc17ee2eSpgoyette  */
56cc17ee2eSpgoyette 
57cc17ee2eSpgoyette #ifdef NTP
58cc17ee2eSpgoyette void (*vec_ntp_gettime)(struct ntptimeval *) = ntp_gettime;
59cc17ee2eSpgoyette int (*vec_ntp_timestatus)(void) = ntp_timestatus;
60cc17ee2eSpgoyette void (*vec_ntp_adjtime1)(struct timex *) = ntp_adjtime1;
61cc17ee2eSpgoyette #else
62cc17ee2eSpgoyette void (*vec_ntp_gettime)(struct ntptimeval *) = NULL;
63cc17ee2eSpgoyette int (*vec_ntp_timestatus)(void) = NULL;
64cc17ee2eSpgoyette void (*vec_ntp_adjtime1)(struct timex *) = NULL;
65cc17ee2eSpgoyette #endif
66cc17ee2eSpgoyette 
67cc17ee2eSpgoyette /*
68cc17ee2eSpgoyette  * Routine vectors for sctp (called from within rtsock)
69cc17ee2eSpgoyette  *
70cc17ee2eSpgoyette  * MP-hooks not needed since the SCTP code is not modular
71cc17ee2eSpgoyette  */
72cc17ee2eSpgoyette 
73cc17ee2eSpgoyette #ifdef SCTP
74cc17ee2eSpgoyette void (*vec_sctp_add_ip_address)(struct ifaddr *) = sctp_add_ip_address;
75cc17ee2eSpgoyette void (*vec_sctp_delete_ip_address)(struct ifaddr *) = sctp_delete_ip_address;
76cc17ee2eSpgoyette #else
77cc17ee2eSpgoyette void (*vec_sctp_add_ip_address)(struct ifaddr *) = NULL;
78cc17ee2eSpgoyette void (*vec_sctp_delete_ip_address)(struct ifaddr *) = NULL;
79cc17ee2eSpgoyette #endif
80cc17ee2eSpgoyette 
81cc17ee2eSpgoyette 
82cc17ee2eSpgoyette /*
83cc17ee2eSpgoyette  * usb device_info compatability
84cc17ee2eSpgoyette  */
85cc17ee2eSpgoyette struct usb_subr_30_fill_hook_t usb_subr_30_fill_hook;
86cc17ee2eSpgoyette struct usb_subr_30_copy_hook_t usb_subr_30_copy_hook;
87cc17ee2eSpgoyette 
88cc17ee2eSpgoyette /*
89cc17ee2eSpgoyette  * ccd device compatability ioctl
90cc17ee2eSpgoyette  */
91cc17ee2eSpgoyette 
92cc17ee2eSpgoyette struct ccd_ioctl_60_hook_t ccd_ioctl_60_hook;
93cc17ee2eSpgoyette 
94cc17ee2eSpgoyette /*
95cc17ee2eSpgoyette  * clockctl device compatability ioctl
96cc17ee2eSpgoyette  */
97cc17ee2eSpgoyette 
98cc17ee2eSpgoyette struct clockctl_ioctl_50_hook_t clockctl_ioctl_50_hook;
99cc17ee2eSpgoyette 
100cc17ee2eSpgoyette /*
101cc17ee2eSpgoyette  * if_sppp device compatability ioctl subroutine
102cc17ee2eSpgoyette  */
103cc17ee2eSpgoyette 
104cc17ee2eSpgoyette struct sppp_params_50_hook_t sppp_params_50_hook;
105cc17ee2eSpgoyette 
106cc17ee2eSpgoyette /*
107cc17ee2eSpgoyette  * cryptodev compatability ioctl
108cc17ee2eSpgoyette  */
109cc17ee2eSpgoyette 
110cc17ee2eSpgoyette struct ocryptof_50_hook_t ocryptof_50_hook;
111cc17ee2eSpgoyette 
112cc17ee2eSpgoyette /*
113cc17ee2eSpgoyette  * raidframe compatability
114cc17ee2eSpgoyette  */
115cc17ee2eSpgoyette struct raidframe50_ioctl_hook_t raidframe50_ioctl_hook;
116cc17ee2eSpgoyette struct raidframe80_ioctl_hook_t raidframe80_ioctl_hook;
117cc17ee2eSpgoyette 
118cc17ee2eSpgoyette /*
119cc17ee2eSpgoyette  * puffs compatability
120cc17ee2eSpgoyette  */
121cc17ee2eSpgoyette 
122cc17ee2eSpgoyette struct puffs_50_out_hook_t puffs_50_out_hook;
123cc17ee2eSpgoyette struct puffs_50_in_hook_t puffs_50_in_hook;
124cc17ee2eSpgoyette 
125cc17ee2eSpgoyette /* XXX
126cc17ee2eSpgoyette int (*puffs50_compat_outgoing)(struct puffs_req *, struct puffs_req **,
127cc17ee2eSpgoyette     ssize_t *) = (void *)enosys;
128cc17ee2eSpgoyette void (*puffs50_compat_incoming)(struct puffs_req *, struct puffs_req *) =
129cc17ee2eSpgoyette     (void *)voidop;
130cc17ee2eSpgoyette    XXX */
131cc17ee2eSpgoyette 
132cc17ee2eSpgoyette /*
133cc17ee2eSpgoyette  * wsevents compatability
134cc17ee2eSpgoyette  */
135cc17ee2eSpgoyette struct wsevent_50_copyout_events_hook_t wsevent_50_copyout_events_hook;
136cc17ee2eSpgoyette 
137cc17ee2eSpgoyette /*
138cc17ee2eSpgoyette  * sysmon_power compatability
139cc17ee2eSpgoyette  */
140cc17ee2eSpgoyette struct compat_sysmon_power_40_hook_t compat_sysmon_power_40_hook;
141cc17ee2eSpgoyette 
142cc17ee2eSpgoyette /*
143cc17ee2eSpgoyette  * compat_bio compatability
144cc17ee2eSpgoyette  */
145cc17ee2eSpgoyette struct compat_bio_30_hook_t compat_bio_30_hook;
146cc17ee2eSpgoyette 
147cc17ee2eSpgoyette /*
148cc17ee2eSpgoyette  * vnd ioctl compatability
149cc17ee2eSpgoyette  */
150cc17ee2eSpgoyette struct compat_vndioctl_30_hook_t compat_vndioctl_30_hook;
151cc17ee2eSpgoyette struct compat_vndioctl_50_hook_t compat_vndioctl_50_hook;
152cc17ee2eSpgoyette 
153cc17ee2eSpgoyette /*
154cc17ee2eSpgoyette  * ieee80211 ioctl compatability
155cc17ee2eSpgoyette  */
1568fac6bebSchristos struct ieee80211_20_ioctl_hook_t ieee80211_20_ioctl_hook;
157cc17ee2eSpgoyette 
158cc17ee2eSpgoyette /*
159cc17ee2eSpgoyette  * if_43 compatability
160cc17ee2eSpgoyette  */
161cc17ee2eSpgoyette struct if_43_cvtcmd_hook_t if_43_cvtcmd_hook;
162cc17ee2eSpgoyette struct if_43_ifioctl_hook_t if_43_ifioctl_hook;
163cc17ee2eSpgoyette 
164cc17ee2eSpgoyette /*
165*a0264c55Spgoyette  * if43_cvtcmd_20 compatability
166cc17ee2eSpgoyette  */
167*a0264c55Spgoyette struct if43_cvtcmd_20_hook_t if43_cvtcmd_20_hook;
168cc17ee2eSpgoyette 
169cc17ee2eSpgoyette /*
170f2c2830dSchristos  * tty 43 ioctl compatibility
171f2c2830dSchristos  */
172f2c2830dSchristos struct compat_43_ttioctl_hook_t compat_43_ttioctl_hook;
173f2c2830dSchristos 
174f2c2830dSchristos /*
175f2c2830dSchristos  * uipc_syscalls_40 compatability
176cc17ee2eSpgoyette  */
177cc17ee2eSpgoyette struct uipc_syscalls_40_hook_t uipc_syscalls_40_hook;
178cc17ee2eSpgoyette 
179cc17ee2eSpgoyette /*
180f2c2830dSchristos  * uipc_syscalls_50 compatability
181cc17ee2eSpgoyette  */
182cc17ee2eSpgoyette struct uipc_syscalls_50_hook_t uipc_syscalls_50_hook;
183cc17ee2eSpgoyette 
184cc17ee2eSpgoyette /*
185cc17ee2eSpgoyette  * rtsock 14 compatability
186cc17ee2eSpgoyette  */
187cc17ee2eSpgoyette struct rtsock_14_oifmsg_hook_t rtsock_14_oifmsg_hook;
188cc17ee2eSpgoyette struct rtsock_14_iflist_hook_t rtsock_14_iflist_hook;
189cc17ee2eSpgoyette 
190cc17ee2eSpgoyette /*
191cc17ee2eSpgoyette  * rtsock 50 compatability
192cc17ee2eSpgoyette  */
193cc17ee2eSpgoyette struct rtsock_50_iflist_hook_t rtsock_50_iflist_hook;
194cc17ee2eSpgoyette struct rtsock_50_oifmsg_hook_t rtsock_50_oifmsg_hook;
195cc17ee2eSpgoyette struct rtsock_50_rt_missmsg_hook_t rtsock_50_rt_missmsg_hook;
196cc17ee2eSpgoyette struct rtsock_50_rt_ifmsg_hook_t rtsock_50_rt_ifmsg_hook;
197cc17ee2eSpgoyette struct rtsock_50_rt_ifannouncemsg_hook_t rtsock_50_rt_ifannouncemsg_hook;
198cc17ee2eSpgoyette struct rtsock_50_rt_newaddrmsg_hook_t rtsock_50_rt_newaddrmsg_hook;
199cc17ee2eSpgoyette struct rtsock_50_rt_ieee80211msg_hook_t rtsock_50_rt_ieee80211msg_hook;
200cc17ee2eSpgoyette 
201cc17ee2eSpgoyette /*
202cc17ee2eSpgoyette  * rtsock 70 compatability
203cc17ee2eSpgoyette  */
204cc17ee2eSpgoyette struct rtsock_70_newaddr_hook_t rtsock_70_newaddr_hook;
205cc17ee2eSpgoyette struct rtsock_70_iflist_hook_t rtsock_70_iflist_hook;
206cc17ee2eSpgoyette 
207cc17ee2eSpgoyette /*
208cc17ee2eSpgoyette  * modctl handler for old style OSTAT
209cc17ee2eSpgoyette  */
210cc17ee2eSpgoyette struct compat_modstat_80_hook_t compat_modstat_80_hook;
211cc17ee2eSpgoyette 
212cc17ee2eSpgoyette /*
213cc17ee2eSpgoyette  * mask for kern_sig_43's killpg (updated by compat_09)
214cc17ee2eSpgoyette  */
215cc17ee2eSpgoyette int kern_sig_43_pgid_mask = ~0;
216cc17ee2eSpgoyette 
217cc17ee2eSpgoyette /*
218cc17ee2eSpgoyette  * hook for kern_proc_32
219cc17ee2eSpgoyette  */
220cc17ee2eSpgoyette struct kern_proc_32_copyin_hook_t kern_proc_32_copyin_hook;
221cc17ee2eSpgoyette struct kern_proc_32_base_hook_t kern_proc_32_base_hook;
222cc17ee2eSpgoyette 
223cc17ee2eSpgoyette /*
224cc17ee2eSpgoyette  * Hook for sparc fpu code to check if a process is running
225cc17ee2eSpgoyette  * under sunos emulation
226cc17ee2eSpgoyette  */
227cc17ee2eSpgoyette struct get_emul_sunos_hook_t get_emul_sunos_hook;
228cc17ee2eSpgoyette 
229cc17ee2eSpgoyette /*
230cc17ee2eSpgoyette  * Hook for rnd_ioctl_50 callbacks
231cc17ee2eSpgoyette  */
232cc17ee2eSpgoyette struct rnd_ioctl_50_hook_t rnd_ioctl_50_hook;
233cc17ee2eSpgoyette struct rnd_ioctl_50_32_hook_t rnd_ioctl_50_32_hook;
234cc17ee2eSpgoyette 
235cc17ee2eSpgoyette /*
236cc17ee2eSpgoyette  * Hooks for compat_60 ttioctl and ptmioctl
237cc17ee2eSpgoyette  */
238cc17ee2eSpgoyette struct compat_60_ttioctl_hook_t compat_60_ttioctl_hook;
239cc17ee2eSpgoyette struct compat_60_ptmioctl_hook_t compat_60_ptmioctl_hook;
240cc17ee2eSpgoyette 
241cc17ee2eSpgoyette /*
242cc17ee2eSpgoyette  * Hook for compat_10 openat
243cc17ee2eSpgoyette  */
244cc17ee2eSpgoyette struct compat_10_openat_hook_t compat_10_openat_hook;
245cc17ee2eSpgoyette 
246cc17ee2eSpgoyette /*
247cc17ee2eSpgoyette  * Hook for compat_70_unp_addsockcred
248cc17ee2eSpgoyette  */
249cc17ee2eSpgoyette struct compat_70_unp_hook_t compat_70_unp_hook;
250cc17ee2eSpgoyette 
251cc17ee2eSpgoyette /*
252cc17ee2eSpgoyette  * Hook for sysvipc50_sysctl
253cc17ee2eSpgoyette  */
254cc17ee2eSpgoyette struct sysvipc50_sysctl_hook_t sysvipc50_sysctl_hook;
255cc17ee2eSpgoyette 
256cc17ee2eSpgoyette /*
257cc17ee2eSpgoyette  * Hook for 32-bit machine name
258cc17ee2eSpgoyette  *
259cc17ee2eSpgoyette  * This probably would be better placed in compat/netbsd32/netbsd32_mod.c
260cc17ee2eSpgoyette  * but the consumer code in linux32_exec_elf32.c is sometimes included in
261cc17ee2eSpgoyette  * the main kernel, and not in a compat_netbsd32 module.  (In particular,
262cc17ee2eSpgoyette  * this is true for i386 and sgimips.)
263cc17ee2eSpgoyette  */
264cc17ee2eSpgoyette struct netbsd32_machine32_hook_t netbsd32_machine32_hook;
265