xref: /wlan-dirver/qca-wifi-host-cmn/os_if/linux/wlan_cfg80211.h (revision f28396d060cff5c6519f883cb28ae0116ce479f1)
1 /*
2  * Copyright (c) 2016-2020 The Linux Foundation. All rights reserved.
3  *
4  * Permission to use, copy, modify, and/or distribute this software for
5  * any purpose with or without fee is hereby granted, provided that the
6  * above copyright notice and this permission notice appear in all
7  * copies.
8  *
9  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
10  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
11  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
12  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
13  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
14  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
15  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
16  * PERFORMANCE OF THIS SOFTWARE.
17  */
18 
19 /**
20  * DOC: declares driver functions interfacing with linux kernel
21  */
22 
23 
24 #ifndef _WLAN_CFG80211_H_
25 #define _WLAN_CFG80211_H_
26 
27 #include <linux/version.h>
28 #include <linux/netdevice.h>
29 #include <net/netlink.h>
30 #include <net/cfg80211.h>
31 #include <qca_vendor.h>
32 #include <qdf_nbuf.h>
33 #include "qal_devcfg.h"
34 
35 #define osif_alert(params...) \
36 	QDF_TRACE_FATAL(QDF_MODULE_ID_OS_IF, params)
37 #define osif_err(params...) \
38 	QDF_TRACE_ERROR(QDF_MODULE_ID_OS_IF, params)
39 #define osif_warn(params...) \
40 	QDF_TRACE_WARN(QDF_MODULE_ID_OS_IF, params)
41 #define osif_notice(params...) \
42 	QDF_TRACE_INFO(QDF_MODULE_ID_OS_IF, params)
43 #define osif_info(params...) \
44 	QDF_TRACE_INFO(QDF_MODULE_ID_OS_IF, params)
45 #define osif_debug(params...) \
46 	QDF_TRACE_DEBUG(QDF_MODULE_ID_OS_IF, params)
47 #define osif_rl_debug(params...) \
48 	QDF_TRACE_DEBUG_RL(QDF_MODULE_ID_OS_IF, params)
49 
50 #define osif_nofl_alert(params...) \
51 	QDF_TRACE_FATAL_NO_FL(QDF_MODULE_ID_OS_IF, params)
52 #define osif_nofl_err(params...) \
53 	QDF_TRACE_ERROR_NO_FL(QDF_MODULE_ID_OS_IF, params)
54 #define osif_nofl_warn(params...) \
55 	QDF_TRACE_WARN_NO_FL(QDF_MODULE_ID_OS_IF, params)
56 #define osif_nofl_info(params...) \
57 	QDF_TRACE_INFO_NO_FL(QDF_MODULE_ID_OS_IF, params)
58 #define osif_nofl_debug(params...) \
59 	QDF_TRACE_DEBUG_NO_FL(QDF_MODULE_ID_OS_IF, params)
60 
61 #if defined(NBUF_MEMORY_DEBUG) && defined(NETLINK_BUF_TRACK)
62 #define wlan_cfg80211_vendor_free_skb(skb) \
63 	qdf_nbuf_free(skb)
64 
65 #define wlan_cfg80211_vendor_event(skb, gfp) \
66 { \
67 	qdf_nbuf_count_dec(skb); \
68 	qdf_net_buf_debug_release_skb(skb); \
69 	cfg80211_vendor_event(skb, gfp); \
70 }
71 
72 #define wlan_cfg80211_vendor_cmd_reply(skb) \
73 { \
74 	qdf_nbuf_count_dec(skb); \
75 	qdf_net_buf_debug_release_skb(skb); \
76 	cfg80211_vendor_cmd_reply(skb); \
77 }
78 
79 static inline QDF_STATUS wlan_cfg80211_qal_devcfg_send_response(qdf_nbuf_t skb)
80 {
81 	qdf_nbuf_count_dec(skb);
82 	qdf_net_buf_debug_release_skb(skb);
83 	return qal_devcfg_send_response(skb);
84 }
85 
86 static inline struct sk_buff *
87 __cfg80211_vendor_cmd_alloc_reply_skb(struct wiphy *wiphy, int len,
88 				      const char *func, uint32_t line)
89 {
90 	struct sk_buff *skb;
91 
92 	skb = cfg80211_vendor_cmd_alloc_reply_skb(wiphy, len);
93 	if (skb) {
94 		qdf_nbuf_count_inc(skb);
95 		qdf_net_buf_debug_acquire_skb(skb, func, line);
96 	}
97 	return skb;
98 }
99 #define wlan_cfg80211_vendor_cmd_alloc_reply_skb(wiphy, len) \
100 	__cfg80211_vendor_cmd_alloc_reply_skb(wiphy, len, __func__, __LINE__)
101 
102 static inline struct sk_buff *
103 __cfg80211_vendor_event_alloc(struct wiphy *wiphy,
104 			      struct wireless_dev *wdev,
105 			      int approxlen,
106 			      int event_idx,
107 			      gfp_t gfp,
108 			      const char *func,
109 			      uint32_t line)
110 {
111 	struct sk_buff *skb;
112 
113 	skb = cfg80211_vendor_event_alloc(wiphy, wdev,
114 					  approxlen,
115 					  event_idx,
116 					  gfp);
117 	if (skb) {
118 		qdf_nbuf_count_inc(skb);
119 		qdf_net_buf_debug_acquire_skb(skb, func, line);
120 	}
121 	return skb;
122 }
123 #define wlan_cfg80211_vendor_event_alloc(wiphy, wdev, len, idx, gfp) \
124 	__cfg80211_vendor_event_alloc(wiphy, wdev, len, \
125 				      idx, gfp, \
126 				      __func__, __LINE__)
127 #else /* NBUF_MEMORY_DEBUG && NETLINK_BUF_TRACK */
128 #define wlan_cfg80211_vendor_free_skb(skb) \
129 	kfree_skb(skb)
130 
131 #define wlan_cfg80211_vendor_event(skb, gfp) \
132 	cfg80211_vendor_event(skb, gfp)
133 
134 #define wlan_cfg80211_vendor_cmd_reply(skb) \
135 	cfg80211_vendor_cmd_reply(skb)
136 
137 #define wlan_cfg80211_vendor_cmd_alloc_reply_skb(wiphy, len) \
138 	cfg80211_vendor_cmd_alloc_reply_skb(wiphy, len)
139 
140 #define wlan_cfg80211_vendor_event_alloc(wiphy, wdev, len, idx, gfp) \
141 	cfg80211_vendor_event_alloc(wiphy, wdev, len, idx, gfp)
142 
143 static inline QDF_STATUS wlan_cfg80211_qal_devcfg_send_response( qdf_nbuf_t skb)
144 {
145 	return qal_devcfg_send_response(skb);
146 }
147 #endif /* NBUF_MEMORY_DEBUG && NETLINK_BUF_TRACK */
148 
149 #undef nla_parse
150 #undef nla_parse_nested
151 #if LINUX_VERSION_CODE < KERNEL_VERSION(4, 12, 0)
152 static inline int wlan_cfg80211_nla_parse(struct nlattr **tb,
153 					  int maxtype,
154 					  const struct nlattr *head,
155 					  int len,
156 					  const struct nla_policy *policy)
157 {
158 	return nla_parse(tb, maxtype, head, len, policy);
159 }
160 
161 static inline int
162 wlan_cfg80211_nla_parse_nested(struct nlattr *tb[],
163 			       int maxtype,
164 			       const struct nlattr *nla,
165 			       const struct nla_policy *policy)
166 {
167 	return nla_parse_nested(tb, maxtype, nla, policy);
168 }
169 #else
170 static inline int wlan_cfg80211_nla_parse(struct nlattr **tb,
171 					  int maxtype,
172 					  const struct nlattr *head,
173 					  int len,
174 					  const struct nla_policy *policy)
175 {
176 	return nla_parse(tb, maxtype, head, len, policy, NULL);
177 }
178 
179 static inline int
180 wlan_cfg80211_nla_parse_nested(struct nlattr *tb[],
181 			       int maxtype,
182 			       const struct nlattr *nla,
183 			       const struct nla_policy *policy)
184 {
185 	return nla_parse_nested(tb, maxtype, nla, policy, NULL);
186 }
187 #endif
188 #define nla_parse(...) (obsolete, use wlan_cfg80211_nla_parse)
189 #define nla_parse_nested(...) (obsolete, use wlan_cfg80211_nla_parse_nested)
190 
191 #if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 7, 0))
192 static inline int
193 wlan_cfg80211_nla_put_u64(struct sk_buff *skb, int attrtype, u64 value)
194 {
195 	return nla_put_u64(skb, attrtype, value);
196 }
197 #else
198 static inline int
199 wlan_cfg80211_nla_put_u64(struct sk_buff *skb, int attrtype, u64 value)
200 {
201 	return nla_put_u64_64bit(skb, attrtype, value, NL80211_ATTR_PAD);
202 }
203 #endif
204 #endif
205