projects
/
carl9170fw.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
carl9170 toolchain: update to gcc-4.7.1
[carl9170fw.git]
/
carlfw
/
src
/
wlan.c
diff --git
a/carlfw/src/wlan.c
b/carlfw/src/wlan.c
index cb2dc75c0ef43805b86989ec3a9798cbaee764fe..50c48f9d27d5f440bb5e6a9d5c14eb1719cb7448 100644
(file)
--- a/
carlfw/src/wlan.c
+++ b/
carlfw/src/wlan.c
@@
-305,7
+305,7
@@
static void wlan_assign_seq(struct ieee80211_hdr *hdr, unsigned int vif)
hdr->seq_ctrl &= cpu_to_le16(~IEEE80211_SCTL_SEQ);
hdr->seq_ctrl |= cpu_to_le16(fw.wlan.sequence[vif]);
hdr->seq_ctrl &= cpu_to_le16(~IEEE80211_SCTL_SEQ);
hdr->seq_ctrl |= cpu_to_le16(fw.wlan.sequence[vif]);
- if (
!(hdr->seq_ctrl & cpu_to_le16(IEEE80211_SCTL_FRAG)
))
+ if (
ieee80211_is_first_frag(hdr->seq_ctrl
))
fw.wlan.sequence[vif] += 0x10;
}
fw.wlan.sequence[vif] += 0x10;
}
@@
-351,6
+351,12
@@
static bool wlan_tx_status(struct dma_queue *queue,
/* reset retry indicator flags */
desc->ctrl &= ~(AR9170_CTRL_TXFAIL | AR9170_CTRL_BAFAIL);
/* reset retry indicator flags */
desc->ctrl &= ~(AR9170_CTRL_TXFAIL | AR9170_CTRL_BAFAIL);
+ /*
+ * Note: wlan_tx_consume_retry will override the old
+ * phy [CCK,OFDM, HT, BW20/40, MCS...] and mac vectors
+ * [AMPDU,RTS/CTS,...] therefore be careful when they
+ * are used.
+ */
if (wlan_tx_consume_retry(super)) {
/*
* retry for simple and aggregated 802.11 frames.
if (wlan_tx_consume_retry(super)) {
/*
* retry for simple and aggregated 802.11 frames.
@@
-520,7
+526,7
@@
static void wlan_send_buffered_ba(void)
struct ieee80211_ba *ba = (struct ieee80211_ba *) &baf->f.ba;
struct carl9170_bar_ctx *ctx;
struct ieee80211_ba *ba = (struct ieee80211_ba *) &baf->f.ba;
struct carl9170_bar_ctx *ctx;
- if (likely(
fw.wlan.ba_head_idx == fw.wlan.ba_tail_idx
))
+ if (likely(
!fw.wlan.queued_ba
))
return;
/* there's no point to continue when the ba_desc is not available. */
return;
/* there's no point to continue when the ba_desc is not available. */
@@
-530,6
+536,7
@@
static void wlan_send_buffered_ba(void)
ctx = &fw.wlan.ba_cache[fw.wlan.ba_head_idx];
fw.wlan.ba_head_idx++;
fw.wlan.ba_head_idx %= CONFIG_CARL9170FW_BACK_REQS_NUM;
ctx = &fw.wlan.ba_cache[fw.wlan.ba_head_idx];
fw.wlan.ba_head_idx++;
fw.wlan.ba_head_idx %= CONFIG_CARL9170FW_BACK_REQS_NUM;
+ fw.wlan.queued_ba--;
baf->s.len = sizeof(struct carl9170_tx_superdesc) +
sizeof(struct ar9170_tx_hwdesc) +
baf->s.len = sizeof(struct carl9170_tx_superdesc) +
sizeof(struct ar9170_tx_hwdesc) +
@@
-539,13
+546,12
@@
static void wlan_send_buffered_ba(void)
baf->s.queue = AR9170_TXQ_VO;
baf->f.hdr.length = sizeof(struct ieee80211_ba) + FCS_LEN;
baf->s.queue = AR9170_TXQ_VO;
baf->f.hdr.length = sizeof(struct ieee80211_ba) + FCS_LEN;
- /* HW Duration / Backoff */
- baf->f.hdr.mac.backoff = 1;
- baf->f.hdr.mac.hw_duration = 1;
+ baf->f.hdr.mac.no_ack = 1;
- /* take the TX rate from the RX'd BAR */
- baf->f.hdr.phy.set = ctx->phy;
- baf->f.hdr.phy.tx_power = 29; /* 14.5 dBm */
+ baf->f.hdr.phy.modulation = 1; /* OFDM */
+ baf->f.hdr.phy.tx_power = 34; /* 17 dBm */
+ baf->f.hdr.phy.chains = 1;
+ baf->f.hdr.phy.mcs = AR9170_TXRX_PHY_RATE_OFDM_6M;
/* format outgoing BA */
ba->frame_control = cpu_to_le16(IEEE80211_FTYPE_CTL | IEEE80211_STYPE_NULLFUNC);
/* format outgoing BA */
ba->frame_control = cpu_to_le16(IEEE80211_FTYPE_CTL | IEEE80211_STYPE_NULLFUNC);
@@
-576,11
+582,13
@@
static struct carl9170_bar_ctx *wlan_get_bar_cache_buffer(void)
tmp = &fw.wlan.ba_cache[fw.wlan.ba_tail_idx];
fw.wlan.ba_tail_idx++;
fw.wlan.ba_tail_idx %= CONFIG_CARL9170FW_BACK_REQS_NUM;
tmp = &fw.wlan.ba_cache[fw.wlan.ba_tail_idx];
fw.wlan.ba_tail_idx++;
fw.wlan.ba_tail_idx %= CONFIG_CARL9170FW_BACK_REQS_NUM;
+ if (fw.wlan.queued_ba < CONFIG_CARL9170FW_BACK_REQS_NUM)
+ fw.wlan.queued_ba++;
return tmp;
}
return tmp;
}
-static void handle_bar(struct dma_desc *desc, struct ieee80211_hdr *hdr,
+static void handle_bar(struct dma_desc *desc
__unused
, struct ieee80211_hdr *hdr,
unsigned int len, unsigned int mac_err)
{
struct ieee80211_bar *bar;
unsigned int len, unsigned int mac_err)
{
struct ieee80211_bar *bar;
@@
-625,11
+633,6
@@
static void handle_bar(struct dma_desc *desc, struct ieee80211_hdr *hdr,
*/
ctx->control = bar->control | cpu_to_le16(1);
ctx->start_seq_num = bar->start_seq_num;
*/
ctx->control = bar->control | cpu_to_le16(1);
ctx->start_seq_num = bar->start_seq_num;
- ctx->phy = ar9170_rx_to_phy(desc);
- if (unlikely(!ctx->phy)) {
- /* provide a backup, in case ar9170_rx_to_phy fails */
- ctx->phy = cpu_to_le32(0x2cc301);
- }
}
static void wlan_check_rx_overrun(void)
}
static void wlan_check_rx_overrun(void)