1*5113495bSYour Name /* 2*5113495bSYour Name * Copyright (c) 2021, The Linux Foundation. All rights reserved. 3*5113495bSYour Name * Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved. 4*5113495bSYour Name * 5*5113495bSYour Name * Permission to use, copy, modify, and/or distribute this software for any 6*5113495bSYour Name * purpose with or without fee is hereby granted, provided that the above 7*5113495bSYour Name * copyright notice and this permission notice appear in all copies. 8*5113495bSYour Name 9*5113495bSYour Name * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10*5113495bSYour Name * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11*5113495bSYour Name * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12*5113495bSYour Name * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13*5113495bSYour Name * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14*5113495bSYour Name * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15*5113495bSYour Name * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16*5113495bSYour Name */ 17*5113495bSYour Name 18*5113495bSYour Name /** 19*5113495bSYour Name * DOC: os_if_son.h 20*5113495bSYour Name * 21*5113495bSYour Name * WLAN Host Device Driver file for son (Self Organizing Network) 22*5113495bSYour Name * support. 23*5113495bSYour Name * 24*5113495bSYour Name */ 25*5113495bSYour Name #ifndef _OS_IF_SON_H_ 26*5113495bSYour Name #define _OS_IF_SON_H_ 27*5113495bSYour Name 28*5113495bSYour Name #include <qdf_types.h> 29*5113495bSYour Name #include <wlan_objmgr_vdev_obj.h> 30*5113495bSYour Name #include <wlan_objmgr_psoc_obj.h> 31*5113495bSYour Name #include <wlan_objmgr_pdev_obj.h> 32*5113495bSYour Name #include <wlan_reg_ucfg_api.h> 33*5113495bSYour Name #include <ieee80211_external.h> 34*5113495bSYour Name 35*5113495bSYour Name #define INVALID_WIDTH 0xFF 36*5113495bSYour Name 37*5113495bSYour Name /** 38*5113495bSYour Name * struct son_callbacks - struct containing callback to non-converged driver 39*5113495bSYour Name * @os_if_is_acs_in_progress: whether acs is in progress or not 40*5113495bSYour Name * @os_if_set_chan_ext_offset: set chan extend offset 41*5113495bSYour Name * @os_if_get_chan_ext_offset: get chan extend offset 42*5113495bSYour Name * @os_if_set_bandwidth: set band width 43*5113495bSYour Name * @os_if_get_bandwidth: get band width 44*5113495bSYour Name * @os_if_set_chan: set chan 45*5113495bSYour Name * @os_if_get_sta_count: get station count 46*5113495bSYour Name * @os_if_set_country_code: set country code 47*5113495bSYour Name * @os_if_set_candidate_freq: set freq to switch after radar detection 48*5113495bSYour Name * @os_if_get_candidate_freq: get freq to switch after radar detection 49*5113495bSYour Name * @os_if_set_phymode: set phy mode 50*5113495bSYour Name * @os_if_get_phymode: get phy mode 51*5113495bSYour Name * @os_if_get_rx_nss: Gets number of RX spatial streams 52*5113495bSYour Name * @os_if_set_acl_policy: set acl policy 53*5113495bSYour Name * @os_if_get_acl_policy: get acl policy 54*5113495bSYour Name * @os_if_add_acl_mac: add mac to acl 55*5113495bSYour Name * @os_if_del_acl_mac: del mac from acl 56*5113495bSYour Name * @os_if_kickout_mac: kickout sta with given mac 57*5113495bSYour Name * @os_if_set_chwidth: set chan width 58*5113495bSYour Name * @os_if_get_chwidth: get chan width 59*5113495bSYour Name * @os_if_get_sta_list: get sta list 60*5113495bSYour Name * @os_if_get_sta_space: get sta space 61*5113495bSYour Name * @os_if_deauth_sta: Deauths the target peer 62*5113495bSYour Name * @os_if_modify_acl: Add/Del target peer in ACL 63*5113495bSYour Name * @os_if_get_vdev_by_netdev: Get vdev from net device 64*5113495bSYour Name * @os_if_trigger_objmgr_object_creation: Trigger objmgr object creation 65*5113495bSYour Name * @os_if_trigger_objmgr_object_deletion: Trigger objmgr object deletion 66*5113495bSYour Name * @os_if_start_acs: Trigger ACS 67*5113495bSYour Name * @os_if_set_acs_channels: Set channel list for ACS 68*5113495bSYour Name * @os_if_get_acs_report: Gets the ACS report 69*5113495bSYour Name * @os_if_get_node_info: Gets the datarate info for node 70*5113495bSYour Name * @os_if_get_peer_capability: Gets peer capability 71*5113495bSYour Name * @os_if_get_peer_max_mcs_idx: Gets peer max MCS index 72*5113495bSYour Name * @os_if_get_sta_stats: Get sta stats 73*5113495bSYour Name */ 74*5113495bSYour Name struct son_callbacks { 75*5113495bSYour Name uint32_t (*os_if_is_acs_in_progress)(struct wlan_objmgr_vdev *vdev); 76*5113495bSYour Name int (*os_if_set_chan_ext_offset)( 77*5113495bSYour Name struct wlan_objmgr_vdev *vdev, 78*5113495bSYour Name enum sec20_chan_offset son_chan_ext_offset); 79*5113495bSYour Name enum sec20_chan_offset (*os_if_get_chan_ext_offset)( 80*5113495bSYour Name struct wlan_objmgr_vdev *vdev); 81*5113495bSYour Name int (*os_if_set_bandwidth)(struct wlan_objmgr_vdev *vdev, 82*5113495bSYour Name uint32_t son_bandwidth); 83*5113495bSYour Name uint32_t (*os_if_get_bandwidth)(struct wlan_objmgr_vdev *vdev); 84*5113495bSYour Name int (*os_if_set_chan)(struct wlan_objmgr_vdev *vdev, int chan, 85*5113495bSYour Name enum wlan_band_id son_band); 86*5113495bSYour Name uint32_t (*os_if_get_sta_count)(struct wlan_objmgr_vdev *vdev); 87*5113495bSYour Name int (*os_if_set_country_code)(struct wlan_objmgr_vdev *vdev, 88*5113495bSYour Name char *country_code); 89*5113495bSYour Name int (*os_if_set_candidate_freq)(struct wlan_objmgr_vdev *vdev, 90*5113495bSYour Name qdf_freq_t freq); 91*5113495bSYour Name qdf_freq_t (*os_if_get_candidate_freq)(struct wlan_objmgr_vdev *vdev); 92*5113495bSYour Name int (*os_if_set_phymode)(struct wlan_objmgr_vdev *vdev, 93*5113495bSYour Name enum ieee80211_phymode mode); 94*5113495bSYour Name enum ieee80211_phymode (*os_if_get_phymode)( 95*5113495bSYour Name struct wlan_objmgr_vdev *vdev); 96*5113495bSYour Name uint8_t (*os_if_get_rx_nss)(struct wlan_objmgr_vdev *vdev); 97*5113495bSYour Name QDF_STATUS (*os_if_set_acl_policy)(struct wlan_objmgr_vdev *vdev, 98*5113495bSYour Name ieee80211_acl_cmd son_acl_policy); 99*5113495bSYour Name ieee80211_acl_cmd (*os_if_get_acl_policy)( 100*5113495bSYour Name struct wlan_objmgr_vdev *vdev); 101*5113495bSYour Name int (*os_if_add_acl_mac)(struct wlan_objmgr_vdev *vdev, 102*5113495bSYour Name struct qdf_mac_addr *acl_mac); 103*5113495bSYour Name int (*os_if_del_acl_mac)(struct wlan_objmgr_vdev *vdev, 104*5113495bSYour Name struct qdf_mac_addr *acl_mac); 105*5113495bSYour Name int (*os_if_kickout_mac)(struct wlan_objmgr_vdev *vdev, 106*5113495bSYour Name struct qdf_mac_addr *acl_mac); 107*5113495bSYour Name int (*os_if_set_chwidth)(struct wlan_objmgr_vdev *vdev, 108*5113495bSYour Name enum ieee80211_cwm_width son_chwidth); 109*5113495bSYour Name enum ieee80211_cwm_width (*os_if_get_chwidth)( 110*5113495bSYour Name struct wlan_objmgr_vdev *vdev); 111*5113495bSYour Name void (*os_if_get_sta_list)(struct wlan_objmgr_vdev *vdev, 112*5113495bSYour Name struct ieee80211req_sta_info *req, 113*5113495bSYour Name uint32_t *space); 114*5113495bSYour Name uint32_t (*os_if_get_sta_space)(struct wlan_objmgr_vdev *vdev); 115*5113495bSYour Name void (*os_if_deauth_sta)(struct wlan_objmgr_vdev *vdev, 116*5113495bSYour Name uint8_t *peer_mac, 117*5113495bSYour Name bool ignore_frame); 118*5113495bSYour Name void (*os_if_modify_acl)(struct wlan_objmgr_vdev *vdev, 119*5113495bSYour Name uint8_t *peer_mac, 120*5113495bSYour Name bool allow_auth); 121*5113495bSYour Name struct wlan_objmgr_vdev *(*os_if_get_vdev_by_netdev) 122*5113495bSYour Name (struct net_device *dev); 123*5113495bSYour Name QDF_STATUS (*os_if_trigger_objmgr_object_creation) 124*5113495bSYour Name (enum wlan_umac_comp_id id); 125*5113495bSYour Name QDF_STATUS (*os_if_trigger_objmgr_object_deletion) 126*5113495bSYour Name (enum wlan_umac_comp_id id); 127*5113495bSYour Name int (*os_if_start_acs)(struct wlan_objmgr_vdev *vdev, uint8_t enable); 128*5113495bSYour Name int (*os_if_set_acs_channels)(struct wlan_objmgr_vdev *vdev, 129*5113495bSYour Name struct ieee80211req_athdbg *req); 130*5113495bSYour Name int (*os_if_get_acs_report)(struct wlan_objmgr_vdev *vdev, 131*5113495bSYour Name struct ieee80211_acs_dbg *acs_r); 132*5113495bSYour Name QDF_STATUS (*os_if_get_node_info)(struct wlan_objmgr_vdev *vdev, 133*5113495bSYour Name uint8_t *mac_addr, 134*5113495bSYour Name wlan_node_info *nodeinfo); 135*5113495bSYour Name QDF_STATUS (*os_if_get_peer_capability)(struct wlan_objmgr_vdev *vdev, 136*5113495bSYour Name struct wlan_objmgr_peer *peer, 137*5113495bSYour Name wlan_peer_cap *cap); 138*5113495bSYour Name uint32_t (*os_if_get_peer_max_mcs_idx)(struct wlan_objmgr_vdev *vdev, 139*5113495bSYour Name struct wlan_objmgr_peer *peer); 140*5113495bSYour Name int (*os_if_get_sta_stats)(struct wlan_objmgr_vdev *vdev, 141*5113495bSYour Name uint8_t *mac_addr, 142*5113495bSYour Name struct ieee80211_nodestats *stats); 143*5113495bSYour Name }; 144*5113495bSYour Name 145*5113495bSYour Name /** 146*5113495bSYour Name * enum os_if_son_vendor_cmd_type - Enum to specify get/set command 147*5113495bSYour Name * @OS_IF_SON_VENDOR_GET_CMD: Get type command called from wificonfiguration 148*5113495bSYour Name * vendor command handler 149*5113495bSYour Name * @OS_IF_SON_VENDOR_SET_CMD: Set type command called from wificonfiguration 150*5113495bSYour Name * vendor command handler 151*5113495bSYour Name * @OS_IF_SON_VENDOR_MAX_CMD: Max cmd type 152*5113495bSYour Name */ 153*5113495bSYour Name enum os_if_son_vendor_cmd_type { 154*5113495bSYour Name OS_IF_SON_VENDOR_GET_CMD, 155*5113495bSYour Name OS_IF_SON_VENDOR_SET_CMD, 156*5113495bSYour Name OS_IF_SON_VENDOR_MAX_CMD, 157*5113495bSYour Name }; 158*5113495bSYour Name 159*5113495bSYour Name /** 160*5113495bSYour Name * struct os_if_son_rx_ops - Contains cb for os_if rx ops used by SON 161*5113495bSYour Name * @parse_generic_nl_cmd: Callback for parsing generic nl vendor commands 162*5113495bSYour Name */ 163*5113495bSYour Name struct os_if_son_rx_ops { 164*5113495bSYour Name int (*parse_generic_nl_cmd)(struct wiphy *wiphy, 165*5113495bSYour Name struct wireless_dev *wdev, void *params, 166*5113495bSYour Name enum os_if_son_vendor_cmd_type type); 167*5113495bSYour Name }; 168*5113495bSYour Name 169*5113495bSYour Name /** 170*5113495bSYour Name * struct wlan_os_if_son_ops - Contains cb for os_if txrx ops used by SON 171*5113495bSYour Name * @son_osif_rx_ops: structure to contain rx ops 172*5113495bSYour Name */ 173*5113495bSYour Name struct wlan_os_if_son_ops { 174*5113495bSYour Name struct os_if_son_rx_ops son_osif_rx_ops; 175*5113495bSYour Name }; 176*5113495bSYour Name 177*5113495bSYour Name /** 178*5113495bSYour Name * wlan_os_if_son_ops_register_cb() - Set son os_if ops cb 179*5113495bSYour Name * @handler: son os_if ops cb table 180*5113495bSYour Name * 181*5113495bSYour Name * Return: void 182*5113495bSYour Name */ 183*5113495bSYour Name void 184*5113495bSYour Name wlan_os_if_son_ops_register_cb(void (*handler)(struct wlan_os_if_son_ops *)); 185*5113495bSYour Name 186*5113495bSYour Name /** 187*5113495bSYour Name * os_if_son_register_osif_ops() - Register son os_if ops with os_if 188*5113495bSYour Name * 189*5113495bSYour Name * Return: void 190*5113495bSYour Name */ 191*5113495bSYour Name void os_if_son_register_osif_ops(void); 192*5113495bSYour Name 193*5113495bSYour Name /** 194*5113495bSYour Name * os_if_son_register_lmac_if_ops() - Register son lmac_if rx_ops with lmac 195*5113495bSYour Name * @psoc: objmrg psoc handle 196*5113495bSYour Name * 197*5113495bSYour Name * Register son lmac_if rx_ops with lmac to be called by SON DLKM 198*5113495bSYour Name * 199*5113495bSYour Name * Return: void 200*5113495bSYour Name */ 201*5113495bSYour Name void os_if_son_register_lmac_if_ops(struct wlan_objmgr_psoc *psoc); 202*5113495bSYour Name 203*5113495bSYour Name /** 204*5113495bSYour Name * os_if_son_register_hdd_callbacks() - register son hdd callback 205*5113495bSYour Name * @psoc: psoc 206*5113495bSYour Name * @cb_obj: pointer to callback 207*5113495bSYour Name * 208*5113495bSYour Name * Return: void 209*5113495bSYour Name */ 210*5113495bSYour Name void os_if_son_register_hdd_callbacks(struct wlan_objmgr_psoc *psoc, 211*5113495bSYour Name struct son_callbacks *cb_obj); 212*5113495bSYour Name 213*5113495bSYour Name /** 214*5113495bSYour Name * os_if_son_get_freq() - get freq 215*5113495bSYour Name * @vdev: vdev 216*5113495bSYour Name * 217*5113495bSYour Name * Return: freq of given vdev 218*5113495bSYour Name */ 219*5113495bSYour Name qdf_freq_t os_if_son_get_freq(struct wlan_objmgr_vdev *vdev); 220*5113495bSYour Name 221*5113495bSYour Name /** 222*5113495bSYour Name * os_if_son_is_acs_in_progress() - whether ACS in progress or not 223*5113495bSYour Name * @vdev: vdev 224*5113495bSYour Name * 225*5113495bSYour Name * Return: true if ACS is in progress 226*5113495bSYour Name */ 227*5113495bSYour Name uint32_t os_if_son_is_acs_in_progress(struct wlan_objmgr_vdev *vdev); 228*5113495bSYour Name 229*5113495bSYour Name /** 230*5113495bSYour Name * os_if_son_is_cac_in_progress() - whether CAC is in progress or not 231*5113495bSYour Name * @vdev: vdev 232*5113495bSYour Name * 233*5113495bSYour Name * Return: true if CAC is in progress 234*5113495bSYour Name */ 235*5113495bSYour Name uint32_t os_if_son_is_cac_in_progress(struct wlan_objmgr_vdev *vdev); 236*5113495bSYour Name 237*5113495bSYour Name /** 238*5113495bSYour Name * os_if_son_set_chan_ext_offset() - set chan extend offset 239*5113495bSYour Name * @vdev: vdev 240*5113495bSYour Name * @son_chan_ext_offset: son chan extend offset 241*5113495bSYour Name * 242*5113495bSYour Name * Return: 0 on success, negative errno on failure 243*5113495bSYour Name */ 244*5113495bSYour Name int os_if_son_set_chan_ext_offset(struct wlan_objmgr_vdev *vdev, 245*5113495bSYour Name enum sec20_chan_offset son_chan_ext_offset); 246*5113495bSYour Name 247*5113495bSYour Name /** 248*5113495bSYour Name * os_if_son_get_chan_ext_offset() - get chan extend offset 249*5113495bSYour Name * @vdev: vdev 250*5113495bSYour Name * 251*5113495bSYour Name * Return: enum sec20_chan_offset 252*5113495bSYour Name */ 253*5113495bSYour Name enum sec20_chan_offset os_if_son_get_chan_ext_offset( 254*5113495bSYour Name struct wlan_objmgr_vdev *vdev); 255*5113495bSYour Name 256*5113495bSYour Name /** 257*5113495bSYour Name * os_if_son_set_bandwidth() - set band width 258*5113495bSYour Name * @vdev: vdev 259*5113495bSYour Name * @son_bandwidth: band width 260*5113495bSYour Name * 261*5113495bSYour Name * Return: 0 on success, negative errno on failure 262*5113495bSYour Name */ 263*5113495bSYour Name int os_if_son_set_bandwidth(struct wlan_objmgr_vdev *vdev, 264*5113495bSYour Name uint32_t son_bandwidth); 265*5113495bSYour Name 266*5113495bSYour Name /** 267*5113495bSYour Name * os_if_son_get_bandwidth() - get band width 268*5113495bSYour Name * @vdev: vdev 269*5113495bSYour Name * 270*5113495bSYour Name * Return: band width 271*5113495bSYour Name */ 272*5113495bSYour Name uint32_t os_if_son_get_bandwidth(struct wlan_objmgr_vdev *vdev); 273*5113495bSYour Name 274*5113495bSYour Name /** 275*5113495bSYour Name * os_if_son_get_band_info() - get band info 276*5113495bSYour Name * @vdev: vdev 277*5113495bSYour Name * 278*5113495bSYour Name * Return: band info 279*5113495bSYour Name */ 280*5113495bSYour Name uint32_t os_if_son_get_band_info(struct wlan_objmgr_vdev *vdev); 281*5113495bSYour Name 282*5113495bSYour Name /** 283*5113495bSYour Name * os_if_son_get_chan_list() - get a list of chan information 284*5113495bSYour Name * @vdev: vdev 285*5113495bSYour Name * @ic_chans: chan information array to get 286*5113495bSYour Name * @chan_info: pointer to ieee80211_channel_info to get 287*5113495bSYour Name * @ic_nchans: number of chan information it gets 288*5113495bSYour Name * @flag_160: flag indicating the API to fill the center frequencies of 160MHz. 289*5113495bSYour Name * @flag_6ghz: flag indicating the API to include 6 GHz or not 290*5113495bSYour Name * 291*5113495bSYour Name * Return: 0 on success, negative errno on failure 292*5113495bSYour Name */ 293*5113495bSYour Name int os_if_son_get_chan_list(struct wlan_objmgr_vdev *vdev, 294*5113495bSYour Name struct ieee80211_ath_channel *ic_chans, 295*5113495bSYour Name struct ieee80211_channel_info *chan_info, 296*5113495bSYour Name uint8_t *ic_nchans, bool flag_160, bool flag_6ghz); 297*5113495bSYour Name 298*5113495bSYour Name /** 299*5113495bSYour Name * os_if_son_get_sta_count() - get connected STA count 300*5113495bSYour Name * @vdev: vdev 301*5113495bSYour Name * 302*5113495bSYour Name * Return: connected STA count 303*5113495bSYour Name */ 304*5113495bSYour Name uint32_t os_if_son_get_sta_count(struct wlan_objmgr_vdev *vdev); 305*5113495bSYour Name 306*5113495bSYour Name /** 307*5113495bSYour Name * os_if_son_get_bssid() - get bssid of given vdev 308*5113495bSYour Name * @vdev: vdev 309*5113495bSYour Name * @bssid: pointer to BSSID 310*5113495bSYour Name * 311*5113495bSYour Name * Return: 0 if BSSID is gotten successfully 312*5113495bSYour Name */ 313*5113495bSYour Name int os_if_son_get_bssid(struct wlan_objmgr_vdev *vdev, 314*5113495bSYour Name uint8_t bssid[QDF_MAC_ADDR_SIZE]); 315*5113495bSYour Name 316*5113495bSYour Name /** 317*5113495bSYour Name * os_if_son_get_ssid() - get ssid of given vdev 318*5113495bSYour Name * @vdev: vdev 319*5113495bSYour Name * @ssid: pointer to SSID 320*5113495bSYour Name * @ssid_len: ssid length 321*5113495bSYour Name * 322*5113495bSYour Name * Return: 0 if SSID is gotten successfully 323*5113495bSYour Name */ 324*5113495bSYour Name int os_if_son_get_ssid(struct wlan_objmgr_vdev *vdev, 325*5113495bSYour Name char ssid[WLAN_SSID_MAX_LEN + 1], 326*5113495bSYour Name uint8_t *ssid_len); 327*5113495bSYour Name 328*5113495bSYour Name /** 329*5113495bSYour Name * os_if_son_set_chan() - set chan 330*5113495bSYour Name * @vdev: vdev 331*5113495bSYour Name * @chan: given chan 332*5113495bSYour Name * @son_band: given band 333*5113495bSYour Name * 334*5113495bSYour Name * Return: 0 on success, negative errno on failure 335*5113495bSYour Name */ 336*5113495bSYour Name int os_if_son_set_chan(struct wlan_objmgr_vdev *vdev, 337*5113495bSYour Name int chan, enum wlan_band_id son_band); 338*5113495bSYour Name 339*5113495bSYour Name /** 340*5113495bSYour Name * os_if_son_set_cac_timeout() - set cac timeout 341*5113495bSYour Name * @vdev: vdev 342*5113495bSYour Name * @cac_timeout: cac timeount to set 343*5113495bSYour Name * 344*5113495bSYour Name * Return: 0 if cac time out is set successfully 345*5113495bSYour Name */ 346*5113495bSYour Name int os_if_son_set_cac_timeout(struct wlan_objmgr_vdev *vdev, 347*5113495bSYour Name int cac_timeout); 348*5113495bSYour Name 349*5113495bSYour Name /** 350*5113495bSYour Name * os_if_son_get_cac_timeout() - get cac timeout 351*5113495bSYour Name * @vdev: vdev 352*5113495bSYour Name * @cac_timeout: cac timeout to get 353*5113495bSYour Name * 354*5113495bSYour Name * Return 0 if cac time out is get successfully 355*5113495bSYour Name */ 356*5113495bSYour Name int os_if_son_get_cac_timeout(struct wlan_objmgr_vdev *vdev, 357*5113495bSYour Name int *cac_timeout); 358*5113495bSYour Name 359*5113495bSYour Name /** 360*5113495bSYour Name * os_if_son_set_country_code() - set country code 361*5113495bSYour Name * @vdev: vdev 362*5113495bSYour Name * @country_code: country code to set 363*5113495bSYour Name * 364*5113495bSYour Name * Return: 0 if country code is set successfully 365*5113495bSYour Name */ 366*5113495bSYour Name int os_if_son_set_country_code(struct wlan_objmgr_vdev *vdev, 367*5113495bSYour Name char *country_code); 368*5113495bSYour Name 369*5113495bSYour Name /** 370*5113495bSYour Name * os_if_son_get_country_code() - get country code 371*5113495bSYour Name * @vdev: vdev 372*5113495bSYour Name * @country_code: country code to get 373*5113495bSYour Name * 374*5113495bSYour Name * Return: 0 if country code is get successfully 375*5113495bSYour Name */ 376*5113495bSYour Name int os_if_son_get_country_code(struct wlan_objmgr_vdev *vdev, 377*5113495bSYour Name char *country_code); 378*5113495bSYour Name 379*5113495bSYour Name /** 380*5113495bSYour Name * os_if_son_set_candidate_freq() - set freq to switch after radar detection 381*5113495bSYour Name * @vdev: vdev 382*5113495bSYour Name * @freq: freq to switch 383*5113495bSYour Name * 384*5113495bSYour Name * Return: 0 if candidate freq is set successfully 385*5113495bSYour Name */ 386*5113495bSYour Name int os_if_son_set_candidate_freq(struct wlan_objmgr_vdev *vdev, 387*5113495bSYour Name qdf_freq_t freq); 388*5113495bSYour Name 389*5113495bSYour Name /** 390*5113495bSYour Name * os_if_son_get_candidate_freq() - get freq to switch after radar detection 391*5113495bSYour Name * @vdev: vdev 392*5113495bSYour Name * 393*5113495bSYour Name * Return: candidate freq to switch after radar detection 394*5113495bSYour Name */ 395*5113495bSYour Name qdf_freq_t os_if_son_get_candidate_freq(struct wlan_objmgr_vdev *vdev); 396*5113495bSYour Name 397*5113495bSYour Name /** 398*5113495bSYour Name * os_if_son_get_phymode() - get phy mode 399*5113495bSYour Name * @vdev: vdev 400*5113495bSYour Name * 401*5113495bSYour Name * Return: enum ieee80211_phymode 402*5113495bSYour Name */ 403*5113495bSYour Name enum ieee80211_phymode os_if_son_get_phymode(struct wlan_objmgr_vdev *vdev); 404*5113495bSYour Name 405*5113495bSYour Name /** 406*5113495bSYour Name * os_if_son_set_phymode() - set phy mode 407*5113495bSYour Name * @vdev: vdev 408*5113495bSYour Name * @mode: son phy mode to set 409*5113495bSYour Name * 410*5113495bSYour Name * Return: 0 on success, negative errno on failure 411*5113495bSYour Name */ 412*5113495bSYour Name int os_if_son_set_phymode(struct wlan_objmgr_vdev *vdev, 413*5113495bSYour Name enum ieee80211_phymode mode); 414*5113495bSYour Name 415*5113495bSYour Name /** 416*5113495bSYour Name * os_if_son_get_phy_stats() - get phy stats 417*5113495bSYour Name * @vdev: vdev 418*5113495bSYour Name * @phy_stats: phy stats 419*5113495bSYour Name * 420*5113495bSYour Name * Return: void 421*5113495bSYour Name */ 422*5113495bSYour Name void os_if_son_get_phy_stats(struct wlan_objmgr_vdev *vdev, 423*5113495bSYour Name struct ol_ath_radiostats *phy_stats); 424*5113495bSYour Name 425*5113495bSYour Name /** 426*5113495bSYour Name * os_if_son_cbs_init() - cbs init 427*5113495bSYour Name * 428*5113495bSYour Name * Return: 0 on success, negative errno on failure 429*5113495bSYour Name */ 430*5113495bSYour Name int os_if_son_cbs_init(void); 431*5113495bSYour Name 432*5113495bSYour Name /** 433*5113495bSYour Name * os_if_son_cbs_deinit() - cbs deinit 434*5113495bSYour Name * 435*5113495bSYour Name * Return: 0 on success, negative errno on failure 436*5113495bSYour Name */ 437*5113495bSYour Name int os_if_son_cbs_deinit(void); 438*5113495bSYour Name 439*5113495bSYour Name /** 440*5113495bSYour Name * os_if_son_set_cbs() - enable cbs or disable 441*5113495bSYour Name * @vdev: vdev 442*5113495bSYour Name * @enable: true or false 443*5113495bSYour Name * 444*5113495bSYour Name * Return: 0 on success, negative errno on failure 445*5113495bSYour Name */ 446*5113495bSYour Name int os_if_son_set_cbs(struct wlan_objmgr_vdev *vdev, 447*5113495bSYour Name bool enable); 448*5113495bSYour Name 449*5113495bSYour Name /** 450*5113495bSYour Name * os_if_son_set_cbs_wait_time() - set cbs wait time 451*5113495bSYour Name * @vdev: vdev 452*5113495bSYour Name * @val: value 453*5113495bSYour Name * 454*5113495bSYour Name * Return: 0 on success, negative errno on failure 455*5113495bSYour Name */ 456*5113495bSYour Name int os_if_son_set_cbs_wait_time(struct wlan_objmgr_vdev *vdev, 457*5113495bSYour Name uint32_t val); 458*5113495bSYour Name 459*5113495bSYour Name /** 460*5113495bSYour Name * os_if_son_set_cbs_dwell_split_time() - set cbs dwell split time 461*5113495bSYour Name * @vdev: vdev 462*5113495bSYour Name * @val: value 463*5113495bSYour Name * 464*5113495bSYour Name * Return: 0 on success, negative errno on failure 465*5113495bSYour Name */ 466*5113495bSYour Name int os_if_son_set_cbs_dwell_split_time(struct wlan_objmgr_vdev *vdev, 467*5113495bSYour Name uint32_t val); 468*5113495bSYour Name 469*5113495bSYour Name /** 470*5113495bSYour Name * os_if_son_get_chan_util() - get chan utilization 471*5113495bSYour Name * @vdev: vdev 472*5113495bSYour Name * 473*5113495bSYour Name * Return: chan utilization (0 - 100) 474*5113495bSYour Name */ 475*5113495bSYour Name uint8_t os_if_son_get_chan_util(struct wlan_objmgr_vdev *vdev); 476*5113495bSYour Name 477*5113495bSYour Name /** 478*5113495bSYour Name * os_if_son_pdev_ops() - Handles PDEV specific SON commands 479*5113495bSYour Name * @pdev: pdev 480*5113495bSYour Name * @type: SON command to handle 481*5113495bSYour Name * @data: Input Data 482*5113495bSYour Name * @ret: Output Data 483*5113495bSYour Name * 484*5113495bSYour Name * Return: QDF_SUCCCESS_SUCCESS in case of success 485*5113495bSYour Name */ 486*5113495bSYour Name QDF_STATUS os_if_son_pdev_ops(struct wlan_objmgr_pdev *pdev, 487*5113495bSYour Name enum wlan_mlme_pdev_param type, 488*5113495bSYour Name void *data, void *ret); 489*5113495bSYour Name 490*5113495bSYour Name /** 491*5113495bSYour Name * os_if_son_vdev_ops() - Handles VDEV specific SON commands 492*5113495bSYour Name * @vdev: vdev 493*5113495bSYour Name * @type: SON command to handle 494*5113495bSYour Name * @data: Input Data 495*5113495bSYour Name * @ret: Output Data 496*5113495bSYour Name * 497*5113495bSYour Name * Return: QDF_SUCCCESS_SUCCESS in case of success 498*5113495bSYour Name */ 499*5113495bSYour Name QDF_STATUS os_if_son_vdev_ops(struct wlan_objmgr_vdev *vdev, 500*5113495bSYour Name enum wlan_mlme_vdev_param type, 501*5113495bSYour Name void *data, void *ret); 502*5113495bSYour Name 503*5113495bSYour Name /** 504*5113495bSYour Name * os_if_son_peer_ops() - Handles PEER specific SON commands 505*5113495bSYour Name * @peer: peer 506*5113495bSYour Name * @type: SON command to handle 507*5113495bSYour Name * @data: Input Data. Pointer to wlan_mlme_peer_data 508*5113495bSYour Name * @ret: Output Data. Pointer to wlan_mlme_peer_data 509*5113495bSYour Name * 510*5113495bSYour Name * Return: QDF_SUCCCESS_SUCCESS in case of success 511*5113495bSYour Name */ 512*5113495bSYour Name QDF_STATUS os_if_son_peer_ops(struct wlan_objmgr_peer *peer, 513*5113495bSYour Name enum wlan_mlme_peer_param type, 514*5113495bSYour Name union wlan_mlme_peer_data *data, 515*5113495bSYour Name union wlan_mlme_peer_data *ret); 516*5113495bSYour Name 517*5113495bSYour Name /** 518*5113495bSYour Name * os_if_son_scan_db_iterate() - get country code 519*5113495bSYour Name * @pdev: pdev 520*5113495bSYour Name * @handler: scan_iterator 521*5113495bSYour Name * @arg: argument to be passed to handler 522*5113495bSYour Name * 523*5113495bSYour Name * Return: QDF_SUCCCESS_SUCCESS in case of success 524*5113495bSYour Name */ 525*5113495bSYour Name QDF_STATUS os_if_son_scan_db_iterate(struct wlan_objmgr_pdev *pdev, 526*5113495bSYour Name scan_iterator_func handler, void *arg); 527*5113495bSYour Name 528*5113495bSYour Name /** 529*5113495bSYour Name * os_if_son_acl_is_probe_wh_set() - Withheld probes for given mac_addr, 530*5113495bSYour Name * not supported 531*5113495bSYour Name * @vdev: vdev 532*5113495bSYour Name * @mac_addr: 6-Byte MAC address 533*5113495bSYour Name * @probe_rssi: Probe Request RSSI 534*5113495bSYour Name * 535*5113495bSYour Name * Return: true / false 536*5113495bSYour Name */ 537*5113495bSYour Name bool os_if_son_acl_is_probe_wh_set(struct wlan_objmgr_vdev *vdev, 538*5113495bSYour Name const uint8_t *mac_addr, 539*5113495bSYour Name uint8_t probe_rssi); 540*5113495bSYour Name 541*5113495bSYour Name /** 542*5113495bSYour Name * os_if_son_get_rx_streams() - Gets number of RX spatial streams 543*5113495bSYour Name * @vdev: target vdev 544*5113495bSYour Name * 545*5113495bSYour Name * Return: number of spatial stream 546*5113495bSYour Name */ 547*5113495bSYour Name uint8_t os_if_son_get_rx_streams(struct wlan_objmgr_vdev *vdev); 548*5113495bSYour Name 549*5113495bSYour Name /** 550*5113495bSYour Name * os_if_son_cfg80211_reply() - replies to cfg80211 551*5113495bSYour Name * @sk_buf: sk_buff to uper layer 552*5113495bSYour Name * 553*5113495bSYour Name * Return: QDF_STATUS_SUCCESS on success 554*5113495bSYour Name */ 555*5113495bSYour Name QDF_STATUS os_if_son_cfg80211_reply(qdf_nbuf_t sk_buf); 556*5113495bSYour Name 557*5113495bSYour Name /** 558*5113495bSYour Name * os_if_son_vdev_is_wds() - checks if wds capability is supported or not 559*5113495bSYour Name * @vdev: Pointer to vdev 560*5113495bSYour Name * 561*5113495bSYour Name * Return: true if wds is supported 562*5113495bSYour Name */ 563*5113495bSYour Name bool os_if_son_vdev_is_wds(struct wlan_objmgr_vdev *vdev); 564*5113495bSYour Name 565*5113495bSYour Name /* 566*5113495bSYour Name * os_if_son_set_acl_policy() - set acl policy 567*5113495bSYour Name * @vdev: vdev 568*5113495bSYour Name * @son_acl_policy: son acl policy. enum ieee80211_acl_cmd 569*5113495bSYour Name * 570*5113495bSYour Name * Return: QDF_STATUS 571*5113495bSYour Name */ 572*5113495bSYour Name QDF_STATUS os_if_son_set_acl_policy(struct wlan_objmgr_vdev *vdev, 573*5113495bSYour Name ieee80211_acl_cmd son_acl_policy); 574*5113495bSYour Name 575*5113495bSYour Name /** 576*5113495bSYour Name * os_if_son_get_acl_policy() - get acl policy 577*5113495bSYour Name * @vdev: vdev 578*5113495bSYour Name * 579*5113495bSYour Name * Return: acl policy. enum ieee80211_acl_cmd 580*5113495bSYour Name */ 581*5113495bSYour Name ieee80211_acl_cmd os_if_son_get_acl_policy(struct wlan_objmgr_vdev *vdev); 582*5113495bSYour Name 583*5113495bSYour Name /** 584*5113495bSYour Name * os_if_son_add_acl_mac() - add mac to acl 585*5113495bSYour Name * @vdev: vdev 586*5113495bSYour Name * @acl_mac: mac to add 587*5113495bSYour Name * 588*5113495bSYour Name * Return: 0 on success, negative errno on failure 589*5113495bSYour Name */ 590*5113495bSYour Name int os_if_son_add_acl_mac(struct wlan_objmgr_vdev *vdev, 591*5113495bSYour Name struct qdf_mac_addr *acl_mac); 592*5113495bSYour Name 593*5113495bSYour Name /** 594*5113495bSYour Name * os_if_son_get_sta_space() - get sta space 595*5113495bSYour Name * @vdev: target vdev 596*5113495bSYour Name * 597*5113495bSYour Name * Return: bytes which is needed to fill sta information 598*5113495bSYour Name */ 599*5113495bSYour Name uint32_t os_if_son_get_sta_space(struct wlan_objmgr_vdev *vdev); 600*5113495bSYour Name 601*5113495bSYour Name /** 602*5113495bSYour Name * os_if_son_get_sta_list() - get sta list 603*5113495bSYour Name * @vdev: target vdev 604*5113495bSYour Name * @si: pointer to ieee80211req_sta_info 605*5113495bSYour Name * @space: space left 606*5113495bSYour Name * 607*5113495bSYour Name * Return: void 608*5113495bSYour Name */ 609*5113495bSYour Name void os_if_son_get_sta_list(struct wlan_objmgr_vdev *vdev, 610*5113495bSYour Name struct ieee80211req_sta_info *si, uint32_t *space); 611*5113495bSYour Name 612*5113495bSYour Name /** 613*5113495bSYour Name * os_if_son_del_acl_mac() - del mac from acl 614*5113495bSYour Name * @vdev: vdev 615*5113495bSYour Name * @acl_mac: mac to del 616*5113495bSYour Name * 617*5113495bSYour Name * Return: 0 on success, negative errno on failure 618*5113495bSYour Name */ 619*5113495bSYour Name int os_if_son_del_acl_mac(struct wlan_objmgr_vdev *vdev, 620*5113495bSYour Name struct qdf_mac_addr *acl_mac); 621*5113495bSYour Name 622*5113495bSYour Name /** 623*5113495bSYour Name * os_if_son_kickout_mac() - kickout sta with given mac 624*5113495bSYour Name * @vdev: vdev 625*5113495bSYour Name * @mac: sta mac to kickout 626*5113495bSYour Name * 627*5113495bSYour Name * Return: 0 on success, negative errno on failure 628*5113495bSYour Name */ 629*5113495bSYour Name int os_if_son_kickout_mac(struct wlan_objmgr_vdev *vdev, 630*5113495bSYour Name struct qdf_mac_addr *mac); 631*5113495bSYour Name 632*5113495bSYour Name /** 633*5113495bSYour Name * os_if_son_set_chwidth() - set chan width 634*5113495bSYour Name * @vdev: vdev 635*5113495bSYour Name * @son_chwidth: son chan width 636*5113495bSYour Name * 637*5113495bSYour Name * Return: 0 on success, negative errno on failure 638*5113495bSYour Name */ 639*5113495bSYour Name int os_if_son_set_chwidth(struct wlan_objmgr_vdev *vdev, 640*5113495bSYour Name enum ieee80211_cwm_width son_chwidth); 641*5113495bSYour Name 642*5113495bSYour Name /** 643*5113495bSYour Name * os_if_son_get_chwidth() - get chan width 644*5113495bSYour Name * @vdev: vdev 645*5113495bSYour Name * 646*5113495bSYour Name * Return: son chan width 647*5113495bSYour Name */ 648*5113495bSYour Name enum ieee80211_cwm_width os_if_son_get_chwidth(struct wlan_objmgr_vdev *vdev); 649*5113495bSYour Name 650*5113495bSYour Name /** 651*5113495bSYour Name * os_if_son_deauth_peer_sta - Deauths specified STA 652*5113495bSYour Name * @vdev: vdev 653*5113495bSYour Name * @peer_mac: Target peer MAC address 654*5113495bSYour Name * @ignore_frame: True to silently deauth the peer 655*5113495bSYour Name * 656*5113495bSYour Name * Return: void 657*5113495bSYour Name */ 658*5113495bSYour Name void os_if_son_deauth_peer_sta(struct wlan_objmgr_vdev *vdev, 659*5113495bSYour Name uint8_t *peer_mac, 660*5113495bSYour Name bool ignore_frame); 661*5113495bSYour Name 662*5113495bSYour Name /** 663*5113495bSYour Name * os_if_son_modify_acl - Updates ACL with given peer 664*5113495bSYour Name * @vdev: vdev 665*5113495bSYour Name * @peer_mac: Target peer MAC address 666*5113495bSYour Name * @allow_auth: True to allow specified peer to connect 667*5113495bSYour Name * 668*5113495bSYour Name * Return: void 669*5113495bSYour Name */ 670*5113495bSYour Name void os_if_son_modify_acl(struct wlan_objmgr_vdev *vdev, 671*5113495bSYour Name uint8_t *peer_mac, 672*5113495bSYour Name bool allow_auth); 673*5113495bSYour Name 674*5113495bSYour Name /** 675*5113495bSYour Name * os_if_son_deliver_ald_event() - deliver ald events to son 676*5113495bSYour Name * @vdev: vdev object 677*5113495bSYour Name * @peer: peer object 678*5113495bSYour Name * @event: Name of the event 679*5113495bSYour Name * @event_data: event data 680*5113495bSYour Name * 681*5113495bSYour Name * Return: 0 on success 682*5113495bSYour Name */ 683*5113495bSYour Name int os_if_son_deliver_ald_event(struct wlan_objmgr_vdev *vdev, 684*5113495bSYour Name struct wlan_objmgr_peer *peer, 685*5113495bSYour Name enum ieee80211_event_type event, 686*5113495bSYour Name void *event_data); 687*5113495bSYour Name /** 688*5113495bSYour Name * os_if_son_get_vdev_by_netdev() - Get vdev from net device 689*5113495bSYour Name * @dev: net device struct 690*5113495bSYour Name * 691*5113495bSYour Name * Return: objmgr vdev on success else NULL 692*5113495bSYour Name */ 693*5113495bSYour Name struct wlan_objmgr_vdev *os_if_son_get_vdev_by_netdev(struct net_device *dev); 694*5113495bSYour Name 695*5113495bSYour Name /** 696*5113495bSYour Name * os_if_son_trigger_objmgr_object_deletion() - Trigger objmgr object deletion 697*5113495bSYour Name * @id: umac component id 698*5113495bSYour Name * 699*5113495bSYour Name * Return: QDF_STATUS_SUCCESS on success 700*5113495bSYour Name */ 701*5113495bSYour Name QDF_STATUS os_if_son_trigger_objmgr_object_deletion(enum wlan_umac_comp_id id); 702*5113495bSYour Name 703*5113495bSYour Name /** 704*5113495bSYour Name * os_if_son_trigger_objmgr_object_creation() - Trigger objmgr object creation 705*5113495bSYour Name * @id: umac component id 706*5113495bSYour Name * 707*5113495bSYour Name * Return: QDF_STATUS_SUCCESS on success 708*5113495bSYour Name */ 709*5113495bSYour Name QDF_STATUS os_if_son_trigger_objmgr_object_creation(enum wlan_umac_comp_id id); 710*5113495bSYour Name 711*5113495bSYour Name /** 712*5113495bSYour Name * os_if_son_start_acs() - Triggers ACS on the target vdev 713*5113495bSYour Name * @vdev: target vdev 714*5113495bSYour Name * @enable: True - to start ACS 715*5113495bSYour Name * 716*5113495bSYour Name * Return: 0 on success 717*5113495bSYour Name */ 718*5113495bSYour Name int os_if_son_start_acs(struct wlan_objmgr_vdev *vdev, uint8_t enable); 719*5113495bSYour Name 720*5113495bSYour Name /** 721*5113495bSYour Name * os_if_son_set_acs_chan() - Set channel list for ACS 722*5113495bSYour Name * @vdev: target vdev 723*5113495bSYour Name * @req: channel list 724*5113495bSYour Name * 725*5113495bSYour Name * Return: 0 on success 726*5113495bSYour Name */ 727*5113495bSYour Name int os_if_son_set_acs_chan(struct wlan_objmgr_vdev *vdev, 728*5113495bSYour Name struct ieee80211req_athdbg *req); 729*5113495bSYour Name 730*5113495bSYour Name /** 731*5113495bSYour Name * os_if_son_get_acs_report() - Get ACS report 732*5113495bSYour Name * @vdev: target vdev 733*5113495bSYour Name * @acs_r: ACS report structure 734*5113495bSYour Name * 735*5113495bSYour Name * Return: 0 on success 736*5113495bSYour Name */ 737*5113495bSYour Name int os_if_son_get_acs_report(struct wlan_objmgr_vdev *vdev, 738*5113495bSYour Name struct ieee80211_acs_dbg *acs_r); 739*5113495bSYour Name 740*5113495bSYour Name /** 741*5113495bSYour Name * os_if_son_parse_generic_nl_cmd() - Sends the Generic vendor commands 742*5113495bSYour Name * to SON. 743*5113495bSYour Name * @wiphy: Standard wiphy object 744*5113495bSYour Name * @wdev: wireless device 745*5113495bSYour Name * @tb: Command type structure pointer 746*5113495bSYour Name * @type: Get/Set command 747*5113495bSYour Name * 748*5113495bSYour Name * This function parses the GENERIC vendor commands received from 749*5113495bSYour Name * userspace then sends the extracted data to SON module for further 750*5113495bSYour Name * processing along with wiphy, wdev, extected structure - param 751*5113495bSYour Name * and command type i.e. GET / SET. Each of the GENERIC commands are 752*5113495bSYour Name * interdependent and hence in SON module, they will be further 753*5113495bSYour Name * parsed based on type i.e. GET / SET. 754*5113495bSYour Name * 755*5113495bSYour Name * Return: 0 on success 756*5113495bSYour Name */ 757*5113495bSYour Name int os_if_son_parse_generic_nl_cmd(struct wiphy *wiphy, 758*5113495bSYour Name struct wireless_dev *wdev, 759*5113495bSYour Name struct nlattr **tb, 760*5113495bSYour Name enum os_if_son_vendor_cmd_type type); 761*5113495bSYour Name 762*5113495bSYour Name /** 763*5113495bSYour Name * os_if_son_get_node_datarate_info() - Get datarate info about given mac 764*5113495bSYour Name * @vdev: vdev_obj 765*5113495bSYour Name * @mac_addr: mac_address to get datarate information 766*5113495bSYour Name * @node_info: object to store datarate information 767*5113495bSYour Name * 768*5113495bSYour Name * Return: void 769*5113495bSYour Name */ 770*5113495bSYour Name QDF_STATUS os_if_son_get_node_datarate_info(struct wlan_objmgr_vdev *vdev, 771*5113495bSYour Name uint8_t *mac_addr, 772*5113495bSYour Name wlan_node_info *node_info); 773*5113495bSYour Name 774*5113495bSYour Name /** 775*5113495bSYour Name * os_if_son_get_peer_max_mcs_idx() - Get max mcs index of the peer 776*5113495bSYour Name * @vdev: vdev obj 777*5113495bSYour Name * @peer: peer obj 778*5113495bSYour Name * 779*5113495bSYour Name * Return: max mcs index on success / 0 on failure 780*5113495bSYour Name */ 781*5113495bSYour Name uint32_t os_if_son_get_peer_max_mcs_idx(struct wlan_objmgr_vdev *vdev, 782*5113495bSYour Name struct wlan_objmgr_peer *peer); 783*5113495bSYour Name 784*5113495bSYour Name /** 785*5113495bSYour Name * os_if_son_get_sta_stats() - get connected sta rssi and estimated data rate 786*5113495bSYour Name * @vdev: pointer to vdev 787*5113495bSYour Name * @mac_addr: connected sta mac addr 788*5113495bSYour Name * @stats: pointer to ieee80211_nodestats 789*5113495bSYour Name * 790*5113495bSYour Name * Return: 0 on success, negative errno on failure 791*5113495bSYour Name */ 792*5113495bSYour Name int os_if_son_get_sta_stats(struct wlan_objmgr_vdev *vdev, uint8_t *mac_addr, 793*5113495bSYour Name struct ieee80211_nodestats *stats); 794*5113495bSYour Name #endif 795