Author: hselasky
Date: Tue Oct 17 11:20:32 2017
New Revision: 324685
URL: https://svnweb.freebsd.org/changeset/base/324685

Log:
  MFC r289568, r300676, r300677, r300719, r300720 and r300721:
  Implement LinuxKPI module parameters as SYSCTLs.
  
  The bool module parameter is no longer supported, because there is no
  equivalent in FreeBSD 10-stable. These are converted into "int" type.
  
  There are two macros available which control the behaviour of the
  LinuxKPI module parameters:
  
  - LINUXKPI_PARAM_PARENT allows the consumer to set the SYSCTL parent
  where the modules parameters will be created.
  
  - LINUXKPI_PARAM_PREFIX defines a parameter name prefix, which is
    added to all created module parameters.
  
  The LinuxKPI module parameters also have a permissions value.
  If any write bits are set we are allowed to modify the module
  parameter runtime. Reflect this when creating the static SYSCTL
  nodes.
  
  The module_param_call() function is no longer supported.
  
  Sponsored by: Mellanox Technologies

Modified:
  stable/10/sys/dev/cxgbe/iw_cxgbe/provider.c
  stable/10/sys/dev/mlx5/mlx5_core/mlx5_main.c
  stable/10/sys/ofed/drivers/infiniband/core/cma.c
  stable/10/sys/ofed/drivers/infiniband/core/local_sa.c
  stable/10/sys/ofed/drivers/infiniband/core/mad.c
  stable/10/sys/ofed/drivers/infiniband/core/multicast.c
  stable/10/sys/ofed/drivers/infiniband/core/umem.c
  stable/10/sys/ofed/drivers/infiniband/core/uverbs_cmd.c
  stable/10/sys/ofed/drivers/infiniband/debug/memtrack.c
  stable/10/sys/ofed/drivers/infiniband/hw/mlx4/main.c
  stable/10/sys/ofed/drivers/infiniband/hw/mthca/mthca_catas.c
  stable/10/sys/ofed/drivers/infiniband/hw/mthca/mthca_cmd.c
  stable/10/sys/ofed/drivers/infiniband/hw/mthca/mthca_main.c
  stable/10/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib.h
  stable/10/sys/ofed/drivers/infiniband/ulp/sdp/sdp.h
  stable/10/sys/ofed/drivers/infiniband/util/madeye.c
  stable/10/sys/ofed/drivers/net/mlx4/catas.c
  stable/10/sys/ofed/drivers/net/mlx4/en_main.c
  stable/10/sys/ofed/drivers/net/mlx4/en_tx.c
  stable/10/sys/ofed/drivers/net/mlx4/fw.c
  stable/10/sys/ofed/drivers/net/mlx4/main.c
  stable/10/sys/ofed/drivers/net/mlx4/port.c
  stable/10/sys/ofed/include/linux/linux_compat.c
  stable/10/sys/ofed/include/linux/moduleparam.h
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/dev/cxgbe/iw_cxgbe/provider.c
==============================================================================
--- stable/10/sys/dev/cxgbe/iw_cxgbe/provider.c Tue Oct 17 02:53:42 2017        
(r324684)
+++ stable/10/sys/dev/cxgbe/iw_cxgbe/provider.c Tue Oct 17 11:20:32 2017        
(r324685)
@@ -32,6 +32,8 @@
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");
 
+#define        LINUXKPI_PARAM_PREFIX iw_cxgbe_
+
 #include "opt_inet.h"
 
 #ifdef TCP_OFFLOAD

Modified: stable/10/sys/dev/mlx5/mlx5_core/mlx5_main.c
==============================================================================
--- stable/10/sys/dev/mlx5/mlx5_core/mlx5_main.c        Tue Oct 17 02:53:42 
2017        (r324684)
+++ stable/10/sys/dev/mlx5/mlx5_core/mlx5_main.c        Tue Oct 17 11:20:32 
2017        (r324685)
@@ -25,6 +25,8 @@
  * $FreeBSD$
  */
 
+#define        LINUXKPI_PARAM_PREFIX mlx5_
+
 #include <linux/kmod.h>
 #include <linux/module.h>
 #include <linux/errno.h>

