|
@@ -1526,8 +1526,11 @@ il4965_tx_cmd_build_basic(struct il_priv *il, struct sk_buff *skb,
|
|
}
|
|
}
|
|
|
|
|
|
static void
|
|
static void
|
|
-il4965_tx_cmd_build_rate(struct il_priv *il, struct il_tx_cmd *tx_cmd,
|
|
|
|
- struct ieee80211_tx_info *info, __le16 fc)
|
|
|
|
|
|
+il4965_tx_cmd_build_rate(struct il_priv *il,
|
|
|
|
+ struct il_tx_cmd *tx_cmd,
|
|
|
|
+ struct ieee80211_tx_info *info,
|
|
|
|
+ struct ieee80211_sta *sta,
|
|
|
|
+ __le16 fc)
|
|
{
|
|
{
|
|
const u8 rts_retry_limit = 60;
|
|
const u8 rts_retry_limit = 60;
|
|
u32 rate_flags;
|
|
u32 rate_flags;
|
|
@@ -1561,9 +1564,7 @@ il4965_tx_cmd_build_rate(struct il_priv *il, struct il_tx_cmd *tx_cmd,
|
|
rate_idx = info->control.rates[0].idx;
|
|
rate_idx = info->control.rates[0].idx;
|
|
if ((info->control.rates[0].flags & IEEE80211_TX_RC_MCS) || rate_idx < 0
|
|
if ((info->control.rates[0].flags & IEEE80211_TX_RC_MCS) || rate_idx < 0
|
|
|| rate_idx > RATE_COUNT_LEGACY)
|
|
|| rate_idx > RATE_COUNT_LEGACY)
|
|
- rate_idx =
|
|
|
|
- rate_lowest_index(&il->bands[info->band],
|
|
|
|
- info->control.sta);
|
|
|
|
|
|
+ rate_idx = rate_lowest_index(&il->bands[info->band], sta);
|
|
/* For 5 GHZ band, remap mac80211 rate indices into driver indices */
|
|
/* For 5 GHZ band, remap mac80211 rate indices into driver indices */
|
|
if (info->band == IEEE80211_BAND_5GHZ)
|
|
if (info->band == IEEE80211_BAND_5GHZ)
|
|
rate_idx += IL_FIRST_OFDM_RATE;
|
|
rate_idx += IL_FIRST_OFDM_RATE;
|
|
@@ -1630,11 +1631,12 @@ il4965_tx_cmd_build_hwcrypto(struct il_priv *il, struct ieee80211_tx_info *info,
|
|
* start C_TX command process
|
|
* start C_TX command process
|
|
*/
|
|
*/
|
|
int
|
|
int
|
|
-il4965_tx_skb(struct il_priv *il, struct sk_buff *skb)
|
|
|
|
|
|
+il4965_tx_skb(struct il_priv *il,
|
|
|
|
+ struct ieee80211_sta *sta,
|
|
|
|
+ struct sk_buff *skb)
|
|
{
|
|
{
|
|
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
|
|
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
|
|
struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
|
|
struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
|
|
- struct ieee80211_sta *sta = info->control.sta;
|
|
|
|
struct il_station_priv *sta_priv = NULL;
|
|
struct il_station_priv *sta_priv = NULL;
|
|
struct il_tx_queue *txq;
|
|
struct il_tx_queue *txq;
|
|
struct il_queue *q;
|
|
struct il_queue *q;
|
|
@@ -1680,7 +1682,7 @@ il4965_tx_skb(struct il_priv *il, struct sk_buff *skb)
|
|
sta_id = il->hw_params.bcast_id;
|
|
sta_id = il->hw_params.bcast_id;
|
|
else {
|
|
else {
|
|
/* Find idx into station table for destination station */
|
|
/* Find idx into station table for destination station */
|
|
- sta_id = il_sta_id_or_broadcast(il, info->control.sta);
|
|
|
|
|
|
+ sta_id = il_sta_id_or_broadcast(il, sta);
|
|
|
|
|
|
if (sta_id == IL_INVALID_STATION) {
|
|
if (sta_id == IL_INVALID_STATION) {
|
|
D_DROP("Dropping - INVALID STATION: %pM\n", hdr->addr1);
|
|
D_DROP("Dropping - INVALID STATION: %pM\n", hdr->addr1);
|
|
@@ -1786,7 +1788,7 @@ il4965_tx_skb(struct il_priv *il, struct sk_buff *skb)
|
|
/* TODO need this for burst mode later on */
|
|
/* TODO need this for burst mode later on */
|
|
il4965_tx_cmd_build_basic(il, skb, tx_cmd, info, hdr, sta_id);
|
|
il4965_tx_cmd_build_basic(il, skb, tx_cmd, info, hdr, sta_id);
|
|
|
|
|
|
- il4965_tx_cmd_build_rate(il, tx_cmd, info, fc);
|
|
|
|
|
|
+ il4965_tx_cmd_build_rate(il, tx_cmd, info, sta, fc);
|
|
|
|
|
|
il_update_stats(il, true, fc, len);
|
|
il_update_stats(il, true, fc, len);
|
|
/*
|
|
/*
|
|
@@ -5828,7 +5830,9 @@ il4965_mac_stop(struct ieee80211_hw *hw)
|
|
}
|
|
}
|
|
|
|
|
|
void
|
|
void
|
|
-il4965_mac_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
|
|
|
|
|
|
+il4965_mac_tx(struct ieee80211_hw *hw,
|
|
|
|
+ struct ieee80211_tx_control *control,
|
|
|
|
+ struct sk_buff *skb)
|
|
{
|
|
{
|
|
struct il_priv *il = hw->priv;
|
|
struct il_priv *il = hw->priv;
|
|
|
|
|
|
@@ -5837,7 +5841,7 @@ il4965_mac_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
|
|
D_TX("dev->xmit(%d bytes) at rate 0x%02x\n", skb->len,
|
|
D_TX("dev->xmit(%d bytes) at rate 0x%02x\n", skb->len,
|
|
ieee80211_get_tx_rate(hw, IEEE80211_SKB_CB(skb))->bitrate);
|
|
ieee80211_get_tx_rate(hw, IEEE80211_SKB_CB(skb))->bitrate);
|
|
|
|
|
|
- if (il4965_tx_skb(il, skb))
|
|
|
|
|
|
+ if (il4965_tx_skb(il, control->sta, skb))
|
|
dev_kfree_skb_any(skb);
|
|
dev_kfree_skb_any(skb);
|
|
|
|
|
|
D_MACDUMP("leave\n");
|
|
D_MACDUMP("leave\n");
|