Lines Matching +full:hw +full:- +full:channels
1 // SPDX-License-Identifier: ISC
9 struct mt76_phy *phy = dev->scan.phy; in mt76_scan_complete()
17 clear_bit(MT76_SCANNING, &phy->state); in mt76_scan_complete()
19 if (dev->scan.chan && phy->main_chandef.chan) in mt76_scan_complete()
20 mt76_set_channel(phy, &phy->main_chandef, false); in mt76_scan_complete()
21 mt76_put_vif_phy_link(phy, dev->scan.vif, dev->scan.mlink); in mt76_scan_complete()
22 memset(&dev->scan, 0, sizeof(dev->scan)); in mt76_scan_complete()
23 ieee80211_scan_completed(phy->hw, &info); in mt76_scan_complete()
28 cancel_delayed_work_sync(&dev->scan_work); in mt76_abort_scan()
35 struct cfg80211_scan_request *req = dev->scan.req; in mt76_scan_send_probe()
36 struct ieee80211_vif *vif = dev->scan.vif; in mt76_scan_send_probe()
37 struct mt76_vif_link *mvif = dev->scan.mlink; in mt76_scan_send_probe()
38 enum nl80211_band band = dev->scan.chan->band; in mt76_scan_send_probe()
39 struct mt76_phy *phy = dev->scan.phy; in mt76_scan_send_probe()
43 skb = ieee80211_probereq_get(phy->hw, vif->addr, ssid->ssid, in mt76_scan_send_probe()
44 ssid->ssid_len, req->ie_len); in mt76_scan_send_probe()
48 if (is_unicast_ether_addr(req->bssid)) { in mt76_scan_send_probe()
49 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; in mt76_scan_send_probe()
51 ether_addr_copy(hdr->addr1, req->bssid); in mt76_scan_send_probe()
52 ether_addr_copy(hdr->addr3, req->bssid); in mt76_scan_send_probe()
55 if (req->ie_len) in mt76_scan_send_probe()
56 skb_put_data(skb, req->ie, req->ie_len); in mt76_scan_send_probe()
58 skb->priority = 7; in mt76_scan_send_probe()
63 if (!ieee80211_tx_prepare_skb(phy->hw, vif, skb, band, NULL)) { in mt76_scan_send_probe()
64 ieee80211_free_txskb(phy->hw, skb); in mt76_scan_send_probe()
69 if (req->no_cck) in mt76_scan_send_probe()
70 info->flags |= IEEE80211_TX_CTL_NO_CCK_RATE; in mt76_scan_send_probe()
71 info->control.flags |= IEEE80211_TX_CTRL_DONT_USE_RATE_MASK; in mt76_scan_send_probe()
73 mt76_tx(phy, NULL, mvif->wcid, skb); in mt76_scan_send_probe()
83 struct cfg80211_scan_request *req = dev->scan.req; in mt76_scan_work()
85 struct mt76_phy *phy = dev->scan.phy; in mt76_scan_work()
89 if (dev->scan.chan_idx >= req->n_channels) { in mt76_scan_work()
94 if (dev->scan.chan && phy->num_sta) { in mt76_scan_work()
95 dev->scan.chan = NULL; in mt76_scan_work()
96 mt76_set_channel(phy, &phy->main_chandef, false); in mt76_scan_work()
100 dev->scan.chan = req->channels[dev->scan.chan_idx++]; in mt76_scan_work()
101 cfg80211_chandef_create(&chandef, dev->scan.chan, NL80211_CHAN_HT20); in mt76_scan_work()
104 if (!req->n_ssids || in mt76_scan_work()
105 chandef.chan->flags & (IEEE80211_CHAN_NO_IR | IEEE80211_CHAN_RADAR)) in mt76_scan_work()
110 for (i = 0; i < req->n_ssids; i++) in mt76_scan_work()
111 mt76_scan_send_probe(dev, &req->ssids[i]); in mt76_scan_work()
118 if (dev->scan.chan) in mt76_scan_work()
120 msecs_to_jiffies(req->duration + in mt76_scan_work()
121 (req->duration >> 5))); in mt76_scan_work()
123 ieee80211_queue_delayed_work(dev->phy.hw, &dev->scan_work, duration); in mt76_scan_work()
126 int mt76_hw_scan(struct ieee80211_hw *hw, struct ieee80211_vif *vif, in mt76_hw_scan() argument
129 struct mt76_phy *phy = hw->priv; in mt76_hw_scan()
130 struct mt76_dev *dev = phy->dev; in mt76_hw_scan()
134 if (hw->wiphy->n_radio > 1) { in mt76_hw_scan()
135 phy = dev->band_phys[req->req.channels[0]->band]; in mt76_hw_scan()
137 return -EINVAL; in mt76_hw_scan()
140 mutex_lock(&dev->mutex); in mt76_hw_scan()
142 if (dev->scan.req || phy->roc_vif) { in mt76_hw_scan()
143 ret = -EBUSY; in mt76_hw_scan()
153 memset(&dev->scan, 0, sizeof(dev->scan)); in mt76_hw_scan()
154 dev->scan.req = &req->req; in mt76_hw_scan()
155 dev->scan.vif = vif; in mt76_hw_scan()
156 dev->scan.phy = phy; in mt76_hw_scan()
157 dev->scan.mlink = mlink; in mt76_hw_scan()
158 ieee80211_queue_delayed_work(dev->phy.hw, &dev->scan_work, 0); in mt76_hw_scan()
161 mutex_unlock(&dev->mutex); in mt76_hw_scan()
167 void mt76_cancel_hw_scan(struct ieee80211_hw *hw, struct ieee80211_vif *vif) in mt76_cancel_hw_scan() argument
169 struct mt76_phy *phy = hw->priv; in mt76_cancel_hw_scan()
171 mt76_abort_scan(phy->dev); in mt76_cancel_hw_scan()