diff options
Diffstat (limited to 'drivers/net/wireless/rt2x00/rt73usb.c')
| -rw-r--r-- | drivers/net/wireless/rt2x00/rt73usb.c | 59 | 
1 files changed, 31 insertions, 28 deletions
diff --git a/drivers/net/wireless/rt2x00/rt73usb.c b/drivers/net/wireless/rt2x00/rt73usb.c index 6e0d82efe92..aa9de18fd41 100644 --- a/drivers/net/wireless/rt2x00/rt73usb.c +++ b/drivers/net/wireless/rt2x00/rt73usb.c @@ -270,7 +270,6 @@ static int rt73usb_config_shared_key(struct rt2x00_dev *rt2x00dev,  {  	struct hw_key_entry key_entry;  	struct rt2x00_field32 field; -	int timeout;  	u32 mask;  	u32 reg; @@ -306,12 +305,8 @@ static int rt73usb_config_shared_key(struct rt2x00_dev *rt2x00dev,  		       sizeof(key_entry.rx_mic));  		reg = SHARED_KEY_ENTRY(key->hw_key_idx); -		timeout = REGISTER_TIMEOUT32(sizeof(key_entry)); -		rt2x00usb_vendor_request_large_buff(rt2x00dev, USB_MULTI_WRITE, -						    USB_VENDOR_REQUEST_OUT, reg, -						    &key_entry, -						    sizeof(key_entry), -						    timeout); +		rt2x00usb_register_multiwrite(rt2x00dev, reg, +					      &key_entry, sizeof(key_entry));  		/*  		 * The cipher types are stored over 2 registers. @@ -372,7 +367,6 @@ static int rt73usb_config_pairwise_key(struct rt2x00_dev *rt2x00dev,  {  	struct hw_pairwise_ta_entry addr_entry;  	struct hw_key_entry key_entry; -	int timeout;  	u32 mask;  	u32 reg; @@ -407,17 +401,11 @@ static int rt73usb_config_pairwise_key(struct rt2x00_dev *rt2x00dev,  		       sizeof(key_entry.rx_mic));  		reg = PAIRWISE_KEY_ENTRY(key->hw_key_idx); -		timeout = REGISTER_TIMEOUT32(sizeof(key_entry)); -		rt2x00usb_vendor_request_large_buff(rt2x00dev, USB_MULTI_WRITE, -						    USB_VENDOR_REQUEST_OUT, reg, -						    &key_entry, -						    sizeof(key_entry), -						    timeout); +		rt2x00usb_register_multiwrite(rt2x00dev, reg, +					      &key_entry, sizeof(key_entry));  		/*  		 * Send the address and cipher type to the hardware register. -		 * This data fits within the CSR cache size, so we can use -		 * rt2x00usb_register_multiwrite() directly.  		 */  		memset(&addr_entry, 0, sizeof(addr_entry));  		memcpy(&addr_entry, crypto->address, ETH_ALEN); @@ -828,6 +816,9 @@ static void rt73usb_config_retry_limit(struct rt2x00_dev *rt2x00dev,  	u32 reg;  	rt2x00usb_register_read(rt2x00dev, TXRX_CSR4, ®); +	rt2x00_set_field32(®, TXRX_CSR4_OFDM_TX_RATE_DOWN, 1); +	rt2x00_set_field32(®, TXRX_CSR4_OFDM_TX_RATE_STEP, 0); +	rt2x00_set_field32(®, TXRX_CSR4_OFDM_TX_FALLBACK_CCK, 0);  	rt2x00_set_field32(®, TXRX_CSR4_LONG_RETRY_LIMIT,  			   libconf->conf->long_frame_max_tx_count);  	rt2x00_set_field32(®, TXRX_CSR4_SHORT_RETRY_LIMIT, @@ -1092,11 +1083,7 @@ static int rt73usb_load_firmware(struct rt2x00_dev *rt2x00dev,  	/*  	 * Write firmware to device.  	 */ -	rt2x00usb_vendor_request_large_buff(rt2x00dev, USB_MULTI_WRITE, -					    USB_VENDOR_REQUEST_OUT, -					    FIRMWARE_IMAGE_BASE, -					    data, len, -					    REGISTER_TIMEOUT32(len)); +	rt2x00usb_register_multiwrite(rt2x00dev, FIRMWARE_IMAGE_BASE, data, len);  	/*  	 * Send firmware request to device to load firmware, @@ -1413,7 +1400,9 @@ static int rt73usb_set_device_state(struct rt2x00_dev *rt2x00dev,  		rt73usb_toggle_rx(rt2x00dev, state);  		break;  	case STATE_RADIO_IRQ_ON: +	case STATE_RADIO_IRQ_ON_ISR:  	case STATE_RADIO_IRQ_OFF: +	case STATE_RADIO_IRQ_OFF_ISR:  		/* No support, but no error either */  		break;  	case STATE_DEEP_SLEEP: @@ -1442,7 +1431,7 @@ static void rt73usb_write_tx_desc(struct rt2x00_dev *rt2x00dev,  				  struct txentry_desc *txdesc)  {  	struct skb_frame_desc *skbdesc = get_skb_frame_desc(skb); -	__le32 *txd = (__le32 *)(skb->data - TXD_DESC_SIZE); +	__le32 *txd = (__le32 *) skb->data;  	u32 word;  	/* @@ -1505,6 +1494,7 @@ static void rt73usb_write_tx_desc(struct rt2x00_dev *rt2x00dev,  	/*  	 * Register descriptor details in skb frame descriptor.  	 */ +	skbdesc->flags |= SKBDESC_DESC_IN_SKB;  	skbdesc->desc = txd;  	skbdesc->desc_len = TXD_DESC_SIZE;  } @@ -1528,18 +1518,27 @@ static void rt73usb_write_beacon(struct queue_entry *entry,  	rt2x00usb_register_write(rt2x00dev, TXRX_CSR9, reg);  	/* -	 * Take the descriptor in front of the skb into account. +	 * Add space for the descriptor in front of the skb.  	 */  	skb_push(entry->skb, TXD_DESC_SIZE); +	memset(entry->skb->data, 0, TXD_DESC_SIZE); + +	/* +	 * Write the TX descriptor for the beacon. +	 */ +	rt73usb_write_tx_desc(rt2x00dev, entry->skb, txdesc); + +	/* +	 * Dump beacon to userspace through debugfs. +	 */ +	rt2x00debug_dump_frame(rt2x00dev, DUMP_FRAME_BEACON, entry->skb);  	/*  	 * Write entire beacon with descriptor to register.  	 */  	beacon_base = HW_BEACON_OFFSET(entry->entry_idx); -	rt2x00usb_vendor_request_large_buff(rt2x00dev, USB_MULTI_WRITE, -					    USB_VENDOR_REQUEST_OUT, beacon_base, -					    entry->skb->data, entry->skb->len, -					    REGISTER_TIMEOUT32(entry->skb->len)); +	rt2x00usb_register_multiwrite(rt2x00dev, beacon_base, +				      entry->skb->data, entry->skb->len);  	/*  	 * Enable beaconing again. @@ -2138,6 +2137,8 @@ static int rt73usb_probe_hw(struct rt2x00_dev *rt2x00dev)  	__set_bit(DRIVER_REQUIRE_FIRMWARE, &rt2x00dev->flags);  	if (!modparam_nohwcrypt)  		__set_bit(CONFIG_SUPPORT_HW_CRYPTO, &rt2x00dev->flags); +	__set_bit(DRIVER_SUPPORT_LINK_TUNING, &rt2x00dev->flags); +	__set_bit(DRIVER_SUPPORT_WATCHDOG, &rt2x00dev->flags);  	/*  	 * Set the rssi offset. @@ -2231,6 +2232,8 @@ static const struct ieee80211_ops rt73usb_mac80211_ops = {  	.configure_filter	= rt2x00mac_configure_filter,  	.set_tim		= rt2x00mac_set_tim,  	.set_key		= rt2x00mac_set_key, +	.sw_scan_start		= rt2x00mac_sw_scan_start, +	.sw_scan_complete	= rt2x00mac_sw_scan_complete,  	.get_stats		= rt2x00mac_get_stats,  	.bss_info_changed	= rt2x00mac_bss_info_changed,  	.conf_tx		= rt73usb_conf_tx, @@ -2251,8 +2254,8 @@ static const struct rt2x00lib_ops rt73usb_rt2x00_ops = {  	.link_stats		= rt73usb_link_stats,  	.reset_tuner		= rt73usb_reset_tuner,  	.link_tuner		= rt73usb_link_tuner, +	.watchdog		= rt2x00usb_watchdog,  	.write_tx_desc		= rt73usb_write_tx_desc, -	.write_tx_data		= rt2x00usb_write_tx_data,  	.write_beacon		= rt73usb_write_beacon,  	.get_tx_data_len	= rt73usb_get_tx_data_len,  	.kick_tx_queue		= rt2x00usb_kick_tx_queue,  |