aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/libertas/cmd.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/libertas/cmd.c')
-rw-r--r--drivers/net/wireless/libertas/cmd.c315
1 files changed, 172 insertions, 143 deletions
diff --git a/drivers/net/wireless/libertas/cmd.c b/drivers/net/wireless/libertas/cmd.c
index 70745928f3f8..71c8f3fccfa1 100644
--- a/drivers/net/wireless/libertas/cmd.c
+++ b/drivers/net/wireless/libertas/cmd.c
@@ -1,7 +1,7 @@
1/** 1/*
2 * This file contains the handling of command. 2 * This file contains the handling of command.
3 * It prepares command and sends it to firmware when it is ready. 3 * It prepares command and sends it to firmware when it is ready.
4 */ 4 */
5 5
6#include <linux/kfifo.h> 6#include <linux/kfifo.h>
7#include <linux/sched.h> 7#include <linux/sched.h>
@@ -16,14 +16,14 @@
16#define CAL_RSSI(snr, nf) ((s32)((s32)(snr) + CAL_NF(nf))) 16#define CAL_RSSI(snr, nf) ((s32)((s32)(snr) + CAL_NF(nf)))
17 17
18/** 18/**
19 * @brief Simple callback that copies response back into command 19 * lbs_cmd_copyback - Simple callback that copies response back into command
20 * 20 *
21 * @param priv A pointer to struct lbs_private structure 21 * @priv: A pointer to &struct lbs_private structure
22 * @param extra A pointer to the original command structure for which 22 * @extra: A pointer to the original command structure for which
23 * 'resp' is a response 23 * 'resp' is a response
24 * @param resp A pointer to the command response 24 * @resp: A pointer to the command response
25 * 25 *
26 * @return 0 on success, error on failure 26 * returns: 0 on success, error on failure
27 */ 27 */
28int lbs_cmd_copyback(struct lbs_private *priv, unsigned long extra, 28int lbs_cmd_copyback(struct lbs_private *priv, unsigned long extra,
29 struct cmd_header *resp) 29 struct cmd_header *resp)
@@ -38,15 +38,15 @@ int lbs_cmd_copyback(struct lbs_private *priv, unsigned long extra,
38EXPORT_SYMBOL_GPL(lbs_cmd_copyback); 38EXPORT_SYMBOL_GPL(lbs_cmd_copyback);
39 39
40/** 40/**
41 * @brief Simple callback that ignores the result. Use this if 41 * lbs_cmd_async_callback - Simple callback that ignores the result.
42 * you just want to send a command to the hardware, but don't 42 * Use this if you just want to send a command to the hardware, but don't
43 * care for the result. 43 * care for the result.
44 * 44 *
45 * @param priv ignored 45 * @priv: ignored
46 * @param extra ignored 46 * @extra: ignored
47 * @param resp ignored 47 * @resp: ignored
48 * 48 *
49 * @return 0 for success 49 * returns: 0 for success
50 */ 50 */
51static int lbs_cmd_async_callback(struct lbs_private *priv, unsigned long extra, 51static int lbs_cmd_async_callback(struct lbs_private *priv, unsigned long extra,
52 struct cmd_header *resp) 52 struct cmd_header *resp)
@@ -56,10 +56,11 @@ static int lbs_cmd_async_callback(struct lbs_private *priv, unsigned long extra,
56 56
57 57
58/** 58/**
59 * @brief Checks whether a command is allowed in Power Save mode 59 * is_command_allowed_in_ps - tests if a command is allowed in Power Save mode
60 *
61 * @cmd: the command ID
60 * 62 *
61 * @param command the command ID 63 * returns: 1 if allowed, 0 if not allowed
62 * @return 1 if allowed, 0 if not allowed
63 */ 64 */
64static u8 is_command_allowed_in_ps(u16 cmd) 65static u8 is_command_allowed_in_ps(u16 cmd)
65{ 66{
@@ -75,11 +76,12 @@ static u8 is_command_allowed_in_ps(u16 cmd)
75} 76}
76 77
77/** 78/**
78 * @brief Updates the hardware details like MAC address and regulatory region 79 * lbs_update_hw_spec - Updates the hardware details like MAC address
80 * and regulatory region
79 * 81 *
80 * @param priv A pointer to struct lbs_private structure 82 * @priv: A pointer to &struct lbs_private structure
81 * 83 *
82 * @return 0 on success, error on failure 84 * returns: 0 on success, error on failure
83 */ 85 */
84int lbs_update_hw_spec(struct lbs_private *priv) 86int lbs_update_hw_spec(struct lbs_private *priv)
85{ 87{
@@ -108,7 +110,7 @@ int lbs_update_hw_spec(struct lbs_private *priv)
108 * CF card firmware 5.0.16p0: cap 0x00000303 110 * CF card firmware 5.0.16p0: cap 0x00000303
109 * USB dongle firmware 5.110.17p2: cap 0x00000303 111 * USB dongle firmware 5.110.17p2: cap 0x00000303
110 */ 112 */
111 lbs_pr_info("%pM, fw %u.%u.%up%u, cap 0x%08x\n", 113 netdev_info(priv->dev, "%pM, fw %u.%u.%up%u, cap 0x%08x\n",
112 cmd.permanentaddr, 114 cmd.permanentaddr,
113 priv->fwrelease >> 24 & 0xff, 115 priv->fwrelease >> 24 & 0xff,
114 priv->fwrelease >> 16 & 0xff, 116 priv->fwrelease >> 16 & 0xff,
@@ -139,15 +141,20 @@ int lbs_update_hw_spec(struct lbs_private *priv)
139 /* if it's unidentified region code, use the default (USA) */ 141 /* if it's unidentified region code, use the default (USA) */
140 if (i >= MRVDRV_MAX_REGION_CODE) { 142 if (i >= MRVDRV_MAX_REGION_CODE) {
141 priv->regioncode = 0x10; 143 priv->regioncode = 0x10;
142 lbs_pr_info("unidentified region code; using the default (USA)\n"); 144 netdev_info(priv->dev,
145 "unidentified region code; using the default (USA)\n");
143 } 146 }
144 147
145 if (priv->current_addr[0] == 0xff) 148 if (priv->current_addr[0] == 0xff)
146 memmove(priv->current_addr, cmd.permanentaddr, ETH_ALEN); 149 memmove(priv->current_addr, cmd.permanentaddr, ETH_ALEN);
147 150
148 memcpy(priv->dev->dev_addr, priv->current_addr, ETH_ALEN); 151 if (!priv->copied_hwaddr) {
149 if (priv->mesh_dev) 152 memcpy(priv->dev->dev_addr, priv->current_addr, ETH_ALEN);
150 memcpy(priv->mesh_dev->dev_addr, priv->current_addr, ETH_ALEN); 153 if (priv->mesh_dev)
154 memcpy(priv->mesh_dev->dev_addr,
155 priv->current_addr, ETH_ALEN);
156 priv->copied_hwaddr = 1;
157 }
151 158
152out: 159out:
153 lbs_deb_leave(LBS_DEB_CMD); 160 lbs_deb_leave(LBS_DEB_CMD);
@@ -177,6 +184,14 @@ int lbs_host_sleep_cfg(struct lbs_private *priv, uint32_t criteria,
177 struct cmd_ds_host_sleep cmd_config; 184 struct cmd_ds_host_sleep cmd_config;
178 int ret; 185 int ret;
179 186
187 /*
188 * Certain firmware versions do not support EHS_REMOVE_WAKEUP command
189 * and the card will return a failure. Since we need to be
190 * able to reset the mask, in those cases we set a 0 mask instead.
191 */
192 if (criteria == EHS_REMOVE_WAKEUP && !priv->ehs_remove_supported)
193 criteria = 0;
194
180 cmd_config.hdr.size = cpu_to_le16(sizeof(cmd_config)); 195 cmd_config.hdr.size = cpu_to_le16(sizeof(cmd_config));
181 cmd_config.criteria = cpu_to_le32(criteria); 196 cmd_config.criteria = cpu_to_le32(criteria);
182 cmd_config.gpio = priv->wol_gpio; 197 cmd_config.gpio = priv->wol_gpio;
@@ -197,7 +212,7 @@ int lbs_host_sleep_cfg(struct lbs_private *priv, uint32_t criteria,
197 (uint8_t *)&cmd_config.wol_conf, 212 (uint8_t *)&cmd_config.wol_conf,
198 sizeof(struct wol_config)); 213 sizeof(struct wol_config));
199 } else { 214 } else {
200 lbs_pr_info("HOST_SLEEP_CFG failed %d\n", ret); 215 netdev_info(priv->dev, "HOST_SLEEP_CFG failed %d\n", ret);
201 } 216 }
202 217
203 return ret; 218 return ret;
@@ -205,14 +220,14 @@ int lbs_host_sleep_cfg(struct lbs_private *priv, uint32_t criteria,
205EXPORT_SYMBOL_GPL(lbs_host_sleep_cfg); 220EXPORT_SYMBOL_GPL(lbs_host_sleep_cfg);
206 221
207/** 222/**
208 * @brief Sets the Power Save mode 223 * lbs_set_ps_mode - Sets the Power Save mode
209 * 224 *
210 * @param priv A pointer to struct lbs_private structure 225 * @priv: A pointer to &struct lbs_private structure
211 * @param cmd_action The Power Save operation (PS_MODE_ACTION_ENTER_PS or 226 * @cmd_action: The Power Save operation (PS_MODE_ACTION_ENTER_PS or
212 * PS_MODE_ACTION_EXIT_PS) 227 * PS_MODE_ACTION_EXIT_PS)
213 * @param block Whether to block on a response or not 228 * @block: Whether to block on a response or not
214 * 229 *
215 * @return 0 on success, error on failure 230 * returns: 0 on success, error on failure
216 */ 231 */
217int lbs_set_ps_mode(struct lbs_private *priv, u16 cmd_action, bool block) 232int lbs_set_ps_mode(struct lbs_private *priv, u16 cmd_action, bool block)
218{ 233{
@@ -300,7 +315,7 @@ static int lbs_wait_for_ds_awake(struct lbs_private *priv)
300 if (priv->is_deep_sleep) { 315 if (priv->is_deep_sleep) {
301 if (!wait_event_interruptible_timeout(priv->ds_awake_q, 316 if (!wait_event_interruptible_timeout(priv->ds_awake_q,
302 !priv->is_deep_sleep, (10 * HZ))) { 317 !priv->is_deep_sleep, (10 * HZ))) {
303 lbs_pr_err("ds_awake_q: timer expired\n"); 318 netdev_err(priv->dev, "ds_awake_q: timer expired\n");
304 ret = -1; 319 ret = -1;
305 } 320 }
306 } 321 }
@@ -325,7 +340,7 @@ int lbs_set_deep_sleep(struct lbs_private *priv, int deep_sleep)
325 netif_carrier_off(priv->dev); 340 netif_carrier_off(priv->dev);
326 } 341 }
327 } else { 342 } else {
328 lbs_pr_err("deep sleep: already enabled\n"); 343 netdev_err(priv->dev, "deep sleep: already enabled\n");
329 } 344 }
330 } else { 345 } else {
331 if (priv->is_deep_sleep) { 346 if (priv->is_deep_sleep) {
@@ -335,8 +350,8 @@ int lbs_set_deep_sleep(struct lbs_private *priv, int deep_sleep)
335 if (!ret) { 350 if (!ret) {
336 ret = lbs_wait_for_ds_awake(priv); 351 ret = lbs_wait_for_ds_awake(priv);
337 if (ret) 352 if (ret)
338 lbs_pr_err("deep sleep: wakeup" 353 netdev_err(priv->dev,
339 "failed\n"); 354 "deep sleep: wakeup failed\n");
340 } 355 }
341 } 356 }
342 } 357 }
@@ -370,8 +385,9 @@ int lbs_set_host_sleep(struct lbs_private *priv, int host_sleep)
370 ret = lbs_host_sleep_cfg(priv, priv->wol_criteria, 385 ret = lbs_host_sleep_cfg(priv, priv->wol_criteria,
371 (struct wol_config *)NULL); 386 (struct wol_config *)NULL);
372 if (ret) { 387 if (ret) {
373 lbs_pr_info("Host sleep configuration failed: " 388 netdev_info(priv->dev,
374 "%d\n", ret); 389 "Host sleep configuration failed: %d\n",
390 ret);
375 return ret; 391 return ret;
376 } 392 }
377 if (priv->psstate == PS_STATE_FULL_POWER) { 393 if (priv->psstate == PS_STATE_FULL_POWER) {
@@ -381,19 +397,21 @@ int lbs_set_host_sleep(struct lbs_private *priv, int host_sleep)
381 sizeof(cmd), 397 sizeof(cmd),
382 lbs_ret_host_sleep_activate, 0); 398 lbs_ret_host_sleep_activate, 0);
383 if (ret) 399 if (ret)
384 lbs_pr_info("HOST_SLEEP_ACTIVATE " 400 netdev_info(priv->dev,
385 "failed: %d\n", ret); 401 "HOST_SLEEP_ACTIVATE failed: %d\n",
402 ret);
386 } 403 }
387 404
388 if (!wait_event_interruptible_timeout( 405 if (!wait_event_interruptible_timeout(
389 priv->host_sleep_q, 406 priv->host_sleep_q,
390 priv->is_host_sleep_activated, 407 priv->is_host_sleep_activated,
391 (10 * HZ))) { 408 (10 * HZ))) {
392 lbs_pr_err("host_sleep_q: timer expired\n"); 409 netdev_err(priv->dev,
410 "host_sleep_q: timer expired\n");
393 ret = -1; 411 ret = -1;
394 } 412 }
395 } else { 413 } else {
396 lbs_pr_err("host sleep: already enabled\n"); 414 netdev_err(priv->dev, "host sleep: already enabled\n");
397 } 415 }
398 } else { 416 } else {
399 if (priv->is_host_sleep_activated) 417 if (priv->is_host_sleep_activated)
@@ -405,13 +423,13 @@ int lbs_set_host_sleep(struct lbs_private *priv, int host_sleep)
405} 423}
406 424
407/** 425/**
408 * @brief Set an SNMP MIB value 426 * lbs_set_snmp_mib - Set an SNMP MIB value
409 * 427 *
410 * @param priv A pointer to struct lbs_private structure 428 * @priv: A pointer to &struct lbs_private structure
411 * @param oid The OID to set in the firmware 429 * @oid: The OID to set in the firmware
412 * @param val Value to set the OID to 430 * @val: Value to set the OID to
413 * 431 *
414 * @return 0 on success, error on failure 432 * returns: 0 on success, error on failure
415 */ 433 */
416int lbs_set_snmp_mib(struct lbs_private *priv, u32 oid, u16 val) 434int lbs_set_snmp_mib(struct lbs_private *priv, u32 oid, u16 val)
417{ 435{
@@ -455,13 +473,13 @@ out:
455} 473}
456 474
457/** 475/**
458 * @brief Get an SNMP MIB value 476 * lbs_get_snmp_mib - Get an SNMP MIB value
459 * 477 *
460 * @param priv A pointer to struct lbs_private structure 478 * @priv: A pointer to &struct lbs_private structure
461 * @param oid The OID to retrieve from the firmware 479 * @oid: The OID to retrieve from the firmware
462 * @param out_val Location for the returned value 480 * @out_val: Location for the returned value
463 * 481 *
464 * @return 0 on success, error on failure 482 * returns: 0 on success, error on failure
465 */ 483 */
466int lbs_get_snmp_mib(struct lbs_private *priv, u32 oid, u16 *out_val) 484int lbs_get_snmp_mib(struct lbs_private *priv, u32 oid, u16 *out_val)
467{ 485{
@@ -498,14 +516,14 @@ out:
498} 516}
499 517
500/** 518/**
501 * @brief Get the min, max, and current TX power 519 * lbs_get_tx_power - Get the min, max, and current TX power
502 * 520 *
503 * @param priv A pointer to struct lbs_private structure 521 * @priv: A pointer to &struct lbs_private structure
504 * @param curlevel Current power level in dBm 522 * @curlevel: Current power level in dBm
505 * @param minlevel Minimum supported power level in dBm (optional) 523 * @minlevel: Minimum supported power level in dBm (optional)
506 * @param maxlevel Maximum supported power level in dBm (optional) 524 * @maxlevel: Maximum supported power level in dBm (optional)
507 * 525 *
508 * @return 0 on success, error on failure 526 * returns: 0 on success, error on failure
509 */ 527 */
510int lbs_get_tx_power(struct lbs_private *priv, s16 *curlevel, s16 *minlevel, 528int lbs_get_tx_power(struct lbs_private *priv, s16 *curlevel, s16 *minlevel,
511 s16 *maxlevel) 529 s16 *maxlevel)
@@ -533,12 +551,12 @@ int lbs_get_tx_power(struct lbs_private *priv, s16 *curlevel, s16 *minlevel,
533} 551}
534 552
535/** 553/**
536 * @brief Set the TX power 554 * lbs_set_tx_power - Set the TX power
537 * 555 *
538 * @param priv A pointer to struct lbs_private structure 556 * @priv: A pointer to &struct lbs_private structure
539 * @param dbm The desired power level in dBm 557 * @dbm: The desired power level in dBm
540 * 558 *
541 * @return 0 on success, error on failure 559 * returns: 0 on success, error on failure
542 */ 560 */
543int lbs_set_tx_power(struct lbs_private *priv, s16 dbm) 561int lbs_set_tx_power(struct lbs_private *priv, s16 dbm)
544{ 562{
@@ -561,12 +579,13 @@ int lbs_set_tx_power(struct lbs_private *priv, s16 dbm)
561} 579}
562 580
563/** 581/**
564 * @brief Enable or disable monitor mode (only implemented on OLPC usb8388 FW) 582 * lbs_set_monitor_mode - Enable or disable monitor mode
583 * (only implemented on OLPC usb8388 FW)
565 * 584 *
566 * @param priv A pointer to struct lbs_private structure 585 * @priv: A pointer to &struct lbs_private structure
567 * @param enable 1 to enable monitor mode, 0 to disable 586 * @enable: 1 to enable monitor mode, 0 to disable
568 * 587 *
569 * @return 0 on success, error on failure 588 * returns: 0 on success, error on failure
570 */ 589 */
571int lbs_set_monitor_mode(struct lbs_private *priv, int enable) 590int lbs_set_monitor_mode(struct lbs_private *priv, int enable)
572{ 591{
@@ -592,11 +611,11 @@ int lbs_set_monitor_mode(struct lbs_private *priv, int enable)
592} 611}
593 612
594/** 613/**
595 * @brief Get the radio channel 614 * lbs_get_channel - Get the radio channel
596 * 615 *
597 * @param priv A pointer to struct lbs_private structure 616 * @priv: A pointer to &struct lbs_private structure
598 * 617 *
599 * @return The channel on success, error on failure 618 * returns: The channel on success, error on failure
600 */ 619 */
601static int lbs_get_channel(struct lbs_private *priv) 620static int lbs_get_channel(struct lbs_private *priv)
602{ 621{
@@ -638,12 +657,12 @@ int lbs_update_channel(struct lbs_private *priv)
638} 657}
639 658
640/** 659/**
641 * @brief Set the radio channel 660 * lbs_set_channel - Set the radio channel
642 * 661 *
643 * @param priv A pointer to struct lbs_private structure 662 * @priv: A pointer to &struct lbs_private structure
644 * @param channel The desired channel, or 0 to clear a locked channel 663 * @channel: The desired channel, or 0 to clear a locked channel
645 * 664 *
646 * @return 0 on success, error on failure 665 * returns: 0 on success, error on failure
647 */ 666 */
648int lbs_set_channel(struct lbs_private *priv, u8 channel) 667int lbs_set_channel(struct lbs_private *priv, u8 channel)
649{ 668{
@@ -674,12 +693,13 @@ out:
674} 693}
675 694
676/** 695/**
677 * @brief Get current RSSI and noise floor 696 * lbs_get_rssi - Get current RSSI and noise floor
678 * 697 *
679 * @param priv A pointer to struct lbs_private structure 698 * @priv: A pointer to &struct lbs_private structure
680 * @param rssi On successful return, signal level in mBm 699 * @rssi: On successful return, signal level in mBm
700 * @nf: On successful return, Noise floor
681 * 701 *
682 * @return The channel on success, error on failure 702 * returns: The channel on success, error on failure
683 */ 703 */
684int lbs_get_rssi(struct lbs_private *priv, s8 *rssi, s8 *nf) 704int lbs_get_rssi(struct lbs_private *priv, s8 *rssi, s8 *nf)
685{ 705{
@@ -707,13 +727,14 @@ int lbs_get_rssi(struct lbs_private *priv, s8 *rssi, s8 *nf)
707} 727}
708 728
709/** 729/**
710 * @brief Send regulatory and 802.11d domain information to the firmware 730 * lbs_set_11d_domain_info - Send regulatory and 802.11d domain information
731 * to the firmware
711 * 732 *
712 * @param priv pointer to struct lbs_private 733 * @priv: pointer to &struct lbs_private
713 * @param request cfg80211 regulatory request structure 734 * @request: cfg80211 regulatory request structure
714 * @param bands the device's supported bands and channels 735 * @bands: the device's supported bands and channels
715 * 736 *
716 * @return 0 on success, error code on failure 737 * returns: 0 on success, error code on failure
717*/ 738*/
718int lbs_set_11d_domain_info(struct lbs_private *priv, 739int lbs_set_11d_domain_info(struct lbs_private *priv,
719 struct regulatory_request *request, 740 struct regulatory_request *request,
@@ -830,15 +851,15 @@ int lbs_set_11d_domain_info(struct lbs_private *priv,
830} 851}
831 852
832/** 853/**
833 * @brief Read a MAC, Baseband, or RF register 854 * lbs_get_reg - Read a MAC, Baseband, or RF register
834 * 855 *
835 * @param priv pointer to struct lbs_private 856 * @priv: pointer to &struct lbs_private
836 * @param cmd register command, one of CMD_MAC_REG_ACCESS, 857 * @reg: register command, one of CMD_MAC_REG_ACCESS,
837 * CMD_BBP_REG_ACCESS, or CMD_RF_REG_ACCESS 858 * CMD_BBP_REG_ACCESS, or CMD_RF_REG_ACCESS
838 * @param offset byte offset of the register to get 859 * @offset: byte offset of the register to get
839 * @param value on success, the value of the register at 'offset' 860 * @value: on success, the value of the register at 'offset'
840 * 861 *
841 * @return 0 on success, error code on failure 862 * returns: 0 on success, error code on failure
842*/ 863*/
843int lbs_get_reg(struct lbs_private *priv, u16 reg, u16 offset, u32 *value) 864int lbs_get_reg(struct lbs_private *priv, u16 reg, u16 offset, u32 *value)
844{ 865{
@@ -874,15 +895,15 @@ out:
874} 895}
875 896
876/** 897/**
877 * @brief Write a MAC, Baseband, or RF register 898 * lbs_set_reg - Write a MAC, Baseband, or RF register
878 * 899 *
879 * @param priv pointer to struct lbs_private 900 * @priv: pointer to &struct lbs_private
880 * @param cmd register command, one of CMD_MAC_REG_ACCESS, 901 * @reg: register command, one of CMD_MAC_REG_ACCESS,
881 * CMD_BBP_REG_ACCESS, or CMD_RF_REG_ACCESS 902 * CMD_BBP_REG_ACCESS, or CMD_RF_REG_ACCESS
882 * @param offset byte offset of the register to set 903 * @offset: byte offset of the register to set
883 * @param value the value to write to the register at 'offset' 904 * @value: the value to write to the register at 'offset'
884 * 905 *
885 * @return 0 on success, error code on failure 906 * returns: 0 on success, error code on failure
886*/ 907*/
887int lbs_set_reg(struct lbs_private *priv, u16 reg, u16 offset, u32 value) 908int lbs_set_reg(struct lbs_private *priv, u16 reg, u16 offset, u32 value)
888{ 909{
@@ -973,6 +994,8 @@ static void lbs_submit_command(struct lbs_private *priv,
973 cmd = cmdnode->cmdbuf; 994 cmd = cmdnode->cmdbuf;
974 995
975 spin_lock_irqsave(&priv->driver_lock, flags); 996 spin_lock_irqsave(&priv->driver_lock, flags);
997 priv->seqnum++;
998 cmd->seqnum = cpu_to_le16(priv->seqnum);
976 priv->cur_cmd = cmdnode; 999 priv->cur_cmd = cmdnode;
977 spin_unlock_irqrestore(&priv->driver_lock, flags); 1000 spin_unlock_irqrestore(&priv->driver_lock, flags);
978 1001
@@ -990,7 +1013,8 @@ static void lbs_submit_command(struct lbs_private *priv,
990 ret = priv->hw_host_to_card(priv, MVMS_CMD, (u8 *) cmd, cmdsize); 1013 ret = priv->hw_host_to_card(priv, MVMS_CMD, (u8 *) cmd, cmdsize);
991 1014
992 if (ret) { 1015 if (ret) {
993 lbs_pr_info("DNLD_CMD: hw_host_to_card failed: %d\n", ret); 1016 netdev_info(priv->dev, "DNLD_CMD: hw_host_to_card failed: %d\n",
1017 ret);
994 /* Let the timer kick in and retry, and potentially reset 1018 /* Let the timer kick in and retry, and potentially reset
995 the whole thing if the condition persists */ 1019 the whole thing if the condition persists */
996 timeo = HZ/4; 1020 timeo = HZ/4;
@@ -1011,7 +1035,7 @@ static void lbs_submit_command(struct lbs_private *priv,
1011 lbs_deb_leave(LBS_DEB_HOST); 1035 lbs_deb_leave(LBS_DEB_HOST);
1012} 1036}
1013 1037
1014/** 1038/*
1015 * This function inserts command node to cmdfreeq 1039 * This function inserts command node to cmdfreeq
1016 * after cleans it. Requires priv->driver_lock held. 1040 * after cleans it. Requires priv->driver_lock held.
1017 */ 1041 */
@@ -1113,11 +1137,12 @@ void lbs_set_mac_control(struct lbs_private *priv)
1113} 1137}
1114 1138
1115/** 1139/**
1116 * @brief This function allocates the command buffer and link 1140 * lbs_allocate_cmd_buffer - allocates the command buffer and links
1117 * it to command free queue. 1141 * it to command free queue
1118 * 1142 *
1119 * @param priv A pointer to struct lbs_private structure 1143 * @priv: A pointer to &struct lbs_private structure
1120 * @return 0 or -1 1144 *
1145 * returns: 0 for success or -1 on error
1121 */ 1146 */
1122int lbs_allocate_cmd_buffer(struct lbs_private *priv) 1147int lbs_allocate_cmd_buffer(struct lbs_private *priv)
1123{ 1148{
@@ -1159,10 +1184,11 @@ done:
1159} 1184}
1160 1185
1161/** 1186/**
1162 * @brief This function frees the command buffer. 1187 * lbs_free_cmd_buffer - free the command buffer
1188 *
1189 * @priv: A pointer to &struct lbs_private structure
1163 * 1190 *
1164 * @param priv A pointer to struct lbs_private structure 1191 * returns: 0 for success
1165 * @return 0 or -1
1166 */ 1192 */
1167int lbs_free_cmd_buffer(struct lbs_private *priv) 1193int lbs_free_cmd_buffer(struct lbs_private *priv)
1168{ 1194{
@@ -1199,11 +1225,13 @@ done:
1199} 1225}
1200 1226
1201/** 1227/**
1202 * @brief This function gets a free command node if available in 1228 * lbs_get_free_cmd_node - gets a free command node if available in
1203 * command free queue. 1229 * command free queue
1204 * 1230 *
1205 * @param priv A pointer to struct lbs_private structure 1231 * @priv: A pointer to &struct lbs_private structure
1206 * @return cmd_ctrl_node A pointer to cmd_ctrl_node structure or NULL 1232 *
1233 * returns: A pointer to &cmd_ctrl_node structure on success
1234 * or %NULL on error
1207 */ 1235 */
1208static struct cmd_ctrl_node *lbs_get_free_cmd_node(struct lbs_private *priv) 1236static struct cmd_ctrl_node *lbs_get_free_cmd_node(struct lbs_private *priv)
1209{ 1237{
@@ -1233,12 +1261,12 @@ static struct cmd_ctrl_node *lbs_get_free_cmd_node(struct lbs_private *priv)
1233} 1261}
1234 1262
1235/** 1263/**
1236 * @brief This function executes next command in command 1264 * lbs_execute_next_command - execute next command in command
1237 * pending queue. It will put firmware back to PS mode 1265 * pending queue. Will put firmware back to PS mode if applicable.
1238 * if applicable. 1266 *
1267 * @priv: A pointer to &struct lbs_private structure
1239 * 1268 *
1240 * @param priv A pointer to struct lbs_private structure 1269 * returns: 0 on success or -1 on error
1241 * @return 0 or -1
1242 */ 1270 */
1243int lbs_execute_next_command(struct lbs_private *priv) 1271int lbs_execute_next_command(struct lbs_private *priv)
1244{ 1272{
@@ -1255,7 +1283,8 @@ int lbs_execute_next_command(struct lbs_private *priv)
1255 spin_lock_irqsave(&priv->driver_lock, flags); 1283 spin_lock_irqsave(&priv->driver_lock, flags);
1256 1284
1257 if (priv->cur_cmd) { 1285 if (priv->cur_cmd) {
1258 lbs_pr_alert( "EXEC_NEXT_CMD: already processing command!\n"); 1286 netdev_alert(priv->dev,
1287 "EXEC_NEXT_CMD: already processing command!\n");
1259 spin_unlock_irqrestore(&priv->driver_lock, flags); 1288 spin_unlock_irqrestore(&priv->driver_lock, flags);
1260 ret = -1; 1289 ret = -1;
1261 goto done; 1290 goto done;
@@ -1327,8 +1356,8 @@ int lbs_execute_next_command(struct lbs_private *priv)
1327 cpu_to_le16(PS_MODE_ACTION_EXIT_PS)) { 1356 cpu_to_le16(PS_MODE_ACTION_EXIT_PS)) {
1328 lbs_deb_host( 1357 lbs_deb_host(
1329 "EXEC_NEXT_CMD: ignore ENTER_PS cmd\n"); 1358 "EXEC_NEXT_CMD: ignore ENTER_PS cmd\n");
1330 list_del(&cmdnode->list);
1331 spin_lock_irqsave(&priv->driver_lock, flags); 1359 spin_lock_irqsave(&priv->driver_lock, flags);
1360 list_del(&cmdnode->list);
1332 lbs_complete_command(priv, cmdnode, 0); 1361 lbs_complete_command(priv, cmdnode, 0);
1333 spin_unlock_irqrestore(&priv->driver_lock, flags); 1362 spin_unlock_irqrestore(&priv->driver_lock, flags);
1334 1363
@@ -1340,8 +1369,8 @@ int lbs_execute_next_command(struct lbs_private *priv)
1340 (priv->psstate == PS_STATE_PRE_SLEEP)) { 1369 (priv->psstate == PS_STATE_PRE_SLEEP)) {
1341 lbs_deb_host( 1370 lbs_deb_host(
1342 "EXEC_NEXT_CMD: ignore EXIT_PS cmd in sleep\n"); 1371 "EXEC_NEXT_CMD: ignore EXIT_PS cmd in sleep\n");
1343 list_del(&cmdnode->list);
1344 spin_lock_irqsave(&priv->driver_lock, flags); 1372 spin_lock_irqsave(&priv->driver_lock, flags);
1373 list_del(&cmdnode->list);
1345 lbs_complete_command(priv, cmdnode, 0); 1374 lbs_complete_command(priv, cmdnode, 0);
1346 spin_unlock_irqrestore(&priv->driver_lock, flags); 1375 spin_unlock_irqrestore(&priv->driver_lock, flags);
1347 priv->needtowakeup = 1; 1376 priv->needtowakeup = 1;
@@ -1354,7 +1383,9 @@ int lbs_execute_next_command(struct lbs_private *priv)
1354 "EXEC_NEXT_CMD: sending EXIT_PS\n"); 1383 "EXEC_NEXT_CMD: sending EXIT_PS\n");
1355 } 1384 }
1356 } 1385 }
1386 spin_lock_irqsave(&priv->driver_lock, flags);
1357 list_del(&cmdnode->list); 1387 list_del(&cmdnode->list);
1388 spin_unlock_irqrestore(&priv->driver_lock, flags);
1358 lbs_deb_host("EXEC_NEXT_CMD: sending command 0x%04x\n", 1389 lbs_deb_host("EXEC_NEXT_CMD: sending command 0x%04x\n",
1359 le16_to_cpu(cmd->command)); 1390 le16_to_cpu(cmd->command));
1360 lbs_submit_command(priv, cmdnode); 1391 lbs_submit_command(priv, cmdnode);
@@ -1417,7 +1448,7 @@ static void lbs_send_confirmsleep(struct lbs_private *priv)
1417 ret = priv->hw_host_to_card(priv, MVMS_CMD, (u8 *) &confirm_sleep, 1448 ret = priv->hw_host_to_card(priv, MVMS_CMD, (u8 *) &confirm_sleep,
1418 sizeof(confirm_sleep)); 1449 sizeof(confirm_sleep));
1419 if (ret) { 1450 if (ret) {
1420 lbs_pr_alert("confirm_sleep failed\n"); 1451 netdev_alert(priv->dev, "confirm_sleep failed\n");
1421 goto out; 1452 goto out;
1422 } 1453 }
1423 1454
@@ -1442,12 +1473,12 @@ out:
1442} 1473}
1443 1474
1444/** 1475/**
1445 * @brief This function checks condition and prepares to 1476 * lbs_ps_confirm_sleep - checks condition and prepares to
1446 * send sleep confirm command to firmware if ok. 1477 * send sleep confirm command to firmware if ok
1447 * 1478 *
1448 * @param priv A pointer to struct lbs_private structure 1479 * @priv: A pointer to &struct lbs_private structure
1449 * @param psmode Power Saving mode 1480 *
1450 * @return n/a 1481 * returns: n/a
1451 */ 1482 */
1452void lbs_ps_confirm_sleep(struct lbs_private *priv) 1483void lbs_ps_confirm_sleep(struct lbs_private *priv)
1453{ 1484{
@@ -1487,16 +1518,16 @@ void lbs_ps_confirm_sleep(struct lbs_private *priv)
1487 1518
1488 1519
1489/** 1520/**
1490 * @brief Configures the transmission power control functionality. 1521 * lbs_set_tpc_cfg - Configures the transmission power control functionality
1491 * 1522 *
1492 * @param priv A pointer to struct lbs_private structure 1523 * @priv: A pointer to &struct lbs_private structure
1493 * @param enable Transmission power control enable 1524 * @enable: Transmission power control enable
1494 * @param p0 Power level when link quality is good (dBm). 1525 * @p0: Power level when link quality is good (dBm).
1495 * @param p1 Power level when link quality is fair (dBm). 1526 * @p1: Power level when link quality is fair (dBm).
1496 * @param p2 Power level when link quality is poor (dBm). 1527 * @p2: Power level when link quality is poor (dBm).
1497 * @param usesnr Use Signal to Noise Ratio in TPC 1528 * @usesnr: Use Signal to Noise Ratio in TPC
1498 * 1529 *
1499 * @return 0 on success 1530 * returns: 0 on success
1500 */ 1531 */
1501int lbs_set_tpc_cfg(struct lbs_private *priv, int enable, int8_t p0, int8_t p1, 1532int lbs_set_tpc_cfg(struct lbs_private *priv, int enable, int8_t p0, int8_t p1,
1502 int8_t p2, int usesnr) 1533 int8_t p2, int usesnr)
@@ -1519,15 +1550,15 @@ int lbs_set_tpc_cfg(struct lbs_private *priv, int enable, int8_t p0, int8_t p1,
1519} 1550}
1520 1551
1521/** 1552/**
1522 * @brief Configures the power adaptation settings. 1553 * lbs_set_power_adapt_cfg - Configures the power adaptation settings
1523 * 1554 *
1524 * @param priv A pointer to struct lbs_private structure 1555 * @priv: A pointer to &struct lbs_private structure
1525 * @param enable Power adaptation enable 1556 * @enable: Power adaptation enable
1526 * @param p0 Power level for 1, 2, 5.5 and 11 Mbps (dBm). 1557 * @p0: Power level for 1, 2, 5.5 and 11 Mbps (dBm).
1527 * @param p1 Power level for 6, 9, 12, 18, 22, 24 and 36 Mbps (dBm). 1558 * @p1: Power level for 6, 9, 12, 18, 22, 24 and 36 Mbps (dBm).
1528 * @param p2 Power level for 48 and 54 Mbps (dBm). 1559 * @p2: Power level for 48 and 54 Mbps (dBm).
1529 * 1560 *
1530 * @return 0 on Success 1561 * returns: 0 on Success
1531 */ 1562 */
1532 1563
1533int lbs_set_power_adapt_cfg(struct lbs_private *priv, int enable, int8_t p0, 1564int lbs_set_power_adapt_cfg(struct lbs_private *priv, int enable, int8_t p0,
@@ -1592,11 +1623,9 @@ struct cmd_ctrl_node *__lbs_cmd_async(struct lbs_private *priv,
1592 /* Copy the incoming command to the buffer */ 1623 /* Copy the incoming command to the buffer */
1593 memcpy(cmdnode->cmdbuf, in_cmd, in_cmd_size); 1624 memcpy(cmdnode->cmdbuf, in_cmd, in_cmd_size);
1594 1625
1595 /* Set sequence number, clean result, move to buffer */ 1626 /* Set command, clean result, move to buffer */
1596 priv->seqnum++;
1597 cmdnode->cmdbuf->command = cpu_to_le16(command); 1627 cmdnode->cmdbuf->command = cpu_to_le16(command);
1598 cmdnode->cmdbuf->size = cpu_to_le16(in_cmd_size); 1628 cmdnode->cmdbuf->size = cpu_to_le16(in_cmd_size);
1599 cmdnode->cmdbuf->seqnum = cpu_to_le16(priv->seqnum);
1600 cmdnode->cmdbuf->result = 0; 1629 cmdnode->cmdbuf->result = 0;
1601 1630
1602 lbs_deb_host("PREP_CMD: command 0x%04x\n", command); 1631 lbs_deb_host("PREP_CMD: command 0x%04x\n", command);
@@ -1643,7 +1672,7 @@ int __lbs_cmd(struct lbs_private *priv, uint16_t command,
1643 spin_lock_irqsave(&priv->driver_lock, flags); 1672 spin_lock_irqsave(&priv->driver_lock, flags);
1644 ret = cmdnode->result; 1673 ret = cmdnode->result;
1645 if (ret) 1674 if (ret)
1646 lbs_pr_info("PREP_CMD: command 0x%04x failed: %d\n", 1675 netdev_info(priv->dev, "PREP_CMD: command 0x%04x failed: %d\n",
1647 command, ret); 1676 command, ret);
1648 1677
1649 __lbs_cleanup_and_insert_cmd(priv, cmdnode); 1678 __lbs_cleanup_and_insert_cmd(priv, cmdnode);