summaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath/ath9k
diff options
context:
space:
mode:
authorSujith Manoharan2011-04-13 07:52:59 +0200
committerJohn W. Linville2011-04-13 21:22:11 +0200
commit1c165c972b040f9ce199b8d8d3cc4f619872cba5 (patch)
treeb3c6e46d5c070037d9231f2d278cb00aee05b521 /drivers/net/wireless/ath/ath9k
parentath9k_htc: Add a WMI command to get the firmware version (diff)
downloadkernel-qcow2-linux-1c165c972b040f9ce199b8d8d3cc4f619872cba5.tar.gz
kernel-qcow2-linux-1c165c972b040f9ce199b8d8d3cc4f619872cba5.tar.xz
kernel-qcow2-linux-1c165c972b040f9ce199b8d8d3cc4f619872cba5.zip
ath9k_htc: Fix WMI and beacon header
Match the beacon header with that of the firmware. Also, the firmware reports the TSF for an SWBA, so store it. Signed-off-by: Sujith Manoharan <Sujith.Manoharan@atheros.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/ath/ath9k')
-rw-r--r--drivers/net/wireless/ath/ath9k/htc.h2
-rw-r--r--drivers/net/wireless/ath/ath9k/wmi.c7
-rw-r--r--drivers/net/wireless/ath/ath9k/wmi.h6
3 files changed, 13 insertions, 2 deletions
diff --git a/drivers/net/wireless/ath/ath9k/htc.h b/drivers/net/wireless/ath/ath9k/htc.h
index 9544cd7fd440..cf7909ec0769 100644
--- a/drivers/net/wireless/ath/ath9k/htc.h
+++ b/drivers/net/wireless/ath/ath9k/htc.h
@@ -96,8 +96,8 @@ struct tx_mgmt_hdr {
} __packed;
struct tx_beacon_header {
- u8 len_changed;
u8 vif_index;
+ u8 len_changed;
u16 rev;
} __packed;
diff --git a/drivers/net/wireless/ath/ath9k/wmi.c b/drivers/net/wireless/ath/ath9k/wmi.c
index 267a98fcf5f2..96171a2c6873 100644
--- a/drivers/net/wireless/ath/ath9k/wmi.c
+++ b/drivers/net/wireless/ath/ath9k/wmi.c
@@ -156,6 +156,7 @@ static void ath9k_wmi_ctrl_rx(void *priv, struct sk_buff *skb,
struct wmi_cmd_hdr *hdr;
u16 cmd_id;
void *wmi_event;
+ struct wmi_event_swba *swba;
#ifdef CONFIG_ATH9K_HTC_DEBUGFS
__be32 txrate;
#endif
@@ -170,7 +171,11 @@ static void ath9k_wmi_ctrl_rx(void *priv, struct sk_buff *skb,
wmi_event = skb_pull(skb, sizeof(struct wmi_cmd_hdr));
switch (cmd_id) {
case WMI_SWBA_EVENTID:
- wmi->beacon_pending = *(u8 *)wmi_event;
+ swba = (struct wmi_event_swba *) wmi_event;
+
+ wmi->tsf = be64_to_cpu(swba->tsf);
+ wmi->beacon_pending = swba->beacon_pending;
+
tasklet_schedule(&wmi->drv_priv->swba_tasklet);
break;
case WMI_FATAL_EVENTID:
diff --git a/drivers/net/wireless/ath/ath9k/wmi.h b/drivers/net/wireless/ath/ath9k/wmi.h
index 6a36572b6fb8..2fa91a941a72 100644
--- a/drivers/net/wireless/ath/ath9k/wmi.h
+++ b/drivers/net/wireless/ath/ath9k/wmi.h
@@ -36,6 +36,11 @@ struct wmi_fw_version {
__be16 minor;
} __packed;
+
+struct wmi_event_swba {
+ __be64 tsf;
+ u8 beacon_pending;
+};
enum wmi_cmd_id {
WMI_ECHO_CMDID = 0x0001,
WMI_ACCESS_MEMORY_CMDID,
@@ -106,6 +111,7 @@ struct wmi {
u32 cmd_rsp_len;
bool stopped;
+ u64 tsf;
u8 beacon_pending;
spinlock_t wmi_lock;