compat_stub.h revision 1.5
11.5Schristos/*	$NetBSD: compat_stub.h,v 1.5 2019/01/28 21:16:59 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.5Schristos * usb devinfo compatibility
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.5Schristos * if_sppp device compatibility 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.5Schristos * cryptodev compatibility 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.5Schristos * raidframe compatibility
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.5Schristos * puffs compatibility
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.5Schristos * wsevents compatibility
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.5Schristos * sysmon_power compatibility
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.5Schristos * vnd_30 ioctl compatibility
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.5Schristos * vnd_50 ioctl compatibility
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.5Schristos * ieee80211 ioctl compatibility
1831.2Spgoyette */
1841.4Schristosstruct ieee80211com;
1851.2Spgoyette
1861.4SchristosMODULE_HOOK(ieee80211_20_ioctl_hook, int,
1871.5Schristos    (struct ieee80211com *, u_long, void *));
1881.2Spgoyette
1891.2Spgoyette/*
1901.5Schristos * if_43 compatibility
1911.2Spgoyette */
1921.2Spgoyettestruct socket;
1931.2Spgoyette
1941.2SpgoyetteMODULE_HOOK(if_43_cvtcmd_hook, int, (u_long *, u_long));
1951.2SpgoyetteMODULE_HOOK(if_43_ifioctl_hook, int,
1961.2Spgoyette    (struct socket *, u_long, u_long, void *, struct lwp *));
1971.2Spgoyette
1981.2Spgoyette/*
1991.5Schristos * if43_20 compatibility
2001.2Spgoyette */
2011.2SpgoyetteMODULE_HOOK(if43_20_hook, int, (u_long));
2021.2Spgoyette
2031.2Spgoyette/*
2041.3Schristos * tty 43 ioctl compatibility
2051.3Schristos */
2061.3Schristosstruct tty;
2071.3Schristos
2081.3SchristosMODULE_HOOK(compat_43_ttioctl_hook, int,
2091.3Schristos    (struct tty *, u_long, void *, int, struct lwp *));
2101.3Schristos
2111.3Schristos/*
2121.5Schristos * uipc_syscalls_40 compatibility
2131.2Spgoyette */
2141.2Spgoyette
2151.2SpgoyetteMODULE_HOOK(uipc_syscalls_40_hook, int, (u_long, void *));
2161.2Spgoyette
2171.2Spgoyette/*
2181.5Schristos * uipc_syscalls_50 compatibility
2191.2Spgoyette */
2201.2Spgoyette
2211.2SpgoyetteMODULE_HOOK(uipc_syscalls_50_hook, int, (struct lwp *, u_long, void *));
2221.2Spgoyette
2231.2Spgoyette/*
2241.5Schristos * rtsock 14 compatibility
2251.2Spgoyette */
2261.2Spgoyettestruct ifnet;
2271.2Spgoyettestruct rt_walkarg;
2281.2Spgoyettestruct rt_addrinfo;
2291.2SpgoyetteMODULE_HOOK(rtsock_14_oifmsg_hook, void, (struct ifnet *));
2301.2SpgoyetteMODULE_HOOK(rtsock_14_iflist_hook, int,
2311.2Spgoyette    (struct ifnet *, struct rt_walkarg *, struct rt_addrinfo *, size_t));
2321.2Spgoyette
2331.2Spgoyette/*
2341.2Spgoyette * Hooks for rtsock_50
2351.2Spgoyette */
2361.2Spgoyette
2371.2Spgoyettestruct rtentry;
2381.2Spgoyettestruct ifaddr;
2391.2SpgoyetteMODULE_HOOK(rtsock_50_oifmsg_hook, void, (struct ifnet *));
2401.2SpgoyetteMODULE_HOOK(rtsock_50_iflist_hook, int,
2411.2Spgoyette    (struct ifnet *, struct rt_walkarg *, struct rt_addrinfo *, size_t));
2421.2SpgoyetteMODULE_HOOK(rtsock_50_rt_missmsg_hook, void,
2431.2Spgoyette    (int, const struct rt_addrinfo *, int, int));
2441.2SpgoyetteMODULE_HOOK(rtsock_50_rt_ifmsg_hook, void, (struct ifnet *));
2451.2SpgoyetteMODULE_HOOK(rtsock_50_rt_newaddrmsg_hook, void,
2461.2Spgoyette    (int, struct ifaddr *, int, struct rtentry *));
2471.2SpgoyetteMODULE_HOOK(rtsock_50_rt_ifannouncemsg_hook, void, (struct ifnet *, int));
2481.2SpgoyetteMODULE_HOOK(rtsock_50_rt_ieee80211msg_hook, void,
2491.2Spgoyette    (struct ifnet *, int, void *, size_t));
2501.2Spgoyette
2511.2Spgoyette/*
2521.2Spgoyette * Hooks for rtsock_70
2531.2Spgoyette */
2541.2Spgoyettestruct ifaddr;
2551.2SpgoyetteMODULE_HOOK(rtsock_70_newaddr_hook, void, (int, struct ifaddr *));
2561.2SpgoyetteMODULE_HOOK(rtsock_70_iflist_hook, int,
2571.2Spgoyette    (struct rt_walkarg *, struct ifaddr *, struct rt_addrinfo *));
2581.2Spgoyette
2591.2Spgoyette/*
2601.2Spgoyette * modctl handler for old style OSTAT
2611.2Spgoyette */
2621.2Spgoyettestruct iovec;
2631.2SpgoyetteMODULE_HOOK(compat_modstat_80_hook, int, (int, struct iovec *, void *));
2641.2Spgoyette
2651.2Spgoyette/*
2661.2Spgoyette * mask for kern_sig_43's killpg
2671.2Spgoyette */
2681.2Spgoyetteextern int kern_sig_43_pgid_mask;
2691.2Spgoyette
2701.2Spgoyette/*
2711.2Spgoyette * Hooks for kern_proc.c for netbsd32 compat
2721.2Spgoyette */
2731.2Spgoyettestruct ps_strings;
2741.2SpgoyetteMODULE_HOOK(kern_proc_32_copyin_hook, int,
2751.2Spgoyette    (struct proc *, struct ps_strings *));
2761.2SpgoyetteMODULE_HOOK(kern_proc_32_base_hook, vaddr_t, (char **, size_t));
2771.2Spgoyette
2781.2Spgoyette/*
2791.2Spgoyette * Hook to allow sparc fpu code to see if a process is using sunos
2801.2Spgoyette * emulation, and select proper fup codes
2811.2Spgoyette */
2821.2Spgoyettestruct emul;
2831.2SpgoyetteMODULE_HOOK(get_emul_sunos_hook, int, (const struct emul **));
2841.2Spgoyette
2851.2Spgoyette/*
2861.2Spgoyette * Hooks for rnd_ioctl_50
2871.2Spgoyette */
2881.2SpgoyetteMODULE_HOOK(rnd_ioctl_50_hook, int, (struct file *, u_long, void *));
2891.2SpgoyetteMODULE_HOOK(rnd_ioctl_50_32_hook, int, (struct file *, u_long, void *));
2901.2Spgoyette
2911.2Spgoyette/*
2921.2Spgoyette * Hooks for compat_60 ttioctl and ptmioctl
2931.2Spgoyette */
2941.2SpgoyetteMODULE_HOOK(compat_60_ttioctl_hook, int,
2951.3Schristos    (struct tty *, u_long, void *, int, struct lwp *));
2961.2SpgoyetteMODULE_HOOK(compat_60_ptmioctl_hook, int,
2971.2Spgoyette    (dev_t, u_long, void *, int, struct lwp *));
2981.2Spgoyette
2991.2Spgoyette/*
3001.2Spgoyette * Hook for compat_10 openat
3011.2Spgoyette */
3021.2Spgoyettestruct pathbuf;
3031.2SpgoyetteMODULE_HOOK(compat_10_openat_hook, int, (struct pathbuf **));
3041.2Spgoyette
3051.2Spgoyette/*
3061.2Spgoyette * Hook for compat_70_unp_addsockcred
3071.2Spgoyette */
3081.2Spgoyettestruct mbuf;
3091.2SpgoyetteMODULE_HOOK(compat_70_unp_hook, struct mbuf *,
3101.2Spgoyette    (struct lwp *, struct mbuf *));
3111.2Spgoyette
3121.2Spgoyette/*
3131.2Spgoyette * Hook for sysvipc50 sysctl
3141.2Spgoyette */
3151.2Spgoyette#include <sys/sysctl.h>
3161.2SpgoyetteMODULE_HOOK(sysvipc50_sysctl_hook, int, (SYSCTLFN_PROTO));
3171.2Spgoyette
3181.2Spgoyette/*
3191.2Spgoyette * Hook for 32-bit machine name
3201.2Spgoyette *
3211.2Spgoyette * This probably would be better placed in compat/netbsd32/netbsd32_mod.c
3221.2Spgoyette * but the consumer code in linux32_exec_elf32.c is sometimes included in
3231.2Spgoyette * the main kernel, and not in a compat_netbsd32 module.  (In particular,
3241.2Spgoyette * this is true for i386 and sgimips.)
3251.2Spgoyette */
3261.2SpgoyetteMODULE_HOOK(netbsd32_machine32_hook, const char *, (void));
3271.2Spgoyette#endif	/* _SYS_COMPAT_STUB_H */
328