0001
0002
0003
0004
0005
0006
0007 #include "mt7601u.h"
0008
0009 int mt7601u_wait_asic_ready(struct mt7601u_dev *dev)
0010 {
0011 int i = 100;
0012 u32 val;
0013
0014 do {
0015 if (test_bit(MT7601U_STATE_REMOVED, &dev->state))
0016 return -EIO;
0017
0018 val = mt7601u_rr(dev, MT_MAC_CSR0);
0019 if (val && ~val)
0020 return 0;
0021
0022 udelay(10);
0023 } while (i--);
0024
0025 return -EIO;
0026 }
0027
0028 bool mt76_poll(struct mt7601u_dev *dev, u32 offset, u32 mask, u32 val,
0029 int timeout)
0030 {
0031 u32 cur;
0032
0033 timeout /= 10;
0034 do {
0035 if (test_bit(MT7601U_STATE_REMOVED, &dev->state))
0036 return false;
0037
0038 cur = mt7601u_rr(dev, offset) & mask;
0039 if (cur == val)
0040 return true;
0041
0042 udelay(10);
0043 } while (timeout-- > 0);
0044
0045 dev_err(dev->dev, "Error: Time out with reg %08x\n", offset);
0046
0047 return false;
0048 }
0049
0050 bool mt76_poll_msec(struct mt7601u_dev *dev, u32 offset, u32 mask, u32 val,
0051 int timeout)
0052 {
0053 u32 cur;
0054
0055 timeout /= 10;
0056 do {
0057 if (test_bit(MT7601U_STATE_REMOVED, &dev->state))
0058 return false;
0059
0060 cur = mt7601u_rr(dev, offset) & mask;
0061 if (cur == val)
0062 return true;
0063
0064 msleep(10);
0065 } while (timeout-- > 0);
0066
0067 dev_err(dev->dev, "Error: Time out with reg %08x\n", offset);
0068
0069 return false;
0070 }