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