Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=09d4fad6e8972061fbb0e2e5ae9e686d84f57af6
Commit:     09d4fad6e8972061fbb0e2e5ae9e686d84f57af6
Parent:     abe3ed14d39adcea9ae186cf741b15d11544458f
Author:     Holger Schurig <[EMAIL PROTECTED]>
AuthorDate: Thu Dec 6 13:50:30 2007 +0100
Committer:  David S. Miller <[EMAIL PROTECTED]>
CommitDate: Mon Jan 28 15:06:08 2008 -0800

    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 <[EMAIL PROTECTED]>
    Signed-off-by: David Woodhouse <[EMAIL PROTECTED]>
    Signed-off-by: John W. Linville <[EMAIL PROTECTED]>
---
 drivers/net/wireless/libertas/cmdresp.c |    2 +-
 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 6a43de7..22a6973 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)
 
        if (adapter->cur_cmd->pdata_size) {
                struct cmd_ds_gen *r = (struct cmd_ds_gen *)resp;
-               u16 sz = cpu_to_le16(resp->size);
+               u16 sz = cpu_to_le16(resp->size) - S_DS_GEN;
                if (sz > *adapter->cur_cmd->pdata_size) {
                        lbs_pr_err("response 0x%04x doesn't fit into "
                                "buffer (%d > %d)\n", respcmd,
diff --git a/drivers/net/wireless/libertas/if_cs.c 
b/drivers/net/wireless/libertas/if_cs.c
index 54b1ba3..8508260 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)
        if (*len & 1)
                data[*len-1] = if_cs_read8(priv->card, IF_CS_C_CMD);
 
+       /* This is a workaround for a firmware that reports too much
+        * bytes */
+       *len -= 8;
        ret = 0;
 out:
        lbs_deb_leave_args(LBS_DEB_CS, "ret %d, len %d", ret, *len);
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to