xref: /wlan-dirver/qca-wifi-host-cmn/os_if/linux/wlan_osif_features.h (revision 70a19e16789e308182f63b15c75decec7bf0b342)
1 /*
2  * Copyright (c) 2022 Qualcomm Innovation Center, Inc. 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: wlan_osif_features.h
21  *
22  * Define feature flags to cleanly describe when features
23  * are present in a given version of the kernel
24  */
25 
26 #ifndef _WLAN_OSIF_FEATURES_H_
27 #define _WLAN_OSIF_FEATURES_H_
28 
29 #include <linux/version.h>
30 
31 /*
32  * CFG80211_11BE_BASIC
33  * Used to indicate the Linux Kernel contains support for basic 802.11be
34  * definitions.
35  *
36  * These definitions were introduced in Linux Kernel 5.18 via:
37  * cbc1ca0a9d0a ieee80211: Add EHT (802.11be) definitions
38  * 2a2c86f15e17 ieee80211: add EHT 1K aggregation definitions
39  * 5cd5a8a3e2fb cfg80211: Add data structures to capture EHT capabilities
40  * 3743bec6120a cfg80211: Add support for EHT 320 MHz channel width
41  * cfb14110acf8 nl80211: add EHT MCS support
42  * c2b3d7699fb0 nl80211: add support for 320MHz channel limitation
43  * 31846b657857 cfg80211: add NO-EHT flag to regulatory
44  * ea05fd3581d3 cfg80211: Support configuration of station EHT capabilities
45  *
46  * These definitions were backported to Android Common Kernel 5.15 via:
47  * https://android-review.googlesource.com/c/kernel/common/+/1996261
48  * https://android-review.googlesource.com/c/kernel/common/+/1996262
49  * https://android-review.googlesource.com/c/kernel/common/+/1996263
50  * https://android-review.googlesource.com/c/kernel/common/+/1996264
51  * https://android-review.googlesource.com/c/kernel/common/+/1996265
52  * https://android-review.googlesource.com/c/kernel/common/+/1996266
53  * https://android-review.googlesource.com/c/kernel/common/+/1996267
54  * https://android-review.googlesource.com/c/kernel/common/+/1996268
55  */
56 
57 #if (defined(__ANDROID_COMMON_KERNEL__) && \
58 	(LINUX_VERSION_CODE >= KERNEL_VERSION(5, 15, 0)) && \
59 	(LINUX_VERSION_CODE < KERNEL_VERSION(5, 16, 0))) || \
60 	(LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0))
61 #define CFG80211_11BE_BASIC 1
62 #endif
63 
64 /*
65  * CFG80211_SA_QUERY_OFFLOAD_SUPPORT
66  * Used to indicate the Linux Kernel contains support to offload SA Query
67  * procedures for AP SME device
68  *
69  * This feature was introduced in Linux Kernel 5.17 via:
70  * 47301a74bbfa ("nl80211: Add support to set AP settings flags with single attribute")
71  * 87c1aec15dee ("nl80211: Add support to offload SA Query procedures for AP SME device")
72  *
73  * This feature was backported to Android Common Kernel 5.15 via:
74  * https://android-review.googlesource.com/c/kernel/common/+/1958439
75  * https://android-review.googlesource.com/c/kernel/common/+/1958440
76  */
77 
78 #if (defined(__ANDROID_COMMON_KERNEL__) && \
79 	(LINUX_VERSION_CODE >= KERNEL_VERSION(5, 15, 0)) && \
80 	(LINUX_VERSION_CODE < KERNEL_VERSION(5, 16, 0))) || \
81 	(LINUX_VERSION_CODE >= KERNEL_VERSION(5, 17, 0))
82 #define CFG80211_SA_QUERY_OFFLOAD_SUPPORT 1
83 #endif
84 
85 /*
86  * CFG80211_SINGLE_NETDEV_MULTI_LINK_SUPPORT
87  * Used to indicate the Linux Kernel contains support for single netdevice multi
88  * link support.
89  *
90  * This feature was merged into wireless-next via below commits:
91  * 7b0a0e3c3 wifi: cfg80211: do some rework towards MLO link APIs
92  * 0f7594489 wifi: cfg80211: mlme: get BSS entry outside cfg80211_mlme_assoc()
93  * 9ecff10e8 wifi: nl80211: refactor BSS lookup in nl80211_associate()
94  * 0f48b8b88 wifi: ieee80211: add definitions for multi-link element
95  * 325839da9 wifi: cfg80211: simplify cfg80211_mlme_auth() prototype
96  * d648c2302 wifi: nl80211: support MLO in auth/assoc
97  *
98  * This feature was backported to Android Common Kernel 5.15 via:
99  * https://android-review.googlesource.com/c/kernel/common/+/2123895
100  * https://android-review.googlesource.com/c/kernel/common/+/2115618
101  * https://android-review.googlesource.com/c/kernel/common/+/2115620
102  * https://android-review.googlesource.com/c/kernel/common/+/2121347
103  * https://android-review.googlesource.com/c/kernel/common/+/2121348
104  * https://android-review.googlesource.com/c/kernel/common/+/2121349
105  * https://android-review.googlesource.com/c/kernel/common/+/2121350
106  * https://android-review.googlesource.com/c/kernel/common/+/2121351
107  * https://android-review.googlesource.com/c/kernel/common/+/2123452
108  * https://android-review.googlesource.com/c/kernel/common/+/2123454
109  * https://android-review.googlesource.com/c/kernel/common/+/2115621
110  *
111  */
112 #if (defined(__ANDROID_COMMON_KERNEL__) && \
113 	(LINUX_VERSION_CODE >= KERNEL_VERSION(5, 15, 0)) && \
114 	(defined  IEEE80211_MLD_MAX_NUM_LINKS))
115 #define CFG80211_SINGLE_NETDEV_MULTI_LINK_SUPPORT 1
116 #endif
117 
118 /**
119  * CFG80211_SAE_AUTH_TA_ADDR_SUPPORT
120  * Used to indicate the Linux Kernel contains support for ML SAE auth with link
121  * address as the transmitter address
122  *
123  * TODO: These changes are currently in internal review once upstreamed and
124  * backported to 5.15 need to add the respective commit-ids
125  */
126 #if (defined(__ANDROID_COMMON_KERNEL__) && \
127 	(LINUX_VERSION_CODE >= KERNEL_VERSION(5, 15, 0)) && \
128 	(defined  CFG80211_EXTERNAL_AUTH_TA_SUPPORT))
129 #define CFG80211_SAE_AUTH_TA_ADDR_SUPPORT 1
130 #endif
131 
132 /*
133  * CFG80211_MULTI_AKM_CONNECT_SUPPORT
134  * used to indicate the Linux kernel contains support for multi AKM connect
135  * support
136  *
137  * This feature was backported to Android Common Kernel 5.15 via:
138  * https://android-review.googlesource.com/c/kernel/common/+/2115619
139  */
140 #if (defined(__ANDROID_COMMON_KERNEL__) && \
141 	(LINUX_VERSION_CODE >= KERNEL_VERSION(5, 15, 0)) && \
142 	(LINUX_VERSION_CODE < KERNEL_VERSION(5, 16, 0)))
143 #define CFG80211_MULTI_AKM_CONNECT_SUPPORT 1
144 #endif
145 
146 /*
147  * WLAN_MLD_AP_STA_CONNECT_SUPPORT
148  * Used to indicate Linux Kernel supports ML connection on SAP.
149  */
150 #if (defined(__ANDROID_COMMON_KERNEL__) && \
151 	(LINUX_VERSION_CODE >= KERNEL_VERSION(5, 15, 0)) && \
152 	(defined CFG80211_MLD_AP_STA_CONNECT_SUPPORT))
153 #define WLAN_MLD_AP_STA_CONNECT_SUPPORT 1
154 #endif
155 
156 /*
157  * WLAN_MLD_AP_OWE_INFO_SUPPORT
158  * Used to indicate Linux Kernel supports ML OWE connection
159  * on SAP
160  */
161 #if (defined(__ANDROID_COMMON_KERNEL__) && \
162 	(LINUX_VERSION_CODE >= KERNEL_VERSION(5, 15, 0)) && \
163 	(defined CFG80211_MLD_AP_OWE_INFO_SUPPORT))
164 #define WLAN_MLD_AP_OWE_INFO_SUPPORT 1
165 #endif
166 
167 /*
168  * CFG80211_TX_CONTROL_PORT_LINK_SUPPORT
169  * Used to indicate Linux kernel contains support for TX control port from
170  * specific link ID
171  *
172  * This feature was introduced in Linux Kernel 6.0 via:
173  * 9b6bf4d6120a wifi: nl80211: set BSS to NULL if IS_ERR()
174  * 45aaf17c0c34 wifi: nl80211: check MLO support in authenticate
175  * d2bc52498b6b wifi: nl80211: Support MLD parameters in nl80211_set_station()
176  * 67207bab9341 wifi: cfg80211/mac80211: Support control port TX from specific link
177  * 69c3f2d30c35 wifi: nl80211: allow link ID in set_wiphy with frequency
178  * fa2ca639c4e6 wifi: nl80211: advertise MLO support
179  * e3d331c9b620 wifi: cfg80211: set country_elem to NULL
180  * 34d76a14f8f7 wifi: nl80211: reject link specific elements on assoc link
181  * df35f3164ec1 wifi: nl80211: reject fragmented and non-inheritance elements
182  * ff5c4dc4cd78 wifi: nl80211: fix some attribute policy entries
183  * 7464f665158e wifi: cfg80211: add cfg80211_get_iftype_ext_capa()
184  * 8876c67e6296 wifi: nl80211: require MLD address on link STA add/modify
185  * 9dd1953846c7 wifi: nl80211/mac80211: clarify link ID in control port TX
186  * 00b3d8401019 wifi: cfg80211/nl80211: move rx management data into a struct
187  * 6074c9e57471 wifi: cfg80211: report link ID in NL80211_CMD_FRAME
188  * 95f498bb49f7 wifi: nl80211: add MLO link ID to the NL80211_CMD_FRAME TX API
189  * 1e0b3b0b6cb5 wifi: mac80211: Align with Draft P802.11be_D1.5
190  * 062e8e02dfd4 wifi: mac80211: Align with Draft P802.11be_D2.0
191  * d776763f4808 wifi: cfg80211: debugfs: fix return type in ht40allow_map_read()
192  * 64e966d1e84b wifi: cfg80211: fix MCS divisor value
193  * 4e9c3af39820 wifi: nl80211: add EML/MLD capabilities to per-iftype capabilities
194  * 80b0ed70a271 wifi: nl80211: add RX and TX timestamp attributes
195  * ea7d50c925ce wifi: cfg80211: add a function for reporting TX status with hardware timestamps
196  * 1ff715ffa0ec wifi: cfg80211: add hardware timestamps to frame RX info
197  *
198  * This feature was backported to Android Common Kernel 5.15.74 via:
199  * https://android-review.googlesource.com/c/kernel/common/+/2253173
200  * https://android-review.googlesource.com/c/kernel/common/+/2253174
201  * https://android-review.googlesource.com/c/kernel/common/+/2253175
202  * https://android-review.googlesource.com/c/kernel/common/+/2253176
203  * https://android-review.googlesource.com/c/kernel/common/+/2253177
204  * https://android-review.googlesource.com/c/kernel/common/+/2253178
205  * https://android-review.googlesource.com/c/kernel/common/+/2253179
206  * https://android-review.googlesource.com/c/kernel/common/+/2253180
207  * https://android-review.googlesource.com/c/kernel/common/+/2253181
208  * https://android-review.googlesource.com/c/kernel/common/+/2253182
209  * https://android-review.googlesource.com/c/kernel/common/+/2253183
210  * https://android-review.googlesource.com/c/kernel/common/+/2253184
211  * https://android-review.googlesource.com/c/kernel/common/+/2253185
212  * https://android-review.googlesource.com/c/kernel/common/+/2253186
213  * https://android-review.googlesource.com/c/kernel/common/+/2253187
214  * https://android-review.googlesource.com/c/kernel/common/+/2253188
215  * https://android-review.googlesource.com/c/kernel/common/+/2253189
216  * https://android-review.googlesource.com/c/kernel/common/+/2253190
217  * https://android-review.googlesource.com/c/kernel/common/+/2253191
218  * https://android-review.googlesource.com/c/kernel/common/+/2253192
219  * https://android-review.googlesource.com/c/kernel/common/+/2253193
220  * https://android-review.googlesource.com/c/kernel/common/+/2253194
221  * https://android-review.googlesource.com/c/kernel/common/+/2267469
222  * https://android-review.googlesource.com/c/kernel/common/+/2267204
223  * https://android-review.googlesource.com/c/kernel/common/+/2267210
224  */
225 
226 #if (defined(__ANDROID_COMMON_KERNEL__) && \
227 	(LINUX_VERSION_CODE >= KERNEL_VERSION(5, 15, 74)) || \
228 	(defined IEEE80211_EHT_OPER_INFO_PRESENT))
229 #define CFG80211_TX_CONTROL_PORT_LINK_SUPPORT 1
230 #endif
231 #endif
232