Skip to content

Commit

Permalink
[PATCH] libertas: pass boot2 version to firmware
Browse files Browse the repository at this point in the history
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 <luisca@cozybit.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
  • Loading branch information
Luis Carlos Cobo authored and David S. Miller committed Oct 10, 2007
1 parent 2afc0c5 commit 63f0023
Show file tree
Hide file tree
Showing 6 changed files with 29 additions and 0 deletions.
15 changes: 15 additions & 0 deletions drivers/net/wireless/libertas/cmd.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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) +
Expand Down
1 change: 1 addition & 0 deletions drivers/net/wireless/libertas/dev.h
Original file line number Diff line number Diff line change
Expand Up @@ -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];

Expand Down
2 changes: 2 additions & 0 deletions drivers/net/wireless/libertas/host.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
6 changes: 6 additions & 0 deletions drivers/net/wireless/libertas/hostcmd.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down
1 change: 1 addition & 0 deletions drivers/net/wireless/libertas/if_usb.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
4 changes: 4 additions & 0 deletions drivers/net/wireless/libertas/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit 63f0023

Please sign in to comment.