aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wimax/i2400m/sdio-fw.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wimax/i2400m/sdio-fw.c')
-rw-r--r--drivers/net/wimax/i2400m/sdio-fw.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/net/wimax/i2400m/sdio-fw.c b/drivers/net/wimax/i2400m/sdio-fw.c
index 7d6ec0f475f8..8e025418f5be 100644
--- a/drivers/net/wimax/i2400m/sdio-fw.c
+++ b/drivers/net/wimax/i2400m/sdio-fw.c
@@ -118,7 +118,8 @@ ssize_t i2400ms_bus_bm_cmd_send(struct i2400m *i2400m,
118 if (cmd_size > I2400M_BM_CMD_BUF_SIZE) 118 if (cmd_size > I2400M_BM_CMD_BUF_SIZE)
119 goto error_too_big; 119 goto error_too_big;
120 120
121 memcpy(i2400m->bm_cmd_buf, _cmd, cmd_size); /* Prep command */ 121 if (_cmd != i2400m->bm_cmd_buf)
122 memmove(i2400m->bm_cmd_buf, _cmd, cmd_size);
122 cmd = i2400m->bm_cmd_buf; 123 cmd = i2400m->bm_cmd_buf;
123 if (cmd_size_a > cmd_size) /* Zero pad space */ 124 if (cmd_size_a > cmd_size) /* Zero pad space */
124 memset(i2400m->bm_cmd_buf + cmd_size, 0, cmd_size_a - cmd_size); 125 memset(i2400m->bm_cmd_buf + cmd_size, 0, cmd_size_a - cmd_size);
@@ -177,10 +178,6 @@ ssize_t i2400ms_bus_bm_wait_for_ack(struct i2400m *i2400m,
177 d_fnstart(5, dev, "(i2400m %p ack %p size %zu)\n", 178 d_fnstart(5, dev, "(i2400m %p ack %p size %zu)\n",
178 i2400m, ack, ack_size); 179 i2400m, ack, ack_size);
179 180
180 spin_lock(&i2400m->rx_lock);
181 i2400ms->bm_ack_size = -EINPROGRESS;
182 spin_unlock(&i2400m->rx_lock);
183
184 result = wait_event_timeout(i2400ms->bm_wfa_wq, 181 result = wait_event_timeout(i2400ms->bm_wfa_wq,
185 i2400ms->bm_ack_size != -EINPROGRESS, 182 i2400ms->bm_ack_size != -EINPROGRESS,
186 2 * HZ); 183 2 * HZ);
@@ -199,6 +196,10 @@ ssize_t i2400ms_bus_bm_wait_for_ack(struct i2400m *i2400m,
199 size = min(ack_size, i2400ms->bm_ack_size); 196 size = min(ack_size, i2400ms->bm_ack_size);
200 memcpy(ack, i2400m->bm_ack_buf, size); 197 memcpy(ack, i2400m->bm_ack_buf, size);
201 } 198 }
199 /*
200 * Remember always to clear the bm_ack_size to -EINPROGRESS
201 * after the RX data is processed
202 */
202 i2400ms->bm_ack_size = -EINPROGRESS; 203 i2400ms->bm_ack_size = -EINPROGRESS;
203 spin_unlock(&i2400m->rx_lock); 204 spin_unlock(&i2400m->rx_lock);
204 205