diff options
author | David Woodhouse <dwmw2@infradead.org> | 2007-12-15 01:52:54 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-01-28 18:07:31 -0500 |
commit | 183aeac1c49869ba9a14c7ead86ce268da397a0e (patch) | |
tree | ed78bb49daf3570b5b99a1d93408261b9680478e /drivers/net/wireless/libertas/cmd.c | |
parent | c4ab41272b55a08741d2e68966aae700e2e6d597 (diff) |
libertas: introduce and use lbs_complete_command() for command completion
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/libertas/cmd.c')
-rw-r--r-- | drivers/net/wireless/libertas/cmd.c | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/drivers/net/wireless/libertas/cmd.c b/drivers/net/wireless/libertas/cmd.c index 4ffb84a403b3..9c73902ca86f 100644 --- a/drivers/net/wireless/libertas/cmd.c +++ b/drivers/net/wireless/libertas/cmd.c | |||
@@ -1230,9 +1230,7 @@ static int lbs_submit_command(struct lbs_private *priv, | |||
1230 | if (ret) { | 1230 | if (ret) { |
1231 | lbs_pr_info("DNLD_CMD: hw_host_to_card failed: %d\n", ret); | 1231 | lbs_pr_info("DNLD_CMD: hw_host_to_card failed: %d\n", ret); |
1232 | spin_lock_irqsave(&priv->driver_lock, flags); | 1232 | spin_lock_irqsave(&priv->driver_lock, flags); |
1233 | priv->cur_cmd_retcode = ret; | 1233 | lbs_complete_command(priv, priv->cur_cmd, ret); |
1234 | __lbs_cleanup_and_insert_cmd(priv, priv->cur_cmd); | ||
1235 | priv->cur_cmd = NULL; | ||
1236 | spin_unlock_irqrestore(&priv->driver_lock, flags); | 1234 | spin_unlock_irqrestore(&priv->driver_lock, flags); |
1237 | goto done; | 1235 | goto done; |
1238 | } | 1236 | } |
@@ -1275,8 +1273,8 @@ static int lbs_cmd_mac_control(struct lbs_private *priv, | |||
1275 | * This function inserts command node to cmdfreeq | 1273 | * This function inserts command node to cmdfreeq |
1276 | * after cleans it. Requires priv->driver_lock held. | 1274 | * after cleans it. Requires priv->driver_lock held. |
1277 | */ | 1275 | */ |
1278 | void __lbs_cleanup_and_insert_cmd(struct lbs_private *priv, | 1276 | static void __lbs_cleanup_and_insert_cmd(struct lbs_private *priv, |
1279 | struct cmd_ctrl_node *ptempcmd) | 1277 | struct cmd_ctrl_node *ptempcmd) |
1280 | { | 1278 | { |
1281 | 1279 | ||
1282 | if (!ptempcmd) | 1280 | if (!ptempcmd) |
@@ -1296,6 +1294,15 @@ static void lbs_cleanup_and_insert_cmd(struct lbs_private *priv, | |||
1296 | spin_unlock_irqrestore(&priv->driver_lock, flags); | 1294 | spin_unlock_irqrestore(&priv->driver_lock, flags); |
1297 | } | 1295 | } |
1298 | 1296 | ||
1297 | void lbs_complete_command(struct lbs_private *priv, struct cmd_ctrl_node *cmd, | ||
1298 | int result) | ||
1299 | { | ||
1300 | if (cmd == priv->cur_cmd) | ||
1301 | priv->cur_cmd_retcode = result; | ||
1302 | __lbs_cleanup_and_insert_cmd(priv, cmd); | ||
1303 | priv->cur_cmd = NULL; | ||
1304 | } | ||
1305 | |||
1299 | int lbs_set_radio_control(struct lbs_private *priv) | 1306 | int lbs_set_radio_control(struct lbs_private *priv) |
1300 | { | 1307 | { |
1301 | int ret = 0; | 1308 | int ret = 0; |
@@ -1901,7 +1908,9 @@ int lbs_execute_next_command(struct lbs_private *priv) | |||
1901 | lbs_deb_host( | 1908 | lbs_deb_host( |
1902 | "EXEC_NEXT_CMD: ignore ENTER_PS cmd\n"); | 1909 | "EXEC_NEXT_CMD: ignore ENTER_PS cmd\n"); |
1903 | list_del(&cmdnode->list); | 1910 | list_del(&cmdnode->list); |
1904 | lbs_cleanup_and_insert_cmd(priv, cmdnode); | 1911 | spin_lock_irqsave(&priv->driver_lock, flags); |
1912 | lbs_complete_command(priv, cmdnode, 0); | ||
1913 | spin_unlock_irqrestore(&priv->driver_lock, flags); | ||
1905 | 1914 | ||
1906 | ret = 0; | 1915 | ret = 0; |
1907 | goto done; | 1916 | goto done; |
@@ -1912,7 +1921,9 @@ int lbs_execute_next_command(struct lbs_private *priv) | |||
1912 | lbs_deb_host( | 1921 | lbs_deb_host( |
1913 | "EXEC_NEXT_CMD: ignore EXIT_PS cmd in sleep\n"); | 1922 | "EXEC_NEXT_CMD: ignore EXIT_PS cmd in sleep\n"); |
1914 | list_del(&cmdnode->list); | 1923 | list_del(&cmdnode->list); |
1915 | lbs_cleanup_and_insert_cmd(priv, cmdnode); | 1924 | spin_lock_irqsave(&priv->driver_lock, flags); |
1925 | lbs_complete_command(priv, cmdnode, 0); | ||
1926 | spin_unlock_irqrestore(&priv->driver_lock, flags); | ||
1916 | priv->needtowakeup = 1; | 1927 | priv->needtowakeup = 1; |
1917 | 1928 | ||
1918 | ret = 0; | 1929 | ret = 0; |