1 // SPDX-License-Identifier: ISC
3 * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
6 #include <linux/module.h>
9 bool __mt76_poll(struct mt76_dev
*dev
, u32 offset
, u32 mask
, u32 val
,
16 cur
= dev
->bus
->rr(dev
, offset
) & mask
;
21 } while (timeout
-- > 0);
25 EXPORT_SYMBOL_GPL(__mt76_poll
);
27 bool __mt76_poll_msec(struct mt76_dev
*dev
, u32 offset
, u32 mask
, u32 val
,
34 cur
= dev
->bus
->rr(dev
, offset
) & mask
;
38 usleep_range(10000, 20000);
39 } while (timeout
-- > 0);
43 EXPORT_SYMBOL_GPL(__mt76_poll_msec
);
45 int mt76_wcid_alloc(unsigned long *mask
, int size
)
49 for (i
= 0; i
< size
/ BITS_PER_LONG
; i
++) {
55 cur
= i
* BITS_PER_LONG
+ idx
;
65 EXPORT_SYMBOL_GPL(mt76_wcid_alloc
);
67 int mt76_get_min_avg_rssi(struct mt76_dev
*dev
)
69 struct mt76_wcid
*wcid
;
70 int i
, j
, min_rssi
= 0;
76 for (i
= 0; i
< ARRAY_SIZE(dev
->wcid_mask
); i
++) {
77 unsigned long mask
= dev
->wcid_mask
[i
];
82 for (j
= i
* BITS_PER_LONG
; mask
; j
++, mask
>>= 1) {
86 wcid
= rcu_dereference(dev
->wcid
[j
]);
90 spin_lock(&dev
->rx_lock
);
91 if (wcid
->inactive_count
++ < 5)
92 cur_rssi
= -ewma_signal_read(&wcid
->rssi
);
95 spin_unlock(&dev
->rx_lock
);
97 if (cur_rssi
< min_rssi
)
107 EXPORT_SYMBOL_GPL(mt76_get_min_avg_rssi
);
109 MODULE_LICENSE("Dual BSD/GPL");