1*a0b1e536Sandvar /* $NetBSD: compat_stub.c,v 1.22 2021/08/09 20:49:10 andvar 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 #endif 37cc17ee2eSpgoyette 38cc17ee2eSpgoyette #include <sys/systm.h> 39cc17ee2eSpgoyette #include <sys/compat_stub.h> 40cc17ee2eSpgoyette 41cc17ee2eSpgoyette #ifdef NTP 42cc17ee2eSpgoyette #include <sys/timespec.h> 43cc17ee2eSpgoyette #include <sys/timex.h> 44cc17ee2eSpgoyette #endif 45cc17ee2eSpgoyette 46cc17ee2eSpgoyette /* 47cc17ee2eSpgoyette * Routine vectors for compat_50___sys_ntp_gettime 48cc17ee2eSpgoyette * 49cc17ee2eSpgoyette * MP-hooks not needed since the NTP code is not modular 50cc17ee2eSpgoyette */ 51cc17ee2eSpgoyette 52cc17ee2eSpgoyette #ifdef NTP 53cc17ee2eSpgoyette void (*vec_ntp_gettime)(struct ntptimeval *) = ntp_gettime; 54cc17ee2eSpgoyette int (*vec_ntp_timestatus)(void) = ntp_timestatus; 55cc17ee2eSpgoyette void (*vec_ntp_adjtime1)(struct timex *) = ntp_adjtime1; 56cc17ee2eSpgoyette #else 57cc17ee2eSpgoyette void (*vec_ntp_gettime)(struct ntptimeval *) = NULL; 58cc17ee2eSpgoyette int (*vec_ntp_timestatus)(void) = NULL; 59cc17ee2eSpgoyette void (*vec_ntp_adjtime1)(struct timex *) = NULL; 60cc17ee2eSpgoyette #endif 61cc17ee2eSpgoyette 62cc17ee2eSpgoyette /* 63cc17ee2eSpgoyette * Routine vectors for sctp (called from within rtsock) 64cc17ee2eSpgoyette * 65cc17ee2eSpgoyette * MP-hooks not needed since the SCTP code is not modular 66c5aed5d2Spgoyette * 67c5aed5d2Spgoyette * For now, just point these at NULL. Network initialization code 68c5aed5d2Spgoyette * in if.c will overwrite these with correct values. This is needed 69c5aed5d2Spgoyette * to enable building of rumpkern library without creating circular 70c5aed5d2Spgoyette * dependency with rumpnet library 71cc17ee2eSpgoyette */ 72cc17ee2eSpgoyette 73cc17ee2eSpgoyette void (*vec_sctp_add_ip_address)(struct ifaddr *) = NULL; 74cc17ee2eSpgoyette void (*vec_sctp_delete_ip_address)(struct ifaddr *) = NULL; 75cc17ee2eSpgoyette 76cc17ee2eSpgoyette 77cc17ee2eSpgoyette /* 78*a0b1e536Sandvar * usb device_info compatibility 79cc17ee2eSpgoyette */ 80314d436dSpgoyette struct usb_subr_fill_30_hook_t usb_subr_fill_30_hook; 81314d436dSpgoyette struct usb_subr_copy_30_hook_t usb_subr_copy_30_hook; 82cc17ee2eSpgoyette 83cc17ee2eSpgoyette /* 84*a0b1e536Sandvar * ccd device compatibility ioctl 85cc17ee2eSpgoyette */ 86cc17ee2eSpgoyette 87cc17ee2eSpgoyette struct ccd_ioctl_60_hook_t ccd_ioctl_60_hook; 88cc17ee2eSpgoyette 89cc17ee2eSpgoyette /* 90*a0b1e536Sandvar * clockctl device compatibility ioctl 91cc17ee2eSpgoyette */ 92cc17ee2eSpgoyette 93cc17ee2eSpgoyette struct clockctl_ioctl_50_hook_t clockctl_ioctl_50_hook; 94cc17ee2eSpgoyette 95cc17ee2eSpgoyette /* 96*a0b1e536Sandvar * if_sppp device compatibility ioctl subroutine 97cc17ee2eSpgoyette */ 98cc17ee2eSpgoyette 99cc17ee2eSpgoyette struct sppp_params_50_hook_t sppp_params_50_hook; 100cc17ee2eSpgoyette 101cc17ee2eSpgoyette /* 102*a0b1e536Sandvar * cryptodev compatibility ioctl 103cc17ee2eSpgoyette */ 104cc17ee2eSpgoyette 105cc17ee2eSpgoyette struct ocryptof_50_hook_t ocryptof_50_hook; 106cc17ee2eSpgoyette 107cc17ee2eSpgoyette /* 108*a0b1e536Sandvar * raidframe compatibility 109cc17ee2eSpgoyette */ 110314d436dSpgoyette struct raidframe_ioctl_50_hook_t raidframe_ioctl_50_hook; 111314d436dSpgoyette struct raidframe_ioctl_80_hook_t raidframe_ioctl_80_hook; 112bb872f68Schristos struct raidframe_netbsd32_ioctl_hook_t raidframe_netbsd32_ioctl_hook; 113cc17ee2eSpgoyette 114cc17ee2eSpgoyette /* 115*a0b1e536Sandvar * puffs compatibility 116cc17ee2eSpgoyette */ 117cc17ee2eSpgoyette 118314d436dSpgoyette struct puffs_out_50_hook_t puffs_out_50_hook; 119314d436dSpgoyette struct puffs_in_50_hook_t puffs_in_50_hook; 120cc17ee2eSpgoyette 121cc17ee2eSpgoyette /* 122*a0b1e536Sandvar * wsevents compatibility 123cc17ee2eSpgoyette */ 124314d436dSpgoyette struct wscons_copyout_events_50_hook_t wscons_copyout_events_50_hook; 125cc17ee2eSpgoyette 126cc17ee2eSpgoyette /* 127*a0b1e536Sandvar * sysmon_power compatibility 128cc17ee2eSpgoyette */ 129cc17ee2eSpgoyette struct compat_sysmon_power_40_hook_t compat_sysmon_power_40_hook; 130cc17ee2eSpgoyette 131cc17ee2eSpgoyette /* 132*a0b1e536Sandvar * compat_bio compatibility 133cc17ee2eSpgoyette */ 134cc17ee2eSpgoyette struct compat_bio_30_hook_t compat_bio_30_hook; 135cc17ee2eSpgoyette 136cc17ee2eSpgoyette /* 137*a0b1e536Sandvar * vnd ioctl compatibility 138cc17ee2eSpgoyette */ 139cc17ee2eSpgoyette struct compat_vndioctl_30_hook_t compat_vndioctl_30_hook; 140cc17ee2eSpgoyette struct compat_vndioctl_50_hook_t compat_vndioctl_50_hook; 141cc17ee2eSpgoyette 142cc17ee2eSpgoyette /* 143*a0b1e536Sandvar * ieee80211 ioctl compatibility 144cc17ee2eSpgoyette */ 145314d436dSpgoyette struct ieee80211_ioctl_20_hook_t ieee80211_ioctl_20_hook; 146cc17ee2eSpgoyette 147cc17ee2eSpgoyette /* 148*a0b1e536Sandvar * if_43 compatibility 149cc17ee2eSpgoyette */ 150314d436dSpgoyette struct if_cvtcmd_43_hook_t if_cvtcmd_43_hook; 151314d436dSpgoyette struct if_ifioctl_43_hook_t if_ifioctl_43_hook; 152cc17ee2eSpgoyette 153cc17ee2eSpgoyette /* 154*a0b1e536Sandvar * if43_cvtcmd_20 compatibility 155cc17ee2eSpgoyette */ 156a0264c55Spgoyette struct if43_cvtcmd_20_hook_t if43_cvtcmd_20_hook; 157cc17ee2eSpgoyette 158cc17ee2eSpgoyette /* 159f2c2830dSchristos * tty 43 ioctl compatibility 160f2c2830dSchristos */ 161314d436dSpgoyette struct tty_ttioctl_43_hook_t tty_ttioctl_43_hook; 162f2c2830dSchristos 163f2c2830dSchristos /* 1648bd61d50Spgoyette * uipc_syscalls_40 compatibility 165cc17ee2eSpgoyette */ 166cc17ee2eSpgoyette struct uipc_syscalls_40_hook_t uipc_syscalls_40_hook; 167cc17ee2eSpgoyette 168cc17ee2eSpgoyette /* 1698bd61d50Spgoyette * uipc_socket_50 compatibility 1708bd61d50Spgoyette */ 1718bd61d50Spgoyette struct uipc_socket_50_setopt1_hook_t uipc_socket_50_setopt1_hook; 1728bd61d50Spgoyette struct uipc_socket_50_getopt1_hook_t uipc_socket_50_getopt1_hook; 1738bd61d50Spgoyette struct uipc_socket_50_sbts_hook_t uipc_socket_50_sbts_hook; 1748bd61d50Spgoyette 1758bd61d50Spgoyette /* 176*a0b1e536Sandvar * uipc_syscalls_50 compatibility 177cc17ee2eSpgoyette */ 178cc17ee2eSpgoyette struct uipc_syscalls_50_hook_t uipc_syscalls_50_hook; 179cc17ee2eSpgoyette 180cc17ee2eSpgoyette /* 181*a0b1e536Sandvar * rtsock 14 compatibility 182cc17ee2eSpgoyette */ 183314d436dSpgoyette struct rtsock_oifmsg_14_hook_t rtsock_oifmsg_14_hook; 184314d436dSpgoyette struct rtsock_iflist_14_hook_t rtsock_iflist_14_hook; 185cc17ee2eSpgoyette 186cc17ee2eSpgoyette /* 187*a0b1e536Sandvar * rtsock 50 compatibility 188cc17ee2eSpgoyette */ 189314d436dSpgoyette struct rtsock_iflist_50_hook_t rtsock_iflist_50_hook; 190314d436dSpgoyette struct rtsock_oifmsg_50_hook_t rtsock_oifmsg_50_hook; 191314d436dSpgoyette struct rtsock_rt_missmsg_50_hook_t rtsock_rt_missmsg_50_hook; 192314d436dSpgoyette struct rtsock_rt_ifmsg_50_hook_t rtsock_rt_ifmsg_50_hook; 193314d436dSpgoyette struct rtsock_rt_ifannouncemsg_50_hook_t rtsock_rt_ifannouncemsg_50_hook; 1948c6002cdSroy struct rtsock_rt_addrmsg_rt_50_hook_t rtsock_rt_addrmsg_rt_50_hook; 195f323200fSroy struct rtsock_rt_addrmsg_src_50_hook_t rtsock_rt_addrmsg_src_50_hook; 1968c6002cdSroy struct rtsock_rt_addrmsg_50_hook_t rtsock_rt_addrmsg_50_hook; 197314d436dSpgoyette struct rtsock_rt_ieee80211msg_50_hook_t rtsock_rt_ieee80211msg_50_hook; 198cc17ee2eSpgoyette 199cc17ee2eSpgoyette /* 200*a0b1e536Sandvar * rtsock 70 compatibility 201cc17ee2eSpgoyette */ 202314d436dSpgoyette struct rtsock_newaddr_70_hook_t rtsock_newaddr_70_hook; 203314d436dSpgoyette struct rtsock_iflist_70_hook_t rtsock_iflist_70_hook; 204cc17ee2eSpgoyette 205cc17ee2eSpgoyette /* 206cc17ee2eSpgoyette * modctl handler for old style OSTAT 207cc17ee2eSpgoyette */ 208cc17ee2eSpgoyette struct compat_modstat_80_hook_t compat_modstat_80_hook; 209cc17ee2eSpgoyette 210cc17ee2eSpgoyette /* 211cc17ee2eSpgoyette * mask for kern_sig_43's killpg (updated by compat_09) 212cc17ee2eSpgoyette */ 213cc17ee2eSpgoyette int kern_sig_43_pgid_mask = ~0; 214cc17ee2eSpgoyette 215cc17ee2eSpgoyette /* 216cc17ee2eSpgoyette * hook for kern_proc_32 217cc17ee2eSpgoyette */ 218314d436dSpgoyette struct kern_proc32_copyin_hook_t kern_proc32_copyin_hook; 219314d436dSpgoyette struct kern_proc32_base_hook_t kern_proc32_base_hook; 220cc17ee2eSpgoyette 221cc17ee2eSpgoyette /* 222cc17ee2eSpgoyette * Hook for sparc fpu code to check if a process is running 223cc17ee2eSpgoyette * under sunos emulation 224cc17ee2eSpgoyette */ 225cc17ee2eSpgoyette struct get_emul_sunos_hook_t get_emul_sunos_hook; 226cc17ee2eSpgoyette 227cc17ee2eSpgoyette /* 228cc17ee2eSpgoyette * Hook for rnd_ioctl_50 callbacks 229cc17ee2eSpgoyette */ 230cc17ee2eSpgoyette struct rnd_ioctl_50_hook_t rnd_ioctl_50_hook; 231314d436dSpgoyette struct rnd_ioctl32_50_hook_t rnd_ioctl32_50_hook; 232cc17ee2eSpgoyette 233cc17ee2eSpgoyette /* 234cc17ee2eSpgoyette * Hooks for compat_60 ttioctl and ptmioctl 235cc17ee2eSpgoyette */ 236314d436dSpgoyette struct tty_ttioctl_60_hook_t tty_ttioctl_60_hook; 237314d436dSpgoyette struct tty_ptmioctl_60_hook_t tty_ptmioctl_60_hook; 238cc17ee2eSpgoyette 239cc17ee2eSpgoyette /* 240cc17ee2eSpgoyette * Hook for compat_10 openat 241cc17ee2eSpgoyette */ 242314d436dSpgoyette struct vfs_openat_10_hook_t vfs_openat_10_hook; 243cc17ee2eSpgoyette 244cc17ee2eSpgoyette /* 245cc17ee2eSpgoyette * Hook for compat_70_unp_addsockcred 246cc17ee2eSpgoyette */ 247314d436dSpgoyette struct uipc_unp_70_hook_t uipc_unp_70_hook; 248cc17ee2eSpgoyette 249cc17ee2eSpgoyette /* 250cc17ee2eSpgoyette * Hook for sysvipc50_sysctl 251cc17ee2eSpgoyette */ 252314d436dSpgoyette struct sysvipc_sysctl_50_hook_t sysvipc_sysctl_50_hook; 253cc17ee2eSpgoyette 254cc17ee2eSpgoyette /* 255*a0b1e536Sandvar * ifmedia_80 compatibility 256ea7b7964Smsaitoh */ 257ea7b7964Smsaitoh struct ifmedia_80_pre_hook_t ifmedia_80_pre_hook; 258ea7b7964Smsaitoh struct ifmedia_80_post_hook_t ifmedia_80_post_hook; 259ea7b7964Smsaitoh 260ea7b7964Smsaitoh /* 261cc17ee2eSpgoyette * Hook for 32-bit machine name 262cc17ee2eSpgoyette * 263cc17ee2eSpgoyette * This probably would be better placed in compat/netbsd32/netbsd32_mod.c 264cc17ee2eSpgoyette * but the consumer code in linux32_exec_elf32.c is sometimes included in 265cc17ee2eSpgoyette * the main kernel, and not in a compat_netbsd32 module. (In particular, 266cc17ee2eSpgoyette * this is true for i386 and sgimips.) 267cc17ee2eSpgoyette */ 268cc17ee2eSpgoyette struct netbsd32_machine32_hook_t netbsd32_machine32_hook; 2696848a6ddSchristos struct netbsd32_reg_validate_hook_t netbsd32_reg_validate_hook; 270743fbdcdSpgoyette 271743fbdcdSpgoyette /* 272743fbdcdSpgoyette * Hook for sendsig_sigcontext_16 273743fbdcdSpgoyette */ 274743fbdcdSpgoyette struct sendsig_sigcontext_16_hook_t sendsig_sigcontext_16_hook; 2757ff0c96aSpgoyette 2767ff0c96aSpgoyette /* 27716e12c90Spgoyette * Hooks for coredumps 2787ff0c96aSpgoyette */ 2797ff0c96aSpgoyette struct coredump_hook_t coredump_hook; 28016e12c90Spgoyette struct coredump_offset_hook_t coredump_offset_hook; 28116e12c90Spgoyette struct coredump_write_hook_t coredump_write_hook; 28216e12c90Spgoyette struct coredump_netbsd_hook_t coredump_netbsd_hook; 2830bf72676Spgoyette struct coredump_netbsd32_hook_t coredump_netbsd32_hook; 2843d0d0adbSchristos struct coredump_elf32_hook_t coredump_elf32_hook; 2853d0d0adbSchristos struct coredump_elf64_hook_t coredump_elf64_hook; 28616e12c90Spgoyette struct uvm_coredump_walkmap_hook_t uvm_coredump_walkmap_hook; 28716e12c90Spgoyette struct uvm_coredump_count_segs_hook_t uvm_coredump_count_segs_hook; 28816e12c90Spgoyette 28916e12c90Spgoyette 290