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