module.h revision 330859
1161754Sru/*- 288276Smarkm * Copyright (c) 2010 Isilon Systems, Inc. 388276Smarkm * Copyright (c) 2010 iX Systems, Inc. 47527Sjkh * Copyright (c) 2010 Panasas, Inc. 57527Sjkh * Copyright (c) 2013, 2014 Mellanox Technologies, Ltd. 67527Sjkh * All rights reserved. 77527Sjkh * 87527Sjkh * Redistribution and use in source and binary forms, with or without 97527Sjkh * modification, are permitted provided that the following conditions 107527Sjkh * are met: 117527Sjkh * 1. Redistributions of source code must retain the above copyright 127527Sjkh * notice unmodified, this list of conditions, and the following 137527Sjkh * disclaimer. 147527Sjkh * 2. Redistributions in binary form must reproduce the above copyright 157527Sjkh * notice, this list of conditions and the following disclaimer in the 16161754Sru * documentation and/or other materials provided with the distribution. 177527Sjkh * 187527Sjkh * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 197527Sjkh * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 207527Sjkh * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 217527Sjkh * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 227527Sjkh * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 237527Sjkh * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 247527Sjkh * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 257527Sjkh * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 267527Sjkh * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 277527Sjkh * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 287527Sjkh * 297527Sjkh * $FreeBSD: stable/11/sys/compat/linuxkpi/common/include/linux/module.h 330859 2018-03-13 16:28:04Z hselasky $ 307527Sjkh */ 317527Sjkh#ifndef _LINUX_MODULE_H_ 327527Sjkh#define _LINUX_MODULE_H_ 3388276Smarkm 3488276Smarkm#include <sys/cdefs.h> 3588276Smarkm#include <sys/types.h> 367527Sjkh#include <sys/module.h> 3788276Smarkm 387527Sjkh#include <linux/list.h> 39161754Sru#include <linux/compiler.h> 4088276Smarkm#include <linux/kmod.h> 417527Sjkh#include <linux/kobject.h> 427527Sjkh#include <linux/sysfs.h> 437527Sjkh#include <linux/moduleparam.h> 447527Sjkh#include <linux/slab.h> 457527Sjkh 467527Sjkh#define MODULE_AUTHOR(name) 47161754Sru#define MODULE_DESCRIPTION(name) 487527Sjkh#define MODULE_LICENSE(name) 497527Sjkh#define MODULE_INFO(tag, info) 50161754Sru#define MODULE_FIRMWARE(firmware) 51161754Sru 52161754Sru#define THIS_MODULE ((struct module *)0) 53161754Sru 5488276Smarkm#define EXPORT_SYMBOL(name) 557527Sjkh#define EXPORT_SYMBOL_GPL(name) 567527Sjkh#define __MODULE_STRING(x) __stringify(x) 577527Sjkh 587527Sjkh/* OFED pre-module initialization */ 597527Sjkh#define SI_SUB_OFED_PREINIT (SI_SUB_ROOT_CONF - 2) 607527Sjkh/* OFED default module initialization */ 61161754Sru#define SI_SUB_OFED_MODINIT (SI_SUB_ROOT_CONF - 1) 627527Sjkh 6388276Smarkm#include <sys/linker.h> 647527Sjkh 657527Sjkhstatic inline void 667527Sjkh_module_run(void *arg) 677527Sjkh{ 687527Sjkh void (*fn)(void); 697527Sjkh#ifdef OFED_DEBUG_INIT 707527Sjkh char name[1024]; 717527Sjkh caddr_t pc; 727527Sjkh long offset; 737527Sjkh 747527Sjkh pc = (caddr_t)arg; 757527Sjkh if (linker_search_symbol_name(pc, name, sizeof(name), &offset) != 0) 76161754Sru printf("Running ??? (%p)\n", pc); 777527Sjkh else 787527Sjkh printf("Running %s (%p)\n", name, pc); 797527Sjkh#endif 807527Sjkh fn = arg; 817527Sjkh DROP_GIANT(); 8288276Smarkm fn(); 837527Sjkh PICKUP_GIANT(); 847527Sjkh} 857527Sjkh 867527Sjkh#define module_init(fn) \ 877527Sjkh SYSINIT(fn, SI_SUB_OFED_MODINIT, SI_ORDER_FIRST, _module_run, (fn)) 887527Sjkh 897527Sjkh#define module_exit(fn) \ 907527Sjkh SYSUNINIT(fn, SI_SUB_OFED_MODINIT, SI_ORDER_SECOND, _module_run, (fn)) 917527Sjkh 927527Sjkh/* 937527Sjkh * The following two macros are a workaround for not having a module 947527Sjkh * load and unload order resolver: 957527Sjkh */ 9688276Smarkm#define module_init_order(fn, order) \ 97161754Sru SYSINIT(fn, SI_SUB_OFED_MODINIT, (order), _module_run, (fn)) 987527Sjkh 997527Sjkh#define module_exit_order(fn, order) \ 100161754Sru SYSUNINIT(fn, SI_SUB_OFED_MODINIT, (order), _module_run, (fn)) 1017527Sjkh 1027527Sjkh#define module_get(module) 1037527Sjkh#define module_put(module) 1047527Sjkh#define try_module_get(module) 1 105161754Sru 1067527Sjkh#define postcore_initcall(fn) module_init(fn) 1077527Sjkh 1087527Sjkh#endif /* _LINUX_MODULE_H_ */ 1097527Sjkh