Modified: stable/10/sys/ofed/drivers/infiniband/core/cma.c
==============================================================================
--- stable/10/sys/ofed/drivers/infiniband/core/cma.c    Tue Oct 17 02:53:42 
2017        (r324684)
+++ stable/10/sys/ofed/drivers/infiniband/core/cma.c    Tue Oct 17 11:20:32 
2017        (r324685)
@@ -34,6 +34,8 @@
  * SOFTWARE.
  */
 
+#define        LINUXKPI_PARAM_PREFIX ibcore_
+
 #include <linux/completion.h>
 #include <linux/in.h>
 #include <linux/in6.h>

Modified: stable/10/sys/ofed/drivers/infiniband/core/local_sa.c
==============================================================================
--- stable/10/sys/ofed/drivers/infiniband/core/local_sa.c       Tue Oct 17 
02:53:42 2017        (r324684)
+++ stable/10/sys/ofed/drivers/infiniband/core/local_sa.c       Tue Oct 17 
11:20:32 2017        (r324685)
@@ -54,24 +54,8 @@ enum {
        SA_DB_MAX_RETRY_TIMER    = 256000 /* 256 sec */
 };
 
-static int set_paths_per_dest(const char *val, struct kernel_param *kp);
 static unsigned long paths_per_dest = 0;
-module_param_call(paths_per_dest, set_paths_per_dest, param_get_ulong,
-                 &paths_per_dest, 0644);
-MODULE_PARM_DESC(paths_per_dest, "Maximum number of paths to retrieve "
-                                "to each destination (DGID).  Set to 0 "
-                                "to disable cache.");
-
-static int set_subscribe_inform_info(const char *val, struct kernel_param *kp);
 static char subscribe_inform_info = 1;
-module_param_call(subscribe_inform_info, set_subscribe_inform_info,
-                 param_get_bool, &subscribe_inform_info, 0644);
-MODULE_PARM_DESC(subscribe_inform_info,
-                "Subscribe for SA InformInfo/Notice events.");
-
-static int do_refresh(const char *val, struct kernel_param *kp);
-module_param_call(refresh, do_refresh, NULL, NULL, 0200);
-
 static unsigned long retry_timer = SA_DB_MIN_RETRY_TIMER;
 
 enum sa_db_lookup_method {
@@ -79,13 +63,7 @@ enum sa_db_lookup_method {
        SA_DB_LOOKUP_RANDOM
 };
 
-static int set_lookup_method(const char *val, struct kernel_param *kp);
-static int get_lookup_method(char *buf, struct kernel_param *kp);
 static unsigned long lookup_method;
-module_param_call(lookup_method, set_lookup_method, get_lookup_method,
-                 &lookup_method, 0644);
-MODULE_PARM_DESC(lookup_method, "Method used to return path records when "
-                               "multiple paths exist to a given destination.");
 
 static void sa_db_add_dev(struct ib_device *device);
 static void sa_db_remove_dev(struct ib_device *device);
@@ -733,73 +711,6 @@ static void refresh_db(void)
 
        list_for_each_entry(dev, &dev_list, list)
                refresh_dev_db(dev);
-}
-
-static int do_refresh(const char *val, struct kernel_param *kp)
-{
-       mutex_lock(&lock);
-       refresh_db();
-       mutex_unlock(&lock);
-       return 0;
-}
-
-static int get_lookup_method(char *buf, struct kernel_param *kp)
-{
-       return sprintf(buf,
-                      "%c %d round robin\n"
-                      "%c %d random",
-                      (lookup_method == SA_DB_LOOKUP_LEAST_USED) ? '*' : ' ',
-                      SA_DB_LOOKUP_LEAST_USED,
-                      (lookup_method == SA_DB_LOOKUP_RANDOM) ? '*' : ' ',
-                      SA_DB_LOOKUP_RANDOM);
-}
-
-static int set_lookup_method(const char *val, struct kernel_param *kp)
-{
-       unsigned long method;
-       int ret = 0;
-
-       method = simple_strtoul(val, NULL, 0);
-
-       switch (method) {
-       case SA_DB_LOOKUP_LEAST_USED:
-       case SA_DB_LOOKUP_RANDOM:
-               lookup_method = method;
-               break;
-       default:
-               ret = -EINVAL;
-               break;
-       }
-
-       return ret;
-}
-
-static int set_paths_per_dest(const char *val, struct kernel_param *kp)
-{
-       int ret;
-
-       mutex_lock(&lock);
-       ret = param_set_ulong(val, kp);
-       if (ret)
-               goto out;
-
-       if (paths_per_dest > SA_DB_MAX_PATHS_PER_DEST)
-               paths_per_dest = SA_DB_MAX_PATHS_PER_DEST;
-       refresh_db();
-out:
-       mutex_unlock(&lock);
-       return ret;
-}
-
-static int set_subscribe_inform_info(const char *val, struct kernel_param *kp)
-{
-       int ret;
-
-       ret = param_set_bool(val, kp);
-       if (ret)
-               return ret;
-
-       return do_refresh(val, kp);
 }
 
 static void port_work_handler(struct work_struct *work)

