diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-08-04 11:47:58 -0700 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-08-04 11:47:58 -0700 | 
| commit | 6ba74014c1ab0e37af7de6f64b4eccbbae3cb9e7 (patch) | |
| tree | 8f3892fc44f1e403675a6d7e88fda5c70e56ee4c /drivers/net/wireless/mwl8k.c | |
| parent | 5abd9ccced7a726c817dd6b5b96bc933859138d1 (diff) | |
| parent | 3ff1c25927e3af61c6bf0e4ed959504058ae4565 (diff) | |
| download | olio-linux-3.10-6ba74014c1ab0e37af7de6f64b4eccbbae3cb9e7.tar.xz olio-linux-3.10-6ba74014c1ab0e37af7de6f64b4eccbbae3cb9e7.zip  | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6: (1443 commits)
  phy/marvell: add 88ec048 support
  igb: Program MDICNFG register prior to PHY init
  e1000e: correct MAC-PHY interconnect register offset for 82579
  hso: Add new product ID
  can: Add driver for esd CAN-USB/2 device
  l2tp: fix export of header file for userspace
  can-raw: Fix skb_orphan_try handling
  Revert "net: remove zap_completion_queue"
  net: cleanup inclusion
  phy/marvell: add 88e1121 interface mode support
  u32: negative offset fix
  net: Fix a typo from "dev" to "ndev"
  igb: Use irq_synchronize per vector when using MSI-X
  ixgbevf: fix null pointer dereference due to filter being set for VLAN 0
  e1000e: Fix irq_synchronize in MSI-X case
  e1000e: register pm_qos request on hardware activation
  ip_fragment: fix subtracting PPPOE_SES_HLEN from mtu twice
  net: Add getsockopt support for TCP thin-streams
  cxgb4: update driver version
  cxgb4: add new PCI IDs
  ...
Manually fix up conflicts in:
 - drivers/net/e1000e/netdev.c: due to pm_qos registration
   infrastructure changes
 - drivers/net/phy/marvell.c: conflict between adding 88ec048 support
   and cleaning up the IDs
 - drivers/net/wireless/ipw2x00/ipw2100.c: trivial ipw2100_pm_qos_req
   conflict (registration change vs marking it static)
