diff options
author | Sujith Manoharan <Sujith.Manoharan@atheros.com> | 2011-04-13 01:52:59 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2011-04-13 15:22:11 -0400 |
commit | 1c165c972b040f9ce199b8d8d3cc4f619872cba5 (patch) | |
tree | b3c6e46d5c070037d9231f2d278cb00aee05b521 | |
parent | 29bbfb2491316f9a3888e74b0de7fccdbde67aaa (diff) |
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>
-rw-r--r-- | drivers/net/wireless/ath/ath9k/htc.h | 2 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/wmi.c | 7 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/wmi.h | 6 |
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 9544cd7fd44..cf7909ec076 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 { | |||
96 | } __packed; | 96 | } __packed; |
97 | 97 | ||
98 | struct tx_beacon_header { | 98 | struct tx_beacon_header { |
99 | u8 len_changed; | ||
100 | u8 vif_index; | 99 | u8 vif_index; |
100 | u8 len_changed; | ||
101 | u16 rev; | 101 | u16 rev; |
102 | } __packed; | 102 | } __packed; |
103 | 103 | ||
diff --git a/drivers/net/wireless/ath/ath9k/wmi.c b/drivers/net/wireless/ath/ath9k/wmi.c index 267a98fcf5f..96171a2c687 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, | |||
156 | struct wmi_cmd_hdr *hdr; | 156 | struct wmi_cmd_hdr *hdr; |
157 | u16 cmd_id; | 157 | u16 cmd_id; |
158 | void *wmi_event; | 158 | void *wmi_event; |
159 | struct wmi_event_swba *swba; | ||
159 | #ifdef CONFIG_ATH9K_HTC_DEBUGFS | 160 | #ifdef CONFIG_ATH9K_HTC_DEBUGFS |
160 | __be32 txrate; | 161 | __be32 txrate; |
161 | #endif | 162 | #endif |
@@ -170,7 +171,11 @@ static void ath9k_wmi_ctrl_rx(void *priv, struct sk_buff *skb, | |||
170 | wmi_event = skb_pull(skb, sizeof(struct wmi_cmd_hdr)); | 171 | wmi_event = skb_pull(skb, sizeof(struct wmi_cmd_hdr)); |
171 | switch (cmd_id) { | 172 | switch (cmd_id) { |
172 | case WMI_SWBA_EVENTID: | 173 | case WMI_SWBA_EVENTID: |
173 | wmi->beacon_pending = *(u8 *)wmi_event; | 174 | swba = (struct wmi_event_swba *) wmi_event; |
175 | |||
176 | wmi->tsf = be64_to_cpu(swba->tsf); | ||
177 | wmi->beacon_pending = swba->beacon_pending; | ||
178 | |||
174 | tasklet_schedule(&wmi->drv_priv->swba_tasklet); | 179 | tasklet_schedule(&wmi->drv_priv->swba_tasklet); |
175 | break; | 180 | break; |
176 | case WMI_FATAL_EVENTID: | 181 | case WMI_FATAL_EVENTID: |
diff --git a/drivers/net/wireless/ath/ath9k/wmi.h b/drivers/net/wireless/ath/ath9k/wmi.h index 6a36572b6fb..2fa91a941a7 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 { | |||
36 | __be16 minor; | 36 | __be16 minor; |
37 | 37 | ||
38 | } __packed; | 38 | } __packed; |
39 | |||
40 | struct wmi_event_swba { | ||
41 | __be64 tsf; | ||
42 | u8 beacon_pending; | ||
43 | }; | ||
39 | enum wmi_cmd_id { | 44 | enum wmi_cmd_id { |
40 | WMI_ECHO_CMDID = 0x0001, | 45 | WMI_ECHO_CMDID = 0x0001, |
41 | WMI_ACCESS_MEMORY_CMDID, | 46 | WMI_ACCESS_MEMORY_CMDID, |
@@ -106,6 +111,7 @@ struct wmi { | |||
106 | u32 cmd_rsp_len; | 111 | u32 cmd_rsp_len; |
107 | bool stopped; | 112 | bool stopped; |
108 | 113 | ||
114 | u64 tsf; | ||
109 | u8 beacon_pending; | 115 | u8 beacon_pending; |
110 | spinlock_t wmi_lock; | 116 | spinlock_t wmi_lock; |
111 | 117 | ||