Modified: stable/10/sys/ofed/drivers/infiniband/core/mad.c
==============================================================================
--- stable/10/sys/ofed/drivers/infiniband/core/mad.c    Tue Oct 17 02:53:42 
2017        (r324684)
+++ stable/10/sys/ofed/drivers/infiniband/core/mad.c    Tue Oct 17 11:20:32 
2017        (r324685)
@@ -33,6 +33,9 @@
  * SOFTWARE.
  *
  */
+
+#define        LINUXKPI_PARAM_PREFIX ibcore_
+
 #include <linux/dma-mapping.h>
 #include <rdma/ib_cache.h>
 

Modified: stable/10/sys/ofed/drivers/infiniband/core/multicast.c
==============================================================================
--- stable/10/sys/ofed/drivers/infiniband/core/multicast.c      Tue Oct 17 
02:53:42 2017        (r324684)
+++ stable/10/sys/ofed/drivers/infiniband/core/multicast.c      Tue Oct 17 
11:20:32 2017        (r324685)
@@ -30,6 +30,8 @@
  * SOFTWARE.
  */
 
+#define        LINUXKPI_PARAM_PREFIX ibcore_
+
 #include <linux/completion.h>
 #include <linux/dma-mapping.h>
 #include <linux/err.h>

Modified: stable/10/sys/ofed/drivers/infiniband/core/umem.c
==============================================================================
--- stable/10/sys/ofed/drivers/infiniband/core/umem.c   Tue Oct 17 02:53:42 
2017        (r324684)
+++ stable/10/sys/ofed/drivers/infiniband/core/umem.c   Tue Oct 17 11:20:32 
2017        (r324685)
@@ -32,6 +32,8 @@
  * SOFTWARE.
  */
 
+#define        LINUXKPI_PARAM_PREFIX ibcore_
+
 #include <linux/mm.h>
 #include <linux/dma-mapping.h>
 #include <linux/sched.h>
@@ -52,7 +54,7 @@
 #include "uverbs.h"
 
 static int allow_weak_ordering;
