aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHolger Schurig <hs4233@mail.mn-solutions.de>2007-12-06 07:50:30 -0500
committerDavid S. Miller <davem@davemloft.net>2008-01-28 18:06:08 -0500
commit09d4fad6e8972061fbb0e2e5ae9e686d84f57af6 (patch)
tree48c5151452013f7b551cf38743bebf26cf535a08
parentabe3ed14d39adcea9ae186cf741b15d11544458f (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.c2
-rw-r--r--drivers/net/wireless/libertas/if_cs.c3
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;
377out: 380out:
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);