diff options
author | Alina Friedrichsen <x-alina@gmx.net> | 2009-02-24 18:49:18 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-03-05 14:39:30 -0500 |
commit | 5fe73197d359248cbf32dfd3280540d6a0dfd31c (patch) | |
tree | 87ae431ca5bea9e5874b2f7cfd50b632b4845ab5 /drivers/net/wireless/zd1211rw/zd_chip.c | |
parent | b3bd89ce956c220fe52a003103f14af48f695fda (diff) |
zd1211rw: Implement get_tsf()
This patch implements get_tsf() of ieee80211_ops in the zd1211rw driver.
Signed-off-by: Alina Friedrichsen <x-alina@gmx.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/zd1211rw/zd_chip.c')
-rw-r--r-- | drivers/net/wireless/zd1211rw/zd_chip.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/drivers/net/wireless/zd1211rw/zd_chip.c b/drivers/net/wireless/zd1211rw/zd_chip.c index f1519143f8a6..2c813d87092c 100644 --- a/drivers/net/wireless/zd1211rw/zd_chip.c +++ b/drivers/net/wireless/zd1211rw/zd_chip.c | |||
@@ -1616,3 +1616,24 @@ int zd_chip_set_multicast_hash(struct zd_chip *chip, | |||
1616 | 1616 | ||
1617 | return zd_iowrite32a(chip, ioreqs, ARRAY_SIZE(ioreqs)); | 1617 | return zd_iowrite32a(chip, ioreqs, ARRAY_SIZE(ioreqs)); |
1618 | } | 1618 | } |
1619 | |||
1620 | u64 zd_chip_get_tsf(struct zd_chip *chip) | ||
1621 | { | ||
1622 | int r; | ||
1623 | static const zd_addr_t aw_pt_bi_addr[] = | ||
1624 | { CR_TSF_LOW_PART, CR_TSF_HIGH_PART }; | ||
1625 | u32 values[2]; | ||
1626 | u64 tsf; | ||
1627 | |||
1628 | mutex_lock(&chip->mutex); | ||
1629 | r = zd_ioread32v_locked(chip, values, (const zd_addr_t *)aw_pt_bi_addr, | ||
1630 | ARRAY_SIZE(aw_pt_bi_addr)); | ||
1631 | mutex_unlock(&chip->mutex); | ||
1632 | if (r) | ||
1633 | return 0; | ||
1634 | |||
1635 | tsf = values[1]; | ||
1636 | tsf = (tsf << 32) | values[0]; | ||
1637 | |||
1638 | return tsf; | ||
1639 | } | ||