compat_stub.h revision 1.23
11.23Spgoyette/*	$NetBSD: compat_stub.h,v 1.23 2020/03/08 00:53:13 pgoyette Exp $	*/
21.2Spgoyette
31.2Spgoyette/*-
41.2Spgoyette * Copyright (c) 2018 The NetBSD Foundation, Inc.
51.2Spgoyette * All rights reserved.
61.2Spgoyette *
71.2Spgoyette * This code is derived from software contributed to The NetBSD Foundation
81.2Spgoyette * by Paul Goyette
91.2Spgoyette *
101.2Spgoyette * Redistribution and use in source and binary forms, with or without
111.2Spgoyette * modification, are permitted provided that the following conditions
121.2Spgoyette * are met:
131.2Spgoyette * 1. Redistributions of source code must retain the above copyright
141.2Spgoyette *    notice, this list of conditions and the following disclaimer.
151.2Spgoyette * 2. Redistributions in binary form must reproduce the above copyright
161.2Spgoyette *    notice, this list of conditions and the following disclaimer in the
171.2Spgoyette *    documentation and/or other materials provided with the distribution.
181.2Spgoyette *
191.2Spgoyette * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
201.2Spgoyette * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
211.2Spgoyette * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
221.2Spgoyette * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
231.2Spgoyette * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
241.2Spgoyette * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
251.2Spgoyette * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
261.2Spgoyette * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
271.2Spgoyette * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
281.2Spgoyette * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
291.2Spgoyette * POSSIBILITY OF SUCH DAMAGE.
301.2Spgoyette */
311.2Spgoyette
321.2Spgoyette#ifndef _SYS_COMPAT_STUB_H
331.2Spgoyette#define _SYS_COMPAT_STUB_H
341.2Spgoyette
351.2Spgoyette#include <sys/module_hook.h>
361.2Spgoyette#include <sys/param.h>
371.15Sroy#include <sys/socket.h>
381.20Spgoyette#include <sys/sigtypes.h>
391.2Spgoyette
401.2Spgoyette/*
411.7Spgoyette * NOTE: If you make changes here, please remember to update the
421.7Spgoyette * kernel version number in sys/param.h to ensure that kernel
431.7Spgoyette * and modules stay in sync.
441.7Spgoyette */
451.7Spgoyette
461.7Spgoyette/*
471.2Spgoyette * Routine hooks for compat_50___sys_ntp_gettime
481.2Spgoyette *
491.2Spgoyette * MP-hooks not needed since the NTP code is not modular
501.2Spgoyette */
511.2Spgoyette
521.2Spgoyettestruct ntptimeval;
531.2Spgoyettestruct timex;
541.2Spgoyette
551.2Spgoyetteextern void (*vec_ntp_gettime)(struct ntptimeval *);
561.2Spgoyetteextern int (*vec_ntp_timestatus)(void);
571.2Spgoyetteextern void (*vec_ntp_adjtime1)(struct timex *);
581.2Spgoyette
591.2Spgoyette/*
601.2SpgoyetteMODULE_HOOK(ntp_gettime_hook, int, (struct ntptimeval *));
611.2SpgoyetteMODULE_HOOK(ntp_timestatus_hook, int, (void);
621.2SpgoyetteMODULE_HOOK(ntp_adjtime1_hook, int, (struct timex *));
631.2Spgoyette*/
641.2Spgoyette
651.2Spgoyette/*
661.2Spgoyette * Routine hooks for SCTP code - used by rtsock
671.2Spgoyette *
681.2Spgoyette * MP-hooks not needed since the SCTP code is not modular
691.2Spgoyette */
701.2Spgoyettestruct ifaddr;
711.2Spgoyetteextern void (*vec_sctp_add_ip_address)(struct ifaddr *);
721.2Spgoyetteextern void (*vec_sctp_delete_ip_address)(struct ifaddr *);
731.2Spgoyette
741.2Spgoyette/*
751.2SpgoyetteMODULE_HOOK(sctp_add_ip_address, int, struct ifaddr *);
761.2SpgoyetteMODULE_HOOK(sctp_delete_ip_address, int, struct ifaddr *);
771.2Spgoyette*/
781.2Spgoyette
791.2Spgoyette
801.2Spgoyette/*
811.5Schristos * usb devinfo compatibility
821.2Spgoyette */
831.2Spgoyette
841.2Spgoyettestruct usbd_device;
851.2Spgoyettestruct usb_device_info_old;
861.2Spgoyettestruct usb_event;
871.2Spgoyettestruct usb_event_old;
881.2Spgoyettestruct uio;
891.8SpgoyetteMODULE_HOOK(usb_subr_fill_30_hook, int,
901.2Spgoyette    (struct usbd_device *, struct usb_device_info_old *, int,
911.2Spgoyette      void (*)(struct usbd_device *, char *, size_t, char *, size_t, int, int),
921.2Spgoyette      int (*)(char *, size_t, int)));
931.8SpgoyetteMODULE_HOOK(usb_subr_copy_30_hook, int,
941.2Spgoyette    (struct usb_event *, struct usb_event_old *, struct uio *));
951.2Spgoyette
961.2Spgoyette/*
971.2Spgoyette * Routine vector for dev/ccd ioctl()
981.2Spgoyette */
991.2Spgoyette
1001.2SpgoyetteMODULE_HOOK(ccd_ioctl_60_hook, int, (dev_t, u_long, void *, int, struct lwp *,
1011.2Spgoyette    int (*f)(dev_t, u_long, void *, int, struct lwp *)))
1021.2Spgoyette
1031.2Spgoyette/*
1041.2Spgoyette * Routine vector for dev/clockctl ioctl()
1051.2Spgoyette */
1061.2Spgoyette
1071.2SpgoyetteMODULE_HOOK(clockctl_ioctl_50_hook, int,
1081.2Spgoyette    (dev_t, u_long, void *, int, struct lwp *));
1091.2Spgoyette
1101.2Spgoyette/*
1111.5Schristos * if_sppp device compatibility ioctl subroutine
1121.2Spgoyette */
1131.2Spgoyette
1141.2Spgoyettestruct sppp;
1151.2SpgoyetteMODULE_HOOK(sppp_params_50_hook, int, (struct sppp *, u_long, void *));
1161.2Spgoyette
1171.2Spgoyette/*
1181.5Schristos * cryptodev compatibility ioctl
1191.2Spgoyette */
1201.2Spgoyette
1211.2Spgoyettestruct fcrypt;
1221.2Spgoyettestruct session_op;
1231.2Spgoyettestruct csession;
1241.2Spgoyettestruct crypt_op;
1251.2Spgoyettestruct crypt_n_op;
1261.2Spgoyettestruct kmutex_t;
1271.2SpgoyetteMODULE_HOOK(ocryptof_50_hook, int, (struct file *, u_long, void *));
1281.2Spgoyette
1291.2Spgoyette/*
1301.5Schristos * raidframe compatibility
1311.2Spgoyette */
1321.11Schristosstruct raid_softc;
1331.8SpgoyetteMODULE_HOOK(raidframe_ioctl_50_hook, int,
1341.11Schristos    (struct raid_softc *, u_long, void *));
1351.8SpgoyetteMODULE_HOOK(raidframe_ioctl_80_hook, int,
1361.11Schristos    (struct raid_softc *, u_long, void *));
1371.11SchristosMODULE_HOOK(raidframe_netbsd32_ioctl_hook, int,
1381.11Schristos    (struct raid_softc *, u_long, void *));
1391.2Spgoyette
1401.2Spgoyette/*
1411.5Schristos * puffs compatibility
1421.2Spgoyette */
1431.2Spgoyette
1441.2Spgoyettestruct puffs_req;
1451.8SpgoyetteMODULE_HOOK(puffs_out_50_hook, int,
1461.2Spgoyette    (struct puffs_req *, struct puffs_req **, ssize_t *));	/* outgoing */
1471.8SpgoyetteMODULE_HOOK(puffs_in_50_hook, void,
1481.2Spgoyette    (struct puffs_req *, struct puffs_req *));			/* incoming */
1491.2Spgoyette
1501.2Spgoyette/*
1511.5Schristos * wsevents compatibility
1521.2Spgoyette */
1531.2Spgoyette
1541.2Spgoyettestruct wscons_event;
1551.2Spgoyettestruct uio;
1561.8SpgoyetteMODULE_HOOK(wscons_copyout_events_50_hook, int,
1571.2Spgoyette    (const struct wscons_event *, int, struct uio *));
1581.2Spgoyette
1591.2Spgoyette/*
1601.5Schristos * sysmon_power compatibility
1611.2Spgoyette */
1621.2Spgoyette
1631.2Spgoyettestruct power_event;
1641.2Spgoyettestruct sysmon_pswitch;
1651.2SpgoyetteMODULE_HOOK(compat_sysmon_power_40_hook, void,
1661.2Spgoyette    (struct power_event *, struct sysmon_pswitch *, int));
1671.2Spgoyette
1681.2Spgoyette/*
1691.2Spgoyette * compat_bio indirect function pointer
1701.2Spgoyette */
1711.2Spgoyette
1721.2SpgoyetteMODULE_HOOK(compat_bio_30_hook, int,
1731.2Spgoyette    (void *, u_long, void *, int(*)(void *, u_long, void *)));
1741.2Spgoyette
1751.2Spgoyette/*
1761.5Schristos * vnd_30 ioctl compatibility
1771.2Spgoyette */
1781.2Spgoyettestruct vattr;
1791.2SpgoyetteMODULE_HOOK(compat_vndioctl_30_hook, int, (u_long, struct lwp *, void *, int,
1801.2Spgoyette    struct vattr *, int (*)(struct lwp *, void *, int, struct vattr *)));
1811.2Spgoyette
1821.2Spgoyette/*
1831.5Schristos * vnd_50 ioctl compatibility
1841.2Spgoyette */
1851.2Spgoyettestruct vattr;
1861.2SpgoyetteMODULE_HOOK(compat_vndioctl_50_hook, int, (u_long, struct lwp *, void *, int,
1871.2Spgoyette    struct vattr *, int (*)(struct lwp *, void *, int, struct vattr *)));
1881.2Spgoyette
1891.2Spgoyette/*
1901.5Schristos * ieee80211 ioctl compatibility
1911.2Spgoyette */
1921.4Schristosstruct ieee80211com;
1931.2Spgoyette
1941.8SpgoyetteMODULE_HOOK(ieee80211_ioctl_20_hook, int,
1951.5Schristos    (struct ieee80211com *, u_long, void *));
1961.2Spgoyette
1971.2Spgoyette/*
1981.5Schristos * if_43 compatibility
1991.2Spgoyette */
2001.2Spgoyettestruct socket;
2011.2Spgoyette
2021.8SpgoyetteMODULE_HOOK(if_cvtcmd_43_hook, int, (u_long *, u_long));
2031.8SpgoyetteMODULE_HOOK(if_ifioctl_43_hook, int,
2041.2Spgoyette    (struct socket *, u_long, u_long, void *, struct lwp *));
2051.2Spgoyette
2061.2Spgoyette/*
2071.6Spgoyette * if43_cvtcmd_20 compatibility
2081.2Spgoyette */
2091.6SpgoyetteMODULE_HOOK(if43_cvtcmd_20_hook, int, (u_long));
2101.2Spgoyette
2111.2Spgoyette/*
2121.3Schristos * tty 43 ioctl compatibility
2131.3Schristos */
2141.3Schristosstruct tty;
2151.3Schristos
2161.8SpgoyetteMODULE_HOOK(tty_ttioctl_43_hook, int,
2171.3Schristos    (struct tty *, u_long, void *, int, struct lwp *));
2181.3Schristos
2191.3Schristos/*
2201.5Schristos * uipc_syscalls_40 compatibility
2211.2Spgoyette */
2221.2Spgoyette
2231.2SpgoyetteMODULE_HOOK(uipc_syscalls_40_hook, int, (u_long, void *));
2241.2Spgoyette
2251.2Spgoyette/*
2261.12Spgoyette * uipc_socket_50 compatibility
2271.12Spgoyette */
2281.12Spgoyettestruct sockopt;
2291.12Spgoyettestruct mbuf;
2301.12Spgoyette
2311.12SpgoyetteMODULE_HOOK(uipc_socket_50_setopt1_hook, int,
2321.13Spgoyette    (int, struct socket *, const struct sockopt *));
2331.12SpgoyetteMODULE_HOOK(uipc_socket_50_getopt1_hook, int,
2341.13Spgoyette    (int, struct socket *, struct sockopt *));
2351.19SpgoyetteMODULE_HOOK(uipc_socket_50_sbts_hook, int, (int, struct mbuf ***));
2361.12Spgoyette
2371.12Spgoyette/*
2381.5Schristos * uipc_syscalls_50 compatibility
2391.2Spgoyette */
2401.2Spgoyette
2411.2SpgoyetteMODULE_HOOK(uipc_syscalls_50_hook, int, (struct lwp *, u_long, void *));
2421.2Spgoyette
2431.2Spgoyette/*
2441.5Schristos * rtsock 14 compatibility
2451.2Spgoyette */
2461.2Spgoyettestruct ifnet;
2471.2Spgoyettestruct rt_walkarg;
2481.2Spgoyettestruct rt_addrinfo;
2491.8SpgoyetteMODULE_HOOK(rtsock_oifmsg_14_hook, void, (struct ifnet *));
2501.8SpgoyetteMODULE_HOOK(rtsock_iflist_14_hook, int,
2511.2Spgoyette    (struct ifnet *, struct rt_walkarg *, struct rt_addrinfo *, size_t));
2521.2Spgoyette
2531.2Spgoyette/*
2541.2Spgoyette * Hooks for rtsock_50
2551.2Spgoyette */
2561.2Spgoyette
2571.2Spgoyettestruct rtentry;
2581.2Spgoyettestruct ifaddr;
2591.8SpgoyetteMODULE_HOOK(rtsock_oifmsg_50_hook, void, (struct ifnet *));
2601.8SpgoyetteMODULE_HOOK(rtsock_iflist_50_hook, int,
2611.2Spgoyette    (struct ifnet *, struct rt_walkarg *, struct rt_addrinfo *, size_t));
2621.8SpgoyetteMODULE_HOOK(rtsock_rt_missmsg_50_hook, void,
2631.2Spgoyette    (int, const struct rt_addrinfo *, int, int));
2641.8SpgoyetteMODULE_HOOK(rtsock_rt_ifmsg_50_hook, void, (struct ifnet *));
2651.14SroyMODULE_HOOK(rtsock_rt_addrmsg_rt_50_hook, void,
2661.2Spgoyette    (int, struct ifaddr *, int, struct rtentry *));
2671.15SroyMODULE_HOOK(rtsock_rt_addrmsg_src_50_hook, void,
2681.15Sroy    (int, struct ifaddr *, const struct sockaddr *));
2691.14SroyMODULE_HOOK(rtsock_rt_addrmsg_50_hook, void, (int, struct ifaddr *));
2701.8SpgoyetteMODULE_HOOK(rtsock_rt_ifannouncemsg_50_hook, void, (struct ifnet *, int));
2711.8SpgoyetteMODULE_HOOK(rtsock_rt_ieee80211msg_50_hook, void,
2721.2Spgoyette    (struct ifnet *, int, void *, size_t));
2731.2Spgoyette
2741.2Spgoyette/*
2751.2Spgoyette * Hooks for rtsock_70
2761.2Spgoyette */
2771.2Spgoyettestruct ifaddr;
2781.8SpgoyetteMODULE_HOOK(rtsock_newaddr_70_hook, void, (int, struct ifaddr *));
2791.8SpgoyetteMODULE_HOOK(rtsock_iflist_70_hook, int,
2801.2Spgoyette    (struct rt_walkarg *, struct ifaddr *, struct rt_addrinfo *));
2811.2Spgoyette
2821.2Spgoyette/*
2831.2Spgoyette * modctl handler for old style OSTAT
2841.2Spgoyette */
2851.2Spgoyettestruct iovec;
2861.2SpgoyetteMODULE_HOOK(compat_modstat_80_hook, int, (int, struct iovec *, void *));
2871.2Spgoyette
2881.2Spgoyette/*
2891.2Spgoyette * mask for kern_sig_43's killpg
2901.2Spgoyette */
2911.2Spgoyetteextern int kern_sig_43_pgid_mask;
2921.2Spgoyette
2931.2Spgoyette/*
2941.2Spgoyette * Hooks for kern_proc.c for netbsd32 compat
2951.2Spgoyette */
2961.2Spgoyettestruct ps_strings;
2971.8SpgoyetteMODULE_HOOK(kern_proc32_copyin_hook, int,
2981.2Spgoyette    (struct proc *, struct ps_strings *));
2991.8SpgoyetteMODULE_HOOK(kern_proc32_base_hook, vaddr_t, (char **, size_t));
3001.2Spgoyette
3011.2Spgoyette/*
3021.2Spgoyette * Hook to allow sparc fpu code to see if a process is using sunos
3031.2Spgoyette * emulation, and select proper fup codes
3041.2Spgoyette */
3051.2Spgoyettestruct emul;
3061.2SpgoyetteMODULE_HOOK(get_emul_sunos_hook, int, (const struct emul **));
3071.2Spgoyette
3081.2Spgoyette/*
3091.2Spgoyette * Hooks for rnd_ioctl_50
3101.2Spgoyette */
3111.2SpgoyetteMODULE_HOOK(rnd_ioctl_50_hook, int, (struct file *, u_long, void *));
3121.8SpgoyetteMODULE_HOOK(rnd_ioctl32_50_hook, int, (struct file *, u_long, void *));
3131.2Spgoyette
3141.2Spgoyette/*
3151.2Spgoyette * Hooks for compat_60 ttioctl and ptmioctl
3161.2Spgoyette */
3171.8SpgoyetteMODULE_HOOK(tty_ttioctl_60_hook, int,
3181.3Schristos    (struct tty *, u_long, void *, int, struct lwp *));
3191.8SpgoyetteMODULE_HOOK(tty_ptmioctl_60_hook, int,
3201.2Spgoyette    (dev_t, u_long, void *, int, struct lwp *));
3211.2Spgoyette
3221.2Spgoyette/*
3231.2Spgoyette * Hook for compat_10 openat
3241.2Spgoyette */
3251.2Spgoyettestruct pathbuf;
3261.8SpgoyetteMODULE_HOOK(vfs_openat_10_hook, int, (struct pathbuf **));
3271.2Spgoyette
3281.2Spgoyette/*
3291.2Spgoyette * Hook for compat_70_unp_addsockcred
3301.2Spgoyette */
3311.8SpgoyetteMODULE_HOOK(uipc_unp_70_hook, struct mbuf *,
3321.2Spgoyette    (struct lwp *, struct mbuf *));
3331.2Spgoyette
3341.2Spgoyette/*
3351.2Spgoyette * Hook for sysvipc50 sysctl
3361.2Spgoyette */
3371.2Spgoyette#include <sys/sysctl.h>
3381.8SpgoyetteMODULE_HOOK(sysvipc_sysctl_50_hook, int, (SYSCTLFN_PROTO));
3391.2Spgoyette
3401.16Smsaitoh/*
3411.16Smsaitoh * ifmedia_80 compatibility
3421.16Smsaitoh */
3431.16Smsaitoh
3441.16Smsaitohstruct ifmedia;
3451.16Smsaitohstruct ifreq;
3461.16SmsaitohMODULE_HOOK(ifmedia_80_pre_hook, int, (struct ifreq *, u_long *, bool *));
3471.16SmsaitohMODULE_HOOK(ifmedia_80_post_hook, int, (struct ifreq *, u_long));
3481.16Smsaitoh
3491.2Spgoyette/*
3501.2Spgoyette * Hook for 32-bit machine name
3511.2Spgoyette *
3521.2Spgoyette * This probably would be better placed in compat/netbsd32/netbsd32_mod.c
3531.2Spgoyette * but the consumer code in linux32_exec_elf32.c is sometimes included in
3541.2Spgoyette * the main kernel, and not in a compat_netbsd32 module.  (In particular,
3551.2Spgoyette * this is true for i386 and sgimips.)
3561.2Spgoyette */
3571.18Smrgstruct reg;
3581.2SpgoyetteMODULE_HOOK(netbsd32_machine32_hook, const char *, (void));
3591.17SchristosMODULE_HOOK(netbsd32_reg_validate_hook, int,
3601.17Schristos    (struct lwp *, const struct reg *));
3611.20Spgoyette
3621.20Spgoyette/*
3631.20Spgoyette * Hook for compat_16 sendsig_sigcontext
3641.20Spgoyette */
3651.20Spgoyettestruct ksiginfo;
3661.20SpgoyetteMODULE_HOOK(sendsig_sigcontext_16_hook, void,
3671.20Spgoyette    (const struct ksiginfo *, const sigset_t *));
3681.20Spgoyette
3691.21Spgoyette/*
3701.22Spgoyette * Hooks for coredumps
3711.21Spgoyette */
3721.22Spgoyette
3731.22Spgoyettestruct uvm_coredump_state;
3741.21SpgoyetteMODULE_HOOK(coredump_hook, int, (struct lwp *, const char *));
3751.22SpgoyetteMODULE_HOOK(coredump_offset_hook, off_t, (struct coredump_iostate *));
3761.22SpgoyetteMODULE_HOOK(coredump_write_hook, int,
3771.22Spgoyette    (struct coredump_iostate *, enum uio_seg, const void *, size_t));
3781.22SpgoyetteMODULE_HOOK(coredump_netbsd_hook, int,
3791.22Spgoyette    (struct lwp *, struct coredump_iostate *));
3801.22SpgoyetteMODULE_HOOK(uvm_coredump_walkmap_hook, int,
3811.22Spgoyette    (struct proc *, int (*)(struct uvm_coredump_state *), void *));
3821.22SpgoyetteMODULE_HOOK(uvm_coredump_count_segs_hook, int, (struct proc *));
3831.21Spgoyette
3841.23Spgoyette/*
3851.23Spgoyette * Hook for amd64 handler for oosyscall for COMPAT_NETBSD32 && COMPAT_10)
3861.23Spgoyette */
3871.23Spgoyettestruct proc;
3881.23Spgoyettestruct trapframe;
3891.23SpgoyetteMODULE_HOOK(amd64_oosyscall_hook, int, (struct proc *, struct trapframe *));
3901.23Spgoyette
3911.2Spgoyette#endif	/* _SYS_COMPAT_STUB_H */
392