diff options
Diffstat (limited to 'drivers/net/wireless/ath/ath6kl')
| -rw-r--r-- | drivers/net/wireless/ath/ath6kl/Kconfig | 30 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath6kl/cfg80211.c | 54 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath6kl/common.h | 3 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath6kl/core.c | 6 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath6kl/debug.c | 4 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath6kl/debug.h | 11 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath6kl/hif.c | 3 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath6kl/hif.h | 4 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath6kl/htc.h | 2 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath6kl/htc_mbox.c | 23 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath6kl/htc_pipe.c | 10 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath6kl/init.c | 1 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath6kl/main.c | 10 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath6kl/sdio.c | 17 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath6kl/target.h | 2 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath6kl/txrx.c | 31 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath6kl/usb.c | 8 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath6kl/wmi.c | 31 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath6kl/wmi.h | 5 | 
19 files changed, 123 insertions, 132 deletions
diff --git a/drivers/net/wireless/ath/ath6kl/Kconfig b/drivers/net/wireless/ath/ath6kl/Kconfig index e39e5860a2e..9c125ff083f 100644 --- a/drivers/net/wireless/ath/ath6kl/Kconfig +++ b/drivers/net/wireless/ath/ath6kl/Kconfig @@ -1,11 +1,19 @@  config ATH6KL  	tristate "Atheros mobile chipsets support" +	depends on CFG80211 +        ---help--- +	  This module adds core support for wireless adapters based on +	  Atheros AR6003 and AR6004 chipsets. You still need separate +	  bus drivers for USB and SDIO to be able to use real devices. + +	  If you choose to build it as a module, it will be called +	  ath6kl_core. Please note that AR6002 and AR6001 are not +	  supported by this driver.  config ATH6KL_SDIO  	tristate "Atheros ath6kl SDIO support"  	depends on ATH6KL  	depends on MMC -	depends on CFG80211  	---help---  	  This module adds support for wireless adapters based on  	  Atheros AR6003 and AR6004 chipsets running over SDIO. If you @@ -17,25 +25,31 @@ config ATH6KL_USB  	tristate "Atheros ath6kl USB support"  	depends on ATH6KL  	depends on USB -	depends on CFG80211  	---help---  	  This module adds support for wireless adapters based on -	  Atheros AR6004 chipset running over USB. This is still under -	  implementation and it isn't functional. If you choose to -	  build it as a module, it will be called ath6kl_usb. +	  Atheros AR6004 chipset and chipsets based on it running over +	  USB. If you choose to build it as a module, it will be +	  called ath6kl_usb.  config ATH6KL_DEBUG  	bool "Atheros ath6kl debugging"  	depends on ATH6KL  	---help--- -	  Enables debug support +	  Enables ath6kl debug support, including debug messages +	  enabled with debug_mask module parameter and debugfs +	  interface. + +	  If unsure, say Y to make it easier to debug problems.  config ATH6KL_TRACING  	bool "Atheros ath6kl tracing support"  	depends on ATH6KL  	depends on EVENT_TRACING  	---help--- -	  Select this to ath6kl use tracing infrastructure. +	  Select this to ath6kl use tracing infrastructure which, for +	  example, can be enabled with help of trace-cmd. All debug +	  messages and commands are delivered to using individually +	  enablable trace points.  	  If unsure, say Y to make it easier to debug problems. @@ -47,3 +61,5 @@ config ATH6KL_REGDOMAIN  	  Enabling this makes it possible to change the regdomain in  	  the firmware. This can be only enabled if regulatory requirements  	  are taken into account. + +	  If unsure, say N. diff --git a/drivers/net/wireless/ath/ath6kl/cfg80211.c b/drivers/net/wireless/ath/ath6kl/cfg80211.c index 2437ad26949..0e26f4a34fd 100644 --- a/drivers/net/wireless/ath/ath6kl/cfg80211.c +++ b/drivers/net/wireless/ath/ath6kl/cfg80211.c @@ -724,8 +724,9 @@ ath6kl_add_bss_if_needed(struct ath6kl_vif *vif,  			ath6kl_dbg(ATH6KL_DBG_WLAN_CFG,  				   "added bss %pM to cfg80211\n", bssid);  		kfree(ie); -	} else +	} else {  		ath6kl_dbg(ATH6KL_DBG_WLAN_CFG, "cfg80211 already has a bss\n"); +	}  	return bss;  } @@ -790,7 +791,7 @@ void ath6kl_cfg80211_connect_event(struct ath6kl_vif *vif, u16 channel,  	if (nw_type & ADHOC_NETWORK) {  		ath6kl_dbg(ATH6KL_DBG_WLAN_CFG, "ad-hoc %s selected\n",  			   nw_type & ADHOC_CREATOR ? "creator" : "joiner"); -		cfg80211_ibss_joined(vif->ndev, bssid, GFP_KERNEL); +		cfg80211_ibss_joined(vif->ndev, bssid, chan, GFP_KERNEL);  		cfg80211_put_bss(ar->wiphy, bss);  		return;  	} @@ -861,13 +862,9 @@ void ath6kl_cfg80211_disconnect_event(struct ath6kl_vif *vif, u8 reason,  	}  	if (vif->nw_type & ADHOC_NETWORK) { -		if (vif->wdev.iftype != NL80211_IFTYPE_ADHOC) { +		if (vif->wdev.iftype != NL80211_IFTYPE_ADHOC)  			ath6kl_dbg(ATH6KL_DBG_WLAN_CFG,  				   "%s: ath6k not in ibss mode\n", __func__); -			return; -		} -		memset(bssid, 0, ETH_ALEN); -		cfg80211_ibss_joined(vif->ndev, bssid, GFP_KERNEL);  		return;  	} @@ -974,7 +971,6 @@ static int ath6kl_set_probed_ssids(struct ath6kl *ar,  					  ssid_list[i].flag,  					  ssid_list[i].ssid.ssid_len,  					  ssid_list[i].ssid.ssid); -  	}  	/* Make sure no old entries are left behind */ @@ -1109,7 +1105,9 @@ void ath6kl_cfg80211_ch_switch_notify(struct ath6kl_vif *vif, int freq,  				(mode == WMI_11G_HT20) ?  					NL80211_CHAN_HT20 : NL80211_CHAN_NO_HT); +	mutex_lock(&vif->wdev.mtx);  	cfg80211_ch_switch_notify(vif->ndev, &chandef); +	mutex_unlock(&vif->wdev.mtx);  }  static int ath6kl_cfg80211_add_key(struct wiphy *wiphy, struct net_device *ndev, @@ -1761,7 +1759,7 @@ static bool is_rate_ht40(s32 rate, u8 *mcs, bool *sgi)  }  static int ath6kl_get_station(struct wiphy *wiphy, struct net_device *dev, -			      u8 *mac, struct station_info *sinfo) +			      const u8 *mac, struct station_info *sinfo)  {  	struct ath6kl *ar = ath6kl_priv(dev);  	struct ath6kl_vif *vif = netdev_priv(dev); @@ -1899,7 +1897,6 @@ static int ath6kl_wow_usr(struct ath6kl *ar, struct ath6kl_vif *vif,  	/* Configure the patterns that we received from the user. */  	for (i = 0; i < wow->n_patterns; i++) { -  		/*  		 * Convert given nl80211 specific mask value to equivalent  		 * driver specific mask value and send it to the chip along @@ -2852,8 +2849,9 @@ static int ath6kl_start_ap(struct wiphy *wiphy, struct net_device *dev,  	if (p.prwise_crypto_type == 0) {  		p.prwise_crypto_type = NONE_CRYPT;  		ath6kl_set_cipher(vif, 0, true); -	} else if (info->crypto.n_ciphers_pairwise == 1) +	} else if (info->crypto.n_ciphers_pairwise == 1) {  		ath6kl_set_cipher(vif, info->crypto.ciphers_pairwise[0], true); +	}  	switch (info->crypto.cipher_group) {  	case WLAN_CIPHER_SUITE_WEP40: @@ -2899,7 +2897,6 @@ static int ath6kl_start_ap(struct wiphy *wiphy, struct net_device *dev,  	}  	if (info->inactivity_timeout) { -  		inactivity_timeout = info->inactivity_timeout;  		if (ar->hw.flags & ATH6KL_HW_AP_INACTIVITY_MINS) @@ -2977,7 +2974,7 @@ static int ath6kl_stop_ap(struct wiphy *wiphy, struct net_device *dev)  static const u8 bcast_addr[ETH_ALEN] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };  static int ath6kl_del_station(struct wiphy *wiphy, struct net_device *dev, -			      u8 *mac) +			      const u8 *mac)  {  	struct ath6kl *ar = ath6kl_priv(dev);  	struct ath6kl_vif *vif = netdev_priv(dev); @@ -2988,7 +2985,8 @@ static int ath6kl_del_station(struct wiphy *wiphy, struct net_device *dev,  }  static int ath6kl_change_station(struct wiphy *wiphy, struct net_device *dev, -				 u8 *mac, struct station_parameters *params) +				 const u8 *mac, +				 struct station_parameters *params)  {  	struct ath6kl *ar = ath6kl_priv(dev);  	struct ath6kl_vif *vif = netdev_priv(dev); @@ -3169,12 +3167,15 @@ static bool ath6kl_is_p2p_go_ssid(const u8 *buf, size_t len)  }  static int ath6kl_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev, -			  struct ieee80211_channel *chan, bool offchan, -			  unsigned int wait, const u8 *buf, size_t len, -			  bool no_cck, bool dont_wait_for_ack, u64 *cookie) +			  struct cfg80211_mgmt_tx_params *params, u64 *cookie)  {  	struct ath6kl_vif *vif = ath6kl_vif_from_wdev(wdev);  	struct ath6kl *ar = ath6kl_priv(vif->ndev); +	struct ieee80211_channel *chan = params->chan; +	const u8 *buf = params->buf; +	size_t len = params->len; +	unsigned int wait = params->wait; +	bool no_cck = params->no_cck;  	u32 id, freq;  	const struct ieee80211_mgmt *mgmt;  	bool more_data, queued; @@ -3251,6 +3252,15 @@ static int ath6kl_cfg80211_sscan_start(struct wiphy *wiphy,  	struct ath6kl_vif *vif = netdev_priv(dev);  	u16 interval;  	int ret, rssi_thold; +	int n_match_sets = request->n_match_sets; + +	/* +	 * If there's a matchset w/o an SSID, then assume it's just for +	 * the RSSI (nothing else is currently supported) and ignore it. +	 * The device only supports a global RSSI filter that we set below. +	 */ +	if (n_match_sets == 1 && !request->match_sets[0].ssid.ssid_len) +		n_match_sets = 0;  	if (ar->state != ATH6KL_STATE_ON)  		return -EIO; @@ -3263,11 +3273,11 @@ static int ath6kl_cfg80211_sscan_start(struct wiphy *wiphy,  	ret = ath6kl_set_probed_ssids(ar, vif, request->ssids,  				      request->n_ssids,  				      request->match_sets, -				      request->n_match_sets); +				      n_match_sets);  	if (ret < 0)  		return ret; -	if (!request->n_match_sets) { +	if (!n_match_sets) {  		ret = ath6kl_wmi_bssfilter_cmd(ar->wmi, vif->fw_vif_idx,  					       ALL_BSS_FILTER, 0);  		if (ret < 0) @@ -3281,12 +3291,12 @@ static int ath6kl_cfg80211_sscan_start(struct wiphy *wiphy,  	if (test_bit(ATH6KL_FW_CAPABILITY_RSSI_SCAN_THOLD,  		     ar->fw_capabilities)) { -		if (request->rssi_thold <= NL80211_SCAN_RSSI_THOLD_OFF) +		if (request->min_rssi_thold <= NL80211_SCAN_RSSI_THOLD_OFF)  			rssi_thold = 0; -		else if (request->rssi_thold < -127) +		else if (request->min_rssi_thold < -127)  			rssi_thold = -127;  		else -			rssi_thold = request->rssi_thold; +			rssi_thold = request->min_rssi_thold;  		ret = ath6kl_wmi_set_rssi_filter_cmd(ar->wmi, vif->fw_vif_idx,  						     rssi_thold); diff --git a/drivers/net/wireless/ath/ath6kl/common.h b/drivers/net/wireless/ath/ath6kl/common.h index 98a886154d9..05debf700a8 100644 --- a/drivers/net/wireless/ath/ath6kl/common.h +++ b/drivers/net/wireless/ath/ath6kl/common.h @@ -22,8 +22,7 @@  #define ATH6KL_MAX_IE			256 -extern __printf(2, 3) -int ath6kl_printk(const char *level, const char *fmt, ...); +__printf(2, 3) int ath6kl_printk(const char *level, const char *fmt, ...);  /*   * Reflects the version of binary interface exposed by ATH6KL target diff --git a/drivers/net/wireless/ath/ath6kl/core.c b/drivers/net/wireless/ath/ath6kl/core.c index 4b46adbe8c9..b0b65204276 100644 --- a/drivers/net/wireless/ath/ath6kl/core.c +++ b/drivers/net/wireless/ath/ath6kl/core.c @@ -45,9 +45,9 @@ module_param(testmode, uint, 0644);  module_param(recovery_enable, uint, 0644);  module_param(heart_beat_poll, uint, 0644);  MODULE_PARM_DESC(recovery_enable, "Enable recovery from firmware error"); -MODULE_PARM_DESC(heart_beat_poll, "Enable fw error detection periodic"   \ -		 "polling. This also specifies the polling interval in"  \ -		 "msecs. Set reocvery_enable for this to be effective"); +MODULE_PARM_DESC(heart_beat_poll, +		 "Enable fw error detection periodic polling in msecs - Also set recovery_enable for this to be effective"); +  void ath6kl_core_tx_complete(struct ath6kl *ar, struct sk_buff *skb)  { diff --git a/drivers/net/wireless/ath/ath6kl/debug.c b/drivers/net/wireless/ath/ath6kl/debug.c index dbfd17d0a5f..55c4064dd50 100644 --- a/drivers/net/wireless/ath/ath6kl/debug.c +++ b/drivers/net/wireless/ath/ath6kl/debug.c @@ -172,7 +172,6 @@ void ath6kl_dump_registers(struct ath6kl_device *dev,  			   struct ath6kl_irq_proc_registers *irq_proc_reg,  			   struct ath6kl_irq_enable_reg *irq_enable_reg)  { -  	ath6kl_dbg(ATH6KL_DBG_IRQ, ("<------- Register Table -------->\n"));  	if (irq_proc_reg != NULL) { @@ -219,7 +218,6 @@ void ath6kl_dump_registers(struct ath6kl_device *dev,  				   "GMBOX lookahead alias 1:   0x%x\n",  				   irq_proc_reg->rx_gmbox_lkahd_alias[1]);  		} -  	}  	if (irq_enable_reg != NULL) { @@ -1396,7 +1394,6 @@ static ssize_t ath6kl_create_qos_write(struct file *file,  						const char __user *user_buf,  						size_t count, loff_t *ppos)  { -  	struct ath6kl *ar = file->private_data;  	struct ath6kl_vif *vif;  	char buf[200]; @@ -1575,7 +1572,6 @@ static ssize_t ath6kl_delete_qos_write(struct file *file,  				const char __user *user_buf,  				size_t count, loff_t *ppos)  { -  	struct ath6kl *ar = file->private_data;  	struct ath6kl_vif *vif;  	char buf[100]; diff --git a/drivers/net/wireless/ath/ath6kl/debug.h b/drivers/net/wireless/ath/ath6kl/debug.h index 74369de00fb..e194c10d9f0 100644 --- a/drivers/net/wireless/ath/ath6kl/debug.h +++ b/drivers/net/wireless/ath/ath6kl/debug.h @@ -50,11 +50,10 @@ enum ATH6K_DEBUG_MASK {  };  extern unsigned int debug_mask; -extern __printf(2, 3) -int ath6kl_printk(const char *level, const char *fmt, ...); -extern __printf(1, 2) int ath6kl_info(const char *fmt, ...); -extern __printf(1, 2) int ath6kl_err(const char *fmt, ...); -extern __printf(1, 2) int ath6kl_warn(const char *fmt, ...); +__printf(2, 3) int ath6kl_printk(const char *level, const char *fmt, ...); +__printf(1, 2) int ath6kl_info(const char *fmt, ...); +__printf(1, 2) int ath6kl_err(const char *fmt, ...); +__printf(1, 2) int ath6kl_warn(const char *fmt, ...);  enum ath6kl_war {  	ATH6KL_WAR_INVALID_RATE, @@ -98,8 +97,8 @@ static inline void ath6kl_dump_registers(struct ath6kl_device *dev,  		struct ath6kl_irq_proc_registers *irq_proc_reg,  		struct ath6kl_irq_enable_reg *irq_en_reg)  { -  } +  static inline void dump_cred_dist_stats(struct htc_target *target)  {  } diff --git a/drivers/net/wireless/ath/ath6kl/hif.c b/drivers/net/wireless/ath/ath6kl/hif.c index fea7709b5dd..18c070850a0 100644 --- a/drivers/net/wireless/ath/ath6kl/hif.c +++ b/drivers/net/wireless/ath/ath6kl/hif.c @@ -37,7 +37,6 @@ static int ath6kl_hif_cp_scat_dma_buf(struct hif_scatter_req *req,  	buf = req->virt_dma_buf;  	for (i = 0; i < req->scat_entries; i++) { -  		if (from_dma)  			memcpy(req->scat_list[i].buf, buf,  			       req->scat_list[i].len); @@ -116,7 +115,6 @@ static void ath6kl_hif_dump_fw_crash(struct ath6kl *ar)  			    le32_to_cpu(regdump_val[i + 2]),  			    le32_to_cpu(regdump_val[i + 3]));  	} -  }  static int ath6kl_hif_proc_dbg_intr(struct ath6kl_device *dev) @@ -701,5 +699,4 @@ int ath6kl_hif_setup(struct ath6kl_device *dev)  fail_setup:  	return status; -  } diff --git a/drivers/net/wireless/ath/ath6kl/hif.h b/drivers/net/wireless/ath/ath6kl/hif.h index 61f6b21fb0a..dc6bd8cd9b8 100644 --- a/drivers/net/wireless/ath/ath6kl/hif.h +++ b/drivers/net/wireless/ath/ath6kl/hif.h @@ -197,9 +197,9 @@ struct hif_scatter_req {  	/* bounce buffer for upper layers to copy to/from */  	u8 *virt_dma_buf; -	struct hif_scatter_item scat_list[1]; -  	u32 scat_q_depth; + +	struct hif_scatter_item scat_list[0];  };  struct ath6kl_irq_proc_registers { diff --git a/drivers/net/wireless/ath/ath6kl/htc.h b/drivers/net/wireless/ath/ath6kl/htc.h index a2c8ff80979..14cab1403dd 100644 --- a/drivers/net/wireless/ath/ath6kl/htc.h +++ b/drivers/net/wireless/ath/ath6kl/htc.h @@ -60,7 +60,7 @@  /* disable credit flow control on a specific service */  #define HTC_CONN_FLGS_DISABLE_CRED_FLOW_CTRL          (1 << 3)  #define HTC_CONN_FLGS_SET_RECV_ALLOC_SHIFT    8 -#define HTC_CONN_FLGS_SET_RECV_ALLOC_MASK     0xFF00 +#define HTC_CONN_FLGS_SET_RECV_ALLOC_MASK     0xFF00U  /* connect response status codes */  #define HTC_SERVICE_SUCCESS      0 diff --git a/drivers/net/wireless/ath/ath6kl/htc_mbox.c b/drivers/net/wireless/ath/ath6kl/htc_mbox.c index 65e5b719093..e481f14b987 100644 --- a/drivers/net/wireless/ath/ath6kl/htc_mbox.c +++ b/drivers/net/wireless/ath/ath6kl/htc_mbox.c @@ -112,9 +112,9 @@ static void ath6kl_credit_init(struct ath6kl_htc_credit_info *cred_info,  		if (cur_ep_dist->endpoint == ENDPOINT_0)  			continue; -		if (cur_ep_dist->svc_id == WMI_CONTROL_SVC) +		if (cur_ep_dist->svc_id == WMI_CONTROL_SVC) {  			cur_ep_dist->cred_norm = cur_ep_dist->cred_per_msg; -		else { +		} else {  			/*  			 * For the remaining data endpoints, we assume that  			 * each cred_per_msg are the same. We use a simple @@ -129,7 +129,6 @@ static void ath6kl_credit_init(struct ath6kl_htc_credit_info *cred_info,  			count = (count * 3) >> 2;  			count = max(count, cur_ep_dist->cred_per_msg);  			cur_ep_dist->cred_norm = count; -  		}  		ath6kl_dbg(ATH6KL_DBG_CREDIT, @@ -549,7 +548,6 @@ static int htc_check_credits(struct htc_target *target,  			     enum htc_endpoint_id eid, unsigned int len,  			     int *req_cred)  { -  	*req_cred = (len > target->tgt_cred_sz) ?  		     DIV_ROUND_UP(len, target->tgt_cred_sz) : 1; @@ -608,7 +606,6 @@ static void ath6kl_htc_tx_pkts_get(struct htc_target *target,  	unsigned int len;  	while (true) { -  		flags = 0;  		if (list_empty(&endpoint->txq)) @@ -889,7 +886,6 @@ static void ath6kl_htc_tx_from_queue(struct htc_target *target,  		ac = target->dev->ar->ep2ac_map[endpoint->eid];  	while (true) { -  		if (list_empty(&endpoint->txq))  			break; @@ -1190,7 +1186,6 @@ static void ath6kl_htc_mbox_flush_txep(struct htc_target *target,  		list_add_tail(&packet->list, &container);  		htc_tx_complete(endpoint, &container);  	} -  }  static void ath6kl_htc_flush_txep_all(struct htc_target *target) @@ -1394,7 +1389,6 @@ static int ath6kl_htc_rx_setup(struct htc_target *target,  	ep_cb = ep->ep_cb;  	for (j = 0; j < n_msg; j++) { -  		/*  		 * Reset flag, any packets allocated using the  		 * rx_alloc() API cannot be recycled on @@ -1424,9 +1418,9 @@ static int ath6kl_htc_rx_setup(struct htc_target *target,  				}  			} -			if (list_empty(&ep->rx_bufq)) +			if (list_empty(&ep->rx_bufq)) {  				packet = NULL; -			else { +			} else {  				packet = list_first_entry(&ep->rx_bufq,  						struct htc_packet, list);  				list_del(&packet->list); @@ -1487,7 +1481,6 @@ static int ath6kl_htc_rx_alloc(struct htc_target *target,  	spin_lock_bh(&target->rx_lock);  	for (i = 0; i < msg; i++) { -  		htc_hdr = (struct htc_frame_hdr *)&lk_ahds[i];  		if (htc_hdr->eid >= ENDPOINT_MAX) { @@ -1708,7 +1701,6 @@ static int htc_parse_trailer(struct htc_target *target,  		lk_ahd = (struct htc_lookahead_report *) record_buf;  		if ((lk_ahd->pre_valid == ((~lk_ahd->post_valid) & 0xFF)) &&  		    next_lk_ahds) { -  			ath6kl_dbg(ATH6KL_DBG_HTC,  				   "htc rx lk_ahd found pre_valid 0x%x post_valid 0x%x\n",  				   lk_ahd->pre_valid, lk_ahd->post_valid); @@ -1755,7 +1747,6 @@ static int htc_parse_trailer(struct htc_target *target,  	}  	return 0; -  }  static int htc_proc_trailer(struct htc_target *target, @@ -1776,7 +1767,6 @@ static int htc_proc_trailer(struct htc_target *target,  	status = 0;  	while (len > 0) { -  		if (len < sizeof(struct htc_record_hdr)) {  			status = -ENOMEM;  			break; @@ -2098,7 +2088,6 @@ static int ath6kl_htc_rx_fetch(struct htc_target *target,  		}  		if (!fetched_pkts) { -  			packet = list_first_entry(rx_pktq, struct htc_packet,  						   list); @@ -2173,7 +2162,6 @@ int ath6kl_htc_rxmsg_pending_handler(struct htc_target *target,  	look_aheads[0] = msg_look_ahead;  	while (true) { -  		/*  		 * First lookahead sets the expected endpoint IDs for all  		 * packets in a bundle. @@ -2825,8 +2813,9 @@ static int ath6kl_htc_reset(struct htc_target *target)  			packet->buf = packet->buf_start;  			packet->endpoint = ENDPOINT_0;  			list_add_tail(&packet->list, &target->free_ctrl_rxbuf); -		} else +		} else {  			list_add_tail(&packet->list, &target->free_ctrl_txbuf); +		}  	}  	return 0; diff --git a/drivers/net/wireless/ath/ath6kl/htc_pipe.c b/drivers/net/wireless/ath/ath6kl/htc_pipe.c index 67aa924ed8b..756fe52a12c 100644 --- a/drivers/net/wireless/ath/ath6kl/htc_pipe.c +++ b/drivers/net/wireless/ath/ath6kl/htc_pipe.c @@ -137,7 +137,6 @@ static void get_htc_packet_credit_based(struct htc_target *target,  			credits_required = 0;  		} else { -  			if (ep->cred_dist.credits < credits_required)  				break; @@ -169,7 +168,6 @@ static void get_htc_packet_credit_based(struct htc_target *target,  		/* queue this packet into the caller's queue */  		list_add_tail(&packet->list, queue);  	} -  }  static void get_htc_packet(struct htc_target *target, @@ -279,7 +277,6 @@ static int htc_issue_packets(struct htc_target *target,  			list_add(&packet->list, pkt_queue);  			break;  		} -  	}  	if (status != 0) { @@ -385,7 +382,6 @@ static enum htc_send_queue_result htc_try_send(struct htc_target *target,  			 */  			list_for_each_entry_safe(packet, tmp_pkt,  						 txq, list) { -  				ath6kl_dbg(ATH6KL_DBG_HTC,  					   "%s: Indicat overflowed TX pkts: %p\n",  					   __func__, packet); @@ -403,7 +399,6 @@ static enum htc_send_queue_result htc_try_send(struct htc_target *target,  					list_move_tail(&packet->list,  						       &send_queue);  				} -  			}  			if (list_empty(&send_queue)) { @@ -454,7 +449,6 @@ static enum htc_send_queue_result htc_try_send(struct htc_target *target,  	 * enough transmit resources.  	 */  	while (true) { -  		if (get_queue_depth(&ep->txq) == 0)  			break; @@ -495,8 +489,8 @@ static enum htc_send_queue_result htc_try_send(struct htc_target *target,  		}  		spin_lock_bh(&target->tx_lock); -  	} +  	/* done with this endpoint, we can clear the count */  	ep->tx_proc_cnt = 0;  	spin_unlock_bh(&target->tx_lock); @@ -1106,7 +1100,6 @@ free_skb:  	dev_kfree_skb(skb);  	return status; -  }  static void htc_flush_rx_queue(struct htc_target *target, @@ -1258,7 +1251,6 @@ static int ath6kl_htc_pipe_conn_service(struct htc_target *target,  		tx_alloc = 0;  	} else { -  		tx_alloc = htc_get_credit_alloc(target, conn_req->svc_id);  		if (tx_alloc == 0) {  			status = -ENOMEM; diff --git a/drivers/net/wireless/ath/ath6kl/init.c b/drivers/net/wireless/ath/ath6kl/init.c index 4f316bdcbab..d5ef211f261 100644 --- a/drivers/net/wireless/ath/ath6kl/init.c +++ b/drivers/net/wireless/ath/ath6kl/init.c @@ -1192,7 +1192,6 @@ static int ath6kl_upload_board_file(struct ath6kl *ar)  	if (board_ext_address &&  	    ar->fw_board_len == (board_data_size + board_ext_data_size)) { -  		/* write extended board data */  		ath6kl_dbg(ATH6KL_DBG_BOOT,  			   "writing extended board data to 0x%x (%d B)\n", diff --git a/drivers/net/wireless/ath/ath6kl/main.c b/drivers/net/wireless/ath/ath6kl/main.c index 5839fc23bdc..d56554674da 100644 --- a/drivers/net/wireless/ath/ath6kl/main.c +++ b/drivers/net/wireless/ath/ath6kl/main.c @@ -571,7 +571,6 @@ void ath6kl_scan_complete_evt(struct ath6kl_vif *vif, int status)  static int ath6kl_commit_ch_switch(struct ath6kl_vif *vif, u16 channel)  { -  	struct ath6kl *ar = vif->ar;  	vif->profile.ch = cpu_to_le16(channel); @@ -600,7 +599,6 @@ static int ath6kl_commit_ch_switch(struct ath6kl_vif *vif, u16 channel)  static void ath6kl_check_ch_switch(struct ath6kl *ar, u16 channel)  { -  	struct ath6kl_vif *vif;  	int res = 0; @@ -692,9 +690,9 @@ void ath6kl_tkip_micerr_event(struct ath6kl_vif *vif, u8 keyid, bool ismcast)  		cfg80211_michael_mic_failure(vif->ndev, sta->mac,  					     NL80211_KEYTYPE_PAIRWISE, keyid,  					     tsc, GFP_KERNEL); -	} else +	} else {  		ath6kl_cfg80211_tkip_micerr_event(vif, keyid, ismcast); - +	}  }  static void ath6kl_update_target_stats(struct ath6kl_vif *vif, u8 *ptr, u32 len) @@ -1093,8 +1091,9 @@ static int ath6kl_open(struct net_device *dev)  	if (test_bit(CONNECTED, &vif->flags)) {  		netif_carrier_on(dev);  		netif_wake_queue(dev); -	} else +	} else {  		netif_carrier_off(dev); +	}  	return 0;  } @@ -1146,7 +1145,6 @@ static int ath6kl_set_features(struct net_device *dev,  			dev->features = features | NETIF_F_RXCSUM;  			return err;  		} -  	}  	return err; diff --git a/drivers/net/wireless/ath/ath6kl/sdio.c b/drivers/net/wireless/ath/ath6kl/sdio.c index 7126bdd4236..339d89f14d3 100644 --- a/drivers/net/wireless/ath/ath6kl/sdio.c +++ b/drivers/net/wireless/ath/ath6kl/sdio.c @@ -348,7 +348,7 @@ static int ath6kl_sdio_alloc_prep_scat_req(struct ath6kl_sdio *ar_sdio,  	int i, scat_req_sz, scat_list_sz, size;  	u8 *virt_buf; -	scat_list_sz = (n_scat_entry - 1) * sizeof(struct hif_scatter_item); +	scat_list_sz = n_scat_entry * sizeof(struct hif_scatter_item);  	scat_req_sz = sizeof(*s_req) + scat_list_sz;  	if (!virt_scat) @@ -425,8 +425,9 @@ static int ath6kl_sdio_read_write_sync(struct ath6kl *ar, u32 addr, u8 *buf,  			memcpy(tbuf, buf, len);  		bounced = true; -	} else +	} else {  		tbuf = buf; +	}  	ret = ath6kl_sdio_io(ar_sdio->func, request, addr, tbuf, len);  	if ((request & HIF_READ) && bounced) @@ -441,9 +442,9 @@ static int ath6kl_sdio_read_write_sync(struct ath6kl *ar, u32 addr, u8 *buf,  static void __ath6kl_sdio_write_async(struct ath6kl_sdio *ar_sdio,  				      struct bus_request *req)  { -	if (req->scat_req) +	if (req->scat_req) {  		ath6kl_sdio_scat_rw(ar_sdio, req); -	else { +	} else {  		void *context;  		int status; @@ -656,7 +657,6 @@ static void ath6kl_sdio_scatter_req_add(struct ath6kl *ar,  	list_add_tail(&s_req->list, &ar_sdio->scat_req);  	spin_unlock_bh(&ar_sdio->scat_lock); -  }  /* scatter gather read write request */ @@ -674,9 +674,9 @@ static int ath6kl_sdio_async_rw_scatter(struct ath6kl *ar,  		   "hif-scatter: total len: %d scatter entries: %d\n",  		   scat_req->len, scat_req->scat_entries); -	if (request & HIF_SYNCHRONOUS) +	if (request & HIF_SYNCHRONOUS) {  		status = ath6kl_sdio_scat_rw(ar_sdio, scat_req->busrequest); -	else { +	} else {  		spin_lock_bh(&ar_sdio->wr_async_lock);  		list_add_tail(&scat_req->busrequest->list, &ar_sdio->wr_asyncq);  		spin_unlock_bh(&ar_sdio->wr_async_lock); @@ -856,7 +856,6 @@ static int ath6kl_sdio_suspend(struct ath6kl *ar, struct cfg80211_wowlan *wow)  	if (ar->suspend_mode == WLAN_POWER_STATE_WOW ||  	    (!ar->suspend_mode && wow)) { -  		ret = ath6kl_set_sdio_pm_caps(ar);  		if (ret)  			goto cut_pwr; @@ -878,7 +877,6 @@ static int ath6kl_sdio_suspend(struct ath6kl *ar, struct cfg80211_wowlan *wow)  	if (ar->suspend_mode == WLAN_POWER_STATE_DEEP_SLEEP ||  	    !ar->suspend_mode || try_deepsleep) { -  		flags = sdio_get_host_pm_caps(func);  		if (!(flags & MMC_PM_KEEP_POWER))  			goto cut_pwr; @@ -1061,7 +1059,6 @@ static int ath6kl_sdio_bmi_credits(struct ath6kl *ar)  	timeout = jiffies + msecs_to_jiffies(BMI_COMMUNICATION_TIMEOUT);  	while (time_before(jiffies, timeout) && !ar->bmi.cmd_credits) { -  		/*  		 * Hit the credit counter with a 4-byte access, the first byte  		 * read will hit the counter and cause a decrement, while the diff --git a/drivers/net/wireless/ath/ath6kl/target.h b/drivers/net/wireless/ath/ath6kl/target.h index a580a629a0d..d5eeeae7711 100644 --- a/drivers/net/wireless/ath/ath6kl/target.h +++ b/drivers/net/wireless/ath/ath6kl/target.h @@ -289,7 +289,7 @@ struct host_interest {  	u32 hi_hp_rx_traffic_ratio;                    /* 0xd8 */  	/* test applications flags */ -	u32 hi_test_apps_related    ;                  /* 0xdc */ +	u32 hi_test_apps_related;                      /* 0xdc */  	/* location of test script */  	u32 hi_ota_testscript;                         /* 0xe0 */  	/* location of CAL data */ diff --git a/drivers/net/wireless/ath/ath6kl/txrx.c b/drivers/net/wireless/ath/ath6kl/txrx.c index ebb24045a8a..40432fe7a5d 100644 --- a/drivers/net/wireless/ath/ath6kl/txrx.c +++ b/drivers/net/wireless/ath/ath6kl/txrx.c @@ -125,8 +125,9 @@ static bool ath6kl_process_uapsdq(struct ath6kl_sta *conn,  		*flags |= WMI_DATA_HDR_FLAGS_UAPSD;  		spin_unlock_bh(&conn->psq_lock);  		return false; -	} else if (!conn->apsd_info) +	} else if (!conn->apsd_info) {  		return false; +	}  	if (test_bit(WMM_ENABLED, &vif->flags)) {  		ether_type = be16_to_cpu(datap->h_proto); @@ -316,8 +317,9 @@ int ath6kl_control_tx(void *devt, struct sk_buff *skb,  		cookie = NULL;  		ath6kl_err("wmi ctrl ep full, dropping pkt : 0x%p, len:%d\n",  			   skb, skb->len); -	} else +	} else {  		cookie = ath6kl_alloc_cookie(ar); +	}  	if (cookie == NULL) {  		spin_unlock_bh(&ar->lock); @@ -359,7 +361,7 @@ int ath6kl_data_tx(struct sk_buff *skb, struct net_device *dev)  	struct ath6kl_vif *vif = netdev_priv(dev);  	u32 map_no = 0;  	u16 htc_tag = ATH6KL_DATA_PKT_TAG; -	u8 ac = 99 ; /* initialize to unmapped ac */ +	u8 ac = 99; /* initialize to unmapped ac */  	bool chk_adhoc_ps_mapping = false;  	int ret;  	struct wmi_tx_meta_v2 meta_v2; @@ -449,8 +451,9 @@ int ath6kl_data_tx(struct sk_buff *skb, struct net_device *dev)  			if (ret)  				goto fail_tx;  		} -	} else +	} else {  		goto fail_tx; +	}  	spin_lock_bh(&ar->lock); @@ -702,7 +705,6 @@ void ath6kl_tx_complete(struct htc_target *target,  	/* reap completed packets */  	while (!list_empty(packet_queue)) { -  		packet = list_first_entry(packet_queue, struct htc_packet,  					  list);  		list_del(&packet->list); @@ -1089,8 +1091,9 @@ static void aggr_deque_frms(struct aggr_info_conn *agg_conn, u8 tid,  			else  				skb_queue_tail(&rxtid->q, node->skb);  			node->skb = NULL; -		} else +		} else {  			stats->num_hole++; +		}  		rxtid->seq_next = ATH6KL_NEXT_SEQ_NO(rxtid->seq_next);  		idx = AGGR_WIN_IDX(rxtid->seq_next, rxtid->hold_q_sz); @@ -1211,7 +1214,7 @@ static bool aggr_process_recv_frm(struct aggr_info_conn *agg_conn, u8 tid,  		return is_queued;  	spin_lock_bh(&rxtid->lock); -	for (idx = 0 ; idx < rxtid->hold_q_sz; idx++) { +	for (idx = 0; idx < rxtid->hold_q_sz; idx++) {  		if (rxtid->hold_q[idx].skb) {  			/*  			 * There is a frame in the queue and no @@ -1265,7 +1268,6 @@ static void ath6kl_uapsd_trigger_frame_rx(struct ath6kl_vif *vif,  	is_apsdq_empty_at_start = is_apsdq_empty;  	while ((!is_apsdq_empty) && (num_frames_to_deliver)) { -  		spin_lock_bh(&conn->psq_lock);  		skb = skb_dequeue(&conn->apsdq);  		is_apsdq_empty = skb_queue_empty(&conn->apsdq); @@ -1606,16 +1608,18 @@ void ath6kl_rx(struct htc_target *target, struct htc_packet *packet)  			if (!conn)  				return;  			aggr_conn = conn->aggr_conn; -		} else +		} else {  			aggr_conn = vif->aggr_cntxt->aggr_conn; +		}  		if (aggr_process_recv_frm(aggr_conn, tid, seq_no,  					  is_amsdu, skb)) {  			/* aggregation code will handle the skb */  			return;  		} -	} else if (!is_broadcast_ether_addr(datap->h_dest)) +	} else if (!is_broadcast_ether_addr(datap->h_dest)) {  		vif->net_stats.multicast++; +	}  	ath6kl_deliver_frames_to_nw_stack(vif->ndev, skb);  } @@ -1710,8 +1714,9 @@ void aggr_recv_addba_req_evt(struct ath6kl_vif *vif, u8 tid_mux, u16 seq_no,  		sta = ath6kl_find_sta_by_aid(vif->ar, aid);  		if (sta)  			aggr_conn = sta->aggr_conn; -	} else +	} else {  		aggr_conn = vif->aggr_cntxt->aggr_conn; +	}  	if (!aggr_conn)  		return; @@ -1766,7 +1771,6 @@ void aggr_conn_init(struct ath6kl_vif *vif, struct aggr_info *aggr_info,  		skb_queue_head_init(&rxtid->q);  		spin_lock_init(&rxtid->lock);  	} -  }  struct aggr_info *aggr_init(struct ath6kl_vif *vif) @@ -1806,8 +1810,9 @@ void aggr_recv_delba_req_evt(struct ath6kl_vif *vif, u8 tid_mux)  		sta = ath6kl_find_sta_by_aid(vif->ar, aid);  		if (sta)  			aggr_conn = sta->aggr_conn; -	} else +	} else {  		aggr_conn = vif->aggr_cntxt->aggr_conn; +	}  	if (!aggr_conn)  		return; diff --git a/drivers/net/wireless/ath/ath6kl/usb.c b/drivers/net/wireless/ath/ath6kl/usb.c index f38ff6a6255..3afc5a463d0 100644 --- a/drivers/net/wireless/ath/ath6kl/usb.c +++ b/drivers/net/wireless/ath/ath6kl/usb.c @@ -24,7 +24,7 @@  /* constants */  #define TX_URB_COUNT            32  #define RX_URB_COUNT            32 -#define ATH6KL_USB_RX_BUFFER_SIZE  1700 +#define ATH6KL_USB_RX_BUFFER_SIZE  4096  /* tx/rx pipes for usb */  enum ATH6KL_USB_PIPE_ID { @@ -236,7 +236,6 @@ static void ath6kl_usb_free_pipe_resources(struct ath6kl_usb_pipe *pipe)  			break;  		kfree(urb_context);  	} -  }  static void ath6kl_usb_cleanup_pipe_resources(struct ath6kl_usb *ar_usb) @@ -245,7 +244,6 @@ static void ath6kl_usb_cleanup_pipe_resources(struct ath6kl_usb *ar_usb)  	for (i = 0; i < ATH6KL_USB_PIPE_MAX; i++)  		ath6kl_usb_free_pipe_resources(&ar_usb->pipes[i]); -  }  static u8 ath6kl_usb_get_logical_pipe_num(struct ath6kl_usb *ar_usb, @@ -481,8 +479,8 @@ static void ath6kl_usb_start_recv_pipes(struct ath6kl_usb *ar_usb)  	 *		ATH6KL_USB_RX_BUFFER_SIZE);  	 */ -	ar_usb->pipes[ATH6KL_USB_PIPE_RX_DATA].urb_cnt_thresh = -	    ar_usb->pipes[ATH6KL_USB_PIPE_RX_DATA].urb_alloc / 2; +	ar_usb->pipes[ATH6KL_USB_PIPE_RX_DATA].urb_cnt_thresh = 1; +  	ath6kl_usb_post_recv_transfers(&ar_usb->pipes[ATH6KL_USB_PIPE_RX_DATA],  				       ATH6KL_USB_RX_BUFFER_SIZE);  } diff --git a/drivers/net/wireless/ath/ath6kl/wmi.c b/drivers/net/wireless/ath/ath6kl/wmi.c index 546d5da0b89..4d7f9e4712e 100644 --- a/drivers/net/wireless/ath/ath6kl/wmi.c +++ b/drivers/net/wireless/ath/ath6kl/wmi.c @@ -289,8 +289,9 @@ int ath6kl_wmi_implicit_create_pstream(struct wmi *wmi, u8 if_idx,  			   ath6kl_wmi_determine_user_priority(((u8 *) llc_hdr) +  					sizeof(struct ath6kl_llc_snap_hdr),  					layer2_priority); -		} else +		} else {  			usr_pri = layer2_priority & 0x7; +		}  		/*  		 * Queue the EAPOL frames in the same WMM_AC_VO queue @@ -359,8 +360,9 @@ int ath6kl_wmi_dot11_hdr_remove(struct wmi *wmi, struct sk_buff *skb)  		hdr_size = roundup(sizeof(struct ieee80211_qos_hdr),  				   sizeof(u32));  		skb_pull(skb, hdr_size); -	} else if (sub_type == cpu_to_le16(IEEE80211_STYPE_DATA)) +	} else if (sub_type == cpu_to_le16(IEEE80211_STYPE_DATA)) {  		skb_pull(skb, sizeof(struct ieee80211_hdr_3addr)); +	}  	datap = skb->data;  	llc_hdr = (struct ath6kl_llc_snap_hdr *)(datap); @@ -914,7 +916,7 @@ ath6kl_get_regpair(u16 regdmn)  		return NULL;  	for (i = 0; i < ARRAY_SIZE(regDomainPairs); i++) { -		if (regDomainPairs[i].regDmnEnum == regdmn) +		if (regDomainPairs[i].reg_domain == regdmn)  			return ®DomainPairs[i];  	} @@ -936,7 +938,6 @@ ath6kl_regd_find_country_by_rd(u16 regdmn)  static void ath6kl_wmi_regdomain_event(struct wmi *wmi, u8 *datap, int len)  { -  	struct ath6kl_wmi_regdomain *ev;  	struct country_code_to_enum_rd *country = NULL;  	struct reg_dmn_pair_mapping *regpair = NULL; @@ -946,15 +947,14 @@ static void ath6kl_wmi_regdomain_event(struct wmi *wmi, u8 *datap, int len)  	ev = (struct ath6kl_wmi_regdomain *) datap;  	reg_code = le32_to_cpu(ev->reg_code); -	if ((reg_code >> ATH6KL_COUNTRY_RD_SHIFT) & COUNTRY_ERD_FLAG) +	if ((reg_code >> ATH6KL_COUNTRY_RD_SHIFT) & COUNTRY_ERD_FLAG) {  		country = ath6kl_regd_find_country((u16) reg_code); -	else if (!(((u16) reg_code & WORLD_SKU_MASK) == WORLD_SKU_PREFIX)) { - +	} else if (!(((u16) reg_code & WORLD_SKU_MASK) == WORLD_SKU_PREFIX)) {  		regpair = ath6kl_get_regpair((u16) reg_code);  		country = ath6kl_regd_find_country_by_rd((u16) reg_code);  		if (regpair)  			ath6kl_dbg(ATH6KL_DBG_WMI, "Regpair used: 0x%0x\n", -				   regpair->regDmnEnum); +				   regpair->reg_domain);  		else  			ath6kl_warn("Regpair not found reg_code 0x%0x\n",  				    reg_code); @@ -1499,7 +1499,6 @@ static int ath6kl_wmi_cac_event_rx(struct wmi *wmi, u8 *datap, int len,  	if ((reply->cac_indication == CAC_INDICATION_ADMISSION_RESP) &&  	    (reply->status_code != IEEE80211_TSPEC_STATUS_ADMISS_ACCEPTED)) { -  		ts = (struct ieee80211_tspec_ie *) &(reply->tspec_suggestion);  		tsinfo = le16_to_cpu(ts->tsinfo);  		tsid = (tsinfo >> IEEE80211_WMM_IE_TSPEC_TID_SHIFT) & @@ -1530,7 +1529,6 @@ static int ath6kl_wmi_cac_event_rx(struct wmi *wmi, u8 *datap, int len,  	 * for delete qos stream from AP  	 */  	else if (reply->cac_indication == CAC_INDICATION_DELETE) { -  		ts = (struct ieee80211_tspec_ie *) &(reply->tspec_suggestion);  		tsinfo = le16_to_cpu(ts->tsinfo);  		ts_id = ((tsinfo >> IEEE80211_WMM_IE_TSPEC_TID_SHIFT) & @@ -2322,7 +2320,7 @@ int ath6kl_wmi_addkey_cmd(struct wmi *wmi, u8 if_idx, u8 key_index,  	return ret;  } -int ath6kl_wmi_add_krk_cmd(struct wmi *wmi, u8 if_idx, u8 *krk) +int ath6kl_wmi_add_krk_cmd(struct wmi *wmi, u8 if_idx, const u8 *krk)  {  	struct sk_buff *skb;  	struct wmi_add_krk_cmd *cmd; @@ -2479,7 +2477,6 @@ static int ath6kl_wmi_sync_point(struct wmi *wmi, u8 if_idx)  		goto free_data_skb;  	for (index = 0; index < num_pri_streams; index++) { -  		if (WARN_ON(!data_sync_bufs[index].skb))  			goto free_data_skb; @@ -2704,7 +2701,6 @@ static void ath6kl_wmi_relinquish_implicit_pstream_credits(struct wmi *wmi)  	for (i = 0; i < WMM_NUM_AC; i++) {  		if (stream_exist & (1 << i)) { -  			/*  			 * FIXME: Is this lock & unlock inside  			 * for loop correct? may need rework. @@ -2754,9 +2750,9 @@ static int ath6kl_set_bitrate_mask64(struct wmi *wmi, u8 if_idx,  				mask->control[band].legacy << 4;  		/* copy mcs rate mask */ -		mcsrate = mask->control[band].mcs[1]; +		mcsrate = mask->control[band].ht_mcs[1];  		mcsrate <<= 8; -		mcsrate |= mask->control[band].mcs[0]; +		mcsrate |= mask->control[band].ht_mcs[0];  		ratemask[band] |= mcsrate << 12;  		ratemask[band] |= mcsrate << 28;  	} @@ -2806,7 +2802,7 @@ static int ath6kl_set_bitrate_mask32(struct wmi *wmi, u8 if_idx,  				mask->control[band].legacy << 4;  		/* copy mcs rate mask */ -		mcsrate = mask->control[band].mcs[0]; +		mcsrate = mask->control[band].ht_mcs[0];  		ratemask[band] |= mcsrate << 12;  		ratemask[band] |= mcsrate << 20;  	} @@ -2870,8 +2866,9 @@ int ath6kl_wmi_set_host_sleep_mode_cmd(struct wmi *wmi, u8 if_idx,  	if (host_mode == ATH6KL_HOST_MODE_ASLEEP) {  		ath6kl_wmi_relinquish_implicit_pstream_credits(wmi);  		cmd->asleep = cpu_to_le32(1); -	} else +	} else {  		cmd->awake = cpu_to_le32(1); +	}  	ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb,  				  WMI_SET_HOST_SLEEP_MODE_CMDID, diff --git a/drivers/net/wireless/ath/ath6kl/wmi.h b/drivers/net/wireless/ath/ath6kl/wmi.h index b5f226503ba..bb23fc00111 100644 --- a/drivers/net/wireless/ath/ath6kl/wmi.h +++ b/drivers/net/wireless/ath/ath6kl/wmi.h @@ -898,7 +898,6 @@ struct wmi_start_scan_cmd {   *  flags here   */  enum wmi_scan_ctrl_flags_bits { -  	/* set if can scan in the connect cmd */  	CONNECT_SCAN_CTRL_FLAGS = 0x01, @@ -1068,7 +1067,7 @@ struct wmi_power_mode_cmd {  } __packed;  /* - * Policy to determnine whether power save failure event should be sent to + * Policy to determine whether power save failure event should be sent to   * host during scanning   */  enum power_save_fail_event_policy { @@ -2617,7 +2616,7 @@ int ath6kl_wmi_addkey_cmd(struct wmi *wmi, u8 if_idx, u8 key_index,  			  u8 *key_material,  			  u8 key_op_ctrl, u8 *mac_addr,  			  enum wmi_sync_flag sync_flag); -int ath6kl_wmi_add_krk_cmd(struct wmi *wmi, u8 if_idx, u8 *krk); +int ath6kl_wmi_add_krk_cmd(struct wmi *wmi, u8 if_idx, const u8 *krk);  int ath6kl_wmi_deletekey_cmd(struct wmi *wmi, u8 if_idx, u8 key_index);  int ath6kl_wmi_setpmkid_cmd(struct wmi *wmi, u8 if_idx, const u8 *bssid,  			    const u8 *pmkid, bool set);  | 
