aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVladimir Kondratiev <qca_vkondrat@qca.qualcomm.com>2013-01-28 11:31:08 -0500
committerJohn W. Linville <linville@tuxdriver.com>2013-01-30 15:07:19 -0500
commit2acb4220b264f9d229db01ccc390b8beb37b55af (patch)
tree3c4fdff51c92b3591591c7cc93215a40c9cf6961
parentafda8bb50b950b5ee598e3dd0388b06ad1226eed (diff)
wil6210: Never delete Rx chain with firmware
Firmware crash on attempt to delete Rx chain. Driver part of Rx chain removed only in preparation for the target reset; as reset is the only flow that removes Rx chain in the firmware. Signed-off-by: Vladimir Kondratiev <qca_vkondrat@qca.qualcomm.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r--drivers/net/wireless/ath/wil6210/txrx.c4
-rw-r--r--drivers/net/wireless/ath/wil6210/wil6210.h1
-rw-r--r--drivers/net/wireless/ath/wil6210/wmi.c22
3 files changed, 1 insertions, 26 deletions
diff --git a/drivers/net/wireless/ath/wil6210/txrx.c b/drivers/net/wireless/ath/wil6210/txrx.c
index 48cfa7e13781..198595118396 100644
--- a/drivers/net/wireless/ath/wil6210/txrx.c
+++ b/drivers/net/wireless/ath/wil6210/txrx.c
@@ -511,10 +511,8 @@ void wil_rx_fini(struct wil6210_priv *wil)
511{ 511{
512 struct vring *vring = &wil->vring_rx; 512 struct vring *vring = &wil->vring_rx;
513 513
514 if (vring->va) { 514 if (vring->va)
515 wmi_rx_chain_del(wil);
516 wil_vring_free(wil, vring, 0); 515 wil_vring_free(wil, vring, 0);
517 }
518} 516}
519 517
520int wil_vring_init_tx(struct wil6210_priv *wil, int id, int size, 518int wil_vring_init_tx(struct wil6210_priv *wil, int id, int size,
diff --git a/drivers/net/wireless/ath/wil6210/wil6210.h b/drivers/net/wireless/ath/wil6210/wil6210.h
index 69e5162be28a..aea961ff8f08 100644
--- a/drivers/net/wireless/ath/wil6210/wil6210.h
+++ b/drivers/net/wireless/ath/wil6210/wil6210.h
@@ -327,7 +327,6 @@ int wmi_add_cipher_key(struct wil6210_priv *wil, u8 key_index,
327 const void *mac_addr, int key_len, const void *key); 327 const void *mac_addr, int key_len, const void *key);
328int wmi_echo(struct wil6210_priv *wil); 328int wmi_echo(struct wil6210_priv *wil);
329int wmi_set_ie(struct wil6210_priv *wil, u8 type, u16 ie_len, const void *ie); 329int wmi_set_ie(struct wil6210_priv *wil, u8 type, u16 ie_len, const void *ie);
330int wmi_rx_chain_del(struct wil6210_priv *wil);
331int wmi_rx_chain_add(struct wil6210_priv *wil, struct vring *vring); 330int wmi_rx_chain_add(struct wil6210_priv *wil, struct vring *vring);
332 331
333int wil6210_init_irq(struct wil6210_priv *wil, int irq); 332int wil6210_init_irq(struct wil6210_priv *wil, int irq);
diff --git a/drivers/net/wireless/ath/wil6210/wmi.c b/drivers/net/wireless/ath/wil6210/wmi.c
index 8178cc0ce650..0b70e17cd1fb 100644
--- a/drivers/net/wireless/ath/wil6210/wmi.c
+++ b/drivers/net/wireless/ath/wil6210/wmi.c
@@ -902,28 +902,6 @@ int wmi_rx_chain_add(struct wil6210_priv *wil, struct vring *vring)
902 return rc; 902 return rc;
903} 903}
904 904
905int wmi_rx_chain_del(struct wil6210_priv *wil)
906{
907 int rc;
908 struct wmi_cfg_rx_chain_cmd cmd = {
909 .action = cpu_to_le32(WMI_RX_CHAIN_DEL),
910 .rx_sw_ring = {
911 .max_mpdu_size = cpu_to_le16(RX_BUF_LEN),
912 },
913 };
914 struct {
915 struct wil6210_mbox_hdr_wmi wmi;
916 struct wmi_cfg_rx_chain_done_event cfg;
917 } __packed wmi_rx_cfg_reply;
918
919 rc = wmi_call(wil, WMI_CFG_RX_CHAIN_CMDID, &cmd, sizeof(cmd),
920 WMI_CFG_RX_CHAIN_DONE_EVENTID,
921 &wmi_rx_cfg_reply, sizeof(wmi_rx_cfg_reply),
922 100);
923
924 return rc;
925}
926
927void wmi_event_flush(struct wil6210_priv *wil) 905void wmi_event_flush(struct wil6210_priv *wil)
928{ 906{
929 struct pending_wmi_event *evt, *t; 907 struct pending_wmi_event *evt, *t;