xref: /src/sys/compat/linuxkpi/common/include/linux/device/driver.h (revision f5c7feee7129dc88a2e5dc3ce0a075cb5e4f534a)
1f5c7feeeSBjoern A. Zeeb /*-
2f5c7feeeSBjoern A. Zeeb  * SPDX-License-Identifier: BSD-2-Clause
3f5c7feeeSBjoern A. Zeeb  *
4f5c7feeeSBjoern A. Zeeb  * Copyright (c) 2021 Bjoern A. Zeeb
5f5c7feeeSBjoern A. Zeeb  * Copyright (c) 2024 The FreeBSD Foundation
6f5c7feeeSBjoern A. Zeeb  *
7f5c7feeeSBjoern A. Zeeb  * Portions of this software were developed by Björn Zeeb
8f5c7feeeSBjoern A. Zeeb  * under sponsorship from the FreeBSD Foundation.
9f5c7feeeSBjoern A. Zeeb  */
10f5c7feeeSBjoern A. Zeeb 
11f5c7feeeSBjoern A. Zeeb #ifndef	LINUXKPI_LINUX_DEVICE_DRIVER_H
12f5c7feeeSBjoern A. Zeeb #define	LINUXKPI_LINUX_DEVICE_DRIVER_H
13f5c7feeeSBjoern A. Zeeb 
14f5c7feeeSBjoern A. Zeeb #include <sys/cdefs.h>
15f5c7feeeSBjoern A. Zeeb #include <linux/module.h>
16f5c7feeeSBjoern A. Zeeb 
17f5c7feeeSBjoern A. Zeeb #define	module_driver(_drv, _regf, _unregf)					\
18f5c7feeeSBjoern A. Zeeb static inline int								\
19f5c7feeeSBjoern A. Zeeb __CONCAT(__CONCAT(_, _drv), _init)(void)					\
20f5c7feeeSBjoern A. Zeeb {										\
21f5c7feeeSBjoern A. Zeeb 	return (_regf(&(_drv)));		 				\
22f5c7feeeSBjoern A. Zeeb }										\
23f5c7feeeSBjoern A. Zeeb 										\
24f5c7feeeSBjoern A. Zeeb static inline void								\
25f5c7feeeSBjoern A. Zeeb __CONCAT(__CONCAT(_, _drv), _exit)(void)					\
26f5c7feeeSBjoern A. Zeeb {										\
27f5c7feeeSBjoern A. Zeeb 	_unregf(&(_drv));							\
28f5c7feeeSBjoern A. Zeeb }										\
29f5c7feeeSBjoern A. Zeeb 										\
30f5c7feeeSBjoern A. Zeeb module_init(__CONCAT(__CONCAT(_, _drv), _init));				\
31f5c7feeeSBjoern A. Zeeb module_exit(__CONCAT(__CONCAT(_, _drv), _exit))
32f5c7feeeSBjoern A. Zeeb 
33f5c7feeeSBjoern A. Zeeb #endif	/* LINUXKPI_LINUX_DEVICE_DRIVER_H */
34