Please note: This project is no longer active. The website is kept online for historic purposes only.
If you´re looking for a Linux driver for your Atheros WLAN device, you should continue here .

Ticket #228: setmode-delay-with-timeout.diff

File setmode-delay-with-timeout.diff, 1.2 kB (added by scottraynel@gmail.com, 13 years ago)

Revised setmode patch which includes a timeout

  • net80211/ieee80211_wireless.c

    old new  
    4848#include <linux/utsname.h> 
    4949#include <linux/if_arp.h>               /* XXX for ARPHRD_ETHER */ 
    5050#include <net/iw_handler.h> 
     51#include <linux/delay.h> 
    5152 
    5253#if WIRELESS_EXT < 14 
    5354#error "Wireless extensions v14 or better is needed." 
     
    15371538        struct ieee80211com *ic = vap->iv_ic; 
    15381539        struct ifreq ifr; 
    15391540        char s[6];              /* big enough for ``11adt'' */ 
    1540         int retv, mode, ifr_mode
     1541        int retv, mode, ifr_mode, itr_count
    15411542 
    15421543        if (ic->ic_media.ifm_cur == NULL) 
    15431544                return -EINVAL; 
     
    15731574                vap->iv_des_mode = mode; 
    15741575                if (IS_UP_AUTO(vap)) { 
    15751576                        ieee80211_cancel_scan(vap); 
     1577                        itr_count = 0; 
     1578                        while(ic->ic_flags & (IEEE80211_F_SCAN != 0)) { 
     1579                                mdelay(1); 
     1580                                if (itr_count < 100) { 
     1581                                        itr_count++; 
     1582                                        continue; 
     1583                                } 
     1584                                IEEE80211_DPRINTF(vap, IEEE80211_MSG_SCAN, 
     1585                                  "%s: Timeout cancelling current scan.\n", 
     1586                                  __func__); 
     1587                                return -ETIMEDOUT; 
     1588                        } 
    15761589                        ieee80211_new_state(vap, IEEE80211_S_SCAN, 0); 
    15771590                } 
    15781591                retv = 0;