From owner-p4-projects@FreeBSD.ORG Mon Mar 17 22:06:33 2008 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 7FC9C106567A; Mon, 17 Mar 2008 22:06:33 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 2445A1065673 for ; Mon, 17 Mar 2008 22:06:33 +0000 (UTC) (envelope-from sam@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 0AA8B8FC2C for ; Mon, 17 Mar 2008 22:06:33 +0000 (UTC) (envelope-from sam@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.1/8.14.1) with ESMTP id m2HM6Wc1011082 for ; Mon, 17 Mar 2008 22:06:32 GMT (envelope-from sam@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.1/8.14.1/Submit) id m2HM6WAa011080 for perforce@freebsd.org; Mon, 17 Mar 2008 22:06:32 GMT (envelope-from sam@freebsd.org) Date: Mon, 17 Mar 2008 22:06:32 GMT Message-Id: <200803172206.m2HM6WAa011080@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to sam@freebsd.org using -f From: Sam Leffler To: Perforce Change Reviews Cc: Subject: PERFORCE change 137958 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 17 Mar 2008 22:06:34 -0000 http://perforce.freebsd.org/chv.cgi?CH=137958 Change 137958 by sam@sam_ebb on 2008/03/17 22:06:05 replace rssadapt with amrr; it's far more suited for this device (though it's unclear any device is really suited for rssadapt as it's presently implemented) Affected files ... .. //depot/projects/vap/sys/dev/ral/if_ral_pci.c#7 edit .. //depot/projects/vap/sys/dev/ral/rt2560.c#21 edit .. //depot/projects/vap/sys/dev/ral/rt2560reg.h#5 edit .. //depot/projects/vap/sys/dev/ral/rt2560var.h#13 edit .. //depot/projects/vap/sys/dev/ral/rt2661.c#18 edit .. //depot/projects/vap/sys/dev/ral/rt2661var.h#10 edit Differences ... ==== //depot/projects/vap/sys/dev/ral/if_ral_pci.c#7 (text+ko) ==== @@ -50,7 +50,7 @@ #include #include -#include +#include #include #include @@ -61,7 +61,7 @@ MODULE_DEPEND(ral, pci, 1, 1, 1); MODULE_DEPEND(ral, firmware, 1, 1, 1); MODULE_DEPEND(ral, wlan, 1, 1, 1); -MODULE_DEPEND(ral, wlan_rssadapt, 1, 1, 1); +MODULE_DEPEND(ral, wlan_amrr, 1, 1, 1); struct ral_pci_ident { uint16_t vendor; ==== //depot/projects/vap/sys/dev/ral/rt2560.c#21 (text) ==== @@ -55,7 +55,7 @@ #include #include #include -#include +#include #include #include @@ -427,7 +427,10 @@ vap->iv_newstate = rt2560_newstate; vap->iv_update_beacon = rt2560_beacon_update; - ieee80211_rssadapt_init(&rvp->rssadapt, vap, 100 /*ms*/); + ieee80211_amrr_init(&rvp->amrr, vap, + IEEE80211_AMRR_MIN_SUCCESS_THRESHOLD, + IEEE80211_AMRR_MAX_SUCCESS_THRESHOLD, + 500 /* ms */); /* complete setup */ ieee80211_vap_attach(vap, ieee80211_media_change, ieee80211_media_status); @@ -441,7 +444,7 @@ { struct rt2560_vap *rvp = RT2560_VAP(vap); - ieee80211_rssadapt_cleanup(&rvp->rssadapt); + ieee80211_amrr_cleanup(&rvp->amrr); ieee80211_vap_detach(vap); free(rvp, M_80211_VAP); } @@ -777,8 +780,8 @@ { struct ieee80211vap *vap = ni->ni_vap; - ieee80211_rssadapt_node_init(&RT2560_VAP(vap)->rssadapt, - &RT2560_NODE(ni)->rssadapt, ni); + ieee80211_amrr_node_init(&RT2560_VAP(vap)->amrr, + &RT2560_NODE(ni)->amrr, ni); } static int @@ -956,6 +959,8 @@ struct rt2560_tx_data *data; struct rt2560_node *rn; struct mbuf *m; + uint32_t flags; + int retrycnt; bus_dmamap_sync(sc->txq.desc_dmat, sc->txq.desc_map, BUS_DMASYNC_POSTREAD); @@ -964,39 +969,43 @@ desc = &sc->txq.desc[sc->txq.next]; data = &sc->txq.data[sc->txq.next]; - if ((le32toh(desc->flags) & RT2560_TX_BUSY) || - (le32toh(desc->flags) & RT2560_TX_CIPHER_BUSY) || - !(le32toh(desc->flags) & RT2560_TX_VALID)) + flags = le32toh(desc->flags); + if ((flags & RT2560_TX_BUSY) || + (flags & RT2560_TX_CIPHER_BUSY) || + !(flags & RT2560_TX_VALID)) break; rn = (struct rt2560_node *)data->ni; m = data->m; - switch (le32toh(desc->flags) & RT2560_TX_RESULT_MASK) { + switch (flags & RT2560_TX_RESULT_MASK) { case RT2560_TX_SUCCESS: DPRINTFN(sc, 10, "%s\n", "data frame sent successfully"); - if (data->rix != IEEE80211_FIXED_RATE_NONE) { - ieee80211_rssadapt_tx_complete(&rn->rssadapt, - IEEE80211_RSSADAPT_SUCCESS, - m->m_pkthdr.len, data->rssi); - } + if (data->rix != IEEE80211_FIXED_RATE_NONE) + ieee80211_amrr_tx_complete(&rn->amrr, + IEEE80211_AMRR_SUCCESS, 0); ifp->if_opackets++; break; case RT2560_TX_SUCCESS_RETRY: + retrycnt = RT2560_TX_RETRYCNT(flags); + DPRINTFN(sc, 9, "data frame sent after %u retries\n", - (le32toh(desc->flags) >> 5) & 0x7); + retrycnt); + if (data->rix != IEEE80211_FIXED_RATE_NONE) + ieee80211_amrr_tx_complete(&rn->amrr, + IEEE80211_AMRR_SUCCESS, retrycnt); ifp->if_opackets++; break; case RT2560_TX_FAIL_RETRY: - DPRINTFN(sc, 9, "%s\n", - "sending data frame failed (too much retries)"); - if (data->rix != IEEE80211_FIXED_RATE_NONE) { - ieee80211_rssadapt_tx_complete(&rn->rssadapt, - IEEE80211_RSSADAPT_FAILURE, - m->m_pkthdr.len, data->rssi); - } + retrycnt = RT2560_TX_RETRYCNT(flags); + + DPRINTFN(sc, 9, "data frame failed after %d retries\n", + retrycnt); + if (data->rix != IEEE80211_FIXED_RATE_NONE) + ieee80211_amrr_tx_complete(&rn->amrr, + IEEE80211_AMRR_FAILURE, retrycnt); ifp->if_oerrors++; break; @@ -1004,7 +1013,7 @@ case RT2560_TX_FAIL_OTHER: default: device_printf(sc->sc_dev, "sending data frame failed " - "0x%08x\n", le32toh(desc->flags)); + "0x%08x\n", flags); ifp->if_oerrors++; } @@ -1582,7 +1591,7 @@ data->m = m0; data->ni = ni; - /* management frames are not taken into account for rssadapt */ + /* management frames are not taken into account for amrr */ data->rix = IEEE80211_FIXED_RATE_NONE; wh = mtod(m0, struct ieee80211_frame *); @@ -1674,7 +1683,7 @@ data->m = mprot; data->ni = ieee80211_ref_node(ni); - /* ctl frames are not taken into account for rssadapt */ + /* ctl frames are not taken into account for amrr */ data->rix = IEEE80211_FIXED_RATE_NONE; rt2560_setup_tx_desc(sc, desc, flags, mprot->m_pkthdr.len, protrate, 1, @@ -1799,8 +1808,7 @@ } else if (tp->ucastrate != IEEE80211_FIXED_RATE_NONE) { rate = tp->ucastrate; } else { - (void) ieee80211_rssadapt_choose(ni, &RT2560_NODE(ni)->rssadapt, - m0->m_pkthdr.len); + (void) ieee80211_amrr_choose(ni, &RT2560_NODE(ni)->amrr); rate = ni->ni_txrate; } ==== //depot/projects/vap/sys/dev/ral/rt2560reg.h#5 (text) ==== @@ -208,6 +208,8 @@ #define RT2560_TX_CIPHER_TKIP (3 << 29) #define RT2560_TX_CIPHER_AES (4 << 29) +#define RT2560_TX_RETRYCNT(v) (((v) >> 5) & 0x7) + uint32_t physaddr; uint16_t wme; #define RT2560_LOGCWMAX(x) (((x) & 0xf) << 12) ==== //depot/projects/vap/sys/dev/ral/rt2560var.h#13 (text) ==== @@ -95,14 +95,14 @@ struct rt2560_node { struct ieee80211_node ni; - struct ieee80211_rssadapt_node rssadapt; + struct ieee80211_amrr_node amrr; }; #define RT2560_NODE(ni) ((struct rt2560_node *)(ni)) struct rt2560_vap { struct ieee80211vap ral_vap; struct ieee80211_beacon_offsets ral_bo; - struct ieee80211_rssadapt rssadapt; + struct ieee80211_amrr amrr; int (*ral_newstate)(struct ieee80211vap *, enum ieee80211_state, int); ==== //depot/projects/vap/sys/dev/ral/rt2661.c#18 (text) ==== @@ -56,7 +56,7 @@ #include #include #include -#include +#include #include #include @@ -427,7 +427,10 @@ vap->iv_update_beacon = rt2661_beacon_update; #endif - ieee80211_rssadapt_init(&rvp->rssadapt, vap, 100 /*ms*/); + ieee80211_amrr_init(&rvp->amrr, vap, + IEEE80211_AMRR_MIN_SUCCESS_THRESHOLD, + IEEE80211_AMRR_MAX_SUCCESS_THRESHOLD, + 500 /* ms */); /* complete setup */ ieee80211_vap_attach(vap, ieee80211_media_change, ieee80211_media_status); @@ -441,7 +444,7 @@ { struct rt2661_vap *rvp = RT2661_VAP(vap); - ieee80211_rssadapt_cleanup(&rvp->rssadapt); + ieee80211_amrr_cleanup(&rvp->amrr); ieee80211_vap_detach(vap); free(rvp, M_80211_VAP); } @@ -786,8 +789,8 @@ { struct ieee80211vap *vap = ni->ni_vap; - ieee80211_rssadapt_node_init(&RT2661_VAP(vap)->rssadapt, - &RT2661_NODE(ni)->rssadapt, ni); + ieee80211_amrr_node_init(&RT2661_VAP(vap)->amrr, + &RT2661_NODE(ni)->amrr, ni); } static int @@ -935,23 +938,20 @@ DPRINTFN(sc, 10, "data frame sent successfully after " "%d retries\n", retrycnt); - if (retrycnt == 0 && - data->rix != IEEE80211_FIXED_RATE_NONE) { - ieee80211_rssadapt_tx_complete(&rn->rssadapt, - IEEE80211_RSSADAPT_SUCCESS, - m->m_pkthdr.len, data->rssi); - } + if (data->rix != IEEE80211_FIXED_RATE_NONE) + ieee80211_amrr_tx_complete(&rn->amrr, + IEEE80211_AMRR_SUCCESS, retrycnt); ifp->if_opackets++; break; case RT2661_TX_RETRY_FAIL: + retrycnt = RT2661_TX_RETRYCNT(val); + DPRINTFN(sc, 9, "%s\n", "sending data frame failed (too much retries)"); - if (data->rix != IEEE80211_FIXED_RATE_NONE) { - ieee80211_rssadapt_tx_complete(&rn->rssadapt, - IEEE80211_RSSADAPT_FAILURE, - m->m_pkthdr.len, data->rssi); - } + if (data->rix != IEEE80211_FIXED_RATE_NONE) + ieee80211_amrr_tx_complete(&rn->amrr, + IEEE80211_AMRR_FAILURE, retrycnt); ifp->if_oerrors++; break; @@ -1356,7 +1356,7 @@ data->m = m0; data->ni = ni; - /* management frames are not taken into account for rssadapt */ + /* management frames are not taken into account for amrr */ data->rix = IEEE80211_FIXED_RATE_NONE; wh = mtod(m0, struct ieee80211_frame *); @@ -1448,7 +1448,7 @@ data->m = mprot; data->ni = ieee80211_ref_node(ni); - /* ctl frames are not taken into account for rssadapt */ + /* ctl frames are not taken into account for amrr */ data->rix = IEEE80211_FIXED_RATE_NONE; rt2661_setup_tx_desc(sc, desc, flags, 0, mprot->m_pkthdr.len, @@ -1493,8 +1493,7 @@ } else if (tp->ucastrate != IEEE80211_FIXED_RATE_NONE) { rate = tp->ucastrate; } else { - (void) ieee80211_rssadapt_choose(ni, &RT2661_NODE(ni)->rssadapt, - m0->m_pkthdr.len); + (void) ieee80211_amrr_choose(ni, &RT2661_NODE(ni)->amrr); rate = ni->ni_txrate; } rate &= IEEE80211_RATE_VAL; ==== //depot/projects/vap/sys/dev/ral/rt2661var.h#10 (text) ==== @@ -88,13 +88,13 @@ struct rt2661_node { struct ieee80211_node ni; - struct ieee80211_rssadapt_node rssadapt; + struct ieee80211_amrr_node amrr; }; #define RT2661_NODE(ni) ((struct rt2661_node *)(ni)) struct rt2661_vap { struct ieee80211vap ral_vap; - struct ieee80211_rssadapt rssadapt; + struct ieee80211_amrr amrr; int (*ral_newstate)(struct ieee80211vap *, enum ieee80211_state, int);