compat_stub.h revision 1.3
11.3Schristos/* $NetBSD: compat_stub.h,v 1.3 2019/01/28 15:46:49 christos 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.2Spgoyette 381.2Spgoyette/* 391.2Spgoyette * Routine hooks for compat_50___sys_ntp_gettime 401.2Spgoyette * 411.2Spgoyette * MP-hooks not needed since the NTP code is not modular 421.2Spgoyette */ 431.2Spgoyette 441.2Spgoyettestruct ntptimeval; 451.2Spgoyettestruct timex; 461.2Spgoyette 471.2Spgoyetteextern void (*vec_ntp_gettime)(struct ntptimeval *); 481.2Spgoyetteextern int (*vec_ntp_timestatus)(void); 491.2Spgoyetteextern void (*vec_ntp_adjtime1)(struct timex *); 501.2Spgoyette 511.2Spgoyette/* 521.2SpgoyetteMODULE_HOOK(ntp_gettime_hook, int, (struct ntptimeval *)); 531.2SpgoyetteMODULE_HOOK(ntp_timestatus_hook, int, (void); 541.2SpgoyetteMODULE_HOOK(ntp_adjtime1_hook, int, (struct timex *)); 551.2Spgoyette*/ 561.2Spgoyette 571.2Spgoyette/* 581.2Spgoyette * Routine hooks for SCTP code - used by rtsock 591.2Spgoyette * 601.2Spgoyette * MP-hooks not needed since the SCTP code is not modular 611.2Spgoyette */ 621.2Spgoyettestruct ifaddr; 631.2Spgoyetteextern void (*vec_sctp_add_ip_address)(struct ifaddr *); 641.2Spgoyetteextern void (*vec_sctp_delete_ip_address)(struct ifaddr *); 651.2Spgoyette 661.2Spgoyette/* 671.2SpgoyetteMODULE_HOOK(sctp_add_ip_address, int, struct ifaddr *); 681.2SpgoyetteMODULE_HOOK(sctp_delete_ip_address, int, struct ifaddr *); 691.2Spgoyette*/ 701.2Spgoyette 711.2Spgoyette 721.2Spgoyette/* 731.2Spgoyette * usb devinfo compatability 741.2Spgoyette */ 751.2Spgoyette 761.2Spgoyettestruct usbd_device; 771.2Spgoyettestruct usb_device_info_old; 781.2Spgoyettestruct usb_event; 791.2Spgoyettestruct usb_event_old; 801.2Spgoyettestruct uio; 811.2SpgoyetteMODULE_HOOK(usb_subr_30_fill_hook, int, 821.2Spgoyette (struct usbd_device *, struct usb_device_info_old *, int, 831.2Spgoyette void (*)(struct usbd_device *, char *, size_t, char *, size_t, int, int), 841.2Spgoyette int (*)(char *, size_t, int))); 851.2SpgoyetteMODULE_HOOK(usb_subr_30_copy_hook, int, 861.2Spgoyette (struct usb_event *, struct usb_event_old *, struct uio *)); 871.2Spgoyette 881.2Spgoyette/* 891.2Spgoyette * Routine vector for dev/ccd ioctl() 901.2Spgoyette */ 911.2Spgoyette 921.2SpgoyetteMODULE_HOOK(ccd_ioctl_60_hook, int, (dev_t, u_long, void *, int, struct lwp *, 931.2Spgoyette int (*f)(dev_t, u_long, void *, int, struct lwp *))) 941.2Spgoyette 951.2Spgoyette/* 961.2Spgoyette * Routine vector for dev/clockctl ioctl() 971.2Spgoyette */ 981.2Spgoyette 991.2SpgoyetteMODULE_HOOK(clockctl_ioctl_50_hook, int, 1001.2Spgoyette (dev_t, u_long, void *, int, struct lwp *)); 1011.2Spgoyette 1021.2Spgoyette/* 1031.2Spgoyette * if_sppp device compatability ioctl subroutine 1041.2Spgoyette */ 1051.2Spgoyette 1061.2Spgoyettestruct sppp; 1071.2SpgoyetteMODULE_HOOK(sppp_params_50_hook, int, (struct sppp *, u_long, void *)); 1081.2Spgoyette 1091.2Spgoyette/* 1101.2Spgoyette * cryptodev compatability ioctl 1111.2Spgoyette */ 1121.2Spgoyette 1131.2Spgoyettestruct fcrypt; 1141.2Spgoyettestruct session_op; 1151.2Spgoyettestruct csession; 1161.2Spgoyettestruct crypt_op; 1171.2Spgoyettestruct crypt_n_op; 1181.2Spgoyettestruct kmutex_t; 1191.2SpgoyetteMODULE_HOOK(ocryptof_50_hook, int, (struct file *, u_long, void *)); 1201.2Spgoyette 1211.2Spgoyette/* 1221.2Spgoyette * raidframe compatability 1231.2Spgoyette */ 1241.2Spgoyette 1251.2Spgoyettestruct RF_Config_s; 1261.2Spgoyettestruct RF_Raid_s; 1271.2SpgoyetteMODULE_HOOK(raidframe50_ioctl_hook, int, 1281.2Spgoyette (int, int, struct RF_Raid_s *, int, void *, struct RF_Config_s **)); 1291.2SpgoyetteMODULE_HOOK(raidframe80_ioctl_hook, int, 1301.2Spgoyette (int, int, struct RF_Raid_s *, int, void *, struct RF_Config_s **)); 1311.2Spgoyette 1321.2Spgoyette/* 1331.2Spgoyette * puffs compatability 1341.2Spgoyette */ 1351.2Spgoyette 1361.2Spgoyettestruct puffs_req; 1371.2SpgoyetteMODULE_HOOK(puffs_50_out_hook, int, 1381.2Spgoyette (struct puffs_req *, struct puffs_req **, ssize_t *)); /* outgoing */ 1391.2SpgoyetteMODULE_HOOK(puffs_50_in_hook, void, 1401.2Spgoyette (struct puffs_req *, struct puffs_req *)); /* incoming */ 1411.2Spgoyette 1421.2Spgoyette/* 1431.2Spgoyette * wsevents compatability 1441.2Spgoyette */ 1451.2Spgoyette 1461.2Spgoyettestruct wscons_event; 1471.2Spgoyettestruct uio; 1481.2SpgoyetteMODULE_HOOK(wsevent_50_copyout_events_hook, int, 1491.2Spgoyette (const struct wscons_event *, int, struct uio *)); 1501.2Spgoyette 1511.2Spgoyette/* 1521.2Spgoyette * sysmon_power compatability 1531.2Spgoyette */ 1541.2Spgoyette 1551.2Spgoyettestruct power_event; 1561.2Spgoyettestruct sysmon_pswitch; 1571.2SpgoyetteMODULE_HOOK(compat_sysmon_power_40_hook, void, 1581.2Spgoyette (struct power_event *, struct sysmon_pswitch *, int)); 1591.2Spgoyette 1601.2Spgoyette/* 1611.2Spgoyette * compat_bio indirect function pointer 1621.2Spgoyette */ 1631.2Spgoyette 1641.2SpgoyetteMODULE_HOOK(compat_bio_30_hook, int, 1651.2Spgoyette (void *, u_long, void *, int(*)(void *, u_long, void *))); 1661.2Spgoyette 1671.2Spgoyette/* 1681.2Spgoyette * vnd_30 ioctl compatability 1691.2Spgoyette */ 1701.2Spgoyettestruct vattr; 1711.2SpgoyetteMODULE_HOOK(compat_vndioctl_30_hook, int, (u_long, struct lwp *, void *, int, 1721.2Spgoyette struct vattr *, int (*)(struct lwp *, void *, int, struct vattr *))); 1731.2Spgoyette 1741.2Spgoyette/* 1751.2Spgoyette * vnd_50 ioctl compatability 1761.2Spgoyette */ 1771.2Spgoyettestruct vattr; 1781.2SpgoyetteMODULE_HOOK(compat_vndioctl_50_hook, int, (u_long, struct lwp *, void *, int, 1791.2Spgoyette struct vattr *, int (*)(struct lwp *, void *, int, struct vattr *))); 1801.2Spgoyette 1811.2Spgoyette/* 1821.2Spgoyette * ieee80211 ioctl compatability 1831.2Spgoyette */ 1841.2Spgoyettestruct ieee80211_ostats; 1851.2Spgoyettestruct ieee80211_stats; 1861.2Spgoyette 1871.2SpgoyetteMODULE_HOOK(ieee80211_ostats_hook, int, 1881.2Spgoyette (struct ieee80211_ostats *, struct ieee80211_stats *)); 1891.2Spgoyette 1901.2Spgoyette/* 1911.2Spgoyette * if_43 compatability 1921.2Spgoyette */ 1931.2Spgoyettestruct socket; 1941.2Spgoyette 1951.2SpgoyetteMODULE_HOOK(if_43_cvtcmd_hook, int, (u_long *, u_long)); 1961.2SpgoyetteMODULE_HOOK(if_43_ifioctl_hook, int, 1971.2Spgoyette (struct socket *, u_long, u_long, void *, struct lwp *)); 1981.2Spgoyette 1991.2Spgoyette/* 2001.2Spgoyette * if43_20 compatability 2011.2Spgoyette */ 2021.2SpgoyetteMODULE_HOOK(if43_20_hook, int, (u_long)); 2031.2Spgoyette 2041.2Spgoyette/* 2051.3Schristos * tty 43 ioctl compatibility 2061.3Schristos */ 2071.3Schristosstruct tty; 2081.3Schristos 2091.3SchristosMODULE_HOOK(compat_43_ttioctl_hook, int, 2101.3Schristos (struct tty *, u_long, void *, int, struct lwp *)); 2111.3Schristos 2121.3Schristos/* 2131.2Spgoyette * uipc_syscalls_40 compatability 2141.2Spgoyette */ 2151.2Spgoyette 2161.2SpgoyetteMODULE_HOOK(uipc_syscalls_40_hook, int, (u_long, void *)); 2171.2Spgoyette 2181.2Spgoyette/* 2191.2Spgoyette * uipc_syscalls_50 compatability 2201.2Spgoyette */ 2211.2Spgoyette 2221.2SpgoyetteMODULE_HOOK(uipc_syscalls_50_hook, int, (struct lwp *, u_long, void *)); 2231.2Spgoyette 2241.2Spgoyette/* 2251.2Spgoyette * rtsock 14 compatability 2261.2Spgoyette */ 2271.2Spgoyettestruct ifnet; 2281.2Spgoyettestruct rt_walkarg; 2291.2Spgoyettestruct rt_addrinfo; 2301.2SpgoyetteMODULE_HOOK(rtsock_14_oifmsg_hook, void, (struct ifnet *)); 2311.2SpgoyetteMODULE_HOOK(rtsock_14_iflist_hook, int, 2321.2Spgoyette (struct ifnet *, struct rt_walkarg *, struct rt_addrinfo *, size_t)); 2331.2Spgoyette 2341.2Spgoyette/* 2351.2Spgoyette * Hooks for rtsock_50 2361.2Spgoyette */ 2371.2Spgoyette 2381.2Spgoyettestruct rtentry; 2391.2Spgoyettestruct ifaddr; 2401.2SpgoyetteMODULE_HOOK(rtsock_50_oifmsg_hook, void, (struct ifnet *)); 2411.2SpgoyetteMODULE_HOOK(rtsock_50_iflist_hook, int, 2421.2Spgoyette (struct ifnet *, struct rt_walkarg *, struct rt_addrinfo *, size_t)); 2431.2SpgoyetteMODULE_HOOK(rtsock_50_rt_missmsg_hook, void, 2441.2Spgoyette (int, const struct rt_addrinfo *, int, int)); 2451.2SpgoyetteMODULE_HOOK(rtsock_50_rt_ifmsg_hook, void, (struct ifnet *)); 2461.2SpgoyetteMODULE_HOOK(rtsock_50_rt_newaddrmsg_hook, void, 2471.2Spgoyette (int, struct ifaddr *, int, struct rtentry *)); 2481.2SpgoyetteMODULE_HOOK(rtsock_50_rt_ifannouncemsg_hook, void, (struct ifnet *, int)); 2491.2SpgoyetteMODULE_HOOK(rtsock_50_rt_ieee80211msg_hook, void, 2501.2Spgoyette (struct ifnet *, int, void *, size_t)); 2511.2Spgoyette 2521.2Spgoyette/* 2531.2Spgoyette * Hooks for rtsock_70 2541.2Spgoyette */ 2551.2Spgoyettestruct ifaddr; 2561.2SpgoyetteMODULE_HOOK(rtsock_70_newaddr_hook, void, (int, struct ifaddr *)); 2571.2SpgoyetteMODULE_HOOK(rtsock_70_iflist_hook, int, 2581.2Spgoyette (struct rt_walkarg *, struct ifaddr *, struct rt_addrinfo *)); 2591.2Spgoyette 2601.2Spgoyette/* 2611.2Spgoyette * modctl handler for old style OSTAT 2621.2Spgoyette */ 2631.2Spgoyettestruct iovec; 2641.2SpgoyetteMODULE_HOOK(compat_modstat_80_hook, int, (int, struct iovec *, void *)); 2651.2Spgoyette 2661.2Spgoyette/* 2671.2Spgoyette * mask for kern_sig_43's killpg 2681.2Spgoyette */ 2691.2Spgoyetteextern int kern_sig_43_pgid_mask; 2701.2Spgoyette 2711.2Spgoyette/* 2721.2Spgoyette * Hooks for kern_proc.c for netbsd32 compat 2731.2Spgoyette */ 2741.2Spgoyettestruct ps_strings; 2751.2SpgoyetteMODULE_HOOK(kern_proc_32_copyin_hook, int, 2761.2Spgoyette (struct proc *, struct ps_strings *)); 2771.2SpgoyetteMODULE_HOOK(kern_proc_32_base_hook, vaddr_t, (char **, size_t)); 2781.2Spgoyette 2791.2Spgoyette/* 2801.2Spgoyette * Hook to allow sparc fpu code to see if a process is using sunos 2811.2Spgoyette * emulation, and select proper fup codes 2821.2Spgoyette */ 2831.2Spgoyettestruct emul; 2841.2SpgoyetteMODULE_HOOK(get_emul_sunos_hook, int, (const struct emul **)); 2851.2Spgoyette 2861.2Spgoyette/* 2871.2Spgoyette * Hooks for rnd_ioctl_50 2881.2Spgoyette */ 2891.2SpgoyetteMODULE_HOOK(rnd_ioctl_50_hook, int, (struct file *, u_long, void *)); 2901.2SpgoyetteMODULE_HOOK(rnd_ioctl_50_32_hook, int, (struct file *, u_long, void *)); 2911.2Spgoyette 2921.2Spgoyette/* 2931.2Spgoyette * Hooks for compat_60 ttioctl and ptmioctl 2941.2Spgoyette */ 2951.2SpgoyetteMODULE_HOOK(compat_60_ttioctl_hook, int, 2961.3Schristos (struct tty *, u_long, void *, int, struct lwp *)); 2971.2SpgoyetteMODULE_HOOK(compat_60_ptmioctl_hook, int, 2981.2Spgoyette (dev_t, u_long, void *, int, struct lwp *)); 2991.2Spgoyette 3001.2Spgoyette/* 3011.2Spgoyette * Hook for compat_10 openat 3021.2Spgoyette */ 3031.2Spgoyettestruct pathbuf; 3041.2SpgoyetteMODULE_HOOK(compat_10_openat_hook, int, (struct pathbuf **)); 3051.2Spgoyette 3061.2Spgoyette/* 3071.2Spgoyette * Hook for compat_70_unp_addsockcred 3081.2Spgoyette */ 3091.2Spgoyettestruct mbuf; 3101.2SpgoyetteMODULE_HOOK(compat_70_unp_hook, struct mbuf *, 3111.2Spgoyette (struct lwp *, struct mbuf *)); 3121.2Spgoyette 3131.2Spgoyette/* 3141.2Spgoyette * Hook for sysvipc50 sysctl 3151.2Spgoyette */ 3161.2Spgoyette#include <sys/sysctl.h> 3171.2SpgoyetteMODULE_HOOK(sysvipc50_sysctl_hook, int, (SYSCTLFN_PROTO)); 3181.2Spgoyette 3191.2Spgoyette/* 3201.2Spgoyette * Hook for 32-bit machine name 3211.2Spgoyette * 3221.2Spgoyette * This probably would be better placed in compat/netbsd32/netbsd32_mod.c 3231.2Spgoyette * but the consumer code in linux32_exec_elf32.c is sometimes included in 3241.2Spgoyette * the main kernel, and not in a compat_netbsd32 module. (In particular, 3251.2Spgoyette * this is true for i386 and sgimips.) 3261.2Spgoyette */ 3271.2SpgoyetteMODULE_HOOK(netbsd32_machine32_hook, const char *, (void)); 3281.2Spgoyette#endif /* _SYS_COMPAT_STUB_H */ 329