aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSujith Manoharan <Sujith.Manoharan@atheros.com>2011-04-13 01:52:59 -0400
committerJohn W. Linville <linville@tuxdriver.com>2011-04-13 15:22:11 -0400
commit1c165c972b040f9ce199b8d8d3cc4f619872cba5 (patch)
treeb3c6e46d5c070037d9231f2d278cb00aee05b521
parent29bbfb2491316f9a3888e74b0de7fccdbde67aaa (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.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 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
98struct tx_beacon_header { 98struct 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
40struct wmi_event_swba {
41 __be64 tsf;
42 u8 beacon_pending;
43};
39enum wmi_cmd_id { 44enum 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