1 /* 2 * Copyright (c) 2012-2017, 2020 The Linux Foundation. All rights reserved. 3 * Copyright (c) 2022 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: os_if_wifi_pos.h 22 * This file provide declaration of wifi_pos's os_if APIs 23 */ 24 #ifndef _OS_IF_WIFI_POS_H_ 25 #define _OS_IF_WIFI_POS_H_ 26 27 #include "qdf_types.h" 28 #include "qdf_status.h" 29 #include <wlan_objmgr_cmn.h> 30 #include "wifi_pos_public_struct.h" 31 #include "wlan_cfg80211.h" 32 33 /* forward declaration */ 34 struct wifi_pos_ch_info; 35 struct wlan_objmgr_psoc; 36 struct wifi_pos_driver_caps; 37 38 #ifdef WIFI_POS_CONVERGED 39 #define FEATURE_WIFI_POS_11AZ_AUTH_EVENTS \ 40 [QCA_NL80211_VENDOR_SUBCMD_PASN_AUTH_STATUS_INDEX] = { \ 41 .vendor_id = QCA_NL80211_VENDOR_ID, \ 42 .subcmd = QCA_NL80211_VENDOR_SUBCMD_PASN, \ 43 }, 44 45 /** 46 * os_if_wifi_pos_register_nl() - abstration API to register callback with GENL 47 * socket. 48 * 49 * Return: status of operation 50 */ 51 int os_if_wifi_pos_register_nl(void); 52 53 /** 54 * os_if_wifi_pos_deregister_nl() - abstration API to deregister callback with 55 * GENL socket. 56 * 57 * Return: status of operation 58 */ 59 int os_if_wifi_pos_deregister_nl(void); 60 61 /** 62 * os_if_wifi_pos_send_peer_status() - Function to send peer status to a 63 * registered application 64 * @peer_mac: MAC address of peer 65 * @peer_status: ePeerConnected or ePeerDisconnected 66 * @peer_timing_meas_cap: 0: RTT/RTT2, 1: RTT3. Default is 0 67 * @session_id: SME session id, i.e. vdev_id 68 * @chan_info: operating channel information 69 * @dev_mode: dev mode for which indication is sent 70 * 71 * Return: none 72 */ 73 void os_if_wifi_pos_send_peer_status(struct qdf_mac_addr *peer_mac, 74 uint8_t peer_status, 75 uint8_t peer_timing_meas_cap, 76 uint8_t session_id, 77 struct wifi_pos_ch_info *chan_info, 78 enum QDF_OPMODE dev_mode); 79 80 /** 81 * os_if_wifi_pos_populate_caps() - populate oem capabilities 82 * @psoc: psoc object 83 * @caps: pointer to populate the capabilities 84 * 85 * Return: error code 86 */ 87 int os_if_wifi_pos_populate_caps(struct wlan_objmgr_psoc *psoc, 88 struct wifi_pos_driver_caps *caps); 89 #else 90 #define FEATURE_WIFI_POS_11AZ_AUTH_EVENTS 91 92 static inline int os_if_wifi_pos_register_nl(void) 93 { 94 return 0; 95 } 96 97 static inline int os_if_wifi_pos_deregister_nl(void) 98 { 99 return 0; 100 } 101 102 static inline void os_if_wifi_pos_send_peer_status( 103 struct qdf_mac_addr *peer_mac, 104 uint8_t peer_status, 105 uint8_t peer_timing_meas_cap, 106 uint8_t session_id, 107 struct wifi_pos_ch_info *chan_info, 108 enum QDF_OPMODE dev_mode) 109 { 110 } 111 112 static inline int os_if_wifi_pos_populate_caps(struct wlan_objmgr_psoc *psoc, 113 struct wifi_pos_driver_caps *caps) 114 { 115 return 0; 116 } 117 #endif 118 119 #ifdef CNSS_GENL 120 /** 121 * enum cld80211_vendor_sub_cmds 122 * @CLD80211_VENDOR_SUB_CMD_INVALID: invalid cmd type 123 * @CLD80211_VENDOR_SUB_CMD_REGISTRATION: app registration 124 * @CLD80211_VENDOR_SUB_CMD_SET_CAPS: set driver capabilities 125 * @CLD80211_VENDOR_SUB_CMD_GET_CAPS: get driver capabilities 126 * @CLD80211_VENDOR_SUB_CMD_GET_CH_INFO: get channel info 127 * @CLD80211_VENDOR_SUB_CMD_OEM_DATA: oem data req/rsp 128 * @CLD80211_VENDOR_SUB_CMD_OEM_ERROR: oem error rsp 129 * @CLD80211_VENDOR_SUB_CMD_PEER_STATUS_IND: peer status indication 130 * @CLD80211_VENDOR_SUB_CMD_MAX: Max cld80211 vendor sub cmds 131 */ 132 enum cld80211_vendor_sub_cmds { 133 CLD80211_VENDOR_SUB_CMD_INVALID = 0, 134 CLD80211_VENDOR_SUB_CMD_REGISTRATION = 1, 135 CLD80211_VENDOR_SUB_CMD_SET_CAPS = 2, 136 CLD80211_VENDOR_SUB_CMD_GET_CAPS = 3, 137 CLD80211_VENDOR_SUB_CMD_GET_CH_INFO = 4, 138 CLD80211_VENDOR_SUB_CMD_OEM_DATA = 5, 139 CLD80211_VENDOR_SUB_CMD_OEM_ERROR = 6, 140 CLD80211_VENDOR_SUB_CMD_PEER_STATUS_IND = 7, 141 /* keep last */ 142 CLD80211_VENDOR_SUB_CMD__AFTER_LAST, 143 CLD80211_VENDOR_SUB_CMD_MAX = 144 CLD80211_VENDOR_SUB_CMD__AFTER_LAST - 1 145 }; 146 147 /** 148 * enum cld80211_sub_attr_cap_rsp - Capability response sub attribute 149 * @CLD80211_SUB_ATTR_CAPS_INVALID: Invalid capability 150 * @CLD80211_SUB_ATTR_CAPS_OEM_TARGET_SIGNATURE: OEM target signature 151 * @CLD80211_SUB_ATTR_CAPS_OEM_TARGET_TYPE: OEM target type 152 * @CLD80211_SUB_ATTR_CAPS_OEM_FW_VERSION: OEM firmware version 153 * @CLD80211_SUB_ATTR_CAPS_DRIVER_VERSION_MAJOR: Driver version major 154 * @CLD80211_SUB_ATTR_CAPS_DRIVER_VERSION_MINOR: Driver version minor 155 * @CLD80211_SUB_ATTR_CAPS_DRIVER_VERSION_PATCH: Driver version patch 156 * @CLD80211_SUB_ATTR_CAPS_DRIVER_VERSION_BUILD: Driver version build 157 * @CLD80211_SUB_ATTR_CAPS_ALLOWED_DWELL_TIME_MIN: Allowed dwell time min 158 * @CLD80211_SUB_ATTR_CAPS_ALLOWED_DWELL_TIME_MAX: Allowed dwell time max 159 * @CLD80211_SUB_ATTR_CAPS_CURRENT_DWELL_TIME_MIN: Current dwell time min 160 * @CLD80211_SUB_ATTR_CAPS_CURRENT_DWELL_TIME_MAX: Current dwell time max 161 * @CLD80211_SUB_ATTR_CAPS_SUPPORTED_BANDS: Supported bands 162 * @CLD80211_SUB_ATTR_CAPS_USER_DEFINED_CAPS: User defined capabilities 163 * @CLD80211_SUB_ATTR_CAPS_MAX: Max number for CAP sub attribute 164 * 165 */ 166 enum cld80211_sub_attr_cap_rsp { 167 CLD80211_SUB_ATTR_CAPS_INVALID = 0, 168 CLD80211_SUB_ATTR_CAPS_OEM_TARGET_SIGNATURE = 1, 169 CLD80211_SUB_ATTR_CAPS_OEM_TARGET_TYPE = 2, 170 CLD80211_SUB_ATTR_CAPS_OEM_FW_VERSION = 3, 171 CLD80211_SUB_ATTR_CAPS_DRIVER_VERSION_MAJOR = 4, 172 CLD80211_SUB_ATTR_CAPS_DRIVER_VERSION_MINOR = 5, 173 CLD80211_SUB_ATTR_CAPS_DRIVER_VERSION_PATCH = 6, 174 CLD80211_SUB_ATTR_CAPS_DRIVER_VERSION_BUILD = 7, 175 CLD80211_SUB_ATTR_CAPS_ALLOWED_DWELL_TIME_MIN = 8, 176 CLD80211_SUB_ATTR_CAPS_ALLOWED_DWELL_TIME_MAX = 9, 177 CLD80211_SUB_ATTR_CAPS_CURRENT_DWELL_TIME_MIN = 10, 178 CLD80211_SUB_ATTR_CAPS_CURRENT_DWELL_TIME_MAX = 11, 179 CLD80211_SUB_ATTR_CAPS_SUPPORTED_BANDS = 12, 180 CLD80211_SUB_ATTR_CAPS_USER_DEFINED_CAPS = 13, 181 182 /* keep last */ 183 CLD80211_SUB_ATTR_CAPS_AFTER_LAST, 184 CLD80211_SUB_ATTR_CAPS_MAX = 185 CLD80211_SUB_ATTR_CAPS_AFTER_LAST - 1 186 }; 187 188 /** 189 * enum cld80211_sub_attr_channel_rsp - Chan info response sub attribute 190 * @CLD80211_SUB_ATTR_CH_RESP_INVALID: Invalid channel resp 191 * @CLD80211_SUB_ATTR_CH_MORE_DATA: More date sub attr for frag response 192 * @CLD80211_SUB_ATTR_CHANNEL_NUM_CHAN: Number of channels in response 193 * @CLD80211_SUB_ATTR_CHANNEL_LIST: Channel list nesting 194 * @CLD80211_SUB_ATTR_CH_CHAN_ID: Channel number 195 * @CLD80211_SUB_ATTR_CH_MHZ: Channel frequency 196 * @CLD80211_SUB_ATTR_CH_BAND_CF_1: Center frequency 1 197 * @CLD80211_SUB_ATTR_CH_BAND_CF_2: Center frequency 2 198 * @CLD80211_SUB_ATTR_CH_INFO: channel info 199 * @CLD80211_SUB_ATTR_CH_REG_INFO_1: regulatory info field 1 200 * @CLD80211_SUB_ATTR_CH_REG_INFO_2: regulatory info field 2 201 * @CLD80211_SUB_ATTR_CAPS_MAX: Max number for CHAN Info sub attribute 202 * 203 */ 204 enum cld80211_sub_attr_channel_rsp { 205 CLD80211_SUB_ATTR_CH_RESP_INVALID = 0, 206 CLD80211_SUB_ATTR_CH_MORE_DATA = 1, 207 CLD80211_SUB_ATTR_CHANNEL_NUM_CHAN = 2, 208 CLD80211_SUB_ATTR_CH_LIST = 3, 209 /* CH_* belongs to CH_LIST */ 210 CLD80211_SUB_ATTR_CH_CHAN_ID = 4, 211 CLD80211_SUB_ATTR_CH_MHZ = 5, 212 CLD80211_SUB_ATTR_CH_BAND_CF_1 = 6, 213 CLD80211_SUB_ATTR_CH_BAND_CF_2 = 7, 214 CLD80211_SUB_ATTR_CH_INFO = 8, 215 CLD80211_SUB_ATTR_CH_REG_INFO_1 = 9, 216 CLD80211_SUB_ATTR_CH_REG_INFO_2 = 10, 217 218 /* keep last */ 219 CLD80211_SUB_ATTR_CH_AFTER_LAST, 220 CLD80211_SUB_ATTR_CH_MAX = 221 CLD80211_SUB_ATTR_CH_AFTER_LAST - 1 222 223 }; 224 225 /** 226 * enum cld80211_sub_attr_oem_data_req - OEM data req sub attribute 227 * @CLD80211_SUB_ATTR_MSG_OEM_DATA_INVALID: Invalid OEM data request 228 * @CLD80211_SUB_ATTR_MSG_OEM_DATA_FW: Data to Firmware 229 * @CLD80211_SUB_ATTR_MSG_OEM_DATA_DRIVER: Data to driver 230 * @CLD80211_SUB_ATTR_MSG_OEM_DATA_REQ_MAX: Max number for OEM data req sub 231 * attribute 232 * 233 * OEM data request sub attributes are NLA attributes in NLA type OEM data 234 * request. 235 * 236 */ 237 enum cld80211_sub_attr_oem_data_req { 238 CLD80211_SUB_ATTR_MSG_OEM_DATA_INVALID = 0, 239 CLD80211_SUB_ATTR_MSG_OEM_DATA_FW = 1, 240 CLD80211_SUB_ATTR_MSG_OEM_DATA_DRIVER = 2, 241 242 /* keep last */ 243 CLD80211_SUB_ATTR_MSG_OEM_DATA_REQ_AFTER_LAST, 244 CLD80211_SUB_ATTR_MSG_OEM_DATA_REQ_MAX = 245 CLD80211_SUB_ATTR_MSG_OEM_DATA_REQ_AFTER_LAST - 1 246 }; 247 248 /** 249 * enum cld80211_sub_attr_oem_data_resp - OEM message sub attribute 250 * @CLD80211_SUB_ATTR_OEM_DATA_INVALID: Invalid oem data resp 251 * @CLD80211_SUB_ATTR_OEM_MORE_DATA: more date sub attribute 252 * @CLD80211_SUB_ATTR_BINARY_DATA: Binary data sub attribute 253 * @CLD80211_SUB_ATTR_OEM_DATA_RESP_MAX: Max number for OEM data resp 254 * sub attribute 255 * 256 * OEM message sub attributes are interface between apps and driver to 257 * process NLA type request and response messages. 258 * 259 */ 260 enum cld80211_sub_attr_oem_data_resp { 261 CLD80211_SUB_ATTR_OEM_DATA_INVALID = 0, 262 CLD80211_SUB_ATTR_OEM_MORE_DATA = 1, 263 CLD80211_SUB_ATTR_BINARY_DATA = 2, 264 265 /* keep last */ 266 CLD80211_SUB_ATTR_OEM_DATA_RESP_AFTER_LAST, 267 CLD80211_SUB_ATTR_OEM_DATA_RESP_MAX = 268 CLD80211_SUB_ATTR_OEM_DATA_RESP_AFTER_LAST - 1 269 }; 270 271 /** 272 * enum cld80211_sub_attr_peer_info - peer info sub attribute 273 * @CLD80211_SUB_ATTR_PEER_INVALID: Invalid peer info 274 * @CLD80211_SUB_ATTR_PEER_MAC_ADDR: peer mac address 275 * @CLD80211_SUB_ATTR_PEER_STATUS: peer status 276 * @CLD80211_SUB_ATTR_PEER_VDEV_ID: peer vdevid 277 * @CLD80211_SUB_ATTR_PEER_CAPABILITY: peer capabilities 278 * @CLD80211_SUB_ATTR_PEER_RESERVED: reserved bytes 279 * @CLD80211_SUB_ATTR_PEER_CHAN_INFO: peer channel info 280 * 281 */ 282 enum cld80211_sub_attr_peer_info { 283 CLD80211_SUB_ATTR_PEER_INVALID = 0, 284 CLD80211_SUB_ATTR_PEER_MAC_ADDR = 1, 285 CLD80211_SUB_ATTR_PEER_STATUS = 2, 286 CLD80211_SUB_ATTR_PEER_VDEV_ID = 3, 287 CLD80211_SUB_ATTR_PEER_CAPABILITY = 4, 288 CLD80211_SUB_ATTR_PEER_RESERVED = 5, 289 CLD80211_SUB_ATTR_PEER_CHAN_INFO = 6, 290 291 /* keep last */ 292 CLD80211_SUB_ATTR_PEER_AFTER_LAST, 293 CLD80211_SUB_ATTR_PEER_MAX = 294 CLD80211_SUB_ATTR_PEER_AFTER_LAST - 1 295 }; 296 #endif 297 298 #if defined(WIFI_POS_CONVERGED) && defined(WLAN_FEATURE_RTT_11AZ_SUPPORT) 299 /** 300 * os_if_wifi_pos_initiate_pasn_auth() - Initiate PASN authentication from 301 * userspace 302 * @vdev: Vdev object pointer 303 * @pasn_peer: PASN Peer list 304 * @num_pasn_peers: number of PASN peers 305 * @is_initiate_pasn: Initiate pasn or initiate flush keys 306 * 307 * Return: QDF_STATUS 308 */ 309 QDF_STATUS os_if_wifi_pos_initiate_pasn_auth(struct wlan_objmgr_vdev *vdev, 310 struct wlan_pasn_request *pasn_peer, 311 uint8_t num_pasn_peers, 312 bool is_initiate_pasn); 313 #else 314 static inline 315 QDF_STATUS os_if_wifi_pos_initiate_pasn_auth(struct wlan_objmgr_vdev *vdev, 316 struct wlan_pasn_request *pasn_peer, 317 uint8_t num_pasn_peers, 318 bool is_initiate_pasn) 319 { 320 return QDF_STATUS_E_NOSUPPORT; 321 } 322 #endif /* WLAN_FEATURE_RTT_11AZ_SUPPORT */ 323 #endif /* _OS_IF_WIFI_POS_H_ */ 324