From patchwork Tue Mar 2 02:51:58 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bruno Randolf X-Patchwork-Id: 83117 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter.kernel.org (8.14.3/8.14.3) with ESMTP id o222q1G0014084 for ; Tue, 2 Mar 2010 02:52:01 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753265Ab0CBCwA (ORCPT ); Mon, 1 Mar 2010 21:52:00 -0500 Received: from mail30g.wh2.ocn.ne.jp ([220.111.41.239]:46255 "HELO mail30g.wh2.ocn.ne.jp" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with SMTP id S1753048Ab0CBCwA (ORCPT ); Mon, 1 Mar 2010 21:52:00 -0500 Received: from vs3006.wh2.ocn.ne.jp (125.206.180.169) by mail30g.wh2.ocn.ne.jp (RS ver 1.0.95vs) with SMTP id 4-0340658318 for ; Tue, 2 Mar 2010 11:51:59 +0900 (JST) Received: (qmail 33964 invoked from network); 2 Mar 2010 02:51:58 -0000 Received: from unknown (HELO ?127.0.1.1?) (220.110.201.18) by with SMTP; 2 Mar 2010 02:51:58 -0000 From: Bruno Randolf Subject: [PATCH v2] ath5k: fix injection in monitor mode To: linville@tuxdriver.com Cc: ath5k-devel@venema.h4ckr.net, linux-wireless@vger.kernel.org, netrolller.3d@gmail.com, benoit.papillault@free.fr Date: Tue, 02 Mar 2010 11:51:58 +0900 Message-ID: <20100302025158.9527.43764.stgit@void> User-Agent: StGIT/0.14.2 MIME-Version: 1.0 X-SF-Loop: 1 Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.3 (demeter.kernel.org [140.211.167.41]); Tue, 02 Mar 2010 02:52:01 +0000 (UTC) diff --git a/drivers/net/wireless/ath/ath5k/base.c b/drivers/net/wireless/ath/ath5k/base.c index a078f1e..ced13fd 100644 --- a/drivers/net/wireless/ath/ath5k/base.c +++ b/drivers/net/wireless/ath/ath5k/base.c @@ -1285,6 +1285,7 @@ ath5k_txbuf_setup(struct ath5k_softc *sc, struct ath5k_buf *bf, u16 cts_rate = 0; u16 duration = 0; u8 rc_flags; + enum ath5k_pkt_type pkt_type; flags = AR5K_TXDESC_INTREQ | AR5K_TXDESC_CLRDMASK; @@ -1322,9 +1323,17 @@ ath5k_txbuf_setup(struct ath5k_softc *sc, struct ath5k_buf *bf, duration = le16_to_cpu(ieee80211_ctstoself_duration(sc->hw, sc->vif, pktlen, info)); } + + /* we don't want the hardware to mess with injected frames in monitor + * mode (e.g. update TSF in beacons) */ + if (info->flags & IEEE80211_TX_CTL_INJECTED) + pkt_type = AR5K_PKT_TYPE_NORMAL; + else + pkt_type = get_hw_packet_type(skb); + ret = ah->ah_setup_tx_desc(ah, ds, pktlen, ieee80211_get_hdrlen_from_skb(skb), - get_hw_packet_type(skb), + pkt_type, (sc->power_level * 2), hw_rate, info->control.rates[0].count, keyidx, ah->ah_tx_ant, flags,