Diffstat (limited to 'drivers/net/wireless/mwl8k.c')
| -rw-r--r-- | drivers/net/wireless/mwl8k.c | 254 | 
1 files changed, 130 insertions, 124 deletions
diff --git a/drivers/net/wireless/mwl8k.c b/drivers/net/wireless/mwl8k.c index 808adb90909..d761ed2d8af 100644 --- a/drivers/net/wireless/mwl8k.c +++ b/drivers/net/wireless/mwl8k.c @@ -86,7 +86,7 @@ struct rxd_ops {  	void (*rxd_init)(void *rxd, dma_addr_t next_dma_addr);  	void (*rxd_refill)(void *rxd, dma_addr_t addr, int len);  	int (*rxd_process)(void *rxd, struct ieee80211_rx_status *status, -			   __le16 *qos); +			   __le16 *qos, s8 *noise);  };  struct mwl8k_device_info { @@ -109,7 +109,7 @@ struct mwl8k_rx_queue {  	dma_addr_t rxd_dma;  	struct {  		struct sk_buff *skb; -		DECLARE_PCI_UNMAP_ADDR(dma) +		DEFINE_DMA_UNMAP_ADDR(dma);  	} *buf;  }; @@ -207,6 +207,9 @@ struct mwl8k_priv {  	/* Tasklet to perform RX.  */  	struct tasklet_struct poll_rx_task; + +	/* Most recently reported noise in dBm */ +	s8 noise;  };  /* Per interface specific private data */ @@ -314,13 +317,15 @@ static const struct ieee80211_rate mwl8k_rates_50[] = {  #define MWL8K_CMD_SET_NEW_STN		0x1111		/* per-vif */  #define MWL8K_CMD_UPDATE_STADB		0x1123 -static const char *mwl8k_cmd_name(u16 cmd, char *buf, int bufsize) +static const char *mwl8k_cmd_name(__le16 cmd, char *buf, int bufsize)  { +	u16 command = le16_to_cpu(cmd); +  #define MWL8K_CMDNAME(x)	case MWL8K_CMD_##x: do {\  					snprintf(buf, bufsize, "%s", #x);\  					return buf;\  					} while (0) -	switch (cmd & ~0x8000) { +	switch (command & ~0x8000) {  		MWL8K_CMDNAME(CODE_DNLD);  		MWL8K_CMDNAME(GET_HW_SPEC);  		MWL8K_CMDNAME(SET_HW_SPEC); @@ -426,7 +431,7 @@ struct mwl8k_cmd_pkt {  	__u8	macid;  	__le16	result;  	char	payload[0]; -} __attribute__((packed)); +} __packed;  /*   * Firmware loading. @@ -632,7 +637,7 @@ struct mwl8k_dma_data {  	__le16 fwlen;  	struct ieee80211_hdr wh;  	char data[0]; -} __attribute__((packed)); +} __packed;  /* Routines to add/remove DMA header from skb.  */  static inline void mwl8k_remove_dma_header(struct sk_buff *skb, __le16 qos) @@ -711,7 +716,7 @@ struct mwl8k_rxd_8366_ap {  	__u8 rx_status;  	__u8 channel;  	__u8 rx_ctrl; -} __attribute__((packed)); +} __packed;  #define MWL8K_8366_AP_RATE_INFO_MCS_FORMAT	0x80  #define MWL8K_8366_AP_RATE_INFO_40MHZ		0x40 @@ -739,7 +744,7 @@ static void mwl8k_rxd_8366_ap_refill(void *_rxd, dma_addr_t addr, int len)  static int  mwl8k_rxd_8366_ap_process(void *_rxd, struct ieee80211_rx_status *status, -			  __le16 *qos) +			  __le16 *qos, s8 *noise)  {  	struct mwl8k_rxd_8366_ap *rxd = _rxd; @@ -750,6 +755,7 @@ mwl8k_rxd_8366_ap_process(void *_rxd, struct ieee80211_rx_status *status,  	memset(status, 0, sizeof(*status));  	status->signal = -rxd->rssi; +	*noise = -rxd->noise_floor;  	if (rxd->rate & MWL8K_8366_AP_RATE_INFO_MCS_FORMAT) {  		status->flag |= RX_FLAG_HT; @@ -806,7 +812,7 @@ struct mwl8k_rxd_sta {  	__u8 rx_ctrl;  	__u8 rx_status;  	__u8 pad2[2]; -} __attribute__((packed)); +} __packed;  #define MWL8K_STA_RATE_INFO_SHORTPRE		0x8000  #define MWL8K_STA_RATE_INFO_ANTSELECT(x)	(((x) >> 11) & 0x3) @@ -837,7 +843,7 @@ static void mwl8k_rxd_sta_refill(void *_rxd, dma_addr_t addr, int len)  static int  mwl8k_rxd_sta_process(void *_rxd, struct ieee80211_rx_status *status, -		       __le16 *qos) +		       __le16 *qos, s8 *noise)  {  	struct mwl8k_rxd_sta *rxd = _rxd;  	u16 rate_info; @@ -851,6 +857,7 @@ mwl8k_rxd_sta_process(void *_rxd, struct ieee80211_rx_status *status,  	memset(status, 0, sizeof(*status));  	status->signal = -rxd->rssi; +	*noise = -rxd->noise_level;  	status->antenna = MWL8K_STA_RATE_INFO_ANTSELECT(rate_info);  	status->rate_idx = MWL8K_STA_RATE_INFO_RATEID(rate_info); @@ -903,16 +910,14 @@ static int mwl8k_rxq_init(struct ieee80211_hw *hw, int index)  	rxq->rxd = pci_alloc_consistent(priv->pdev, size, &rxq->rxd_dma);  	if (rxq->rxd == NULL) { -		printk(KERN_ERR "%s: failed to alloc RX descriptors\n", -		       wiphy_name(hw->wiphy)); +		wiphy_err(hw->wiphy, "failed to alloc rx descriptors\n");  		return -ENOMEM;  	}  	memset(rxq->rxd, 0, size);  	rxq->buf = kmalloc(MWL8K_RX_DESCS * sizeof(*rxq->buf), GFP_KERNEL);  	if (rxq->buf == NULL) { -		printk(KERN_ERR "%s: failed to alloc RX skbuff list\n", -		       wiphy_name(hw->wiphy)); +		wiphy_err(hw->wiphy, "failed to alloc rx skbuff list\n");  		pci_free_consistent(priv->pdev, size, rxq->rxd, rxq->rxd_dma);  		return -ENOMEM;  	} @@ -963,7 +968,7 @@ static int rxq_refill(struct ieee80211_hw *hw, int index, int limit)  		if (rxq->tail == MWL8K_RX_DESCS)  			rxq->tail = 0;  		rxq->buf[rx].skb = skb; -		pci_unmap_addr_set(&rxq->buf[rx], dma, addr); +		dma_unmap_addr_set(&rxq->buf[rx], dma, addr);  		rxd = rxq->rxd + (rx * priv->rxd_ops->rxd_size);  		priv->rxd_ops->rxd_refill(rxd, addr, MWL8K_RX_MAXSZ); @@ -984,9 +989,9 @@ static void mwl8k_rxq_deinit(struct ieee80211_hw *hw, int index)  	for (i = 0; i < MWL8K_RX_DESCS; i++) {  		if (rxq->buf[i].skb != NULL) {  			pci_unmap_single(priv->pdev, -					 pci_unmap_addr(&rxq->buf[i], dma), +					 dma_unmap_addr(&rxq->buf[i], dma),  					 MWL8K_RX_MAXSZ, PCI_DMA_FROMDEVICE); -			pci_unmap_addr_set(&rxq->buf[i], dma, 0); +			dma_unmap_addr_set(&rxq->buf[i], dma, 0);  			kfree_skb(rxq->buf[i].skb);  			rxq->buf[i].skb = NULL; @@ -1053,16 +1058,17 @@ static int rxq_process(struct ieee80211_hw *hw, int index, int limit)  		rxd = rxq->rxd + (rxq->head * priv->rxd_ops->rxd_size); -		pkt_len = priv->rxd_ops->rxd_process(rxd, &status, &qos); +		pkt_len = priv->rxd_ops->rxd_process(rxd, &status, &qos, +							&priv->noise);  		if (pkt_len < 0)  			break;  		rxq->buf[rxq->head].skb = NULL;  		pci_unmap_single(priv->pdev, -				 pci_unmap_addr(&rxq->buf[rxq->head], dma), +				 dma_unmap_addr(&rxq->buf[rxq->head], dma),  				 MWL8K_RX_MAXSZ, PCI_DMA_FROMDEVICE); -		pci_unmap_addr_set(&rxq->buf[rxq->head], dma, 0); +		dma_unmap_addr_set(&rxq->buf[rxq->head], dma, 0);  		rxq->head++;  		if (rxq->head == MWL8K_RX_DESCS) @@ -1120,7 +1126,7 @@ struct mwl8k_tx_desc {  	__le16 rate_info;  	__u8 peer_id;  	__u8 tx_frag_cnt; -} __attribute__((packed)); +} __packed;  #define MWL8K_TX_DESCS		128 @@ -1139,16 +1145,14 @@ static int mwl8k_txq_init(struct ieee80211_hw *hw, int index)  	txq->txd = pci_alloc_consistent(priv->pdev, size, &txq->txd_dma);  	if (txq->txd == NULL) { -		printk(KERN_ERR "%s: failed to alloc TX descriptors\n", -		       wiphy_name(hw->wiphy)); +		wiphy_err(hw->wiphy, "failed to alloc tx descriptors\n");  		return -ENOMEM;  	}  	memset(txq->txd, 0, size);  	txq->skb = kmalloc(MWL8K_TX_DESCS * sizeof(*txq->skb), GFP_KERNEL);  	if (txq->skb == NULL) { -		printk(KERN_ERR "%s: failed to alloc TX skbuff list\n", -		       wiphy_name(hw->wiphy)); +		wiphy_err(hw->wiphy, "failed to alloc tx skbuff list\n");  		pci_free_consistent(priv->pdev, size, txq->txd, txq->txd_dma);  		return -ENOMEM;  	} @@ -1204,11 +1208,12 @@ static void mwl8k_dump_tx_rings(struct ieee80211_hw *hw)  				unused++;  		} -		printk(KERN_ERR "%s: txq[%d] len=%d head=%d tail=%d " -		       "fw_owned=%d drv_owned=%d unused=%d\n", -		       wiphy_name(hw->wiphy), i, -		       txq->len, txq->head, txq->tail, -		       fw_owned, drv_owned, unused); +		wiphy_err(hw->wiphy, +			  "txq[%d] len=%d head=%d tail=%d " +			  "fw_owned=%d drv_owned=%d unused=%d\n", +			  i, +			  txq->len, txq->head, txq->tail, +			  fw_owned, drv_owned, unused);  	}  } @@ -1252,25 +1257,23 @@ static int mwl8k_tx_wait_empty(struct ieee80211_hw *hw)  		if (timeout) {  			WARN_ON(priv->pending_tx_pkts);  			if (retry) { -				printk(KERN_NOTICE "%s: tx rings drained\n", -				       wiphy_name(hw->wiphy)); +				wiphy_notice(hw->wiphy, "tx rings drained\n");  			}  			break;  		}  		if (priv->pending_tx_pkts < oldcount) { -			printk(KERN_NOTICE "%s: waiting for tx rings " -			       "to drain (%d -> %d pkts)\n", -			       wiphy_name(hw->wiphy), oldcount, -			       priv->pending_tx_pkts); +			wiphy_notice(hw->wiphy, +				     "waiting for tx rings to drain (%d -> %d pkts)\n", +				     oldcount, priv->pending_tx_pkts);  			retry = 1;  			continue;  		}  		priv->tx_wait = NULL; -		printk(KERN_ERR "%s: tx rings stuck for %d ms\n", -		       wiphy_name(hw->wiphy), MWL8K_TX_WAIT_TIMEOUT_MS); +		wiphy_err(hw->wiphy, "tx rings stuck for %d ms\n", +			  MWL8K_TX_WAIT_TIMEOUT_MS);  		mwl8k_dump_tx_rings(hw);  		rc = -ETIMEDOUT; @@ -1421,8 +1424,8 @@ mwl8k_txq_xmit(struct ieee80211_hw *hw, int index, struct sk_buff *skb)  				skb->len, PCI_DMA_TODEVICE);  	if (pci_dma_mapping_error(priv->pdev, dma)) { -		printk(KERN_DEBUG "%s: failed to dma map skb, " -		       "dropping TX frame.\n", wiphy_name(hw->wiphy)); +		wiphy_debug(hw->wiphy, +			    "failed to dma map skb, dropping TX frame.\n");  		dev_kfree_skb(skb);  		return NETDEV_TX_OK;  	} @@ -1538,7 +1541,7 @@ static int mwl8k_post_cmd(struct ieee80211_hw *hw, struct mwl8k_cmd_pkt *cmd)  	unsigned long timeout = 0;  	u8 buf[32]; -	cmd->result = 0xffff; +	cmd->result = (__force __le16) 0xffff;  	dma_size = le16_to_cpu(cmd->length);  	dma_addr = pci_map_single(priv->pdev, cmd, dma_size,  				  PCI_DMA_BIDIRECTIONAL); @@ -1570,10 +1573,9 @@ static int mwl8k_post_cmd(struct ieee80211_hw *hw, struct mwl8k_cmd_pkt *cmd)  					PCI_DMA_BIDIRECTIONAL);  	if (!timeout) { -		printk(KERN_ERR "%s: Command %s timeout after %u ms\n", -		       wiphy_name(hw->wiphy), -		       mwl8k_cmd_name(cmd->code, buf, sizeof(buf)), -		       MWL8K_CMD_TIMEOUT_MS); +		wiphy_err(hw->wiphy, "command %s timeout after %u ms\n", +			  mwl8k_cmd_name(cmd->code, buf, sizeof(buf)), +			  MWL8K_CMD_TIMEOUT_MS);  		rc = -ETIMEDOUT;  	} else {  		int ms; @@ -1582,15 +1584,14 @@ static int mwl8k_post_cmd(struct ieee80211_hw *hw, struct mwl8k_cmd_pkt *cmd)  		rc = cmd->result ? -EINVAL : 0;  		if (rc) -			printk(KERN_ERR "%s: Command %s error 0x%x\n", -			       wiphy_name(hw->wiphy), -			       mwl8k_cmd_name(cmd->code, buf, sizeof(buf)), -			       le16_to_cpu(cmd->result)); +			wiphy_err(hw->wiphy, "command %s error 0x%x\n", +				  mwl8k_cmd_name(cmd->code, buf, sizeof(buf)), +				  le16_to_cpu(cmd->result));  		else if (ms > 2000) -			printk(KERN_NOTICE "%s: Command %s took %d ms\n", -			       wiphy_name(hw->wiphy), -			       mwl8k_cmd_name(cmd->code, buf, sizeof(buf)), -			       ms); +			wiphy_notice(hw->wiphy, "command %s took %d ms\n", +				     mwl8k_cmd_name(cmd->code, +						    buf, sizeof(buf)), +				     ms);  	}  	return rc; @@ -1666,7 +1667,7 @@ struct mwl8k_cmd_get_hw_spec_sta {  	__le32 caps2;  	__le32 num_tx_desc_per_queue;  	__le32 total_rxd; -} __attribute__((packed)); +} __packed;  #define MWL8K_CAP_MAX_AMSDU		0x20000000  #define MWL8K_CAP_GREENFIELD		0x08000000 @@ -1810,7 +1811,7 @@ struct mwl8k_cmd_get_hw_spec_ap {  	__le32 wcbbase1;  	__le32 wcbbase2;  	__le32 wcbbase3; -} __attribute__((packed)); +} __packed;  static int mwl8k_cmd_get_hw_spec_ap(struct ieee80211_hw *hw)  { @@ -1842,22 +1843,22 @@ static int mwl8k_cmd_get_hw_spec_ap(struct ieee80211_hw *hw)  		priv->sta_macids_supported = 0x00000000;  		off = le32_to_cpu(cmd->wcbbase0) & 0xffff; -		iowrite32(cpu_to_le32(priv->txq[0].txd_dma), priv->sram + off); +		iowrite32(priv->txq[0].txd_dma, priv->sram + off);  		off = le32_to_cpu(cmd->rxwrptr) & 0xffff; -		iowrite32(cpu_to_le32(priv->rxq[0].rxd_dma), priv->sram + off); +		iowrite32(priv->rxq[0].rxd_dma, priv->sram + off);  		off = le32_to_cpu(cmd->rxrdptr) & 0xffff; -		iowrite32(cpu_to_le32(priv->rxq[0].rxd_dma), priv->sram + off); +		iowrite32(priv->rxq[0].rxd_dma, priv->sram + off);  		off = le32_to_cpu(cmd->wcbbase1) & 0xffff; -		iowrite32(cpu_to_le32(priv->txq[1].txd_dma), priv->sram + off); +		iowrite32(priv->txq[1].txd_dma, priv->sram + off);  		off = le32_to_cpu(cmd->wcbbase2) & 0xffff; -		iowrite32(cpu_to_le32(priv->txq[2].txd_dma), priv->sram + off); +		iowrite32(priv->txq[2].txd_dma, priv->sram + off);  		off = le32_to_cpu(cmd->wcbbase3) & 0xffff; -		iowrite32(cpu_to_le32(priv->txq[3].txd_dma), priv->sram + off); +		iowrite32(priv->txq[3].txd_dma, priv->sram + off);  	}  	kfree(cmd); @@ -1883,7 +1884,7 @@ struct mwl8k_cmd_set_hw_spec {  	__le32 flags;  	__le32 num_tx_desc_per_queue;  	__le32 total_rxd; -} __attribute__((packed)); +} __packed;  #define MWL8K_SET_HW_SPEC_FLAG_HOST_DECR_MGMT		0x00000080  #define MWL8K_SET_HW_SPEC_FLAG_HOSTFORM_PROBERESP	0x00000020 @@ -1985,7 +1986,7 @@ __mwl8k_cmd_mac_multicast_adr(struct ieee80211_hw *hw, int allmulti,  struct mwl8k_cmd_get_stat {  	struct mwl8k_cmd_pkt header;  	__le32 stats[64]; -} __attribute__((packed)); +} __packed;  #define MWL8K_STAT_ACK_FAILURE	9  #define MWL8K_STAT_RTS_FAILURE	12 @@ -2029,7 +2030,7 @@ struct mwl8k_cmd_radio_control {  	__le16 action;  	__le16 control;  	__le16 radio_on; -} __attribute__((packed)); +} __packed;  static int  mwl8k_cmd_radio_control(struct ieee80211_hw *hw, bool enable, bool force) @@ -2092,7 +2093,7 @@ struct mwl8k_cmd_rf_tx_power {  	__le16 current_level;  	__le16 reserved;  	__le16 power_level_list[MWL8K_TX_POWER_LEVEL_TOTAL]; -} __attribute__((packed)); +} __packed;  static int mwl8k_cmd_rf_tx_power(struct ieee80211_hw *hw, int dBm)  { @@ -2121,7 +2122,7 @@ struct mwl8k_cmd_rf_antenna {  	struct mwl8k_cmd_pkt header;  	__le16 antenna;  	__le16 mode; -} __attribute__((packed)); +} __packed;  #define MWL8K_RF_ANTENNA_RX		1  #define MWL8K_RF_ANTENNA_TX		2 @@ -2182,7 +2183,7 @@ static int mwl8k_cmd_set_beacon(struct ieee80211_hw *hw,   */  struct mwl8k_cmd_set_pre_scan {  	struct mwl8k_cmd_pkt header; -} __attribute__((packed)); +} __packed;  static int mwl8k_cmd_set_pre_scan(struct ieee80211_hw *hw)  { @@ -2209,7 +2210,7 @@ struct mwl8k_cmd_set_post_scan {  	struct mwl8k_cmd_pkt header;  	__le32 isibss;  	__u8 bssid[ETH_ALEN]; -} __attribute__((packed)); +} __packed;  static int  mwl8k_cmd_set_post_scan(struct ieee80211_hw *hw, const __u8 *mac) @@ -2240,7 +2241,7 @@ struct mwl8k_cmd_set_rf_channel {  	__le16 action;  	__u8 current_channel;  	__le32 channel_flags; -} __attribute__((packed)); +} __packed;  static int mwl8k_cmd_set_rf_channel(struct ieee80211_hw *hw,  				    struct ieee80211_conf *conf) @@ -2293,7 +2294,7 @@ struct mwl8k_cmd_update_set_aid {  	__u8	bssid[ETH_ALEN];  	__le16	protection_mode;  	__u8	supp_rates[14]; -} __attribute__((packed)); +} __packed;  static void legacy_rate_mask_to_array(u8 *rates, u32 mask)  { @@ -2364,7 +2365,7 @@ struct mwl8k_cmd_set_rate {  	/* Bitmap for supported MCS codes.  */  	__u8	mcs_set[16];  	__u8	reserved[16]; -} __attribute__((packed)); +} __packed;  static int  mwl8k_cmd_set_rate(struct ieee80211_hw *hw, struct ieee80211_vif *vif, @@ -2397,7 +2398,7 @@ struct mwl8k_cmd_finalize_join {  	struct mwl8k_cmd_pkt header;  	__le32 sleep_interval;	/* Number of beacon periods to sleep */  	__u8 beacon_data[MWL8K_FJ_BEACON_MAXLEN]; -} __attribute__((packed)); +} __packed;  static int mwl8k_cmd_finalize_join(struct ieee80211_hw *hw, void *frame,  				   int framelen, int dtim) @@ -2436,7 +2437,7 @@ struct mwl8k_cmd_set_rts_threshold {  	struct mwl8k_cmd_pkt header;  	__le16 action;  	__le16 threshold; -} __attribute__((packed)); +} __packed;  static int  mwl8k_cmd_set_rts_threshold(struct ieee80211_hw *hw, int rts_thresh) @@ -2466,7 +2467,7 @@ struct mwl8k_cmd_set_slot {  	struct mwl8k_cmd_pkt header;  	__le16 action;  	__u8 short_slot; -} __attribute__((packed)); +} __packed;  static int mwl8k_cmd_set_slot(struct ieee80211_hw *hw, bool short_slot_time)  { @@ -2528,7 +2529,7 @@ struct mwl8k_cmd_set_edca_params {  			__u8 txq;  		} sta;  	}; -} __attribute__((packed)); +} __packed;  #define MWL8K_SET_EDCA_CW	0x01  #define MWL8K_SET_EDCA_TXOP	0x02 @@ -2579,7 +2580,7 @@ mwl8k_cmd_set_edca_params(struct ieee80211_hw *hw, __u8 qnum,  struct mwl8k_cmd_set_wmm_mode {  	struct mwl8k_cmd_pkt header;  	__le16 action; -} __attribute__((packed)); +} __packed;  static int mwl8k_cmd_set_wmm_mode(struct ieee80211_hw *hw, bool enable)  { @@ -2612,7 +2613,7 @@ struct mwl8k_cmd_mimo_config {  	__le32 action;  	__u8 rx_antenna_map;  	__u8 tx_antenna_map; -} __attribute__((packed)); +} __packed;  static int mwl8k_cmd_mimo_config(struct ieee80211_hw *hw, __u8 rx, __u8 tx)  { @@ -2652,7 +2653,7 @@ struct mwl8k_cmd_use_fixed_rate_sta {  	__le32 rate_type;  	__le32 reserved1;  	__le32 reserved2; -} __attribute__((packed)); +} __packed;  #define MWL8K_USE_AUTO_RATE	0x0002  #define MWL8K_UCAST_RATE	0 @@ -2694,7 +2695,7 @@ struct mwl8k_cmd_use_fixed_rate_ap {  	u8 multicast_rate;  	u8 multicast_rate_type;  	u8 management_rate; -} __attribute__((packed)); +} __packed;  static int  mwl8k_cmd_use_fixed_rate_ap(struct ieee80211_hw *hw, int mcast, int mgmt) @@ -2724,7 +2725,7 @@ mwl8k_cmd_use_fixed_rate_ap(struct ieee80211_hw *hw, int mcast, int mgmt)  struct mwl8k_cmd_enable_sniffer {  	struct mwl8k_cmd_pkt header;  	__le32 action; -} __attribute__((packed)); +} __packed;  static int mwl8k_cmd_enable_sniffer(struct ieee80211_hw *hw, bool enable)  { @@ -2757,7 +2758,7 @@ struct mwl8k_cmd_set_mac_addr {  		} mbss;  		__u8 mac_addr[ETH_ALEN];  	}; -} __attribute__((packed)); +} __packed;  #define MWL8K_MAC_TYPE_PRIMARY_CLIENT		0  #define MWL8K_MAC_TYPE_SECONDARY_CLIENT		1 @@ -2812,7 +2813,7 @@ struct mwl8k_cmd_set_rate_adapt_mode {  	struct mwl8k_cmd_pkt header;  	__le16 action;  	__le16 mode; -} __attribute__((packed)); +} __packed;  static int mwl8k_cmd_set_rateadapt_mode(struct ieee80211_hw *hw, __u16 mode)  { @@ -2840,7 +2841,7 @@ static int mwl8k_cmd_set_rateadapt_mode(struct ieee80211_hw *hw, __u16 mode)  struct mwl8k_cmd_bss_start {  	struct mwl8k_cmd_pkt header;  	__le32 enable; -} __attribute__((packed)); +} __packed;  static int mwl8k_cmd_bss_start(struct ieee80211_hw *hw,  			       struct ieee80211_vif *vif, int enable) @@ -2885,7 +2886,7 @@ struct mwl8k_cmd_set_new_stn {  	__u8 add_qos_info;  	__u8 is_qos_sta;  	__le32 fw_sta_ptr; -} __attribute__((packed)); +} __packed;  #define MWL8K_STA_ACTION_ADD		0  #define MWL8K_STA_ACTION_REMOVE		2 @@ -2978,7 +2979,7 @@ struct ewc_ht_info {  	__le16	control1;  	__le16	control2;  	__le16	control3; -} __attribute__((packed)); +} __packed;  struct peer_capability_info {  	/* Peer type - AP vs. STA.  */ @@ -3007,7 +3008,7 @@ struct peer_capability_info {  	__u8	pad2;  	__u8	station_id;  	__le16	amsdu_enabled; -} __attribute__((packed)); +} __packed;  struct mwl8k_cmd_update_stadb {  	struct mwl8k_cmd_pkt header; @@ -3022,7 +3023,7 @@ struct mwl8k_cmd_update_stadb {  	/* Peer info - valid during add/update.  */  	struct peer_capability_info	peer_info; -} __attribute__((packed)); +} __packed;  #define MWL8K_STA_DB_MODIFY_ENTRY	1  #define MWL8K_STA_DB_DEL_ENTRY		2 @@ -3052,7 +3053,7 @@ static int mwl8k_cmd_update_stadb_add(struct ieee80211_hw *hw,  	p->peer_type = MWL8K_PEER_TYPE_ACCESSPOINT;  	p->basic_caps = cpu_to_le16(vif->bss_conf.assoc_capability);  	p->ht_support = sta->ht_cap.ht_supported; -	p->ht_caps = sta->ht_cap.cap; +	p->ht_caps = cpu_to_le16(sta->ht_cap.cap);  	p->extended_ht_caps = (sta->ht_cap.ampdu_factor & 3) |  		((sta->ht_cap.ampdu_density & 7) << 2);  	if (hw->conf.channel->band == IEEE80211_BAND_2GHZ) @@ -3190,8 +3191,8 @@ static int mwl8k_tx(struct ieee80211_hw *hw, struct sk_buff *skb)  	int rc;  	if (!priv->radio_on) { -		printk(KERN_DEBUG "%s: dropped TX frame since radio " -		       "disabled\n", wiphy_name(hw->wiphy)); +		wiphy_debug(hw->wiphy, +			    "dropped TX frame since radio disabled\n");  		dev_kfree_skb(skb);  		return NETDEV_TX_OK;  	} @@ -3209,8 +3210,7 @@ static int mwl8k_start(struct ieee80211_hw *hw)  	rc = request_irq(priv->pdev->irq, mwl8k_interrupt,  			 IRQF_SHARED, MWL8K_NAME, hw);  	if (rc) { -		printk(KERN_ERR "%s: failed to register IRQ handler\n", -		       wiphy_name(hw->wiphy)); +		wiphy_err(hw->wiphy, "failed to register irq handler\n");  		return -EIO;  	} @@ -3297,9 +3297,8 @@ static int mwl8k_add_interface(struct ieee80211_hw *hw,  	 * mode.  (Sniffer mode is only used on STA firmware.)  	 */  	if (priv->sniffer_enabled) { -		printk(KERN_INFO "%s: unable to create STA " -		       "interface due to sniffer mode being enabled\n", -		       wiphy_name(hw->wiphy)); +		wiphy_info(hw->wiphy, +			   "unable to create STA interface because sniffer mode is enabled\n");  		return -EINVAL;  	} @@ -3581,9 +3580,8 @@ mwl8k_configure_filter_sniffer(struct ieee80211_hw *hw,  	 */  	if (!list_empty(&priv->vif_list)) {  		if (net_ratelimit()) -			printk(KERN_INFO "%s: not enabling sniffer " -			       "mode because STA interface is active\n", -			       wiphy_name(hw->wiphy)); +			wiphy_info(hw->wiphy, +				   "not enabling sniffer mode because STA interface is active\n");  		return 0;  	} @@ -3763,6 +3761,22 @@ static int mwl8k_get_stats(struct ieee80211_hw *hw,  	return mwl8k_cmd_get_stat(hw, stats);  } +static int mwl8k_get_survey(struct ieee80211_hw *hw, int idx, +				struct survey_info *survey) +{ +	struct mwl8k_priv *priv = hw->priv; +	struct ieee80211_conf *conf = &hw->conf; + +	if (idx != 0) +		return -ENOENT; + +	survey->channel = conf->channel; +	survey->filled = SURVEY_INFO_NOISE_DBM; +	survey->noise = priv->noise; + +	return 0; +} +  static int  mwl8k_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,  		   enum ieee80211_ampdu_mlme_action action, @@ -3794,6 +3808,7 @@ static const struct ieee80211_ops mwl8k_ops = {  	.sta_remove		= mwl8k_sta_remove,  	.conf_tx		= mwl8k_conf_tx,  	.get_stats		= mwl8k_get_stats, +	.get_survey		= mwl8k_get_survey,  	.ampdu_action		= mwl8k_ampdu_action,  }; @@ -3911,8 +3926,7 @@ static int __devinit mwl8k_probe(struct pci_dev *pdev,  	priv->sram = pci_iomap(pdev, 0, 0x10000);  	if (priv->sram == NULL) { -		printk(KERN_ERR "%s: Cannot map device SRAM\n", -		       wiphy_name(hw->wiphy)); +		wiphy_err(hw->wiphy, "cannot map device sram\n");  		goto err_iounmap;  	} @@ -3924,8 +3938,7 @@ static int __devinit mwl8k_probe(struct pci_dev *pdev,  	if (priv->regs == NULL) {  		priv->regs = pci_iomap(pdev, 2, 0x10000);  		if (priv->regs == NULL) { -			printk(KERN_ERR "%s: Cannot map device registers\n", -			       wiphy_name(hw->wiphy)); +			wiphy_err(hw->wiphy, "cannot map device registers\n");  			goto err_iounmap;  		}  	} @@ -3937,16 +3950,14 @@ static int __devinit mwl8k_probe(struct pci_dev *pdev,  	/* Ask userland hotplug daemon for the device firmware */  	rc = mwl8k_request_firmware(priv);  	if (rc) { -		printk(KERN_ERR "%s: Firmware files not found\n", -		       wiphy_name(hw->wiphy)); +		wiphy_err(hw->wiphy, "firmware files not found\n");  		goto err_stop_firmware;  	}  	/* Load firmware into hardware */  	rc = mwl8k_load_firmware(hw);  	if (rc) { -		printk(KERN_ERR "%s: Cannot start firmware\n", -		       wiphy_name(hw->wiphy)); +		wiphy_err(hw->wiphy, "cannot start firmware\n");  		goto err_stop_firmware;  	} @@ -3957,9 +3968,8 @@ static int __devinit mwl8k_probe(struct pci_dev *pdev,  	if (priv->ap_fw) {  		priv->rxd_ops = priv->device_info->ap_rxd_ops;  		if (priv->rxd_ops == NULL) { -			printk(KERN_ERR "%s: Driver does not have AP " -			       "firmware image support for this hardware\n", -			       wiphy_name(hw->wiphy)); +			wiphy_err(hw->wiphy, +				  "Driver does not have AP firmware image support for this hardware\n");  			goto err_stop_firmware;  		}  	} else { @@ -4037,8 +4047,7 @@ static int __devinit mwl8k_probe(struct pci_dev *pdev,  	rc = request_irq(priv->pdev->irq, mwl8k_interrupt,  			 IRQF_SHARED, MWL8K_NAME, hw);  	if (rc) { -		printk(KERN_ERR "%s: failed to register IRQ handler\n", -		       wiphy_name(hw->wiphy)); +		wiphy_err(hw->wiphy, "failed to register irq handler\n");  		goto err_free_queues;  	} @@ -4058,8 +4067,7 @@ static int __devinit mwl8k_probe(struct pci_dev *pdev,  		rc = mwl8k_cmd_get_hw_spec_sta(hw);  	}  	if (rc) { -		printk(KERN_ERR "%s: Cannot initialise firmware\n", -		       wiphy_name(hw->wiphy)); +		wiphy_err(hw->wiphy, "cannot initialise firmware\n");  		goto err_free_irq;  	} @@ -4073,15 +4081,14 @@ static int __devinit mwl8k_probe(struct pci_dev *pdev,  	/* Turn radio off */  	rc = mwl8k_cmd_radio_disable(hw);  	if (rc) { -		printk(KERN_ERR "%s: Cannot disable\n", wiphy_name(hw->wiphy)); +		wiphy_err(hw->wiphy, "cannot disable\n");  		goto err_free_irq;  	}  	/* Clear MAC address */  	rc = mwl8k_cmd_set_mac_addr(hw, NULL, "\x00\x00\x00\x00\x00\x00");  	if (rc) { -		printk(KERN_ERR "%s: Cannot clear MAC address\n", -		       wiphy_name(hw->wiphy)); +		wiphy_err(hw->wiphy, "cannot clear mac address\n");  		goto err_free_irq;  	} @@ -4091,17 +4098,16 @@ static int __devinit mwl8k_probe(struct pci_dev *pdev,  	rc = ieee80211_register_hw(hw);  	if (rc) { -		printk(KERN_ERR "%s: Cannot register device\n", -		       wiphy_name(hw->wiphy)); +		wiphy_err(hw->wiphy, "cannot register device\n");  		goto err_free_queues;  	} -	printk(KERN_INFO "%s: %s v%d, %pM, %s firmware %u.%u.%u.%u\n", -	       wiphy_name(hw->wiphy), priv->device_info->part_name, -	       priv->hw_rev, hw->wiphy->perm_addr, -	       priv->ap_fw ? "AP" : "STA", -	       (priv->fw_rev >> 24) & 0xff, (priv->fw_rev >> 16) & 0xff, -	       (priv->fw_rev >> 8) & 0xff, priv->fw_rev & 0xff); +	wiphy_info(hw->wiphy, "%s v%d, %pm, %s firmware %u.%u.%u.%u\n", +		   priv->device_info->part_name, +		   priv->hw_rev, hw->wiphy->perm_addr, +		   priv->ap_fw ? "AP" : "STA", +		   (priv->fw_rev >> 24) & 0xff, (priv->fw_rev >> 16) & 0xff, +		   (priv->fw_rev >> 8) & 0xff, priv->fw_rev & 0xff);  	return 0;  |