diff options
Diffstat (limited to 'drivers/net/wireless/libertas/main.c')
| -rw-r--r-- | drivers/net/wireless/libertas/main.c | 171 | 
1 files changed, 83 insertions, 88 deletions
diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index ca8149cd5bd..8c40949cb07 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -1,8 +1,10 @@ -/** -  * This file contains the major functions in WLAN -  * driver. It includes init, exit, open, close and main -  * thread etc.. -  */ +/* + * This file contains the major functions in WLAN + * driver. It includes init, exit, open, close and main + * thread etc.. + */ + +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt  #include <linux/moduleparam.h>  #include <linux/delay.h> @@ -34,19 +36,25 @@ unsigned int lbs_debug;  EXPORT_SYMBOL_GPL(lbs_debug);  module_param_named(libertas_debug, lbs_debug, int, 0644); +unsigned int lbs_disablemesh; +EXPORT_SYMBOL_GPL(lbs_disablemesh); +module_param_named(libertas_disablemesh, lbs_disablemesh, int, 0644); -/* This global structure is used to send the confirm_sleep command as - * fast as possible down to the firmware. */ + +/* + * This global structure is used to send the confirm_sleep command as + * fast as possible down to the firmware. + */  struct cmd_confirm_sleep confirm_sleep; -/** +/*   * the table to keep region code   */  u16 lbs_region_code_to_index[MRVDRV_MAX_REGION_CODE] =      { 0x10, 0x20, 0x30, 0x31, 0x32, 0x40 }; -/** +/*   * FW rate table.  FW refers to rates by their index in this table, not by the   * rate value itself.  Values of 0x00 are   * reserved positions. @@ -57,10 +65,10 @@ static u8 fw_data_rates[MAX_RATES] =  };  /** - *  @brief use index to get the data rate + *  lbs_fw_index_to_data_rate - use index to get the data rate   * - *  @param idx                The index of data rate - *  @return 	   		data rate or 0 + *  @idx:	The index of data rate + *  returns:	data rate or 0   */  u32 lbs_fw_index_to_data_rate(u8 idx)  { @@ -70,10 +78,10 @@ u32 lbs_fw_index_to_data_rate(u8 idx)  }  /** - *  @brief use rate to get the index + *  lbs_data_rate_to_fw_index - use rate to get the index   * - *  @param rate                 data rate - *  @return 	   		index or 0 + *  @rate:	data rate + *  returns:	index or 0   */  u8 lbs_data_rate_to_fw_index(u32 rate)  { @@ -91,10 +99,10 @@ u8 lbs_data_rate_to_fw_index(u32 rate)  /** - *  @brief This function opens the ethX interface + *  lbs_dev_open - open the ethX interface   * - *  @param dev     A pointer to net_device structure - *  @return 	   0 or -EBUSY if monitor mode active + *  @dev:	A pointer to &net_device structure + *  returns:	0 or -EBUSY if monitor mode active   */  static int lbs_dev_open(struct net_device *dev)  { @@ -120,10 +128,10 @@ static int lbs_dev_open(struct net_device *dev)  }  /** - *  @brief This function closes the ethX interface + *  lbs_eth_stop - close the ethX interface   * - *  @param dev     A pointer to net_device structure - *  @return 	   0 + *  @dev:	A pointer to &net_device structure + *  returns:	0   */  static int lbs_eth_stop(struct net_device *dev)  { @@ -147,28 +155,6 @@ static int lbs_eth_stop(struct net_device *dev)  	return 0;  } -static void lbs_tx_timeout(struct net_device *dev) -{ -	struct lbs_private *priv = dev->ml_priv; - -	lbs_deb_enter(LBS_DEB_TX); - -	lbs_pr_err("tx watch dog timeout\n"); - -	dev->trans_start = jiffies; /* prevent tx timeout */ - -	if (priv->currenttxskb) -		lbs_send_tx_feedback(priv, 0); - -	/* XX: Shouldn't we also call into the hw-specific driver -	   to kick it somehow? */ -	lbs_host_to_card_done(priv); - -	/* FIXME: reset the card */ - -	lbs_deb_leave(LBS_DEB_TX); -} -  void lbs_host_to_card_done(struct lbs_private *priv)  {  	unsigned long flags; @@ -336,12 +322,12 @@ void lbs_set_multicast_list(struct net_device *dev)  }  /** - *  @brief This function handles the major jobs in the LBS driver. + *  lbs_thread - handles the major jobs in the LBS driver.   *  It handles all events generated by firmware, RX data received   *  from firmware and TX data sent from kernel.   * - *  @param data    A pointer to lbs_thread structure - *  @return 	   0 + *  @data:	A pointer to &lbs_thread structure + *  returns:	0   */  static int lbs_thread(void *data)  { @@ -462,8 +448,8 @@ static int lbs_thread(void *data)  		if (priv->cmd_timed_out && priv->cur_cmd) {  			struct cmd_ctrl_node *cmdnode = priv->cur_cmd; -			lbs_pr_info("Timeout submitting command 0x%04x\n", -				le16_to_cpu(cmdnode->cmdbuf->command)); +			netdev_info(dev, "Timeout submitting command 0x%04x\n", +				    le16_to_cpu(cmdnode->cmdbuf->command));  			lbs_complete_command(priv, cmdnode, -ETIMEDOUT);  			if (priv->reset_card)  				priv->reset_card(priv); @@ -490,8 +476,8 @@ static int lbs_thread(void *data)  				 * after firmware fixes it  				 */  				priv->psstate = PS_STATE_AWAKE; -				lbs_pr_alert("ignore PS_SleepConfirm in " -					"non-connected state\n"); +				netdev_alert(dev, +					     "ignore PS_SleepConfirm in non-connected state\n");  			}  		} @@ -540,11 +526,11 @@ static int lbs_thread(void *data)  }  /** - * @brief This function gets the HW spec from the firmware and sets - *        some basic parameters. + * lbs_setup_firmware - gets the HW spec from the firmware and sets + *        some basic parameters   * - *  @param priv    A pointer to struct lbs_private structure - *  @return        0 or -1 + *  @priv:	A pointer to &struct lbs_private structure + *  returns:	0 or -1   */  static int lbs_setup_firmware(struct lbs_private *priv)  { @@ -585,7 +571,8 @@ int lbs_suspend(struct lbs_private *priv)  	if (priv->is_deep_sleep) {  		ret = lbs_set_deep_sleep(priv, 0);  		if (ret) { -			lbs_pr_err("deep sleep cancellation failed: %d\n", ret); +			netdev_err(priv->dev, +				   "deep sleep cancellation failed: %d\n", ret);  			return ret;  		}  		priv->deep_sleep_required = 1; @@ -618,7 +605,8 @@ int lbs_resume(struct lbs_private *priv)  		priv->deep_sleep_required = 0;  		ret = lbs_set_deep_sleep(priv, 1);  		if (ret) -			lbs_pr_err("deep sleep activation failed: %d\n", ret); +			netdev_err(priv->dev, +				   "deep sleep activation failed: %d\n", ret);  	}  	if (priv->setup_fw_on_resume) @@ -630,8 +618,10 @@ int lbs_resume(struct lbs_private *priv)  EXPORT_SYMBOL_GPL(lbs_resume);  /** - *  This function handles the timeout of command sending. - *  It will re-send the same command again. + * lbs_cmd_timeout_handler - handles the timeout of command sending. + * It will re-send the same command again. + * + * @data: &struct lbs_private pointer   */  static void lbs_cmd_timeout_handler(unsigned long data)  { @@ -644,8 +634,8 @@ static void lbs_cmd_timeout_handler(unsigned long data)  	if (!priv->cur_cmd)  		goto out; -	lbs_pr_info("command 0x%04x timed out\n", -		le16_to_cpu(priv->cur_cmd->cmdbuf->command)); +	netdev_info(priv->dev, "command 0x%04x timed out\n", +		    le16_to_cpu(priv->cur_cmd->cmdbuf->command));  	priv->cmd_timed_out = 1;  	wake_up_interruptible(&priv->waitq); @@ -655,8 +645,10 @@ out:  }  /** - *  This function put the device back to deep sleep mode when timer expires - *  and no activity (command, event, data etc.) is detected. + * auto_deepsleep_timer_fn - put the device back to deep sleep mode when + * timer expires and no activity (command, event, data etc.) is detected. + * @data:	&struct lbs_private pointer + * returns:	N/A   */  static void auto_deepsleep_timer_fn(unsigned long data)  { @@ -748,7 +740,7 @@ static int lbs_init_adapter(struct lbs_private *priv)  	/* Allocate the command buffers */  	if (lbs_allocate_cmd_buffer(priv)) { -		lbs_pr_err("Out of memory allocating command buffers\n"); +		pr_err("Out of memory allocating command buffers\n");  		ret = -ENOMEM;  		goto out;  	} @@ -758,7 +750,7 @@ static int lbs_init_adapter(struct lbs_private *priv)  	/* Create the event FIFO */  	ret = kfifo_alloc(&priv->event_fifo, sizeof(u32) * 16, GFP_KERNEL);  	if (ret) { -		lbs_pr_err("Out of memory allocating event FIFO buffer\n"); +		pr_err("Out of memory allocating event FIFO buffer\n");  		goto out;  	} @@ -785,18 +777,18 @@ static const struct net_device_ops lbs_netdev_ops = {  	.ndo_stop		= lbs_eth_stop,  	.ndo_start_xmit		= lbs_hard_start_xmit,  	.ndo_set_mac_address	= lbs_set_mac_address, -	.ndo_tx_timeout 	= lbs_tx_timeout,  	.ndo_set_multicast_list = lbs_set_multicast_list,  	.ndo_change_mtu		= eth_change_mtu,  	.ndo_validate_addr	= eth_validate_addr,  };  /** - * @brief This function adds the card. it will probe the + * lbs_add_card - adds the card. It will probe the   * card, allocate the lbs_priv and initialize the device.   * - *  @param card    A pointer to card - *  @return 	   A pointer to struct lbs_private structure + * @card:	A pointer to card + * @dmdev:	A pointer to &struct device + * returns:	A pointer to &struct lbs_private structure   */  struct lbs_private *lbs_add_card(void *card, struct device *dmdev)  { @@ -809,7 +801,7 @@ struct lbs_private *lbs_add_card(void *card, struct device *dmdev)  	/* Allocate an Ethernet device and register it */  	wdev = lbs_cfg_alloc(dmdev);  	if (IS_ERR(wdev)) { -		lbs_pr_err("cfg80211 init failed\n"); +		pr_err("cfg80211 init failed\n");  		goto done;  	} @@ -818,7 +810,7 @@ struct lbs_private *lbs_add_card(void *card, struct device *dmdev)  	priv->wdev = wdev;  	if (lbs_init_adapter(priv)) { -		lbs_pr_err("failed to initialize adapter structure.\n"); +		pr_err("failed to initialize adapter structure\n");  		goto err_wdev;  	} @@ -950,17 +942,20 @@ int lbs_start_card(struct lbs_private *priv)  		goto done;  	if (lbs_cfg_register(priv)) { -		lbs_pr_err("cannot register device\n"); +		pr_err("cannot register device\n");  		goto done;  	}  	lbs_update_channel(priv); -	lbs_init_mesh(priv); +	if (!lbs_disablemesh) +		lbs_init_mesh(priv); +	else +		pr_info("%s: mesh disabled\n", dev->name);  	lbs_debugfs_init_one(priv, dev); -	lbs_pr_info("%s: Marvell WLAN 802.11 adapter\n", dev->name); +	netdev_info(dev, "Marvell WLAN 802.11 adapter\n");  	ret = 0; @@ -1057,19 +1052,19 @@ void lbs_notify_command_response(struct lbs_private *priv, u8 resp_idx)  EXPORT_SYMBOL_GPL(lbs_notify_command_response);  /** - *  @brief Retrieves two-stage firmware + *  lbs_get_firmware - Retrieves two-stage firmware   * - *  @param dev     	A pointer to device structure - *  @param user_helper	User-defined helper firmware file - *  @param user_mainfw	User-defined main firmware file - *  @param card_model	Bus-specific card model ID used to filter firmware table - *                         elements - *  @param fw_table	Table of firmware file names and device model numbers - *                         terminated by an entry with a NULL helper name - *  @param helper	On success, the helper firmware; caller must free - *  @param mainfw	On success, the main firmware; caller must free + *  @dev:     	A pointer to &device structure + *  @user_helper: User-defined helper firmware file + *  @user_mainfw: User-defined main firmware file + *  @card_model: Bus-specific card model ID used to filter firmware table + *		elements + *  @fw_table:	Table of firmware file names and device model numbers + *		terminated by an entry with a NULL helper name + *  @helper:	On success, the helper firmware; caller must free + *  @mainfw:	On success, the main firmware; caller must free   * - *  @return		0 on success, non-zero on failure + *  returns:		0 on success, non-zero on failure   */  int lbs_get_firmware(struct device *dev, const char *user_helper,  			const char *user_mainfw, u32 card_model, @@ -1087,16 +1082,16 @@ int lbs_get_firmware(struct device *dev, const char *user_helper,  	if (user_helper) {  		ret = request_firmware(helper, user_helper, dev);  		if (ret) { -			lbs_pr_err("couldn't find helper firmware %s", -					user_helper); +			dev_err(dev, "couldn't find helper firmware %s\n", +				user_helper);  			goto fail;  		}  	}  	if (user_mainfw) {  		ret = request_firmware(mainfw, user_mainfw, dev);  		if (ret) { -			lbs_pr_err("couldn't find main firmware %s", -					user_mainfw); +			dev_err(dev, "couldn't find main firmware %s\n", +				user_mainfw);  			goto fail;  		}  	}  |