1*5113495bSYour Name /* 2*5113495bSYour Name * Copyright (c) 2017, 2019-2021 The Linux Foundation. All rights reserved. 3*5113495bSYour Name * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved. 4*5113495bSYour Name * 5*5113495bSYour Name * Permission to use, copy, modify, and/or distribute this software for 6*5113495bSYour Name * any purpose with or without fee is hereby granted, provided that the 7*5113495bSYour Name * above copyright notice and this permission notice appear in all 8*5113495bSYour Name * copies. 9*5113495bSYour Name * 10*5113495bSYour Name * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 11*5113495bSYour Name * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 12*5113495bSYour Name * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 13*5113495bSYour Name * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 14*5113495bSYour Name * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 15*5113495bSYour Name * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 16*5113495bSYour Name * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 17*5113495bSYour Name * PERFORMANCE OF THIS SOFTWARE. 18*5113495bSYour Name */ 19*5113495bSYour Name 20*5113495bSYour Name /** 21*5113495bSYour Name * DOC: declares driver functions interfacing with linux kernel 22*5113495bSYour Name */ 23*5113495bSYour Name 24*5113495bSYour Name #ifndef _WLAN_CFG80211_SPECTRAL_H_ 25*5113495bSYour Name #define _WLAN_CFG80211_SPECTRAL_H_ 26*5113495bSYour Name 27*5113495bSYour Name #include <linux/version.h> 28*5113495bSYour Name #include <linux/netdevice.h> 29*5113495bSYour Name #include <net/cfg80211.h> 30*5113495bSYour Name #include <qca_vendor.h> 31*5113495bSYour Name #include <qdf_list.h> 32*5113495bSYour Name #include <qdf_types.h> 33*5113495bSYour Name #include <spectral_ioctl.h> 34*5113495bSYour Name #include <wlan_spectral_public_structs.h> 35*5113495bSYour Name 36*5113495bSYour Name extern const struct nla_policy 37*5113495bSYour Name spectral_scan_policy 38*5113495bSYour Name [QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_CONFIG_MAX + 1]; 39*5113495bSYour Name 40*5113495bSYour Name extern const struct nla_policy 41*5113495bSYour Name spectral_scan_get_status_policy 42*5113495bSYour Name [QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_STATUS_MAX + 1]; 43*5113495bSYour Name 44*5113495bSYour Name #define CONFIG_REQUESTED(type) ((type == \ 45*5113495bSYour Name QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_REQUEST_TYPE_SCAN_AND_CONFIG) || \ 46*5113495bSYour Name (type == QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_REQUEST_TYPE_CONFIG)) 47*5113495bSYour Name 48*5113495bSYour Name #define SCAN_REQUESTED(type) ((type == \ 49*5113495bSYour Name QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_REQUEST_TYPE_SCAN_AND_CONFIG) || \ 50*5113495bSYour Name (type == QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_REQUEST_TYPE_SCAN)) 51*5113495bSYour Name 52*5113495bSYour Name /** 53*5113495bSYour Name * wlan_spectral_get_nl80211_chwidth() - Get nl80211_chan_width value for 54*5113495bSYour Name * channel width from enum phy_ch_width 55*5113495bSYour Name * @phy_chwidth: enum phy_ch_width channel width value 56*5113495bSYour Name * 57*5113495bSYour Name * Return: channel width converted to nl80211_chan_width 58*5113495bSYour Name */ 59*5113495bSYour Name int 60*5113495bSYour Name wlan_spectral_get_nl80211_chwidth(uint8_t phy_chwidth); 61*5113495bSYour Name 62*5113495bSYour Name /** 63*5113495bSYour Name * wlan_spectral_get_phy_ch_width() - Convert channel width from 64*5113495bSYour Name * nl80211_chan_width to enum phy_ch_width 65*5113495bSYour Name * @nl_chwidth: nl80211 channel width value 66*5113495bSYour Name * 67*5113495bSYour Name * Return: channel width converted to phy_ch_width 68*5113495bSYour Name */ 69*5113495bSYour Name uint8_t 70*5113495bSYour Name wlan_spectral_get_phy_ch_width(uint8_t nl_chwidth); 71*5113495bSYour Name 72*5113495bSYour Name /** 73*5113495bSYour Name * wlan_cfg80211_register_spectral_cmd_handler() - Registration api for spectral 74*5113495bSYour Name * @pdev: Pointer to pdev 75*5113495bSYour Name * @handlers: Pointer to handlers 76*5113495bSYour Name * 77*5113495bSYour Name * Return: 0 on success, negative value on failure 78*5113495bSYour Name */ 79*5113495bSYour Name void wlan_cfg80211_register_spectral_cmd_handler( 80*5113495bSYour Name struct wlan_objmgr_pdev *pdev, 81*5113495bSYour Name struct spectral_cfg80211_vendor_cmd_handlers *handlers); 82*5113495bSYour Name 83*5113495bSYour Name /** 84*5113495bSYour Name * wlan_cfg80211_spectral_scan_config_and_start() - Start spectral scan 85*5113495bSYour Name * @wiphy: Pointer to wiphy 86*5113495bSYour Name * @pdev: Pointer to pdev 87*5113495bSYour Name * @vdev: Pointer to vdev 88*5113495bSYour Name * @data: Reference to data 89*5113495bSYour Name * @data_len: Length of @data 90*5113495bSYour Name * 91*5113495bSYour Name * Return: 0 on success, negative value on failure 92*5113495bSYour Name */ 93*5113495bSYour Name int wlan_cfg80211_spectral_scan_config_and_start(struct wiphy *wiphy, 94*5113495bSYour Name struct wlan_objmgr_pdev *pdev, 95*5113495bSYour Name struct wlan_objmgr_vdev *vdev, 96*5113495bSYour Name const void *data, 97*5113495bSYour Name int data_len); 98*5113495bSYour Name 99*5113495bSYour Name /** 100*5113495bSYour Name * wlan_cfg80211_spectral_scan_stop() - Stop spectral scan 101*5113495bSYour Name * @wiphy: Pointer to wiphy 102*5113495bSYour Name * @pdev: Pointer to pdev 103*5113495bSYour Name * @vdev: Pointer to vdev 104*5113495bSYour Name * @data: Reference to data 105*5113495bSYour Name * @data_len: Length of @data 106*5113495bSYour Name * 107*5113495bSYour Name * Return: 0 on success, negative value on failure 108*5113495bSYour Name */ 109*5113495bSYour Name int wlan_cfg80211_spectral_scan_stop(struct wiphy *wiphy, 110*5113495bSYour Name struct wlan_objmgr_pdev *pdev, 111*5113495bSYour Name struct wlan_objmgr_vdev *vdev, 112*5113495bSYour Name const void *data, 113*5113495bSYour Name int data_len); 114*5113495bSYour Name 115*5113495bSYour Name /** 116*5113495bSYour Name * wlan_cfg80211_spectral_scan_get_config() - Get spectral scan config 117*5113495bSYour Name * @wiphy: Pointer to wiphy 118*5113495bSYour Name * @pdev: Pointer to pdev 119*5113495bSYour Name * @vdev: Pointer to vdev 120*5113495bSYour Name * @data: Reference to data 121*5113495bSYour Name * @data_len: Length of @data 122*5113495bSYour Name * 123*5113495bSYour Name * Return: 0 on success, negative value on failure 124*5113495bSYour Name */ 125*5113495bSYour Name int wlan_cfg80211_spectral_scan_get_config(struct wiphy *wiphy, 126*5113495bSYour Name struct wlan_objmgr_pdev *pdev, 127*5113495bSYour Name struct wlan_objmgr_vdev *vdev, 128*5113495bSYour Name const void *data, 129*5113495bSYour Name int data_len); 130*5113495bSYour Name 131*5113495bSYour Name /** 132*5113495bSYour Name * wlan_cfg80211_spectral_scan_get_cap() - Get spectral system capabilities 133*5113495bSYour Name * @wiphy: Pointer to wiphy 134*5113495bSYour Name * @pdev: Pointer to pdev 135*5113495bSYour Name * @vdev: Pointer to vdev 136*5113495bSYour Name * @data: Reference to data 137*5113495bSYour Name * @data_len: Length of @data 138*5113495bSYour Name * 139*5113495bSYour Name * Return: 0 on success, negative value on failure 140*5113495bSYour Name */ 141*5113495bSYour Name int wlan_cfg80211_spectral_scan_get_cap(struct wiphy *wiphy, 142*5113495bSYour Name struct wlan_objmgr_pdev *pdev, 143*5113495bSYour Name struct wlan_objmgr_vdev *vdev, 144*5113495bSYour Name const void *data, 145*5113495bSYour Name int data_len); 146*5113495bSYour Name 147*5113495bSYour Name /** 148*5113495bSYour Name * wlan_cfg80211_spectral_scan_get_diag_stats() - Get spectral diag stats 149*5113495bSYour Name * @wiphy: Pointer to wiphy 150*5113495bSYour Name * @pdev: Pointer to pdev 151*5113495bSYour Name * @vdev: Pointer to vdev 152*5113495bSYour Name * @data: Reference to data 153*5113495bSYour Name * @data_len: Length of @data 154*5113495bSYour Name * 155*5113495bSYour Name * Return: 0 on success, negative value on failure 156*5113495bSYour Name */ 157*5113495bSYour Name int wlan_cfg80211_spectral_scan_get_diag_stats(struct wiphy *wiphy, 158*5113495bSYour Name struct wlan_objmgr_pdev *pdev, 159*5113495bSYour Name struct wlan_objmgr_vdev *vdev, 160*5113495bSYour Name const void *data, 161*5113495bSYour Name int data_len); 162*5113495bSYour Name 163*5113495bSYour Name /** 164*5113495bSYour Name * wlan_cfg80211_spectral_scan_get_status() - Get spectral scan status 165*5113495bSYour Name * @wiphy: Pointer to wiphy 166*5113495bSYour Name * @pdev: Pointer to pdev 167*5113495bSYour Name * @vdev: Pointer to vdev 168*5113495bSYour Name * @data: Reference to data 169*5113495bSYour Name * @data_len: Length of @data 170*5113495bSYour Name * 171*5113495bSYour Name * Return: 0 on success, negative value on failure 172*5113495bSYour Name */ 173*5113495bSYour Name int wlan_cfg80211_spectral_scan_get_status(struct wiphy *wiphy, 174*5113495bSYour Name struct wlan_objmgr_pdev *pdev, 175*5113495bSYour Name struct wlan_objmgr_vdev *vdev, 176*5113495bSYour Name const void *data, 177*5113495bSYour Name int data_len); 178*5113495bSYour Name 179*5113495bSYour Name /** 180*5113495bSYour Name * wlan_cfg80211_spectral_scan_dma_debug_config() - configure DMA debug 181*5113495bSYour Name * @pdev: Pointer to pdev 182*5113495bSYour Name * @vdev: Pointer to vdev 183*5113495bSYour Name * @tb: Pointer to Spectral Scan config attribute 184*5113495bSYour Name * @sscan_mode: Spectral scan mode 185*5113495bSYour Name * 186*5113495bSYour Name * Return QDF_STATUS_SUCCESS on success, QDF_STATUS_E_FAILURE on failure 187*5113495bSYour Name */ 188*5113495bSYour Name QDF_STATUS wlan_cfg80211_spectral_scan_dma_debug_config( 189*5113495bSYour Name struct wlan_objmgr_pdev *pdev, 190*5113495bSYour Name struct wlan_objmgr_vdev *vdev, 191*5113495bSYour Name struct nlattr **tb, 192*5113495bSYour Name enum spectral_scan_mode sscan_mode); 193*5113495bSYour Name #endif 194