Lines Matching refs:rt2x00dev
36 static int rt2x00link_antenna_get_link_rssi(struct rt2x00_dev *rt2x00dev)
38 struct link_ant *ant = &rt2x00dev->link.ant;
40 if (rt2x00dev->link.qual.rx_success)
46 static int rt2x00link_antenna_get_rssi_history(struct rt2x00_dev *rt2x00dev)
48 struct link_ant *ant = &rt2x00dev->link.ant;
55 static void rt2x00link_antenna_update_rssi_history(struct rt2x00_dev *rt2x00dev,
58 struct link_ant *ant = &rt2x00dev->link.ant;
62 static void rt2x00link_antenna_reset(struct rt2x00_dev *rt2x00dev)
64 ewma_rssi_init(&rt2x00dev->link.ant.rssi_ant);
67 static void rt2x00lib_antenna_diversity_sample(struct rt2x00_dev *rt2x00dev)
69 struct link_ant *ant = &rt2x00dev->link.ant;
73 int sample_current = rt2x00link_antenna_get_link_rssi(rt2x00dev);
74 int sample_other = rt2x00link_antenna_get_rssi_history(rt2x00dev);
92 rt2x00link_antenna_update_rssi_history(rt2x00dev,
105 rt2x00lib_config_antenna(rt2x00dev, new_ant);
108 static void rt2x00lib_antenna_diversity_eval(struct rt2x00_dev *rt2x00dev)
110 struct link_ant *ant = &rt2x00dev->link.ant;
121 rssi_curr = rt2x00link_antenna_get_link_rssi(rt2x00dev);
122 rssi_old = rt2x00link_antenna_get_rssi_history(rt2x00dev);
123 rt2x00link_antenna_update_rssi_history(rt2x00dev, rssi_curr);
145 rt2x00lib_config_antenna(rt2x00dev, new_ant);
148 static bool rt2x00lib_antenna_diversity(struct rt2x00_dev *rt2x00dev)
150 struct link_ant *ant = &rt2x00dev->link.ant;
169 rt2x00lib_antenna_diversity_sample(rt2x00dev);
171 } else if (rt2x00dev->link.count & 1) {
172 rt2x00lib_antenna_diversity_eval(rt2x00dev);
179 void rt2x00link_update_stats(struct rt2x00_dev *rt2x00dev,
183 struct link *link = &rt2x00dev->link;
184 struct link_qual *qual = &rt2x00dev->link.qual;
185 struct link_ant *ant = &rt2x00dev->link.ant;
191 if (!rt2x00dev->intf_sta_count)
220 void rt2x00link_start_tuner(struct rt2x00_dev *rt2x00dev)
222 struct link *link = &rt2x00dev->link;
228 if (!rt2x00dev->intf_ap_count && !rt2x00dev->intf_sta_count)
237 if (test_bit(DEVICE_STATE_SCANNING, &rt2x00dev->flags))
240 rt2x00link_reset_tuner(rt2x00dev, false);
242 if (test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags))
243 ieee80211_queue_delayed_work(rt2x00dev->hw,
247 void rt2x00link_stop_tuner(struct rt2x00_dev *rt2x00dev)
249 cancel_delayed_work_sync(&rt2x00dev->link.work);
252 void rt2x00link_reset_tuner(struct rt2x00_dev *rt2x00dev, bool antenna)
254 struct link_qual *qual = &rt2x00dev->link.qual;
257 if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
268 rt2x00dev->link.count = 0;
270 ewma_rssi_init(&rt2x00dev->link.avg_rssi);
282 rt2x00dev->ops->lib->reset_tuner(rt2x00dev, qual);
285 rt2x00link_antenna_reset(rt2x00dev);
288 static void rt2x00link_reset_qual(struct rt2x00_dev *rt2x00dev)
290 struct link_qual *qual = &rt2x00dev->link.qual;
298 static void rt2x00link_tuner_sta(struct rt2x00_dev *rt2x00dev, struct link *link)
300 struct link_qual *qual = &rt2x00dev->link.qual;
305 rt2x00dev->ops->lib->link_stats(rt2x00dev, qual);
306 rt2x00dev->low_level_stats.dot11FCSErrorCount += qual->rx_failed;
324 if (rt2x00_has_cap_link_tuning(rt2x00dev))
325 rt2x00dev->ops->lib->link_tuner(rt2x00dev, qual, link->count);
330 rt2x00leds_led_quality(rt2x00dev, qual->rssi);
337 if (rt2x00lib_antenna_diversity(rt2x00dev))
338 rt2x00link_reset_qual(rt2x00dev);
343 struct rt2x00_dev *rt2x00dev =
345 struct link *link = &rt2x00dev->link;
351 if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags) ||
352 test_bit(DEVICE_STATE_SCANNING, &rt2x00dev->flags))
356 mutex_lock(&rt2x00dev->conf_mutex);
358 if (rt2x00dev->intf_sta_count)
359 rt2x00link_tuner_sta(rt2x00dev, link);
361 if (rt2x00dev->ops->lib->gain_calibration &&
363 rt2x00dev->ops->lib->gain_calibration(rt2x00dev);
365 if (rt2x00dev->ops->lib->vco_calibration &&
366 rt2x00_has_cap_vco_recalibration(rt2x00dev) &&
368 rt2x00dev->ops->lib->vco_calibration(rt2x00dev);
370 mutex_unlock(&rt2x00dev->conf_mutex);
377 if (test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags))
378 ieee80211_queue_delayed_work(rt2x00dev->hw,
382 void rt2x00link_start_watchdog(struct rt2x00_dev *rt2x00dev)
384 struct link *link = &rt2x00dev->link;
386 if (test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags) &&
387 rt2x00dev->ops->lib->watchdog && !link->watchdog_disabled)
388 ieee80211_queue_delayed_work(rt2x00dev->hw,
393 void rt2x00link_stop_watchdog(struct rt2x00_dev *rt2x00dev)
395 cancel_delayed_work_sync(&rt2x00dev->link.watchdog_work);
400 struct rt2x00_dev *rt2x00dev =
402 struct link *link = &rt2x00dev->link;
408 if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
411 rt2x00dev->ops->lib->watchdog(rt2x00dev);
413 if (test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags))
414 ieee80211_queue_delayed_work(rt2x00dev->hw,
419 void rt2x00link_register(struct rt2x00_dev *rt2x00dev)
421 struct link *link = &rt2x00dev->link;