|
@@ -46,6 +46,37 @@ MODULE_VERSION(IWLWIFI_VERSION);
|
|
|
MODULE_AUTHOR(DRV_COPYRIGHT " " DRV_AUTHOR);
|
|
|
MODULE_LICENSE("GPL");
|
|
|
|
|
|
+static struct iwl_wimax_coex_event_entry cu_priorities[COEX_NUM_OF_EVENTS] = {
|
|
|
+ {COEX_CU_UNASSOC_IDLE_RP, COEX_CU_UNASSOC_IDLE_WP,
|
|
|
+ 0, COEX_UNASSOC_IDLE_FLAGS},
|
|
|
+ {COEX_CU_UNASSOC_MANUAL_SCAN_RP, COEX_CU_UNASSOC_MANUAL_SCAN_WP,
|
|
|
+ 0, COEX_UNASSOC_MANUAL_SCAN_FLAGS},
|
|
|
+ {COEX_CU_UNASSOC_AUTO_SCAN_RP, COEX_CU_UNASSOC_AUTO_SCAN_WP,
|
|
|
+ 0, COEX_UNASSOC_AUTO_SCAN_FLAGS},
|
|
|
+ {COEX_CU_CALIBRATION_RP, COEX_CU_CALIBRATION_WP,
|
|
|
+ 0, COEX_CALIBRATION_FLAGS},
|
|
|
+ {COEX_CU_PERIODIC_CALIBRATION_RP, COEX_CU_PERIODIC_CALIBRATION_WP,
|
|
|
+ 0, COEX_PERIODIC_CALIBRATION_FLAGS},
|
|
|
+ {COEX_CU_CONNECTION_ESTAB_RP, COEX_CU_CONNECTION_ESTAB_WP,
|
|
|
+ 0, COEX_CONNECTION_ESTAB_FLAGS},
|
|
|
+ {COEX_CU_ASSOCIATED_IDLE_RP, COEX_CU_ASSOCIATED_IDLE_WP,
|
|
|
+ 0, COEX_ASSOCIATED_IDLE_FLAGS},
|
|
|
+ {COEX_CU_ASSOC_MANUAL_SCAN_RP, COEX_CU_ASSOC_MANUAL_SCAN_WP,
|
|
|
+ 0, COEX_ASSOC_MANUAL_SCAN_FLAGS},
|
|
|
+ {COEX_CU_ASSOC_AUTO_SCAN_RP, COEX_CU_ASSOC_AUTO_SCAN_WP,
|
|
|
+ 0, COEX_ASSOC_AUTO_SCAN_FLAGS},
|
|
|
+ {COEX_CU_ASSOC_ACTIVE_LEVEL_RP, COEX_CU_ASSOC_ACTIVE_LEVEL_WP,
|
|
|
+ 0, COEX_ASSOC_ACTIVE_LEVEL_FLAGS},
|
|
|
+ {COEX_CU_RF_ON_RP, COEX_CU_RF_ON_WP, 0, COEX_CU_RF_ON_FLAGS},
|
|
|
+ {COEX_CU_RF_OFF_RP, COEX_CU_RF_OFF_WP, 0, COEX_RF_OFF_FLAGS},
|
|
|
+ {COEX_CU_STAND_ALONE_DEBUG_RP, COEX_CU_STAND_ALONE_DEBUG_WP,
|
|
|
+ 0, COEX_STAND_ALONE_DEBUG_FLAGS},
|
|
|
+ {COEX_CU_IPAN_ASSOC_LEVEL_RP, COEX_CU_IPAN_ASSOC_LEVEL_WP,
|
|
|
+ 0, COEX_IPAN_ASSOC_LEVEL_FLAGS},
|
|
|
+ {COEX_CU_RSRVD1_RP, COEX_CU_RSRVD1_WP, 0, COEX_RSRVD1_FLAGS},
|
|
|
+ {COEX_CU_RSRVD2_RP, COEX_CU_RSRVD2_WP, 0, COEX_RSRVD2_FLAGS}
|
|
|
+};
|
|
|
+
|
|
|
#define IWL_DECLARE_RATE_INFO(r, s, ip, in, rp, rn, pp, np) \
|
|
|
[IWL_RATE_##r##M_INDEX] = { IWL_RATE_##r##M_PLCP, \
|
|
|
IWL_RATE_SISO_##s##M_PLCP, \
|
|
@@ -2865,6 +2896,34 @@ void iwl_free_txq_mem(struct iwl_priv *priv)
|
|
|
}
|
|
|
EXPORT_SYMBOL(iwl_free_txq_mem);
|
|
|
|
|
|
+int iwl_send_wimax_coex(struct iwl_priv *priv)
|
|
|
+{
|
|
|
+ struct iwl_wimax_coex_cmd uninitialized_var(coex_cmd);
|
|
|
+
|
|
|
+ if (priv->cfg->support_wimax_coexist) {
|
|
|
+ /* UnMask wake up src at associated sleep */
|
|
|
+ coex_cmd.flags |= COEX_FLAGS_ASSOC_WA_UNMASK_MSK;
|
|
|
+
|
|
|
+ /* UnMask wake up src at unassociated sleep */
|
|
|
+ coex_cmd.flags |= COEX_FLAGS_UNASSOC_WA_UNMASK_MSK;
|
|
|
+ memcpy(coex_cmd.sta_prio, cu_priorities,
|
|
|
+ sizeof(struct iwl_wimax_coex_event_entry) *
|
|
|
+ COEX_NUM_OF_EVENTS);
|
|
|
+
|
|
|
+ /* enabling the coexistence feature */
|
|
|
+ coex_cmd.flags |= COEX_FLAGS_COEX_ENABLE_MSK;
|
|
|
+
|
|
|
+ /* enabling the priorities tables */
|
|
|
+ coex_cmd.flags |= COEX_FLAGS_STA_TABLE_VALID_MSK;
|
|
|
+ } else {
|
|
|
+ /* coexistence is disabled */
|
|
|
+ memset(&coex_cmd, 0, sizeof(coex_cmd));
|
|
|
+ }
|
|
|
+ return iwl_send_cmd_pdu(priv, COEX_PRIORITY_TABLE_CMD,
|
|
|
+ sizeof(coex_cmd), &coex_cmd);
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(iwl_send_wimax_coex);
|
|
|
+
|
|
|
#ifdef CONFIG_IWLWIFI_DEBUGFS
|
|
|
|
|
|
#define IWL_TRAFFIC_DUMP_SIZE (IWL_TRAFFIC_ENTRY_SIZE * IWL_TRAFFIC_ENTRIES)
|