-module_param(allow_weak_ordering, bool, 0444);
+module_param(allow_weak_ordering, int, 0444);
 MODULE_PARM_DESC(allow_weak_ordering,  "Allow weak ordering for data 
registered memory");
 
 #define IB_UMEM_MAX_PAGE_CHUNK                                         \

Modified: stable/10/sys/ofed/drivers/infiniband/core/uverbs_cmd.c
==============================================================================
--- stable/10/sys/ofed/drivers/infiniband/core/uverbs_cmd.c     Tue Oct 17 
02:53:42 2017        (r324684)
+++ stable/10/sys/ofed/drivers/infiniband/core/uverbs_cmd.c     Tue Oct 17 
11:20:32 2017        (r324685)
@@ -33,6 +33,8 @@
  * SOFTWARE.
  */
 
+#define        LINUXKPI_PARAM_PREFIX ibcore_
+
 #include <linux/file.h>
 #include <linux/fs.h>
 #include <linux/lockdep.h>

Modified: stable/10/sys/ofed/drivers/infiniband/debug/memtrack.c
==============================================================================
--- stable/10/sys/ofed/drivers/infiniband/debug/memtrack.c      Tue Oct 17 
02:53:42 2017        (r324684)
+++ stable/10/sys/ofed/drivers/infiniband/debug/memtrack.c      Tue Oct 17 
11:20:32 2017        (r324685)
@@ -19,6 +19,8 @@
   Copyright (c) 2004 Mellanox Technologies Ltd.  All rights reserved.
 */
 
+#define        LINUXKPI_PARAM_PREFIX memtrack_
+
 #define C_MEMTRACK_C
 
 #ifdef kmalloc

Modified: stable/10/sys/ofed/drivers/infiniband/hw/mlx4/main.c
==============================================================================
--- stable/10/sys/ofed/drivers/infiniband/hw/mlx4/main.c        Tue Oct 17 
02:53:42 2017        (r324684)
+++ stable/10/sys/ofed/drivers/infiniband/hw/mlx4/main.c        Tue Oct 17 
11:20:32 2017        (r324685)
@@ -31,6 +31,8 @@
  * SOFTWARE.
  */
 
+#define        LINUXKPI_PARAM_PREFIX mlx4_
+
 #include <linux/module.h>
 
 #ifdef __linux__

Modified: stable/10/sys/ofed/drivers/infiniband/hw/mthca/mthca_catas.c
==============================================================================
--- stable/10/sys/ofed/drivers/infiniband/hw/mthca/mthca_catas.c        Tue Oct 
17 02:53:42 2017        (r324684)
+++ stable/10/sys/ofed/drivers/infiniband/hw/mthca/mthca_catas.c        Tue Oct 
17 11:20:32 2017        (r324685)
@@ -30,6 +30,8 @@
  * SOFTWARE.
  */
 
+#define        LINUXKPI_PARAM_PREFIX mthca_
+
 #include <linux/jiffies.h>
 #include <linux/timer.h>
 #include <linux/workqueue.h>

Modified: stable/10/sys/ofed/drivers/infiniband/hw/mthca/mthca_cmd.c
==============================================================================
--- stable/10/sys/ofed/drivers/infiniband/hw/mthca/mthca_cmd.c  Tue Oct 17 
02:53:42 2017        (r324684)
+++ stable/10/sys/ofed/drivers/infiniband/hw/mthca/mthca_cmd.c  Tue Oct 17 
11:20:32 2017        (r324685)
@@ -32,6 +32,8 @@
  * SOFTWARE.
  */
 
+#define        LINUXKPI_PARAM_PREFIX mthca_
+
 #include <linux/completion.h>
 #include <linux/pci.h>
 #include <linux/errno.h>

Modified: stable/10/sys/ofed/drivers/infiniband/hw/mthca/mthca_main.c
==============================================================================
--- stable/10/sys/ofed/drivers/infiniband/hw/mthca/mthca_main.c Tue Oct 17 
02:53:42 2017        (r324684)
+++ stable/10/sys/ofed/drivers/infiniband/hw/mthca/mthca_main.c Tue Oct 17 
11:20:32 2017        (r324685)
@@ -32,6 +32,8 @@
  * SOFTWARE.
  */
 
+#define        LINUXKPI_PARAM_PREFIX mthca_
+
 #include <linux/module.h>
 #include <linux/errno.h>
 #include <linux/pci.h>

Modified: stable/10/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib.h
==============================================================================
--- stable/10/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib.h     Tue Oct 17 
02:53:42 2017        (r324684)
+++ stable/10/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib.h     Tue Oct 17 
11:20:32 2017        (r324685)
@@ -35,6 +35,8 @@
 #ifndef _IPOIB_H
 #define _IPOIB_H
 
+#define        LINUXKPI_PARAM_PREFIX ipoib_
+
 #include "opt_inet.h"
 #include "opt_inet6.h"
 #include "opt_ofed.h"

Modified: stable/10/sys/ofed/drivers/infiniband/ulp/sdp/sdp.h
==============================================================================
--- stable/10/sys/ofed/drivers/infiniband/ulp/sdp/sdp.h Tue Oct 17 02:53:42 
2017        (r324684)
+++ stable/10/sys/ofed/drivers/infiniband/ulp/sdp/sdp.h Tue Oct 17 11:20:32 
2017        (r324685)
@@ -1,6 +1,8 @@
 #ifndef _SDP_H_
 #define _SDP_H_
 
+#define        LINUXKPI_PARAM_PREFIX ib_sdp_
+
 #include "opt_ddb.h"
 #include "opt_inet.h"
 #include "opt_ofed.h"

Modified: stable/10/sys/ofed/drivers/infiniband/util/madeye.c
==============================================================================
--- stable/10/sys/ofed/drivers/infiniband/util/madeye.c Tue Oct 17 02:53:42 
2017        (r324684)
+++ stable/10/sys/ofed/drivers/infiniband/util/madeye.c Tue Oct 17 11:20:32 
2017        (r324685)
@@ -32,6 +32,9 @@
  *
  * $Id$
  */
+
+#define        LINUXKPI_PARAM_PREFIX ib_madeye_
+
 #include <linux/module.h>
 #include <linux/device.h>
 #include <linux/err.h>

Modified: stable/10/sys/ofed/drivers/net/mlx4/catas.c
==============================================================================
--- stable/10/sys/ofed/drivers/net/mlx4/catas.c Tue Oct 17 02:53:42 2017        
(r324684)
+++ stable/10/sys/ofed/drivers/net/mlx4/catas.c Tue Oct 17 11:20:32 2017        
(r324685)
@@ -31,6 +31,8 @@
  * SOFTWARE.
  */
 
+#define        LINUXKPI_PARAM_PREFIX mlx4_
+
 #include <linux/workqueue.h>
 #include <linux/module.h>
 

Modified: stable/10/sys/ofed/drivers/net/mlx4/en_main.c
==============================================================================
--- stable/10/sys/ofed/drivers/net/mlx4/en_main.c       Tue Oct 17 02:53:42 
2017        (r324684)
+++ stable/10/sys/ofed/drivers/net/mlx4/en_main.c       Tue Oct 17 11:20:32 
2017        (r324685)
@@ -31,6 +31,8 @@
  *
  */
 
+#define        LINUXKPI_PARAM_PREFIX mlx4_
+
 #include <linux/module.h>
 #include <linux/delay.h>
 #include <linux/netdevice.h>

Modified: stable/10/sys/ofed/drivers/net/mlx4/en_tx.c
==============================================================================
--- stable/10/sys/ofed/drivers/net/mlx4/en_tx.c Tue Oct 17 02:53:42 2017        
(r324684)
+++ stable/10/sys/ofed/drivers/net/mlx4/en_tx.c Tue Oct 17 11:20:32 2017        
(r324685)
@@ -31,6 +31,8 @@
  *
  */
 
+#define        LINUXKPI_PARAM_PREFIX mlx4_
+
 #include <linux/page.h>
 #include <linux/mlx4/cq.h>
 #include <linux/slab.h>

Modified: stable/10/sys/ofed/drivers/net/mlx4/fw.c
==============================================================================
--- stable/10/sys/ofed/drivers/net/mlx4/fw.c    Tue Oct 17 02:53:42 2017        
(r324684)
+++ stable/10/sys/ofed/drivers/net/mlx4/fw.c    Tue Oct 17 11:20:32 2017        
(r324685)
@@ -32,6 +32,8 @@
  * SOFTWARE.
  */
 
+#define        LINUXKPI_PARAM_PREFIX mlx4_
+
 #include <linux/etherdevice.h>
 #include <linux/mlx4/cmd.h>
 #include <linux/module.h>
@@ -49,8 +51,8 @@ enum {
 extern void __buggy_use_of_MLX4_GET(void);
 extern void __buggy_use_of_MLX4_PUT(void);
 
-static bool enable_qos;
-module_param(enable_qos, bool, 0444);
+static int enable_qos;
+module_param(enable_qos, int, 0444);
 MODULE_PARM_DESC(enable_qos, "Enable Quality of Service support in the HCA 
(default: off)");
 
 #define MLX4_GET(dest, source, offset)                               \

Modified: stable/10/sys/ofed/drivers/net/mlx4/main.c
==============================================================================
--- stable/10/sys/ofed/drivers/net/mlx4/main.c  Tue Oct 17 02:53:42 2017        
(r324684)
+++ stable/10/sys/ofed/drivers/net/mlx4/main.c  Tue Oct 17 11:20:32 2017        
(r324685)
@@ -33,6 +33,8 @@
  * SOFTWARE.
  */
 
+#define        LINUXKPI_PARAM_PREFIX mlx4_
+
 #include <linux/kmod.h>
 /* 
  * kmod.h must be included before module.h since it includes (indirectly) 
sys/module.h

Modified: stable/10/sys/ofed/drivers/net/mlx4/port.c
==============================================================================
--- stable/10/sys/ofed/drivers/net/mlx4/port.c  Tue Oct 17 02:53:42 2017        
(r324684)
+++ stable/10/sys/ofed/drivers/net/mlx4/port.c  Tue Oct 17 11:20:32 2017        
(r324685)
@@ -30,6 +30,8 @@
  * SOFTWARE.
  */
 
+#define        LINUXKPI_PARAM_PREFIX mlx4_
+
 #include <linux/errno.h>
 #include <linux/if_ether.h>
 #include <linux/module.h>

Modified: stable/10/sys/ofed/include/linux/linux_compat.c
==============================================================================
--- stable/10/sys/ofed/include/linux/linux_compat.c     Tue Oct 17 02:53:42 
2017        (r324684)
+++ stable/10/sys/ofed/include/linux/linux_compat.c     Tue Oct 17 11:20:32 
2017        (r324685)
@@ -53,6 +53,7 @@
 #include <linux/device.h>
 #include <linux/slab.h>
 #include <linux/module.h>
+#include <linux/moduleparam.h>
 #include <linux/cdev.h>
 #include <linux/file.h>
 #include <linux/sysfs.h>
@@ -65,6 +66,8 @@
 #include <vm/vm_pager.h>
 
 #include <linux/workqueue.h>
+
+SYSCTL_NODE(_compat, OID_AUTO, linuxkpi, CTLFLAG_RW, 0, "LinuxKPI parameters");
 
 MALLOC_DEFINE(M_KMALLOC, "linux", "Linux kmalloc compat");
 

Modified: stable/10/sys/ofed/include/linux/moduleparam.h
==============================================================================
--- stable/10/sys/ofed/include/linux/moduleparam.h      Tue Oct 17 02:53:42 
2017        (r324684)
+++ stable/10/sys/ofed/include/linux/moduleparam.h      Tue Oct 17 11:20:32 
2017        (r324685)
@@ -2,7 +2,7 @@
  * Copyright (c) 2010 Isilon Systems, Inc.
  * Copyright (c) 2010 iX Systems, Inc.
  * Copyright (c) 2010 Panasas, Inc.
- * Copyright (c) 2013, 2014 Mellanox Technologies, Ltd.
+ * Copyright (c) 2013-2016 Mellanox Technologies, Ltd.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -25,209 +25,106 @@
  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD: head/sys/compat/linuxkpi/common/include/linux/moduleparam.h 
300721 2016-05-26 09:04:14Z hselasky $
  */
-
 #ifndef        _LINUX_MODULEPARAM_H_
 #define        _LINUX_MODULEPARAM_H_
 
+#include <sys/types.h>
+#include <sys/sysctl.h>
+
 #include <linux/types.h>
 
-/*
- * These are presently not hooked up to anything.  In linux the parameters
- * can be set when modules are loaded.  On FreeBSD these could be mapped
- * to kenv in the future.
- */
-struct kernel_param;
+#ifndef LINUXKPI_PARAM_PARENT
+#define        LINUXKPI_PARAM_PARENT   _compat_linuxkpi
+#endif
 
-typedef int (*param_set_fn)(const char *val, struct kernel_param *kp);
-typedef int (*param_get_fn)(char *buffer, struct kernel_param *kp);
+#ifndef LINUXKPI_PARAM_PREFIX
+#define        LINUXKPI_PARAM_PREFIX   /* empty prefix is the default */
+#endif
 
-struct kernel_param {
-       const char      *name;
-       u16             perm;
-       u16             flags;
-       param_set_fn    set;
-       param_get_fn    get;
-       union { 
-               void    *arg;
-               struct kparam_string    *str;
-               struct kparam_array     *arr;
-       } un;
-};
+#ifndef LINUXKPI_PARAM_PERM
+#define        LINUXKPI_PARAM_PERM(perm) (((perm) & 0222) ? CTLFLAG_RWTUN : 
CTLFLAG_RDTUN)
+#endif
 
-#define        KPARAM_ISBOOL   2
+#define        LINUXKPI_PARAM_CONCAT_SUB(a,b,c,d) a##b##c##d
+#define        LINUXKPI_PARAM_CONCAT(...) 
LINUXKPI_PARAM_CONCAT_SUB(__VA_ARGS__)
+#define        LINUXKPI_PARAM_PASS(...) __VA_ARGS__
+#define        LINUXKPI_PARAM_DESC(name) 
LINUXKPI_PARAM_CONCAT(linuxkpi_,LINUXKPI_PARAM_PREFIX,name,_desc)
+#define        LINUXKPI_PARAM_NAME(name) 
LINUXKPI_PARAM_CONCAT(LINUXKPI_PARAM_PREFIX,name,,)
 
-struct kparam_string {
-       unsigned int maxlen;
-       char *string;
-};
+#define        LINUXKPI_PARAM_bool(name, var, perm)                            
\
+       extern const char LINUXKPI_PARAM_DESC(name)[];                  \
+       LINUXKPI_PARAM_PASS(SYSCTL_BOOL(LINUXKPI_PARAM_PARENT, OID_AUTO,\
+       LINUXKPI_PARAM_NAME(name), LINUXKPI_PARAM_PERM(perm), &(var), 0, \
+       LINUXKPI_PARAM_DESC(name)))
 
-struct kparam_array
-{
-       unsigned int    max;
-       unsigned int    *num;
-       param_set_fn    set;
-       param_get_fn    get;
-       unsigned int    elemsize;
-       void            *elem;
-};
+#define        LINUXKPI_PARAM_byte(name, var, perm)                            
\
+       extern const char LINUXKPI_PARAM_DESC(name)[];                  \
+       LINUXKPI_PARAM_PASS(SYSCTL_U8(LINUXKPI_PARAM_PARENT, OID_AUTO,  \
+       LINUXKPI_PARAM_NAME(name), LINUXKPI_PARAM_PERM(perm), &(var), 0, \
+       LINUXKPI_PARAM_DESC(name)))
 
-static inline void
-param_sysinit(struct kernel_param *param)
-{
-}
+#define        LINUXKPI_PARAM_short(name, var, perm)                           
\
+       extern const char LINUXKPI_PARAM_DESC(name)[];                  \
+       LINUXKPI_PARAM_PASS(SYSCTL_S16(LINUXKPI_PARAM_PARENT, OID_AUTO, \
+       LINUXKPI_PARAM_NAME(name), LINUXKPI_PARAM_PERM(perm), &(var), 0, \
+       LINUXKPI_PARAM_DESC(name)))
 
-#define        module_param_call(name, set, get, arg, perm)                    
\
-       static struct kernel_param __param_##name =                     \
-           { #name, perm, 0, set, get, { arg } };                      \
-       SYSINIT(name##_param_sysinit, SI_SUB_DRIVERS, SI_ORDER_FIRST,   \
-           param_sysinit, &__param_##name);
+#define        LINUXKPI_PARAM_ushort(name, var, perm)                          
\
+       extern const char LINUXKPI_PARAM_DESC(name)[];                  \
+       LINUXKPI_PARAM_PASS(SYSCTL_U16(LINUXKPI_PARAM_PARENT, OID_AUTO, \
+       LINUXKPI_PARAM_NAME(name), LINUXKPI_PARAM_PERM(perm), &(var), 0, \
+       LINUXKPI_PARAM_DESC(name)))
 
-#define module_param_string(name, string, len, perm)                    
-         
-#define        module_param_named(name, var, type, mode)                       
\
-       module_param_call(name, param_set_##type, param_get_##type, &var, mode)
+#define        LINUXKPI_PARAM_int(name, var, perm)                             
\
+       extern const char LINUXKPI_PARAM_DESC(name)[];                  \
+       LINUXKPI_PARAM_PASS(SYSCTL_INT(LINUXKPI_PARAM_PARENT, OID_AUTO, \
+       LINUXKPI_PARAM_NAME(name), LINUXKPI_PARAM_PERM(perm), &(var), 0,\
+       LINUXKPI_PARAM_DESC(name)))
 
-#define        module_param(var, type, mode)                                   
\
-       module_param_named(var, var, type, mode)
+#define        LINUXKPI_PARAM_uint(name, var, perm)                            
\
+       extern const char LINUXKPI_PARAM_DESC(name)[];                  \
+       LINUXKPI_PARAM_PASS(SYSCTL_UINT(LINUXKPI_PARAM_PARENT, OID_AUTO, \
+       LINUXKPI_PARAM_NAME(name), LINUXKPI_PARAM_PERM(perm), &(var), 0, \
+       LINUXKPI_PARAM_DESC(name)))
 
-#define module_param_array(var, type, addr_argc, mode)                  \
-        module_param_named(var, var, type, mode)
+#define        LINUXKPI_PARAM_long(name, var, perm)                            
\
+       extern const char LINUXKPI_PARAM_DESC(name)[];                  \
+       LINUXKPI_PARAM_PASS(SYSCTL_LONG(LINUXKPI_PARAM_PARENT, OID_AUTO, \
+       LINUXKPI_PARAM_NAME(name), LINUXKPI_PARAM_PERM(perm), &(var), 0, \
+       LINUXKPI_PARAM_DESC(name)))
 
-#define        MODULE_PARM_DESC(name, desc)
+#define        LINUXKPI_PARAM_ulong(name, var, perm)                           
\
+       extern const char LINUXKPI_PARAM_DESC(name)[];                  \
+       LINUXKPI_PARAM_PASS(SYSCTL_ULONG(LINUXKPI_PARAM_PARENT, OID_AUTO, \
+       LINUXKPI_PARAM_NAME(name), LINUXKPI_PARAM_PERM(perm), &(var), 0, \
+       LINUXKPI_PARAM_DESC(name)))
 
-static inline int
-param_set_byte(const char *val, struct kernel_param *kp)
-{
+#define        module_param_string(name, str, len, perm)                       
\
+       extern const char LINUXKPI_PARAM_DESC(name)[];                  \
+       LINUXKPI_PARAM_PASS(SYSCTL_STRING(LINUXKPI_PARAM_PARENT, OID_AUTO, \
+       LINUXKPI_PARAM_NAME(name), LINUXKPI_PARAM_PERM(perm), (str), (len), \
+       LINUXKPI_PARAM_DESC(name)))
 
-       return 0;
-}
+#define        module_param_named(name, var, type, mode)       \
+       LINUXKPI_PARAM_##type(name, var, mode)
 
-static inline int
-param_get_byte(char *buffer, struct kernel_param *kp)
-{
+#define        module_param(var, type, mode)   \
+       LINUXKPI_PARAM_##type(var, var, mode)
 
-       return 0;
-}
+#define        module_param_named_unsafe(name, var, type, mode) \
+       LINUXKPI_PARAM_##type(name, var, mode)
 
+#define        module_param_unsafe(var, type, mode) \
+       LINUXKPI_PARAM_##type(var, var, mode)
 
-static inline int
-param_set_short(const char *val, struct kernel_param *kp)
-{
+#define        module_param_array(var, type, addr_argc, mode)
 
-       return 0;
-}
+#define        MODULE_PARM_DESC(name, desc) \
+       const char LINUXKPI_PARAM_DESC(name)[] = { desc }
 
-static inline int 
-param_get_short(char *buffer, struct kernel_param *kp)
-{
+SYSCTL_DECL(_compat_linuxkpi);
 
-       return 0;
-}
-
-
-static inline int 
-param_set_ushort(const char *val, struct kernel_param *kp)
-{
-
-       return 0;
-}
-
-static inline int 
-param_get_ushort(char *buffer, struct kernel_param *kp)
-{
-
-       return 0;
-}
-
-
-static inline int 
-param_set_int(const char *val, struct kernel_param *kp)
-{
-
-       return 0;
-}
-
-static inline int 
-param_get_int(char *buffer, struct kernel_param *kp)
-{
-
-       return 0;
-}
-
-
-static inline int 
-param_set_uint(const char *val, struct kernel_param *kp)
-{
-
-       return 0;
-}
-
-static inline int 
-param_get_uint(char *buffer, struct kernel_param *kp)
-{
-
-       return 0;
-}
-
-
-static inline int 
-param_set_long(const char *val, struct kernel_param *kp)
-{
-
-       return 0;
-}
-
-static inline int 
-param_get_long(char *buffer, struct kernel_param *kp)
-{
-
-       return 0;
-}
-
-
-static inline int 
-param_set_ulong(const char *val, struct kernel_param *kp)
-{
-
-       return 0;
-}
-
-static inline int 
-param_get_ulong(char *buffer, struct kernel_param *kp)
-{
-
-       return 0;
-}
-
-
-static inline int 
-param_set_charp(const char *val, struct kernel_param *kp)
-{
-
-       return 0;
-}
-
-static inline int 
-param_get_charp(char *buffer, struct kernel_param *kp)
-{
-
-       return 0;
-}
-
-
-static inline int 
-param_set_bool(const char *val, struct kernel_param *kp)
-{
-
-       return 0;
-}
-
-static inline int 
-param_get_bool(char *buffer, struct kernel_param *kp)
-{
-
-       return 0;
-}
-
-#endif /* _LINUX_MODULEPARAM_H_ */
+#endif                                 /* _LINUX_MODULEPARAM_H_ */
_______________________________________________
svn-src-stable-10@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-stable-10
To unsubscribe, send any mail to "svn-src-stable-10-unsubscr...@freebsd.org"

Reply via email to