Hi, Thanks! > 1. fix a hw scan bug in ieee80211_rx_bss_info() for setting beacon > supported rates > 2. let control frames pass in ieee80211_sta_rx_scan() during hw scan > 3. set local->sta_{hw|sw}_scanning type to bool > 4. avoid channel setting during hw scan Why this? I was confused at first and I'm sorry if I confused you, but since we're now fully unaware of hardware scan thanks to your item 5, I think we need to allow setting channel during hardware scan so the firmware will change to the right channel once it finished scanning. > 5. rework ieee80211_scan_completed() to make it symmetric for hw scan > diff --git a/net/mac80211/ieee80211_sta.c b/net/mac80211/ieee80211_sta.c > index 015b3f8..26f404a 100644 > --- a/net/mac80211/ieee80211_sta.c > +++ b/net/mac80211/ieee80211_sta.c > @@ -1487,8 +1487,18 @@ static void ieee80211_rx_bss_info(struct net_device *dev, > u32 supp_rates, prev_rates; > int i, j; > > - mode = local->sta_scanning ? > + mode = local->sta_sw_scanning ? > local->scan_hw_mode : local->oper_hw_mode; > + > + if (local->sta_hw_scanning) { > + /* search for the correct mode matches the beacon */ > + list_for_each_entry(mode, &local->modes_list, list) > + if (mode->mode == rx_status->phymode) > + break; > + > + if (mode == NULL) > + mode = local->oper_hw_mode; > + } Good catch. > @@ -1985,7 +2003,7 @@ void ieee80211_sta_work(struct work_struct *work) > if (!netif_running(dev)) > return; > > - if (local->sta_scanning) > + if (local->sta_sw_scanning || local->sta_hw_scanning) > return; Shouldn't the sta work be able to run normally while hw scan is in progress? > - if (unlikely(local->sta_scanning != 0)) { > - ieee80211_sta_rx_scan(rx->dev, skb, rx->u.rx.status); > + if (unlikely(local->sta_hw_scanning)) > + return ieee80211_sta_rx_scan(rx->dev, skb, rx->u.rx.status); > + > + if (unlikely(local->sta_sw_scanning)) { > + /* drop all the other packets during a software scan anyway */ > + if (ieee80211_sta_rx_scan(rx->dev, skb, rx->u.rx.status) > + != TXRX_QUEUED) > + dev_kfree_skb(skb); Not entirely sure why we do this, but nothing we should change with this patch. Other than the ioctl thing it looks good to me. johannes
Attachment:
signature.asc
Description: This is a digitally signed message part