1 /*******************************************************************
2  * This file is part of the Emulex Linux Device Driver for         *
3  * Fibre Channel Host Bus Adapters.                                *
4  * Copyright (C) 2017-2018 Broadcom. All Rights Reserved. The term *
5  * “Broadcom” refers to Broadcom Inc. and/or its subsidiaries.     *
6  * Copyright (C) 2004-2016 Emulex.  All rights reserved.           *
7  * EMULEX and SLI are trademarks of Emulex.                        *
8  * www.broadcom.com                                                *
9  * Portions Copyright (C) 2004-2005 Christoph Hellwig              *
10  *                                                                 *
11  * This program is free software; you can redistribute it and/or   *
12  * modify it under the terms of version 2 of the GNU General       *
13  * Public License as published by the Free Software Foundation.    *
14  * This program is distributed in the hope that it will be useful. *
15  * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND          *
16  * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,  *
17  * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT, ARE      *
18  * DISCLAIMED, EXCEPT TO THE EXTENT THAT SUCH DISCLAIMERS ARE HELD *
19  * TO BE LEGALLY INVALID.  See the GNU General Public License for  *
20  * more details, a copy of which can be found in the file COPYING  *
21  * included with this package.                                     *
22  *******************************************************************/
23 
24 #define LPFC_ATTR(name, defval, minval, maxval, desc) \
25 static uint lpfc_##name = defval;\
26 module_param(lpfc_##name, uint, S_IRUGO);\
27 MODULE_PARM_DESC(lpfc_##name, desc);\
28 lpfc_param_init(name, defval, minval, maxval)
29 
30 #define LPFC_ATTR_R(name, defval, minval, maxval, desc) \
31 static uint lpfc_##name = defval;\
32 module_param(lpfc_##name, uint, S_IRUGO);\
33 MODULE_PARM_DESC(lpfc_##name, desc);\
34 lpfc_param_show(name)\
35 lpfc_param_init(name, defval, minval, maxval)\
36 static DEVICE_ATTR(lpfc_##name, S_IRUGO, lpfc_##name##_show, NULL)
37 
38 #define LPFC_ATTR_RW(name, defval, minval, maxval, desc) \
39 static uint lpfc_##name = defval;\
40 module_param(lpfc_##name, uint, S_IRUGO);\
41 MODULE_PARM_DESC(lpfc_##name, desc);\
42 lpfc_param_show(name)\
43 lpfc_param_init(name, defval, minval, maxval)\
44 lpfc_param_set(name, defval, minval, maxval)\
45 lpfc_param_store(name)\
46 static DEVICE_ATTR(lpfc_##name, S_IRUGO | S_IWUSR,\
47 		   lpfc_##name##_show, lpfc_##name##_store)
48 
49 #define LPFC_BBCR_ATTR_RW(name, defval, minval, maxval, desc) \
50 static uint lpfc_##name = defval;\
51 module_param(lpfc_##name, uint, 0444);\
52 MODULE_PARM_DESC(lpfc_##name, desc);\
53 lpfc_param_show(name)\
54 lpfc_param_init(name, defval, minval, maxval)\
55 lpfc_param_store(name)\
56 static DEVICE_ATTR(lpfc_##name, 0444 | 0644,\
57 		   lpfc_##name##_show, lpfc_##name##_store)
58 
59 #define LPFC_ATTR_HEX_R(name, defval, minval, maxval, desc) \
60 static uint lpfc_##name = defval;\
61 module_param(lpfc_##name, uint, S_IRUGO);\
62 MODULE_PARM_DESC(lpfc_##name, desc);\
63 lpfc_param_hex_show(name)\
64 lpfc_param_init(name, defval, minval, maxval)\
65 static DEVICE_ATTR(lpfc_##name, S_IRUGO, lpfc_##name##_show, NULL)
66 
67 #define LPFC_ATTR_HEX_RW(name, defval, minval, maxval, desc) \
68 static uint lpfc_##name = defval;\
69 module_param(lpfc_##name, uint, S_IRUGO);\
70 MODULE_PARM_DESC(lpfc_##name, desc);\
71 lpfc_param_hex_show(name)\
72 lpfc_param_init(name, defval, minval, maxval)\
73 lpfc_param_set(name, defval, minval, maxval)\
74 lpfc_param_store(name)\
75 static DEVICE_ATTR(lpfc_##name, S_IRUGO | S_IWUSR,\
76 		   lpfc_##name##_show, lpfc_##name##_store)
77 
78 #define LPFC_VPORT_ATTR(name, defval, minval, maxval, desc) \
79 static uint lpfc_##name = defval;\
80 module_param(lpfc_##name, uint, S_IRUGO);\
81 MODULE_PARM_DESC(lpfc_##name, desc);\
82 lpfc_vport_param_init(name, defval, minval, maxval)
83 
84 #define LPFC_VPORT_ATTR_R(name, defval, minval, maxval, desc) \
85 static uint lpfc_##name = defval;\
86 module_param(lpfc_##name, uint, S_IRUGO);\
87 MODULE_PARM_DESC(lpfc_##name, desc);\
88 lpfc_vport_param_show(name)\
89 lpfc_vport_param_init(name, defval, minval, maxval)\
90 static DEVICE_ATTR(lpfc_##name, S_IRUGO, lpfc_##name##_show, NULL)
91 
92 #define LPFC_VPORT_ULL_ATTR_R(name, defval, minval, maxval, desc) \
93 static uint64_t lpfc_##name = defval;\
94 module_param(lpfc_##name, ullong, S_IRUGO);\
95 MODULE_PARM_DESC(lpfc_##name, desc);\
96 lpfc_vport_param_show(name)\
97 lpfc_vport_param_init(name, defval, minval, maxval)\
98 static DEVICE_ATTR(lpfc_##name, S_IRUGO, lpfc_##name##_show, NULL)
99 
100 #define LPFC_VPORT_ATTR_RW(name, defval, minval, maxval, desc) \
101 static uint lpfc_##name = defval;\
102 module_param(lpfc_##name, uint, S_IRUGO);\
103 MODULE_PARM_DESC(lpfc_##name, desc);\
104 lpfc_vport_param_show(name)\
105 lpfc_vport_param_init(name, defval, minval, maxval)\
106 lpfc_vport_param_set(name, defval, minval, maxval)\
107 lpfc_vport_param_store(name)\
108 static DEVICE_ATTR(lpfc_##name, S_IRUGO | S_IWUSR,\
109 		   lpfc_##name##_show, lpfc_##name##_store)
110 
111 #define LPFC_VPORT_ATTR_HEX_R(name, defval, minval, maxval, desc) \
112 static uint lpfc_##name = defval;\
113 module_param(lpfc_##name, uint, S_IRUGO);\
114 MODULE_PARM_DESC(lpfc_##name, desc);\
115 lpfc_vport_param_hex_show(name)\
116 lpfc_vport_param_init(name, defval, minval, maxval)\
117 static DEVICE_ATTR(lpfc_##name, S_IRUGO, lpfc_##name##_show, NULL)
118 
119 #define LPFC_VPORT_ATTR_HEX_RW(name, defval, minval, maxval, desc) \
120 static uint lpfc_##name = defval;\
121 module_param(lpfc_##name, uint, S_IRUGO);\
122 MODULE_PARM_DESC(lpfc_##name, desc);\
123 lpfc_vport_param_hex_show(name)\
124 lpfc_vport_param_init(name, defval, minval, maxval)\
125 lpfc_vport_param_set(name, defval, minval, maxval)\
126 lpfc_vport_param_store(name)\
127 static DEVICE_ATTR(lpfc_##name, S_IRUGO | S_IWUSR,\
128 		   lpfc_##name##_show, lpfc_##name##_store)
129