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