diff options
Diffstat (limited to 'drivers/net/wireless/ath/ath10k/wmi.h')
-rw-r--r-- | drivers/net/wireless/ath/ath10k/wmi.h | 1037 |
1 files changed, 17 insertions, 1020 deletions
diff --git a/drivers/net/wireless/ath/ath10k/wmi.h b/drivers/net/wireless/ath/ath10k/wmi.h index 78c991a..2c5a4f8 100644 --- a/drivers/net/wireless/ath/ath10k/wmi.h +++ b/drivers/net/wireless/ath/ath10k/wmi.h @@ -208,118 +208,6 @@ struct wmi_mac_addr { (c_macaddr)[5] = (((pwmi_mac_addr)->word1) >> 8) & 0xff; \ } while (0) -struct wmi_cmd_map { - u32 init_cmdid; - u32 start_scan_cmdid; - u32 stop_scan_cmdid; - u32 scan_chan_list_cmdid; - u32 scan_sch_prio_tbl_cmdid; - u32 pdev_set_regdomain_cmdid; - u32 pdev_set_channel_cmdid; - u32 pdev_set_param_cmdid; - u32 pdev_pktlog_enable_cmdid; - u32 pdev_pktlog_disable_cmdid; - u32 pdev_set_wmm_params_cmdid; - u32 pdev_set_ht_cap_ie_cmdid; - u32 pdev_set_vht_cap_ie_cmdid; - u32 pdev_set_dscp_tid_map_cmdid; - u32 pdev_set_quiet_mode_cmdid; - u32 pdev_green_ap_ps_enable_cmdid; - u32 pdev_get_tpc_config_cmdid; - u32 pdev_set_base_macaddr_cmdid; - u32 vdev_create_cmdid; - u32 vdev_delete_cmdid; - u32 vdev_start_request_cmdid; - u32 vdev_restart_request_cmdid; - u32 vdev_up_cmdid; - u32 vdev_stop_cmdid; - u32 vdev_down_cmdid; - u32 vdev_set_param_cmdid; - u32 vdev_install_key_cmdid; - u32 peer_create_cmdid; - u32 peer_delete_cmdid; - u32 peer_flush_tids_cmdid; - u32 peer_set_param_cmdid; - u32 peer_assoc_cmdid; - u32 peer_add_wds_entry_cmdid; - u32 peer_remove_wds_entry_cmdid; - u32 peer_mcast_group_cmdid; - u32 bcn_tx_cmdid; - u32 pdev_send_bcn_cmdid; - u32 bcn_tmpl_cmdid; - u32 bcn_filter_rx_cmdid; - u32 prb_req_filter_rx_cmdid; - u32 mgmt_tx_cmdid; - u32 prb_tmpl_cmdid; - u32 addba_clear_resp_cmdid; - u32 addba_send_cmdid; - u32 addba_status_cmdid; - u32 delba_send_cmdid; - u32 addba_set_resp_cmdid; - u32 send_singleamsdu_cmdid; - u32 sta_powersave_mode_cmdid; - u32 sta_powersave_param_cmdid; - u32 sta_mimo_ps_mode_cmdid; - u32 pdev_dfs_enable_cmdid; - u32 pdev_dfs_disable_cmdid; - u32 roam_scan_mode; - u32 roam_scan_rssi_threshold; - u32 roam_scan_period; - u32 roam_scan_rssi_change_threshold; - u32 roam_ap_profile; - u32 ofl_scan_add_ap_profile; - u32 ofl_scan_remove_ap_profile; - u32 ofl_scan_period; - u32 p2p_dev_set_device_info; - u32 p2p_dev_set_discoverability; - u32 p2p_go_set_beacon_ie; - u32 p2p_go_set_probe_resp_ie; - u32 p2p_set_vendor_ie_data_cmdid; - u32 ap_ps_peer_param_cmdid; - u32 ap_ps_peer_uapsd_coex_cmdid; - u32 peer_rate_retry_sched_cmdid; - u32 wlan_profile_trigger_cmdid; - u32 wlan_profile_set_hist_intvl_cmdid; - u32 wlan_profile_get_profile_data_cmdid; - u32 wlan_profile_enable_profile_id_cmdid; - u32 wlan_profile_list_profile_id_cmdid; - u32 pdev_suspend_cmdid; - u32 pdev_resume_cmdid; - u32 add_bcn_filter_cmdid; - u32 rmv_bcn_filter_cmdid; - u32 wow_add_wake_pattern_cmdid; - u32 wow_del_wake_pattern_cmdid; - u32 wow_enable_disable_wake_event_cmdid; - u32 wow_enable_cmdid; - u32 wow_hostwakeup_from_sleep_cmdid; - u32 rtt_measreq_cmdid; - u32 rtt_tsf_cmdid; - u32 vdev_spectral_scan_configure_cmdid; - u32 vdev_spectral_scan_enable_cmdid; - u32 request_stats_cmdid; - u32 set_arp_ns_offload_cmdid; - u32 network_list_offload_config_cmdid; - u32 gtk_offload_cmdid; - u32 csa_offload_enable_cmdid; - u32 csa_offload_chanswitch_cmdid; - u32 chatter_set_mode_cmdid; - u32 peer_tid_addba_cmdid; - u32 peer_tid_delba_cmdid; - u32 sta_dtim_ps_method_cmdid; - u32 sta_uapsd_auto_trig_cmdid; - u32 sta_keepalive_cmd; - u32 echo_cmdid; - u32 pdev_utf_cmdid; - u32 dbglog_cfg_cmdid; - u32 pdev_qvit_cmdid; - u32 pdev_ftm_intg_cmdid; - u32 vdev_set_keepalive_cmdid; - u32 vdev_get_keepalive_cmdid; - u32 force_fw_hang_cmdid; - u32 gpio_config_cmdid; - u32 gpio_output_cmdid; -}; - /* * wmi command groups. */ @@ -359,9 +247,7 @@ enum wmi_cmd_group { #define WMI_CMD_GRP(grp_id) (((grp_id) << 12) | 0x1) #define WMI_EVT_GRP_START_ID(grp_id) (((grp_id) << 12) | 0x1) -#define WMI_CMD_UNSUPPORTED 0 - -/* Command IDs and command events for MAIN FW. */ +/* Command IDs and commande events. */ enum wmi_cmd_id { WMI_INIT_CMDID = 0x1, @@ -602,217 +488,6 @@ enum wmi_event_id { WMI_GPIO_INPUT_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_GPIO), }; -/* Command IDs and command events for 10.X firmware */ -enum wmi_10x_cmd_id { - WMI_10X_START_CMDID = 0x9000, - WMI_10X_END_CMDID = 0x9FFF, - - /* initialize the wlan sub system */ - WMI_10X_INIT_CMDID, - - /* Scan specific commands */ - - WMI_10X_START_SCAN_CMDID = WMI_10X_START_CMDID, - WMI_10X_STOP_SCAN_CMDID, - WMI_10X_SCAN_CHAN_LIST_CMDID, - WMI_10X_ECHO_CMDID, - - /* PDEV(physical device) specific commands */ - WMI_10X_PDEV_SET_REGDOMAIN_CMDID, - WMI_10X_PDEV_SET_CHANNEL_CMDID, - WMI_10X_PDEV_SET_PARAM_CMDID, - WMI_10X_PDEV_PKTLOG_ENABLE_CMDID, - WMI_10X_PDEV_PKTLOG_DISABLE_CMDID, - WMI_10X_PDEV_SET_WMM_PARAMS_CMDID, - WMI_10X_PDEV_SET_HT_CAP_IE_CMDID, - WMI_10X_PDEV_SET_VHT_CAP_IE_CMDID, - WMI_10X_PDEV_SET_BASE_MACADDR_CMDID, - WMI_10X_PDEV_SET_DSCP_TID_MAP_CMDID, - WMI_10X_PDEV_SET_QUIET_MODE_CMDID, - WMI_10X_PDEV_GREEN_AP_PS_ENABLE_CMDID, - WMI_10X_PDEV_GET_TPC_CONFIG_CMDID, - - /* VDEV(virtual device) specific commands */ - WMI_10X_VDEV_CREATE_CMDID, - WMI_10X_VDEV_DELETE_CMDID, - WMI_10X_VDEV_START_REQUEST_CMDID, - WMI_10X_VDEV_RESTART_REQUEST_CMDID, - WMI_10X_VDEV_UP_CMDID, - WMI_10X_VDEV_STOP_CMDID, - WMI_10X_VDEV_DOWN_CMDID, - WMI_10X_VDEV_STANDBY_RESPONSE_CMDID, - WMI_10X_VDEV_RESUME_RESPONSE_CMDID, - WMI_10X_VDEV_SET_PARAM_CMDID, - WMI_10X_VDEV_INSTALL_KEY_CMDID, - - /* peer specific commands */ - WMI_10X_PEER_CREATE_CMDID, - WMI_10X_PEER_DELETE_CMDID, - WMI_10X_PEER_FLUSH_TIDS_CMDID, - WMI_10X_PEER_SET_PARAM_CMDID, - WMI_10X_PEER_ASSOC_CMDID, - WMI_10X_PEER_ADD_WDS_ENTRY_CMDID, - WMI_10X_PEER_REMOVE_WDS_ENTRY_CMDID, - WMI_10X_PEER_MCAST_GROUP_CMDID, - - /* beacon/management specific commands */ - - WMI_10X_BCN_TX_CMDID, - WMI_10X_BCN_PRB_TMPL_CMDID, - WMI_10X_BCN_FILTER_RX_CMDID, - WMI_10X_PRB_REQ_FILTER_RX_CMDID, - WMI_10X_MGMT_TX_CMDID, - - /* commands to directly control ba negotiation directly from host. */ - WMI_10X_ADDBA_CLEAR_RESP_CMDID, - WMI_10X_ADDBA_SEND_CMDID, - WMI_10X_ADDBA_STATUS_CMDID, - WMI_10X_DELBA_SEND_CMDID, - WMI_10X_ADDBA_SET_RESP_CMDID, - WMI_10X_SEND_SINGLEAMSDU_CMDID, - - /* Station power save specific config */ - WMI_10X_STA_POWERSAVE_MODE_CMDID, - WMI_10X_STA_POWERSAVE_PARAM_CMDID, - WMI_10X_STA_MIMO_PS_MODE_CMDID, - - /* set debug log config */ - WMI_10X_DBGLOG_CFG_CMDID, - - /* DFS-specific commands */ - WMI_10X_PDEV_DFS_ENABLE_CMDID, - WMI_10X_PDEV_DFS_DISABLE_CMDID, - - /* QVIT specific command id */ - WMI_10X_PDEV_QVIT_CMDID, - - /* Offload Scan and Roaming related commands */ - WMI_10X_ROAM_SCAN_MODE, - WMI_10X_ROAM_SCAN_RSSI_THRESHOLD, - WMI_10X_ROAM_SCAN_PERIOD, - WMI_10X_ROAM_SCAN_RSSI_CHANGE_THRESHOLD, - WMI_10X_ROAM_AP_PROFILE, - WMI_10X_OFL_SCAN_ADD_AP_PROFILE, - WMI_10X_OFL_SCAN_REMOVE_AP_PROFILE, - WMI_10X_OFL_SCAN_PERIOD, - - /* P2P specific commands */ - WMI_10X_P2P_DEV_SET_DEVICE_INFO, - WMI_10X_P2P_DEV_SET_DISCOVERABILITY, - WMI_10X_P2P_GO_SET_BEACON_IE, - WMI_10X_P2P_GO_SET_PROBE_RESP_IE, - - /* AP power save specific config */ - WMI_10X_AP_PS_PEER_PARAM_CMDID, - WMI_10X_AP_PS_PEER_UAPSD_COEX_CMDID, - - /* Rate-control specific commands */ - WMI_10X_PEER_RATE_RETRY_SCHED_CMDID, - - /* WLAN Profiling commands. */ - WMI_10X_WLAN_PROFILE_TRIGGER_CMDID, - WMI_10X_WLAN_PROFILE_SET_HIST_INTVL_CMDID, - WMI_10X_WLAN_PROFILE_GET_PROFILE_DATA_CMDID, - WMI_10X_WLAN_PROFILE_ENABLE_PROFILE_ID_CMDID, - WMI_10X_WLAN_PROFILE_LIST_PROFILE_ID_CMDID, - - /* Suspend resume command Ids */ - WMI_10X_PDEV_SUSPEND_CMDID, - WMI_10X_PDEV_RESUME_CMDID, - - /* Beacon filter commands */ - WMI_10X_ADD_BCN_FILTER_CMDID, - WMI_10X_RMV_BCN_FILTER_CMDID, - - /* WOW Specific WMI commands*/ - WMI_10X_WOW_ADD_WAKE_PATTERN_CMDID, - WMI_10X_WOW_DEL_WAKE_PATTERN_CMDID, - WMI_10X_WOW_ENABLE_DISABLE_WAKE_EVENT_CMDID, - WMI_10X_WOW_ENABLE_CMDID, - WMI_10X_WOW_HOSTWAKEUP_FROM_SLEEP_CMDID, - - /* RTT measurement related cmd */ - WMI_10X_RTT_MEASREQ_CMDID, - WMI_10X_RTT_TSF_CMDID, - - /* transmit beacon by value */ - WMI_10X_PDEV_SEND_BCN_CMDID, - - /* F/W stats */ - WMI_10X_VDEV_SPECTRAL_SCAN_CONFIGURE_CMDID, - WMI_10X_VDEV_SPECTRAL_SCAN_ENABLE_CMDID, - WMI_10X_REQUEST_STATS_CMDID, - - /* GPIO Configuration */ - WMI_10X_GPIO_CONFIG_CMDID, - WMI_10X_GPIO_OUTPUT_CMDID, - - WMI_10X_PDEV_UTF_CMDID = WMI_10X_END_CMDID - 1, -}; - -enum wmi_10x_event_id { - WMI_10X_SERVICE_READY_EVENTID = 0x8000, - WMI_10X_READY_EVENTID, - WMI_10X_START_EVENTID = 0x9000, - WMI_10X_END_EVENTID = 0x9FFF, - - /* Scan specific events */ - WMI_10X_SCAN_EVENTID = WMI_10X_START_EVENTID, - WMI_10X_ECHO_EVENTID, - WMI_10X_DEBUG_MESG_EVENTID, - WMI_10X_UPDATE_STATS_EVENTID, - - /* Instantaneous RSSI event */ - WMI_10X_INST_RSSI_STATS_EVENTID, - - /* VDEV specific events */ - WMI_10X_VDEV_START_RESP_EVENTID, - WMI_10X_VDEV_STANDBY_REQ_EVENTID, - WMI_10X_VDEV_RESUME_REQ_EVENTID, - WMI_10X_VDEV_STOPPED_EVENTID, - - /* peer specific events */ - WMI_10X_PEER_STA_KICKOUT_EVENTID, - - /* beacon/mgmt specific events */ - WMI_10X_HOST_SWBA_EVENTID, - WMI_10X_TBTTOFFSET_UPDATE_EVENTID, - WMI_10X_MGMT_RX_EVENTID, - - /* Channel stats event */ - WMI_10X_CHAN_INFO_EVENTID, - - /* PHY Error specific WMI event */ - WMI_10X_PHYERR_EVENTID, - - /* Roam event to trigger roaming on host */ - WMI_10X_ROAM_EVENTID, - - /* matching AP found from list of profiles */ - WMI_10X_PROFILE_MATCH, - - /* debug print message used for tracing FW code while debugging */ - WMI_10X_DEBUG_PRINT_EVENTID, - /* VI spoecific event */ - WMI_10X_PDEV_QVIT_EVENTID, - /* FW code profile data in response to profile request */ - WMI_10X_WLAN_PROFILE_DATA_EVENTID, - - /*RTT related event ID*/ - WMI_10X_RTT_MEASUREMENT_REPORT_EVENTID, - WMI_10X_TSF_MEASUREMENT_REPORT_EVENTID, - WMI_10X_RTT_ERROR_REPORT_EVENTID, - - WMI_10X_WOW_WAKEUP_HOST_EVENTID, - WMI_10X_DCS_INTERFERENCE_EVENTID, - - /* TPC config for the current operating channel */ - WMI_10X_PDEV_TPC_CONFIG_EVENTID, - - WMI_10X_GPIO_INPUT_EVENTID, - WMI_10X_PDEV_UTF_EVENTID = WMI_10X_END_EVENTID-1, -}; - enum wmi_phy_mode { MODE_11A = 0, /* 11a Mode */ MODE_11G = 1, /* 11b/g Mode */ @@ -833,48 +508,6 @@ enum wmi_phy_mode { MODE_MAX = 14 }; -static inline const char *ath10k_wmi_phymode_str(enum wmi_phy_mode mode) -{ - switch (mode) { - case MODE_11A: - return "11a"; - case MODE_11G: - return "11g"; - case MODE_11B: - return "11b"; - case MODE_11GONLY: - return "11gonly"; - case MODE_11NA_HT20: - return "11na-ht20"; - case MODE_11NG_HT20: - return "11ng-ht20"; - case MODE_11NA_HT40: - return "11na-ht40"; - case MODE_11NG_HT40: - return "11ng-ht40"; - case MODE_11AC_VHT20: - return "11ac-vht20"; - case MODE_11AC_VHT40: - return "11ac-vht40"; - case MODE_11AC_VHT80: - return "11ac-vht80"; - case MODE_11AC_VHT20_2G: - return "11ac-vht20-2g"; - case MODE_11AC_VHT40_2G: - return "11ac-vht40-2g"; - case MODE_11AC_VHT80_2G: - return "11ac-vht80-2g"; - case MODE_UNKNOWN: - /* skip */ - break; - - /* no default handler to allow compiler to check that the - * enum is fully handled */ - }; - - return "<unknown>"; -} - #define WMI_CHAN_LIST_TAG 0x1 #define WMI_SSID_LIST_TAG 0x2 #define WMI_BSSID_LIST_TAG 0x3 @@ -1130,45 +763,13 @@ struct wmi_service_ready_event { struct wlan_host_mem_req mem_reqs[1]; } __packed; -/* This is the definition from 10.X firmware branch */ -struct wmi_service_ready_event_10x { - __le32 sw_version; - __le32 abi_version; - - /* WMI_PHY_CAPABILITY */ - __le32 phy_capability; - - /* Maximum number of frag table entries that SW will populate less 1 */ - __le32 max_frag_entry; - __le32 wmi_service_bitmap[WMI_SERVICE_BM_SIZE]; - __le32 num_rf_chains; - - /* - * The following field is only valid for service type - * WMI_SERVICE_11AC - */ - __le32 ht_cap_info; /* WMI HT Capability */ - __le32 vht_cap_info; /* VHT capability info field of 802.11ac */ - __le32 vht_supp_mcs; /* VHT Supported MCS Set field Rx/Tx same */ - __le32 hw_min_tx_power; - __le32 hw_max_tx_power; - - struct hal_reg_capabilities hal_reg_capabilities; - - __le32 sys_cap_info; - __le32 min_pkt_size_enable; /* Enterprise mode short pkt enable */ - - /* - * request to host to allocate a chuck of memory and pss it down to FW - * via WM_INIT. FW uses this as FW extesnsion memory for saving its - * data structures. Only valid for low latency interfaces like PCIE - * where FW can access this memory directly (or) by DMA. - */ - __le32 num_mem_reqs; - - struct wlan_host_mem_req mem_reqs[1]; -} __packed; - +/* + * status consists of upper 16 bits fo int status and lower 16 bits of + * module ID that retuned status + */ +#define WLAN_INIT_STATUS_SUCCESS 0x0 +#define WLAN_GET_INIT_STATUS_REASON(status) ((status) & 0xffff) +#define WLAN_GET_INIT_STATUS_MODULE_ID(status) (((status) >> 16) & 0xffff) #define WMI_SERVICE_READY_TIMEOUT_HZ (5*HZ) #define WMI_UNIFIED_READY_TIMEOUT_HZ (5*HZ) @@ -1377,192 +978,6 @@ struct wmi_resource_config { __le32 max_frag_entries; } __packed; -struct wmi_resource_config_10x { - /* number of virtual devices (VAPs) to support */ - __le32 num_vdevs; - - /* number of peer nodes to support */ - __le32 num_peers; - - /* number of keys per peer */ - __le32 num_peer_keys; - - /* total number of TX/RX data TIDs */ - __le32 num_tids; - - /* - * max skid for resolving hash collisions - * - * The address search table is sparse, so that if two MAC addresses - * result in the same hash value, the second of these conflicting - * entries can slide to the next index in the address search table, - * and use it, if it is unoccupied. This ast_skid_limit parameter - * specifies the upper bound on how many subsequent indices to search - * over to find an unoccupied space. - */ - __le32 ast_skid_limit; - - /* - * the nominal chain mask for transmit - * - * The chain mask may be modified dynamically, e.g. to operate AP - * tx with a reduced number of chains if no clients are associated. - * This configuration parameter specifies the nominal chain-mask that - * should be used when not operating with a reduced set of tx chains. - */ - __le32 tx_chain_mask; - - /* - * the nominal chain mask for receive - * - * The chain mask may be modified dynamically, e.g. for a client - * to use a reduced number of chains for receive if the traffic to - * the client is low enough that it doesn't require downlink MIMO - * or antenna diversity. - * This configuration parameter specifies the nominal chain-mask that - * should be used when not operating with a reduced set of rx chains. - */ - __le32 rx_chain_mask; - - /* - * what rx reorder timeout (ms) to use for the AC - * - * Each WMM access class (voice, video, best-effort, background) will - * have its own timeout value to dictate how long to wait for missing - * rx MPDUs to arrive before flushing subsequent MPDUs that have - * already been received. - * This parameter specifies the timeout in milliseconds for each - * class. - */ - __le32 rx_timeout_pri_vi; - __le32 rx_timeout_pri_vo; - __le32 rx_timeout_pri_be; - __le32 rx_timeout_pri_bk; - - /* - * what mode the rx should decap packets to - * - * MAC can decap to RAW (no decap), native wifi or Ethernet types - * THis setting also determines the default TX behavior, however TX - * behavior can be modified on a per VAP basis during VAP init - */ - __le32 rx_decap_mode; - - /* what is the maximum scan requests than can be queued */ - __le32 scan_max_pending_reqs; - - /* maximum VDEV that could use BMISS offload */ - __le32 bmiss_offload_max_vdev; - - /* maximum VDEV that could use offload roaming */ - __le32 roam_offload_max_vdev; - - /* maximum AP profiles that would push to offload roaming */ - __le32 roam_offload_max_ap_profiles; - - /* - * how many groups to use for mcast->ucast conversion - * - * The target's WAL maintains a table to hold information regarding - * which peers belong to a given multicast group, so that if - * multicast->unicast conversion is enabled, the target can convert - * multicast tx frames to a series of unicast tx frames, to each - * peer within the multicast group. - This num_mcast_groups configuration parameter tells the target how - * many multicast groups to provide storage for within its multicast - * group membership table. - */ - __le32 num_mcast_groups; - - /* - * size to alloc for the mcast membership table - * - * This num_mcast_table_elems configuration parameter tells the - * target how many peer elements it needs to provide storage for in - * its multicast group membership table. - * These multicast group membership table elements are shared by the - * multicast groups stored within the table. - */ - __le32 num_mcast_table_elems; - - /* - * whether/how to do multicast->unicast conversion - * - * This configuration parameter specifies whether the target should - * perform multicast --> unicast conversion on transmit, and if so, - * what to do if it finds no entries in its multicast group - * membership table for the multicast IP address in the tx frame. - * Configuration value: - * 0 -> Do not perform multicast to unicast conversion. - * 1 -> Convert multicast frames to unicast, if the IP multicast - * address from the tx frame is found in the multicast group - * membership table. If the IP multicast address is not found, - * drop the frame. - * 2 -> Convert multicast frames to unicast, if the IP multicast - * address from the tx frame is found in the multicast group - * membership table. If the IP multicast address is not found, - * transmit the frame as multicast. - */ - __le32 mcast2ucast_mode; - - /* - * how much memory to allocate for a tx PPDU dbg log - * - * This parameter controls how much memory the target will allocate - * to store a log of tx PPDU meta-information (how large the PPDU - * was, when it was sent, whether it was successful, etc.) - */ - __le32 tx_dbg_log_size; - - /* how many AST entries to be allocated for WDS */ - __le32 num_wds_entries; - - /* - * MAC DMA burst size, e.g., For target PCI limit can be - * 0 -default, 1 256B - */ - __le32 dma_burst_size; - - /* - * Fixed delimiters to be inserted after every MPDU to - * account for interface latency to avoid underrun. - */ - __le32 mac_aggr_delim; - - /* - * determine whether target is responsible for detecting duplicate - * non-aggregate MPDU and timing out stale fragments. - * - * A-MPDU reordering is always performed on the target. - * - * 0: target responsible for frag timeout and dup checking - * 1: host responsible for frag timeout and dup checking - */ - __le32 rx_skip_defrag_timeout_dup_detection_check; - - /* - * Configuration for VoW : - * No of Video Nodes to be supported - * and Max no of descriptors for each Video link (node). - */ - __le32 vow_config; - - /* Number of msdu descriptors target should use */ - __le32 num_msdu_desc; - - /* - * Max. number of Tx fragments per MSDU - * This parameter controls the max number of Tx fragments per MSDU. - * This is sent by the target as part of the WMI_SERVICE_READY event - * and is overriden by the OS shim as required. - */ - __le32 max_frag_entries; -} __packed; - - -#define NUM_UNITS_IS_NUM_VDEVS 0x1 -#define NUM_UNITS_IS_NUM_PEERS 0x2 - /* strucutre describing host memory chunk. */ struct host_memory_chunk { /* id of the request that is passed up in service ready */ @@ -1584,18 +999,6 @@ struct wmi_init_cmd { struct host_memory_chunk host_mem_chunks[1]; } __packed; -/* _10x stucture is from 10.X FW API */ -struct wmi_init_cmd_10x { - struct wmi_resource_config_10x resource_config; - __le32 num_host_mem_chunks; - - /* - * variable number of host memory chunks. - * This should be the last element in the structure - */ - struct host_memory_chunk host_mem_chunks[1]; -} __packed; - /* TLV for channel list */ struct wmi_chan_list { __le32 tag; /* WMI_CHAN_LIST_TAG */ @@ -1715,88 +1118,6 @@ struct wmi_start_scan_cmd { */ } __packed; -/* This is the definition from 10.X firmware branch */ -struct wmi_start_scan_cmd_10x { - /* Scan ID */ - __le32 scan_id; - - /* Scan requestor ID */ - __le32 scan_req_id; - - /* VDEV id(interface) that is requesting scan */ - __le32 vdev_id; - - /* Scan Priority, input to scan scheduler */ - __le32 scan_priority; - - /* Scan events subscription */ - __le32 notify_scan_events; - - /* dwell time in msec on active channels */ - __le32 dwell_time_active; - - /* dwell time in msec on passive channels */ - __le32 dwell_time_passive; - - /* - * min time in msec on the BSS channel,only valid if atleast one - * VDEV is active - */ - __le32 min_rest_time; - - /* - * max rest time in msec on the BSS channel,only valid if at least - * one VDEV is active - */ - /* - * the scanner will rest on the bss channel at least min_rest_time - * after min_rest_time the scanner will start checking for tx/rx - * activity on all VDEVs. if there is no activity the scanner will - * switch to off channel. if there is activity the scanner will let - * the radio on the bss channel until max_rest_time expires.at - * max_rest_time scanner will switch to off channel irrespective of - * activity. activity is determined by the idle_time parameter. - */ - __le32 max_rest_time; - - /* - * time before sending next set of probe requests. - * The scanner keeps repeating probe requests transmission with - * period specified by repeat_probe_time. - * The number of probe requests specified depends on the ssid_list - * and bssid_list - */ - __le32 repeat_probe_time; - - /* time in msec between 2 consequetive probe requests with in a set. */ - __le32 probe_spacing_time; - - /* - * data inactivity time in msec on bss channel that will be used by - * scanner for measuring the inactivity. - */ - __le32 idle_time; - - /* maximum time in msec allowed for scan */ - __le32 max_scan_time; - - /* - * delay in msec before sending first probe request after switching - * to a channel - */ - __le32 probe_delay; - - /* Scan control flags */ - __le32 scan_ctrl_flags; - - /* - * TLV (tag length value ) paramerters follow the scan_cmd structure. - * TLV can contain channel list, bssid list, ssid list and - * ie. the TLV tags are defined above; - */ -} __packed; - - struct wmi_ssid_arg { int len; const u8 *ssid; @@ -1947,7 +1268,7 @@ struct wmi_scan_event { * good idea to pass all the fields in the RX status * descriptor up to the host. */ -struct wmi_mgmt_rx_hdr_v1 { +struct wmi_mgmt_rx_hdr { __le32 channel; __le32 snr; __le32 rate; @@ -1956,18 +1277,8 @@ struct wmi_mgmt_rx_hdr_v1 { __le32 status; /* %WMI_RX_STATUS_ */ } __packed; -struct wmi_mgmt_rx_hdr_v2 { - struct wmi_mgmt_rx_hdr_v1 v1; - __le32 rssi_ctl[4]; -} __packed; - -struct wmi_mgmt_rx_event_v1 { - struct wmi_mgmt_rx_hdr_v1 hdr; - u8 buf[0]; -} __packed; - -struct wmi_mgmt_rx_event_v2 { - struct wmi_mgmt_rx_hdr_v2 hdr; +struct wmi_mgmt_rx_event { + struct wmi_mgmt_rx_hdr hdr; u8 buf[0]; } __packed; @@ -2154,60 +1465,6 @@ struct wmi_csa_event { #define VDEV_DEFAULT_STATS_UPDATE_PERIOD 500 #define PEER_DEFAULT_STATS_UPDATE_PERIOD 500 -struct wmi_pdev_param_map { - u32 tx_chain_mask; - u32 rx_chain_mask; - u32 txpower_limit2g; - u32 txpower_limit5g; - u32 txpower_scale; - u32 beacon_gen_mode; - u32 beacon_tx_mode; - u32 resmgr_offchan_mode; - u32 protection_mode; - u32 dynamic_bw; - u32 non_agg_sw_retry_th; - u32 agg_sw_retry_th; - u32 sta_kickout_th; - u32 ac_aggrsize_scaling; - u32 ltr_enable; - u32 ltr_ac_latency_be; - u32 ltr_ac_latency_bk; - u32 ltr_ac_latency_vi; - u32 ltr_ac_latency_vo; - u32 ltr_ac_latency_timeout; - u32 ltr_sleep_override; - u32 ltr_rx_override; - u32 ltr_tx_activity_timeout; - u32 l1ss_enable; - u32 dsleep_enable; - u32 pcielp_txbuf_flush; - u32 pcielp_txbuf_watermark; - u32 pcielp_txbuf_tmo_en; - u32 pcielp_txbuf_tmo_value; - u32 pdev_stats_update_period; - u32 vdev_stats_update_period; - u32 peer_stats_update_period; - u32 bcnflt_stats_update_period; - u32 pmf_qos; - u32 arp_ac_override; - u32 arpdhcp_ac_override; - u32 dcs; - u32 ani_enable; - u32 ani_poll_period; - u32 ani_listen_period; - u32 ani_ofdm_level; - u32 ani_cck_level; - u32 dyntxchain; - u32 proxy_sta; - u32 idle_ps_config; - u32 power_gating_sleep; - u32 fast_channel_reset; - u32 burst_dur; - u32 burst_enable; -}; - -#define WMI_PDEV_PARAM_UNSUPPORTED 0 - enum wmi_pdev_param { /* TX chian mask */ WMI_PDEV_PARAM_TX_CHAIN_MASK = 0x1, @@ -2307,97 +1564,6 @@ enum wmi_pdev_param { WMI_PDEV_PARAM_POWER_GATING_SLEEP, }; -enum wmi_10x_pdev_param { - /* TX chian mask */ - WMI_10X_PDEV_PARAM_TX_CHAIN_MASK = 0x1, - /* RX chian mask */ - WMI_10X_PDEV_PARAM_RX_CHAIN_MASK, - /* TX power limit for 2G Radio */ - WMI_10X_PDEV_PARAM_TXPOWER_LIMIT2G, - /* TX power limit for 5G Radio */ - WMI_10X_PDEV_PARAM_TXPOWER_LIMIT5G, - /* TX power scale */ - WMI_10X_PDEV_PARAM_TXPOWER_SCALE, - /* Beacon generation mode . 0: host, 1: target */ - WMI_10X_PDEV_PARAM_BEACON_GEN_MODE, - /* Beacon generation mode . 0: staggered 1: bursted */ - WMI_10X_PDEV_PARAM_BEACON_TX_MODE, - /* - * Resource manager off chan mode . - * 0: turn off off chan mode. 1: turn on offchan mode - */ - WMI_10X_PDEV_PARAM_RESMGR_OFFCHAN_MODE, - /* - * Protection mode: - * 0: no protection 1:use CTS-to-self 2: use RTS/CTS - */ - WMI_10X_PDEV_PARAM_PROTECTION_MODE, - /* Dynamic bandwidth 0: disable 1: enable */ - WMI_10X_PDEV_PARAM_DYNAMIC_BW, - /* Non aggregrate/ 11g sw retry threshold.0-disable */ - WMI_10X_PDEV_PARAM_NON_AGG_SW_RETRY_TH, - /* aggregrate sw retry threshold. 0-disable*/ - WMI_10X_PDEV_PARAM_AGG_SW_RETRY_TH, - /* Station kickout threshold (non of consecutive failures).0-disable */ - WMI_10X_PDEV_PARAM_STA_KICKOUT_TH, - /* Aggerate size scaling configuration per AC */ - WMI_10X_PDEV_PARAM_AC_AGGRSIZE_SCALING, - /* LTR enable */ - WMI_10X_PDEV_PARAM_LTR_ENABLE, - /* LTR latency for BE, in us */ - WMI_10X_PDEV_PARAM_LTR_AC_LATENCY_BE, - /* LTR latency for BK, in us */ - WMI_10X_PDEV_PARAM_LTR_AC_LATENCY_BK, - /* LTR latency for VI, in us */ - WMI_10X_PDEV_PARAM_LTR_AC_LATENCY_VI, - /* LTR latency for VO, in us */ - WMI_10X_PDEV_PARAM_LTR_AC_LATENCY_VO, - /* LTR AC latency timeout, in ms */ - WMI_10X_PDEV_PARAM_LTR_AC_LATENCY_TIMEOUT, - /* LTR platform latency override, in us */ - WMI_10X_PDEV_PARAM_LTR_SLEEP_OVERRIDE, - /* LTR-RX override, in us */ - WMI_10X_PDEV_PARAM_LTR_RX_OVERRIDE, - /* Tx activity timeout for LTR, in us */ - WMI_10X_PDEV_PARAM_LTR_TX_ACTIVITY_TIMEOUT, - /* L1SS state machine enable */ - WMI_10X_PDEV_PARAM_L1SS_ENABLE, - /* Deep sleep state machine enable */ - WMI_10X_PDEV_PARAM_DSLEEP_ENABLE, - /* pdev level stats update period in ms */ - WMI_10X_PDEV_PARAM_PDEV_STATS_UPDATE_PERIOD, - /* vdev level stats update period in ms */ - WMI_10X_PDEV_PARAM_VDEV_STATS_UPDATE_PERIOD, - /* peer level stats update period in ms */ - WMI_10X_PDEV_PARAM_PEER_STATS_UPDATE_PERIOD, - /* beacon filter status update period */ - WMI_10X_PDEV_PARAM_BCNFLT_STATS_UPDATE_PERIOD, - /* QOS Mgmt frame protection MFP/PMF 0: disable, 1: enable */ - WMI_10X_PDEV_PARAM_PMF_QOS, - /* Access category on which ARP and DHCP frames are sent */ - WMI_10X_PDEV_PARAM_ARPDHCP_AC_OVERRIDE, - /* DCS configuration */ - WMI_10X_PDEV_PARAM_DCS, - /* Enable/Disable ANI on target */ - WMI_10X_PDEV_PARAM_ANI_ENABLE, - /* configure the ANI polling period */ - WMI_10X_PDEV_PARAM_ANI_POLL_PERIOD, - /* configure the ANI listening period */ - WMI_10X_PDEV_PARAM_ANI_LISTEN_PERIOD, - /* configure OFDM immunity level */ - WMI_10X_PDEV_PARAM_ANI_OFDM_LEVEL, - /* configure CCK immunity level */ - WMI_10X_PDEV_PARAM_ANI_CCK_LEVEL, - /* Enable/Disable CDD for 1x1 STAs in rate control module */ - WMI_10X_PDEV_PARAM_DYNTXCHAIN, - /* Enable/Disable Fast channel reset*/ - WMI_10X_PDEV_PARAM_FAST_CHANNEL_RESET, - /* Set Bursting DUR */ - WMI_10X_PDEV_PARAM_BURST_DUR, - /* Set Bursting Enable*/ - WMI_10X_PDEV_PARAM_BURST_ENABLE, -}; - struct wmi_pdev_set_param_cmd { __le32 param_id; __le32 param_value; @@ -2922,61 +2088,6 @@ enum wmi_rate_preamble { /* Value to disable fixed rate setting */ #define WMI_FIXED_RATE_NONE (0xff) -struct wmi_vdev_param_map { - u32 rts_threshold; - u32 fragmentation_threshold; - u32 beacon_interval; - u32 listen_interval; - u32 multicast_rate; - u32 mgmt_tx_rate; - u32 slot_time; - u32 preamble; - u32 swba_time; - u32 wmi_vdev_stats_update_period; - u32 wmi_vdev_pwrsave_ageout_time; - u32 wmi_vdev_host_swba_interval; - u32 dtim_period; - u32 wmi_vdev_oc_scheduler_air_time_limit; - u32 wds; - u32 atim_window; - u32 bmiss_count_max; - u32 bmiss_first_bcnt; - u32 bmiss_final_bcnt; - u32 feature_wmm; - u32 chwidth; - u32 chextoffset; - u32 disable_htprotection; - u32 sta_quickkickout; - u32 mgmt_rate; - u32 protection_mode; - u32 fixed_rate; - u32 sgi; - u32 ldpc; - u32 tx_stbc; - u32 rx_stbc; - u32 intra_bss_fwd; - u32 def_keyid; - u32 nss; - u32 bcast_data_rate; - u32 mcast_data_rate; - u32 mcast_indicate; - u32 dhcp_indicate; - u32 unknown_dest_indicate; - u32 ap_keepalive_min_idle_inactive_time_secs; - u32 ap_keepalive_max_idle_inactive_time_secs; - u32 ap_keepalive_max_unresponsive_time_secs; - u32 ap_enable_nawds; - u32 mcast2ucast_set; - u32 enable_rtscts; - u32 txbf; - u32 packet_powersave; - u32 drop_unencry; - u32 tx_encap_type; - u32 ap_detect_out_of_sync_sleeping_sta_time_secs; -}; - -#define WMI_VDEV_PARAM_UNSUPPORTED 0 - /* the definition of different VDEV parameters */ enum wmi_vdev_param { /* RTS Threshold */ @@ -3108,121 +2219,6 @@ enum wmi_vdev_param { WMI_VDEV_PARAM_TX_ENCAP_TYPE, }; -/* the definition of different VDEV parameters */ -enum wmi_10x_vdev_param { - /* RTS Threshold */ - WMI_10X_VDEV_PARAM_RTS_THRESHOLD = 0x1, - /* Fragmentation threshold */ - WMI_10X_VDEV_PARAM_FRAGMENTATION_THRESHOLD, - /* beacon interval in TUs */ - WMI_10X_VDEV_PARAM_BEACON_INTERVAL, - /* Listen interval in TUs */ - WMI_10X_VDEV_PARAM_LISTEN_INTERVAL, - /* muticast rate in Mbps */ - WMI_10X_VDEV_PARAM_MULTICAST_RATE, - /* management frame rate in Mbps */ - WMI_10X_VDEV_PARAM_MGMT_TX_RATE, - /* slot time (long vs short) */ - WMI_10X_VDEV_PARAM_SLOT_TIME, - /* preamble (long vs short) */ - WMI_10X_VDEV_PARAM_PREAMBLE, - /* SWBA time (time before tbtt in msec) */ - WMI_10X_VDEV_PARAM_SWBA_TIME, - /* time period for updating VDEV stats */ - WMI_10X_VDEV_STATS_UPDATE_PERIOD, - /* age out time in msec for frames queued for station in power save */ - WMI_10X_VDEV_PWRSAVE_AGEOUT_TIME, - /* - * Host SWBA interval (time in msec before tbtt for SWBA event - * generation). - */ - WMI_10X_VDEV_HOST_SWBA_INTERVAL, - /* DTIM period (specified in units of num beacon intervals) */ - WMI_10X_VDEV_PARAM_DTIM_PERIOD, - /* - * scheduler air time limit for this VDEV. used by off chan - * scheduler. - */ - WMI_10X_VDEV_OC_SCHEDULER_AIR_TIME_LIMIT, - /* enable/dsiable WDS for this VDEV */ - WMI_10X_VDEV_PARAM_WDS, - /* ATIM Window */ - WMI_10X_VDEV_PARAM_ATIM_WINDOW, - /* BMISS max */ - WMI_10X_VDEV_PARAM_BMISS_COUNT_MAX, - /* WMM enables/disabled */ - WMI_10X_VDEV_PARAM_FEATURE_WMM, - /* Channel width */ - WMI_10X_VDEV_PARAM_CHWIDTH, - /* Channel Offset */ - WMI_10X_VDEV_PARAM_CHEXTOFFSET, - /* Disable HT Protection */ - WMI_10X_VDEV_PARAM_DISABLE_HTPROTECTION, - /* Quick STA Kickout */ - WMI_10X_VDEV_PARAM_STA_QUICKKICKOUT, - /* Rate to be used with Management frames */ - WMI_10X_VDEV_PARAM_MGMT_RATE, - /* Protection Mode */ - WMI_10X_VDEV_PARAM_PROTECTION_MODE, - /* Fixed rate setting */ - WMI_10X_VDEV_PARAM_FIXED_RATE, - /* Short GI Enable/Disable */ - WMI_10X_VDEV_PARAM_SGI, - /* Enable LDPC */ - WMI_10X_VDEV_PARAM_LDPC, - /* Enable Tx STBC */ - WMI_10X_VDEV_PARAM_TX_STBC, - /* Enable Rx STBC */ - WMI_10X_VDEV_PARAM_RX_STBC, - /* Intra BSS forwarding */ - WMI_10X_VDEV_PARAM_INTRA_BSS_FWD, - /* Setting Default xmit key for Vdev */ - WMI_10X_VDEV_PARAM_DEF_KEYID, - /* NSS width */ - WMI_10X_VDEV_PARAM_NSS, - /* Set the custom rate for the broadcast data frames */ - WMI_10X_VDEV_PARAM_BCAST_DATA_RATE, - /* Set the custom rate (rate-code) for multicast data frames */ - WMI_10X_VDEV_PARAM_MCAST_DATA_RATE, - /* Tx multicast packet indicate Enable/Disable */ - WMI_10X_VDEV_PARAM_MCAST_INDICATE, - /* Tx DHCP packet indicate Enable/Disable */ - WMI_10X_VDEV_PARAM_DHCP_INDICATE, - /* Enable host inspection of Tx unicast packet to unknown destination */ - WMI_10X_VDEV_PARAM_UNKNOWN_DEST_INDICATE, - - /* The minimum amount of time AP begins to consider STA inactive */ - WMI_10X_VDEV_PARAM_AP_KEEPALIVE_MIN_IDLE_INACTIVE_TIME_SECS, - - /* - * An associated STA is considered inactive when there is no recent - * TX/RX activity and no downlink frames are buffered for it. Once a - * STA exceeds the maximum idle inactive time, the AP will send an - * 802.11 data-null as a keep alive to verify the STA is still - * associated. If the STA does ACK the data-null, or if the data-null - * is buffered and the STA does not retrieve it, the STA will be - * considered unresponsive - * (see WMI_10X_VDEV_AP_KEEPALIVE_MAX_UNRESPONSIVE_TIME_SECS). - */ - WMI_10X_VDEV_PARAM_AP_KEEPALIVE_MAX_IDLE_INACTIVE_TIME_SECS, - - /* - * An associated STA is considered unresponsive if there is no recent - * TX/RX activity and downlink frames are buffered for it. Once a STA - * exceeds the maximum unresponsive time, the AP will send a - * WMI_10X_STA_KICKOUT event to the host so the STA can be deleted. */ - WMI_10X_VDEV_PARAM_AP_KEEPALIVE_MAX_UNRESPONSIVE_TIME_SECS, - - /* Enable NAWDS : MCAST INSPECT Enable, NAWDS Flag set */ - WMI_10X_VDEV_PARAM_AP_ENABLE_NAWDS, - - WMI_10X_VDEV_PARAM_MCAST2UCAST_SET, - /* Enable/Disable RTS-CTS */ - WMI_10X_VDEV_PARAM_ENABLE_RTSCTS, - - WMI_10X_VDEV_PARAM_AP_DETECT_OUT_OF_SYNC_SLEEPING_STA_TIME_SECS, -}; - /* slot time long */ #define WMI_VDEV_SLOT_TIME_LONG 0x1 /* slot time short */ @@ -4004,6 +3000,7 @@ struct wmi_force_fw_hang_cmd { #define WMI_MAX_EVENT 0x1000 /* Maximum number of pending TXed WMI packets */ +#define WMI_MAX_PENDING_TX_COUNT 128 #define WMI_SKB_HEADROOM sizeof(struct wmi_cmd_hdr) /* By default disable power save for IBSS */ @@ -4016,6 +3013,7 @@ int ath10k_wmi_attach(struct ath10k *ar); void ath10k_wmi_detach(struct ath10k *ar); int ath10k_wmi_wait_for_service_ready(struct ath10k *ar); int ath10k_wmi_wait_for_unified_ready(struct ath10k *ar); +void ath10k_wmi_flush_tx(struct ath10k *ar); int ath10k_wmi_connect_htc_service(struct ath10k *ar); int ath10k_wmi_pdev_set_channel(struct ath10k *ar, @@ -4024,7 +3022,8 @@ int ath10k_wmi_pdev_suspend_target(struct ath10k *ar); int ath10k_wmi_pdev_resume_target(struct ath10k *ar); int ath10k_wmi_pdev_set_regdomain(struct ath10k *ar, u16 rd, u16 rd2g, u16 rd5g, u16 ctl2g, u16 ctl5g); -int ath10k_wmi_pdev_set_param(struct ath10k *ar, u32 id, u32 value); +int ath10k_wmi_pdev_set_param(struct ath10k *ar, enum wmi_pdev_param id, + u32 value); int ath10k_wmi_cmd_init(struct ath10k *ar); int ath10k_wmi_start_scan(struct ath10k *ar, const struct wmi_start_scan_arg *); void ath10k_wmi_start_scan_init(struct ath10k *ar, struct wmi_start_scan_arg *); @@ -4044,7 +3043,7 @@ int ath10k_wmi_vdev_up(struct ath10k *ar, u32 vdev_id, u32 aid, const u8 *bssid); int ath10k_wmi_vdev_down(struct ath10k *ar, u32 vdev_id); int ath10k_wmi_vdev_set_param(struct ath10k *ar, u32 vdev_id, - u32 param_id, u32 param_value); + enum wmi_vdev_param param_id, u32 param_value); int ath10k_wmi_vdev_install_key(struct ath10k *ar, const struct wmi_vdev_install_key_arg *arg); int ath10k_wmi_peer_create(struct ath10k *ar, u32 vdev_id, @@ -4067,13 +3066,11 @@ int ath10k_wmi_set_ap_ps_param(struct ath10k *ar, u32 vdev_id, const u8 *mac, enum wmi_ap_ps_peer_param param_id, u32 value); int ath10k_wmi_scan_chan_list(struct ath10k *ar, const struct wmi_scan_chan_list_arg *arg); -int ath10k_wmi_beacon_send_nowait(struct ath10k *ar, - const struct wmi_bcn_tx_arg *arg); +int ath10k_wmi_beacon_send(struct ath10k *ar, const struct wmi_bcn_tx_arg *arg); int ath10k_wmi_pdev_set_wmm_params(struct ath10k *ar, const struct wmi_pdev_set_wmm_params_arg *arg); int ath10k_wmi_request_stats(struct ath10k *ar, enum wmi_stats_id stats_id); int ath10k_wmi_force_fw_hang(struct ath10k *ar, enum wmi_force_fw_hang_type type, u32 delay_ms); -int ath10k_wmi_mgmt_tx(struct ath10k *ar, struct sk_buff *skb); #endif /* _WMI_H_ */ |