Changeset 18054 for branches/8.09


Ignore:
Timestamp:
2009-10-17T07:02:13+02:00 (7 years ago)
Author:
nbd
Message:

madwifi: merge fixes from trunk

Location:
branches/8.09/package/madwifi/patches
Files:
2 added
8 edited

Legend:

Unmodified
Added
Removed
  • branches/8.09/package/madwifi/patches/421-channel_handling.patch

    r17696 r18054  
    854854        /* Initialize candidate channels to all available */ 
    855855        memcpy(ic->ic_chan_active, ic->ic_chan_avail, 
    856 @@ -311,11 +296,58 @@ ieee80211_ifattach(struct ieee80211com * 
     856@@ -311,11 +296,59 @@ ieee80211_ifattach(struct ieee80211com * 
    857857         * When 11g is supported, force the rate set to 
    858858         * include basic rates suitable for a mixed b/g bss. 
     
    867867+               return; 
    868868+ 
     869+       ifmedia_removeall(&ic->ic_media); 
    869870+       ieee80211_media_setup(ic, &ic->ic_media, ic->ic_caps, NULL, NULL); 
    870871+       ieee80211com_media_status(ic->ic_dev, &imr); 
     
    914915        ic->ic_bsschan = IEEE80211_CHAN_ANYC; 
    915916        /* Arbitrarily pick the first channel */ 
    916 @@ -327,6 +359,7 @@ ieee80211_ifattach(struct ieee80211com * 
     917@@ -327,6 +360,7 @@ ieee80211_ifattach(struct ieee80211com * 
    917918        /* Enable WME by default, if we're capable. */ 
    918919        if (ic->ic_caps & IEEE80211_C_WME) 
     
    922923  
    923924        /* Store default beacon interval, as nec. */ 
    924 @@ -763,7 +796,8 @@ ieee80211_media_setup(struct ieee80211co 
     925@@ -763,7 +797,8 @@ ieee80211_media_setup(struct ieee80211co 
    925926        struct ieee80211_rateset allrates; 
    926927  
     
    932933        memset(&allrates, 0, sizeof(allrates)); 
    933934  
    934 @@ -793,7 +827,7 @@ ieee80211_media_setup(struct ieee80211co 
     935@@ -793,7 +828,7 @@ ieee80211_media_setup(struct ieee80211co 
    935936                        ADD(media, IFM_AUTO, mopt | IFM_IEEE80211_WDS); 
    936937                if (mode == IEEE80211_MODE_AUTO) 
     
    941942                for (i = 0; i < rs->rs_nrates; i++) { 
    942943                        rate = rs->rs_rates[i]; 
    943 @@ -1207,7 +1241,7 @@ ieee80211_announce(struct ieee80211com * 
     944@@ -1207,7 +1242,7 @@ ieee80211_announce(struct ieee80211com * 
    944945                if ((ic->ic_modecaps & (1 << mode)) == 0) 
    945946                        continue; 
     
    950951                        rate = rs->rs_rates[i]; 
    951952                        mword = ieee80211_rate2media(ic, rate, mode); 
    952 @@ -1417,7 +1451,7 @@ ieee80211com_media_change(struct net_dev 
     953@@ -1417,7 +1452,7 @@ ieee80211com_media_change(struct net_dev 
    953954                         * now so drivers have a consistent state. 
    954955                         */ 
     
    959960                error = -ENETRESET; 
    960961        } 
    961 @@ -1435,7 +1469,7 @@ findrate(struct ieee80211com *ic, enum i 
     962@@ -1435,7 +1470,7 @@ findrate(struct ieee80211com *ic, enum i 
    962963 { 
    963964 #define        IEEERATE(_ic,_m,_i) \ 
     
    968969                if (IEEERATE(ic, mode, i) == rate) 
    969970                        return i; 
    970 @@ -1877,11 +1911,6 @@ ieee80211_build_countryie(struct ieee802 
     971@@ -1877,11 +1912,6 @@ ieee80211_build_countryie(struct ieee802 
    971972                        if (ieee80211_chan2mode(c) != curmode_noturbo) 
    972973                                continue; 
     
    980981                                (*cur_runlen)++; 
    981982                                *cur_pow = c->ic_maxregpower; 
    982 @@ -1915,7 +1944,7 @@ void 
     983@@ -1915,7 +1945,7 @@ void 
    983984 ieee80211_build_sc_ie(struct ieee80211com *ic) 
    984985 { 
  • branches/8.09/package/madwifi/patches/430-use_netdev_priv.patch

    r17696 r18054  
    10031003--- a/net80211/ieee80211.c 
    10041004+++ b/net80211/ieee80211.c 
    1005 @@ -457,7 +457,7 @@ ieee80211_vap_setup(struct ieee80211com  
     1005@@ -458,7 +458,7 @@ ieee80211_vap_setup(struct ieee80211com  
    10061006 #define        IEEE80211_C_OPMODE \ 
    10071007        (IEEE80211_C_IBSS | IEEE80211_C_HOSTAP | IEEE80211_C_AHDEMO | \ 
     
    10121012        int err; 
    10131013  
    1014 @@ -1354,7 +1354,7 @@ media_status(enum ieee80211_opmode opmod 
     1014@@ -1355,7 +1355,7 @@ media_status(enum ieee80211_opmode opmod 
    10151015 static void 
    10161016 ieee80211com_media_status(struct net_device *dev, struct ifmediareq *imr) 
     
    10211021        imr->ifm_status = IFM_AVALID; 
    10221022        if (!TAILQ_EMPTY(&ic->ic_vaps)) 
    1023 @@ -1406,7 +1406,7 @@ media2mode(const struct ifmedia_entry *i 
     1023@@ -1407,7 +1407,7 @@ media2mode(const struct ifmedia_entry *i 
    10241024 static int 
    10251025 ieee80211com_media_change(struct net_device *dev) 
     
    10301030        struct ifmedia_entry *ime = ic->ic_media.ifm_cur; 
    10311031        enum ieee80211_phymode newphymode; 
    1032 @@ -1510,7 +1510,7 @@ checkrate(struct ieee80211com *ic, enum  
     1032@@ -1511,7 +1511,7 @@ checkrate(struct ieee80211com *ic, enum  
    10331033 int 
    10341034 ieee80211_media_change(struct net_device *dev) 
     
    10391039        struct ifmedia_entry *ime = vap->iv_media.ifm_cur; 
    10401040        enum ieee80211_phymode newmode; 
    1041 @@ -1544,7 +1544,7 @@ EXPORT_SYMBOL(ieee80211_media_change); 
     1041@@ -1545,7 +1545,7 @@ EXPORT_SYMBOL(ieee80211_media_change); 
    10421042 void 
    10431043 ieee80211_media_status(struct net_device *dev, struct ifmediareq *imr) 
     
    10481048        enum ieee80211_phymode mode; 
    10491049        struct ieee80211_rateset *rs; 
    1050 @@ -1750,7 +1750,7 @@ EXPORT_SYMBOL(ieee80211_media2rate); 
     1050@@ -1751,7 +1751,7 @@ EXPORT_SYMBOL(ieee80211_media2rate); 
    10511051 static struct net_device_stats * 
    10521052 ieee80211_getstats(struct net_device *dev) 
     
    10571057  
    10581058        /* XXX: Total guess as to what to count where */ 
    1059 @@ -1789,7 +1789,7 @@ ieee80211_change_mtu(struct net_device * 
     1059@@ -1790,7 +1790,7 @@ ieee80211_change_mtu(struct net_device * 
    10601060 static void 
    10611061 ieee80211_set_multicast_list(struct net_device *dev) 
  • branches/8.09/package/madwifi/patches/432-netdev_ops.patch

    r17696 r18054  
    7070--- a/net80211/ieee80211.c 
    7171+++ b/net80211/ieee80211.c 
    72 @@ -450,6 +450,18 @@ ieee80211_ifdetach(struct ieee80211com * 
     72@@ -451,6 +451,18 @@ ieee80211_ifdetach(struct ieee80211com * 
    7373 } 
    7474 EXPORT_SYMBOL(ieee80211_ifdetach); 
     
    8989 ieee80211_vap_setup(struct ieee80211com *ic, struct net_device *dev, 
    9090        const char *name, int opmode, int flags, struct ieee80211vap *master) 
    91 @@ -470,16 +482,21 @@ ieee80211_vap_setup(struct ieee80211com  
     91@@ -471,16 +483,21 @@ ieee80211_vap_setup(struct ieee80211com  
    9292                } else 
    9393                        strncpy(dev->name, name, sizeof(dev->name)); 
     
    111111        dev->hard_header_len = parent->hard_header_len; 
    112112        /* 
    113 @@ -1823,7 +1840,11 @@ ieee80211_set_multicast_list(struct net_ 
     113@@ -1824,7 +1841,11 @@ ieee80211_set_multicast_list(struct net_ 
    114114        IEEE80211_UNLOCK_IRQ(ic); 
    115115  
  • branches/8.09/package/madwifi/patches/446-single_module.patch

    r17696 r18054  
    352352 #include <linux/skbuff.h> 
    353353 #include <linux/netdevice.h> 
    354 @@ -2014,3 +2015,65 @@ ieee80211_build_sc_ie(struct ieee80211co 
     354@@ -2015,3 +2016,65 @@ ieee80211_build_sc_ie(struct ieee80211co 
    355355 int ath_debug_global = 0; 
    356356 EXPORT_SYMBOL(ath_debug_global); 
  • branches/8.09/package/madwifi/patches/447-sta_reconnect.patch

    r17696 r18054  
    1616--- a/net80211/ieee80211_proto.c 
    1717+++ b/net80211/ieee80211_proto.c 
    18 @@ -1512,14 +1512,13 @@ __ieee80211_newstate(struct ieee80211vap 
    19                         if (arg != 0) 
    20                                 ieee80211_scan_assoc_fail(ic, 
    21                                         vap->iv_bss->ni_macaddr, arg); 
    22 +                       ieee80211_node_leave(vap->iv_bss); 
    23                         if (ic->ic_roaming == IEEE80211_ROAMING_AUTO) 
    24                                 ieee80211_check_scan(vap, 
    25                                         IEEE80211_SCAN_ACTIVE, 
    26                                         IEEE80211_SCAN_FOREVER, 
    27                                         vap->iv_des_nssid, vap->iv_des_ssid, 
    28                                         NULL); 
    29 -                       else 
    30 -                               ieee80211_node_leave(vap->iv_bss); 
     18@@ -1602,7 +1602,6 @@ __ieee80211_newstate(struct ieee80211vap 
     19                                IEEE80211_FC0_SUBTYPE_ASSOC_REQ, 0); 
    3120                        break; 
    32                 case IEEE80211_S_RUN:           /* beacon miss */ 
    33                         if (vap->iv_opmode == IEEE80211_M_STA) { 
     21                case IEEE80211_S_RUN: 
     22-                       ieee80211_node_leave(ni); 
     23                        if (ic->ic_roaming == IEEE80211_ROAMING_AUTO) { 
     24                                /* NB: caller specifies ASSOC/REASSOC by arg */ 
     25                                IEEE80211_SEND_MGMT(ni, arg ? 
  • branches/8.09/package/madwifi/patches/448-beacon_handling_fixes.patch

    r17696 r18054  
    11--- a/ath/if_ath.c 
    22+++ b/ath/if_ath.c 
    3 @@ -512,7 +512,7 @@ MODULE_PARM_DESC(ieee80211_debug, "Load- 
     3@@ -160,7 +160,7 @@ static int ath_check_beacon_done(struct  
     4 static void ath_beacon_send(struct ath_softc *, int *, uint64_t hw_tsf); 
     5 static void ath_beacon_return(struct ath_softc *, struct ath_buf *); 
     6 static void ath_beacon_free(struct ath_softc *); 
     7-static void ath_beacon_config(struct ath_softc *, struct ieee80211vap *); 
     8+static void ath_beacon_config(struct ath_softc *, struct ieee80211vap *, int); 
     9 static void ath_hw_beacon_stop(struct ath_softc *sc); 
     10 static int ath_desc_alloc(struct ath_softc *); 
     11 static void ath_desc_free(struct ath_softc *); 
     12@@ -387,13 +387,11 @@ static void ath_set_timing(struct ath_so 
     13 /* calibrate every 30 secs in steady state but check every second at first. */ 
     14 static int ath_calinterval = ATH_SHORT_CALINTERVAL; 
     15 static int ath_xchanmode = AH_TRUE;            /* enable extended channels */ 
     16-static int ath_maxvaps = ATH_MAXVAPS_DEFAULT;   /* set default maximum vaps */ 
     17 static int bstuck_thresh = BSTUCK_THRESH;       /* Stuck beacon count required for reset */ 
     18 static char *autocreate = NULL; 
     19 static char *ratectl = DEF_RATE_CTL; 
     20 static int rfkill = 0; 
     21 static int tpc = 1; 
     22-static int maxvaps = -1; 
     23 static int xchanmode = -1; 
     24 #include "ath_wprobe.c" 
     25 static int beacon_cal = 1; 
     26@@ -432,7 +430,6 @@ static struct notifier_block ath_event_b 
     27  
     28 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,52)) 
     29 MODULE_PARM(beacon_cal, "i"); 
     30-MODULE_PARM(maxvaps, "i"); 
     31 MODULE_PARM(xchanmode, "i"); 
     32 MODULE_PARM(rfkill, "i"); 
     33 #ifdef ATH_CAP_TPC 
     34@@ -444,7 +441,6 @@ MODULE_PARM(ratectl, "s"); 
     35 #else 
     36 #include <linux/moduleparam.h> 
     37 module_param(beacon_cal, int, 0600); 
     38-module_param(maxvaps, int, 0600); 
     39 module_param(xchanmode, int, 0600); 
     40 module_param(rfkill, int, 0600); 
     41 #ifdef ATH_CAP_TPC 
     42@@ -454,7 +450,6 @@ module_param(bstuck_thresh, int, 0600); 
     43 module_param(autocreate, charp, 0600); 
     44 module_param(ratectl, charp, 0600); 
     45 #endif 
     46-MODULE_PARM_DESC(maxvaps, "Maximum VAPs"); 
     47 MODULE_PARM_DESC(xchanmode, "Enable/disable extended channel mode"); 
     48 MODULE_PARM_DESC(rfkill, "Enable/disable RFKILL capability"); 
     49 #ifdef ATH_CAP_TPC 
     50@@ -512,7 +507,7 @@ MODULE_PARM_DESC(ieee80211_debug, "Load- 
    451  * and use the higher bits as the index of the VAP. 
    552  */ 
    653 #define ATH_SET_VAP_BSSID_MASK(bssid_mask)                             \ 
    754-       ((bssid_mask)[0] &= ~(((ath_maxvaps-1) << 2) | 0x02)) 
    8 +       ((bssid_mask)[0] &= ~(((ATH_MAXVAPS_MAX-1) << 2) | 0x02)) 
     55+       ((bssid_mask)[0] &= ~(((ATH_MAXVAPS_BCN-1) << 2) | 0x02)) 
    956 #define ATH_GET_VAP_ID(bssid)                   ((bssid)[0] >> 2) 
    1057 #define ATH_SET_VAP_BSSID(bssid, id)                                   \ 
    1158                do {                                                    \ 
    12 @@ -604,8 +604,8 @@ ath_attach(u_int16_t devid, struct net_d 
     59@@ -604,8 +599,8 @@ ath_attach(u_int16_t devid, struct net_d 
    1360  
    1461        /* Allocate space for dynamically determined maximum VAP count */ 
     
    1663-               kmalloc(ath_maxvaps * sizeof(struct ieee80211vap*), GFP_KERNEL); 
    1764-       memset(sc->sc_bslot, 0, ath_maxvaps * sizeof(struct ieee80211vap*)); 
    18 +               kmalloc(ATH_MAXVAPS_MAX * sizeof(struct ieee80211vap*), GFP_KERNEL); 
    19 +       memset(sc->sc_bslot, 0, ATH_MAXVAPS_MAX * sizeof(struct ieee80211vap*)); 
     65+               kmalloc(ATH_MAXVAPS_BCN * sizeof(struct ieee80211vap*), GFP_KERNEL); 
     66+       memset(sc->sc_bslot, 0, ATH_MAXVAPS_BCN * sizeof(struct ieee80211vap*)); 
    2067  
    2168        /* 
    2269         * Cache line size is used to size and align various 
    23 @@ -1349,11 +1349,8 @@ ath_vap_create(struct ieee80211com *ic,  
     70@@ -694,13 +689,6 @@ ath_attach(u_int16_t devid, struct net_d 
     71        for (i = 0; i < sc->sc_keymax; i++) 
     72                ath_hal_keyreset(ah, i); 
     73  
     74-       if (maxvaps != -1) { 
     75-               ath_maxvaps = maxvaps; 
     76-               if (ath_maxvaps < ATH_MAXVAPS_MIN) 
     77-                       ath_maxvaps = ATH_MAXVAPS_MIN; 
     78-               else if (ath_maxvaps > ATH_MAXVAPS_MAX) 
     79-                       ath_maxvaps = ATH_MAXVAPS_MAX; 
     80-       } 
     81        if (xchanmode != -1) 
     82                ath_xchanmode = xchanmode; 
     83        error = ath_getchannels(dev); 
     84@@ -1349,12 +1337,6 @@ ath_vap_create(struct ieee80211com *ic,  
    2485                return NULL; 
    2586        } 
     
    3091-               return NULL; 
    3192-       } 
    32 +       if ((sc->sc_nvaps >= ath_maxvaps) && (ath_maxvaps < ATH_MAXVAPS_MAX)) 
    33 +               ath_maxvaps++; 
    34   
     93- 
    3594        dev = alloc_etherdev(sizeof(struct ath_vap) + sc->sc_rc->arc_vap_space); 
    3695        if (dev == NULL) { 
    37 @@ -1451,11 +1448,11 @@ ath_vap_create(struct ieee80211com *ic,  
     96                /* XXX msg */ 
     97@@ -1424,7 +1406,7 @@ ath_vap_create(struct ieee80211com *ic,  
     98                TAILQ_FOREACH(v, &ic->ic_vaps, iv_next) 
     99                        id_mask |= (1 << ATH_GET_VAP_ID(v->iv_myaddr)); 
     100  
     101-               for (id = 0; id < ath_maxvaps; id++) { 
     102+               for (id = 0; id < ATH_MAXVAPS_BCN; id++) { 
     103                        /* get the first available slot */ 
     104                        if ((id_mask & (1 << id)) == 0) { 
     105                                ATH_SET_VAP_BSSID(vap->iv_myaddr, id); 
     106@@ -1451,11 +1433,11 @@ ath_vap_create(struct ieee80211com *ic,  
    38107                /* Assign the VAP to a beacon xmit slot.  As 
    39108                 * above, this cannot fail to find one. */ 
    40109                avp->av_bslot = 0; 
    41110-               for (slot = 0; slot < ath_maxvaps; slot++) 
    42 +               for (slot = 0; slot < ATH_MAXVAPS_MAX; slot++) 
     111+               for (slot = 0; slot < ATH_MAXVAPS_BCN; slot++) 
    43112                        if (sc->sc_bslot[slot] == NULL) { 
    44113                                /* XXX: Hack, space out slots to better 
    45114                                 * deal with misses. */ 
    46115-                               if (slot + 1 < ath_maxvaps && 
    47 +                               if (slot + 1 < ATH_MAXVAPS_DEFAULT && 
     116+                               if (slot + 1 < ATH_MAXVAPS_BCN && 
    48117                                    sc->sc_bslot[slot+1] == NULL) { 
    49118                                        avp->av_bslot = slot + 1; 
    50119                                        break; 
    51 @@ -1463,11 +1460,16 @@ ath_vap_create(struct ieee80211com *ic,  
     120@@ -1463,8 +1445,11 @@ ath_vap_create(struct ieee80211com *ic,  
    52121                                avp->av_bslot = slot; 
    53122                                /* NB: keep looking for a double slot */ 
     
    55124-               KASSERT(sc->sc_bslot[avp->av_bslot] == NULL, 
    56125-                       ("beacon slot %u not empty?", avp->av_bslot)); 
    57 + 
    58 +               /* No beacon slot found? */ 
    59126+               if (sc->sc_bslot[avp->av_bslot]) { 
    60127+                       free_netdev(dev); 
    61128+                       return NULL; 
    62129+               } 
     130+ 
    63131                sc->sc_bslot[avp->av_bslot] = vap; 
    64132                sc->sc_nbcnvaps++; 
    65133  
    66 +#if 0 
    67                 if ((opmode == IEEE80211_M_HOSTAP) && (sc->sc_hastsfadd)) { 
    68                         /* 
    69                          * Multiple VAPs are to transmit beacons and we 
    70 @@ -1485,6 +1487,9 @@ ath_vap_create(struct ieee80211com *ic,  
    71                                 sc->sc_stagbeacons = 1; 
    72                         } 
     134@@ -1475,15 +1460,7 @@ ath_vap_create(struct ieee80211com *ic,  
     135                         * of staggered beacons. 
     136                         */ 
     137                        /* XXX check for beacon interval too small */ 
     138-                       if (ath_maxvaps > 4) { 
     139-                               DPRINTF(sc, ATH_DEBUG_BEACON,  
     140-                                               "Staggered beacons are not " 
     141-                                               "possible with maxvaps set " 
     142-                                               "to %d.\n", ath_maxvaps); 
     143-                               sc->sc_stagbeacons = 0; 
     144-                       } else { 
     145-                               sc->sc_stagbeacons = 1; 
     146-                       } 
     147+                       sc->sc_stagbeacons = 1; 
    73148                } 
    74 +#else 
    75 +               sc->sc_stagbeacons = sc->sc_hastsfadd; 
    76 +#endif 
    77149                DPRINTF(sc, ATH_DEBUG_BEACON, "sc->sc_stagbeacons %sabled\n",  
    78150                                (sc->sc_stagbeacons ? "en" : "dis")); 
     151@@ -1553,7 +1530,7 @@ ath_vap_create(struct ieee80211com *ic,  
     152                if (ath_startrecv(sc) != 0)     /* restart recv */ 
     153                        EPRINTF(sc, "Unable to start receive logic.\n"); 
     154                if (sc->sc_beacons) 
     155-                       ath_beacon_config(sc, NULL);    /* restart beacons */ 
     156+                       ath_beacon_config(sc, NULL, 0); /* restart beacons */ 
     157                ath_hal_intrset(ah, sc->sc_imask); 
    79158        } 
    80 @@ -4968,7 +4973,7 @@ ath_beacon_alloc_internal(struct ath_sof 
     159  
     160@@ -1681,7 +1658,7 @@ ath_vap_delete(struct ieee80211vap *vap) 
     161                if (ath_startrecv(sc) != 0)             /* restart recv. */ 
     162                        EPRINTF(sc, "Unable to start receive logic.\n"); 
     163                if (sc->sc_beacons) 
     164-                       ath_beacon_config(sc, NULL);    /* restart beacons */ 
     165+                       ath_beacon_config(sc, NULL, 0); /* restart beacons */ 
     166                ath_hal_intrset(ah, sc->sc_imask); 
     167        } 
     168 } 
     169@@ -3066,7 +3043,7 @@ ath_reset(struct net_device *dev) 
     170         */ 
     171        ath_chan_change(sc, c); 
     172        if (sc->sc_beacons) 
     173-               ath_beacon_config(sc, NULL);    /* restart beacons */ 
     174+               ath_beacon_config(sc, NULL, 1); /* restart beacons */ 
     175        ath_hal_intrset(ah, sc->sc_imask); 
     176        ath_set_ack_bitrate(sc, sc->sc_ackrate); 
     177        netif_wake_queue(dev);          /* restart xmit */ 
     178@@ -4763,7 +4740,7 @@ ath_check_beacon_done(struct ath_softc * 
     179        /* 
     180         * check if the last beacon went out with the mode change flag set. 
     181         */ 
     182-       for (slot = 0; slot < ath_maxvaps; slot++) { 
     183+       for (slot = 0; slot < ATH_MAXVAPS_BCN; slot++) { 
     184                if (sc->sc_bslot[slot]) { 
     185                        vap = sc->sc_bslot[slot]; 
     186                        break; 
     187@@ -4968,7 +4945,7 @@ ath_beacon_alloc_internal(struct ath_sof 
    81188                 * has a timestamp in one beacon interval while the 
    82189                 * others get a timestamp aligned to the next interval. 
    83190                 */ 
    84191-               tuadjust = (ni->ni_intval * (ath_maxvaps - avp->av_bslot)) / ath_maxvaps; 
    85 +               tuadjust = (ni->ni_intval * (ATH_MAXVAPS_DEFAULT - avp->av_bslot)) / ATH_MAXVAPS_DEFAULT; 
     192+               tuadjust = (ni->ni_intval * (ATH_MAXVAPS_BCN - avp->av_bslot)) / ATH_MAXVAPS_BCN; 
    86193                tsfadjust = cpu_to_le64(tuadjust << 10);        /* TU->TSF */ 
    87194  
    88195                DPRINTF(sc, ATH_DEBUG_BEACON, 
    89 @@ -5358,21 +5363,40 @@ ath_beacon_send(struct ath_softc *sc, in 
    90          */ 
    91         if (sc->sc_stagbeacons) {               /* staggered beacons */ 
    92                 struct ieee80211com *ic = &sc->sc_ic; 
    93 +               u_int32_t *bflink = NULL; 
     196@@ -5361,8 +5338,8 @@ ath_beacon_send(struct ath_softc *sc, in 
    94197                u_int32_t tsftu; 
    95198  
     
    97200-               slot = ((tsftu % ic->ic_lintval) * ath_maxvaps) / ic->ic_lintval; 
    98201-               vap = sc->sc_bslot[(slot + 1) % ath_maxvaps]; 
    99 +               slot = ((tsftu % ic->ic_lintval) * ATH_MAXVAPS_DEFAULT) / ic->ic_lintval; 
     202+               slot = ((tsftu % ic->ic_lintval) * ATH_MAXVAPS_BCN) / ic->ic_lintval; 
     203+               vap = sc->sc_bslot[(slot + 1) % ATH_MAXVAPS_BCN]; 
    100204                DPRINTF(sc, ATH_DEBUG_BEACON_PROC, 
    101205                        "Slot %d [tsf %llu tsftu %llu intval %u] vap %p\n", 
    102206                        slot, (unsigned long long)hw_tsf,  
    103                         (unsigned long long)tsftu, ic->ic_lintval, vap); 
    104                 bfaddr = 0; 
    105 -               if (vap != NULL) { 
    106 +               while (slot < ATH_MAXVAPS_MAX) { 
    107 +                       vap = sc->sc_bslot[slot]; 
    108 +                       if (vap == NULL) 
    109 +                               goto next; 
    110 + 
    111                         bf = ath_beacon_generate(sc, vap, needmark); 
    112 -                       if (bf != NULL) 
    113 +                       if (bf == NULL) 
    114 +                               break; 
    115 + 
    116 +                       if (bflink != NULL) 
    117 +#ifdef AH_NEED_DESC_SWAP 
    118 +                               *bflink = cpu_to_le32(bf->bf_daddr); 
    119 +#else 
    120 +                               *bflink = bf->bf_daddr; 
    121 +#endif 
    122 +                       else 
    123                                 bfaddr = bf->bf_daddr; 
    124 + 
    125 +                       bflink = &bf->bf_desc->ds_link; 
    126 +next: 
    127 +                       slot += ATH_MAXVAPS_DEFAULT; 
    128                 } 
    129 +               if (bflink != NULL) 
    130 +                       *bflink = 0;            /* link of last frame */ 
    131         } else {                                /* burst'd beacons */ 
     207@@ -5377,7 +5354,7 @@ ath_beacon_send(struct ath_softc *sc, in 
    132208                u_int32_t *bflink = NULL; 
    133209  
    134 @@ -5567,7 +5591,7 @@ ath_beacon_config(struct ath_softc *sc,  
     210                /* XXX: rotate/randomize order? */ 
     211-               for (slot = 0; slot < ath_maxvaps; slot++) { 
     212+               for (slot = 0; slot < ATH_MAXVAPS_BCN; slot++) { 
     213                        if ((vap = sc->sc_bslot[slot]) != NULL) { 
     214                                if ((bf = ath_beacon_generate( 
     215                                                sc, vap,  
     216@@ -5418,7 +5395,7 @@ ath_beacon_send(struct ath_softc *sc, in 
     217         *     again.  If we miss a beacon for that slot then we'll be 
     218         *     slow to transition but we'll be sure at least one beacon 
     219         *     interval has passed.  When bursting slot is always left 
     220-        *     set to ath_maxvaps so this check is a no-op. 
     221+        *     set to ATH_MAXVAPS_BCN so this check is a no-op. 
     222         */ 
     223        /* XXX locking */ 
     224        if (sc->sc_updateslot == UPDATE) { 
     225@@ -5526,7 +5503,7 @@ ath_beacon_free(struct ath_softc *sc) 
     226  * (2^(32 + 10 - 1) - 1)us is a really long time. 
     227  */ 
     228 static void 
     229-ath_beacon_config(struct ath_softc *sc, struct ieee80211vap *vap) 
     230+ath_beacon_config(struct ath_softc *sc, struct ieee80211vap *vap, int reset) 
     231 { 
     232        struct ieee80211com *ic = &sc->sc_ic; 
     233        struct ath_hal *ah = sc->sc_ah; 
     234@@ -5553,7 +5530,7 @@ ath_beacon_config(struct ath_softc *sc,  
     235        /* We should reset hw TSF only once, so we increment 
     236         * ni_tstamp.tsf to avoid resetting the hw TSF multiple 
     237         * times */ 
     238-       if (tsf == 0) { 
     239+       if (tsf == 0 || reset) { 
     240                reset_tsf = 1; 
     241                ni->ni_tstamp.tsf = cpu_to_le64(1); 
     242        } 
     243@@ -5567,7 +5544,7 @@ ath_beacon_config(struct ath_softc *sc,  
    135244                /* NB: the beacon interval is kept internally in TUs */ 
    136245                intval = ic->ic_lintval & HAL_BEACON_PERIOD; 
    137246                if (sc->sc_stagbeacons) 
    138247-                       intval /= ath_maxvaps;  /* for staggered beacons */ 
    139 +                       intval /= ATH_MAXVAPS_DEFAULT;  /* for staggered beacons */ 
     248+                       intval /= ATH_MAXVAPS_BCN;      /* for staggered beacons */ 
    140249                if ((sc->sc_nostabeacons) && 
    141250                    (vap->iv_opmode == IEEE80211_M_HOSTAP)) 
    142251                        reset_tsf = 1; 
    143 @@ -5889,7 +5913,7 @@ ath_desc_alloc(struct ath_softc *sc) 
     252@@ -5583,31 +5560,24 @@ ath_beacon_config(struct ath_softc *sc,  
     253                 * time */ 
     254                nexttbtt = intval; 
     255        } else if (intval) {    /* NB: can be 0 for monitor mode */ 
     256-               if (tsf == 1) { 
     257-                       /* We have not received any beacons or probe 
     258-                        * responses. Since a beacon should be sent 
     259-                        * every 'intval' ms, we compute the next 
     260-                        * beacon timestamp using the hardware TSF. We 
     261-                        * ensure that it is at least FUDGE TUs ahead 
     262-                        * of the current TSF. Otherwise, we use the 
     263-                        * next beacon timestamp again */ 
     264-                       nexttbtt = roundup(hw_tsftu + FUDGE, intval); 
     265-               }  
     266-               else if (ic->ic_opmode == IEEE80211_M_IBSS) { 
     267-                       if (tsf > hw_tsf) { 
     268-                               /* We received a beacon, but the HW TSF has 
     269-                                * not been updated (otherwise hw_tsf > tsf) 
     270-                                * We cannot use the hardware TSF, so we 
     271-                                * wait to synchronize beacons again. */ 
     272-                               sc->sc_syncbeacon = 1; 
     273-                               goto ath_beacon_config_debug; 
     274-                       } else { 
     275-                               /* Normal case: we received a beacon to which 
     276-                                * we have synchronized. Make sure that nexttbtt 
     277-                                * is at least FUDGE TU ahead of hw_tsf */ 
     278-                               nexttbtt = tsftu + roundup(hw_tsftu + FUDGE -  
     279-                                               tsftu, intval); 
     280-                       } 
     281+               if ((tsf > hw_tsf) && (ic->ic_opmode == IEEE80211_M_IBSS)) { 
     282+                       /* We received a beacon, but the HW TSF has 
     283+                        * not been updated (otherwise hw_tsf > tsf) 
     284+                        * We cannot use the hardware TSF, so we 
     285+                        * wait to synchronize beacons again. */ 
     286+                       sc->sc_syncbeacon = 1; 
     287+                       goto ath_beacon_config_debug; 
     288+               } else if ((tsftu + FUDGE) > hw_tsftu) { 
     289+                       if (tsftu > hw_tsftu + 2 * intval) 
     290+                               nexttbtt = roundup(hw_tsftu + FUDGE, intval); 
     291+                       else 
     292+                               nexttbtt = tsftu; 
     293+               } else { 
     294+                       /* Normal case: we received a beacon to which 
     295+                        * we have synchronized. Make sure that nexttbtt 
     296+                        * is at least FUDGE TU ahead of hw_tsf */ 
     297+                       nexttbtt = tsftu + roundup(hw_tsftu + FUDGE - 
     298+                                       tsftu, intval); 
     299                } 
     300        } 
     301  
     302@@ -5730,9 +5700,6 @@ ath_beacon_config(struct ath_softc *sc,  
     303                ath_beacon_dturbo_config(vap, intval & 
     304                                ~(HAL_BEACON_RESET_TSF | HAL_BEACON_ENA)); 
     305 #endif 
     306-               if ((nexttbtt & HAL_BEACON_PERIOD) - (ath_hal_gettsf32(ah) >> 10) 
     307-                               <= ath_hal_sw_beacon_response_time) 
     308-                       nexttbtt += intval; 
     309                sc->sc_nexttbtt = nexttbtt; 
     310  
     311                /* stop beacons before reconfiguring the timers to avoid race 
     312@@ -5889,7 +5856,7 @@ ath_desc_alloc(struct ath_softc *sc) 
    144313  
    145314        /* XXX allocate beacon state together with VAP */ 
    146315        error = ath_descdma_setup(sc, &sc->sc_bdma, &sc->sc_bbuf, 
    147316-                       "beacon", ath_maxvaps, 1); 
    148 +                       "beacon", ATH_MAXVAPS_MAX, 1); 
     317+                       "beacon", ATH_MAXVAPS_BCN, 1); 
    149318        if (error != 0) { 
    150319                ath_descdma_cleanup(sc, &sc->sc_txdma, &sc->sc_txbuf, 
    151320                        BUS_DMA_TODEVICE); 
     321@@ -6680,7 +6647,7 @@ ath_recv_mgmt(struct ieee80211vap * vap, 
     322                        /* Resync beacon timers using the tsf of the 
     323                         * beacon frame we just received. */ 
     324                        vap->iv_flags_ext &= ~IEEE80211_FEXT_APPIE_UPDATE; 
     325-                       ath_beacon_config(sc, vap); 
     326+                       ath_beacon_config(sc, vap, 0); 
     327                        DPRINTF(sc, ATH_DEBUG_BEACON,  
     328                                "Updated beacon timers\n"); 
     329                } 
     330@@ -9359,7 +9326,7 @@ ath_chan_set(struct ath_softc *sc, struc 
     331                 * HW seems to turn off beacons during turbo mode switch. 
     332                 */ 
     333                if (sc->sc_beacons && !sc->sc_dfs_cac) 
     334-                       ath_beacon_config(sc, NULL); 
     335+                       ath_beacon_config(sc, NULL, 0); 
     336                /* 
     337                 * Re-enable interrupts. 
     338                 */ 
     339@@ -9813,7 +9780,7 @@ ath_newstate(struct ieee80211vap *vap, e 
     340                                        ATH_DEBUG_BEACON_PROC,  
     341                                "Beacons reconfigured by %p[%s]!\n", 
     342                                vap, vap->iv_nickname); 
     343-                       ath_beacon_config(sc, vap); 
     344+                       ath_beacon_config(sc, vap, 1); 
     345                        sc->sc_beacons = 1; 
     346                } 
     347        } else { 
     348@@ -9948,9 +9915,6 @@ ath_dfs_cac_completed(unsigned long data 
     349                } 
     350                netif_wake_queue(dev); 
     351                ath_reset(dev); 
     352-               if (sc->sc_beacons) { 
     353-                       ath_beacon_config(sc, NULL); 
     354-               } 
     355                dev->watchdog_timeo = 5 * HZ; /* restore normal timeout */ 
     356        } else { 
     357                do_gettimeofday(&tv); 
     358@@ -11473,9 +11437,6 @@ ATH_SYSCTL_DECL(ath_sysctl_halparam, ctl 
     359                case ATH_OUTDOOR: 
     360                        val = ic->ic_country_outdoor; 
     361                        break; 
     362-               case ATH_MAXVAPS: 
     363-                       val = ath_maxvaps; 
     364-                       break; 
     365                case ATH_REGDOMAIN: 
     366                        ath_hal_getregdomain(ah, &val); 
     367                        break; 
     368@@ -11606,12 +11567,6 @@ static const ctl_table ath_sysctl_templa 
     369          .extra2       = (void *)ATH_OUTDOOR, 
     370        }, 
     371        { .ctl_name     = CTL_AUTO, 
     372-         .procname     = "maxvaps", 
     373-         .mode         = 0444, 
     374-         .proc_handler = ath_sysctl_halparam, 
     375-         .extra2       = (void *)ATH_MAXVAPS, 
     376-       }, 
     377-       { .ctl_name     = CTL_AUTO, 
     378          .procname     = "regdomain", 
     379          .mode         = 0644, 
     380          .proc_handler = ath_sysctl_halparam, 
     381@@ -11928,13 +11883,6 @@ static ctl_table ath_static_sysctls[] =  
     382        }, 
     383 #endif 
     384        { .ctl_name     = CTL_AUTO, 
     385-         .procname     = "maxvaps", 
     386-         .mode         = 0444, 
     387-         .data         = &ath_maxvaps, 
     388-         .maxlen       = sizeof(ath_maxvaps), 
     389-         .proc_handler = proc_dointvec 
     390-       }, 
     391-       { .ctl_name     = CTL_AUTO, 
     392          .procname     = "xchanmode", 
     393          .mode         = 0444, 
     394          .data         = &ath_xchanmode, 
     395--- a/ath/if_athvar.h 
     396+++ b/ath/if_athvar.h 
     397@@ -211,9 +211,7 @@ static inline struct net_device *_alloc_ 
     398 #define        ATH_RXBUF       40              /* number of RX buffers */ 
     399 #define        ATH_TXBUF       200             /* number of TX buffers */ 
     400  
     401-#define ATH_MAXVAPS_MIN        2       /* minimum number of beacon buffers */ 
     402-#define ATH_MAXVAPS_MAX        64      /* maximum number of beacon buffers */ 
     403-#define ATH_MAXVAPS_DEFAULT    4       /* default number of beacon buffers */ 
     404+#define ATH_MAXVAPS_BCN                4       /* maximum number of beacon buffers */ 
     405  
     406 /* free buffer threshold to restart net dev */ 
     407 #define        ATH_TXBUF_FREE_THRESHOLD  (ATH_TXBUF / 20) 
  • branches/8.09/package/madwifi/patches/449-fix_txbuf_leak.patch

    r17696 r18054  
    11--- a/ath/if_ath.c 
    22+++ b/ath/if_ath.c 
    3 @@ -3725,6 +3725,7 @@ ff_bypass: 
     3@@ -3697,6 +3697,7 @@ ff_bypass: 
    44         */ 
    55        skb = ieee80211_encap(ni, skb, &framecnt); 
  • branches/8.09/package/madwifi/patches/450-calibration.patch

    r17696 r18054  
    11--- a/ath/if_ath.c 
    22+++ b/ath/if_ath.c 
    3 @@ -396,7 +396,6 @@ static int tpc = 1; 
    4  static int maxvaps = -1; 
     3@@ -394,7 +394,6 @@ static int rfkill = 0; 
     4 static int tpc = 1; 
    55 static int xchanmode = -1; 
    66 #include "ath_wprobe.c" 
     
    99 static const struct ath_hw_detect generic_hw_info = { 
    1010        .vendor_name = "Unknown", 
    11 @@ -431,7 +430,6 @@ static struct notifier_block ath_event_b 
     11@@ -429,7 +428,6 @@ static struct notifier_block ath_event_b 
    1212 }; 
    1313  
    1414 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,52)) 
    1515-MODULE_PARM(beacon_cal, "i"); 
    16  MODULE_PARM(maxvaps, "i"); 
    1716 MODULE_PARM(xchanmode, "i"); 
    1817 MODULE_PARM(rfkill, "i"); 
    19 @@ -443,7 +441,6 @@ MODULE_PARM(autocreate, "s"); 
     18 #ifdef ATH_CAP_TPC 
     19@@ -440,7 +438,6 @@ MODULE_PARM(autocreate, "s"); 
    2020 MODULE_PARM(ratectl, "s"); 
    2121 #else 
    2222 #include <linux/moduleparam.h> 
    2323-module_param(beacon_cal, int, 0600); 
    24  module_param(maxvaps, int, 0600); 
    2524 module_param(xchanmode, int, 0600); 
    2625 module_param(rfkill, int, 0600); 
    27 @@ -837,6 +834,7 @@ ath_attach(u_int16_t devid, struct net_d 
     26 #ifdef ATH_CAP_TPC 
     27@@ -825,6 +822,7 @@ ath_attach(u_int16_t devid, struct net_d 
    2828                error = EIO; 
    2929                goto bad2; 
     
    3333        sc->sc_cal_ch.function = ath_calibrate; 
    3434        sc->sc_cal_ch.data = (unsigned long) dev; 
    35 @@ -2765,8 +2763,7 @@ ath_stop_locked(struct net_device *dev) 
     35@@ -2737,8 +2735,7 @@ ath_stop_locked(struct net_device *dev) 
    3636                } 
    3737                if (!sc->sc_invalid) { 
     
    4343                ath_draintxq(sc); 
    4444                if (!sc->sc_invalid) { 
    45 @@ -2791,10 +2788,9 @@ static void ath_set_beacon_cal(struct at 
     45@@ -2763,10 +2760,9 @@ static void ath_set_beacon_cal(struct at 
    4646        if (val) { 
    4747                del_timer_sync(&sc->sc_cal_ch); 
     
    5656  
    5757 /* 
    58 @@ -3036,7 +3032,7 @@ ath_reset(struct net_device *dev) 
     58@@ -3008,7 +3004,7 @@ ath_reset(struct net_device *dev) 
    5959         * XXX: starting the calibration too early seems to lead to 
    6060         * problems with the beacons. 
     
    6565        /* 
    6666         * Convert to a HAL channel description with the flags 
    67 @@ -5477,10 +5473,9 @@ next: 
     67@@ -5430,10 +5426,9 @@ ath_beacon_send(struct ath_softc *sc, in 
    6868                        "Invoking ath_hal_txstart with sc_bhalq: %d\n", 
    6969                        sc->sc_bhalq); 
     
    7979                sc->sc_stats.ast_be_xmit++;             /* XXX per-VAP? */ 
    8080        } 
    81 @@ -9161,6 +9156,7 @@ ath_startrecv(struct ath_softc *sc) 
     81@@ -9104,6 +9099,7 @@ ath_startrecv(struct ath_softc *sc) 
    8282                dev->mtu, sc->sc_cachelsz, sc->sc_rxbufsize); 
    8383  
     
    8787                int error = ath_rxbuf_init(sc, bf); 
    8888                ATH_RXBUF_RESET(bf); 
    89 @@ -9377,7 +9373,7 @@ ath_chan_set(struct ath_softc *sc, struc 
     89@@ -9320,7 +9316,7 @@ ath_chan_set(struct ath_softc *sc, struc 
    9090                                jiffies + (sc->sc_dfs_cac_period * HZ)); 
    9191  
     
    9696                /* 
    9797                 * re configure beacons when it is a turbo mode switch. 
    98 @@ -9471,25 +9467,23 @@ ath_calibrate(unsigned long arg) 
     98@@ -9414,25 +9410,23 @@ ath_calibrate(unsigned long arg) 
    9999        if (isIQdone == AH_TRUE) { 
    100100                /* Unless user has overridden calibration interval, 
     
    129129  
    130130 static void 
    131 @@ -9597,9 +9591,6 @@ ath_newstate(struct ieee80211vap *vap, e 
     131@@ -9540,9 +9534,6 @@ ath_newstate(struct ieee80211vap *vap, e 
    132132                ieee80211_state_name[vap->iv_state], 
    133133                ieee80211_state_name[nstate]); 
     
    139139        netif_stop_queue(dev);                  /* before we do anything else */ 
    140140  
    141 @@ -9821,10 +9812,7 @@ ath_newstate(struct ieee80211vap *vap, e 
     141@@ -9764,10 +9755,7 @@ ath_newstate(struct ieee80211vap *vap, e 
    142142                                IEEE80211_IS_MODE_DFS_MASTER(vap->iv_opmode)) { 
    143143                        DPRINTF(sc, ATH_DEBUG_STATE | ATH_DEBUG_DOTH,  
     
    151151                        netif_wake_queue(dev); 
    152152                        /* don't do the other usual stuff... */ 
    153 @@ -9866,12 +9854,6 @@ done: 
     153@@ -9809,12 +9797,6 @@ done: 
    154154        /* Invoke the parent method to complete the work. */ 
    155155        error = avp->av_newstate(vap, nstate, arg); 
     
    166166--- a/ath/if_athvar.h 
    167167+++ b/ath/if_athvar.h 
    168 @@ -834,7 +834,8 @@ struct ath_softc { 
     168@@ -832,7 +832,8 @@ struct ath_softc { 
    169169  
    170170        struct ieee80211_channel *sc_last_chan; 
Note: See TracChangeset for help on using the changeset viewer.