aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/libertas/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/libertas/main.c')
-rw-r--r--drivers/net/wireless/libertas/main.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c
index 89575e448015..a58a12352672 100644
--- a/drivers/net/wireless/libertas/main.c
+++ b/drivers/net/wireless/libertas/main.c
@@ -1002,9 +1002,17 @@ static int lbs_setup_firmware(struct lbs_private *priv)
1002{ 1002{
1003 int ret = -1; 1003 int ret = -1;
1004 s16 curlevel = 0, minlevel = 0, maxlevel = 0; 1004 s16 curlevel = 0, minlevel = 0, maxlevel = 0;
1005 struct cmd_header cmd;
1005 1006
1006 lbs_deb_enter(LBS_DEB_FW); 1007 lbs_deb_enter(LBS_DEB_FW);
1007 1008
1009 if (priv->fn_init_required) {
1010 memset(&cmd, 0, sizeof(cmd));
1011 if (__lbs_cmd(priv, CMD_FUNC_INIT, &cmd, sizeof(cmd),
1012 lbs_cmd_copyback, (unsigned long) &cmd))
1013 lbs_pr_alert("CMD_FUNC_INIT command failed\n");
1014 }
1015
1008 /* Read MAC address from firmware */ 1016 /* Read MAC address from firmware */
1009 memset(priv->current_addr, 0xff, ETH_ALEN); 1017 memset(priv->current_addr, 0xff, ETH_ALEN);
1010 ret = lbs_update_hw_spec(priv); 1018 ret = lbs_update_hw_spec(priv);
@@ -1192,6 +1200,9 @@ struct lbs_private *lbs_add_card(void *card, struct device *dmdev)
1192 priv->mesh_open = 0; 1200 priv->mesh_open = 0;
1193 priv->infra_open = 0; 1201 priv->infra_open = 0;
1194 1202
1203 priv->fn_init_required = 0;
1204 priv->fn_shutdown_required = 0;
1205
1195 /* Setup the OS Interface to our functions */ 1206 /* Setup the OS Interface to our functions */
1196 dev->netdev_ops = &lbs_netdev_ops; 1207 dev->netdev_ops = &lbs_netdev_ops;
1197 dev->watchdog_timeo = 5 * HZ; 1208 dev->watchdog_timeo = 5 * HZ;
@@ -1373,11 +1384,20 @@ void lbs_stop_card(struct lbs_private *priv)
1373 struct net_device *dev; 1384 struct net_device *dev;
1374 struct cmd_ctrl_node *cmdnode; 1385 struct cmd_ctrl_node *cmdnode;
1375 unsigned long flags; 1386 unsigned long flags;
1387 struct cmd_header cmd;
1376 1388
1377 lbs_deb_enter(LBS_DEB_MAIN); 1389 lbs_deb_enter(LBS_DEB_MAIN);
1378 1390
1379 if (!priv) 1391 if (!priv)
1380 goto out; 1392 goto out;
1393
1394 if (priv->fn_shutdown_required) {
1395 memset(&cmd, 0, sizeof(cmd));
1396 if (__lbs_cmd(priv, CMD_FUNC_SHUTDOWN, &cmd, sizeof(cmd),
1397 lbs_cmd_copyback, (unsigned long) &cmd))
1398 lbs_pr_alert("CMD_FUNC_SHUTDOWN command failed\n");
1399 }
1400
1381 dev = priv->dev; 1401 dev = priv->dev;
1382 1402
1383 netif_stop_queue(dev); 1403 netif_stop_queue(dev);