|
@@ -1029,6 +1029,68 @@ int iwl_rxon_add_station(struct iwl_priv *priv, const u8 *addr, bool is_ap)
|
|
|
}
|
|
|
EXPORT_SYMBOL(iwl_rxon_add_station);
|
|
|
|
|
|
+/**
|
|
|
+ * iwl_sta_init_bcast_lq - Initialize a bcast station's hardware rate table
|
|
|
+ *
|
|
|
+ * NOTE: Run REPLY_ADD_STA command to set up station table entry, before
|
|
|
+ * calling this function (which runs REPLY_TX_LINK_QUALITY_CMD,
|
|
|
+ * which requires station table entry to exist).
|
|
|
+ */
|
|
|
+static void iwl_sta_init_bcast_lq(struct iwl_priv *priv)
|
|
|
+{
|
|
|
+ int i, r;
|
|
|
+ struct iwl_link_quality_cmd link_cmd = {
|
|
|
+ .reserved1 = 0,
|
|
|
+ };
|
|
|
+ u32 rate_flags;
|
|
|
+
|
|
|
+ /* Set up the rate scaling to start at selected rate, fall back
|
|
|
+ * all the way down to 1M in IEEE order, and then spin on 1M */
|
|
|
+ if (priv->band == IEEE80211_BAND_5GHZ)
|
|
|
+ r = IWL_RATE_6M_INDEX;
|
|
|
+ else
|
|
|
+ r = IWL_RATE_1M_INDEX;
|
|
|
+
|
|
|
+ for (i = 0; i < LINK_QUAL_MAX_RETRY_NUM; i++) {
|
|
|
+ rate_flags = 0;
|
|
|
+ if (r >= IWL_FIRST_CCK_RATE && r <= IWL_LAST_CCK_RATE)
|
|
|
+ rate_flags |= RATE_MCS_CCK_MSK;
|
|
|
+
|
|
|
+ rate_flags |= first_antenna(priv->hw_params.valid_tx_ant) <<
|
|
|
+ RATE_MCS_ANT_POS;
|
|
|
+
|
|
|
+ link_cmd.rs_table[i].rate_n_flags =
|
|
|
+ iwl_hw_set_rate_n_flags(iwl_rates[r].plcp, rate_flags);
|
|
|
+ r = iwl_get_prev_ieee_rate(r);
|
|
|
+ }
|
|
|
+
|
|
|
+ link_cmd.general_params.single_stream_ant_msk =
|
|
|
+ first_antenna(priv->hw_params.valid_tx_ant);
|
|
|
+ link_cmd.general_params.dual_stream_ant_msk = 3;
|
|
|
+ link_cmd.agg_params.agg_dis_start_th = LINK_QUAL_AGG_DISABLE_START_DEF;
|
|
|
+ link_cmd.agg_params.agg_time_limit =
|
|
|
+ cpu_to_le16(LINK_QUAL_AGG_TIME_LIMIT_DEF);
|
|
|
+
|
|
|
+ /* Update the rate scaling for control frame Tx to AP */
|
|
|
+ link_cmd.sta_id = priv->hw_params.bcast_sta_id;
|
|
|
+
|
|
|
+ iwl_send_cmd_pdu_async(priv, REPLY_TX_LINK_QUALITY_CMD,
|
|
|
+ sizeof(link_cmd), &link_cmd, NULL);
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+/**
|
|
|
+ * iwl_add_bcast_station - add broadcast station into station table.
|
|
|
+ */
|
|
|
+void iwl_add_bcast_station(struct iwl_priv *priv)
|
|
|
+{
|
|
|
+ iwl_add_station(priv, iwl_bcast_addr, false, CMD_SYNC, NULL);
|
|
|
+
|
|
|
+ /* Set up default rate scaling table in device's station table */
|
|
|
+ iwl_sta_init_bcast_lq(priv);
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(iwl_add_bcast_station);
|
|
|
+
|
|
|
/**
|
|
|
* iwl_get_sta_id - Find station's index within station table
|
|
|
*
|