Lines Matching defs:rap
515 ampdu_rx_purge_slot(struct ieee80211_rx_ampdu *rap, int i)
521 m = mbufq_dequeue(&rap->rxa_mq[i]);
524 rap->rxa_qbytes -= m->m_pkthdr.len;
525 rap->rxa_qframes--;
538 ampdu_rx_add_slot(struct ieee80211_rx_ampdu *rap, int off, int tid,
570 if (!mbufq_empty(&rap->rxa_mq[off])) {
571 rxs_final = ieee80211_get_rx_params_ptr(mbufq_last(&rap->rxa_mq[off]));
600 if (mbufq_empty(&rap->rxa_mq[off]) || (toss_dup == 0)) {
601 if (mbufq_enqueue(&rap->rxa_mq[off], m) != 0) {
606 rxseq, tid, rap->rxa_start,
607 IEEE80211_SEQ_ADD(rap->rxa_start, rap->rxa_wnd-1),
609 mbufq_len(&rap->rxa_mq[off]),
610 rap->rxa_mq[off].mq_maxlen);
615 rap->rxa_qframes++;
616 rap->rxa_qbytes += m->m_pkthdr.len;
634 rxseq, tid, rap->rxa_start,
635 IEEE80211_SEQ_ADD(rap->rxa_start, rap->rxa_wnd-1));
663 ampdu_rx_purge(struct ieee80211_rx_ampdu *rap)
667 for (i = 0; i < rap->rxa_wnd; i++) {
668 ampdu_rx_purge_slot(rap, i);
669 if (rap->rxa_qframes == 0)
672 KASSERT(rap->rxa_qbytes == 0 && rap->rxa_qframes == 0,
674 rap->rxa_qbytes, rap->rxa_qframes));
679 struct ieee80211_rx_ampdu *rap)
684 memset(rap, 0, sizeof(*rap));
686 mbufq_init(&rap->rxa_mq[i], 256);
693 ampdu_rx_start(struct ieee80211_node *ni, struct ieee80211_rx_ampdu *rap,
699 if (rap->rxa_flags & IEEE80211_AGGR_RUNNING) {
704 ampdu_rx_purge(rap);
706 ieee80211_ampdu_rx_init_rap(ni, rap);
707 rap->rxa_wnd = (bufsiz == 0) ?
709 rap->rxa_start = _IEEE80211_MASKSHIFT(baseqctl, IEEE80211_BASEQ_START);
710 rap->rxa_flags |= IEEE80211_AGGR_RUNNING | IEEE80211_AGGR_XCHGPEND;
715 rap->rxa_flags |= IEEE80211_AGGR_AMSDU;
717 rap->rxa_flags &= ~IEEE80211_AGGR_AMSDU;
728 struct ieee80211_rx_ampdu *rap;
732 rap = &ni->ni_rx_ampdu[tid];
734 if (rap->rxa_flags & IEEE80211_AGGR_RUNNING) {
739 ampdu_rx_purge(rap);
742 ieee80211_ampdu_rx_init_rap(ni, rap);
744 rap->rxa_wnd = (baw== 0) ?
748 rap->rxa_start = 0;
749 rap->rxa_flags |= IEEE80211_AGGR_WAITRX;
751 rap->rxa_start = seq;
753 rap->rxa_flags |= IEEE80211_AGGR_RUNNING | IEEE80211_AGGR_XCHGPEND;
762 rap->rxa_wnd,
763 rap->rxa_flags);
774 struct ieee80211_rx_ampdu *rap;
777 rap = &ni->ni_rx_ampdu[tid];
778 ampdu_rx_stop(ni, rap);
785 ampdu_rx_stop(struct ieee80211_node *ni, struct ieee80211_rx_ampdu *rap)
788 ampdu_rx_purge(rap);
789 rap->rxa_flags &= ~(IEEE80211_AGGR_RUNNING
809 ampdu_dispatch_slot(struct ieee80211_rx_ampdu *rap, struct ieee80211_node *ni,
816 m = mbufq_dequeue(&rap->rxa_mq[i]);
821 rap->rxa_qbytes -= m->m_pkthdr.len;
822 rap->rxa_qframes--;
830 ampdu_rx_moveup(struct ieee80211_rx_ampdu *rap, struct ieee80211_node *ni,
839 if (rap->rxa_qframes != 0) {
840 int n = rap->rxa_qframes, j;
841 for (j = i+1; j < rap->rxa_wnd; j++) {
846 if (mbufq_len(&rap->rxa_mq[j]) != 0) {
847 n = n - mbufq_len(&rap->rxa_mq[j]);
848 mbufq_concat(&rap->rxa_mq[j-i], &rap->rxa_mq[j]);
856 __func__, n, rap->rxa_qframes, i, rap->rxa_start,
857 IEEE80211_SEQ_ADD(rap->rxa_start, rap->rxa_wnd-1),
859 vap->iv_stats.is_ampdu_rx_copy += rap->rxa_qframes;
872 ampdu_rx_dispatch(struct ieee80211_rx_ampdu *rap, struct ieee80211_node *ni)
879 for (i = 1; i < rap->rxa_wnd; i++) {
880 r = ampdu_dispatch_slot(rap, ni, i);
887 ampdu_rx_moveup(rap, ni, i, -1);
893 rap->rxa_start = IEEE80211_SEQ_ADD(rap->rxa_start, i);
900 rap->rxa_start,
908 ampdu_rx_flush(struct ieee80211_node *ni, struct ieee80211_rx_ampdu *rap)
912 for (i = 0; i < rap->rxa_wnd; i++) {
913 r = ampdu_dispatch_slot(rap, ni, i);
922 rap->rxa_start,
925 if (rap->rxa_qframes == 0)
937 struct ieee80211_rx_ampdu *rap, ieee80211_seq winstart)
950 seqno = rap->rxa_start;
951 for (i = 0; i < rap->rxa_wnd; i++) {
952 if ((r = mbufq_len(&rap->rxa_mq[i])) != 0) {
953 (void) ampdu_dispatch_slot(rap, ni, i);
973 ampdu_rx_moveup(rap, ni, i, winstart);
981 rap->rxa_start = seqno;
1004 struct ieee80211_rx_ampdu *rap;
1036 rap = &ni->ni_rx_ampdu[tid];
1037 if ((rap->rxa_flags & IEEE80211_AGGR_XCHGPEND) == 0) {
1058 rap->rxa_nframes++;
1065 if (rap->rxa_flags & IEEE80211_AGGR_WAITRX) {
1066 rap->rxa_flags &= ~IEEE80211_AGGR_WAITRX;
1067 rap->rxa_start = rxseq;
1070 if (rxseq == rap->rxa_start) {
1074 if (rap->rxa_qframes != 0) {
1078 KASSERT(mbufq_empty(&rap->rxa_mq[0]), ("unexpected dup"));
1080 ampdu_rx_dispatch(rap, ni);
1089 rap->rxa_start = IEEE80211_SEQ_INC(rxseq);
1095 rap->rxa_start = IEEE80211_SEQ_INC(rxseq);
1104 off = IEEE80211_SEQ_SUB(rxseq, rap->rxa_start);
1105 if (off < rap->rxa_wnd) {
1128 if (rap->rxa_qframes != 0) {
1130 if (ticks - rap->rxa_age > ieee80211_ampdu_age) {
1135 if (rap->rxa_qframes != 0) {
1137 rap->rxa_qframes;
1138 ampdu_rx_flush(ni, rap);
1146 rap->rxa_start =
1155 rap->rxa_start =
1164 rap->rxa_age = ticks;
1168 ampdu_rx_add_slot(rap, off, tid, rxseq, ni, m, rxs);
1179 rap->rxa_start,
1180 IEEE80211_SEQ_ADD(rap->rxa_start, rap->rxa_wnd-1),
1181 rap->rxa_qframes, rxseq, tid);
1186 * WinStart_B = rxseq - rap->rxa_wnd + 1
1193 ampdu_rx_flush_upto(ni, rap,
1194 IEEE80211_SEQ_SUB(rxseq, rap->rxa_wnd-1));
1204 rap->rxa_start,
1205 IEEE80211_SEQ_ADD(rap->rxa_start, rap->rxa_wnd-1),
1206 rap->rxa_qframes, rxseq, tid,
1227 struct ieee80211_rx_ampdu *rap;
1242 rap = &ni->ni_rx_ampdu[tid];
1243 if ((rap->rxa_flags & IEEE80211_AGGR_XCHGPEND) == 0) {
1255 if (rxseq == rap->rxa_start)
1258 off = IEEE80211_SEQ_SUB(rxseq, rap->rxa_start);
1266 rap->rxa_start,
1267 IEEE80211_SEQ_ADD(rap->rxa_start, rap->rxa_wnd-1),
1268 rap->rxa_qframes, rxseq, tid);
1271 ampdu_rx_flush_upto(ni, rap, rxseq);
1272 if (off >= rap->rxa_wnd) {
1278 rap->rxa_start = rxseq;
1288 rap->rxa_start,
1289 IEEE80211_SEQ_ADD(rap->rxa_start, rap->rxa_wnd-1),
1290 rap->rxa_qframes, rxseq, tid,
1380 struct ieee80211_rx_ampdu *rap;
1382 rap = &ni->ni_rx_ampdu[tid];
1383 if ((rap->rxa_flags & IEEE80211_AGGR_XCHGPEND) == 0)
1385 if (rap->rxa_qframes == 0)
1392 if (ticks - rap->rxa_age > ieee80211_ampdu_age) {
1397 vap->iv_stats.is_ampdu_rx_age += rap->rxa_qframes;
1398 ampdu_rx_flush(ni, rap);
2403 struct ieee80211_rx_ampdu *rap;
2426 rap = &ni->ni_rx_ampdu[tid];
2438 ic->ic_ampdu_rx_start(ni, rap,
2451 /* XXX honor rap flags? */
2454 | _IEEE80211_SHIFTMASK(rap->rxa_wnd, IEEE80211_BAPS_BUFSIZ)
2562 struct ieee80211_rx_ampdu *rap;
2586 rap = &ni->ni_rx_ampdu[tid];
2587 ic->ic_ampdu_rx_stop(ni, rap);