1*5113495bSYour Name /* 2*5113495bSYour Name * Copyright (c) 2013-2020 The Linux Foundation. All rights reserved. 3*5113495bSYour Name * Copyright (c) 2022-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 * This file contains the API definitions for the STA WMI APIs. 22*5113495bSYour Name */ 23*5113495bSYour Name 24*5113495bSYour Name #ifndef _WMI_UNIFIED_STA_PARAM_H_ 25*5113495bSYour Name #define _WMI_UNIFIED_STA_PARAM_H_ 26*5113495bSYour Name 27*5113495bSYour Name /** 28*5113495bSYour Name * struct sta_keep_alive_params - sta keep alive parameters 29*5113495bSYour Name * @vdev_id: vdev id 30*5113495bSYour Name * @method: keep alive method 31*5113495bSYour Name * @timeperiod: time to keep alive 32*5113495bSYour Name * @hostv4addr: host ipv4 address 33*5113495bSYour Name * @destv4addr: destination ipv4 address 34*5113495bSYour Name * @destmac: destination mac address 35*5113495bSYour Name */ 36*5113495bSYour Name struct sta_keep_alive_params { 37*5113495bSYour Name uint8_t vdev_id; 38*5113495bSYour Name uint32_t method; 39*5113495bSYour Name uint32_t timeperiod; 40*5113495bSYour Name uint8_t hostv4addr[QDF_IPV4_ADDR_SIZE]; 41*5113495bSYour Name uint8_t destv4addr[QDF_IPV4_ADDR_SIZE]; 42*5113495bSYour Name uint8_t destmac[QDF_MAC_ADDR_SIZE]; 43*5113495bSYour Name }; 44*5113495bSYour Name 45*5113495bSYour Name /** 46*5113495bSYour Name * struct wmi_gtx_config - GTX config 47*5113495bSYour Name * @gtx_rt_mask: for HT and VHT rate masks 48*5113495bSYour Name * @gtx_usrcfg: host request for GTX mask 49*5113495bSYour Name * @gtx_threshold: PER Threshold (default: 10%) 50*5113495bSYour Name * @gtx_margin: PER margin (default: 2%) 51*5113495bSYour Name * @gtx_tpcstep: TPC step (default: 1) 52*5113495bSYour Name * @gtx_tpcmin: TPC min (default: 5) 53*5113495bSYour Name * @gtx_bwmask: BW mask (20/40/80/160 Mhz) 54*5113495bSYour Name */ 55*5113495bSYour Name struct wmi_gtx_config { 56*5113495bSYour Name uint32_t gtx_rt_mask[2]; 57*5113495bSYour Name uint32_t gtx_usrcfg; 58*5113495bSYour Name uint32_t gtx_threshold; 59*5113495bSYour Name uint32_t gtx_margin; 60*5113495bSYour Name uint32_t gtx_tpcstep; 61*5113495bSYour Name uint32_t gtx_tpcmin; 62*5113495bSYour Name uint32_t gtx_bwmask; 63*5113495bSYour Name }; 64*5113495bSYour Name 65*5113495bSYour Name /** 66*5113495bSYour Name * struct wlm_latency_level_param - WLM parameters 67*5113495bSYour Name * @wlm_latency_level: wlm latency level to set 68*5113495bSYour Name * 0 - normal, 1 - moderate, 2 - low, 3 - ultralow 69*5113495bSYour Name * @wlm_latency_flags: wlm latency flags to set 70*5113495bSYour Name * |31 12| 11 | 10 |9 8|7 6|5 4|3 2| 1 | 0 | 71*5113495bSYour Name * +------+------+------+------+------+------+------+-----+-----+ 72*5113495bSYour Name * | RSVD | SSLP | CSLP | RSVD | Roam | RSVD | DWLT | DFS | SUP | 73*5113495bSYour Name * +------+-------------+-------------+-------------------------+ 74*5113495bSYour Name * | WAL | PS | Roam | Scan | 75*5113495bSYour Name * 76*5113495bSYour Name * bit 0: Avoid scan request from HLOS if setting 77*5113495bSYour Name * bit 1: Skip DFS channel SCAN if setting 78*5113495bSYour Name * bit 2-3: Define policy of dwell time/duration for each foreign channel 79*5113495bSYour Name * (b2 b3) 80*5113495bSYour Name * (0 0 ): Default scan dwell time 81*5113495bSYour Name * (0 1 ): Reserve 82*5113495bSYour Name * (1 0 ): Shrink off channel dwell time 83*5113495bSYour Name * (1 1 ): Reserve 84*5113495bSYour Name * bit 4-5: Reserve for scan 85*5113495bSYour Name * bit 6-7: Define roaming policy 86*5113495bSYour Name * (b6 b7) 87*5113495bSYour Name * (0 0 ): Default roaming behavior, allow roaming in all scenarios 88*5113495bSYour Name * (0 1 ): Disallow all roaming 89*5113495bSYour Name * (1 0 ): Allow roaming when final bmissed 90*5113495bSYour Name * (1 1 ): Reserve 91*5113495bSYour Name * bit 8-9: Reserve for roaming 92*5113495bSYour Name * bit 10: Disable css power collapse if setting 93*5113495bSYour Name * bit 11: Disable sys sleep if setting 94*5113495bSYour Name * bit 12-31: Reserve for future usage 95*5113495bSYour Name * @vdev_id: vdev id 96*5113495bSYour Name * @force_reset: bit 0 used as force reset to override the latency level as 97*5113495bSYour Name * default for all the wlm clients 98*5113495bSYour Name * @client_id_bitmask: clients of WLM Arbiter 99*5113495bSYour Name */ 100*5113495bSYour Name struct wlm_latency_level_param { 101*5113495bSYour Name uint16_t wlm_latency_level; 102*5113495bSYour Name uint32_t wlm_latency_flags; 103*5113495bSYour Name uint16_t vdev_id; 104*5113495bSYour Name #ifdef MULTI_CLIENT_LL_SUPPORT 105*5113495bSYour Name uint32_t force_reset; 106*5113495bSYour Name uint32_t client_id_bitmask; 107*5113495bSYour Name #endif 108*5113495bSYour Name }; 109*5113495bSYour Name 110*5113495bSYour Name #define WMI_2_4_GHZ_MAX_FREQ 3000 111*5113495bSYour Name 112*5113495bSYour Name /** 113*5113495bSYour Name * struct vdev_ie_info_param - IE info 114*5113495bSYour Name * @vdev_id: vdev for which the IE is being sent 115*5113495bSYour Name * @ie_id: ID of the IE 116*5113495bSYour Name * @length: length of the IE data 117*5113495bSYour Name * @ie_source: 118*5113495bSYour Name * @band: 119*5113495bSYour Name * @data: IE data 120*5113495bSYour Name * 121*5113495bSYour Name * This structure is used to store the IE information. 122*5113495bSYour Name */ 123*5113495bSYour Name struct vdev_ie_info_param { 124*5113495bSYour Name uint32_t vdev_id; 125*5113495bSYour Name uint32_t ie_id; 126*5113495bSYour Name uint32_t length; 127*5113495bSYour Name uint32_t ie_source; 128*5113495bSYour Name uint32_t band; 129*5113495bSYour Name uint8_t *data; 130*5113495bSYour Name }; 131*5113495bSYour Name 132*5113495bSYour Name #define MAX_SAR_LIMIT_ROWS_SUPPORTED 64 133*5113495bSYour Name /** 134*5113495bSYour Name * struct sar_limit_cmd_row - sar limits row 135*5113495bSYour Name * @band_id: Optional param for frequency band 136*5113495bSYour Name * See %enum wmi_sar_band_id_flags for possible values 137*5113495bSYour Name * @chain_id: Optional param for antenna chain id 138*5113495bSYour Name * @mod_id: Optional param for modulation scheme 139*5113495bSYour Name * See %enum wmi_sar_mod_id_flags for possible values 140*5113495bSYour Name * @limit_value: Mandatory param providing power limits in steps of 0.5 dbm 141*5113495bSYour Name * @validity_bitmap: bitmap of valid optional params in sar_limit_cmd_row struct 142*5113495bSYour Name * See WMI_SAR_*_VALID_MASK for possible values 143*5113495bSYour Name */ 144*5113495bSYour Name struct sar_limit_cmd_row { 145*5113495bSYour Name uint32_t band_id; 146*5113495bSYour Name uint32_t chain_id; 147*5113495bSYour Name uint32_t mod_id; 148*5113495bSYour Name uint32_t limit_value; 149*5113495bSYour Name uint32_t validity_bitmap; 150*5113495bSYour Name }; 151*5113495bSYour Name 152*5113495bSYour Name /** 153*5113495bSYour Name * struct sar_limit_cmd_params - sar limits params 154*5113495bSYour Name * @sar_enable: flag to enable SAR 155*5113495bSYour Name * See %enum wmi_sar_feature_state_flags for possible values 156*5113495bSYour Name * @num_limit_rows: number of items in sar_limits 157*5113495bSYour Name * @commit_limits: indicates firmware to start apply new SAR values 158*5113495bSYour Name * @sar_limit_row_list: pointer to array of sar limit rows 159*5113495bSYour Name */ 160*5113495bSYour Name struct sar_limit_cmd_params { 161*5113495bSYour Name uint32_t sar_enable; 162*5113495bSYour Name uint32_t num_limit_rows; 163*5113495bSYour Name uint32_t commit_limits; 164*5113495bSYour Name struct sar_limit_cmd_row *sar_limit_row_list; 165*5113495bSYour Name }; 166*5113495bSYour Name 167*5113495bSYour Name /** 168*5113495bSYour Name * struct sar_limit_event_row - sar limits row 169*5113495bSYour Name * @band_id: Frequency band. 170*5113495bSYour Name * See %enum wmi_sar_band_id_flags for possible values 171*5113495bSYour Name * @chain_id: Chain id 172*5113495bSYour Name * @mod_id: Modulation scheme 173*5113495bSYour Name * See %enum wmi_sar_mod_id_flags for possible values 174*5113495bSYour Name * @limit_value: Power limits in steps of 0.5 dbm that is currently active for 175*5113495bSYour Name * the given @band_id, @chain_id, and @mod_id 176*5113495bSYour Name */ 177*5113495bSYour Name struct sar_limit_event_row { 178*5113495bSYour Name uint32_t band_id; 179*5113495bSYour Name uint32_t chain_id; 180*5113495bSYour Name uint32_t mod_id; 181*5113495bSYour Name uint32_t limit_value; 182*5113495bSYour Name }; 183*5113495bSYour Name 184*5113495bSYour Name /** 185*5113495bSYour Name * struct sar_limit_event - sar limits params 186*5113495bSYour Name * @sar_enable: Current status of SAR enablement. 187*5113495bSYour Name * See %enum wmi_sar_feature_state_flags for possible values 188*5113495bSYour Name * @num_limit_rows: number of items in sar_limits 189*5113495bSYour Name * @sar_limit_row: array of sar limit rows. Only @num_limit_rows 190*5113495bSYour Name * should be considered valid. 191*5113495bSYour Name */ 192*5113495bSYour Name struct sar_limit_event { 193*5113495bSYour Name uint32_t sar_enable; 194*5113495bSYour Name uint32_t num_limit_rows; 195*5113495bSYour Name struct sar_limit_event_row 196*5113495bSYour Name sar_limit_row[MAX_SAR_LIMIT_ROWS_SUPPORTED]; 197*5113495bSYour Name }; 198*5113495bSYour Name 199*5113495bSYour Name #define WMI_UNIFIED_MAX_PMKID_LEN 16 200*5113495bSYour Name #define WMI_UNIFIED_MAX_PMK_LEN 64 201*5113495bSYour Name 202*5113495bSYour Name /** 203*5113495bSYour Name * struct wmi_unified_pmk_cache - used to set del pmkid cache 204*5113495bSYour Name * @vdev_id: ID of the vdev being configured 205*5113495bSYour Name * @pmk_len: PMK len 206*5113495bSYour Name * for big-endian hosts, manual endian conversion will be needed to keep 207*5113495bSYour Name * the array values in their original order in spite of the automatic 208*5113495bSYour Name * byte-swap applied to WMI messages during download 209*5113495bSYour Name * @pmk: PMK array 210*5113495bSYour Name * @pmkid_len: PMK ID Len 211*5113495bSYour Name * @pmkid: PMK ID Array 212*5113495bSYour Name * @bssid: BSSID 213*5113495bSYour Name * @ssid: SSID 214*5113495bSYour Name * @cache_id: PMK Cache ID 215*5113495bSYour Name * @cat_flag: whether (bssid) or (ssid,cache_id) is valid 216*5113495bSYour Name * @action_flag: add/delete the entry 217*5113495bSYour Name * @is_flush_all: FLAG to indicate PMKSA flush. True if PMKSA cache flush is 218*5113495bSYour Name * needed. 219*5113495bSYour Name */ 220*5113495bSYour Name struct wmi_unified_pmk_cache { 221*5113495bSYour Name uint8_t vdev_id; 222*5113495bSYour Name uint32_t pmk_len; 223*5113495bSYour Name uint8_t pmk[WMI_UNIFIED_MAX_PMK_LEN]; 224*5113495bSYour Name uint32_t pmkid_len; 225*5113495bSYour Name uint8_t pmkid[WMI_UNIFIED_MAX_PMKID_LEN]; 226*5113495bSYour Name wmi_host_mac_addr bssid; 227*5113495bSYour Name struct wlan_ssid ssid; 228*5113495bSYour Name uint32_t cache_id; 229*5113495bSYour Name uint32_t cat_flag; 230*5113495bSYour Name uint32_t action_flag; 231*5113495bSYour Name bool is_flush_all; 232*5113495bSYour Name }; 233*5113495bSYour Name 234*5113495bSYour Name #define WMI_QOS_NUM_AC_MAX 4 235*5113495bSYour Name 236*5113495bSYour Name /** 237*5113495bSYour Name * struct aggr_add_ts_param - ADDTS parameters 238*5113495bSYour Name * @tspecIdx: TSPEC handler uniquely identifying a TSPEC for a STA in a BSS 239*5113495bSYour Name * @tspec: tspec value 240*5113495bSYour Name * @status: QDF status 241*5113495bSYour Name * @sessionId: session id 242*5113495bSYour Name * @vdev_id: vdev id 243*5113495bSYour Name */ 244*5113495bSYour Name struct aggr_add_ts_param { 245*5113495bSYour Name uint16_t tspecIdx; 246*5113495bSYour Name struct mac_tspec_ie tspec[WMI_QOS_NUM_AC_MAX]; 247*5113495bSYour Name QDF_STATUS status[WMI_QOS_NUM_AC_MAX]; 248*5113495bSYour Name uint8_t sessionId; 249*5113495bSYour Name uint8_t vdev_id; 250*5113495bSYour Name }; 251*5113495bSYour Name 252*5113495bSYour Name #define WMI_PERIODIC_TX_PTRN_MAX_SIZE 1536 253*5113495bSYour Name /** 254*5113495bSYour Name * struct periodic_tx_pattern - periodic tx pattern 255*5113495bSYour Name * @mac_address: MAC Address for the adapter 256*5113495bSYour Name * @ucPtrnId: Pattern ID 257*5113495bSYour Name * @ucPtrnSize: Pattern size 258*5113495bSYour Name * @usPtrnIntervalMs: in ms 259*5113495bSYour Name * @ucPattern: Pattern buffer 260*5113495bSYour Name */ 261*5113495bSYour Name struct periodic_tx_pattern { 262*5113495bSYour Name struct qdf_mac_addr mac_address; 263*5113495bSYour Name uint8_t ucPtrnId; 264*5113495bSYour Name uint16_t ucPtrnSize; 265*5113495bSYour Name uint32_t usPtrnIntervalMs; 266*5113495bSYour Name uint8_t ucPattern[WMI_PERIODIC_TX_PTRN_MAX_SIZE]; 267*5113495bSYour Name }; 268*5113495bSYour Name 269*5113495bSYour Name /** 270*5113495bSYour Name * struct flashing_req_params - led flashing parameter 271*5113495bSYour Name * @req_id: request id 272*5113495bSYour Name * @pattern_id: pattern identifier. 0: disconnected 1: connected 273*5113495bSYour Name * @led_x0: led flashing parameter0 274*5113495bSYour Name * @led_x1: led flashing parameter1 275*5113495bSYour Name */ 276*5113495bSYour Name struct flashing_req_params { 277*5113495bSYour Name uint32_t req_id; 278*5113495bSYour Name uint32_t pattern_id; 279*5113495bSYour Name uint32_t led_x0; 280*5113495bSYour Name uint32_t led_x1; 281*5113495bSYour Name }; 282*5113495bSYour Name 283*5113495bSYour Name /** 284*5113495bSYour Name * struct wmi_pcl_chan_weights - Params to get the valid weighed list 285*5113495bSYour Name * @pcl_list: channel freq list sorted in preferred order 286*5113495bSYour Name * @pcl_len: Length of the PCL 287*5113495bSYour Name * @saved_chan_list: Valid channel freq list updated as part of 288*5113495bSYour Name * WMA_UPDATE_CHAN_LIST_REQ 289*5113495bSYour Name * @saved_num_chan: Length of the valid channel list 290*5113495bSYour Name * @weighed_valid_list: Weights of the valid channel list. This will have one 291*5113495bSYour Name * to one mapping with valid_chan_list. FW expects channel order and size to be 292*5113495bSYour Name * as per the list provided in WMI_SCAN_CHAN_LIST_CMDID. 293*5113495bSYour Name * @weight_list: Weights assigned by policy manager 294*5113495bSYour Name */ 295*5113495bSYour Name struct wmi_pcl_chan_weights { 296*5113495bSYour Name uint32_t pcl_list[NUM_CHANNELS]; 297*5113495bSYour Name uint32_t pcl_len; 298*5113495bSYour Name uint32_t saved_chan_list[NUM_CHANNELS]; 299*5113495bSYour Name uint32_t saved_num_chan; 300*5113495bSYour Name uint8_t weighed_valid_list[NUM_CHANNELS]; 301*5113495bSYour Name uint8_t weight_list[NUM_CHANNELS]; 302*5113495bSYour Name }; 303*5113495bSYour Name 304*5113495bSYour Name /** 305*5113495bSYour Name * struct wmi_adaptive_dwelltime_params - the adaptive dwelltime params 306*5113495bSYour Name * @vdev_id: vdev id 307*5113495bSYour Name * @is_enabled: Adaptive dwell time is enabled/disabled 308*5113495bSYour Name * @dwelltime_mode: global default adaptive dwell mode 309*5113495bSYour Name * @lpf_weight: weight to calculate the average low pass 310*5113495bSYour Name * filter for channel congestion 311*5113495bSYour Name * @passive_mon_intval: intval to monitor wifi activity in passive scan in msec 312*5113495bSYour Name * @wifi_act_threshold: % of wifi activity used in passive scan 0-100 313*5113495bSYour Name * 314*5113495bSYour Name */ 315*5113495bSYour Name struct wmi_adaptive_dwelltime_params { 316*5113495bSYour Name uint32_t vdev_id; 317*5113495bSYour Name bool is_enabled; 318*5113495bSYour Name enum scan_dwelltime_adaptive_mode dwelltime_mode; 319*5113495bSYour Name uint8_t lpf_weight; 320*5113495bSYour Name uint8_t passive_mon_intval; 321*5113495bSYour Name uint8_t wifi_act_threshold; 322*5113495bSYour Name }; 323*5113495bSYour Name 324*5113495bSYour Name #define WMI_SCAN_CLIENT_MAX 7 325*5113495bSYour Name 326*5113495bSYour Name /** 327*5113495bSYour Name * struct wmi_dbs_scan_sel_params - DBS scan selection params 328*5113495bSYour Name * @num_clients: Number of scan clients dutycycle 329*5113495bSYour Name * @pdev_id: pdev_id for identifying the MAC 330*5113495bSYour Name * @module_id: scan client module id 331*5113495bSYour Name * @num_dbs_scans: number of DBS scans 332*5113495bSYour Name * @num_non_dbs_scans: number of non-DBS scans 333*5113495bSYour Name */ 334*5113495bSYour Name struct wmi_dbs_scan_sel_params { 335*5113495bSYour Name uint32_t num_clients; 336*5113495bSYour Name uint32_t pdev_id; 337*5113495bSYour Name uint32_t module_id[WMI_SCAN_CLIENT_MAX]; 338*5113495bSYour Name uint32_t num_dbs_scans[WMI_SCAN_CLIENT_MAX]; 339*5113495bSYour Name uint32_t num_non_dbs_scans[WMI_SCAN_CLIENT_MAX]; 340*5113495bSYour Name }; 341*5113495bSYour Name 342*5113495bSYour Name /** 343*5113495bSYour Name * struct set_arp_stats - set/reset arp stats 344*5113495bSYour Name * @vdev_id: session id 345*5113495bSYour Name * @flag: enable/disable stats 346*5113495bSYour Name * @pkt_type: type of packet(1 - arp) 347*5113495bSYour Name * @ip_addr: subnet ipv4 address in case of encrypted packets 348*5113495bSYour Name * @pkt_type_bitmap: pkt bitmap 349*5113495bSYour Name * @tcp_src_port: tcp src port for pkt tracking 350*5113495bSYour Name * @tcp_dst_port: tcp dst port for pkt tracking 351*5113495bSYour Name * @icmp_ipv4: target ipv4 address to track ping packets 352*5113495bSYour Name * @reserved: reserved 353*5113495bSYour Name */ 354*5113495bSYour Name struct set_arp_stats { 355*5113495bSYour Name uint32_t vdev_id; 356*5113495bSYour Name uint8_t flag; 357*5113495bSYour Name uint8_t pkt_type; 358*5113495bSYour Name uint32_t ip_addr; 359*5113495bSYour Name uint32_t pkt_type_bitmap; 360*5113495bSYour Name uint32_t tcp_src_port; 361*5113495bSYour Name uint32_t tcp_dst_port; 362*5113495bSYour Name uint32_t icmp_ipv4; 363*5113495bSYour Name uint32_t reserved; 364*5113495bSYour Name }; 365*5113495bSYour Name 366*5113495bSYour Name /** 367*5113495bSYour Name * struct get_arp_stats - get arp stats from firmware 368*5113495bSYour Name * @pkt_type: packet type(1 - ARP) 369*5113495bSYour Name * @vdev_id: session id 370*5113495bSYour Name */ 371*5113495bSYour Name struct get_arp_stats { 372*5113495bSYour Name uint8_t pkt_type; 373*5113495bSYour Name uint32_t vdev_id; 374*5113495bSYour Name }; 375*5113495bSYour Name 376*5113495bSYour Name #endif /* _WMI_UNIFIED_STA_PARAM_H_ */ 377