diff options
Diffstat (limited to 'drivers/net/wimax/i2400m/sdio-fw.c')
-rw-r--r-- | drivers/net/wimax/i2400m/sdio-fw.c | 11 |
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 | ||