txrx.c (8af123e8ee272ad175440891333602d8d4b8e63c) | txrx.c (5694f962964c5162f6b49ddb5d517180bd7d1d98) |
---|---|
1/* 2 * Copyright (c) 2004-2011 Atheros Communications Inc. 3 * 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 6 * copyright notice and this permission notice appear in all copies. 7 * 8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES --- 1216 unchanged lines hidden (view full) --- 1225 dev_kfree_skb(skb); 1226 skb = NULL; 1227 } 1228 } 1229 if (skb1) 1230 ath6kl_data_tx(skb1, ar->net_dev); 1231 } 1232 | 1/* 2 * Copyright (c) 2004-2011 Atheros Communications Inc. 3 * 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 6 * copyright notice and this permission notice appear in all copies. 7 * 8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES --- 1216 unchanged lines hidden (view full) --- 1225 dev_kfree_skb(skb); 1226 skb = NULL; 1227 } 1228 } 1229 if (skb1) 1230 ath6kl_data_tx(skb1, ar->net_dev); 1231 } 1232 |
1233 if (!aggr_process_recv_frm(ar->aggr_cntxt, tid, seq_no, 1234 is_amsdu, skb)) 1235 ath6kl_deliver_frames_to_nw_stack(ar->net_dev, skb); | 1233 datap = (struct ethhdr *) skb->data; 1234 1235 if (is_unicast_ether_addr(datap->h_dest) && 1236 aggr_process_recv_frm(ar->aggr_cntxt, tid, seq_no, 1237 is_amsdu, skb)) 1238 /* aggregation code will handle the skb */ 1239 return; 1240 1241 ath6kl_deliver_frames_to_nw_stack(ar->net_dev, skb); |
1236} 1237 1238static void aggr_timeout(unsigned long arg) 1239{ 1240 u8 i, j; 1241 struct aggr_info *p_aggr = (struct aggr_info *) arg; 1242 struct rxtid *rxtid; 1243 struct rxtid_stats *stats; 1244 1245 for (i = 0; i < NUM_OF_TIDS; i++) { 1246 rxtid = &p_aggr->rx_tid[i]; 1247 stats = &p_aggr->stat[i]; 1248 1249 if (!rxtid->aggr || !rxtid->timer_mon || rxtid->progress) 1250 continue; 1251 | 1242} 1243 1244static void aggr_timeout(unsigned long arg) 1245{ 1246 u8 i, j; 1247 struct aggr_info *p_aggr = (struct aggr_info *) arg; 1248 struct rxtid *rxtid; 1249 struct rxtid_stats *stats; 1250 1251 for (i = 0; i < NUM_OF_TIDS; i++) { 1252 rxtid = &p_aggr->rx_tid[i]; 1253 stats = &p_aggr->stat[i]; 1254 1255 if (!rxtid->aggr || !rxtid->timer_mon || rxtid->progress) 1256 continue; 1257 |
1252 /* 1253 * FIXME: these timeouts happen quite fruently, something 1254 * line once within 60 seconds. Investigate why. 1255 */ | |
1256 stats->num_timeouts++; 1257 ath6kl_dbg(ATH6KL_DBG_AGGR, 1258 "aggr timeout (st %d end %d)\n", 1259 rxtid->seq_next, 1260 ((rxtid->seq_next + rxtid->hold_q_sz-1) & 1261 ATH6KL_MAX_SEQ_NO)); 1262 aggr_deque_frms(p_aggr, i, 0, 0); 1263 } --- 193 unchanged lines hidden --- | 1258 stats->num_timeouts++; 1259 ath6kl_dbg(ATH6KL_DBG_AGGR, 1260 "aggr timeout (st %d end %d)\n", 1261 rxtid->seq_next, 1262 ((rxtid->seq_next + rxtid->hold_q_sz-1) & 1263 ATH6KL_MAX_SEQ_NO)); 1264 aggr_deque_frms(p_aggr, i, 0, 0); 1265 } --- 193 unchanged lines hidden --- |