Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(873)

Side by Side Diff: chromeos/compat-wireless/drivers/net/wireless/ath/ath9k/xmit.c

Issue 6393011: ath9k: Add pktlog support Base URL: ssh://git@gitrw.chromium.org:9222/kernel.git@master
Patch Set: add missing files Created 9 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2008-2009 Atheros Communications Inc. 2 * Copyright (c) 2008-2009 Atheros Communications Inc.
3 * 3 *
4 * Permission to use, copy, modify, and/or distribute this software for any 4 * Permission to use, copy, modify, and/or distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above 5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies. 6 * copyright notice and this permission notice appear in all copies.
7 * 7 *
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
(...skipping 421 matching lines...) Expand 10 before | Expand all | Expand 10 after
432 * not a holding desc. 432 * not a holding desc.
433 */ 433 */
434 if (!bf_last->bf_stale) 434 if (!bf_last->bf_stale)
435 list_move_tail(&bf->list, &bf_head); 435 list_move_tail(&bf->list, &bf_head);
436 else 436 else
437 INIT_LIST_HEAD(&bf_head); 437 INIT_LIST_HEAD(&bf_head);
438 } else { 438 } else {
439 BUG_ON(list_empty(bf_q)); 439 BUG_ON(list_empty(bf_q));
440 list_move_tail(&bf->list, &bf_head); 440 list_move_tail(&bf->list, &bf_head);
441 } 441 }
442
443 ath9k_pktlog_txcomplete(sc, &bf_head, bf, bf_last);
442 444
443 if (!txpending || (tid->state & AGGR_CLEANUP)) { 445 if (!txpending || (tid->state & AGGR_CLEANUP)) {
444 /* 446 /*
445 * complete the acked-ones/xretried ones; update 447 * complete the acked-ones/xretried ones; update
446 * block-ack window 448 * block-ack window
447 */ 449 */
448 spin_lock_bh(&txq->axq_lock); 450 spin_lock_bh(&txq->axq_lock);
449 ath_tx_update_baw(sc, tid, bf->bf_seqno); 451 ath_tx_update_baw(sc, tid, bf->bf_seqno);
450 spin_unlock_bh(&txq->axq_lock); 452 spin_unlock_bh(&txq->axq_lock);
451 453
(...skipping 1630 matching lines...) Expand 10 before | Expand all | Expand 10 after
2082 } else { 2084 } else {
2083 bf = list_entry(bf_held->list.next, 2085 bf = list_entry(bf_held->list.next,
2084 struct ath_buf, list); 2086 struct ath_buf, list);
2085 } 2087 }
2086 } 2088 }
2087 2089
2088 lastbf = bf->bf_lastbf; 2090 lastbf = bf->bf_lastbf;
2089 ds = lastbf->bf_desc; 2091 ds = lastbf->bf_desc;
2090 2092
2091 memset(&ts, 0, sizeof(ts)); 2093 memset(&ts, 0, sizeof(ts));
2092 » » status = ath9k_hw_txprocdesc(ah, ds, &ts); 2094 » » status = ath9k_hw_txprocdesc(ah, ds, &ts, NULL);
2093 if (status == -EINPROGRESS) { 2095 if (status == -EINPROGRESS) {
2094 spin_unlock_bh(&txq->axq_lock); 2096 spin_unlock_bh(&txq->axq_lock);
2095 break; 2097 break;
2096 } 2098 }
2097 2099
2098 /* 2100 /*
2099 * We now know the nullfunc frame has been ACKed so we 2101 * We now know the nullfunc frame has been ACKed so we
2100 * can disable RX. 2102 * can disable RX.
2101 */ 2103 */
2102 if (bf->bf_isnullfunc && 2104 if (bf->bf_isnullfunc &&
(...skipping 30 matching lines...) Expand all
2133 * This frame is sent out as a single frame. 2135 * This frame is sent out as a single frame.
2134 * Use hardware retry status for this frame. 2136 * Use hardware retry status for this frame.
2135 */ 2137 */
2136 if (ts.ts_status & ATH9K_TXERR_XRETRY) 2138 if (ts.ts_status & ATH9K_TXERR_XRETRY)
2137 bf->bf_state.bf_type |= BUF_XRETRY; 2139 bf->bf_state.bf_type |= BUF_XRETRY;
2138 ath_tx_rc_status(bf, &ts, txok ? 0 : 1, txok, true); 2140 ath_tx_rc_status(bf, &ts, txok ? 0 : 1, txok, true);
2139 } 2141 }
2140 2142
2141 qnum = skb_get_queue_mapping(bf->bf_mpdu); 2143 qnum = skb_get_queue_mapping(bf->bf_mpdu);
2142 2144
2143 » » if (bf_isampdu(bf)) 2145 » » if (bf_isampdu(bf)) {
2144 ath_tx_complete_aggr(sc, txq, bf, &bf_head, &ts, txok); 2146 ath_tx_complete_aggr(sc, txq, bf, &bf_head, &ts, txok);
2145 » » else 2147 » » } else {
2148 » » » ath9k_pktlog_txctrl(sc, &bf_head, lastbf);
2146 ath_tx_complete_buf(sc, bf, txq, &bf_head, &ts, txok, 0) ; 2149 ath_tx_complete_buf(sc, bf, txq, &bf_head, &ts, txok, 0) ;
2150 }
2151
2152 ath_pktlog_txstatus(sc, lastbf->bf_desc);
2147 2153
2148 if (txq == sc->tx.txq_map[qnum]) 2154 if (txq == sc->tx.txq_map[qnum])
2149 ath_wake_mac80211_queue(sc, qnum); 2155 ath_wake_mac80211_queue(sc, qnum);
2150 2156
2151 spin_lock_bh(&txq->axq_lock); 2157 spin_lock_bh(&txq->axq_lock);
2152 if (sc->sc_flags & SC_OP_TXAGGR) 2158 if (sc->sc_flags & SC_OP_TXAGGR)
2153 ath_txq_schedule(sc, txq); 2159 ath_txq_schedule(sc, txq);
2154 spin_unlock_bh(&txq->axq_lock); 2160 spin_unlock_bh(&txq->axq_lock);
2155 } 2161 }
2156 } 2162 }
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
2210 { 2216 {
2211 struct ath_tx_status txs; 2217 struct ath_tx_status txs;
2212 struct ath_common *common = ath9k_hw_common(sc->sc_ah); 2218 struct ath_common *common = ath9k_hw_common(sc->sc_ah);
2213 struct ath_hw *ah = sc->sc_ah; 2219 struct ath_hw *ah = sc->sc_ah;
2214 struct ath_txq *txq; 2220 struct ath_txq *txq;
2215 struct ath_buf *bf, *lastbf; 2221 struct ath_buf *bf, *lastbf;
2216 struct list_head bf_head; 2222 struct list_head bf_head;
2217 int status; 2223 int status;
2218 int txok; 2224 int txok;
2219 int qnum; 2225 int qnum;
2226 u32 txs_desc[9];
2220 2227
2221 for (;;) { 2228 for (;;) {
2222 » » status = ath9k_hw_txprocdesc(ah, NULL, (void *)&txs); 2229 » » status = ath9k_hw_txprocdesc(ah, NULL, (void *)&txs,
2230 » » » » » (void *) txs_desc);
2223 if (status == -EINPROGRESS) 2231 if (status == -EINPROGRESS)
2224 break; 2232 break;
2225 if (status == -EIO) { 2233 if (status == -EIO) {
2226 ath_print(common, ATH_DBG_XMIT, 2234 ath_print(common, ATH_DBG_XMIT,
2227 "Error processing tx status\n"); 2235 "Error processing tx status\n");
2228 break; 2236 break;
2229 } 2237 }
2230 2238
2231 /* Skip beacon completions */ 2239 /* Skip beacon completions */
2232 if (txs.qid == sc->beacon.beaconq) 2240 if (txs.qid == sc->beacon.beaconq)
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
2266 } 2274 }
2267 2275
2268 if (!bf_isampdu(bf)) { 2276 if (!bf_isampdu(bf)) {
2269 if (txs.ts_status & ATH9K_TXERR_XRETRY) 2277 if (txs.ts_status & ATH9K_TXERR_XRETRY)
2270 bf->bf_state.bf_type |= BUF_XRETRY; 2278 bf->bf_state.bf_type |= BUF_XRETRY;
2271 ath_tx_rc_status(bf, &txs, txok ? 0 : 1, txok, true); 2279 ath_tx_rc_status(bf, &txs, txok ? 0 : 1, txok, true);
2272 } 2280 }
2273 2281
2274 qnum = skb_get_queue_mapping(bf->bf_mpdu); 2282 qnum = skb_get_queue_mapping(bf->bf_mpdu);
2275 2283
2276 » » if (bf_isampdu(bf)) 2284 » » if (bf_isampdu(bf)) {
2277 ath_tx_complete_aggr(sc, txq, bf, &bf_head, &txs, txok); 2285 ath_tx_complete_aggr(sc, txq, bf, &bf_head, &txs, txok);
2278 » » else 2286 » » } else {
2287 » » » ath9k_pktlog_txctrl(sc, &bf_head, lastbf);
2279 ath_tx_complete_buf(sc, bf, txq, &bf_head, 2288 ath_tx_complete_buf(sc, bf, txq, &bf_head,
2280 &txs, txok, 0); 2289 &txs, txok, 0);
2290 }
2281 2291
2282 if (txq == sc->tx.txq_map[qnum]) 2292 if (txq == sc->tx.txq_map[qnum])
2283 ath_wake_mac80211_queue(sc, qnum); 2293 ath_wake_mac80211_queue(sc, qnum);
2284 2294
2295 ath_pktlog_txstatus(sc, txs_desc);
2296
2285 spin_lock_bh(&txq->axq_lock); 2297 spin_lock_bh(&txq->axq_lock);
2286 if (!list_empty(&txq->txq_fifo_pending)) { 2298 if (!list_empty(&txq->txq_fifo_pending)) {
2287 INIT_LIST_HEAD(&bf_head); 2299 INIT_LIST_HEAD(&bf_head);
2288 bf = list_first_entry(&txq->txq_fifo_pending, 2300 bf = list_first_entry(&txq->txq_fifo_pending,
2289 struct ath_buf, list); 2301 struct ath_buf, list);
2290 list_cut_position(&bf_head, &txq->txq_fifo_pending, 2302 list_cut_position(&bf_head, &txq->txq_fifo_pending,
2291 &bf->bf_lastbf->list); 2303 &bf->bf_lastbf->list);
2292 ath_tx_txqaddbuf(sc, txq, &bf_head); 2304 ath_tx_txqaddbuf(sc, txq, &bf_head);
2293 } else if (sc->sc_flags & SC_OP_TXAGGR) 2305 } else if (sc->sc_flags & SC_OP_TXAGGR)
2294 ath_txq_schedule(sc, txq); 2306 ath_txq_schedule(sc, txq);
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
2442 tid->ac->sched = false; 2454 tid->ac->sched = false;
2443 } 2455 }
2444 2456
2445 ath_tid_drain(sc, txq, tid); 2457 ath_tid_drain(sc, txq, tid);
2446 tid->state &= ~AGGR_ADDBA_COMPLETE; 2458 tid->state &= ~AGGR_ADDBA_COMPLETE;
2447 tid->state &= ~AGGR_CLEANUP; 2459 tid->state &= ~AGGR_CLEANUP;
2448 2460
2449 spin_unlock_bh(&txq->axq_lock); 2461 spin_unlock_bh(&txq->axq_lock);
2450 } 2462 }
2451 } 2463 }
OLDNEW
« no previous file with comments | « chromeos/compat-wireless/drivers/net/wireless/ath/ath9k/recv.c ('k') | chromeos/scripts/compat_wireless_config » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698