Please pull 'upstream' branch of rt2x00
Hi John,
Well finally rt2x00 2.0.7 is released, unfortunately it will not be the last release in the 2.0.* series as promised earlier.
This series contains lots of bugfixes, but some of the more critical issues are still present. rt2x00 is however becoming more usable for more people, so the progress is there. ;)
I'll do my best to make the next release 2.0.8 the last in the 2.0.* series so 2.1.0 can be moved upstream. :)
Ivo
---
The following changes since commit f5a420590f3f6a45ee5bca0048640f0f24852315:
John W. Linville (1):
Merge branch 'b43' into everything
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/ivd/rt2x00.git/ upstream
Ivo van Doorn (27):
rt2x00: Correctly configure packet filter in monitor mode
rt2x00: Clear MAC and BSSID when non-monitor interface goes down
rt2x00: Check return value of usb_control_msg()
rt2x00: Clear all fields on start_link_tune()
rt2x00: Don't increase rx_failed for individual frames
rt2x00: Set vgc_level during reset_tuner
rt2x00: Schedule beacon update
rt2x00: Be consistent with unsigned
rt2x00: Correctly reset TX/RX success/failed counters
rt2x00: Rework RF register handling
rt2x00: rt2x00_ring_free returns invalid length
rt2x00: Use caching for USB transfers
rt2x00: Cleanup set_state for rt61 and rt73
rt2x00: Fix register initialization ordering
rt2x00: memset descriptor before use
rt2x00: Remove IEEE80211_HW_WEP_INCLUDE_IV flag
rt2x00: Cleanup TXD flags
rt2x00: Add byte-ordering annotation for MAC and BSSID
rt2x00: Correctly set TXD retry flag
rt2x00: Move rt2x00 files into rt2x00 folder
rt2x00: Add file pattern to MAINTAINER entry
rt2x00: Fix PLCP setup
rt2x00: Clean up RATEMASK handling
rt2x00: Add rt2x00lib_reset_link_tuner()
rt2x00: Always check if mac80211 requested TX status update
rt2x00: Lindent
rt2x00: rt2x00 2.0.7
Luca Tettamanti (1):
Fix off-by-one error in debugfs helpers
Mattias Nissler (2):
rt2x00: Fix width of filter field.
rt2x00: Store firmware in memory
MAINTAINERS | 1 +
drivers/net/wireless/Kconfig | 131 +------
drivers/net/wireless/Makefile | 23 +-
drivers/net/wireless/rt2x00/Kconfig | 130 ++++++
drivers/net/wireless/rt2x00/Makefile | 22 +
drivers/net/wireless/{ => rt2x00}/rt2400pci.c | 149 ++++---
drivers/net/wireless/{ => rt2x00}/rt2400pci.h | 0
drivers/net/wireless/{ => rt2x00}/rt2500pci.c | 409 ++++++++++--------
drivers/net/wireless/{ => rt2x00}/rt2500pci.h | 0
drivers/net/wireless/{ => rt2x00}/rt2500usb.c | 382 +++++++++-------
drivers/net/wireless/{ => rt2x00}/rt2500usb.h | 0
drivers/net/wireless/{ => rt2x00}/rt2x00.h | 56 ++-
drivers/net/wireless/{ => rt2x00}/rt2x00config.c | 14 +-
drivers/net/wireless/{ => rt2x00}/rt2x00debug.c | 23 +-
drivers/net/wireless/{ => rt2x00}/rt2x00debug.h | 0
drivers/net/wireless/{ => rt2x00}/rt2x00dev.c | 221 ++++++----
drivers/net/wireless/{ => rt2x00}/rt2x00firmware.c | 43 ++-
drivers/net/wireless/{ => rt2x00}/rt2x00lib.h | 5 +
drivers/net/wireless/{ => rt2x00}/rt2x00mac.c | 15 +-
drivers/net/wireless/{ => rt2x00}/rt2x00pci.c | 7 +-
drivers/net/wireless/{ => rt2x00}/rt2x00pci.h | 0
drivers/net/wireless/{ => rt2x00}/rt2x00reg.h | 56 ++-
drivers/net/wireless/{ => rt2x00}/rt2x00rfkill.c | 0
drivers/net/wireless/{ => rt2x00}/rt2x00ring.h | 6 +-
drivers/net/wireless/{ => rt2x00}/rt2x00usb.c | 114 ++++-
drivers/net/wireless/{ => rt2x00}/rt2x00usb.h | 60 +++-
drivers/net/wireless/{ => rt2x00}/rt61pci.c | 466 ++++++++------------
drivers/net/wireless/{ => rt2x00}/rt61pci.h | 0
drivers/net/wireless/{ => rt2x00}/rt73usb.c | 471 +++++++++++---------
drivers/net/wireless/{ => rt2x00}/rt73usb.h | 0
30 files changed, 1532 insertions(+), 1272 deletions(-)
create mode 100644 drivers/net/wireless/rt2x00/Kconfig
create mode 100644 drivers/net/wireless/rt2x00/Makefile
rename drivers/net/wireless/{ => rt2x00}/rt2400pci.c (94%)
rename drivers/net/wireless/{ => rt2x00}/rt2400pci.h (100%)
rename drivers/net/wireless/{ => rt2x00}/rt2500pci.c (84%)
rename drivers/net/wireless/{ => rt2x00}/rt2500pci.h (100%)
rename drivers/net/wireless/{ => rt2x00}/rt2500usb.c (81%)
rename drivers/net/wireless/{ => rt2x00}/rt2500usb.h (100%)
rename drivers/net/wireless/{ => rt2x00}/rt2x00.h (94%)
rename drivers/net/wireless/{ => rt2x00}/rt2x00config.c (92%)
rename drivers/net/wireless/{ => rt2x00}/rt2x00debug.c (94%)
rename drivers/net/wireless/{ => rt2x00}/rt2x00debug.h (100%)
rename drivers/net/wireless/{ => rt2x00}/rt2x00dev.c (85%)
rename drivers/net/wireless/{ => rt2x00}/rt2x00firmware.c (84%)
rename drivers/net/wireless/{ => rt2x00}/rt2x00lib.h (94%)
rename drivers/net/wireless/{ => rt2x00}/rt2x00mac.c (97%)
rename drivers/net/wireless/{ => rt2x00}/rt2x00pci.c (98%)
rename drivers/net/wireless/{ => rt2x00}/rt2x00pci.h (100%)
rename drivers/net/wireless/{ => rt2x00}/rt2x00reg.h (80%)
rename drivers/net/wireless/{ => rt2x00}/rt2x00rfkill.c (100%)
rename drivers/net/wireless/{ => rt2x00}/rt2x00ring.h (96%)
rename drivers/net/wireless/{ => rt2x00}/rt2x00usb.c (85%)
rename drivers/net/wireless/{ => rt2x00}/rt2x00usb.h (65%)
rename drivers/net/wireless/{ => rt2x00}/rt61pci.c (89%)
rename drivers/net/wireless/{ => rt2x00}/rt61pci.h (100%)
rename drivers/net/wireless/{ => rt2x00}/rt73usb.c (82%)
rename drivers/net/wireless/{ => rt2x00}/rt73usb.h (100%)PATCH 1/30 rt2x00: Correctly configure packet filter in monitor mode
Quoted 1 line
From
a065c6ce407b30a02777761794e77ee6cfa8663eMon Sep 17 00:00:00 2001
From: Ivo van Doorn <[email protected]>
Date: Sat, 18 Aug 2007 12:50:42 +0200
Subject: [PATCH 01/30] rt2x00: Correctly configure packet filter in monitor mode
If there is a non-monitor interface present
the packet should be strict (even if a monitor interface is present!). When there is only 1 interface present which is in monitor mode we should start accepting _all_ frames.
This also means there is no special packet filtering in monitor mode, so don't check for monitor mode in the set_multicast_list handler.
--- drivers/net/wireless/rt2400pci.c | 19 +++++++++++++------ drivers/net/wireless/rt2500pci.c | 19 +++++++++++++------ drivers/net/wireless/rt2500usb.c | 19 +++++++++++++------ drivers/net/wireless/rt2x00config.c | 12 ------------ drivers/net/wireless/rt2x00mac.c | 6 ------ drivers/net/wireless/rt61pci.c | 21 ++++++++++++++------- drivers/net/wireless/rt73usb.c | 21 ++++++++++++++------- 7 files changed, 67 insertions(+), 50 deletions(-)
drivers/net/wireless/rt2400pci.c +13 -6
@@ -305,15 +305,22 @@ static void rt2400pci_config_type(struct rt2x00_dev *rt2x00dev, int type)else rt2x00_set_field32 (®,RXCSR0_DROP_TODS ,0 ); -rt2x00_set_field32 (®,RXCSR0_DROP_CRC ,1 ); -if (is_monitor_present (&rt2x00dev->interface)) { -rt2x00_set_field32 (®,RXCSR0_DROP_PHYSICAL ,0 ); -rt2x00_set_field32 (®,RXCSR0_DROP_CONTROL ,0 ); -rt2x00_set_field32 (®,RXCSR0_DROP_VERSION_ERROR ,0 ); - }else { +/* +* If there is a non-monitor interface present +* the packet should be strict (even if a monitor interface is present!). +* When there is only 1 interface present which is in monitor mode +* we should start accepting _all_ frames. +*/ +if (is_interface_present (&rt2x00dev->interface)) { +rt2x00_set_field32 (®,RXCSR0_DROP_CRC ,1 );rt2x00_set_field32 (®,RXCSR0_DROP_PHYSICAL ,1 );rt2x00_set_field32 (®,RXCSR0_DROP_CONTROL ,1 );rt2x00_set_field32 (®,RXCSR0_DROP_VERSION_ERROR ,1 ); + }else if (is_monitor_present (&rt2x00dev->interface)) { +rt2x00_set_field32 (®,RXCSR0_DROP_CRC ,0 ); +rt2x00_set_field32 (®,RXCSR0_DROP_PHYSICAL ,0 ); +rt2x00_set_field32 (®,RXCSR0_DROP_CONTROL ,0 ); +rt2x00_set_field32 (®,RXCSR0_DROP_VERSION_ERROR ,0 ); }rt2x00pci_register_write (rt2x00dev,RXCSR0 , reg);
drivers/net/wireless/rt2500pci.c +13 -6
@@ -309,15 +309,22 @@ static void rt2500pci_config_type(struct rt2x00_dev *rt2x00dev, const int type)else rt2x00_set_field32 (®,RXCSR0_DROP_TODS ,0 ); -rt2x00_set_field32 (®,RXCSR0_DROP_CRC ,1 ); -if (is_monitor_present (&rt2x00dev->interface)) { -rt2x00_set_field32 (®,RXCSR0_DROP_PHYSICAL ,0 ); -rt2x00_set_field32 (®,RXCSR0_DROP_CONTROL ,0 ); -rt2x00_set_field32 (®,RXCSR0_DROP_VERSION_ERROR ,0 ); - }else { +/* +* If there is a non-monitor interface present +* the packet should be strict (even if a monitor interface is present!). +* When there is only 1 interface present which is in monitor mode +* we should start accepting _all_ frames. +*/ +if (is_interface_present (&rt2x00dev->interface)) { +rt2x00_set_field32 (®,RXCSR0_DROP_CRC ,1 );rt2x00_set_field32 (®,RXCSR0_DROP_PHYSICAL ,1 );rt2x00_set_field32 (®,RXCSR0_DROP_CONTROL ,1 );rt2x00_set_field32 (®,RXCSR0_DROP_VERSION_ERROR ,1 ); + }else if (is_monitor_present (&rt2x00dev->interface)) { +rt2x00_set_field32 (®,RXCSR0_DROP_CRC ,0 ); +rt2x00_set_field32 (®,RXCSR0_DROP_PHYSICAL ,0 ); +rt2x00_set_field32 (®,RXCSR0_DROP_CONTROL ,0 ); +rt2x00_set_field32 (®,RXCSR0_DROP_VERSION_ERROR ,0 ); }rt2x00pci_register_write (rt2x00dev,RXCSR0 , reg);
drivers/net/wireless/rt2500usb.c +13 -6
@@ -314,15 +314,22 @@ static void rt2500usb_config_type(struct rt2x00_dev *rt2x00dev, const int type)else rt2x00_set_field16 (®,TXRX_CSR2_DROP_TODS ,0 ); -rt2x00_set_field16 (®,TXRX_CSR2_DROP_CRC ,1 ); -if (is_monitor_present (&rt2x00dev->interface)) { -rt2x00_set_field16 (®,TXRX_CSR2_DROP_PHYSICAL ,0 ); -rt2x00_set_field16 (®,TXRX_CSR2_DROP_CONTROL ,0 ); -rt2x00_set_field16 (®,TXRX_CSR2_DROP_VERSION_ERROR ,0 ); - }else { +/* +* If there is a non-monitor interface present +* the packet should be strict (even if a monitor interface is present!). +* When there is only 1 interface present which is in monitor mode +* we should start accepting _all_ frames. +*/ +if (is_interface_present (&rt2x00dev->interface)) { +rt2x00_set_field16 (®,TXRX_CSR2_DROP_CRC ,1 );rt2x00_set_field16 (®,TXRX_CSR2_DROP_PHYSICAL ,1 );rt2x00_set_field16 (®,TXRX_CSR2_DROP_CONTROL ,1 );rt2x00_set_field16 (®,TXRX_CSR2_DROP_VERSION_ERROR ,1 ); + }else if (is_monitor_present (&rt2x00dev->interface)) { +rt2x00_set_field16 (®,TXRX_CSR2_DROP_CRC ,0 ); +rt2x00_set_field16 (®,TXRX_CSR2_DROP_PHYSICAL ,0 ); +rt2x00_set_field16 (®,TXRX_CSR2_DROP_CONTROL ,0 ); +rt2x00_set_field16 (®,TXRX_CSR2_DROP_VERSION_ERROR ,0 ); }rt2500usb_register_write (rt2x00dev,TXRX_CSR2 , reg);
drivers/net/wireless/rt2x00config.c +0 -12
@@ -48,18 +48,6 @@ void rt2x00lib_config_bssid(struct rt2x00_dev *rt2x00dev, u8 *bssid)void rt2x00lib_config_packet_filter (struct rt2x00_dev *rt2x00dev,int filter) { -struct interface *intf = &rt2x00dev->interface; - -/* -* When a monitor interface is present, -* we should force enable all modes. -*/ -if (is_monitor_present (intf)) { - filter =IFF_PROMISC |IFF_MULTICAST |IFF_BROADCAST ; -if (intf->filter != filter) -__set_bit (PACKET_FILTER_PENDING , &rt2x00dev->flags); - } -/* * Only configure the device when something has changed, * or if we are in RESET state in which case all configuration
drivers/net/wireless/rt2x00mac.c +0 -6
@@ -333,12 +333,6 @@ void rt2x00mac_set_multicast_list(struct ieee80211_hw *hw, rt2x00dev->interface.filter = flags;/* -* No filtering in monitor mode. -*/ -if (is_monitor_present (&rt2x00dev->interface)) -return ; - -/* * Raise the pending bit to indicate the * packet filter should be updated. */
drivers/net/wireless/rt61pci.c +14 -7
@@ -338,17 +338,24 @@ static void rt61pci_config_type(struct rt2x00_dev *rt2x00dev, const int type)else rt2x00_set_field32 (®,TXRX_CSR0_DROP_TO_DS ,0 ); -rt2x00_set_field32 (®,TXRX_CSR0_DROP_CRC ,1 ); -if (is_monitor_present (&rt2x00dev->interface)) { -rt2x00_set_field32 (®,TXRX_CSR0_DROP_PHYSICAL ,0 ); -rt2x00_set_field32 (®,TXRX_CSR0_DROP_CONTROL ,0 ); -rt2x00_set_field32 (®,TXRX_CSR0_DROP_VERSION_ERROR ,0 ); -rt2x00_set_field32 (®,TXRX_CSR0_DROP_ACK_CTS ,0 ); - }else { +/* +* If there is a non-monitor interface present +* the packet should be strict (even if a monitor interface is present!). +* When there is only 1 interface present which is in monitor mode +* we should start accepting _all_ frames. +*/ +if (is_interface_present (&rt2x00dev->interface)) { +rt2x00_set_field32 (®,TXRX_CSR0_DROP_CRC ,1 );rt2x00_set_field32 (®,TXRX_CSR0_DROP_PHYSICAL ,1 );rt2x00_set_field32 (®,TXRX_CSR0_DROP_CONTROL ,1 );rt2x00_set_field32 (®,TXRX_CSR0_DROP_VERSION_ERROR ,1 );rt2x00_set_field32 (®,TXRX_CSR0_DROP_ACK_CTS ,1 ); + }else if (is_monitor_present (&rt2x00dev->interface)) { +rt2x00_set_field32 (®,TXRX_CSR0_DROP_CRC ,0 ); +rt2x00_set_field32 (®,TXRX_CSR0_DROP_PHYSICAL ,0 ); +rt2x00_set_field32 (®,TXRX_CSR0_DROP_CONTROL ,0 ); +rt2x00_set_field32 (®,TXRX_CSR0_DROP_VERSION_ERROR ,0 ); +rt2x00_set_field32 (®,TXRX_CSR0_DROP_ACK_CTS ,0 ); }rt2x00pci_register_write (rt2x00dev,TXRX_CSR0 , reg);
drivers/net/wireless/rt73usb.c +14 -7
@@ -313,17 +313,24 @@ static void rt73usb_config_type(struct rt2x00_dev *rt2x00dev, const int type)else rt2x00_set_field32 (®,TXRX_CSR0_DROP_TO_DS ,0 ); -rt2x00_set_field32 (®,TXRX_CSR0_DROP_CRC ,1 ); -if (is_monitor_present (&rt2x00dev->interface)) { -rt2x00_set_field32 (®,TXRX_CSR0_DROP_PHYSICAL ,0 ); -rt2x00_set_field32 (®,TXRX_CSR0_DROP_CONTROL ,0 ); -rt2x00_set_field32 (®,TXRX_CSR0_DROP_VERSION_ERROR ,0 ); -rt2x00_set_field32 (®,TXRX_CSR0_DROP_ACK_CTS ,0 ); - }else { +/* +* If there is a non-monitor interface present +* the packet should be strict (even if a monitor interface is present!). +* When there is only 1 interface present which is in monitor mode +* we should start accepting _all_ frames. +*/ +if (is_interface_present (&rt2x00dev->interface)) { +rt2x00_set_field32 (®,TXRX_CSR0_DROP_CRC ,1 );rt2x00_set_field32 (®,TXRX_CSR0_DROP_PHYSICAL ,1 );rt2x00_set_field32 (®,TXRX_CSR0_DROP_CONTROL ,1 );rt2x00_set_field32 (®,TXRX_CSR0_DROP_VERSION_ERROR ,1 );rt2x00_set_field32 (®,TXRX_CSR0_DROP_ACK_CTS ,1 ); + }else if (is_monitor_present (&rt2x00dev->interface)) { +rt2x00_set_field32 (®,TXRX_CSR0_DROP_CRC ,0 ); +rt2x00_set_field32 (®,TXRX_CSR0_DROP_PHYSICAL ,0 ); +rt2x00_set_field32 (®,TXRX_CSR0_DROP_CONTROL ,0 ); +rt2x00_set_field32 (®,TXRX_CSR0_DROP_VERSION_ERROR ,0 ); +rt2x00_set_field32 (®,TXRX_CSR0_DROP_ACK_CTS ,0 ); }rt73usb_register_write (rt2x00dev,TXRX_CSR0 , reg);
Signature · 1 line
1.5.3.rc5
PATCH 2/30 rt2x00: Clear MAC and BSSID when non-monitor interface goes down
In reply to Ivo van DoornQuoted 1 line
From
f027057821e22cf353fd37e3c139dc908c85bffeMon Sep 17 00:00:00 2001
From: Ivo van Doorn <[email protected]>
Date: Sat, 18 Aug 2007 12:51:46 +0200
Subject: [PATCH 02/30] rt2x00: Clear MAC and BSSID when non-monitor interface goes down
When the non-monitor interface goes down the BSSID and MAC address should be cleared inside the registers to prevent acking of frames.
--- drivers/net/wireless/rt2x00.h | 2 +- drivers/net/wireless/rt2x00dev.c | 8 ++++++-- drivers/net/wireless/rt2x00mac.c | 4 ++-- 3 files changed, 9 insertions(+), 5 deletions(-)
drivers/net/wireless/rt2x00.h +1 -1
@@ -290,7 +290,7 @@ struct interface {/* * MAC of the device. */ -u8 *mac; +u8 mac[ETH_ALEN ];/* * BBSID of the AP to associate with.
drivers/net/wireless/rt2x00dev.c +6 -2
@@ -920,12 +920,16 @@ void rt2x00lib_deinit_interface(struct rt2x00_dev *rt2x00dev)/* * If no interfaces are present, we should disable the radio -* Otherwise check which interface needs to be initialized. +* Otherwise configure the mac_address and bssid and check +* which interface needs to be initialized. */ if (!is_monitor_present (intf) && !is_interface_present (intf))rt2x00lib_disable_radio (rt2x00dev); -else if (is_monitor_present (intf) ^is_interface_present (intf)) +else if (is_monitor_present (intf) ^is_interface_present (intf)) { +rt2x00lib_config_mac_addr (rt2x00dev, intf->mac); +rt2x00lib_config_bssid (rt2x00dev, intf->bssid);rt2x00lib_config_type (rt2x00dev, intf->type); + }/* * If we are in reset mode, the device must be deinitialized.
drivers/net/wireless/rt2x00mac.c +2 -2
@@ -192,7 +192,7 @@ int rt2x00mac_add_interface(struct ieee80211_hw *hw, intf->type = conf->type;if (conf->type ==IEEE80211_IF_TYPE_AP )memcpy (&intf->bssid, conf->mac_addr,ETH_ALEN ); - intf->mac = conf->mac_addr; +memcpy (&intf->mac, conf->mac_addr,ETH_ALEN ); intf->filter =0 ; }
@@ -232,7 +232,7 @@ void rt2x00mac_remove_interface(struct ieee80211_hw *hw, intf->id =0 ; intf->type =INVALID_INTERFACE ;memset (&intf->bssid,0x00 ,ETH_ALEN ); - intf->mac =NULL ; +memset (&intf->mac,0x00 ,ETH_ALEN ); intf->filter =0 ; }
Signature · 1 line
1.5.3.rc5
PATCH 3/30 rt2x00: Check return value of usb_control_msg()
In reply to Ivo van DoornQuoted 1 line
From
91de0ebc5c8e4c6799b4de5b34301a0884c085d2Mon Sep 17 00:00:00 2001
From: Ivo van Doorn <[email protected]>
Date: Sat, 18 Aug 2007 12:52:33 +0200
Subject: [PATCH 03/30] rt2x00: Check return value of usb_control_msg()
Check the return value of usb_control_msg and try
to determine the best course of action:
- Bail out immediately
- Increase timeout value
- Try again
--- drivers/net/wireless/rt2x00usb.c | 14 +++++++++++++- 1 files changed, 13 insertions(+), 1 deletions(-)
drivers/net/wireless/rt2x00usb.c +13 -1
@@ -47,6 +47,7 @@ int rt2x00usb_vendor_request(const struct rt2x00_dev *rt2x00dev,interface_to_usbdev (rt2x00dev_usb (rt2x00dev));int status;unsigned int i; +unsigned int time = timeout;for (i =0 ; i <REGISTER_BUSY_COUNT ; i++) { status = usb_control_msg(usb_dev,
@@ -54,9 +55,20 @@ int rt2x00usb_vendor_request(const struct rt2x00_dev *rt2x00dev, usb_rcvctrlpipe(usb_dev, 0) : usb_sndctrlpipe(usb_dev, 0)), request, type, value, offset, - buffer, buffer_length, timeout); + buffer, buffer_length, time); +if (status >=0 )return 0 ; + +/* +* Check for errors, +* -ETIMEDOUT: We need a bit more time to complete. +* -ENODEV: Device has disappeared, no point continuing. +*/ +if (status == -ETIMEDOUT ) + time *=2 ; +else if (status == -ENODEV ) +break ; } ERROR(rt2x00dev,
Signature · 1 line
1.5.3.rc5
PATCH 4/30 rt2x00: Clear all fields on start_link_tune()
In reply to Ivo van DoornQuoted 1 line
From
643e88e4fca8b22d60f718226bede9f033b3e869Mon Sep 17 00:00:00 2001
From: Ivo van Doorn <[email protected]>
Date: Sat, 18 Aug 2007 12:55:02 +0200
Subject: [PATCH 04/30] rt2x00: Clear all fields on start_link_tune()
All variables inside the link structure need to be cleared when calling start_link_tune().
--- drivers/net/wireless/rt2x00dev.c | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-)
drivers/net/wireless/rt2x00dev.c +4 -0
@@ -73,6 +73,10 @@ static void rt2x00_start_link_tune(struct rt2x00_dev *rt2x00dev) rt2x00dev->link.avg_rssi =0 ; rt2x00dev->link.vgc_level =0 ; rt2x00dev->link.false_cca =0 ; + rt2x00dev->link.rx_success =0 ; + rt2x00dev->link.rx_failed =0 ; + rt2x00dev->link.tx_success =0 ; + rt2x00dev->link.tx_failed =0 ;/* * Reset the link tuner.
Signature · 1 line
1.5.3.rc5
PATCH 5/30 rt2x00: Don't increase rx_failed for individual frames
In reply to Ivo van DoornQuoted 1 line
From
53237308ec1ca8f3b3679c7e04cfe467bfeef077Mon Sep 17 00:00:00 2001
From: Ivo van Doorn <[email protected]>
Date: Sat, 18 Aug 2007 12:55:29 +0200
Subject: [PATCH 05/30] rt2x00: Don't increase rx_failed for individual frames
Add the size argument to fill_rxdone.
This will make the return value of rxdone more meaningfull (valid frame or invalid frame) and don't increase the rx_failed counter when a invalid frame is encountered. This will prevent the signal value to be very low when monitor mode is enabled and invalid frames are passed to the device.
Note that dropping of these frames will disappear in the future when mac80211 receives the correct patches that will allow us to send corrupt packages to it.
--- drivers/net/wireless/rt2400pci.c | 9 ++++----- drivers/net/wireless/rt2500pci.c | 9 ++++----- drivers/net/wireless/rt2500usb.c | 9 ++++----- drivers/net/wireless/rt2x00.h | 2 +- drivers/net/wireless/rt2x00pci.c | 7 ++++--- drivers/net/wireless/rt2x00usb.c | 6 ++++-- drivers/net/wireless/rt61pci.c | 9 ++++----- drivers/net/wireless/rt73usb.c | 9 ++++----- 8 files changed, 29 insertions(+), 31 deletions(-)
drivers/net/wireless/rt2400pci.c +4 -5
@@ -1203,7 +1203,7 @@ static void rt2400pci_kick_tx_queue(struct rt2x00_dev *rt2x00dev, int queue)* RX control handlers */ static int rt2400pci_fill_rxdone (struct data_entry *entry, -int *signal,int *rssi,int *ofdm) +int *signal,int *rssi,int *ofdm,int *size) {struct data_desc *rxd = entry->priv;u32 word0;
@@ -1213,10 +1213,8 @@ static int rt2400pci_fill_rxdone(struct data_entry *entry,rt2x00_desc_read (rxd,2 , &word2);if (rt2x00_get_field32 (word0,RXD_W0_CRC_ERROR ) || -rt2x00_get_field32 (word0,RXD_W0_PHYSICAL_ERROR )) { - entry->ring->rt2x00dev->link.rx_failed++; +rt2x00_get_field32 (word0,RXD_W0_PHYSICAL_ERROR ))return -EINVAL ; - }/* * Obtain the status about this packet.
@@ -1225,8 +1223,9 @@ static int rt2400pci_fill_rxdone(struct data_entry *entry, *rssi =rt2x00_get_field32 (word2,RXD_W2_RSSI ) - entry->ring->rt2x00dev->rssi_offset; *ofdm =0 ; + *size =rt2x00_get_field32 (word0,RXD_W0_DATABYTE_COUNT ); -return rt2x00_get_field32 (word0,RXD_W0_DATABYTE_COUNT ); +return 0 ; }/*
drivers/net/wireless/rt2500pci.c +4 -5
@@ -1381,7 +1381,7 @@ static void rt2500pci_kick_tx_queue(struct rt2x00_dev *rt2x00dev, int queue)* RX control handlers */ static int rt2500pci_fill_rxdone (struct data_entry *entry, -int *signal,int *rssi,int *ofdm) +int *signal,int *rssi,int *ofdm,int *size) {struct data_desc *rxd = entry->priv;u32 word0;
@@ -1392,17 +1392,16 @@ static int rt2500pci_fill_rxdone(struct data_entry *entry,if (rt2x00_get_field32 (word0,RXD_W0_CRC_ERROR ) ||rt2x00_get_field32 (word0,RXD_W0_PHYSICAL_ERROR ) || -rt2x00_get_field32 (word0,RXD_W0_ICV_ERROR )) { - entry->ring->rt2x00dev->link.rx_failed++; +rt2x00_get_field32 (word0,RXD_W0_ICV_ERROR ))return -EINVAL ; - } *signal =rt2x00_get_field32 (word2,RXD_W2_SIGNAL ); *rssi =rt2x00_get_field32 (word2,RXD_W2_RSSI ) - entry->ring->rt2x00dev->rssi_offset; *ofdm =rt2x00_get_field32 (word0,RXD_W0_OFDM ); + *size =rt2x00_get_field32 (word0,RXD_W0_DATABYTE_COUNT ); -return rt2x00_get_field32 (word0,RXD_W0_DATABYTE_COUNT ); +return 0 ; }/*
drivers/net/wireless/rt2500usb.c +4 -5
@@ -1178,7 +1178,7 @@ static void rt2500usb_kick_tx_queue(struct rt2x00_dev *rt2x00dev, int queue)* RX control handlers */ static int rt2500usb_fill_rxdone (struct data_entry *entry, -int *signal,int *rssi,int *ofdm) +int *signal,int *rssi,int *ofdm,int *size) {struct urb *urb = entry->priv; struct data_desc *rxd = (struct data_desc *)(entry->skb->data +
@@ -1192,10 +1192,8 @@ static int rt2500usb_fill_rxdone(struct data_entry *entry,if (rt2x00_get_field32 (word0,RXD_W0_CRC_ERROR ) ||rt2x00_get_field32 (word0,RXD_W0_PHYSICAL_ERROR ) || -rt2x00_get_field32 (word0,RXD_W0_CIPHER_ERROR )) { - entry->ring->rt2x00dev->link.rx_failed++; +rt2x00_get_field32 (word0,RXD_W0_CIPHER_ERROR ))return -EINVAL ; - }/* * Obtain the status about this packet.
@@ -1204,8 +1202,9 @@ static int rt2500usb_fill_rxdone(struct data_entry *entry, *rssi =rt2x00_get_field32 (word1,RXD_W1_RSSI ) - entry->ring->rt2x00dev->rssi_offset; *ofdm =rt2x00_get_field32 (word0,RXD_W0_OFDM ); + *size =rt2x00_get_field32 (word0,RXD_W0_DATABYTE_COUNT ); -return rt2x00_get_field32 (word0,RXD_W0_DATABYTE_COUNT ); +return ; }/*
drivers/net/wireless/rt2x00.h +1 -1
@@ -402,7 +402,7 @@ struct rt2x00lib_ops {* RX control handlers */ int (*fill_rxdone) (struct data_entry *entry, -int *signal,int *rssi,int *ofdm); +int *signal,int *rssi,int *ofdm,int *size);/* * Configuration handlers.
drivers/net/wireless/rt2x00pci.c +4 -3
@@ -124,6 +124,7 @@ void rt2x00pci_rxdone(struct rt2x00_dev *rt2x00dev)struct data_entry *entry;struct data_desc *rxd;u32 desc; +int retval;int signal;int rssi;int ofdm;
@@ -137,9 +138,9 @@ void rt2x00pci_rxdone(struct rt2x00_dev *rt2x00dev)if (rt2x00_get_field32 (desc,RXD_ENTRY_OWNER_NIC ))break ; - size = rt2x00dev->ops->lib->fill_rxdone (entry, &signal, - &rssi, &ofdm); -if (size <0 ) + retval = rt2x00dev->ops->lib->fill_rxdone (entry, &signal, + &rssi, &ofdm, &size); +if (retval) goto skip_entry;/*
drivers/net/wireless/rt2x00usb.c +4 -2
@@ -295,6 +295,7 @@ static void rt2x00usb_interrupt_rxdone(struct urb *urb)struct data_entry *entry = (struct data_entry *)urb->context;struct data_ring *ring = entry->ring;struct rt2x00_dev *rt2x00dev = ring->rt2x00dev; +int retval;int signal;int rssi;int ofdm;
@@ -312,8 +313,9 @@ static void rt2x00usb_interrupt_rxdone(struct urb *urb)if (urb->actual_length < entry->ring->desc_size || urb->status) goto skip_entry; - size = rt2x00dev->ops->lib->fill_rxdone (entry, &signal, &rssi, &ofdm); -if (size <0 ) + retval = rt2x00dev->ops->lib->fill_rxdone (entry, &signal, &rssi, + &ofdm, &size); +if (retval) goto skip_entry;/*
drivers/net/wireless/rt61pci.c +4 -5
@@ -1797,7 +1797,7 @@ static int rt61pci_agc_to_rssi(struct rt2x00_dev *rt2x00dev, int rxd_w1) }static int rt61pci_fill_rxdone (struct data_entry *entry, -int *signal,int *rssi,int *ofdm) +int *signal,int *rssi,int *ofdm,int *size) {struct data_desc *rxd = entry->priv;u32 word0;
@@ -1807,10 +1807,8 @@ static int rt61pci_fill_rxdone(struct data_entry *entry,rt2x00_desc_read (rxd,1 , &word1);if (rt2x00_get_field32 (word0,RXD_W0_CRC_ERROR ) || -rt2x00_get_field32 (word0,RXD_W0_CIPHER_ERROR )) { - entry->ring->rt2x00dev->link.rx_failed++; +rt2x00_get_field32 (word0,RXD_W0_CIPHER_ERROR ))return -EINVAL ; - }/* * Obtain the status about this packet.
@@ -1818,8 +1816,9 @@ static int rt61pci_fill_rxdone(struct data_entry *entry, *signal =rt2x00_get_field32 (word1,RXD_W1_SIGNAL ); *rssi =rt61pci_agc_to_rssi (entry->ring->rt2x00dev, word1); *ofdm =rt2x00_get_field32 (word0,RXD_W0_OFDM ); + *size =rt2x00_get_field32 (word0,RXD_W0_DATABYTE_COUNT ); -return rt2x00_get_field32 (word0,RXD_W0_DATABYTE_COUNT ); +return 0 ; }/*
drivers/net/wireless/rt73usb.c +4 -5
@@ -1432,7 +1432,7 @@ static int rt73usb_agc_to_rssi(struct rt2x00_dev *rt2x00dev, int rxd_w1) }static int rt73usb_fill_rxdone (struct data_entry *entry, -int *signal,int *rssi,int *ofdm) +int *signal,int *rssi,int *ofdm,int *size) {struct data_desc *rxd = (struct data_desc *)entry->skb->data;u32 word0;
@@ -1442,10 +1442,8 @@ static int rt73usb_fill_rxdone(struct data_entry *entry,rt2x00_desc_read (rxd,1 , &word1);if (rt2x00_get_field32 (word0,RXD_W0_CRC_ERROR ) || -rt2x00_get_field32 (word0,RXD_W0_CIPHER_ERROR )) { - entry->ring->rt2x00dev->link.rx_failed++; +rt2x00_get_field32 (word0,RXD_W0_CIPHER_ERROR ))return -EINVAL ; - }/* * Obtain the status about this packet.
@@ -1453,13 +1451,14 @@ static int rt73usb_fill_rxdone(struct data_entry *entry, *signal =rt2x00_get_field32 (word1,RXD_W1_SIGNAL ); *rssi =rt73usb_agc_to_rssi (entry->ring->rt2x00dev, word1); *ofdm =rt2x00_get_field32 (word0,RXD_W0_OFDM ); + *size =rt2x00_get_field32 (word0,RXD_W0_DATABYTE_COUNT );/* * Pull the skb to clear the descriptor area. */ skb_pull (entry->skb, entry->ring->desc_size); -return rt2x00_get_field32 (word0,RXD_W0_DATABYTE_COUNT ); +return 0 ; }/*
Signature · 1 line
1.5.3.rc5
PATCH 6/30 rt2x00: Set vgc_level during reset_tuner
In reply to Ivo van DoornQuoted 1 line
From
dc0c67691b4f794fcaad97ddc36f4e9354658d6eMon Sep 17 00:00:00 2001
From: Ivo van Doorn <[email protected]>
Date: Sat, 18 Aug 2007 12:55:51 +0200
Subject: [PATCH 06/30] rt2x00: Set vgc_level during reset_tuner
Reset the vgc_level to the correct AGC VGC value that has just been written to the register during reset_tuner.
This will assure that the value will be valid when it is used during the link tuner.
--- drivers/net/wireless/rt2400pci.c | 1 + drivers/net/wireless/rt2500pci.c | 1 + drivers/net/wireless/rt2500usb.c | 4 +++- drivers/net/wireless/rt61pci.c | 1 + drivers/net/wireless/rt73usb.c | 1 + 5 files changed, 7 insertions(+), 1 deletions(-)
drivers/net/wireless/rt2400pci.c +1 -0
@@ -655,6 +655,7 @@ static void rt2400pci_link_stats(struct rt2x00_dev *rt2x00dev)static void rt2400pci_reset_tuner (struct rt2x00_dev *rt2x00dev) {rt2400pci_bbp_write (rt2x00dev,13 ,0x08 ); + rt2x00dev->link.vgc_level =0x08 ; }static void rt2400pci_link_tuner (struct rt2x00_dev *rt2x00dev)
drivers/net/wireless/rt2500pci.c +1 -0
@@ -755,6 +755,7 @@ static void rt2500pci_link_stats(struct rt2x00_dev *rt2x00dev)static void rt2500pci_reset_tuner (struct rt2x00_dev *rt2x00dev) {rt2500pci_bbp_write (rt2x00dev,17 ,0x48 ); + rt2x00dev->link.vgc_level =0x48 ; }static void rt2500pci_link_tuner (struct rt2x00_dev *rt2x00dev)
drivers/net/wireless/rt2500usb.c +3 -1
@@ -728,6 +728,8 @@ static void rt2500usb_reset_tuner(struct rt2x00_dev *rt2x00dev)rt2x00_eeprom_read (rt2x00dev,EEPROM_BBPTUNE_VGC , &eeprom); value =rt2x00_get_field16 (eeprom,EEPROM_BBPTUNE_VGCUPPER );rt2500usb_bbp_write (rt2x00dev,17 , value); + + rt2x00dev->link.vgc_level = value; }static void rt2500usb_link_tuner (struct rt2x00_dev *rt2x00dev)
@@ -1204,7 +1206,7 @@ static int rt2500usb_fill_rxdone(struct data_entry *entry, *ofdm =rt2x00_get_field32 (word0,RXD_W0_OFDM ); *size =rt2x00_get_field32 (word0,RXD_W0_DATABYTE_COUNT ); -return ; +return 0 ; }/*
drivers/net/wireless/rt61pci.c +1 -0
@@ -968,6 +968,7 @@ static void rt61pci_link_stats(struct rt2x00_dev *rt2x00dev)static void rt61pci_reset_tuner (struct rt2x00_dev *rt2x00dev) {rt61pci_bbp_write (rt2x00dev,17 ,0x20 ); + rt2x00dev->link.vgc_level =0x20 ; }static void rt61pci_link_tuner (struct rt2x00_dev *rt2x00dev)
drivers/net/wireless/rt73usb.c +1 -0
@@ -858,6 +858,7 @@ static void rt73usb_link_stats(struct rt2x00_dev *rt2x00dev)static void rt73usb_reset_tuner (struct rt2x00_dev *rt2x00dev) {rt73usb_bbp_write (rt2x00dev,17 ,0x20 ); + rt2x00dev->link.vgc_level =0x20 ; }static void rt73usb_link_tuner (struct rt2x00_dev *rt2x00dev)
Signature · 1 line
1.5.3.rc5
PATCH 7/30 rt2x00: Schedule beacon update
In reply to Ivo van DoornQuoted 1 line
From
ddf86b88ab735fac340b1fae078a6433ed1a8fceMon Sep 17 00:00:00 2001
From: Ivo van Doorn <[email protected]>
Date: Sat, 18 Aug 2007 12:56:18 +0200
Subject: [PATCH 07/30] rt2x00: Schedule beacon update
ieee80211_beacon_get Doesn't allow to be called from interrupt context. Schedule the call using a workqueue.
--- drivers/net/wireless/rt2400pci.c | 2 +- drivers/net/wireless/rt2500pci.c | 2 +- drivers/net/wireless/rt2x00.h | 7 ++++++- drivers/net/wireless/rt2x00dev.c | 25 +++++++++++++++++++++---- drivers/net/wireless/rt2x00mac.c | 2 +- drivers/net/wireless/rt61pci.c | 2 +- 6 files changed, 31 insertions(+), 9 deletions(-)
drivers/net/wireless/rt2400pci.c +1 -1
@@ -1306,7 +1306,7 @@ static irqreturn_t rt2400pci_interrupt(int irq, void *dev_instance)* 1 - Beacon timer expired interrupt. */ if (rt2x00_get_field32 (reg,CSR7_TBCN_EXPIRE )) -rt2x00lib_beacondone (rt2x00dev,IEEE80211_TX_QUEUE_BEACON ); +rt2x00lib_beacondone (rt2x00dev);/* * 2 - Rx ring done interrupt.
drivers/net/wireless/rt2500pci.c +1 -1
@@ -1482,7 +1482,7 @@ static irqreturn_t rt2500pci_interrupt(int irq, void *dev_instance)* 1 - Beacon timer expired interrupt. */ if (rt2x00_get_field32 (reg,CSR7_TBCN_EXPIRE )) -rt2x00lib_beacondone (rt2x00dev,IEEE80211_TX_QUEUE_BEACON ); +rt2x00lib_beacondone (rt2x00dev);/* * 2 - Rx ring done interrupt.
drivers/net/wireless/rt2x00.h +6 -1
@@ -589,6 +589,11 @@ struct rt2x00_dev {struct ieee80211_rx_status rx_status;/* +* Beacon scheduled work. +*/ +struct work_struct beacon_work; + +/* * Data ring arrays for RX, TX and Beacon. * The Beacon array also contains the Atim ring * if that is supported by the device.
@@ -725,7 +730,7 @@ struct data_ring *rt2x00lib_get_ring(struct rt2x00_dev *rt2x00dev,/* * Interrupt context handlers. */ -void rt2x00lib_beacondone (struct rt2x00_dev *rt2x00dev,const int queue); +void rt2x00lib_beacondone (struct rt2x00_dev *rt2x00dev);void rt2x00lib_txdone (struct data_entry *entry,const int status,const int retry); void rt2x00lib_rxdone(struct data_entry *entry, char *data,
drivers/net/wireless/rt2x00dev.c +21 -4
@@ -90,8 +90,7 @@ static void rt2x00_start_link_tune(struct rt2x00_dev *rt2x00dev)static void rt2x00_stop_link_tune (struct rt2x00_dev *rt2x00dev) {if (delayed_work_pending (&rt2x00dev->link.work)) -cancel_rearming_delayed_workqueue (rt2x00dev->hw->workqueue, - &rt2x00dev->link.work); +cancel_rearming_delayed_work (&rt2x00dev->link.work); }/*
@@ -139,6 +138,12 @@ void rt2x00lib_disable_radio(struct rt2x00_dev *rt2x00dev)return ;/* +* Stop beacon generation. +*/ +if (work_pending (&rt2x00dev->beacon_work)) +cancel_work_sync (&rt2x00dev->beacon_work); + +/* * Stop the TX queues. */ ieee80211_stop_queues (rt2x00dev->hw);
@@ -252,9 +257,12 @@ static void rt2x00lib_link_tuner(struct work_struct *work)/* * Interrupt context handlers. */ -void rt2x00lib_beacondone (struct rt2x00_dev *rt2x00dev,const int queue) +static void rt2x00lib_beacondone_scheduled (struct work_struct *work) { -struct data_ring *ring =rt2x00lib_get_ring (rt2x00dev, queue); +struct rt2x00_dev *rt2x00dev = + container_of(work, struct rt2x00_dev, beacon_work); +struct data_ring *ring = +rt2x00lib_get_ring (rt2x00dev,IEEE80211_TX_QUEUE_BEACON );struct data_entry *entry =rt2x00_get_data_entry (ring);struct sk_buff *skb;
@@ -269,6 +277,14 @@ void rt2x00lib_beacondone(struct rt2x00_dev *rt2x00dev, const int queue)dev_kfree_skb (skb); } + +void rt2x00lib_beacondone (struct rt2x00_dev *rt2x00dev) +{ +if (!test_bit (DEVICE_ENABLED_RADIO , &rt2x00dev->flags)) +return ; + +queue_work (rt2x00dev->hw->workqueue, &rt2x00dev->beacon_work); +}EXPORT_SYMBOL_GPL (rt2x00lib_beacondone); void rt2x00lib_txdone(struct data_entry *entry,
@@ -1012,6 +1028,7 @@ int rt2x00lib_probe_dev(struct rt2x00_dev *rt2x00dev)/* * Initialize configuration work. */ +INIT_WORK (&rt2x00dev->beacon_work, rt2x00lib_beacondone_scheduled);INIT_DELAYED_WORK (&rt2x00dev->link.work, rt2x00lib_link_tuner);/*
drivers/net/wireless/rt2x00mac.c +1 -1
@@ -157,7 +157,7 @@ int rt2x00mac_reset(struct ieee80211_hw *hw)*/ if (intf->type ==IEEE80211_IF_TYPE_AP || intf->type ==IEEE80211_IF_TYPE_IBSS ) -rt2x00lib_beacondone (rt2x00dev,IEEE80211_TX_QUEUE_BEACON ); +rt2x00lib_beacondone (rt2x00dev); exit:__clear_bit (INTERFACE_RESET , &rt2x00dev->flags);
drivers/net/wireless/rt61pci.c +1 -1
@@ -1927,7 +1927,7 @@ static irqreturn_t rt61pci_interrupt(int irq, void *dev_instance)* 1 - Beacon timer expired interrupt. */ if (rt2x00_get_field32 (reg,INT_SOURCE_CSR_BEACON_DONE )) -rt2x00lib_beacondone (rt2x00dev,IEEE80211_TX_QUEUE_BEACON ); +rt2x00lib_beacondone (rt2x00dev);/* * 2 - Rx ring done interrupt.
Signature · 1 line
1.5.3.rc5
PATCH 8/30 rt2x00: Fix width of filter field.
In reply to Ivo van DoornQuoted 1 line
From
47c06acef36889c67594dadb4a29879d28c8415bMon Sep 17 00:00:00 2001
From: Mattias Nissler <[email protected]>
Date: Sat, 4 Aug 2007 19:18:44 +0200
Subject: [PATCH 08/30] rt2x00: Fix width of filter field.
The filter field needs to be declared unsigned short instead of char in order to hold all relevant IFF_* flags.
--- drivers/net/wireless/rt2x00.h | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
drivers/net/wireless/rt2x00.h +1 -1
@@ -304,7 +304,7 @@ struct interface {* the monitor mode interfaces are removed, while a * non-monitor mode interface remains. */ -char filter; +unsigned short filter;/* * Monitor mode count, the number of interfaces
Signature · 1 line
1.5.3.rc5
PATCH 9/30 rt2x00: Be consistent with unsigned
In reply to Ivo van DoornQuoted 1 line
From
cdc01c652d3b058111e8a2567649e198c7c77cc5Mon Sep 17 00:00:00 2001
From: Ivo van Doorn <[email protected]>
Date: Sat, 18 Aug 2007 13:00:39 +0200
Subject: [PATCH 09/30] rt2x00: Be consistent with unsigned
unsigned should be used consistently,
all values used as flags should be unsigned
and the ring identifier should also be unsigned everywhere.
char is not consistently signed over all platforms,
make the signedness more explicit where it is demanded
so we resolve some warnings of the type:
"warning: comparison is always false due to limited range of data type"
--- drivers/net/wireless/rt2400pci.c | 8 +++++--- drivers/net/wireless/rt2500pci.c | 8 +++++--- drivers/net/wireless/rt2500usb.c | 8 +++++--- drivers/net/wireless/rt2x00.h | 9 +++++---- drivers/net/wireless/rt61pci.c | 14 ++++++++------ drivers/net/wireless/rt73usb.c | 14 ++++++++------ 6 files changed, 36 insertions(+), 25 deletions(-)
drivers/net/wireless/rt2400pci.c +5 -3
@@ -278,7 +278,7 @@ static void rt2400pci_config_bssid(struct rt2x00_dev *rt2x00dev, u8 *bssid) }static void rt2400pci_config_packet_filter (struct rt2x00_dev *rt2x00dev, -const int filter) +const unsigned int filter) {int promisc = !!(filter &IFF_PROMISC );u32 reg;
@@ -561,7 +561,8 @@ static void rt2400pci_config_duration(struct rt2x00_dev *rt2x00dev,rt2x00pci_register_write (rt2x00dev,CSR12 , reg); } -static void rt2400pci_config (struct rt2x00_dev *rt2x00dev,const int flags, +static void rt2400pci_config (struct rt2x00_dev *rt2x00dev, +const unsigned int flags,struct ieee80211_conf *conf) {int short_slot_time = conf->flags &IEEE80211_CONF_SHORT_SLOT_TIME ;
@@ -1177,7 +1178,8 @@ static void rt2400pci_write_tx_desc(struct rt2x00_dev *rt2x00dev,/* * TX data initialization */ -static void rt2400pci_kick_tx_queue (struct rt2x00_dev *rt2x00dev,int queue) +static void rt2400pci_kick_tx_queue (struct rt2x00_dev *rt2x00dev, +unsigned int queue) {u32 reg;
drivers/net/wireless/rt2500pci.c +5 -3
@@ -278,7 +278,7 @@ static void rt2500pci_config_bssid(struct rt2x00_dev *rt2x00dev, u8 *bssid) }static void rt2500pci_config_packet_filter (struct rt2x00_dev *rt2x00dev, -const int filter) +const unsigned int filter) {int promisc = !!(filter &IFF_PROMISC );int multicast = !!(filter &IFF_MULTICAST );
@@ -672,7 +672,8 @@ static void rt2500pci_config_duration(struct rt2x00_dev *rt2x00dev,rt2x00pci_register_write (rt2x00dev,CSR12 , reg); } -static void rt2500pci_config (struct rt2x00_dev *rt2x00dev,const int flags, +static void rt2500pci_config (struct rt2x00_dev *rt2x00dev, +const unsigned int flags,struct ieee80211_conf *conf) {int short_slot_time = conf->flags &IEEE80211_CONF_SHORT_SLOT_TIME ;
@@ -1355,7 +1356,8 @@ static void rt2500pci_write_tx_desc(struct rt2x00_dev *rt2x00dev,/* * TX data initialization */ -static void rt2500pci_kick_tx_queue (struct rt2x00_dev *rt2x00dev,int queue) +static void rt2500pci_kick_tx_queue (struct rt2x00_dev *rt2x00dev, +unsigned int queue) {u32 reg;
drivers/net/wireless/rt2500usb.c +5 -3
@@ -283,7 +283,7 @@ static void rt2500usb_config_bssid(struct rt2x00_dev *rt2x00dev, u8 *bssid) }static void rt2500usb_config_packet_filter (struct rt2x00_dev *rt2x00dev, -const int filter) +const unsigned int filter) {int promisc = !!(filter &IFF_PROMISC );int multicast = !!(filter &IFF_MULTICAST );
@@ -625,7 +625,8 @@ static void rt2500usb_config_duration(struct rt2x00_dev *rt2x00dev,rt2500usb_register_write (rt2x00dev,TXRX_CSR18 , reg); } -static void rt2500usb_config (struct rt2x00_dev *rt2x00dev,const int flags, +static void rt2500usb_config (struct rt2x00_dev *rt2x00dev, +const unsigned int flags,struct ieee80211_conf *conf) {int short_slot_time = conf->flags &IEEE80211_CONF_SHORT_SLOT_TIME ;
@@ -1153,7 +1154,8 @@ static void rt2500usb_write_tx_desc(struct rt2x00_dev *rt2x00dev,/* * TX data initialization */ -static void rt2500usb_kick_tx_queue (struct rt2x00_dev *rt2x00dev,int queue) +static void rt2500usb_kick_tx_queue (struct rt2x00_dev *rt2x00dev, +unsigned int queue) {u16 reg;
drivers/net/wireless/rt2x00.h +5 -4
@@ -310,7 +310,7 @@ struct interface {* Monitor mode count, the number of interfaces * in monitor mode that that have been added. */ -char monitor_count; +unsigned short monitor_count; };static inline int is_interface_present (struct interface *intf)
@@ -396,7 +396,8 @@ struct rt2x00lib_ops {int (*write_tx_data) (struct rt2x00_dev *rt2x00dev,struct data_ring *ring,struct sk_buff *skb,struct ieee80211_tx_control *control); -void (*kick_tx_queue) (struct rt2x00_dev *rt2x00dev,int queue); +void (*kick_tx_queue) (struct rt2x00_dev *rt2x00dev, +unsigned int queue);/* * RX control handlers
@@ -410,9 +411,9 @@ struct rt2x00lib_ops {void (*config_mac_addr) (struct rt2x00_dev *rt2x00dev,u8 *mac);void (*config_bssid) (struct rt2x00_dev *rt2x00dev,u8 *bssid);void (*config_packet_filter) (struct rt2x00_dev *rt2x00dev, -const int filter); +const unsigned int filter);void (*config_type) (struct rt2x00_dev *rt2x00dev,const int type); -void (*config) (struct rt2x00_dev *rt2x00dev,const int flags, +void (*config) (struct rt2x00_dev *rt2x00dev,const unsigned int flags,struct ieee80211_conf *conf);#define CONFIG_UPDATE_PHYMODE ( 1 << 1 )#define CONFIG_UPDATE_CHANNEL ( 1 << 2 )
drivers/net/wireless/rt61pci.c +8 -6
@@ -307,7 +307,7 @@ static void rt61pci_config_bssid(struct rt2x00_dev *rt2x00dev, u8 *bssid) }static void rt61pci_config_packet_filter (struct rt2x00_dev *rt2x00dev, -const int filter) +const unsigned int filter) {int promisc = !!(filter &IFF_PROMISC );int multicast = !!(filter &IFF_MULTICAST );
@@ -846,7 +846,8 @@ static void rt61pci_config_duration(struct rt2x00_dev *rt2x00dev,rt2x00pci_register_write (rt2x00dev,TXRX_CSR9 , reg); } -static void rt61pci_config (struct rt2x00_dev *rt2x00dev,const int flags, +static void rt61pci_config (struct rt2x00_dev *rt2x00dev, +const unsigned int flags,struct ieee80211_conf *conf) {int short_slot_time = conf->flags &IEEE80211_CONF_SHORT_SLOT_TIME ;
@@ -1726,7 +1727,8 @@ static void rt61pci_write_tx_desc(struct rt2x00_dev *rt2x00dev,/* * TX data initialization */ -static void rt61pci_kick_tx_queue (struct rt2x00_dev *rt2x00dev,int queue) +static void rt61pci_kick_tx_queue (struct rt2x00_dev *rt2x00dev, +unsigned int queue) {u32 reg;
@@ -1759,8 +1761,8 @@ static void rt61pci_kick_tx_queue(struct rt2x00_dev *rt2x00dev, int queue)static int rt61pci_agc_to_rssi (struct rt2x00_dev *rt2x00dev,int rxd_w1) {u16 eeprom; -char offset; -char lna; +u8 offset; +u8 lna; lna =rt2x00_get_field32 (rxd_w1,RXD_W1_RSSI_LNA );switch (lna) {
@@ -1960,7 +1962,7 @@ static int rt61pci_validate_eeprom(struct rt2x00_dev *rt2x00dev)u32 reg;u16 word;u8 *mac; -char value; +s8 value;rt2x00pci_register_read (rt2x00dev,E2PROM_CSR , ®);
drivers/net/wireless/rt73usb.c +8 -6
@@ -282,7 +282,7 @@ static void rt73usb_config_bssid(struct rt2x00_dev *rt2x00dev, u8 *bssid) }static void rt73usb_config_packet_filter (struct rt2x00_dev *rt2x00dev, -const int filter) +const unsigned int filter) {int promisc = !!(filter &IFF_PROMISC );int multicast = !!(filter &IFF_MULTICAST );
@@ -742,7 +742,8 @@ static void rt73usb_config_duration(struct rt2x00_dev *rt2x00dev,rt73usb_register_write (rt2x00dev,TXRX_CSR9 , reg); } -static void rt73usb_config (struct rt2x00_dev *rt2x00dev,const int flags, +static void rt73usb_config (struct rt2x00_dev *rt2x00dev, +const unsigned int flags,struct ieee80211_conf *conf) {int short_slot_time = conf->flags &IEEE80211_CONF_SHORT_SLOT_TIME ;
@@ -1370,7 +1371,8 @@ static void rt73usb_write_tx_desc(struct rt2x00_dev *rt2x00dev,/* * TX data initialization */ -static void rt73usb_kick_tx_queue (struct rt2x00_dev *rt2x00dev,int queue) +static void rt73usb_kick_tx_queue (struct rt2x00_dev *rt2x00dev, +unsigned int queue) {u32 reg;
@@ -1390,8 +1392,8 @@ static void rt73usb_kick_tx_queue(struct rt2x00_dev *rt2x00dev, int queue)static int rt73usb_agc_to_rssi (struct rt2x00_dev *rt2x00dev,int rxd_w1) {u16 eeprom; -char offset; -char lna; +u8 offset; +u8 lna; lna =rt2x00_get_field32 (rxd_w1,RXD_W1_RSSI_LNA );switch (lna) {
@@ -1469,7 +1471,7 @@ static int rt73usb_validate_eeprom(struct rt2x00_dev *rt2x00dev) {u16 word;u8 *mac; -char value; +s8 value;rt2x00usb_eeprom_read (rt2x00dev, rt2x00dev->eeprom,EEPROM_SIZE );
Signature · 1 line
1.5.3.rc5
PATCH 10/30 rt2x00: Correctly reset TX/RX success/failed counters
In reply to Ivo van DoornQuoted 1 line
From
9e26ed7c8a87978caf02f8c6510bab37007c5259Mon Sep 17 00:00:00 2001
From: Ivo van Doorn <[email protected]>
Date: Sat, 18 Aug 2007 13:01:14 +0200
Subject: [PATCH 10/30] rt2x00: Correctly reset TX/RX success/failed counters
The TX/RX Success/Failed counters should be reset _before_ updating the statistics. Otherwise all signal quality calculations will be done with a rx_failed count of 0.
--- drivers/net/wireless/rt2400pci.c | 5 +---- drivers/net/wireless/rt2500pci.c | 5 +---- drivers/net/wireless/rt2500usb.c | 5 +---- drivers/net/wireless/rt2x00dev.c | 22 ++++++++++++---------- drivers/net/wireless/rt61pci.c | 5 +---- drivers/net/wireless/rt73usb.c | 5 +---- 6 files changed, 17 insertions(+), 30 deletions(-)
drivers/net/wireless/rt2400pci.c +1 -4
@@ -634,7 +634,6 @@ static void rt2400pci_disable_led(struct rt2x00_dev *rt2x00dev)*/ static void rt2400pci_link_stats (struct rt2x00_dev *rt2x00dev) { -int fcs;u32 reg;u8 bbp;
@@ -642,9 +641,7 @@ static void rt2400pci_link_stats(struct rt2x00_dev *rt2x00dev)* Update FCS error count from register. */ rt2x00pci_register_read (rt2x00dev,CNT0 , ®); - fcs =rt2x00_get_field32 (reg,CNT0_FCS_ERROR ); - rt2x00dev->link.rx_failed += fcs; - rt2x00dev->low_level_stats.dot11FCSErrorCount += fcs; + rt2x00dev->link.rx_failed =rt2x00_get_field32 (reg,CNT0_FCS_ERROR );/* * Update False CCA count from register.
drivers/net/wireless/rt2500pci.c +1 -4
@@ -735,16 +735,13 @@ static void rt2500pci_disable_led(struct rt2x00_dev *rt2x00dev)*/ static void rt2500pci_link_stats (struct rt2x00_dev *rt2x00dev) { -int fcs;u32 reg;/* * Update FCS error count from register. */ rt2x00pci_register_read (rt2x00dev,CNT0 , ®); - fcs =rt2x00_get_field32 (reg,CNT0_FCS_ERROR ); - rt2x00dev->link.rx_failed += fcs; - rt2x00dev->low_level_stats.dot11FCSErrorCount += fcs; + rt2x00dev->link.rx_failed =rt2x00_get_field32 (reg,CNT0_FCS_ERROR );/* * Update False CCA count from register.
drivers/net/wireless/rt2500usb.c +1 -4
@@ -690,16 +690,13 @@ static void rt2500usb_disable_led(struct rt2x00_dev *rt2x00dev)*/ static void rt2500usb_link_stats (struct rt2x00_dev *rt2x00dev) { -int fcs;u16 reg;/* * Update FCS error count from register. */ rt2500usb_register_read (rt2x00dev,STA_CSR0 , ®); - fcs =rt2x00_get_field16 (reg,STA_CSR0_FCS_ERROR ); - rt2x00dev->link.rx_failed += fcs; - rt2x00dev->low_level_stats.dot11FCSErrorCount += fcs; + rt2x00dev->link.rx_failed =rt2x00_get_field16 (reg,STA_CSR0_FCS_ERROR );/* * Update False CCA count from register.
drivers/net/wireless/rt2x00dev.c +12 -10
@@ -225,9 +225,21 @@ static void rt2x00lib_link_tuner(struct work_struct *work) container_of(work, struct rt2x00_dev, link.work.work);/* +* Reset statistics. +* This will cause the signal value to be +* based on the statistics of the last second. +*/ + rt2x00dev->link.rx_success =0 ; + rt2x00dev->link.rx_failed =0 ; + rt2x00dev->link.tx_success =0 ; + rt2x00dev->link.tx_failed =0 ; + +/* * Update statistics. */ rt2x00dev->ops->lib->link_stats (rt2x00dev); + rt2x00dev->low_level_stats.dot11FCSErrorCount += + rt2x00dev->link.rx_failed;/* * Only perform the link tuning when Link tuning
@@ -237,16 +249,6 @@ static void rt2x00lib_link_tuner(struct work_struct *work) rt2x00dev->ops->lib->link_tuner (rt2x00dev);/* -* Reset statistics. -* This will cause the signal value to be -* based on the statistics of the last second. -*/ - rt2x00dev->link.rx_success =0 ; - rt2x00dev->link.rx_failed =0 ; - rt2x00dev->link.tx_success =0 ; - rt2x00dev->link.tx_failed =0 ; - -/* * Increase tuner counter, and reschedule the next link tuner run. */ rt2x00dev->link.count++;
drivers/net/wireless/rt61pci.c +1 -4
@@ -947,16 +947,13 @@ static void rt61pci_activity_led(struct rt2x00_dev *rt2x00dev, int rssi)*/ static void rt61pci_link_stats (struct rt2x00_dev *rt2x00dev) { -int fcs;u32 reg;/* * Update FCS error count from register. */ rt2x00pci_register_read (rt2x00dev,STA_CSR0 , ®); - fcs =rt2x00_get_field32 (reg,STA_CSR0_FCS_ERROR ); - rt2x00dev->link.rx_failed += fcs; - rt2x00dev->low_level_stats.dot11FCSErrorCount += fcs; + rt2x00dev->link.rx_failed =rt2x00_get_field32 (reg,STA_CSR0_FCS_ERROR );/* * Update False CCA count from register.
drivers/net/wireless/rt73usb.c +1 -4
@@ -836,16 +836,13 @@ static void rt73usb_activity_led(struct rt2x00_dev *rt2x00dev, int rssi)*/ static void rt73usb_link_stats (struct rt2x00_dev *rt2x00dev) { -int fcs;u32 reg;/* * Update FCS error count from register. */ rt73usb_register_read (rt2x00dev,STA_CSR0 , ®); - fcs =rt2x00_get_field32 (reg,STA_CSR0_FCS_ERROR ); - rt2x00dev->link.rx_failed += fcs; - rt2x00dev->low_level_stats.dot11FCSErrorCount += fcs; + rt2x00dev->link.rx_failed =rt2x00_get_field32 (reg,STA_CSR0_FCS_ERROR );/* * Update False CCA count from register.
Signature · 1 line
1.5.3.rc5
PATCH 11/30 rt2x00: Rework RF register handling
In reply to Ivo van DoornQuoted 1 line
From
bd6c96f98df0e85bf9985bee8df71750e3ec2f20Mon Sep 17 00:00:00 2001
From: Ivo van Doorn <[email protected]>
Date: Sat, 18 Aug 2007 13:01:58 +0200
Subject: [PATCH 11/30] rt2x00: Rework RF register handling
Move RF registers inside static constant arrays.
This has several benefits:
- We can easily inform rt2x00lib which channels we support
- We don't have to use lots of if/switch statements
- Easy comparison against legacy driver values
- Bug fix for rt73usb: Some chips have 21bit RF values.
--- drivers/net/wireless/rt2400pci.c | 44 +++--- drivers/net/wireless/rt2500pci.c | 256 ++++++++++++++++++----------- drivers/net/wireless/rt2500usb.c | 266 ++++++++++++++++++------------- drivers/net/wireless/rt2x00.h | 9 +- drivers/net/wireless/rt2x00dev.c | 34 ++--- drivers/net/wireless/rt61pci.c | 332 ++++++++++++++------------------------ drivers/net/wireless/rt73usb.c | 281 +++++++++++++++++--------------- 7 files changed, 619 insertions(+), 603 deletions(-)
drivers/net/wireless/rt2400pci.c +21 -23
@@ -419,28 +419,15 @@ static void rt2400pci_config_phymode(struct rt2x00_dev *rt2x00dev,rt2400pci_config_rate (rt2x00dev, rate->val2); } -static void rt2400pci_get_rf_vals (struct rt2x00_dev *rt2x00dev, -const int value,const int channel, -struct rf_reg *reg) -{ - reg->rf1 =0x00022058 ; - reg->rf2 = value; -if (rt2x00_rf (&rt2x00dev->chip,RF2420 )) - reg->rf3 =0x00000111 ; -else - reg->rf3 =0x00000101 ; - reg->rf4 =0 ; -} -static void rt2400pci_config_channel (struct rt2x00_dev *rt2x00dev, -const int value,const int channel) +const int index,const int channel) { -struct rf_reg reg; +struct rf_channel reg;/* * Fill rf_reg structure. */ -rt2400pci_get_rf_vals (rt2x00dev, value, channel, ®); +memcpy (®, &rt2x00dev->spec.channels[index],sizeof (reg));/* * Switch on tuning bits.
@@ -1434,10 +1421,21 @@ static int rt2400pci_init_eeprom(struct rt2x00_dev *rt2x00dev)* RF value list for RF2420 & RF2421 * Supports: 2.4 GHz */ -static const u32 rf_vals_bg[] = { -0x000c1fda ,0x000c1fee ,0x000c2002 ,0x000c2016 ,0x000c202a , -0x000c203e ,0x000c2052 ,0x000c2066 ,0x000c207a ,0x000c208e , -0x000c20a2 ,0x000c20b6 ,0x000c20ca ,0x000c20fa +static const struct rf_channel rf_vals_bg[] = { + {1 ,0x00022058 ,0x000c1fda ,0x00000101 ,0 }, + {2 ,0x00022058 ,0x000c1fee ,0x00000101 ,0 }, + {3 ,0x00022058 ,0x000c2002 ,0x00000101 ,0 }, + {4 ,0x00022058 ,0x000c2016 ,0x00000101 ,0 }, + {5 ,0x00022058 ,0x000c202a ,0x00000101 ,0 }, + {6 ,0x00022058 ,0x000c203e ,0x00000101 ,0 }, + {7 ,0x00022058 ,0x000c2052 ,0x00000101 ,0 }, + {8 ,0x00022058 ,0x000c2066 ,0x00000101 ,0 }, + {9 ,0x00022058 ,0x000c207a ,0x00000101 ,0 }, + {10 ,0x00022058 ,0x000c208e ,0x00000101 ,0 }, + {11 ,0x00022058 ,0x000c20a2 ,0x00000101 ,0 }, + {12 ,0x00022058 ,0x000c20b6 ,0x00000101 ,0 }, + {13 ,0x00022058 ,0x000c20ca ,0x00000101 ,0 }, + {14 ,0x00022058 ,0x000c20fa ,0x00000101 ,0 }, };static void rt2400pci_probe_hw_mode (struct rt2x00_dev *rt2x00dev)
@@ -1479,12 +1477,12 @@ static void rt2400pci_probe_hw_mode(struct rt2x00_dev *rt2x00dev)*/ spec->num_modes =1 ; spec->num_rates =4 ; - spec->num_channels =14 ; spec->tx_power_a =NULL ; spec->tx_power_bg = txpower; spec->tx_power_default =DEFAULT_TXPOWER ; - spec->chan_val_a =NULL ; - spec->chan_val_bg = rf_vals_bg; + + spec->num_channels =ARRAY_SIZE (rf_vals_bg); + spec->channels = rf_vals_bg; }static int rt2400pci_probe_hw (struct rt2x00_dev *rt2x00dev)
drivers/net/wireless/rt2500pci.c +157 -99
300 lines not on this page · raw message
drivers/net/wireless/rt2500usb.c +155 -111
311 lines not on this page · raw message
drivers/net/wireless/rt2x00.h +4 -5
@@ -168,10 +168,10 @@ struct rt2x00_chip { };/* -* RF register collection structure -* This structure contains the value for all RF register words. +* RF register values that belong to a particular channel. */ -struct rf_reg { +struct rf_channel { +int channel;u32 rf1;u32 rf2;u32 rf3;
@@ -346,8 +346,7 @@ struct hw_mode_spec {/* * Device/chipset specific value. */ -const u32 *chan_val_a; -const u32 *chan_val_bg; +const struct rf_channel *channels; };/*
drivers/net/wireless/rt2x00dev.c +11 -23
@@ -611,29 +611,17 @@ static int rt2x00lib_probe_hw_modes(struct rt2x00_dev *rt2x00dev,/* * Initialize Channel list. */ -for (i =0 ; i <14 ; i++) -rt2x00lib_channel (&channels[i], i +1 , - spec->tx_power_bg[i], spec->chan_val_bg[i]); - -if (spec->num_channels >14 ) { -for (i =14 ; i < spec->num_channels; i++) { -if (i <22 ) - channels[i].chan =36 ; -else if (i <33 ) - channels[i].chan =100 ; -else - channels[i].chan =149 ; - channels[i].chan += ((i -14 ) *4 ); - -if (spec->tx_power_a) - tx_power = spec->tx_power_a[i]; -else - tx_power = spec->tx_power_default; - -rt2x00lib_channel (&channels[i], - channels[i].chan, tx_power, - spec->chan_val_a[i]); - } +for (i =0 ; i < spec->num_channels; i++) { +if (spec->channels[i].channel <=14 ) + tx_power = spec->tx_power_bg[i]; +else if (spec->tx_power_a) + tx_power = spec->tx_power_a[i]; +else + tx_power = spec->tx_power_default; + +rt2x00lib_channel (&channels[i], + spec->channels[i].channel, + tx_power, i); }/*
drivers/net/wireless/rt61pci.c +119 -213
382 lines not on this page · raw message
drivers/net/wireless/rt73usb.c +152 -129
340 lines not on this page · raw message
Signature · 1 line
1.5.3.rc5
PATCH 12/30 rt2x00: Store firmware in memory
In reply to Ivo van DoornQuoted 1 line
From
6d620c9670f54eb0ce06bd771556e4ac413a2c48Mon Sep 17 00:00:00 2001
From: Mattias Nissler <[email protected]>
Date: Sun, 5 Aug 2007 15:32:38 +0200
Subject: [PATCH 12/30] rt2x00: Store firmware in memory
Because hard disks are likely not yet up when resuming, we cannot load the firmware image from disk then. Work around this problem by keeping the firmware image in memory once it is loaded.
--- drivers/net/wireless/rt2x00.h | 6 ++++ drivers/net/wireless/rt2x00dev.c | 5 ++++ drivers/net/wireless/rt2x00firmware.c | 43 +++++++++++++++++++++++++------- drivers/net/wireless/rt2x00lib.h | 4 +++ 4 files changed, 48 insertions(+), 10 deletions(-)
drivers/net/wireless/rt2x00.h +6 -0
@@ -30,6 +30,7 @@#include <linux/prefetch.h> #include <linux/skbuff.h> #include <linux/workqueue.h> +#include <linux/firmware.h> #include <net/mac80211.h>
@@ -601,6 +602,11 @@ struct rt2x00_dev {struct data_ring *rx;struct data_ring *tx;struct data_ring *bcn; + +/* +* Firmware image. +*/ +const struct firmware *fw; };/*
drivers/net/wireless/rt2x00dev.c +5 -0
@@ -1091,6 +1091,11 @@ void rt2x00lib_remove_dev(struct rt2x00_dev *rt2x00dev)rt2x00lib_remove_hw (rt2x00dev);/* +* Free firmware image. +*/ +rt2x00lib_free_firmware (rt2x00dev); + +/* * Free ring structures. */ rt2x00lib_free_rings (rt2x00dev);
drivers/net/wireless/rt2x00firmware.c +33 -10
66 lines not on this page · raw message
drivers/net/wireless/rt2x00lib.h +4 -0
@@ -59,11 +59,15 @@ void rt2x00lib_config(struct rt2x00_dev *rt2x00dev, struct ieee80211_conf *conf)*/ #ifdef CONFIG_RT2X00_LIB_FIRMWARE int rt2x00lib_load_firmware (struct rt2x00_dev *rt2x00dev); +void rt2x00lib_free_firmware (struct rt2x00_dev *rt2x00dev);#else static inline int rt2x00lib_load_firmware (struct rt2x00_dev *rt2x00dev) {return 0 ; } +static inline void rt2x00lib_free_firmware (struct rt2x00_dev *rt2x00dev) +{ +}#endif /* CONFIG_RT2X00_LIB_FIRMWARE */ /*
Signature · 1 line
1.5.3.rc5
Re: [PATCH 12/30] rt2x00: Store firmware in memory
drivers/net/wireless/rt2x00firmware.c int rt2x00lib_load_firmware(struct rt2x00_dev *rt2x00dev) · line 121
Quoted 3 lines · On Sunday 19 August 2007 20:25:39 Ivo van Doorn wrote:
drivers/net/wireless/rt2x00firmware.c +3
-0+void rt2x00lib_free_firmware (struct rt2x00_dev *rt2x00dev) +{ +if (rt2x00dev->fw) {
No !=NULL check is needed.
Quoted 4 lines
drivers/net/wireless/rt2x00firmware.c +4
-0+release_firmware (rt2x00dev->fw); + rt2x00dev->fw =NULL ; + } +}
Signature · 1 line
Greetings Michael.
Re: [PATCH 12/30] rt2x00: Store firmware in memory
Quoted 6 lines · Michael Buesch
drivers/net/wireless/rt2x00firmware.c int rt2x00lib_load_firmware(struct rt2x00_dev *rt2x00dev) · line 121
Quoted 3 lines · On Sunday 19 August 2007 20:25:39 Ivo van Doorn wrote:
drivers/net/wireless/rt2x00firmware.c +3
-0+void rt2x00lib_free_firmware (struct rt2x00_dev *rt2x00dev) +{ +if (rt2x00dev->fw) {No !=NULL check is needed.
I'll fix this.
Thanks :)
Ivo
Quoted 5 lines
Quoted 4 lines
drivers/net/wireless/rt2x00firmware.c +4
-0+release_firmware (rt2x00dev->fw); + rt2x00dev->fw =NULL ; + } +}
PATCH 13/30 rt2x00: rt2x00_ring_free returns invalid length
In reply to Ivo van DoornQuoted 1 line
From
038b4a505c82c91a84caaf7832967ffac2faf93bMon Sep 17 00:00:00 2001
From: Ivo van Doorn <[email protected]>
Date: Sat, 18 Aug 2007 13:03:32 +0200
Subject: [PATCH 13/30] rt2x00: rt2x00_ring_free returns invalid length
rt2x00_ring_free returned the incorrect number of available entries because it accidently used ring->stats.len minus
the number of used entries. This always results in 0 available entries, obviously this in turn would lead to problems regarding the TX handling.
We can fix and optimize the code quite simply by
doing the limit - length
--- drivers/net/wireless/rt2x00ring.h | 4 +--- 1 files changed, 1 insertions(+), 3 deletions(-)
drivers/net/wireless/rt2x00ring.h +1 -3
@@ -219,9 +219,7 @@ static inline int rt2x00_ring_full(struct data_ring *ring)static inline int rt2x00_ring_free (struct data_ring *ring) { -if (ring->index_done >= ring->index) -return ring->index_done - ring->index; -return ring->stats.len - (ring->index - ring->index_done); +return ring->stats.limit - ring->stats.len; }/*
Signature · 1 line
1.5.3.rc5
PATCH 14/30 Fix off-by-one error in debugfs helpers
In reply to Ivo van DoornQuoted 1 line
From
089bfb50f6f9426f1dfd48bfb07455224484b847Mon Sep 17 00:00:00 2001
From: Luca Tettamanti <[email protected]>
Date: Thu, 9 Aug 2007 21:19:49 +0200
Subject: [PATCH 14/30] Fix off-by-one error in debugfs helpers
Fix an off-by-on error in debugfs code which may lead to read/write past the end of the data.
--- drivers/net/wireless/rt2x00debug.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
drivers/net/wireless/rt2x00debug.c +2 -2
@@ -127,7 +127,7 @@ static ssize_t rt2x00debug_read_##__name(struct file *file, \if (*offset) \return 0 ; \ \ - if (intf->offset_##__name > debug->__name.word_count) \ + if (intf->offset_##__name >= debug->__name.word_count) \return -EINVAL ; \ \ debug->__name.read(intf->rt2x00dev, \
@@ -160,7 +160,7 @@ static ssize_t rt2x00debug_write_##__name(struct file *file, \if (!capable (CAP_NET_ADMIN )) \return -EPERM ; \ \ - if (intf->offset_##__name > debug->__name.word_count) \ + if (intf->offset_##__name >= debug->__name.word_count) \return -EINVAL ; \ \if (copy_from_user (line, buf, length)) \
Signature · 1 line
1.5.3.rc5
PATCH 15/30 rt2x00: Use caching for USB transfers
In reply to Ivo van DoornQuoted 1 line
From
b75e79133fbff5d1b4cde7fc2ec362ad433c019fMon Sep 17 00:00:00 2001
From: Ivo van Doorn <[email protected]>
Date: Sat, 18 Aug 2007 13:07:27 +0200
Subject: [PATCH 15/30] rt2x00: Use caching for USB transfers
The kernel USB layer demands that the buffer argument
to usb_control_msg must point to something allocated using kmalloc. Failure to do so will lead to unexpected results depending on the running architecture.
This will add a cache to rt2x00_dev to be used by rt2x00usb for all data transfers to the host. This will also require some new wrapper functions for easier handling this.
For the rt73usb firmware loader this also means it is better to allocate the memory instead of using a 64byte array, besides that this was a direct attack on the stack size it is also safer.
--- drivers/net/wireless/rt2500usb.c | 38 +++++++-------- drivers/net/wireless/rt2x00.h | 5 ++- drivers/net/wireless/rt2x00usb.c | 92 +++++++++++++++++++++++++++++++------- drivers/net/wireless/rt2x00usb.h | 60 ++++++++++++++++++++++--- drivers/net/wireless/rt73usb.c | 92 +++++++++++++++++++++----------------- 5 files changed, 202 insertions(+), 85 deletions(-)
drivers/net/wireless/rt2500usb.c +18 -20
@@ -58,9 +58,9 @@ static inline void rt2500usb_register_read(const struct rt2x00_dev *rt2x00dev, u16 *value) {__le16 reg; -rt2x00usb_vendor_request (rt2x00dev,USB_MULTI_READ , -USB_VENDOR_REQUEST_IN , offset,0x00 , - ®,sizeof (u16),REGISTER_TIMEOUT ); +rt2x00usb_vendor_request_buff (rt2x00dev,USB_MULTI_READ , +USB_VENDOR_REQUEST_IN , offset, + ®,sizeof (u16),REGISTER_TIMEOUT ); *value =le16_to_cpu (reg); }
@@ -69,10 +69,10 @@ static inline void rt2500usb_register_multiread(const struct rt2x00_devconst unsigned int offset, void *value, const u16 length) { -rt2x00usb_vendor_request (rt2x00dev ,USB_MULTI_READ , - USB_VENDOR_REQUEST_IN, offset, 0x00, -value ,length , - REGISTER_TIMEOUT * (length / sizeof(u16))); + int timeout = REGISTER_TIMEOUT * (length / sizeof(u16)); +rt2x00usb_vendor_request_buff (rt2x00dev,USB_MULTI_READ , +USB_VENDOR_REQUEST_IN , offset, + value, length, timeout); } static inline void rt2500usb_register_write(const struct rt2x00_dev *rt2x00dev,
@@ -80,9 +80,9 @@ static inline void rt2500usb_register_write(const struct rt2x00_dev *rt2x00dev, u16 value) {__le16 reg =cpu_to_le16 (value); -rt2x00usb_vendor_request (rt2x00dev,USB_MULTI_WRITE , -USB_VENDOR_REQUEST_OUT , offset,0x00 , - ®,sizeof (u16),REGISTER_TIMEOUT ); +rt2x00usb_vendor_request_buff (rt2x00dev,USB_MULTI_WRITE , +USB_VENDOR_REQUEST_OUT , offset, + ®,sizeof (u16),REGISTER_TIMEOUT ); } static inline void rt2500usb_register_multiwrite(const struct rt2x00_dev
@@ -90,10 +90,10 @@ static inline void rt2500usb_register_multiwrite(const struct rt2x00_devconst unsigned int offset, void *value, const u16 length) { -rt2x00usb_vendor_request (rt2x00dev ,USB_MULTI_WRITE , - USB_VENDOR_REQUEST_OUT, offset, 0x00, -value ,length , - REGISTER_TIMEOUT * (length / sizeof(u16))); + int timeout = REGISTER_TIMEOUT * (length / sizeof(u16)); +rt2x00usb_vendor_request_buff (rt2x00dev,USB_MULTI_WRITE , +USB_VENDOR_REQUEST_OUT , offset, + value, length, timeout); }static u16 rt2500usb_bbp_check (const struct rt2x00_dev *rt2x00dev)
@@ -774,12 +774,10 @@ static int rt2500usb_init_registers(struct rt2x00_dev *rt2x00dev) {u16 reg; -rt2x00usb_vendor_request (rt2x00dev,USB_DEVICE_MODE , -USB_VENDOR_REQUEST_OUT ,0x0001 , -USB_MODE_TEST ,NULL ,0 ,REGISTER_TIMEOUT ); -rt2x00usb_vendor_request (rt2x00dev,USB_SINGLE_WRITE , -USB_VENDOR_REQUEST_OUT ,0x0308 , -0xf0 ,NULL ,0 ,REGISTER_TIMEOUT ); +rt2x00usb_vendor_request_sw (rt2x00dev,USB_DEVICE_MODE ,0x0001 , +USB_MODE_TEST ,REGISTER_TIMEOUT ); +rt2x00usb_vendor_request_sw (rt2x00dev,USB_SINGLE_WRITE ,0x0308 , +0x00f0 ,REGISTER_TIMEOUT );rt2500usb_register_read (rt2x00dev,TXRX_CSR2 , ®);rt2x00_set_field16 (®,TXRX_CSR2_DISABLE_RX ,1 );
drivers/net/wireless/rt2x00.h +4 -1
@@ -524,9 +524,12 @@ struct rt2x00_dev {struct hw_mode_spec spec;/* -* Base address of device registers (PCI devices only). +* Register pointers +* csr_addr: Base register address. (PCI) +* csr_cache: CSR cache for usb_control_msg. (USB) */ void __iomem *csr_addr; +void *csr_cache;/* * Interface configuration.
drivers/net/wireless/rt2x00usb.c +75 -17
171 lines not on this page · raw message
drivers/net/wireless/rt2x00usb.h +54 -6
81 lines not on this page · raw message
drivers/net/wireless/rt73usb.c +51 -41
168 lines not on this page · raw message
Signature · 1 line
1.5.3.rc5
PATCH 16/30 rt2x00: Cleanup set_state for rt61 and rt73
In reply to Ivo van DoornQuoted 1 line
From
252c0576e50c72fed7a52777b5a4abf962b8ae43Mon Sep 17 00:00:00 2001
From: Ivo van Doorn <[email protected]>
Date: Sat, 18 Aug 2007 13:08:09 +0200
Subject: [PATCH 16/30] rt2x00: Cleanup set_state for rt61 and rt73
The set_state was doing too much work for rt61 and rt73, the additional registers that were set should be used for Power Saving management and _not_ suspend/resume. Since at the moment we don't support power management we should remove the additional calls.
--- drivers/net/wireless/rt61pci.c | 12 ------------ drivers/net/wireless/rt73usb.c | 8 -------- 2 files changed, 0 insertions(+), 20 deletions(-)
drivers/net/wireless/rt61pci.c +0 -12
@@ -1423,18 +1423,6 @@ static int rt61pci_set_state(struct rt2x00_dev *rt2x00dev, enum dev_state state)rt2x00_set_field32 (®,MAC_CSR12_PUT_TO_SLEEP , put_to_sleep);rt2x00pci_register_write (rt2x00dev,MAC_CSR12 , reg); -if (put_to_sleep) { -rt2x00pci_register_write (rt2x00dev,SOFT_RESET_CSR ,0x00000005 ); -rt2x00pci_register_write (rt2x00dev,IO_CNTL_CSR ,0x0000001c ); -rt2x00pci_register_write (rt2x00dev,PCI_USEC_CSR ,0x00000060 ); -rt61pci_mcu_request (rt2x00dev,MCU_SLEEP ,0xff ,0x00 ,0x00 ); - }else { -rt2x00pci_register_write (rt2x00dev,SOFT_RESET_CSR ,0x00000007 ); -rt2x00pci_register_write (rt2x00dev,IO_CNTL_CSR ,0x00000018 ); -rt2x00pci_register_write (rt2x00dev,PCI_USEC_CSR ,0x00000020 ); -rt61pci_mcu_request (rt2x00dev,MCU_WAKEUP ,0xff ,0x00 ,0x00 ); - } -/* * Device is not guaranteed to be in the requested state yet. * We must wait until the register indicates that the
drivers/net/wireless/rt73usb.c +0 -8
@@ -1156,19 +1156,11 @@ static int rt73usb_set_state(struct rt2x00_dev *rt2x00dev, enum dev_state state) put_to_sleep = (state !=STATE_AWAKE ); -if (!put_to_sleep) -rt2x00usb_vendor_request_sw (rt2x00dev,USB_DEVICE_MODE ,0x0000 , -USB_MODE_WAKEUP ,REGISTER_TIMEOUT ); -rt73usb_register_read (rt2x00dev,MAC_CSR12 , ®);rt2x00_set_field32 (®,MAC_CSR12_FORCE_WAKEUP , !put_to_sleep);rt2x00_set_field32 (®,MAC_CSR12_PUT_TO_SLEEP , put_to_sleep);rt73usb_register_write (rt2x00dev,MAC_CSR12 , reg); -if (put_to_sleep) -rt2x00usb_vendor_request_sw (rt2x00dev,USB_DEVICE_MODE ,0x0000 , -USB_MODE_SLEEP ,REGISTER_TIMEOUT ); -/* * Device is not guaranteed to be in the requested state yet. * We must wait until the register indicates that the
Signature · 1 line
1.5.3.rc5
PATCH 17/30 rt2x00: Fix register initialization ordering
In reply to Ivo van DoornQuoted 1 line
From
34548ad3e92237fb9ce91be9d09a5877f782c321Mon Sep 17 00:00:00 2001
From: Ivo van Doorn <[email protected]>
Date: Sat, 18 Aug 2007 13:08:29 +0200
Subject: [PATCH 17/30] rt2x00: Fix register initialization ordering
Change the order in which the registers are being initialized to reflect the same order in which the legacy drivers initialize the registers. This should prevent problems caused by incorrect register initialization. Especially the SLEEP/AWAKE state registers are very sensitive to this.
--- drivers/net/wireless/rt2400pci.c | 44 +++++++++---------- drivers/net/wireless/rt2500pci.c | 89 ++++++++++++++++++-------------------- drivers/net/wireless/rt2500usb.c | 17 ++++--- drivers/net/wireless/rt61pci.c | 42 ++++++++--------- drivers/net/wireless/rt73usb.c | 18 ++++---- 5 files changed, 101 insertions(+), 109 deletions(-)
drivers/net/wireless/rt2400pci.c +21 -23
@@ -796,11 +796,6 @@ static int rt2400pci_init_registers(struct rt2x00_dev *rt2x00dev) {u32 reg; -if (rt2x00dev->ops->lib->set_device_state (rt2x00dev,STATE_AWAKE )) -return -EBUSY ; - -rt2x00pci_register_write (rt2x00dev,PWRCSR0 ,0x3f3b3100 ); -rt2x00pci_register_write (rt2x00dev,PSCSR0 ,0x00020002 );rt2x00pci_register_write (rt2x00dev,PSCSR1 ,0x00000002 );rt2x00pci_register_write (rt2x00dev,PSCSR2 ,0x00023f20 );
@@ -819,31 +814,34 @@ static int rt2400pci_init_registers(struct rt2x00_dev *rt2x00dev)rt2x00pci_register_write (rt2x00dev,CNT3 ,0x3f080000 ); -rt2x00pci_register_write (rt2x00dev,MACCSR0 ,0x00217223 ); -rt2x00pci_register_write (rt2x00dev,MACCSR1 ,0x00235518 ); - -rt2x00pci_register_read (rt2x00dev,MACCSR2 , ®); -rt2x00_set_field32 (®,MACCSR2_DELAY ,64 ); -rt2x00pci_register_write (rt2x00dev,MACCSR2 , reg); +rt2x00pci_register_read (rt2x00dev,ARCSR0 , ®); +rt2x00_set_field32 (®,ARCSR0_AR_BBP_DATA0 ,133 ); +rt2x00_set_field32 (®,ARCSR0_AR_BBP_ID0 ,134 ); +rt2x00_set_field32 (®,ARCSR0_AR_BBP_DATA1 ,136 ); +rt2x00_set_field32 (®,ARCSR0_AR_BBP_ID1 ,135 ); +rt2x00pci_register_write (rt2x00dev,ARCSR0 , reg);rt2x00pci_register_read (rt2x00dev,RXCSR3 , ®); -/* -* Tx power. -*/ -rt2x00_set_field32 (®,RXCSR3_BBP_ID0 ,3 ); +rt2x00_set_field32 (®,RXCSR3_BBP_ID0 ,3 );/* Tx power.*/ rt2x00_set_field32 (®,RXCSR3_BBP_ID0_VALID ,1 ); -/* -* Signal. -*/ -rt2x00_set_field32 (®,RXCSR3_BBP_ID1 ,32 ); +rt2x00_set_field32 (®,RXCSR3_BBP_ID1 ,32 );/* Signal */ rt2x00_set_field32 (®,RXCSR3_BBP_ID1_VALID ,1 ); -/* -* Rssi. -*/ -rt2x00_set_field32 (®,RXCSR3_BBP_ID2 ,36 ); +rt2x00_set_field32 (®,RXCSR3_BBP_ID2 ,36 );/* Rssi */ rt2x00_set_field32 (®,RXCSR3_BBP_ID2_VALID ,1 );rt2x00pci_register_write (rt2x00dev,RXCSR3 , reg); +rt2x00pci_register_write (rt2x00dev,PWRCSR0 ,0x3f3b3100 ); + +if (rt2x00dev->ops->lib->set_device_state (rt2x00dev,STATE_AWAKE )) +return -EBUSY ; + +rt2x00pci_register_write (rt2x00dev,MACCSR0 ,0x00217223 ); +rt2x00pci_register_write (rt2x00dev,MACCSR1 ,0x00235518 ); + +rt2x00pci_register_read (rt2x00dev,MACCSR2 , ®); +rt2x00_set_field32 (®,MACCSR2_DELAY ,64 ); +rt2x00pci_register_write (rt2x00dev,MACCSR2 , reg); +rt2x00pci_register_read (rt2x00dev,RALINKCSR , ®);rt2x00_set_field32 (®,RALINKCSR_AR_BBP_DATA0 ,17 );rt2x00_set_field32 (®,RALINKCSR_AR_BBP_ID0 ,154 );
drivers/net/wireless/rt2500pci.c +42 -47
120 lines not on this page · raw message
drivers/net/wireless/rt2500usb.c +9 -8
@@ -788,6 +788,7 @@ static int rt2500usb_init_registers(struct rt2x00_dev *rt2x00dev)rt2500usb_register_write (rt2x00dev,MAC_CSR1 ,0x0003 );rt2500usb_register_write (rt2x00dev,MAC_CSR1 ,0x0000 ); +rt2500usb_register_write (rt2x00dev,TXRX_CSR5 ,0x8c8d );rt2500usb_register_write (rt2x00dev,TXRX_CSR6 ,0x8b8a );rt2500usb_register_write (rt2x00dev,TXRX_CSR7 ,0x8687 );
@@ -813,27 +814,27 @@ static int rt2500usb_init_registers(struct rt2x00_dev *rt2x00dev)rt2500usb_register_write (rt2x00dev,MAC_CSR15 ,0x01ee );rt2500usb_register_write (rt2x00dev,MAC_CSR16 ,0x0000 ); -rt2500usb_register_read (rt2x00dev,TXRX_CSR0 , ®); -rt2x00_set_field16 (®,TXRX_CSR0_IV_OFFSET ,IEEE80211_HEADER ); -rt2x00_set_field16 (®,TXRX_CSR0_KEY_ID ,0xff ); -rt2500usb_register_write (rt2x00dev,TXRX_CSR0 , reg); -rt2500usb_register_read (rt2x00dev,MAC_CSR8 , ®);rt2x00_set_field16 (®,MAC_CSR8_MAX_FRAME_UNIT , rt2x00dev->rx->data_size);rt2500usb_register_write (rt2x00dev,MAC_CSR8 , reg); +rt2500usb_register_read (rt2x00dev,TXRX_CSR0 , ®); +rt2x00_set_field16 (®,TXRX_CSR0_IV_OFFSET ,IEEE80211_HEADER ); +rt2x00_set_field16 (®,TXRX_CSR0_KEY_ID ,0xff ); +rt2500usb_register_write (rt2x00dev,TXRX_CSR0 , reg); +rt2500usb_register_read (rt2x00dev,MAC_CSR18 , ®);rt2x00_set_field16 (®,MAC_CSR18_DELAY_AFTER_BEACON ,0x5a );rt2500usb_register_write (rt2x00dev,MAC_CSR18 , reg); +rt2500usb_register_read (rt2x00dev,PHY_CSR4 , ®); +rt2500usb_register_write (rt2x00dev,PHY_CSR4 , reg |0x0001 ); +rt2500usb_register_read (rt2x00dev,TXRX_CSR1 , ®);rt2x00_set_field16 (®,TXRX_CSR1_AUTO_SEQUENCE ,1 );rt2500usb_register_write (rt2x00dev,TXRX_CSR1 , reg); -rt2500usb_register_read (rt2x00dev,PHY_CSR4 , ®); -rt2500usb_register_write (rt2x00dev,PHY_CSR4 , reg |0x0001 ); -return 0 ; }
drivers/net/wireless/rt61pci.c +20 -22
78 lines not on this page · raw message
drivers/net/wireless/rt73usb.c +9 -9
@@ -952,11 +952,6 @@ static int rt73usb_init_registers(struct rt2x00_dev *rt2x00dev) {u32 reg; -if (rt2x00dev->ops->lib->set_device_state (rt2x00dev,STATE_AWAKE )) -return -EBUSY ; - -rt73usb_register_write (rt2x00dev,MAC_CSR10 ,0x00000718 ); -rt73usb_register_read (rt2x00dev,TXRX_CSR0 , ®);rt2x00_set_field32 (®,TXRX_CSR0_AUTO_TX_SEQ ,1 );rt2x00_set_field32 (®,TXRX_CSR0_DISABLE_RX ,0 );
@@ -966,13 +961,18 @@ static int rt73usb_init_registers(struct rt2x00_dev *rt2x00dev)rt73usb_register_write (rt2x00dev,TXRX_CSR1 ,0x9eaa9eaf );rt73usb_register_write (rt2x00dev,TXRX_CSR2 ,0x8a8b8c8d );rt73usb_register_write (rt2x00dev,TXRX_CSR3 ,0x00858687 ); -rt73usb_register_write (rt2x00dev,TXRX_CSR7 ,0x2e31353b );rt73usb_register_write (rt2x00dev,TXRX_CSR8 ,0x2a2a2a2c ); -rt73usb_register_write (rt2x00dev,TXRX_CSR15 ,0x0000000f ); -rt73usb_register_write (rt2x00dev,MAC_CSR6 ,0x00000fff ); +rt73usb_register_read (rt2x00dev,MAC_CSR6 , ®); +rt2x00_set_field32 (®,MAC_CSR6_MAX_FRAME_UNIT ,0xfff ); +rt73usb_register_write (rt2x00dev,MAC_CSR6 , reg); + +rt73usb_register_write (rt2x00dev,MAC_CSR10 ,0x00000718 ); + +if (rt2x00dev->ops->lib->set_device_state (rt2x00dev,STATE_AWAKE )) +return -EBUSY ;rt73usb_register_write (rt2x00dev,MAC_CSR13 ,0x00007f00 );
@@ -1016,7 +1016,7 @@ static int rt73usb_init_registers(struct rt2x00_dev *rt2x00dev)/* * Reset MAC and BBP registers. */ - reg =0 ; +rt73usb_register_read (rt2x00dev,MAC_CSR1 , ®);rt2x00_set_field32 (®,MAC_CSR1_SOFT_RESET ,1 );rt2x00_set_field32 (®,MAC_CSR1_BBP_RESET ,1 );rt73usb_register_write (rt2x00dev,MAC_CSR1 , reg);
Signature · 1 line
1.5.3.rc5
PATCH 18/30 rt2x00: memset descriptor before use
In reply to Ivo van DoornQuoted 1 line
From
1273bba4e38352cfe5b15c1c7cad742e41f00a96Mon Sep 17 00:00:00 2001
From: Ivo van Doorn <[email protected]>
Date: Sat, 18 Aug 2007 13:08:49 +0200
Subject: [PATCH 18/30] rt2x00: memset descriptor before use
For rt2x00usb, when skb_push() is called the descriptor is added in front of the frame. The contents however is random data. This should be correctly cleared to prevent garbage to be send to the device...
--- drivers/net/wireless/rt2x00usb.c | 10 +++++++--- 1 files changed, 7 insertions(+), 3 deletions(-)
drivers/net/wireless/rt2x00usb.c +7 -3
@@ -268,7 +268,6 @@ int rt2x00usb_write_tx_data(struct rt2x00_dev *rt2x00dev,interface_to_usbdev (rt2x00dev_usb (rt2x00dev));struct ieee80211_hdr *ieee80211hdr = (struct ieee80211_hdr *)skb->data;struct data_entry *entry =rt2x00_get_data_entry (ring); -struct data_desc *txd;u32 length = skb->len;if (rt2x00_ring_full (ring)) {
@@ -285,9 +284,14 @@ int rt2x00usb_write_tx_data(struct rt2x00_dev *rt2x00dev,return -EINVAL ; } +/* +* Add the descriptor in front of the skb. +*/ skb_push (skb, rt2x00dev->hw->extra_tx_headroom); - txd = (struct data_desc *)skb->data; -rt2x00lib_write_tx_desc (rt2x00dev, entry, txd, ieee80211hdr, +memset (skb->data,0x00 , rt2x00dev->hw->extra_tx_headroom); + +rt2x00lib_write_tx_desc (rt2x00dev, entry, + (struct data_desc *)skb->data, ieee80211hdr, length, control);memcpy (&entry->tx_status.control, control,sizeof (*control)); entry->skb = skb;
Signature · 1 line
1.5.3.rc5
PATCH 19/30 rt2x00: Remove IEEE80211_HW_WEP_INCLUDE_IV flag
In reply to Ivo van DoornQuoted 1 line
From
ca00a3af4a65db963b2ca268d4de11276208f8b1Mon Sep 17 00:00:00 2001
From: Ivo van Doorn <[email protected]>
Date: Sat, 18 Aug 2007 13:10:26 +0200
Subject: [PATCH 19/30] rt2x00: Remove IEEE80211_HW_WEP_INCLUDE_IV flag
The IEEE80211_HW_WEP_INCLUDE_IV flag implies that the device has done arc4 and has passed the rest on to mac80211. Since rt2x00 doesn't perform hardware encryption this flag should not be set.
--- drivers/net/wireless/rt2400pci.c | 1 - drivers/net/wireless/rt2500pci.c | 1 - drivers/net/wireless/rt2500usb.c | 1 - drivers/net/wireless/rt61pci.c | 1 - drivers/net/wireless/rt73usb.c | 1 - 5 files changed, 0 insertions(+), 5 deletions(-)
drivers/net/wireless/rt2400pci.c +0 -1
@@ -1448,7 +1448,6 @@ static void rt2400pci_probe_hw_mode(struct rt2x00_dev *rt2x00dev) rt2x00dev->hw->flags =IEEE80211_HW_HOST_GEN_BEACON |IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING | -IEEE80211_HW_WEP_INCLUDE_IV |IEEE80211_HW_DATA_NULLFUNC_ACK |IEEE80211_HW_NO_TKIP_WMM_HWACCEL | IEEE80211_HW_MONITOR_DURING_OPER |
drivers/net/wireless/rt2500pci.c +0 -1
@@ -1747,7 +1747,6 @@ static void rt2500pci_probe_hw_mode(struct rt2x00_dev *rt2x00dev) rt2x00dev->hw->flags =IEEE80211_HW_HOST_GEN_BEACON |IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING | -IEEE80211_HW_WEP_INCLUDE_IV |IEEE80211_HW_DATA_NULLFUNC_ACK |IEEE80211_HW_NO_TKIP_WMM_HWACCEL | IEEE80211_HW_MONITOR_DURING_OPER |
drivers/net/wireless/rt2500usb.c +0 -1
@@ -1469,7 +1469,6 @@ static void rt2500usb_probe_hw_mode(struct rt2x00_dev *rt2x00dev)IEEE80211_HW_HOST_GEN_BEACON_TEMPLATE |IEEE80211_HW_RX_INCLUDES_FCS |IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING | -IEEE80211_HW_WEP_INCLUDE_IV |IEEE80211_HW_DATA_NULLFUNC_ACK |IEEE80211_HW_NO_TKIP_WMM_HWACCEL | IEEE80211_HW_MONITOR_DURING_OPER |
drivers/net/wireless/rt61pci.c +0 -1
@@ -2112,7 +2112,6 @@ static void rt61pci_probe_hw_mode(struct rt2x00_dev *rt2x00dev) rt2x00dev->hw->flags =IEEE80211_HW_HOST_GEN_BEACON |IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING | -IEEE80211_HW_WEP_INCLUDE_IV |IEEE80211_HW_DATA_NULLFUNC_ACK |IEEE80211_HW_NO_TKIP_WMM_HWACCEL | IEEE80211_HW_MONITOR_DURING_OPER |
drivers/net/wireless/rt73usb.c +0 -1
@@ -1703,7 +1703,6 @@ static void rt73usb_probe_hw_mode(struct rt2x00_dev *rt2x00dev) rt2x00dev->hw->flags =IEEE80211_HW_HOST_GEN_BEACON_TEMPLATE |IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING | -IEEE80211_HW_WEP_INCLUDE_IV |IEEE80211_HW_DATA_NULLFUNC_ACK |IEEE80211_HW_NO_TKIP_WMM_HWACCEL | IEEE80211_HW_MONITOR_DURING_OPER |
Signature · 1 line
1.5.3.rc5
PATCH 20/30 rt2x00: Cleanup TXD flags
In reply to Ivo van DoornQuoted 1 line
From
c46e24be398993af9bb4ad153f5f98dd42f86cd3Mon Sep 17 00:00:00 2001
From: Ivo van Doorn <[email protected]>
Date: Sat, 18 Aug 2007 13:19:21 +0200
Subject: [PATCH 20/30] rt2x00: Cleanup TXD flags
Add a new TXD flag to indicate if this frame is part of the same burst series (CTS/RTS + Fragments).
Also remove the TXD_ACK flag since we can use the control->flags variable directly. So no point in copying flags.
And lastly fix the check for the NEW_SEQ bit in rt2500usb, the check for the flag was not converted to a boolean causing the value always to be set to 0.
--- drivers/net/wireless/rt2400pci.c | 2 +- drivers/net/wireless/rt2500pci.c | 2 +- drivers/net/wireless/rt2500usb.c | 4 ++-- drivers/net/wireless/rt2x00dev.c | 11 ++++------- drivers/net/wireless/rt2x00ring.h | 2 +- drivers/net/wireless/rt61pci.c | 4 +++- drivers/net/wireless/rt73usb.c | 6 +++++- 7 files changed, 17 insertions(+), 14 deletions(-)
drivers/net/wireless/rt2400pci.c +1 -1
@@ -1147,7 +1147,7 @@ static void rt2400pci_write_tx_desc(struct rt2x00_dev *rt2x00dev,rt2x00_set_field32 (&word,TXD_W0_MORE_FRAG ,test_bit (ENTRY_TXD_MORE_FRAG , &entry->flags));rt2x00_set_field32 (&word,TXD_W0_ACK , -test_bit (ENTRY_TXD_REQ_ACK , &entry->flags)); + !(control->flags &IEEE80211_TXCTL_NO_ACK ));rt2x00_set_field32 (&word,TXD_W0_TIMESTAMP ,test_bit (ENTRY_TXD_REQ_TIMESTAMP , &entry->flags)); rt2x00_set_field32(&word, TXD_W0_RTS,
drivers/net/wireless/rt2500pci.c +1 -1
@@ -1274,7 +1274,7 @@ static void rt2500pci_write_tx_desc(struct rt2x00_dev *rt2x00dev,rt2x00_set_field32 (&word,TXD_W0_MORE_FRAG ,test_bit (ENTRY_TXD_MORE_FRAG , &entry->flags));rt2x00_set_field32 (&word,TXD_W0_ACK , -test_bit (ENTRY_TXD_REQ_ACK , &entry->flags)); + !(control->flags &IEEE80211_TXCTL_NO_ACK ));rt2x00_set_field32 (&word,TXD_W0_TIMESTAMP ,test_bit (ENTRY_TXD_REQ_TIMESTAMP , &entry->flags)); rt2x00_set_field32(&word, TXD_W0_OFDM,
drivers/net/wireless/rt2500usb.c +2 -2
@@ -1066,13 +1066,13 @@ static void rt2500usb_write_tx_desc(struct rt2x00_dev *rt2x00dev,rt2x00_set_field32 (&word,TXD_W0_MORE_FRAG ,test_bit (ENTRY_TXD_MORE_FRAG , &entry->flags));rt2x00_set_field32 (&word,TXD_W0_ACK , -test_bit (ENTRY_TXD_REQ_ACK , &entry->flags)); + !(control->flags &IEEE80211_TXCTL_NO_ACK ));rt2x00_set_field32 (&word,TXD_W0_TIMESTAMP ,test_bit (ENTRY_TXD_REQ_TIMESTAMP , &entry->flags));rt2x00_set_field32 (&word,TXD_W0_OFDM ,test_bit (ENTRY_TXD_OFDM_RATE , &entry->flags));rt2x00_set_field32 (&word,TXD_W0_NEW_SEQ , - control->flags &IEEE80211_TXCTL_FIRST_FRAGMENT ); + !!(control->flags &IEEE80211_TXCTL_FIRST_FRAGMENT ));rt2x00_set_field32 (&word,TXD_W0_IFS , desc->ifs);rt2x00_set_field32 (&word,TXD_W0_DATABYTE_COUNT , length);rt2x00_set_field32 (&word,TXD_W0_CIPHER ,CIPHER_NONE );
drivers/net/wireless/rt2x00dev.c +4 -7
@@ -439,6 +439,7 @@ void rt2x00lib_write_tx_desc(struct rt2x00_dev *rt2x00dev,* Check if this is a RTS/CTS frame */ if (is_rts_frame (frame_control) ||is_cts_frame (frame_control)) { +__set_bit (ENTRY_TXD_BURST , &entry->flags);if (is_rts_frame (frame_control))__set_bit (ENTRY_TXD_RTS_FRAME , &entry->flags);if (control->rts_cts_rate)
@@ -454,8 +455,10 @@ void rt2x00lib_write_tx_desc(struct rt2x00_dev *rt2x00dev,/* * Check if more fragments are pending */ -if (ieee80211_get_morefrag (ieee80211hdr)) +if (ieee80211_get_morefrag (ieee80211hdr)) { +__set_bit (ENTRY_TXD_BURST , &entry->flags);__set_bit (ENTRY_TXD_MORE_FRAG , &entry->flags); + }/* * Beacons and probe responses require the tsf timestamp
@@ -466,12 +469,6 @@ void rt2x00lib_write_tx_desc(struct rt2x00_dev *rt2x00dev,__set_bit (ENTRY_TXD_REQ_TIMESTAMP , &entry->flags);/* -* Check if ACK is required -*/ -if (!(control->flags &IEEE80211_TXCTL_NO_ACK )) -__set_bit (ENTRY_TXD_REQ_ACK , &entry->flags); - -/* * Determine with what IFS priority this frame should be send. * Set ifs to IFS_SIFS when the this is not the first fragment, * or this fragment came after RTS/CTS.
drivers/net/wireless/rt2x00ring.h +1 -1
@@ -76,7 +76,7 @@ struct data_entry {#define ENTRY_TXD_OFDM_RATE 4#define ENTRY_TXD_MORE_FRAG 5#define ENTRY_TXD_REQ_TIMESTAMP 6 -#define ENTRY_TXD_REQ_ACK 7 +#define ENTRY_TXD_BURST 7/* * Ring we belong to.
drivers/net/wireless/rt61pci.c +3 -1
@@ -1519,7 +1519,7 @@ static void rt61pci_write_tx_desc(struct rt2x00_dev *rt2x00dev,rt2x00_set_field32 (&word,TXD_W0_MORE_FRAG ,test_bit (ENTRY_TXD_MORE_FRAG , &entry->flags));rt2x00_set_field32 (&word,TXD_W0_ACK , -test_bit (ENTRY_TXD_REQ_ACK , &entry->flags)); + !(control->flags &IEEE80211_TXCTL_NO_ACK ));rt2x00_set_field32 (&word,TXD_W0_TIMESTAMP ,test_bit (ENTRY_TXD_REQ_TIMESTAMP , &entry->flags)); rt2x00_set_field32(&word, TXD_W0_OFDM,
@@ -1528,6 +1528,8 @@ static void rt61pci_write_tx_desc(struct rt2x00_dev *rt2x00dev,rt2x00_set_field32 (&word,TXD_W0_RETRY_MODE ,0 );rt2x00_set_field32 (&word,TXD_W0_TKIP_MIC ,0 );rt2x00_set_field32 (&word,TXD_W0_DATABYTE_COUNT , length); +rt2x00_set_field32 (&word,TXD_W0_BURST , +test_bit (ENTRY_TXD_BURST , &entry->flags));rt2x00_set_field32 (&word,TXD_W0_CIPHER_ALG ,CIPHER_NONE );rt2x00_desc_write (txd,0 , word); }
drivers/net/wireless/rt73usb.c +5 -1
@@ -1250,11 +1250,13 @@ static void rt73usb_write_tx_desc(struct rt2x00_dev *rt2x00dev,rt2x00_desc_write (txd,5 , word);rt2x00_desc_read (txd,0 , &word); +rt2x00_set_field32 (&word,TXD_W0_BURST , +test_bit (ENTRY_TXD_BURST , &entry->flags));rt2x00_set_field32 (&word,TXD_W0_VALID ,1 );rt2x00_set_field32 (&word,TXD_W0_MORE_FRAG ,test_bit (ENTRY_TXD_MORE_FRAG , &entry->flags));rt2x00_set_field32 (&word,TXD_W0_ACK , -test_bit (ENTRY_TXD_REQ_ACK , &entry->flags)); + !(control->flags &IEEE80211_TXCTL_NO_ACK ));rt2x00_set_field32 (&word,TXD_W0_TIMESTAMP ,test_bit (ENTRY_TXD_REQ_TIMESTAMP , &entry->flags)); rt2x00_set_field32(&word, TXD_W0_OFDM,
@@ -1263,6 +1265,8 @@ static void rt73usb_write_tx_desc(struct rt2x00_dev *rt2x00dev,rt2x00_set_field32 (&word,TXD_W0_RETRY_MODE ,0 );rt2x00_set_field32 (&word,TXD_W0_TKIP_MIC ,0 );rt2x00_set_field32 (&word,TXD_W0_DATABYTE_COUNT , length); +rt2x00_set_field32 (&word,TXD_W0_BURST2 , +test_bit (ENTRY_TXD_BURST , &entry->flags));rt2x00_set_field32 (&word,TXD_W0_CIPHER_ALG ,CIPHER_NONE );rt2x00_desc_write (txd,0 , word); }
Signature · 1 line
1.5.3.rc5
PATCH 21/30 rt2x00: Add byte-ordering annotation for MAC and BSSID
In reply to Ivo van DoornQuoted 1 line
From
3194744aba3738ec948c338ed488b4b4639063b9Mon Sep 17 00:00:00 2001
From: Ivo van Doorn <[email protected]>
Date: Sat, 18 Aug 2007 13:22:01 +0200
Subject: [PATCH 21/30] rt2x00: Add byte-ordering annotation for MAC and BSSID
By adding byte-ordering annotation for the temporary register values for MAC and BSSID writing we enhance typesafety and uncover a bug:
When rt73usb and rt61 touch the MAC/BSSID and treat it as a register they need to perform byteordering to prevent the bytes to get mixed up.
--- drivers/net/wireless/rt2400pci.c | 4 ++-- drivers/net/wireless/rt2500pci.c | 4 ++-- drivers/net/wireless/rt2500usb.c | 4 ++-- drivers/net/wireless/rt61pci.c | 14 ++++++++++---- drivers/net/wireless/rt73usb.c | 14 ++++++++++---- 5 files changed, 26 insertions(+), 14 deletions(-)
drivers/net/wireless/rt2400pci.c +2 -2
@@ -251,7 +251,7 @@ static int rt2400pci_rfkill_poll(struct rt2x00_dev *rt2x00dev)*/ static void rt2400pci_config_mac_addr (struct rt2x00_dev *rt2x00dev,u8 *addr) { -u32 reg[2 ]; +__le32 reg[2 ];memset (®,0 ,sizeof (reg));memcpy (®, addr,ETH_ALEN );
@@ -265,7 +265,7 @@ static void rt2400pci_config_mac_addr(struct rt2x00_dev *rt2x00dev, u8 *addr)static void rt2400pci_config_bssid (struct rt2x00_dev *rt2x00dev,u8 *bssid) { -u32 reg[2 ]; +__le32 reg[2 ];memset (®,0 ,sizeof (reg));memcpy (®, bssid,ETH_ALEN );
drivers/net/wireless/rt2500pci.c +2 -2
@@ -251,7 +251,7 @@ static int rt2500pci_rfkill_poll(struct rt2x00_dev *rt2x00dev)*/ static void rt2500pci_config_mac_addr (struct rt2x00_dev *rt2x00dev,u8 *addr) { -u32 reg[2 ]; +__le32 reg[2 ];memset (®,0 ,sizeof (reg));memcpy (®, addr,ETH_ALEN );
@@ -265,7 +265,7 @@ static void rt2500pci_config_mac_addr(struct rt2x00_dev *rt2x00dev, u8 *addr)static void rt2500pci_config_bssid (struct rt2x00_dev *rt2x00dev,u8 *bssid) { -u32 reg[2 ]; +__le32 reg[2 ];memset (®,0 ,sizeof (reg));memcpy (®, bssid,ETH_ALEN );
drivers/net/wireless/rt2500usb.c +2 -2
@@ -256,7 +256,7 @@ static const struct rt2x00debug rt2500usb_rt2x00debug = {*/ static void rt2500usb_config_mac_addr (struct rt2x00_dev *rt2x00dev,u8 *addr) { -u16 reg[3 ]; +__le16 reg[3 ];memset (®,0 ,sizeof (reg));memcpy (®, addr,ETH_ALEN );
@@ -270,7 +270,7 @@ static void rt2500usb_config_mac_addr(struct rt2x00_dev *rt2x00dev, u8 *addr)static void rt2500usb_config_bssid (struct rt2x00_dev *rt2x00dev,u8 *bssid) { -u16 reg[3 ]; +__le16 reg[3 ];memset (®,0 ,sizeof (reg));memcpy (®, bssid,ETH_ALEN );
drivers/net/wireless/rt61pci.c +10 -4
@@ -276,12 +276,15 @@ static int rt61pci_rfkill_poll(struct rt2x00_dev *rt2x00dev)*/ static void rt61pci_config_mac_addr (struct rt2x00_dev *rt2x00dev,u8 *addr) { -u32 reg[2 ]; +__le32 reg[2 ]; +u32 tmp;memset (®,0 ,sizeof (reg));memcpy (®, addr,ETH_ALEN ); -rt2x00_set_field32 (®[1 ],MAC_CSR3_UNICAST_TO_ME_MASK ,0xff ); + tmp =le32_to_cpu (reg[1 ]); +rt2x00_set_field32 (&tmp,MAC_CSR3_UNICAST_TO_ME_MASK ,0xff ); + reg[1 ] =cpu_to_le32 (tmp);/* * The MAC address is passed to us as an array of bytes,
@@ -292,12 +295,15 @@ static void rt61pci_config_mac_addr(struct rt2x00_dev *rt2x00dev, u8 *addr)static void rt61pci_config_bssid (struct rt2x00_dev *rt2x00dev,u8 *bssid) { -u32 reg[2 ]; +__le32 reg[2 ]; +u32 tmp;memset (®,0 ,sizeof (reg));memcpy (®, bssid,ETH_ALEN ); -rt2x00_set_field32 (®[1 ],MAC_CSR5_BSS_ID_MASK ,3 ); + tmp =le32_to_cpu (reg[1 ]); +rt2x00_set_field32 (&tmp,MAC_CSR5_BSS_ID_MASK ,3 ); + reg[1 ] =cpu_to_le32 (tmp);/* * The BSSID is passed to us as an array of bytes,
drivers/net/wireless/rt73usb.c +10 -4
@@ -257,12 +257,15 @@ static const struct rt2x00debug rt73usb_rt2x00debug = {*/ static void rt73usb_config_mac_addr (struct rt2x00_dev *rt2x00dev,u8 *addr) { -u32 reg[2 ]; +__le32 reg[2 ]; +u32 tmp;memset (®,0 ,sizeof (reg));memcpy (®, addr,ETH_ALEN ); -rt2x00_set_field32 (®[1 ],MAC_CSR3_UNICAST_TO_ME_MASK ,0xff ); + tmp =le32_to_cpu (reg[1 ]); +rt2x00_set_field32 (&tmp,MAC_CSR3_UNICAST_TO_ME_MASK ,0xff ); + reg[1 ] =cpu_to_le32 (tmp);/* * The MAC address is passed to us as an array of bytes,
@@ -273,12 +276,15 @@ static void rt73usb_config_mac_addr(struct rt2x00_dev *rt2x00dev, u8 *addr)static void rt73usb_config_bssid (struct rt2x00_dev *rt2x00dev,u8 *bssid) { -u32 reg[2 ]; +__le32 reg[2 ]; +u32 tmp;memset (®,0 ,sizeof (reg));memcpy (®, bssid,ETH_ALEN ); -rt2x00_set_field32 (®[1 ],MAC_CSR5_BSS_ID_MASK ,3 ); + tmp =le32_to_cpu (reg[1 ]); +rt2x00_set_field32 (&tmp,MAC_CSR5_BSS_ID_MASK ,3 ); + reg[1 ] =cpu_to_le32 (tmp);/* * The BSSID is passed to us as an array of bytes,
Signature · 1 line
1.5.3.rc5
PATCH 22/30 rt2x00: Correctly set TXD retry flag
In reply to Ivo van DoornQuoted 1 line
From
0bb0e744139fd77b627cca3faf82897914d6dae9Mon Sep 17 00:00:00 2001
From: Ivo van Doorn <[email protected]>
Date: Sat, 18 Aug 2007 13:25:26 +0200
Subject: [PATCH 22/30] rt2x00: Correctly set TXD retry flag
Check for the IEEE80211_TXCTL_LONG_RETRY_LIMIT flag to determine the correct RETRY mode.
Only rt2500usb is capable of setting the exact number of maximum retries. All other chipsets can only set the LONG or SHORT retry mode.
--- drivers/net/wireless/rt2400pci.c | 3 ++- drivers/net/wireless/rt2500pci.c | 3 ++- drivers/net/wireless/rt61pci.c | 3 ++- drivers/net/wireless/rt73usb.c | 3 ++- 4 files changed, 8 insertions(+), 4 deletions(-)
drivers/net/wireless/rt2400pci.c +2 -1
@@ -1153,7 +1153,8 @@ static void rt2400pci_write_tx_desc(struct rt2x00_dev *rt2x00dev,rt2x00_set_field32 (&word,TXD_W0_RTS ,test_bit (ENTRY_TXD_RTS_FRAME , &entry->flags));rt2x00_set_field32 (&word,TXD_W0_IFS , desc->ifs); -rt2x00_set_field32 (&word,TXD_W0_RETRY_MODE ,0 ); +rt2x00_set_field32 (&word,TXD_W0_RETRY_MODE , + !!(control->flags &IEEE80211_TXCTL_LONG_RETRY_LIMIT ));rt2x00_desc_write (txd,0 , word); }
drivers/net/wireless/rt2500pci.c +2 -1
@@ -1281,7 +1281,8 @@ static void rt2500pci_write_tx_desc(struct rt2x00_dev *rt2x00dev, test_bit(ENTRY_TXD_OFDM_RATE, &entry->flags));rt2x00_set_field32 (&word,TXD_W0_CIPHER_OWNER ,1 );rt2x00_set_field32 (&word,TXD_W0_IFS , desc->ifs); -rt2x00_set_field32 (&word,TXD_W0_RETRY_MODE ,0 ); +rt2x00_set_field32 (&word,TXD_W0_RETRY_MODE , + !!(control->flags &IEEE80211_TXCTL_LONG_RETRY_LIMIT ));rt2x00_set_field32 (&word,TXD_W0_DATABYTE_COUNT , length);rt2x00_set_field32 (&word,TXD_W0_CIPHER_ALG ,CIPHER_NONE );rt2x00_desc_write (txd,0 , word);
drivers/net/wireless/rt61pci.c +2 -1
@@ -1531,7 +1531,8 @@ static void rt61pci_write_tx_desc(struct rt2x00_dev *rt2x00dev,rt2x00_set_field32 (&word,TXD_W0_OFDM ,test_bit (ENTRY_TXD_OFDM_RATE , &entry->flags));rt2x00_set_field32 (&word,TXD_W0_IFS , desc->ifs); -rt2x00_set_field32 (&word,TXD_W0_RETRY_MODE ,0 ); +rt2x00_set_field32 (&word,TXD_W0_RETRY_MODE , + !!(control->flags &IEEE80211_TXCTL_LONG_RETRY_LIMIT ));rt2x00_set_field32 (&word,TXD_W0_TKIP_MIC ,0 );rt2x00_set_field32 (&word,TXD_W0_DATABYTE_COUNT , length); rt2x00_set_field32(&word, TXD_W0_BURST,
drivers/net/wireless/rt73usb.c +2 -1
@@ -1268,7 +1268,8 @@ static void rt73usb_write_tx_desc(struct rt2x00_dev *rt2x00dev,rt2x00_set_field32 (&word,TXD_W0_OFDM ,test_bit (ENTRY_TXD_OFDM_RATE , &entry->flags));rt2x00_set_field32 (&word,TXD_W0_IFS , desc->ifs); -rt2x00_set_field32 (&word,TXD_W0_RETRY_MODE ,0 ); +rt2x00_set_field32 (&word,TXD_W0_RETRY_MODE , + !!(control->flags &IEEE80211_TXCTL_LONG_RETRY_LIMIT ));rt2x00_set_field32 (&word,TXD_W0_TKIP_MIC ,0 );rt2x00_set_field32 (&word,TXD_W0_DATABYTE_COUNT , length); rt2x00_set_field32(&word, TXD_W0_BURST2,
Signature · 1 line
1.5.3.rc5
PATCH 23/30 rt2x00: Move rt2x00 files into rt2x00 folder
In reply to Ivo van DoornQuoted 1 line
From
0ad22000ea988cd69bccaa49823163e5658dd293Mon Sep 17 00:00:00 2001
From: Ivo van Doorn <[email protected]>
Date: Sat, 18 Aug 2007 14:03:15 +0200
Subject: [PATCH 23/30] rt2x00: Move rt2x00 files into rt2x00 folder
rt2x00 covers quite a lot of files (at the moment 25 but more will be added with new drivers), to properly group them together and making management of the files easier they should be put into a new rt2x00 folder.
---
Patch trimmed, Only Makefile and Kconfig difference has been added. All other files have been moved (without changes) using:
mkdir drivers/net/wireless/rt2x00
git mv drivers/net/wireless/rt2400pci.c drivers/net/wireless/rt2x00/rt2400pci.c git mv drivers/net/wireless/rt2400pci.h drivers/net/wireless/rt2x00/rt2400pci.h git mv drivers/net/wireless/rt2500pci.c drivers/net/wireless/rt2x00/rt2500pci.c git mv drivers/net/wireless/rt2500pci.h drivers/net/wireless/rt2x00/rt2500pci.h git mv drivers/net/wireless/rt2500usb.c drivers/net/wireless/rt2x00/rt2500usb.c git mv drivers/net/wireless/rt2500usb.h drivers/net/wireless/rt2x00/rt2500usb.h git mv drivers/net/wireless/rt2x00.h drivers/net/wireless/rt2x00/rt2x00.h git mv drivers/net/wireless/rt2x00config.c drivers/net/wireless/rt2x00/rt2x00config.c git mv drivers/net/wireless/rt2x00debug.c drivers/net/wireless/rt2x00/rt2x00debug.c git mv drivers/net/wireless/rt2x00debug.h drivers/net/wireless/rt2x00/rt2x00debug.h git mv drivers/net/wireless/rt2x00dev.c drivers/net/wireless/rt2x00/rt2x00dev.c git mv drivers/net/wireless/rt2x00firmware.c drivers/net/wireless/rt2x00/rt2x00firmware.c git mv drivers/net/wireless/rt2x00lib.h drivers/net/wireless/rt2x00/rt2x00lib.h git mv drivers/net/wireless/rt2x00mac.c drivers/net/wireless/rt2x00/rt2x00mac.c git mv drivers/net/wireless/rt2x00pci.c drivers/net/wireless/rt2x00/rt2x00pci.c git mv drivers/net/wireless/rt2x00pci.h drivers/net/wireless/rt2x00/rt2x00pci.h git mv drivers/net/wireless/rt2x00reg.h drivers/net/wireless/rt2x00/rt2x00reg.h git mv drivers/net/wireless/rt2x00rfkill.c drivers/net/wireless/rt2x00/rt2x00rfkill.c git mv drivers/net/wireless/rt2x00ring.h drivers/net/wireless/rt2x00/rt2x00ring.h git mv drivers/net/wireless/rt2x00usb.c drivers/net/wireless/rt2x00/rt2x00usb.c git mv drivers/net/wireless/rt2x00usb.h drivers/net/wireless/rt2x00/rt2x00usb.h git mv drivers/net/wireless/rt61pci.c drivers/net/wireless/rt2x00/rt61pci.c git mv drivers/net/wireless/rt61pci.h drivers/net/wireless/rt2x00/rt61pci.h git mv drivers/net/wireless/rt73usb.c drivers/net/wireless/rt2x00/rt73usb.c git mv drivers/net/wireless/rt73usb.h drivers/net/wireless/rt2x00/rt73usb.h
drivers/net/wireless/Kconfig | 131 +-- drivers/net/wireless/Makefile | 23 +- drivers/net/wireless/rt2400pci.c | 1683 ------------------ drivers/net/wireless/rt2400pci.h | 943 ----------- drivers/net/wireless/rt2500pci.c | 1975 ---------------------- drivers/net/wireless/rt2500pci.h | 1218 ------------- drivers/net/wireless/rt2500usb.c | 1687 ------------------ drivers/net/wireless/rt2500usb.h | 767 --------- drivers/net/wireless/rt2x00.h | 788 --------- drivers/net/wireless/rt2x00/Kconfig | 130 ++ drivers/net/wireless/rt2x00/Makefile | 22 + drivers/net/wireless/rt2x00/rt2400pci.c | 1683 ++++++++++++++++++ drivers/net/wireless/rt2x00/rt2400pci.h | 943 +++++++++++ drivers/net/wireless/rt2x00/rt2500pci.c | 1975 ++++++++++++++++++++++ drivers/net/wireless/rt2x00/rt2500pci.h | 1218 +++++++++++++ drivers/net/wireless/rt2x00/rt2500usb.c | 1687 ++++++++++++++++++ drivers/net/wireless/rt2x00/rt2500usb.h | 767 +++++++++ drivers/net/wireless/rt2x00/rt2x00.h | 788 +++++++++ drivers/net/wireless/rt2x00/rt2x00config.c | 165 ++ drivers/net/wireless/rt2x00/rt2x00debug.c | 328 ++++ drivers/net/wireless/rt2x00/rt2x00debug.h | 57 + drivers/net/wireless/rt2x00/rt2x00dev.c | 1153 +++++++++++++ drivers/net/wireless/rt2x00/rt2x00firmware.c | 126 ++ drivers/net/wireless/rt2x00/rt2x00lib.h | 124 ++ drivers/net/wireless/rt2x00/rt2x00mac.c | 418 +++++ drivers/net/wireless/rt2x00/rt2x00pci.c | 512 ++++++ drivers/net/wireless/rt2x00/rt2x00pci.h | 124 ++ drivers/net/wireless/rt2x00/rt2x00reg.h | 270 +++ drivers/net/wireless/rt2x00/rt2x00rfkill.c | 146 ++ drivers/net/wireless/rt2x00/rt2x00ring.h | 240 +++ drivers/net/wireless/rt2x00/rt2x00usb.c | 724 ++++++++ drivers/net/wireless/rt2x00/rt2x00usb.h | 183 ++ drivers/net/wireless/rt2x00/rt61pci.c | 2348 ++++++++++++++++++++++++++ drivers/net/wireless/rt2x00/rt61pci.h | 1382 +++++++++++++++ drivers/net/wireless/rt2x00/rt73usb.c | 2002 ++++++++++++++++++++++ drivers/net/wireless/rt2x00/rt73usb.h | 967 +++++++++++ drivers/net/wireless/rt2x00config.c | 165 -- drivers/net/wireless/rt2x00debug.c | 328 ---- drivers/net/wireless/rt2x00debug.h | 57 - drivers/net/wireless/rt2x00dev.c | 1153 ------------- drivers/net/wireless/rt2x00firmware.c | 126 -- drivers/net/wireless/rt2x00lib.h | 124 -- drivers/net/wireless/rt2x00mac.c | 418 ----- drivers/net/wireless/rt2x00pci.c | 512 ------ drivers/net/wireless/rt2x00pci.h | 124 -- drivers/net/wireless/rt2x00reg.h | 270 --- drivers/net/wireless/rt2x00rfkill.c | 146 -- drivers/net/wireless/rt2x00ring.h | 240 --- drivers/net/wireless/rt2x00usb.c | 724 -------- drivers/net/wireless/rt2x00usb.h | 183 -- drivers/net/wireless/rt61pci.c | 2348 -------------------------- drivers/net/wireless/rt61pci.h | 1382 --------------- drivers/net/wireless/rt73usb.c | 2002 ---------------------- drivers/net/wireless/rt73usb.h | 967 ----------- 54 files changed, 20484 insertions(+), 20482 deletions(-) delete mode 100644 drivers/net/wireless/rt2400pci.c delete mode 100644 drivers/net/wireless/rt2400pci.h delete mode 100644 drivers/net/wireless/rt2500pci.c delete mode 100644 drivers/net/wireless/rt2500pci.h delete mode 100644 drivers/net/wireless/rt2500usb.c delete mode 100644 drivers/net/wireless/rt2500usb.h delete mode 100644 drivers/net/wireless/rt2x00.h create mode 100644 drivers/net/wireless/rt2x00/Kconfig create mode 100644 drivers/net/wireless/rt2x00/Makefile create mode 100644 drivers/net/wireless/rt2x00/rt2400pci.c create mode 100644 drivers/net/wireless/rt2x00/rt2400pci.h create mode 100644 drivers/net/wireless/rt2x00/rt2500pci.c create mode 100644 drivers/net/wireless/rt2x00/rt2500pci.h create mode 100644 drivers/net/wireless/rt2x00/rt2500usb.c create mode 100644 drivers/net/wireless/rt2x00/rt2500usb.h create mode 100644 drivers/net/wireless/rt2x00/rt2x00.h create mode 100644 drivers/net/wireless/rt2x00/rt2x00config.c create mode 100644 drivers/net/wireless/rt2x00/rt2x00debug.c create mode 100644 drivers/net/wireless/rt2x00/rt2x00debug.h create mode 100644 drivers/net/wireless/rt2x00/rt2x00dev.c create mode 100644 drivers/net/wireless/rt2x00/rt2x00firmware.c create mode 100644 drivers/net/wireless/rt2x00/rt2x00lib.h create mode 100644 drivers/net/wireless/rt2x00/rt2x00mac.c create mode 100644 drivers/net/wireless/rt2x00/rt2x00pci.c create mode 100644 drivers/net/wireless/rt2x00/rt2x00pci.h create mode 100644 drivers/net/wireless/rt2x00/rt2x00reg.h create mode 100644 drivers/net/wireless/rt2x00/rt2x00rfkill.c create mode 100644 drivers/net/wireless/rt2x00/rt2x00ring.h create mode 100644 drivers/net/wireless/rt2x00/rt2x00usb.c create mode 100644 drivers/net/wireless/rt2x00/rt2x00usb.h create mode 100644 drivers/net/wireless/rt2x00/rt61pci.c create mode 100644 drivers/net/wireless/rt2x00/rt61pci.h create mode 100644 drivers/net/wireless/rt2x00/rt73usb.c create mode 100644 drivers/net/wireless/rt2x00/rt73usb.h delete mode 100644 drivers/net/wireless/rt2x00config.c delete mode 100644 drivers/net/wireless/rt2x00debug.c delete mode 100644 drivers/net/wireless/rt2x00debug.h delete mode 100644 drivers/net/wireless/rt2x00dev.c delete mode 100644 drivers/net/wireless/rt2x00firmware.c delete mode 100644 drivers/net/wireless/rt2x00lib.h delete mode 100644 drivers/net/wireless/rt2x00mac.c delete mode 100644 drivers/net/wireless/rt2x00pci.c delete mode 100644 drivers/net/wireless/rt2x00pci.h delete mode 100644 drivers/net/wireless/rt2x00reg.h delete mode 100644 drivers/net/wireless/rt2x00rfkill.c delete mode 100644 drivers/net/wireless/rt2x00ring.h delete mode 100644 drivers/net/wireless/rt2x00usb.c delete mode 100644 drivers/net/wireless/rt2x00usb.h delete mode 100644 drivers/net/wireless/rt61pci.c delete mode 100644 drivers/net/wireless/rt61pci.h delete mode 100644 drivers/net/wireless/rt73usb.c delete mode 100644 drivers/net/wireless/rt73usb.h
drivers/net/wireless/Kconfig +1 -130
@@ -589,136 +589,6 @@ config P54_PCI tristate "Prism54 PCI support" depends on P54_COMMON && PCI -config RT2X00 - tristate "Ralink driver support" - depends on MAC80211 && WLAN_80211 && EXPERIMENTAL - ---help--- - This will enable the experimental support for the Ralink drivers, - developed in the rt2x00 project <http://rt2x00.serialmonkey.com>. - - These drivers will make use of the Devicescape ieee80211 stack. - - When building one of the individual drivers, the rt2x00 library - will also be created. That library (when the driver is built as - a module) will be called "rt2x00lib.ko". - -config RT2X00_LIB - tristate - depends on RT2X00 - -config RT2X00_LIB_PCI - tristate - depends on RT2X00 - select RT2X00_LIB - -config RT2X00_LIB_USB - tristate - depends on RT2X00 - select RT2X00_LIB - -config RT2X00_LIB_FIRMWARE - boolean - depends on RT2X00_LIB - select CRC_ITU_T - select FW_LOADER - -config RT2X00_LIB_RFKILL - boolean - depends on RT2X00_LIB - select RFKILL - select INPUT_POLLDEV - -config RT2400PCI - tristate "Ralink rt2400 pci/pcmcia support" - depends on RT2X00 && PCI - select RT2X00_LIB_PCI - select EEPROM_93CX6 - ---help--- - This is an experimental driver for the Ralink rt2400 wireless chip. - - When compiled as a module, this driver will be called "rt2400pci.ko". - -config RT2400PCI_RFKILL - bool "RT2400 rfkill support" - depends on RT2400PCI - select RT2X00_LIB_RFKILL - ---help--- - This adds support for integrated rt2400 devices that feature a - hardware button to control the radio state. - This feature depends on the RF switch subsystem rfkill. - -config RT2500PCI - tristate "Ralink rt2500 pci/pcmcia support" - depends on RT2X00 && PCI - select RT2X00_LIB_PCI - select EEPROM_93CX6 - ---help--- - This is an experimental driver for the Ralink rt2500 wireless chip. - - When compiled as a module, this driver will be called "rt2500pci.ko". - -config RT2500PCI_RFKILL - bool "RT2500 rfkill support" - depends on RT2500PCI - select RT2X00_LIB_RFKILL - ---help--- - This adds support for integrated rt2500 devices that feature a - hardware button to control the radio state. - This feature depends on the RF switch subsystem rfkill. - -config RT61PCI - tristate "Ralink rt61 pci/pcmcia support" - depends on RT2X00 && PCI - select RT2X00_LIB_PCI - select RT2X00_LIB_FIRMWARE - select EEPROM_93CX6 - ---help--- - This is an experimental driver for the Ralink rt61 wireless chip. - - When compiled as a module, this driver will be called "rt61pci.ko". - -config RT61PCI_RFKILL - bool "RT61 rfkill support" - depends on RT61PCI - select RT2X00_LIB_RFKILL - ---help--- - This adds support for integrated rt61 devices that feature a - hardware button to control the radio state. - This feature depends on the RF switch subsystem rfkill. - -config RT2500USB - tristate "Ralink rt2500 usb support" - depends on RT2X00 && USB - select RT2X00_LIB_USB - ---help--- - This is an experimental driver for the Ralink rt2500 wireless chip. - - When compiled as a module, this driver will be called "rt2500usb.ko". - -config RT73USB - tristate "Ralink rt73 usb support" - depends on RT2X00 && USB - select RT2X00_LIB_USB - select RT2X00_LIB_FIRMWARE - ---help--- - This is an experimental driver for the Ralink rt73 wireless chip. - - When compiled as a module, this driver will be called "rt73usb.ko". - -config RT2X00_LIB_DEBUGFS - bool "Ralink debugfs support" - depends on RT2X00_LIB && MAC80211_DEBUGFS - ---help--- - Enable creation of debugfs files for the rt2x00 drivers. - These debugfs files support both reading and writing of the - most important register types of the rt2x00 devices. - -config RT2X00_DEBUG - bool "Ralink debug output" - depends on RT2X00_LIB - ---help--- - Enable debugging output for all rt2x00 modules - config IWLWIFI bool "Intel Wireless WiFi Link Drivers" depends on PCI && MAC80211 && WLAN_80211 && EXPERIMENTAL
@@ -853,5 +723,6 @@ source "drivers/net/wireless/bcm43xx/Kconfig" source "drivers/net/wireless/b43/Kconfig" source "drivers/net/wireless/zd1211rw/Kconfig" source "drivers/net/wireless/zd1211rw-mac80211/Kconfig" +source "drivers/net/wireless/rt2x00/Kconfig" endmenu
drivers/net/wireless/Makefile +1 -22
@@ -56,28 +56,7 @@ obj-$(CONFIG_P54_COMMON) += p54common.o obj-$(CONFIG_P54_USB) += p54usb.o obj-$(CONFIG_P54_PCI) += p54pci.o -rt2x00lib-objs := rt2x00dev.o rt2x00mac.o rt2x00config.o - -ifeq ($(CONFIG_RT2X00_LIB_DEBUGFS),y) - rt2x00lib-objs += rt2x00debug.o -endif - -ifeq ($(CONFIG_RT2X00_LIB_RFKILL),y) - rt2x00lib-objs += rt2x00rfkill.o -endif - -ifeq ($(CONFIG_RT2X00_LIB_FIRMWARE),y) - rt2x00lib-objs += rt2x00firmware.o -endif - -obj-$(CONFIG_RT2X00_LIB) += rt2x00lib.o -obj-$(CONFIG_RT2X00_LIB_PCI) += rt2x00pci.o -obj-$(CONFIG_RT2X00_LIB_USB) += rt2x00usb.o -obj-$(CONFIG_RT2400PCI) += rt2400pci.o -obj-$(CONFIG_RT2500PCI) += rt2500pci.o -obj-$(CONFIG_RT61PCI) += rt61pci.o -obj-$(CONFIG_RT2500USB) += rt2500usb.o -obj-$(CONFIG_RT73USB) += rt73usb.o +obj-$(CONFIG_RT2X00) += rt2x00/ # NOTE: We use common code from iwl-base.c to build driver # specific binaries based on the #define IWL -- the target
drivers/net/wireless/rt2x00/Kconfig new file +130 -0
130 lines not on this page · raw message
drivers/net/wireless/rt2x00/Makefile new file +22 -0
@@ -0,0 +1,22 @@ +rt2x00lib-objs := rt2x00dev.o rt2x00mac.o rt2x00config.o + +ifeq ($(CONFIG_RT2X00_LIB_DEBUGFS),y) + rt2x00lib-objs += rt2x00debug.o +endif + +ifeq ($(CONFIG_RT2X00_LIB_RFKILL),y) + rt2x00lib-objs += rt2x00rfkill.o +endif + +ifeq ($(CONFIG_RT2X00_LIB_FIRMWARE),y) + rt2x00lib-objs += rt2x00firmware.o +endif + +obj-$(CONFIG_RT2X00_LIB) += rt2x00lib.o +obj-$(CONFIG_RT2X00_LIB_PCI) += rt2x00pci.o +obj-$(CONFIG_RT2X00_LIB_USB) += rt2x00usb.o +obj-$(CONFIG_RT2400PCI) += rt2400pci.o +obj-$(CONFIG_RT2500PCI) += rt2500pci.o +obj-$(CONFIG_RT61PCI) += rt61pci.o +obj-$(CONFIG_RT2500USB) += rt2500usb.o +obj-$(CONFIG_RT73USB) += rt73usb.o
PATCH 24/30 rt2x00: Add file pattern to MAINTAINER entry
In reply to Ivo van DoornQuoted 1 line
From
316723f1a0e726defbc2403647a9f81e383c45bbMon Sep 17 00:00:00 2001
From: Ivo van Doorn <[email protected]>
Date: Sat, 18 Aug 2007 14:04:26 +0200
Subject: [PATCH 24/30] rt2x00: Add file pattern to MAINTAINER entry
Add file pattern to MAINTAINER entry
--- MAINTAINERS | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
MAINTAINERS +1 -0
@@ -3135,6 +3135,7 @@ L: [email protected] L: [email protected] W: http://rt2x00.serialmonkey.com/ S: Maintained +F: drivers/net/wireless/rt2x00/ RANDOM NUMBER DRIVER P: Matt Mackall
Signature · 1 line
1.5.3.rc5
PATCH 25/30 rt2x00: Fix PLCP setup
In reply to Ivo van DoornQuoted 1 line
From
b545a9a3b8ff04a2c6f62923cf01043aeb9ec599Mon Sep 17 00:00:00 2001
From: Ivo van Doorn <[email protected]>
Date: Sat, 18 Aug 2007 16:09:25 +0200
Subject: [PATCH 25/30] rt2x00: Fix PLCP setup
The Length extension bit should only be set when using the 11Mbs rate and when the residual is <= 3. (value comes from zd1211rw, ralink legacy driver was unclear)
--- drivers/net/wireless/rt2x00/rt2x00dev.c | 36 +++++++++++++++++------------- 1 files changed, 20 insertions(+), 16 deletions(-)
drivers/net/wireless/rt2x00/rt2x00dev.c +20 -16
@@ -480,14 +480,15 @@ void rt2x00lib_write_tx_desc(struct rt2x00_dev *rt2x00dev, desc.ifs =IFS_BACKOFF ;/* -* How the length should be processed depends -* on if we are working with OFDM rates or not. +* PLCP setup +* Length calculation depends on OFDM/CCK rate. */ + desc.signal =DEVICE_GET_RATE_FIELD (tx_rate,PLCP ); + desc.service =0x04 ; +if (test_bit (ENTRY_TXD_OFDM_RATE , &entry->flags)) { - residual =0 ; desc.length_high = ((length +FCS_LEN ) >>6 ) &0x3f ; desc.length_low = ((length +FCS_LEN ) &0x3f ); - }else { bitrate =DEVICE_GET_RATE_FIELD (tx_rate,RATE );
@@ -497,23 +498,26 @@ void rt2x00lib_write_tx_desc(struct rt2x00_dev *rt2x00dev, residual =get_duration_res (length +FCS_LEN , bitrate); duration =get_duration (length +FCS_LEN , bitrate); -if (residual !=0 ) +if (residual !=0 ) { duration++; +/* +* Check if we need to set the Length Extension +*/ +if (bitrate ==110 && residual <=3 ) + desc.service |=0x80 ; + } + desc.length_high = (duration >>8 ) &0xff ; desc.length_low = duration &0xff ; - } -/* -* Create the signal and service values. -*/ - desc.signal =DEVICE_GET_RATE_FIELD (tx_rate,PLCP ); -if (DEVICE_GET_RATE_FIELD (tx_rate,PREAMBLE )) - desc.signal |=0x08 ; - - desc.service =0x04 ; -if (residual <= (8 %11 )) - desc.service |=0x80 ; +/* +* When preamble is enabled we should set the +* preamble bit for the signal. +*/ +if (DEVICE_GET_RATE_FIELD (tx_rate,PREAMBLE )) + desc.signal |=0x08 ; + } rt2x00dev->ops->lib->write_tx_desc (rt2x00dev, entry, txd, &desc, ieee80211hdr, length, control);
Signature · 1 line
1.5.3.rc5
PATCH 26/30 rt2x00: Clean up RATEMASK handling
In reply to Ivo van DoornQuoted 1 line
From
295b7e7bc2a2081714a071c3946f1c0262b6e503Mon Sep 17 00:00:00 2001
From: Ivo van Doorn <[email protected]>
Date: Sat, 18 Aug 2007 16:31:38 +0200
Subject: [PATCH 26/30] rt2x00: Clean up RATEMASK handling
Rate handling needs some cleaning up to clear up the meaning of the variables.
- Rename DEV_RATE_* to DEV_RATEBIT_*
- Add DEV_RATEMASK_* to remove "magical values" passed to rt2x00lib_rate
- CCK_RATEMASK is alias for DEV_RATEMASK_11MB
- OFDM_RATEMASK is alias for DEV_RATE_MASK_54MB - CCK_RATEMASK
--- drivers/net/wireless/rt2x00/rt2400pci.c | 2 +- drivers/net/wireless/rt2x00/rt2500pci.c | 2 +- drivers/net/wireless/rt2x00/rt2500usb.c | 2 +- drivers/net/wireless/rt2x00/rt2x00dev.c | 44 ++++++++++++++---------- drivers/net/wireless/rt2x00/rt2x00reg.h | 56 +++++++++++++++++++------------ drivers/net/wireless/rt2x00/rt61pci.c | 2 +- drivers/net/wireless/rt2x00/rt73usb.c | 2 +- 7 files changed, 64 insertions(+), 46 deletions(-)
drivers/net/wireless/rt2x00/rt2400pci.c +1 -1
@@ -366,7 +366,7 @@ static void rt2400pci_config_rate(struct rt2x00_dev *rt2x00dev, const int rate)else preamble =PREAMBLE ; - reg =DEVICE_GET_RATE_FIELD (rate,RATEMASK ) &DEV_BASIC_RATE ; + reg =DEVICE_GET_RATE_FIELD (rate,RATEMASK ) &DEV_BASIC_RATEMASK ;rt2x00pci_register_write (rt2x00dev,ARCSR1 , reg);rt2x00pci_register_read (rt2x00dev,TXCSR1 , ®);
drivers/net/wireless/rt2x00/rt2500pci.c +1 -1
@@ -374,7 +374,7 @@ static void rt2500pci_config_rate(struct rt2x00_dev *rt2x00dev, const int rate)else preamble =PREAMBLE ; - reg =DEVICE_GET_RATE_FIELD (rate,RATEMASK ) &DEV_BASIC_RATE ; + reg =DEVICE_GET_RATE_FIELD (rate,RATEMASK ) &DEV_BASIC_RATEMASK ;rt2x00pci_register_write (rt2x00dev,ARCSR1 , reg);rt2x00pci_register_read (rt2x00dev,TXCSR1 , ®);
drivers/net/wireless/rt2x00/rt2500usb.c +1 -1
@@ -383,7 +383,7 @@ static void rt2500usb_config_rate(struct rt2x00_dev *rt2x00dev, const int rate)else preamble =PREAMBLE ; - reg =DEVICE_GET_RATE_FIELD (rate,RATEMASK ) &DEV_BASIC_RATE ; + reg =DEVICE_GET_RATE_FIELD (rate,RATEMASK ) &DEV_BASIC_RATEMASK ;rt2500usb_register_write (rt2x00dev,TXRX_CSR11 , reg);
drivers/net/wireless/rt2x00/rt2x00dev.c +25 -19
58 lines not on this page · raw message
drivers/net/wireless/rt2x00/rt2x00reg.h +34 -22
68 lines not on this page · raw message
drivers/net/wireless/rt2x00/rt61pci.c +1 -1
@@ -404,7 +404,7 @@ static void rt61pci_config_rate(struct rt2x00_dev *rt2x00dev, const int rate)* We need to set TXRX_CSR5 to the basic rate mask so we need to mask * off the non-basic rates. */ - reg =DEVICE_GET_RATE_FIELD (rate,RATEMASK ) &DEV_BASIC_RATE ; + reg =DEVICE_GET_RATE_FIELD (rate,RATEMASK ) &DEV_BASIC_RATEMASK ;rt2x00pci_register_write (rt2x00dev,TXRX_CSR5 , reg);
drivers/net/wireless/rt2x00/rt73usb.c +1 -1
@@ -380,7 +380,7 @@ static void rt73usb_config_rate(struct rt2x00_dev *rt2x00dev, const int rate)else preamble =PREAMBLE ; - reg =DEVICE_GET_RATE_FIELD (rate,RATEMASK ) &DEV_BASIC_RATE ; + reg =DEVICE_GET_RATE_FIELD (rate,RATEMASK ) &DEV_BASIC_RATEMASK ;rt73usb_register_write (rt2x00dev,TXRX_CSR5 , reg);
Signature · 1 line
1.5.3.rc5
PATCH 27/30 rt2x00: Add rt2x00lib_reset_link_tuner()
In reply to Ivo van DoornQuoted 1 line
From
d6188297893be7023e0cec4b0132e64ec96de884Mon Sep 17 00:00:00 2001
From: Ivo van Doorn <[email protected]>
Date: Sat, 18 Aug 2007 16:41:58 +0200
Subject: [PATCH 27/30] rt2x00: Add rt2x00lib_reset_link_tuner()
When rt2x00config needs the link tuner to be reset, this means that also all statistics need to be reset _and_ that the link tuner timer is being reset. In short: when resetting the link tuner, the link tuner should be stopped and restarted.
--- drivers/net/wireless/rt2x00/rt2x00config.c | 2 +- drivers/net/wireless/rt2x00/rt2x00dev.c | 14 ++++++++++---- drivers/net/wireless/rt2x00/rt2x00lib.h | 1 + 3 files changed, 12 insertions(+), 5 deletions(-)
drivers/net/wireless/rt2x00/rt2x00config.c +1 -1
@@ -155,7 +155,7 @@ config:* which means we need to reset the link tuner. */ if (flags & (CONFIG_UPDATE_CHANNEL |CONFIG_UPDATE_ANTENNA )) - rt2x00dev->ops->lib->reset_tuner (rt2x00dev); +rt2x00lib_reset_link_tuner (rt2x00dev); rt2x00dev->rx_status.phymode = conf->phymode; rt2x00dev->rx_status.freq = conf->freq;
drivers/net/wireless/rt2x00/rt2x00dev.c +10 -4
@@ -67,7 +67,7 @@ EXPORT_SYMBOL_GPL(rt2x00lib_get_ring);/* * Link tuning handlers */ -static void rt2x00_start_link_tune (struct rt2x00_dev *rt2x00dev) +static void rt2x00lib_start_link_tuner (struct rt2x00_dev *rt2x00dev) { rt2x00dev->link.count =0 ; rt2x00dev->link.avg_rssi =0 ;
@@ -87,12 +87,18 @@ static void rt2x00_start_link_tune(struct rt2x00_dev *rt2x00dev) &rt2x00dev->link.work, LINK_TUNE_INTERVAL); } -static void rt2x00_stop_link_tune (struct rt2x00_dev *rt2x00dev) +static void rt2x00lib_stop_link_tuner (struct rt2x00_dev *rt2x00dev) {if (delayed_work_pending (&rt2x00dev->link.work))cancel_rearming_delayed_work (&rt2x00dev->link.work); } +void rt2x00lib_reset_link_tuner (struct rt2x00_dev *rt2x00dev) +{ +rt2x00lib_stop_link_tuner (rt2x00dev); +rt2x00lib_start_link_tuner (rt2x00dev); +} +/* * Radio control handlers. */
@@ -167,7 +173,7 @@ void rt2x00lib_toggle_rx(struct rt2x00_dev *rt2x00dev, int enable)* When we are disabling the RX, we should also stop the link tuner. */ if (!enable) -rt2x00_stop_link_tune (rt2x00dev); +rt2x00lib_stop_link_tuner (rt2x00dev); rt2x00dev->ops->lib->set_device_state (rt2x00dev, state);
@@ -175,7 +181,7 @@ void rt2x00lib_toggle_rx(struct rt2x00_dev *rt2x00dev, int enable)* When we are enabling the RX, we should also start the link tuner. */ if (enable &&is_interface_present (&rt2x00dev->interface)) -rt2x00_start_link_tune (rt2x00dev); +rt2x00lib_start_link_tuner (rt2x00dev); }static int rt2x00lib_calculate_link_signal (struct rt2x00_dev *rt2x00dev)
drivers/net/wireless/rt2x00/rt2x00lib.h +1 -0
@@ -38,6 +38,7 @@int rt2x00lib_enable_radio (struct rt2x00_dev *rt2x00dev);void rt2x00lib_disable_radio (struct rt2x00_dev *rt2x00dev);void rt2x00lib_toggle_rx (struct rt2x00_dev *rt2x00dev,int enable); +void rt2x00lib_reset_link_tuner (struct rt2x00_dev *rt2x00dev);/* * Initialization handlers.
Signature · 1 line
1.5.3.rc5
PATCH 28/30 rt2x00: Always check if mac80211 requested TX status update
In reply to Ivo van DoornQuoted 1 line
From
cbf01c4f3f1810f0ba98238aa7900a523a044e66Mon Sep 17 00:00:00 2001
From: Ivo van Doorn <[email protected]>
Date: Sat, 18 Aug 2007 17:43:23 +0200
Subject: [PATCH 28/30] rt2x00: Always check if mac80211 requested TX status update
During txdone always check for the IEEE80211_TXCTL_REQ_TX_STATUS flag to determine if ieee80211_tx_status_irqsafe should be called or not. When the flag is not set, just cleanup the skb and don't bother mac80211 with it.
--- drivers/net/wireless/rt2x00/rt2x00dev.c | 10 +++++++--- 1 files changed, 7 insertions(+), 3 deletions(-)
drivers/net/wireless/rt2x00/rt2x00dev.c +7 -3
@@ -333,10 +333,14 @@ void rt2x00lib_txdone(struct data_entry *entry, }/* -* Send the tx_status to mac80211, -* that method also cleans up the skb structure. +* Check if mac80211 wants to be updated or not, +* if it wants the update it will cleanup the skb structure, +* else then we should cleanup the skb structure. */ -ieee80211_tx_status_irqsafe (rt2x00dev->hw, entry->skb, tx_status); +if (tx_status->control.flags &IEEE80211_TXCTL_REQ_TX_STATUS ) +ieee80211_tx_status_irqsafe (rt2x00dev->hw, entry->skb, tx_status); +else +dev_kfree_skb_any (entry->skb); entry->skb =NULL ; }
Signature · 1 line
1.5.3.rc5
Johannes Berg
maintainerRe: [PATCH 28/30] rt2x00: Always check if mac80211 requested TX status update
Quoted 4 lines · Ivo van Doorn
During txdone always check for the
IEEE80211_TXCTL_REQ_TX_STATUSflag to determine ifieee80211_tx_status_irqsafeshould be called or not. When the flag is not set, just cleanup the skb and don't bother mac80211 with it.
Never mind that I'd love to remove the REQ_TX_STATUS flag, this is not really the best thing to do since rate control will basically ignore this frame if you don't hand it back to mac80211.
johannes
Re: [PATCH 28/30] rt2x00: Always check if mac80211 requested TX status update
Quoted 10 lines · Johannes Berg
Quoted 4 lines · Ivo van Doorn
During txdone always check for the
IEEE80211_TXCTL_REQ_TX_STATUSflag to determine ifieee80211_tx_status_irqsafeshould be called or not. When the flag is not set, just cleanup the skb and don't bother mac80211 with it.Never mind that I'd love to remove the
REQ_TX_STATUSflag, this is not really the best thing to do since rate control will basically ignore this frame if you don't hand it back to mac80211.
Ok, I'll revert that check for rt2x00 2.0.8
Thanks,
Ivo
PATCH 29/30 rt2x00: Lindent
In reply to Ivo van DoornQuoted 1 line
From
f88ee9f3e67bd509f14e07f0dfcfe32649694e10Mon Sep 17 00:00:00 2001
From: Ivo van Doorn <[email protected]>
Date: Sat, 18 Aug 2007 18:24:23 +0200
Subject: [PATCH 29/30] rt2x00: Lindent
Lindent still caught a few lines exceeding the 80 character limit, a few reduntant spaces, and some other minor things.
--- drivers/net/wireless/rt2x00/rt2400pci.c | 7 ++++--- drivers/net/wireless/rt2x00/rt2500pci.c | 10 +++++----- drivers/net/wireless/rt2x00/rt2500usb.c | 7 +++---- drivers/net/wireless/rt2x00/rt2x00.h | 12 ++++++------ drivers/net/wireless/rt2x00/rt2x00debug.c | 19 +++++++++++-------- drivers/net/wireless/rt2x00/rt2x00dev.c | 14 +++++++------- drivers/net/wireless/rt2x00/rt2x00mac.c | 3 ++- drivers/net/wireless/rt2x00/rt2x00usb.c | 2 +- drivers/net/wireless/rt2x00/rt61pci.c | 6 +++--- drivers/net/wireless/rt2x00/rt73usb.c | 8 ++++---- 10 files changed, 46 insertions(+), 42 deletions(-)
drivers/net/wireless/rt2x00/rt2400pci.c +4 -3
@@ -1154,7 +1154,8 @@ static void rt2400pci_write_tx_desc(struct rt2x00_dev *rt2x00dev, test_bit(ENTRY_TXD_RTS_FRAME, &entry->flags));rt2x00_set_field32 (&word,TXD_W0_IFS , desc->ifs);rt2x00_set_field32 (&word,TXD_W0_RETRY_MODE , - !!(control->flags &IEEE80211_TXCTL_LONG_RETRY_LIMIT )); + !!(control->flags & +IEEE80211_TXCTL_LONG_RETRY_LIMIT ));rt2x00_desc_write (txd,0 , word); }
@@ -1398,8 +1399,8 @@ static int rt2400pci_init_eeprom(struct rt2x00_dev *rt2x00dev)/* * Store led mode, for correct led behaviour. */ - rt2x00dev->led_mode =rt2x00_get_field16 (eeprom, -EEPROM_ANTENNA_LED_MODE ); + rt2x00dev->led_mode = +rt2x00_get_field16 (eeprom,EEPROM_ANTENNA_LED_MODE );/* * Detect if this device has an hardware controlled radio.
drivers/net/wireless/rt2x00/rt2500pci.c +5 -5
@@ -625,8 +625,7 @@ static void rt2500pci_config(struct rt2x00_dev *rt2x00dev,if (flags &CONFIG_UPDATE_CHANNEL )rt2500pci_config_channel (rt2x00dev, conf->channel_val, conf->channel, conf->power_level); -if (!(flags &CONFIG_UPDATE_CHANNEL ) && - flags &CONFIG_UPDATE_TXPOWER ) +if ((flags &CONFIG_UPDATE_TXPOWER ) && !(flags &CONFIG_UPDATE_CHANNEL ))rt2500pci_config_txpower (rt2x00dev, conf->power_level);if (flags &CONFIG_UPDATE_ANTENNA ) rt2500pci_config_antenna(rt2x00dev, conf->antenna_sel_tx,
@@ -1282,7 +1281,8 @@ static void rt2500pci_write_tx_desc(struct rt2x00_dev *rt2x00dev,rt2x00_set_field32 (&word,TXD_W0_CIPHER_OWNER ,1 );rt2x00_set_field32 (&word,TXD_W0_IFS , desc->ifs);rt2x00_set_field32 (&word,TXD_W0_RETRY_MODE , - !!(control->flags &IEEE80211_TXCTL_LONG_RETRY_LIMIT )); + !!(control->flags & +IEEE80211_TXCTL_LONG_RETRY_LIMIT ));rt2x00_set_field32 (&word,TXD_W0_DATABYTE_COUNT , length);rt2x00_set_field32 (&word,TXD_W0_CIPHER_ALG ,CIPHER_NONE );rt2x00_desc_write (txd,0 , word);
@@ -1554,8 +1554,8 @@ static int rt2500pci_init_eeprom(struct rt2x00_dev *rt2x00dev)/* * Store led mode, for correct led behaviour. */ - rt2x00dev->led_mode =rt2x00_get_field16 (eeprom, -EEPROM_ANTENNA_LED_MODE ); + rt2x00dev->led_mode = +rt2x00_get_field16 (eeprom,EEPROM_ANTENNA_LED_MODE );/* * Detect if this device has an hardware controlled radio.
drivers/net/wireless/rt2x00/rt2500usb.c +3 -4
@@ -568,8 +568,7 @@ static void rt2500usb_config(struct rt2x00_dev *rt2x00dev,if (flags &CONFIG_UPDATE_CHANNEL )rt2500usb_config_channel (rt2x00dev, conf->channel_val, conf->channel, conf->power_level); -if (!(flags &CONFIG_UPDATE_CHANNEL ) && - flags &CONFIG_UPDATE_TXPOWER ) +if ((flags &CONFIG_UPDATE_TXPOWER ) && !(flags &CONFIG_UPDATE_CHANNEL ))rt2500usb_config_txpower (rt2x00dev, conf->power_level);if (flags &CONFIG_UPDATE_ANTENNA ) rt2500usb_config_antenna(rt2x00dev, conf->antenna_sel_tx,
@@ -1281,8 +1280,8 @@ static int rt2500usb_init_eeprom(struct rt2x00_dev *rt2x00dev)/* * Store led mode, for correct led behaviour. */ - rt2x00dev->led_mode =rt2x00_get_field16 (eeprom, -EEPROM_ANTENNA_LED_MODE ); + rt2x00dev->led_mode = +rt2x00_get_field16 (eeprom,EEPROM_ANTENNA_LED_MODE );/* * Check if the BBP tuning should be disabled.
drivers/net/wireless/rt2x00/rt2x00.h +6 -6
@@ -133,20 +133,20 @@*/ static inline int is_rts_frame (u16 fc) { -return !!(((fc &IEEE80211_FCTL_FTYPE ) ==IEEE80211_FTYPE_CTL ) && - ((fc &IEEE80211_FCTL_STYPE ) ==IEEE80211_STYPE_RTS )); +return !!(((fc &IEEE80211_FCTL_FTYPE ) ==IEEE80211_FTYPE_CTL ) && + ((fc &IEEE80211_FCTL_STYPE ) ==IEEE80211_STYPE_RTS )); }static inline int is_cts_frame (u16 fc) { -return !!(((fc &IEEE80211_FCTL_FTYPE ) ==IEEE80211_FTYPE_CTL ) && - ((fc &IEEE80211_FCTL_STYPE ) ==IEEE80211_STYPE_CTS )); +return !!(((fc &IEEE80211_FCTL_FTYPE ) ==IEEE80211_FTYPE_CTL ) && + ((fc &IEEE80211_FCTL_STYPE ) ==IEEE80211_STYPE_CTS )); }static inline int is_probe_resp (u16 fc) { -return !!(((fc &IEEE80211_FCTL_FTYPE ) ==IEEE80211_FTYPE_MGMT ) && - ((fc &IEEE80211_FCTL_STYPE ) ==IEEE80211_STYPE_PROBE_RESP )); +return !!(((fc &IEEE80211_FCTL_FTYPE ) ==IEEE80211_FTYPE_MGMT ) && + ((fc &IEEE80211_FCTL_STYPE ) ==IEEE80211_STYPE_PROBE_RESP )); }/*
drivers/net/wireless/rt2x00/rt2x00debug.c +11 -8
@@ -193,10 +193,11 @@ RT2X00DEBUGFS_OPS(eeprom, "0x%.4x\n", u16);RT2X00DEBUGFS_OPS (bbp,"0x%.2x\n" , u8);RT2X00DEBUGFS_OPS (rf,"0x%.8x\n" , u32); -static struct dentry * -rt2x00debug_create_file_driver (const char *name, -struct rt2x00debug_intf *intf, -struct debugfs_blob_wrapper *blob) +static struct dentry *rt2x00debug_create_file_driver (const char *name, +struct rt2x00debug_intf + *intf, +struct debugfs_blob_wrapper + *blob) {char *data;
@@ -213,10 +214,12 @@ rt2x00debug_create_file_driver(const char *name,return debugfs_create_blob (name,S_IRUGO , intf->driver_folder, blob); } -static struct dentry * -rt2x00debug_create_file_chipset (const char *name, -struct rt2x00debug_intf *intf, -struct debugfs_blob_wrapper *blob) +static struct dentry *rt2x00debug_create_file_chipset (const char *name, +struct rt2x00debug_intf + *intf, +struct +debugfs_blob_wrapper + *blob) {const struct rt2x00debug *debug = intf->debug;char *data;
drivers/net/wireless/rt2x00/rt2x00dev.c +7 -7
@@ -222,7 +222,7 @@ static int rt2x00lib_calculate_link_signal(struct rt2x00_dev *rt2x00dev) (WEIGHT_TX * tx_percentage) + (WEIGHT_RX * rx_percentage)) / 100; -return (signal >100 ) ?100 : signal; +return (signal >100 ) ?100 : signal; }static void rt2x00lib_link_tuner (struct work_struct *work)
@@ -338,7 +338,8 @@ void rt2x00lib_txdone(struct data_entry *entry,* else then we should cleanup the skb structure. */ if (tx_status->control.flags &IEEE80211_TXCTL_REQ_TX_STATUS ) -ieee80211_tx_status_irqsafe (rt2x00dev->hw, entry->skb, tx_status); +ieee80211_tx_status_irqsafe (rt2x00dev->hw, entry->skb, + tx_status);else dev_kfree_skb_any (entry->skb);
@@ -561,9 +562,9 @@ static void rt2x00lib_rate(struct ieee80211_rate *entry, { entry->rate = rate; entry->val = -DEVICE_SET_RATE_FIELD (rate,RATE ) | -DEVICE_SET_RATE_FIELD (mask,RATEMASK ) | -DEVICE_SET_RATE_FIELD (plcp,PLCP ); +DEVICE_SET_RATE_FIELD (rate,RATE ) | +DEVICE_SET_RATE_FIELD (mask,RATEMASK ) | +DEVICE_SET_RATE_FIELD (plcp,PLCP ); entry->flags = flags; entry->val2 = entry->val;if (entry->flags &IEEE80211_RATE_PREAMBLE2 )
@@ -637,8 +638,7 @@ static int rt2x00lib_probe_hw_modes(struct rt2x00_dev *rt2x00dev, tx_power = spec->tx_power_default;rt2x00lib_channel (&channels[i], - spec->channels[i].channel, - tx_power, i); + spec->channels[i].channel, tx_power, i); }/*
drivers/net/wireless/rt2x00/rt2x00mac.c +2 -1
@@ -35,7 +35,8 @@#include "rt2x00lib.h" static int rt2x00mac_tx_rts_cts (struct rt2x00_dev *rt2x00dev, -struct data_ring *ring,struct sk_buff *frag_skb, +struct data_ring *ring, +struct sk_buff *frag_skb,struct ieee80211_tx_control *control) {struct sk_buff *skb;
drivers/net/wireless/rt2x00/rt2x00usb.c +1 -1
@@ -50,7 +50,7 @@ int rt2x00usb_vendor_request(const struct rt2x00_dev *rt2x00dev,unsigned int i;unsigned int pipe = (requesttype ==USB_VENDOR_REQUEST_IN ) ? -usb_rcvctrlpipe (usb_dev,0 ) :usb_sndctrlpipe (usb_dev,0 ); +usb_rcvctrlpipe (usb_dev,0 ) :usb_sndctrlpipe (usb_dev,0 );for (i =0 ; i <REGISTER_BUSY_COUNT ; i++) { status = usb_control_msg(usb_dev, pipe, request, requesttype,
drivers/net/wireless/rt2x00/rt61pci.c +3 -3
@@ -688,8 +688,7 @@ static void rt61pci_config(struct rt2x00_dev *rt2x00dev,if (flags &CONFIG_UPDATE_CHANNEL )rt61pci_config_channel (rt2x00dev, conf->channel_val, conf->channel, conf->power_level); -if (!(flags &CONFIG_UPDATE_CHANNEL ) && - flags &CONFIG_UPDATE_TXPOWER ) +if ((flags &CONFIG_UPDATE_TXPOWER ) && !(flags &CONFIG_UPDATE_CHANNEL ))rt61pci_config_txpower (rt2x00dev, conf->power_level);if (flags &CONFIG_UPDATE_ANTENNA ) rt61pci_config_antenna(rt2x00dev, conf->antenna_sel_tx,
@@ -1532,7 +1531,8 @@ static void rt61pci_write_tx_desc(struct rt2x00_dev *rt2x00dev, test_bit(ENTRY_TXD_OFDM_RATE, &entry->flags));rt2x00_set_field32 (&word,TXD_W0_IFS , desc->ifs);rt2x00_set_field32 (&word,TXD_W0_RETRY_MODE , - !!(control->flags &IEEE80211_TXCTL_LONG_RETRY_LIMIT )); + !!(control->flags & +IEEE80211_TXCTL_LONG_RETRY_LIMIT ));rt2x00_set_field32 (&word,TXD_W0_TKIP_MIC ,0 );rt2x00_set_field32 (&word,TXD_W0_DATABYTE_COUNT , length); rt2x00_set_field32(&word, TXD_W0_BURST,
drivers/net/wireless/rt2x00/rt73usb.c +4 -4
@@ -659,8 +659,7 @@ static void rt73usb_config(struct rt2x00_dev *rt2x00dev,if (flags &CONFIG_UPDATE_CHANNEL )rt73usb_config_channel (rt2x00dev, conf->channel_val, conf->channel, conf->power_level); -if (!(flags &CONFIG_UPDATE_CHANNEL ) && - flags &CONFIG_UPDATE_TXPOWER ) +if ((flags &CONFIG_UPDATE_TXPOWER ) && !(flags &CONFIG_UPDATE_CHANNEL ))rt73usb_config_txpower (rt2x00dev, conf->power_level);if (flags &CONFIG_UPDATE_ANTENNA ) rt73usb_config_antenna(rt2x00dev, conf->antenna_sel_tx,
@@ -925,7 +924,7 @@ static int rt73usb_load_firmware(struct rt2x00_dev *rt2x00dev, void *data, buflen =min_t (int, len - i,CSR_CACHE_SIZE_FIRMWARE ); timeout =REGISTER_TIMEOUT * (buflen /sizeof (u32)); -memcpy (cache, ptr ,buflen); +memcpy (cache, ptr, buflen); rt2x00usb_vendor_request(rt2x00dev, USB_MULTI_WRITE, USB_VENDOR_REQUEST_OUT,
@@ -1269,7 +1268,8 @@ static void rt73usb_write_tx_desc(struct rt2x00_dev *rt2x00dev, test_bit(ENTRY_TXD_OFDM_RATE, &entry->flags));rt2x00_set_field32 (&word,TXD_W0_IFS , desc->ifs);rt2x00_set_field32 (&word,TXD_W0_RETRY_MODE , - !!(control->flags &IEEE80211_TXCTL_LONG_RETRY_LIMIT )); + !!(control->flags & +IEEE80211_TXCTL_LONG_RETRY_LIMIT ));rt2x00_set_field32 (&word,TXD_W0_TKIP_MIC ,0 );rt2x00_set_field32 (&word,TXD_W0_DATABYTE_COUNT , length); rt2x00_set_field32(&word, TXD_W0_BURST2,
Signature · 1 line
1.5.3.rc5
PATCH 30/30 rt2x00: rt2x00 2.0.7
In reply to Ivo van DoornQuoted 1 line
From
7b429527e4460c4bc550ca71a47696d677b92e5fMon Sep 17 00:00:00 2001
From: Ivo van Doorn <[email protected]>
Date: Sun, 19 Aug 2007 20:13:11 +0200
Subject: [PATCH 30/30] rt2x00: rt2x00 2.0.7
Release rt2x00 2.0.7
--- drivers/net/wireless/rt2x00/rt2x00.h | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
drivers/net/wireless/rt2x00/rt2x00.h +1 -1
@@ -42,7 +42,7 @@* Module information. * DRV_NAME should be set within the individual module source files. */ -#define DRV_VERSION "2.0.6" +#define DRV_VERSION "2.0.7"#define DRV_PROJECT "http://rt2x00.serialmonkey.com"/*
Signature · 1 line
1.5.3.rc5
John W. Linville
AppliedQuoted 2 lines · Ivo van Doorn
Well finally rt2x00 2.0.7 is released, unfortunately it will not be the last release in the 2.0.* series as promised earlier.
Merged to wireless-dev...
Signature · 2 lines
John W. Linville [email protected]