Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=63f0023bc34073bea8452a4770540c954f98208f
Commit:     63f0023bc34073bea8452a4770540c954f98208f
Parent:     2afc0c5d71a3dec6d35f3a234ed986d635ef41ad
Author:     Luis Carlos Cobo <[EMAIL PROTECTED]>
AuthorDate: Thu Aug 2 13:19:24 2007 -0400
Committer:  David S. Miller <[EMAIL PROTECTED]>
CommitDate: Wed Oct 10 16:50:15 2007 -0700

    [PATCH] libertas: pass boot2 version to firmware
    
    Boot2 version used to be hardcoded in the uploaded firmware,
    this patch preserves the boot2 version before uploading firmware
    and sends it to the firmware again on resume.
    
    Signed-off-by: Luis Carlos Cobo <[EMAIL PROTECTED]>
    Signed-off-by: John W. Linville <[EMAIL PROTECTED]>
---
 drivers/net/wireless/libertas/cmd.c     |   15 +++++++++++++++
 drivers/net/wireless/libertas/dev.h     |    1 +
 drivers/net/wireless/libertas/host.h    |    2 ++
 drivers/net/wireless/libertas/hostcmd.h |    6 ++++++
 drivers/net/wireless/libertas/if_usb.c  |    1 +
 drivers/net/wireless/libertas/main.c    |    4 ++++
 6 files changed, 29 insertions(+), 0 deletions(-)

diff --git a/drivers/net/wireless/libertas/cmd.c 
b/drivers/net/wireless/libertas/cmd.c
index 72e8e27..98092b9 100644
--- a/drivers/net/wireless/libertas/cmd.c
+++ b/drivers/net/wireless/libertas/cmd.c
@@ -901,6 +901,17 @@ static int wlan_cmd_mesh_access(wlan_private * priv,
        return 0;
 }
 
+static int wlan_cmd_set_boot2_ver(wlan_private * priv,
+                               struct cmd_ds_command *cmd,
+                               u16 cmd_action, void *pdata_buf)
+{
+       struct cmd_ds_set_boot2_ver *boot2_ver = &cmd->params.boot2_ver;
+       cmd->command = cpu_to_le16(CMD_SET_BOOT2_VER);
+       cmd->size = cpu_to_le16(sizeof(struct cmd_ds_set_boot2_ver) + S_DS_GEN);
+       boot2_ver->version = priv->boot2_version;
+       return 0;
+}
+
 void libertas_queue_cmd(wlan_adapter * adapter, struct cmd_ctrl_node *cmdnode, 
u8 addtail)
 {
        unsigned long flags;
@@ -1372,6 +1383,10 @@ int libertas_prepare_and_send_command(wlan_private * 
priv,
                ret = wlan_cmd_mesh_access(priv, cmdptr, cmd_action, pdata_buf);
                break;
 
+       case CMD_SET_BOOT2_VER:
+               ret = wlan_cmd_set_boot2_ver(priv, cmdptr, cmd_action, 
pdata_buf);
+               break;
+
        case CMD_GET_TSF:
                cmdptr->command = cpu_to_le16(CMD_GET_TSF);
                cmdptr->size = cpu_to_le16(sizeof(struct cmd_ds_get_tsf) +
diff --git a/drivers/net/wireless/libertas/dev.h 
b/drivers/net/wireless/libertas/dev.h
index 762c479..a3c94d7 100644
--- a/drivers/net/wireless/libertas/dev.h
+++ b/drivers/net/wireless/libertas/dev.h
@@ -104,6 +104,7 @@ struct _wlan_private {
        int mesh_open;
        int infra_open;
        int mesh_autostart_enabled;
+       __le16 boot2_version;
 
        char name[DEV_NAME_LEN];
 
diff --git a/drivers/net/wireless/libertas/host.h 
b/drivers/net/wireless/libertas/host.h
index 4ccdbf9..68fa11b 100644
--- a/drivers/net/wireless/libertas/host.h
+++ b/drivers/net/wireless/libertas/host.h
@@ -114,6 +114,8 @@
 
 #define CMD_MESH_ACCESS               0x009b
 
+#define CMD_SET_BOOT2_VER                 0x00a5
+
 /* For the IEEE Power Save */
 #define CMD_SUBCMD_ENTER_PS               0x0030
 #define CMD_SUBCMD_EXIT_PS                0x0031
diff --git a/drivers/net/wireless/libertas/hostcmd.h 
b/drivers/net/wireless/libertas/hostcmd.h
index 52884ea..e1045dc 100644
--- a/drivers/net/wireless/libertas/hostcmd.h
+++ b/drivers/net/wireless/libertas/hostcmd.h
@@ -410,6 +410,11 @@ struct cmd_ds_802_11_monitor_mode {
        u16 mode;
 };
 
+struct cmd_ds_set_boot2_ver {
+       u16 action;
+       u16 version;
+};
+
 struct cmd_ds_802_11_ps_mode {
        __le16 action;
        __le16 nullpktinterval;
@@ -660,6 +665,7 @@ struct cmd_ds_command {
                struct cmd_ds_bt_access bt;
                struct cmd_ds_fwt_access fwt;
                struct cmd_ds_mesh_access mesh;
+               struct cmd_ds_set_boot2_ver boot2_ver;
                struct cmd_ds_get_tsf gettsf;
                struct cmd_ds_802_11_subscribe_event subscribe_event;
        } params;
diff --git a/drivers/net/wireless/libertas/if_usb.c 
b/drivers/net/wireless/libertas/if_usb.c
index d28802f..53d4796 100644
--- a/drivers/net/wireless/libertas/if_usb.c
+++ b/drivers/net/wireless/libertas/if_usb.c
@@ -219,6 +219,7 @@ static int if_usb_probe(struct usb_interface *intf,
        priv->hw_host_to_card = if_usb_host_to_card;
        priv->hw_get_int_status = if_usb_get_int_status;
        priv->hw_read_event_cause = if_usb_read_event_cause;
+       priv->boot2_version = udev->descriptor.bcdDevice;
 
        if (libertas_activate_card(priv))
                goto err_activate_card;
diff --git a/drivers/net/wireless/libertas/main.c 
b/drivers/net/wireless/libertas/main.c
index bcd8450..e20cd4e 100644
--- a/drivers/net/wireless/libertas/main.c
+++ b/drivers/net/wireless/libertas/main.c
@@ -981,6 +981,10 @@ static int wlan_setup_station_hw(wlan_private * priv)
                priv->mesh_autostart_enabled = 0;
        }
 
+       /* Set the boot2 version in firmware */
+       ret = libertas_prepare_and_send_command(priv, CMD_SET_BOOT2_VER,
+                                   0, CMD_OPTION_WAITFORRSP, 0, NULL);
+
        ret = 0;
 done:
        lbs_deb_leave_args(LBS_DEB_FW, "ret %d", ret);
-
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