diff options
author | Holger Schurig <hs4233@mail.mn-solutions.de> | 2007-12-06 07:50:30 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-01-28 18:06:08 -0500 |
commit | 09d4fad6e8972061fbb0e2e5ae9e686d84f57af6 (patch) | |
tree | 48c5151452013f7b551cf38743bebf26cf535a08 | |
parent | abe3ed14d39adcea9ae186cf741b15d11544458f (diff) |
libertas: fix data packet size errors
I wondered about junk bytes at the end when using "lbsdebug +hex +host"
until I noticed that firmware for the CF card sends my extranous bytes.
It says "I have 20 bytes", I take 20 bytes, but the last 8 bytes of this
are just data junk.
Also, in the new lbs_cmd() where was a size miscalulation
that made itself clear after fixing this bug.
Signed-off-by: Holger Schurig <hs4233@mail.mn-solutions.de>
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r-- | drivers/net/wireless/libertas/cmdresp.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/libertas/if_cs.c | 3 |
2 files changed, 4 insertions, 1 deletions
diff --git a/drivers/net/wireless/libertas/cmdresp.c b/drivers/net/wireless/libertas/cmdresp.c index 6a43de772aa..22a69736338 100644 --- a/drivers/net/wireless/libertas/cmdresp.c +++ b/drivers/net/wireless/libertas/cmdresp.c | |||
@@ -882,7 +882,7 @@ int lbs_process_rx_command(struct lbs_private *priv) | |||
882 | 882 | ||
883 | if (adapter->cur_cmd->pdata_size) { | 883 | if (adapter->cur_cmd->pdata_size) { |
884 | struct cmd_ds_gen *r = (struct cmd_ds_gen *)resp; | 884 | struct cmd_ds_gen *r = (struct cmd_ds_gen *)resp; |
885 | u16 sz = cpu_to_le16(resp->size); | 885 | u16 sz = cpu_to_le16(resp->size) - S_DS_GEN; |
886 | if (sz > *adapter->cur_cmd->pdata_size) { | 886 | if (sz > *adapter->cur_cmd->pdata_size) { |
887 | lbs_pr_err("response 0x%04x doesn't fit into " | 887 | lbs_pr_err("response 0x%04x doesn't fit into " |
888 | "buffer (%d > %d)\n", respcmd, | 888 | "buffer (%d > %d)\n", respcmd, |
diff --git a/drivers/net/wireless/libertas/if_cs.c b/drivers/net/wireless/libertas/if_cs.c index 54b1ba3e250..8508260a286 100644 --- a/drivers/net/wireless/libertas/if_cs.c +++ b/drivers/net/wireless/libertas/if_cs.c | |||
@@ -373,6 +373,9 @@ static int if_cs_receive_cmdres(struct lbs_private *priv, u8 *data, u32 *len) | |||
373 | if (*len & 1) | 373 | if (*len & 1) |
374 | data[*len-1] = if_cs_read8(priv->card, IF_CS_C_CMD); | 374 | data[*len-1] = if_cs_read8(priv->card, IF_CS_C_CMD); |
375 | 375 | ||
376 | /* This is a workaround for a firmware that reports too much | ||
377 | * bytes */ | ||
378 | *len -= 8; | ||
376 | ret = 0; | 379 | ret = 0; |
377 | out: | 380 | out: |
378 | lbs_deb_leave_args(LBS_DEB_CS, "ret %d, len %d", ret, *len); | 381 | lbs_deb_leave_args(LBS_DEB_CS, "ret %d, len %d", ret, *len); |