ath10k: add support for 10.2 firmware
The 10.2 firmware is a successor of 10.1 firmware (formerly identified as 10.x). Both share a lot but have some slight ABI differences that need to be taken care of. The 10.2 firmware introduces some new features but those can be added in subsequent patches. This patch makes ath10k boot and work with 10.2 with comparable functionality to 10.1. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
This commit is contained in:

committed by
Kalle Valo

parent
611b3682bb
commit
24c88f7807
@@ -803,6 +803,159 @@ enum wmi_10x_event_id {
|
||||
WMI_10X_PDEV_UTF_EVENTID = WMI_10X_END_EVENTID-1,
|
||||
};
|
||||
|
||||
enum wmi_10_2_cmd_id {
|
||||
WMI_10_2_START_CMDID = 0x9000,
|
||||
WMI_10_2_END_CMDID = 0x9FFF,
|
||||
WMI_10_2_INIT_CMDID,
|
||||
WMI_10_2_START_SCAN_CMDID = WMI_10_2_START_CMDID,
|
||||
WMI_10_2_STOP_SCAN_CMDID,
|
||||
WMI_10_2_SCAN_CHAN_LIST_CMDID,
|
||||
WMI_10_2_ECHO_CMDID,
|
||||
WMI_10_2_PDEV_SET_REGDOMAIN_CMDID,
|
||||
WMI_10_2_PDEV_SET_CHANNEL_CMDID,
|
||||
WMI_10_2_PDEV_SET_PARAM_CMDID,
|
||||
WMI_10_2_PDEV_PKTLOG_ENABLE_CMDID,
|
||||
WMI_10_2_PDEV_PKTLOG_DISABLE_CMDID,
|
||||
WMI_10_2_PDEV_SET_WMM_PARAMS_CMDID,
|
||||
WMI_10_2_PDEV_SET_HT_CAP_IE_CMDID,
|
||||
WMI_10_2_PDEV_SET_VHT_CAP_IE_CMDID,
|
||||
WMI_10_2_PDEV_SET_BASE_MACADDR_CMDID,
|
||||
WMI_10_2_PDEV_SET_QUIET_MODE_CMDID,
|
||||
WMI_10_2_PDEV_GREEN_AP_PS_ENABLE_CMDID,
|
||||
WMI_10_2_PDEV_GET_TPC_CONFIG_CMDID,
|
||||
WMI_10_2_VDEV_CREATE_CMDID,
|
||||
WMI_10_2_VDEV_DELETE_CMDID,
|
||||
WMI_10_2_VDEV_START_REQUEST_CMDID,
|
||||
WMI_10_2_VDEV_RESTART_REQUEST_CMDID,
|
||||
WMI_10_2_VDEV_UP_CMDID,
|
||||
WMI_10_2_VDEV_STOP_CMDID,
|
||||
WMI_10_2_VDEV_DOWN_CMDID,
|
||||
WMI_10_2_VDEV_STANDBY_RESPONSE_CMDID,
|
||||
WMI_10_2_VDEV_RESUME_RESPONSE_CMDID,
|
||||
WMI_10_2_VDEV_SET_PARAM_CMDID,
|
||||
WMI_10_2_VDEV_INSTALL_KEY_CMDID,
|
||||
WMI_10_2_VDEV_SET_DSCP_TID_MAP_CMDID,
|
||||
WMI_10_2_PEER_CREATE_CMDID,
|
||||
WMI_10_2_PEER_DELETE_CMDID,
|
||||
WMI_10_2_PEER_FLUSH_TIDS_CMDID,
|
||||
WMI_10_2_PEER_SET_PARAM_CMDID,
|
||||
WMI_10_2_PEER_ASSOC_CMDID,
|
||||
WMI_10_2_PEER_ADD_WDS_ENTRY_CMDID,
|
||||
WMI_10_2_PEER_UPDATE_WDS_ENTRY_CMDID,
|
||||
WMI_10_2_PEER_REMOVE_WDS_ENTRY_CMDID,
|
||||
WMI_10_2_PEER_MCAST_GROUP_CMDID,
|
||||
WMI_10_2_BCN_TX_CMDID,
|
||||
WMI_10_2_BCN_PRB_TMPL_CMDID,
|
||||
WMI_10_2_BCN_FILTER_RX_CMDID,
|
||||
WMI_10_2_PRB_REQ_FILTER_RX_CMDID,
|
||||
WMI_10_2_MGMT_TX_CMDID,
|
||||
WMI_10_2_ADDBA_CLEAR_RESP_CMDID,
|
||||
WMI_10_2_ADDBA_SEND_CMDID,
|
||||
WMI_10_2_ADDBA_STATUS_CMDID,
|
||||
WMI_10_2_DELBA_SEND_CMDID,
|
||||
WMI_10_2_ADDBA_SET_RESP_CMDID,
|
||||
WMI_10_2_SEND_SINGLEAMSDU_CMDID,
|
||||
WMI_10_2_STA_POWERSAVE_MODE_CMDID,
|
||||
WMI_10_2_STA_POWERSAVE_PARAM_CMDID,
|
||||
WMI_10_2_STA_MIMO_PS_MODE_CMDID,
|
||||
WMI_10_2_DBGLOG_CFG_CMDID,
|
||||
WMI_10_2_PDEV_DFS_ENABLE_CMDID,
|
||||
WMI_10_2_PDEV_DFS_DISABLE_CMDID,
|
||||
WMI_10_2_PDEV_QVIT_CMDID,
|
||||
WMI_10_2_ROAM_SCAN_MODE,
|
||||
WMI_10_2_ROAM_SCAN_RSSI_THRESHOLD,
|
||||
WMI_10_2_ROAM_SCAN_PERIOD,
|
||||
WMI_10_2_ROAM_SCAN_RSSI_CHANGE_THRESHOLD,
|
||||
WMI_10_2_ROAM_AP_PROFILE,
|
||||
WMI_10_2_OFL_SCAN_ADD_AP_PROFILE,
|
||||
WMI_10_2_OFL_SCAN_REMOVE_AP_PROFILE,
|
||||
WMI_10_2_OFL_SCAN_PERIOD,
|
||||
WMI_10_2_P2P_DEV_SET_DEVICE_INFO,
|
||||
WMI_10_2_P2P_DEV_SET_DISCOVERABILITY,
|
||||
WMI_10_2_P2P_GO_SET_BEACON_IE,
|
||||
WMI_10_2_P2P_GO_SET_PROBE_RESP_IE,
|
||||
WMI_10_2_AP_PS_PEER_PARAM_CMDID,
|
||||
WMI_10_2_AP_PS_PEER_UAPSD_COEX_CMDID,
|
||||
WMI_10_2_PEER_RATE_RETRY_SCHED_CMDID,
|
||||
WMI_10_2_WLAN_PROFILE_TRIGGER_CMDID,
|
||||
WMI_10_2_WLAN_PROFILE_SET_HIST_INTVL_CMDID,
|
||||
WMI_10_2_WLAN_PROFILE_GET_PROFILE_DATA_CMDID,
|
||||
WMI_10_2_WLAN_PROFILE_ENABLE_PROFILE_ID_CMDID,
|
||||
WMI_10_2_WLAN_PROFILE_LIST_PROFILE_ID_CMDID,
|
||||
WMI_10_2_PDEV_SUSPEND_CMDID,
|
||||
WMI_10_2_PDEV_RESUME_CMDID,
|
||||
WMI_10_2_ADD_BCN_FILTER_CMDID,
|
||||
WMI_10_2_RMV_BCN_FILTER_CMDID,
|
||||
WMI_10_2_WOW_ADD_WAKE_PATTERN_CMDID,
|
||||
WMI_10_2_WOW_DEL_WAKE_PATTERN_CMDID,
|
||||
WMI_10_2_WOW_ENABLE_DISABLE_WAKE_EVENT_CMDID,
|
||||
WMI_10_2_WOW_ENABLE_CMDID,
|
||||
WMI_10_2_WOW_HOSTWAKEUP_FROM_SLEEP_CMDID,
|
||||
WMI_10_2_RTT_MEASREQ_CMDID,
|
||||
WMI_10_2_RTT_TSF_CMDID,
|
||||
WMI_10_2_RTT_KEEPALIVE_CMDID,
|
||||
WMI_10_2_PDEV_SEND_BCN_CMDID,
|
||||
WMI_10_2_VDEV_SPECTRAL_SCAN_CONFIGURE_CMDID,
|
||||
WMI_10_2_VDEV_SPECTRAL_SCAN_ENABLE_CMDID,
|
||||
WMI_10_2_REQUEST_STATS_CMDID,
|
||||
WMI_10_2_GPIO_CONFIG_CMDID,
|
||||
WMI_10_2_GPIO_OUTPUT_CMDID,
|
||||
WMI_10_2_VDEV_RATEMASK_CMDID,
|
||||
WMI_10_2_PDEV_SMART_ANT_ENABLE_CMDID,
|
||||
WMI_10_2_PDEV_SMART_ANT_SET_RX_ANTENNA_CMDID,
|
||||
WMI_10_2_PEER_SMART_ANT_SET_TX_ANTENNA_CMDID,
|
||||
WMI_10_2_PEER_SMART_ANT_SET_TRAIN_INFO_CMDID,
|
||||
WMI_10_2_PEER_SMART_ANT_SET_NODE_CONFIG_OPS_CMDID,
|
||||
WMI_10_2_FORCE_FW_HANG_CMDID,
|
||||
WMI_10_2_PDEV_SET_ANTENNA_SWITCH_TABLE_CMDID,
|
||||
WMI_10_2_PDEV_SET_CTL_TABLE_CMDID,
|
||||
WMI_10_2_PDEV_SET_MIMOGAIN_TABLE_CMDID,
|
||||
WMI_10_2_PDEV_RATEPWR_TABLE_CMDID,
|
||||
WMI_10_2_PDEV_RATEPWR_CHAINMSK_TABLE_CMDID,
|
||||
WMI_10_2_PDEV_UTF_CMDID = WMI_10_2_END_CMDID - 1,
|
||||
};
|
||||
|
||||
enum wmi_10_2_event_id {
|
||||
WMI_10_2_SERVICE_READY_EVENTID = 0x8000,
|
||||
WMI_10_2_READY_EVENTID,
|
||||
WMI_10_2_DEBUG_MESG_EVENTID,
|
||||
WMI_10_2_START_EVENTID = 0x9000,
|
||||
WMI_10_2_END_EVENTID = 0x9FFF,
|
||||
WMI_10_2_SCAN_EVENTID = WMI_10_2_START_EVENTID,
|
||||
WMI_10_2_ECHO_EVENTID,
|
||||
WMI_10_2_UPDATE_STATS_EVENTID,
|
||||
WMI_10_2_INST_RSSI_STATS_EVENTID,
|
||||
WMI_10_2_VDEV_START_RESP_EVENTID,
|
||||
WMI_10_2_VDEV_STANDBY_REQ_EVENTID,
|
||||
WMI_10_2_VDEV_RESUME_REQ_EVENTID,
|
||||
WMI_10_2_VDEV_STOPPED_EVENTID,
|
||||
WMI_10_2_PEER_STA_KICKOUT_EVENTID,
|
||||
WMI_10_2_HOST_SWBA_EVENTID,
|
||||
WMI_10_2_TBTTOFFSET_UPDATE_EVENTID,
|
||||
WMI_10_2_MGMT_RX_EVENTID,
|
||||
WMI_10_2_CHAN_INFO_EVENTID,
|
||||
WMI_10_2_PHYERR_EVENTID,
|
||||
WMI_10_2_ROAM_EVENTID,
|
||||
WMI_10_2_PROFILE_MATCH,
|
||||
WMI_10_2_DEBUG_PRINT_EVENTID,
|
||||
WMI_10_2_PDEV_QVIT_EVENTID,
|
||||
WMI_10_2_WLAN_PROFILE_DATA_EVENTID,
|
||||
WMI_10_2_RTT_MEASUREMENT_REPORT_EVENTID,
|
||||
WMI_10_2_TSF_MEASUREMENT_REPORT_EVENTID,
|
||||
WMI_10_2_RTT_ERROR_REPORT_EVENTID,
|
||||
WMI_10_2_RTT_KEEPALIVE_EVENTID,
|
||||
WMI_10_2_WOW_WAKEUP_HOST_EVENTID,
|
||||
WMI_10_2_DCS_INTERFERENCE_EVENTID,
|
||||
WMI_10_2_PDEV_TPC_CONFIG_EVENTID,
|
||||
WMI_10_2_GPIO_INPUT_EVENTID,
|
||||
WMI_10_2_PEER_RATECODE_LIST_EVENTID,
|
||||
WMI_10_2_GENERIC_BUFFER_EVENTID,
|
||||
WMI_10_2_MCAST_BUF_RELEASE_EVENTID,
|
||||
WMI_10_2_MCAST_LIST_AGEOUT_EVENTID,
|
||||
WMI_10_2_WDS_PEER_EVENTID,
|
||||
WMI_10_2_PDEV_UTF_EVENTID = WMI_10_2_END_EVENTID - 1,
|
||||
};
|
||||
|
||||
enum wmi_phy_mode {
|
||||
MODE_11A = 0, /* 11a Mode */
|
||||
MODE_11G = 1, /* 11b/g Mode */
|
||||
@@ -1551,6 +1704,16 @@ struct wmi_resource_config_10x {
|
||||
__le32 max_frag_entries;
|
||||
} __packed;
|
||||
|
||||
struct wmi_resource_config_10_2 {
|
||||
struct wmi_resource_config_10x common;
|
||||
__le32 max_peer_ext_stats;
|
||||
__le32 smart_ant_cap; /* 0-disable, 1-enable */
|
||||
__le32 bk_min_free;
|
||||
__le32 be_min_free;
|
||||
__le32 vi_min_free;
|
||||
__le32 vo_min_free;
|
||||
__le32 rx_batchmode; /* 0-disable, 1-enable */
|
||||
} __packed;
|
||||
|
||||
#define NUM_UNITS_IS_NUM_VDEVS 0x1
|
||||
#define NUM_UNITS_IS_NUM_PEERS 0x2
|
||||
@@ -1588,11 +1751,28 @@ struct wmi_init_cmd_10x {
|
||||
struct host_memory_chunk host_mem_chunks[1];
|
||||
} __packed;
|
||||
|
||||
struct wmi_init_cmd_10_2 {
|
||||
struct wmi_resource_config_10_2 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;
|
||||
|
||||
struct wmi_chan_list_entry {
|
||||
__le16 freq;
|
||||
u8 phy_mode; /* valid for 10.2 only */
|
||||
u8 reserved;
|
||||
} __packed;
|
||||
|
||||
/* TLV for channel list */
|
||||
struct wmi_chan_list {
|
||||
__le32 tag; /* WMI_CHAN_LIST_TAG */
|
||||
__le32 num_chan;
|
||||
__le32 channel_list[0];
|
||||
struct wmi_chan_list_entry channel_list[0];
|
||||
} __packed;
|
||||
|
||||
struct wmi_bssid_list {
|
||||
@@ -1821,7 +2001,7 @@ struct wmi_start_scan_arg {
|
||||
u32 n_bssids;
|
||||
|
||||
u8 ie[WLAN_SCAN_PARAMS_MAX_IE_LEN];
|
||||
u32 channels[64];
|
||||
u16 channels[64];
|
||||
struct wmi_ssid_arg ssids[WLAN_SCAN_PARAMS_MAX_SSID];
|
||||
struct wmi_bssid_arg bssids[WLAN_SCAN_PARAMS_MAX_BSSID];
|
||||
};
|
||||
@@ -2515,6 +2695,19 @@ enum wmi_10x_pdev_param {
|
||||
WMI_10X_PDEV_PARAM_BURST_DUR,
|
||||
/* Set Bursting Enable*/
|
||||
WMI_10X_PDEV_PARAM_BURST_ENABLE,
|
||||
|
||||
/* following are available as of firmware 10.2 */
|
||||
WMI_10X_PDEV_PARAM_SMART_ANTENNA_DEFAULT_ANTENNA,
|
||||
WMI_10X_PDEV_PARAM_IGMPMLD_OVERRIDE,
|
||||
WMI_10X_PDEV_PARAM_IGMPMLD_TID,
|
||||
WMI_10X_PDEV_PARAM_ANTENNA_GAIN,
|
||||
WMI_10X_PDEV_PARAM_RX_DECAP_MODE,
|
||||
WMI_10X_PDEV_PARAM_RX_FILTER,
|
||||
WMI_10X_PDEV_PARAM_SET_MCAST_TO_UCAST_TID,
|
||||
WMI_10X_PDEV_PARAM_PROXY_STA_MODE,
|
||||
WMI_10X_PDEV_PARAM_SET_MCAST2UCAST_MODE,
|
||||
WMI_10X_PDEV_PARAM_SET_MCAST2UCAST_BUFFER,
|
||||
WMI_10X_PDEV_PARAM_REMOVE_MCAST2UCAST_BUFFER,
|
||||
};
|
||||
|
||||
struct wmi_pdev_set_param_cmd {
|
||||
@@ -3387,6 +3580,14 @@ enum wmi_10x_vdev_param {
|
||||
WMI_10X_VDEV_PARAM_ENABLE_RTSCTS,
|
||||
|
||||
WMI_10X_VDEV_PARAM_AP_DETECT_OUT_OF_SYNC_SLEEPING_STA_TIME_SECS,
|
||||
|
||||
/* following are available as of firmware 10.2 */
|
||||
WMI_10X_VDEV_PARAM_TX_ENCAP_TYPE,
|
||||
WMI_10X_VDEV_PARAM_CABQ_MAXDUR,
|
||||
WMI_10X_VDEV_PARAM_MFPTEST_SET,
|
||||
WMI_10X_VDEV_PARAM_RTS_FIXED_RATE,
|
||||
WMI_10X_VDEV_PARAM_VHT_SGIMASK,
|
||||
WMI_10X_VDEV_PARAM_VHT80_RATEMASK,
|
||||
};
|
||||
|
||||
/* slot time long */
|
||||
@@ -3470,6 +3671,11 @@ enum wmi_bcn_tx_ref_flags {
|
||||
WMI_BCN_TX_REF_FLAG_DELIVER_CAB = 0x2,
|
||||
};
|
||||
|
||||
/* TODO: It is unclear why "no antenna" works while any other seemingly valid
|
||||
* chainmask yields no beacons on the air at all.
|
||||
*/
|
||||
#define WMI_BCN_TX_REF_DEF_ANTENNA 0
|
||||
|
||||
struct wmi_bcn_tx_ref_cmd {
|
||||
__le32 vdev_id;
|
||||
__le32 data_len;
|
||||
@@ -3481,6 +3687,8 @@ struct wmi_bcn_tx_ref_cmd {
|
||||
__le32 frame_control;
|
||||
/* to control CABQ traffic: WMI_BCN_TX_REF_FLAG_ */
|
||||
__le32 flags;
|
||||
/* introduced in 10.2 */
|
||||
__le32 antenna_mask;
|
||||
} __packed;
|
||||
|
||||
/* Beacon filter */
|
||||
@@ -4053,7 +4261,7 @@ struct wmi_peer_set_q_empty_callback_cmd {
|
||||
/* Maximum listen interval supported by hw in units of beacon interval */
|
||||
#define ATH10K_MAX_HW_LISTEN_INTERVAL 5
|
||||
|
||||
struct wmi_peer_assoc_complete_cmd {
|
||||
struct wmi_common_peer_assoc_complete_cmd {
|
||||
struct wmi_mac_addr peer_macaddr;
|
||||
__le32 vdev_id;
|
||||
__le32 peer_new_assoc; /* 1=assoc, 0=reassoc */
|
||||
@@ -4071,11 +4279,30 @@ struct wmi_peer_assoc_complete_cmd {
|
||||
__le32 peer_vht_caps;
|
||||
__le32 peer_phymode;
|
||||
struct wmi_vht_rate_set peer_vht_rates;
|
||||
};
|
||||
|
||||
struct wmi_main_peer_assoc_complete_cmd {
|
||||
struct wmi_common_peer_assoc_complete_cmd cmd;
|
||||
|
||||
/* HT Operation Element of the peer. Five bytes packed in 2
|
||||
* INT32 array and filled from lsb to msb. */
|
||||
__le32 peer_ht_info[2];
|
||||
} __packed;
|
||||
|
||||
struct wmi_10_1_peer_assoc_complete_cmd {
|
||||
struct wmi_common_peer_assoc_complete_cmd cmd;
|
||||
} __packed;
|
||||
|
||||
#define WMI_PEER_ASSOC_INFO0_MAX_MCS_IDX_LSB 0
|
||||
#define WMI_PEER_ASSOC_INFO0_MAX_MCS_IDX_MASK 0x0f
|
||||
#define WMI_PEER_ASSOC_INFO0_MAX_NSS_LSB 4
|
||||
#define WMI_PEER_ASSOC_INFO0_MAX_NSS_MASK 0xf0
|
||||
|
||||
struct wmi_10_2_peer_assoc_complete_cmd {
|
||||
struct wmi_common_peer_assoc_complete_cmd cmd;
|
||||
__le32 info0; /* WMI_PEER_ASSOC_INFO0_ */
|
||||
} __packed;
|
||||
|
||||
struct wmi_peer_assoc_complete_arg {
|
||||
u8 addr[ETH_ALEN];
|
||||
u32 vdev_id;
|
||||
|
Reference in New Issue
Block a user