diff options
Diffstat (limited to 'drivers/net/wireless/libertas/main.c')
-rw-r--r-- | drivers/net/wireless/libertas/main.c | 20 |
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); |