|
@@ -83,6 +83,8 @@
|
|
|
#include "fw-api-scan.h"
|
|
|
#include "time-event.h"
|
|
|
#include "fw-dbg.h"
|
|
|
+#include "fw-api.h"
|
|
|
+#include "fw-api-scan.h"
|
|
|
|
|
|
#define DRV_DESCRIPTION "The new Intel(R) wireless AGN driver for Linux"
|
|
|
MODULE_DESCRIPTION(DRV_DESCRIPTION);
|
|
@@ -269,104 +271,127 @@ static const struct iwl_rx_handlers iwl_mvm_rx_handlers[] = {
|
|
|
};
|
|
|
#undef RX_HANDLER
|
|
|
#undef RX_HANDLER_GRP
|
|
|
-#define CMD(x) [x] = #x
|
|
|
-
|
|
|
-static const char *const iwl_mvm_cmd_strings[REPLY_MAX + 1] = {
|
|
|
- CMD(MVM_ALIVE),
|
|
|
- CMD(REPLY_ERROR),
|
|
|
- CMD(ECHO_CMD),
|
|
|
- CMD(INIT_COMPLETE_NOTIF),
|
|
|
- CMD(PHY_CONTEXT_CMD),
|
|
|
- CMD(MGMT_MCAST_KEY),
|
|
|
- CMD(TX_CMD),
|
|
|
- CMD(TXPATH_FLUSH),
|
|
|
- CMD(SHARED_MEM_CFG),
|
|
|
- CMD(MAC_CONTEXT_CMD),
|
|
|
- CMD(TIME_EVENT_CMD),
|
|
|
- CMD(TIME_EVENT_NOTIFICATION),
|
|
|
- CMD(BINDING_CONTEXT_CMD),
|
|
|
- CMD(TIME_QUOTA_CMD),
|
|
|
- CMD(NON_QOS_TX_COUNTER_CMD),
|
|
|
- CMD(DC2DC_CONFIG_CMD),
|
|
|
- CMD(NVM_ACCESS_CMD),
|
|
|
- CMD(PHY_CONFIGURATION_CMD),
|
|
|
- CMD(CALIB_RES_NOTIF_PHY_DB),
|
|
|
- CMD(SET_CALIB_DEFAULT_CMD),
|
|
|
- CMD(FW_PAGING_BLOCK_CMD),
|
|
|
- CMD(ADD_STA_KEY),
|
|
|
- CMD(ADD_STA),
|
|
|
- CMD(FW_GET_ITEM_CMD),
|
|
|
- CMD(REMOVE_STA),
|
|
|
- CMD(LQ_CMD),
|
|
|
- CMD(SCAN_OFFLOAD_CONFIG_CMD),
|
|
|
- CMD(MATCH_FOUND_NOTIFICATION),
|
|
|
- CMD(SCAN_OFFLOAD_REQUEST_CMD),
|
|
|
- CMD(SCAN_OFFLOAD_ABORT_CMD),
|
|
|
- CMD(HOT_SPOT_CMD),
|
|
|
- CMD(SCAN_OFFLOAD_COMPLETE),
|
|
|
- CMD(SCAN_OFFLOAD_UPDATE_PROFILES_CMD),
|
|
|
- CMD(SCAN_ITERATION_COMPLETE),
|
|
|
- CMD(POWER_TABLE_CMD),
|
|
|
- CMD(WEP_KEY),
|
|
|
- CMD(REPLY_RX_PHY_CMD),
|
|
|
- CMD(REPLY_RX_MPDU_CMD),
|
|
|
- CMD(FRAME_RELEASE),
|
|
|
- CMD(BEACON_NOTIFICATION),
|
|
|
- CMD(BEACON_TEMPLATE_CMD),
|
|
|
- CMD(STATISTICS_CMD),
|
|
|
- CMD(STATISTICS_NOTIFICATION),
|
|
|
- CMD(EOSP_NOTIFICATION),
|
|
|
- CMD(REDUCE_TX_POWER_CMD),
|
|
|
- CMD(TX_ANT_CONFIGURATION_CMD),
|
|
|
- CMD(D3_CONFIG_CMD),
|
|
|
- CMD(D0I3_END_CMD),
|
|
|
- CMD(PROT_OFFLOAD_CONFIG_CMD),
|
|
|
- CMD(OFFLOADS_QUERY_CMD),
|
|
|
- CMD(REMOTE_WAKE_CONFIG_CMD),
|
|
|
- CMD(WOWLAN_PATTERNS),
|
|
|
- CMD(WOWLAN_CONFIGURATION),
|
|
|
- CMD(WOWLAN_TSC_RSC_PARAM),
|
|
|
- CMD(WOWLAN_TKIP_PARAM),
|
|
|
- CMD(WOWLAN_KEK_KCK_MATERIAL),
|
|
|
- CMD(WOWLAN_GET_STATUSES),
|
|
|
- CMD(WOWLAN_TX_POWER_PER_DB),
|
|
|
- CMD(SCAN_OFFLOAD_PROFILES_QUERY_CMD),
|
|
|
- CMD(SCAN_OFFLOAD_HOTSPOTS_CONFIG_CMD),
|
|
|
- CMD(SCAN_OFFLOAD_HOTSPOTS_QUERY_CMD),
|
|
|
- CMD(CARD_STATE_NOTIFICATION),
|
|
|
- CMD(MISSED_BEACONS_NOTIFICATION),
|
|
|
- CMD(BT_COEX_PRIO_TABLE),
|
|
|
- CMD(BT_COEX_PROT_ENV),
|
|
|
- CMD(BT_PROFILE_NOTIFICATION),
|
|
|
- CMD(BT_CONFIG),
|
|
|
- CMD(MCAST_FILTER_CMD),
|
|
|
- CMD(BCAST_FILTER_CMD),
|
|
|
- CMD(REPLY_SF_CFG_CMD),
|
|
|
- CMD(REPLY_BEACON_FILTERING_CMD),
|
|
|
- CMD(CMD_DTS_MEASUREMENT_TRIGGER),
|
|
|
- CMD(DTS_MEASUREMENT_NOTIFICATION),
|
|
|
- CMD(REPLY_THERMAL_MNG_BACKOFF),
|
|
|
- CMD(MAC_PM_POWER_TABLE),
|
|
|
- CMD(LTR_CONFIG),
|
|
|
- CMD(BT_COEX_CI),
|
|
|
- CMD(BT_COEX_UPDATE_SW_BOOST),
|
|
|
- CMD(BT_COEX_UPDATE_CORUN_LUT),
|
|
|
- CMD(BT_COEX_UPDATE_REDUCED_TXP),
|
|
|
- CMD(PSM_UAPSD_AP_MISBEHAVING_NOTIFICATION),
|
|
|
- CMD(ANTENNA_COUPLING_NOTIFICATION),
|
|
|
- CMD(SCD_QUEUE_CFG),
|
|
|
- CMD(SCAN_CFG_CMD),
|
|
|
- CMD(SCAN_REQ_UMAC),
|
|
|
- CMD(SCAN_ABORT_UMAC),
|
|
|
- CMD(SCAN_COMPLETE_UMAC),
|
|
|
- CMD(TDLS_CHANNEL_SWITCH_CMD),
|
|
|
- CMD(TDLS_CHANNEL_SWITCH_NOTIFICATION),
|
|
|
- CMD(TDLS_CONFIG_CMD),
|
|
|
- CMD(MCC_UPDATE_CMD),
|
|
|
- CMD(SCAN_ITERATION_COMPLETE_UMAC),
|
|
|
- CMD(LDBG_CONFIG_CMD),
|
|
|
+
|
|
|
+/* Please keep this array *SORTED* by hex value.
|
|
|
+ * Access is done through binary search
|
|
|
+ */
|
|
|
+static const struct iwl_hcmd_names iwl_mvm_legacy_names[] = {
|
|
|
+ HCMD_NAME(MVM_ALIVE),
|
|
|
+ HCMD_NAME(REPLY_ERROR),
|
|
|
+ HCMD_NAME(ECHO_CMD),
|
|
|
+ HCMD_NAME(INIT_COMPLETE_NOTIF),
|
|
|
+ HCMD_NAME(PHY_CONTEXT_CMD),
|
|
|
+ HCMD_NAME(DBG_CFG),
|
|
|
+ HCMD_NAME(ANTENNA_COUPLING_NOTIFICATION),
|
|
|
+ HCMD_NAME(SCAN_CFG_CMD),
|
|
|
+ HCMD_NAME(SCAN_REQ_UMAC),
|
|
|
+ HCMD_NAME(SCAN_ABORT_UMAC),
|
|
|
+ HCMD_NAME(SCAN_COMPLETE_UMAC),
|
|
|
+ HCMD_NAME(TOF_CMD),
|
|
|
+ HCMD_NAME(TOF_NOTIFICATION),
|
|
|
+ HCMD_NAME(ADD_STA_KEY),
|
|
|
+ HCMD_NAME(ADD_STA),
|
|
|
+ HCMD_NAME(REMOVE_STA),
|
|
|
+ HCMD_NAME(FW_GET_ITEM_CMD),
|
|
|
+ HCMD_NAME(TX_CMD),
|
|
|
+ HCMD_NAME(SCD_QUEUE_CFG),
|
|
|
+ HCMD_NAME(TXPATH_FLUSH),
|
|
|
+ HCMD_NAME(MGMT_MCAST_KEY),
|
|
|
+ HCMD_NAME(WEP_KEY),
|
|
|
+ HCMD_NAME(SHARED_MEM_CFG),
|
|
|
+ HCMD_NAME(TDLS_CHANNEL_SWITCH_CMD),
|
|
|
+ HCMD_NAME(MAC_CONTEXT_CMD),
|
|
|
+ HCMD_NAME(TIME_EVENT_CMD),
|
|
|
+ HCMD_NAME(TIME_EVENT_NOTIFICATION),
|
|
|
+ HCMD_NAME(BINDING_CONTEXT_CMD),
|
|
|
+ HCMD_NAME(TIME_QUOTA_CMD),
|
|
|
+ HCMD_NAME(NON_QOS_TX_COUNTER_CMD),
|
|
|
+ HCMD_NAME(LQ_CMD),
|
|
|
+ HCMD_NAME(FW_PAGING_BLOCK_CMD),
|
|
|
+ HCMD_NAME(SCAN_OFFLOAD_REQUEST_CMD),
|
|
|
+ HCMD_NAME(SCAN_OFFLOAD_ABORT_CMD),
|
|
|
+ HCMD_NAME(HOT_SPOT_CMD),
|
|
|
+ HCMD_NAME(SCAN_OFFLOAD_PROFILES_QUERY_CMD),
|
|
|
+ HCMD_NAME(SCAN_OFFLOAD_HOTSPOTS_CONFIG_CMD),
|
|
|
+ HCMD_NAME(SCAN_OFFLOAD_HOTSPOTS_QUERY_CMD),
|
|
|
+ HCMD_NAME(BT_COEX_UPDATE_SW_BOOST),
|
|
|
+ HCMD_NAME(BT_COEX_UPDATE_CORUN_LUT),
|
|
|
+ HCMD_NAME(BT_COEX_UPDATE_REDUCED_TXP),
|
|
|
+ HCMD_NAME(BT_COEX_CI),
|
|
|
+ HCMD_NAME(PHY_CONFIGURATION_CMD),
|
|
|
+ HCMD_NAME(CALIB_RES_NOTIF_PHY_DB),
|
|
|
+ HCMD_NAME(SCAN_OFFLOAD_COMPLETE),
|
|
|
+ HCMD_NAME(SCAN_OFFLOAD_UPDATE_PROFILES_CMD),
|
|
|
+ HCMD_NAME(SCAN_OFFLOAD_CONFIG_CMD),
|
|
|
+ HCMD_NAME(POWER_TABLE_CMD),
|
|
|
+ HCMD_NAME(PSM_UAPSD_AP_MISBEHAVING_NOTIFICATION),
|
|
|
+ HCMD_NAME(REPLY_THERMAL_MNG_BACKOFF),
|
|
|
+ HCMD_NAME(DC2DC_CONFIG_CMD),
|
|
|
+ HCMD_NAME(NVM_ACCESS_CMD),
|
|
|
+ HCMD_NAME(SET_CALIB_DEFAULT_CMD),
|
|
|
+ HCMD_NAME(BEACON_NOTIFICATION),
|
|
|
+ HCMD_NAME(BEACON_TEMPLATE_CMD),
|
|
|
+ HCMD_NAME(TX_ANT_CONFIGURATION_CMD),
|
|
|
+ HCMD_NAME(BT_CONFIG),
|
|
|
+ HCMD_NAME(STATISTICS_CMD),
|
|
|
+ HCMD_NAME(STATISTICS_NOTIFICATION),
|
|
|
+ HCMD_NAME(EOSP_NOTIFICATION),
|
|
|
+ HCMD_NAME(REDUCE_TX_POWER_CMD),
|
|
|
+ HCMD_NAME(CARD_STATE_CMD),
|
|
|
+ HCMD_NAME(CARD_STATE_NOTIFICATION),
|
|
|
+ HCMD_NAME(MISSED_BEACONS_NOTIFICATION),
|
|
|
+ HCMD_NAME(TDLS_CONFIG_CMD),
|
|
|
+ HCMD_NAME(MAC_PM_POWER_TABLE),
|
|
|
+ HCMD_NAME(TDLS_CHANNEL_SWITCH_NOTIFICATION),
|
|
|
+ HCMD_NAME(MFUART_LOAD_NOTIFICATION),
|
|
|
+ HCMD_NAME(SCAN_ITERATION_COMPLETE_UMAC),
|
|
|
+ HCMD_NAME(REPLY_RX_PHY_CMD),
|
|
|
+ HCMD_NAME(REPLY_RX_MPDU_CMD),
|
|
|
+ HCMD_NAME(BA_NOTIF),
|
|
|
+ HCMD_NAME(MCC_UPDATE_CMD),
|
|
|
+ HCMD_NAME(MCC_CHUB_UPDATE_CMD),
|
|
|
+ HCMD_NAME(MARKER_CMD),
|
|
|
+ HCMD_NAME(BT_COEX_PRIO_TABLE),
|
|
|
+ HCMD_NAME(BT_COEX_PROT_ENV),
|
|
|
+ HCMD_NAME(BT_PROFILE_NOTIFICATION),
|
|
|
+ HCMD_NAME(BCAST_FILTER_CMD),
|
|
|
+ HCMD_NAME(MCAST_FILTER_CMD),
|
|
|
+ HCMD_NAME(REPLY_SF_CFG_CMD),
|
|
|
+ HCMD_NAME(REPLY_BEACON_FILTERING_CMD),
|
|
|
+ HCMD_NAME(D3_CONFIG_CMD),
|
|
|
+ HCMD_NAME(PROT_OFFLOAD_CONFIG_CMD),
|
|
|
+ HCMD_NAME(OFFLOADS_QUERY_CMD),
|
|
|
+ HCMD_NAME(REMOTE_WAKE_CONFIG_CMD),
|
|
|
+ HCMD_NAME(MATCH_FOUND_NOTIFICATION),
|
|
|
+ HCMD_NAME(CMD_DTS_MEASUREMENT_TRIGGER),
|
|
|
+ HCMD_NAME(DTS_MEASUREMENT_NOTIFICATION),
|
|
|
+ HCMD_NAME(WOWLAN_PATTERNS),
|
|
|
+ HCMD_NAME(WOWLAN_CONFIGURATION),
|
|
|
+ HCMD_NAME(WOWLAN_TSC_RSC_PARAM),
|
|
|
+ HCMD_NAME(WOWLAN_TKIP_PARAM),
|
|
|
+ HCMD_NAME(WOWLAN_KEK_KCK_MATERIAL),
|
|
|
+ HCMD_NAME(WOWLAN_GET_STATUSES),
|
|
|
+ HCMD_NAME(WOWLAN_TX_POWER_PER_DB),
|
|
|
+ HCMD_NAME(SCAN_ITERATION_COMPLETE),
|
|
|
+ HCMD_NAME(D0I3_END_CMD),
|
|
|
+ HCMD_NAME(LTR_CONFIG),
|
|
|
+ HCMD_NAME(REPLY_DEBUG_CMD),
|
|
|
};
|
|
|
-#undef CMD
|
|
|
+
|
|
|
+/* Please keep this array *SORTED* by hex value.
|
|
|
+ * Access is done through binary search
|
|
|
+ */
|
|
|
+static const struct iwl_hcmd_names iwl_mvm_phy_names[] = {
|
|
|
+ HCMD_NAME(CMD_DTS_MEASUREMENT_TRIGGER_WIDE),
|
|
|
+ HCMD_NAME(DTS_MEASUREMENT_NOTIF_WIDE),
|
|
|
+};
|
|
|
+
|
|
|
+static const struct iwl_hcmd_arr iwl_mvm_groups[] = {
|
|
|
+ [LEGACY_GROUP] = HCMD_ARR(iwl_mvm_legacy_names),
|
|
|
+ [LONG_GROUP] = HCMD_ARR(iwl_mvm_legacy_names),
|
|
|
+ [PHY_OPS_GROUP] = HCMD_ARR(iwl_mvm_phy_names),
|
|
|
+};
|
|
|
+
|
|
|
|
|
|
/* this forward declaration can avoid to export the function */
|
|
|
static void iwl_mvm_async_handlers_wk(struct work_struct *wk);
|
|
@@ -508,7 +533,8 @@ iwl_op_mode_mvm_start(struct iwl_trans *trans, const struct iwl_cfg *cfg,
|
|
|
if (mvm->fw->ucode_capa.flags & IWL_UCODE_TLV_FLAGS_DW_BC_TABLE)
|
|
|
trans_cfg.bc_table_dword = true;
|
|
|
|
|
|
- trans_cfg.command_names = iwl_mvm_cmd_strings;
|
|
|
+ trans_cfg.command_groups = iwl_mvm_groups;
|
|
|
+ trans_cfg.command_groups_size = ARRAY_SIZE(iwl_mvm_groups);
|
|
|
|
|
|
trans_cfg.cmd_queue = IWL_MVM_CMD_QUEUE;
|
|
|
trans_cfg.cmd_fifo = IWL_MVM_TX_FIFO_CMD;
|