1 /****************************************************************************** 2 * 3 * Copyright(c) 2007 - 2017 Realtek Corporation. 4 * 5 * This program is free software; you can redistribute it and/or modify it 6 * under the terms of version 2 of the GNU General Public License as 7 * published by the Free Software Foundation. 8 * 9 * This program is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 12 * more details. 13 * 14 *****************************************************************************/ 15 #ifndef __IOCTL_CFG80211_H__ 16 #define __IOCTL_CFG80211_H__ 17 18 #ifdef CONFIG_RTL8822CS_WIFI_HDF 19 #include "net_device.h" 20 #include "hdf_wifi_event.h" 21 22 extern struct NetDevice* get_rtl_netdev(void); 23 24 int32_t WifiScanSetChannel(const struct wiphy *wiphy, const struct WlanScanRequest *params, \ 25 struct cfg80211_scan_request *request); 26 #endif 27 28 #define RTW_CFG80211_BLOCK_DISCON_WHEN_CONNECT BIT0 29 #define RTW_CFG80211_BLOCK_DISCON_WHEN_DISCONNECT BIT1 30 31 #ifndef RTW_CFG80211_BLOCK_STA_DISCON_EVENT 32 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0)) 33 #define RTW_CFG80211_BLOCK_STA_DISCON_EVENT (RTW_CFG80211_BLOCK_DISCON_WHEN_CONNECT) 34 #else 35 #define RTW_CFG80211_BLOCK_STA_DISCON_EVENT (RTW_CFG80211_BLOCK_DISCON_WHEN_CONNECT | RTW_CFG80211_BLOCK_DISCON_WHEN_DISCONNECT) 36 #endif 37 #endif 38 39 #if defined(RTW_USE_CFG80211_STA_EVENT) 40 #undef CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER 41 #endif 42 43 #ifndef RTW_P2P_GROUP_INTERFACE 44 #define RTW_P2P_GROUP_INTERFACE 0 45 #endif 46 47 /* 48 * (RTW_P2P_GROUP_INTERFACE, RTW_DEDICATED_P2P_DEVICE) 49 * (0, 0): wlan0 + p2p0(PD+PG) 50 * (1, 0): wlan0(with PD) + dynamic PGs 51 * (1, 1): wlan0 (with dynamic PD wdev) + dynamic PGs 52 */ 53 54 #if RTW_P2P_GROUP_INTERFACE 55 #ifndef CONFIG_RTW_DYNAMIC_NDEV 56 #define CONFIG_RTW_DYNAMIC_NDEV 57 #endif 58 #ifndef RTW_SINGLE_WIPHY 59 #define RTW_SINGLE_WIPHY 60 #endif 61 #ifndef CONFIG_RADIO_WORK 62 #define CONFIG_RADIO_WORK 63 #endif 64 #ifndef RTW_DEDICATED_P2P_DEVICE 65 #define RTW_DEDICATED_P2P_DEVICE 66 #endif 67 #endif 68 69 #ifndef CONFIG_RADIO_WORK 70 #define RTW_ROCH_DURATION_ENLARGE 71 #define RTW_ROCH_BACK_OP 72 #endif 73 74 #if !defined(CONFIG_P2P) && RTW_P2P_GROUP_INTERFACE 75 #error "RTW_P2P_GROUP_INTERFACE can't be enabled when CONFIG_P2P is disabled\n" 76 #endif 77 78 #if !RTW_P2P_GROUP_INTERFACE && defined(RTW_DEDICATED_P2P_DEVICE) 79 #error "RTW_DEDICATED_P2P_DEVICE can't be enabled when RTW_P2P_GROUP_INTERFACE is disabled\n" 80 #endif 81 82 #if defined(RTW_DEDICATED_P2P_DEVICE) && (LINUX_VERSION_CODE < KERNEL_VERSION(3, 7, 0)) 83 #error "RTW_DEDICATED_P2P_DEVICE can't be enabled when kernel < 3.7.0\n" 84 #endif 85 86 #ifdef CONFIG_RTW_MESH 87 #if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 10, 0)) 88 #error "CONFIG_RTW_MESH can't be enabled when kernel < 3.10.0\n" 89 #endif 90 #endif 91 92 struct rtw_wdev_invit_info { 93 u8 state; /* 0: req, 1:rep */ 94 u8 peer_mac[ETH_ALEN]; 95 u8 group_bssid[ETH_ALEN]; 96 u8 active; 97 u8 token; 98 u8 flags; 99 u8 status; 100 u8 req_op_ch; 101 u8 rsp_op_ch; 102 }; 103 104 #define rtw_wdev_invit_info_init(invit_info) \ 105 do { \ 106 (invit_info)->state = 0xff; \ 107 _rtw_memset((invit_info)->peer_mac, 0, ETH_ALEN); \ 108 _rtw_memset((invit_info)->group_bssid, 0, ETH_ALEN); \ 109 (invit_info)->active = 0xff; \ 110 (invit_info)->token = 0; \ 111 (invit_info)->flags = 0x00; \ 112 (invit_info)->status = 0xff; \ 113 (invit_info)->req_op_ch = 0; \ 114 (invit_info)->rsp_op_ch = 0; \ 115 } while (0) 116 117 struct rtw_wdev_nego_info { 118 u8 state; /* 0: req, 1:rep, 2:conf */ 119 u8 iface_addr[ETH_ALEN]; 120 u8 peer_mac[ETH_ALEN]; 121 u8 peer_iface_addr[ETH_ALEN]; 122 u8 active; 123 u8 token; 124 u8 status; 125 u8 req_intent; 126 u8 req_op_ch; 127 u8 req_listen_ch; 128 u8 rsp_intent; 129 u8 rsp_op_ch; 130 u8 conf_op_ch; 131 }; 132 133 #define rtw_wdev_nego_info_init(nego_info) \ 134 do { \ 135 (nego_info)->state = 0xff; \ 136 _rtw_memset((nego_info)->iface_addr, 0, ETH_ALEN); \ 137 _rtw_memset((nego_info)->peer_mac, 0, ETH_ALEN); \ 138 _rtw_memset((nego_info)->peer_iface_addr, 0, ETH_ALEN); \ 139 (nego_info)->active = 0xff; \ 140 (nego_info)->token = 0; \ 141 (nego_info)->status = 0xff; \ 142 (nego_info)->req_intent = 0xff; \ 143 (nego_info)->req_op_ch = 0; \ 144 (nego_info)->req_listen_ch = 0; \ 145 (nego_info)->rsp_intent = 0xff; \ 146 (nego_info)->rsp_op_ch = 0; \ 147 (nego_info)->conf_op_ch = 0; \ 148 } while (0) 149 150 struct rtw_wdev_priv { 151 struct wireless_dev *rtw_wdev; 152 153 _adapter *padapter; 154 155 #if RTW_CFG80211_BLOCK_STA_DISCON_EVENT 156 u8 not_indic_disco; 157 #endif 158 159 struct cfg80211_scan_request *scan_request; 160 _lock scan_req_lock; 161 162 struct cfg80211_connect_params *connect_req; 163 _lock connect_req_lock; 164 165 struct net_device *pmon_ndev;/* for monitor interface */ 166 char ifname_mon[IFNAMSIZ + 1]; /* interface name for monitor interface */ 167 168 u8 p2p_enabled; 169 systime probe_resp_ie_update_time; 170 171 u8 provdisc_req_issued; 172 173 struct rtw_wdev_invit_info invit_info; 174 struct rtw_wdev_nego_info nego_info; 175 176 u8 bandroid_scan; 177 bool block; 178 bool block_scan; 179 180 /** 181 * mgmt_regs: bitmap of management frame subtypes registered for the 182 * given interface 183 * mcast_mgmt_regs: mcast RX is needed on this interface for these 184 * subtypes 185 */ 186 u32 mgmt_regs; 187 /* u32 mcast_mgmt_regs; */ 188 189 u8 is_mgmt_tx; 190 u16 mgmt_tx_cookie; 191 192 _mutex roch_mutex; 193 194 #ifdef CONFIG_CONCURRENT_MODE 195 ATOMIC_T switch_ch_to; 196 #endif 197 198 #if defined(CONFIG_RTW_CFGVENDOR_RANDOM_MAC_OUI) || defined(CONFIG_RTW_SCAN_RAND) 199 u8 pno_mac_addr[ETH_ALEN]; 200 u16 pno_scan_seq_num; 201 #endif 202 203 #ifdef CONFIG_RTW_CFGVENDOR_RSSIMONITOR 204 s8 rssi_monitor_max; 205 s8 rssi_monitor_min; 206 u8 rssi_monitor_enable; 207 #endif 208 209 }; 210 211 enum external_auth_action { 212 EXTERNAL_AUTH_START, 213 EXTERNAL_AUTH_ABORT, 214 }; 215 216 struct rtw_external_auth_params { 217 enum external_auth_action action; 218 u8 bssid[ETH_ALEN]__aligned(2); 219 struct cfg80211_ssid ssid; 220 unsigned int key_mgmt_suite; 221 u16 status; 222 u8 pmkid[PMKID_LEN]; 223 }; 224 225 bool rtw_cfg80211_is_connect_requested(_adapter *adapter); 226 227 #if RTW_CFG80211_BLOCK_STA_DISCON_EVENT 228 #define rtw_wdev_not_indic_disco(rtw_wdev_data) ((rtw_wdev_data)->not_indic_disco) 229 #define rtw_wdev_set_not_indic_disco(rtw_wdev_data, val) do { (rtw_wdev_data)->not_indic_disco = (val); } while (0) 230 #else 231 #define rtw_wdev_not_indic_disco(rtw_wdev_data) 0 232 #define rtw_wdev_set_not_indic_disco(rtw_wdev_data, val) do {} while (0) 233 #endif 234 235 #define rtw_wdev_free_connect_req(rtw_wdev_data) \ 236 do { \ 237 if ((rtw_wdev_data)->connect_req) { \ 238 rtw_mfree((u8 *)(rtw_wdev_data)->connect_req, sizeof(*(rtw_wdev_data)->connect_req)); \ 239 (rtw_wdev_data)->connect_req = NULL; \ 240 } \ 241 } while (0) 242 243 #define wdev_to_ndev(w) ((w)->netdev) 244 #define wdev_to_wiphy(w) ((w)->wiphy) 245 #define ndev_to_wdev(n) ((n)->ieee80211_ptr) 246 247 struct rtw_wiphy_data { 248 struct dvobj_priv *dvobj; 249 250 #ifndef RTW_SINGLE_WIPHY 251 _adapter *adapter; 252 #endif 253 254 #if defined(RTW_DEDICATED_P2P_DEVICE) 255 struct wireless_dev *pd_wdev; /* P2P device wdev */ 256 #endif 257 258 _list async_regd_change_list; 259 _mutex async_regd_change_mutex; 260 _workitem async_regd_change_work; 261 262 s16 txpwr_total_lmt_mbm; /* EIRP */ 263 s16 txpwr_total_target_mbm; /* EIRP */ 264 }; 265 266 #define rtw_wiphy_priv(wiphy) ((struct rtw_wiphy_data *)wiphy_priv(wiphy)) 267 #define wiphy_to_dvobj(wiphy) (((struct rtw_wiphy_data *)wiphy_priv(wiphy))->dvobj) 268 #ifdef RTW_SINGLE_WIPHY 269 #define wiphy_to_adapter(wiphy) (dvobj_get_primary_adapter(wiphy_to_dvobj(wiphy))) 270 #else 271 #define wiphy_to_adapter(wiphy) (((struct rtw_wiphy_data *)wiphy_priv(wiphy))->adapter) 272 #endif 273 274 #if defined(RTW_DEDICATED_P2P_DEVICE) 275 #define wiphy_to_pd_wdev(wiphy) (rtw_wiphy_priv(wiphy)->pd_wdev) 276 #else 277 #define wiphy_to_pd_wdev(wiphy) NULL 278 #endif 279 280 #define WIPHY_FMT "%s" 281 #define WIPHY_ARG(wiphy) wiphy_name(wiphy) 282 #define FUNC_WIPHY_FMT "%s("WIPHY_FMT")" 283 #define FUNC_WIPHY_ARG(wiphy) __func__, WIPHY_ARG(wiphy) 284 285 #define SET_CFG80211_MGMT_REGS(w, t) (w |= BIT(t >> 4)) 286 #define CLR_CFG80211_MGMT_REGS(w, t) (w &= (~BIT(t >> 4))) 287 #define GET_CFG80211_MGMT_REGS(w, t) ((w & BIT(t >> 4)) > 0) 288 289 #define SET_CFG80211_REPORT_MGMT(w, t) (SET_CFG80211_MGMT_REGS(w->mgmt_regs, t)) 290 #define CLR_CFG80211_REPORT_MGMT(w, t) (CLR_CFG80211_MGMT_REGS(w->mgmt_regs, t)) 291 #define GET_CFG80211_REPORT_MGMT(w, t) (GET_CFG80211_MGMT_REGS(w->mgmt_regs, t)) 292 293 struct wiphy *rtw_wiphy_alloc(_adapter *padapter, struct device *dev); 294 void rtw_wiphy_free(struct wiphy *wiphy); 295 int rtw_wiphy_register(struct wiphy *wiphy); 296 void rtw_wiphy_unregister(struct wiphy *wiphy); 297 298 int rtw_wdev_alloc(_adapter *padapter, struct wiphy *wiphy); 299 void rtw_wdev_free(struct wireless_dev *wdev); 300 void rtw_wdev_unregister(struct wireless_dev *wdev); 301 302 int rtw_cfg80211_ndev_res_alloc(_adapter *adapter); 303 void rtw_cfg80211_ndev_res_free(_adapter *adapter); 304 int rtw_cfg80211_ndev_res_register(_adapter *adapter); 305 void rtw_cfg80211_ndev_res_unregister(_adapter *adapter); 306 307 int rtw_cfg80211_dev_res_alloc(struct dvobj_priv *dvobj); 308 void rtw_cfg80211_dev_res_free(struct dvobj_priv *dvobj); 309 int rtw_cfg80211_dev_res_register(struct dvobj_priv *dvobj); 310 void rtw_cfg80211_dev_res_unregister(struct dvobj_priv *dvobj); 311 s16 rtw_cfg80211_dev_get_total_txpwr_lmt_mbm(struct dvobj_priv *dvobj); 312 s16 rtw_cfg80211_dev_get_total_txpwr_target_mbm(struct dvobj_priv *dvobj); 313 314 void rtw_cfg80211_init_wdev_data(_adapter *padapter); 315 316 void rtw_cfg80211_unlink_bss(_adapter *padapter, struct wlan_network *pnetwork); 317 void rtw_cfg80211_surveydone_event_callback(_adapter *padapter); 318 struct cfg80211_bss *rtw_cfg80211_inform_bss(_adapter *padapter, struct wlan_network *pnetwork); 319 int rtw_cfg80211_check_bss(_adapter *padapter); 320 void rtw_cfg80211_ibss_indicate_connect(_adapter *padapter); 321 void rtw_cfg80211_indicate_connect(_adapter *padapter); 322 void rtw_cfg80211_indicate_disconnect(_adapter *padapter, u16 reason, u8 locally_generated); 323 void rtw_cfg80211_indicate_scan_done(_adapter *adapter, bool aborted); 324 u32 rtw_cfg80211_wait_scan_req_empty(_adapter *adapter, u32 timeout_ms); 325 326 #ifdef CONFIG_CONCURRENT_MODE 327 u8 rtw_cfg80211_scan_via_buddy(_adapter *padapter, struct cfg80211_scan_request *request); 328 void rtw_cfg80211_indicate_scan_done_for_buddy(_adapter *padapter, bool bscan_aborted); 329 #endif 330 331 #ifdef CONFIG_AP_MODE 332 void rtw_cfg80211_indicate_sta_assoc(_adapter *padapter, u8 *pmgmt_frame, uint frame_len); 333 void rtw_cfg80211_indicate_sta_disassoc(_adapter *padapter, const u8 *da, unsigned short reason); 334 int rtw_cfg80211_set_mgnt_wpsp2pie(struct net_device *net, char *buf, int len, int type); 335 #endif /* CONFIG_AP_MODE */ 336 337 void rtw_cfg80211_set_is_roch(_adapter *adapter, bool val); 338 bool rtw_cfg80211_get_is_roch(_adapter *adapter); 339 bool rtw_cfg80211_is_ro_ch_once(_adapter *adapter); 340 void rtw_cfg80211_set_last_ro_ch_time(_adapter *adapter); 341 s32 rtw_cfg80211_get_last_ro_ch_passing_ms(_adapter *adapter); 342 343 #ifdef CONFIG_P2P 344 int rtw_cfg80211_iface_has_p2p_group_cap(_adapter *adapter); 345 int rtw_cfg80211_is_p2p_scan(_adapter *adapter); 346 #if defined(RTW_DEDICATED_P2P_DEVICE) 347 int rtw_cfg80211_redirect_pd_wdev(struct wiphy *wiphy, u8 *ra, struct wireless_dev **wdev); 348 int rtw_cfg80211_is_scan_by_pd_wdev(_adapter *adapter); 349 int rtw_pd_iface_alloc(struct wiphy *wiphy, const char *name, struct wireless_dev **pd_wdev); 350 void rtw_pd_iface_free(struct wiphy *wiphy); 351 #endif 352 #endif /* CONFIG_P2P */ 353 354 void rtw_cfg80211_set_is_mgmt_tx(_adapter *adapter, u8 val); 355 u8 rtw_cfg80211_get_is_mgmt_tx(_adapter *adapter); 356 u8 rtw_mgnt_tx_handler(_adapter *adapter, u8 *buf); 357 358 void rtw_cfg80211_issue_p2p_provision_request(_adapter *padapter, const u8 *buf, size_t len); 359 360 void rtw_cfg80211_rx_p2p_action_public(_adapter *padapter, union recv_frame *rframe); 361 void rtw_cfg80211_rx_action_p2p(_adapter *padapter, union recv_frame *rframe); 362 void rtw_cfg80211_rx_action(_adapter *adapter, union recv_frame *rframe, const char *msg); 363 void rtw_cfg80211_rx_mframe(_adapter *adapter, union recv_frame *rframe, const char *msg); 364 void rtw_cfg80211_rx_probe_request(_adapter *padapter, union recv_frame *rframe); 365 366 void rtw_cfg80211_external_auth_request(_adapter *padapter, union recv_frame *rframe); 367 void rtw_cfg80211_external_auth_status(struct wiphy *wiphy, struct net_device *dev, 368 struct rtw_external_auth_params *params); 369 370 bool rtw_cfg80211_pwr_mgmt(_adapter *adapter); 371 #ifdef CONFIG_RTW_80211K 372 void rtw_cfg80211_rx_rrm_action(_adapter *adapter, union recv_frame *rframe); 373 #endif 374 375 #ifdef CONFIG_RFKILL_POLL 376 void rtw_cfg80211_init_rfkill(struct wiphy *wiphy); 377 void rtw_cfg80211_deinit_rfkill(struct wiphy *wiphy); 378 #endif 379 380 #ifdef CONFIG_RTL8822CS_WIFI_HDF 381 #define rtw_cfg80211_rx_mgmt(wdev, freq, sig_dbm, buf, len, gfp) HdfWifiEventRxMgmt(get_rtl_netdev(), freq, 0, buf, len) 382 #else 383 #if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 4, 0)) && !defined(COMPAT_KERNEL_RELEASE) 384 #define rtw_cfg80211_rx_mgmt(wdev, freq, sig_dbm, buf, len, gfp) cfg80211_rx_mgmt(wdev_to_ndev(wdev), freq, buf, len, gfp) 385 #elif (LINUX_VERSION_CODE < KERNEL_VERSION(3, 6, 0)) 386 #define rtw_cfg80211_rx_mgmt(wdev, freq, sig_dbm, buf, len, gfp) cfg80211_rx_mgmt(wdev_to_ndev(wdev), freq, sig_dbm, buf, len, gfp) 387 #elif (LINUX_VERSION_CODE < KERNEL_VERSION(3, 12, 0)) 388 #define rtw_cfg80211_rx_mgmt(wdev, freq, sig_dbm, buf, len, gfp) cfg80211_rx_mgmt(wdev, freq, sig_dbm, buf, len, gfp) 389 #elif (LINUX_VERSION_CODE < KERNEL_VERSION(3 , 18 , 0)) 390 #define rtw_cfg80211_rx_mgmt(wdev , freq , sig_dbm , buf , len , gfp) cfg80211_rx_mgmt(wdev , freq , sig_dbm , buf , len , 0 , gfp) 391 #else 392 #define rtw_cfg80211_rx_mgmt(wdev , freq , sig_dbm , buf , len , gfp) cfg80211_rx_mgmt(wdev , freq , sig_dbm , buf , len , 0) 393 #endif 394 #endif 395 396 #if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 4, 0)) && !defined(COMPAT_KERNEL_RELEASE) 397 #define rtw_cfg80211_send_rx_assoc(adapter, bss, buf, len) cfg80211_send_rx_assoc((adapter)->pnetdev, buf, len) 398 #else 399 #define rtw_cfg80211_send_rx_assoc(adapter, bss, buf, len) cfg80211_send_rx_assoc((adapter)->pnetdev, bss, buf, len) 400 #endif 401 402 #if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 6, 0)) 403 #define rtw_cfg80211_mgmt_tx_status(wdev, cookie, buf, len, ack, gfp) cfg80211_mgmt_tx_status(wdev_to_ndev(wdev), cookie, buf, len, ack, gfp) 404 #else 405 #ifdef CONFIG_RTL8822CS_WIFI_HDF 406 #define rtw_cfg80211_mgmt_tx_status(wdev, cookie, buf, len, ack, gfp) HdfWifiEventMgmtTxStatus(get_rtl_netdev(), buf, len, ack) 407 #else 408 #define rtw_cfg80211_mgmt_tx_status(wdev, cookie, buf, len, ack, gfp) cfg80211_mgmt_tx_status(wdev, cookie, buf, len, ack, gfp) 409 #endif 410 #endif 411 412 #if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 6, 0)) 413 #define rtw_cfg80211_ready_on_channel(wdev, cookie, chan, channel_type, duration, gfp) cfg80211_ready_on_channel(wdev_to_ndev(wdev), cookie, chan, channel_type, duration, gfp) 414 #define rtw_cfg80211_remain_on_channel_expired(wdev, cookie, chan, chan_type, gfp) cfg80211_remain_on_channel_expired(wdev_to_ndev(wdev), cookie, chan, chan_type, gfp) 415 #elif (LINUX_VERSION_CODE < KERNEL_VERSION(3, 8, 0)) 416 #define rtw_cfg80211_ready_on_channel(wdev, cookie, chan, channel_type, duration, gfp) cfg80211_ready_on_channel(wdev, cookie, chan, channel_type, duration, gfp) 417 #define rtw_cfg80211_remain_on_channel_expired(wdev, cookie, chan, chan_type, gfp) cfg80211_remain_on_channel_expired(wdev, cookie, chan, chan_type, gfp) 418 #else 419 #define rtw_cfg80211_ready_on_channel(wdev, cookie, chan, channel_type, duration, gfp) cfg80211_ready_on_channel(wdev, cookie, chan, duration, gfp) 420 #define rtw_cfg80211_remain_on_channel_expired(wdev, cookie, chan, chan_type, gfp) cfg80211_remain_on_channel_expired(wdev, cookie, chan, gfp) 421 #endif 422 423 #define rtw_cfg80211_connect_result(wdev, bssid, req_ie, req_ie_len, resp_ie, resp_ie_len, status, gfp) cfg80211_connect_result(wdev_to_ndev(wdev), bssid, req_ie, req_ie_len, resp_ie, resp_ie_len, status, gfp) 424 425 #if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 2, 0)) 426 #define rtw_cfg80211_disconnected(wdev, reason, ie, ie_len, locally_generated, gfp) cfg80211_disconnected(wdev_to_ndev(wdev), reason, ie, ie_len, gfp) 427 #else 428 #define rtw_cfg80211_disconnected(wdev, reason, ie, ie_len, locally_generated, gfp) cfg80211_disconnected(wdev_to_ndev(wdev), reason, ie, ie_len, locally_generated, gfp) 429 #endif 430 431 #ifdef CONFIG_RTW_80211R 432 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 10, 0)) 433 #define rtw_cfg80211_ft_event(adapter, parm) cfg80211_ft_event((adapter)->pnetdev, parm) 434 #else 435 #error "Cannot support FT for KERNEL_VERSION < 3.10\n" 436 #endif 437 #endif 438 439 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 0, 0)) 440 #define rtw_cfg80211_notify_new_peer_candidate(wdev, addr, ie, ie_len, sig_dbm, gfp) cfg80211_notify_new_peer_candidate(wdev_to_ndev(wdev), addr, ie, ie_len, sig_dbm, gfp) 441 #elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 0, 0)) 442 #define rtw_cfg80211_notify_new_peer_candidate(wdev, addr, ie, ie_len, sig_dbm, gfp) cfg80211_notify_new_peer_candidate(wdev_to_ndev(wdev), addr, ie, ie_len, gfp) 443 #endif 444 445 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 5, 0)) 446 u8 rtw_cfg80211_ch_switch_notify(_adapter *adapter, u8 ch, u8 bw, u8 offset, u8 ht, bool started); 447 #endif 448 449 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)) && (LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 31)) 450 #define IEEE80211_CHAN_NO_HT40PLUS IEEE80211_CHAN_NO_FAT_ABOVE 451 #define IEEE80211_CHAN_NO_HT40MINUS IEEE80211_CHAN_NO_FAT_BELOW 452 #endif 453 454 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 26)) && (LINUX_VERSION_CODE < KERNEL_VERSION(4, 7, 0)) 455 #define NL80211_BAND_2GHZ IEEE80211_BAND_2GHZ 456 #define NL80211_BAND_5GHZ IEEE80211_BAND_5GHZ 457 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 6, 0)) 458 #define NL80211_BAND_60GHZ IEEE80211_BAND_60GHZ 459 #endif 460 #define NUM_NL80211_BANDS IEEE80211_NUM_BANDS 461 #endif 462 463 #ifdef CONFIG_RTL8822CS_WIFI_HDF 464 int cfg80211_rtw_disconnect(struct wiphy *wiphy, struct net_device *ndev, u16 reason_code); 465 int cfg80211_rtw_set_default_key(struct wiphy *wiphy, 466 struct net_device *ndev, u8 key_index 467 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 38)) || defined(COMPAT_KERNEL_RELEASE) 468 , bool unicast, bool multicast 469 #endif 470 ); 471 int cfg80211_rtw_change_iface(struct wiphy *wiphy, 472 struct net_device *ndev, 473 enum nl80211_iftype type, 474 #if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 12, 0)) 475 u32 *flags, 476 #endif 477 struct vif_params *params); 478 479 480 int cfg80211_rtw_scan(struct wiphy *wiphy 481 #if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 6, 0)) 482 , struct net_device *ndev 483 #endif 484 , struct cfg80211_scan_request *request); 485 int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev, 486 struct cfg80211_connect_params *sme); 487 488 int cfg80211_rtw_add_key(struct wiphy *wiphy, struct net_device *ndev 489 , u8 key_index 490 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 37)) || defined(COMPAT_KERNEL_RELEASE) 491 , bool pairwise 492 #endif 493 , const u8 *mac_addr, struct key_params *params); 494 495 int cfg80211_rtw_del_key(struct wiphy *wiphy, struct net_device *ndev, 496 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 37)) || defined(COMPAT_KERNEL_RELEASE) 497 u8 key_index, bool pairwise, const u8 *mac_addr); 498 #else /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 37)) */ 499 u8 key_index, const u8 *mac_addr); 500 #endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 37)) */ 501 502 int cfg80211_rtw_set_txpower(struct wiphy *wiphy, 503 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)) 504 struct wireless_dev *wdev, 505 #endif 506 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 36)) || defined(COMPAT_KERNEL_RELEASE) 507 enum nl80211_tx_power_setting type, int mbm); 508 #else 509 enum tx_power_setting type, int dbm); 510 #endif 511 int rtw_cfg80211_monitor_if_close(struct net_device *ndev); 512 int rtw_cfg80211_monitor_if_open(struct net_device *ndev); 513 int rtw_cfg80211_monitor_if_xmit_entry(struct sk_buff *skb, struct net_device *ndev); 514 int rtw_cfg80211_monitor_if_set_mac_address(struct net_device *ndev, void *addr); 515 struct wiphy *oal_wiphy_get(void); 516 #endif 517 518 extern enum nl80211_band _rtw_band_to_nl80211_band[]; 519 #define rtw_band_to_nl80211_band(band) (((band) < BAND_MAX) ? _rtw_band_to_nl80211_band[(band)] : NUM_NL80211_BANDS) 520 521 extern BAND_TYPE _nl80211_band_to_rtw_band[]; 522 #define nl80211_band_to_rtw_band(band) (((band) < NUM_NL80211_BANDS) ? _nl80211_band_to_rtw_band[(band)] : BAND_MAX) 523 524 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 36)) 525 #define NL80211_TX_POWER_AUTOMATIC TX_POWER_AUTOMATIC 526 #define NL80211_TX_POWER_LIMITED TX_POWER_LIMITED 527 #define NL80211_TX_POWER_FIXED TX_POWER_FIXED 528 #endif 529 530 #include "wifi_regd.h" 531 #include "rtw_cfgvendor.h" 532 533 #endif /* __IOCTL_CFG80211_H__ */ 534