* [PATCH 0/4] Final set of fixes and cleanups for 2.6.35.
@ 2010-05-13 19:16 Gertjan van Wingerde
2010-05-13 19:16 ` [PATCH 1/4] rt2x00: Fix failed SLEEP->AWAKE and AWAKE->SLEEP transitions Gertjan van Wingerde
` (3 more replies)
0 siblings, 4 replies; 10+ messages in thread
From: Gertjan van Wingerde @ 2010-05-13 19:16 UTC (permalink / raw)
To: John W. Linville
Cc: Ivo van Doorn, linux-wireless, users, Gertjan van Wingerde
These are the final set of fixes and cleanups for 2.6.35 from my side.
The first one is a powersave fixlet that was off my radar for a while but
got dusted off. One is a fix of a bug introduced in a previous patch series
and the final two are clean-ups that make it easier to use rt2x00usb
functionality.
This is on top of the last patch series I sent out.
These patches (and the ones of the previous series) can also be pulled from:
git://git.gwingerde.nl/rt2x00-next-2.6.git
Gertjan van Wingerde (4):
rt2x00: Fix failed SLEEP->AWAKE and AWAKE->SLEEP transitions.
rt2x00: Fix rt2800usb TX descriptor writing.
rt2x00: Clean up USB vendor request buffer functions.
rt2x00: Centralize rt2800 beacon writing.
drivers/net/wireless/rt2x00/rt2400pci.c | 9 ++--
drivers/net/wireless/rt2x00/rt2500pci.c | 9 ++--
drivers/net/wireless/rt2x00/rt2500usb.c | 14 +-----
drivers/net/wireless/rt2x00/rt2800lib.c | 61 +++++++++++++++++++++++++
drivers/net/wireless/rt2x00/rt2800lib.h | 2 +
drivers/net/wireless/rt2x00/rt2800pci.c | 63 +--------------------------
drivers/net/wireless/rt2x00/rt2800usb.c | 74 ++-----------------------------
drivers/net/wireless/rt2x00/rt2x00usb.c | 22 +---------
drivers/net/wireless/rt2x00/rt2x00usb.h | 19 --------
drivers/net/wireless/rt2x00/rt61pci.c | 7 ++-
drivers/net/wireless/rt2x00/rt73usb.c | 39 +++++------------
11 files changed, 96 insertions(+), 223 deletions(-)
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 1/4] rt2x00: Fix failed SLEEP->AWAKE and AWAKE->SLEEP transitions.
2010-05-13 19:16 [PATCH 0/4] Final set of fixes and cleanups for 2.6.35 Gertjan van Wingerde
@ 2010-05-13 19:16 ` Gertjan van Wingerde
2010-05-13 19:30 ` Ivo Van Doorn
2010-05-13 19:16 ` [PATCH 2/4] rt2x00: Fix rt2800usb TX descriptor writing Gertjan van Wingerde
` (2 subsequent siblings)
3 siblings, 1 reply; 10+ messages in thread
From: Gertjan van Wingerde @ 2010-05-13 19:16 UTC (permalink / raw)
To: John W. Linville
Cc: Ivo van Doorn, linux-wireless, users, Gertjan van Wingerde
(Based on a patch created by Ondrej Zary)
In some circumstances the Ralink devices do not properly go to sleep
or wake up, with timeouts occurring.
Fix this by retrying telling the device that it has to wake up or
sleep.
Signed-off-by: Gertjan van Wingerde <gwingerde@gmail.com>
---
drivers/net/wireless/rt2x00/rt2400pci.c | 9 +++++----
drivers/net/wireless/rt2x00/rt2500pci.c | 9 +++++----
drivers/net/wireless/rt2x00/rt61pci.c | 7 ++++---
drivers/net/wireless/rt2x00/rt73usb.c | 7 ++++---
4 files changed, 18 insertions(+), 14 deletions(-)
diff --git a/drivers/net/wireless/rt2x00/rt2400pci.c b/drivers/net/wireless/rt2x00/rt2400pci.c
index 641459b..7b36db2 100644
--- a/drivers/net/wireless/rt2x00/rt2400pci.c
+++ b/drivers/net/wireless/rt2x00/rt2400pci.c
@@ -925,7 +925,7 @@ static void rt2400pci_disable_radio(struct rt2x00_dev *rt2x00dev)
static int rt2400pci_set_state(struct rt2x00_dev *rt2x00dev,
enum dev_state state)
{
- u32 reg;
+ u32 reg, reg2;
unsigned int i;
char put_to_sleep;
char bbp_state;
@@ -946,11 +946,12 @@ static int rt2400pci_set_state(struct rt2x00_dev *rt2x00dev,
* device has entered the correct state.
*/
for (i = 0; i < REGISTER_BUSY_COUNT; i++) {
- rt2x00pci_register_read(rt2x00dev, PWRCSR1, ®);
- bbp_state = rt2x00_get_field32(reg, PWRCSR1_BBP_CURR_STATE);
- rf_state = rt2x00_get_field32(reg, PWRCSR1_RF_CURR_STATE);
+ rt2x00pci_register_read(rt2x00dev, PWRCSR1, ®2);
+ bbp_state = rt2x00_get_field32(reg2, PWRCSR1_BBP_CURR_STATE);
+ rf_state = rt2x00_get_field32(reg2, PWRCSR1_RF_CURR_STATE);
if (bbp_state == state && rf_state == state)
return 0;
+ rt2x00pci_register_write(rt2x00dev, PWRCSR1, reg);
msleep(10);
}
diff --git a/drivers/net/wireless/rt2x00/rt2500pci.c b/drivers/net/wireless/rt2x00/rt2500pci.c
index c8363bc..4a29ede 100644
--- a/drivers/net/wireless/rt2x00/rt2500pci.c
+++ b/drivers/net/wireless/rt2x00/rt2500pci.c
@@ -1083,7 +1083,7 @@ static void rt2500pci_disable_radio(struct rt2x00_dev *rt2x00dev)
static int rt2500pci_set_state(struct rt2x00_dev *rt2x00dev,
enum dev_state state)
{
- u32 reg;
+ u32 reg, reg2;
unsigned int i;
char put_to_sleep;
char bbp_state;
@@ -1104,11 +1104,12 @@ static int rt2500pci_set_state(struct rt2x00_dev *rt2x00dev,
* device has entered the correct state.
*/
for (i = 0; i < REGISTER_BUSY_COUNT; i++) {
- rt2x00pci_register_read(rt2x00dev, PWRCSR1, ®);
- bbp_state = rt2x00_get_field32(reg, PWRCSR1_BBP_CURR_STATE);
- rf_state = rt2x00_get_field32(reg, PWRCSR1_RF_CURR_STATE);
+ rt2x00pci_register_read(rt2x00dev, PWRCSR1, ®2);
+ bbp_state = rt2x00_get_field32(reg2, PWRCSR1_BBP_CURR_STATE);
+ rf_state = rt2x00_get_field32(reg2, PWRCSR1_RF_CURR_STATE);
if (bbp_state == state && rf_state == state)
return 0;
+ rt2x00pci_register_write(rt2x00dev, PWRCSR1, reg);
msleep(10);
}
diff --git a/drivers/net/wireless/rt2x00/rt61pci.c b/drivers/net/wireless/rt2x00/rt61pci.c
index 9ac2f5c..a03b6a2 100644
--- a/drivers/net/wireless/rt2x00/rt61pci.c
+++ b/drivers/net/wireless/rt2x00/rt61pci.c
@@ -1688,7 +1688,7 @@ static void rt61pci_disable_radio(struct rt2x00_dev *rt2x00dev)
static int rt61pci_set_state(struct rt2x00_dev *rt2x00dev, enum dev_state state)
{
- u32 reg;
+ u32 reg, reg2;
unsigned int i;
char put_to_sleep;
@@ -1705,10 +1705,11 @@ static int rt61pci_set_state(struct rt2x00_dev *rt2x00dev, enum dev_state state)
* device has entered the correct state.
*/
for (i = 0; i < REGISTER_BUSY_COUNT; i++) {
- rt2x00pci_register_read(rt2x00dev, MAC_CSR12, ®);
- state = rt2x00_get_field32(reg, MAC_CSR12_BBP_CURRENT_STATE);
+ rt2x00pci_register_read(rt2x00dev, MAC_CSR12, ®2);
+ state = rt2x00_get_field32(reg2, MAC_CSR12_BBP_CURRENT_STATE);
if (state == !put_to_sleep)
return 0;
+ rt2x00pci_register_write(rt2x00dev, MAC_CSR12, reg);
msleep(10);
}
diff --git a/drivers/net/wireless/rt2x00/rt73usb.c b/drivers/net/wireless/rt2x00/rt73usb.c
index a9738ee..dc4a028 100644
--- a/drivers/net/wireless/rt2x00/rt73usb.c
+++ b/drivers/net/wireless/rt2x00/rt73usb.c
@@ -1365,7 +1365,7 @@ static void rt73usb_disable_radio(struct rt2x00_dev *rt2x00dev)
static int rt73usb_set_state(struct rt2x00_dev *rt2x00dev, enum dev_state state)
{
- u32 reg;
+ u32 reg, reg2;
unsigned int i;
char put_to_sleep;
@@ -1382,10 +1382,11 @@ static int rt73usb_set_state(struct rt2x00_dev *rt2x00dev, enum dev_state state)
* device has entered the correct state.
*/
for (i = 0; i < REGISTER_BUSY_COUNT; i++) {
- rt2x00usb_register_read(rt2x00dev, MAC_CSR12, ®);
- state = rt2x00_get_field32(reg, MAC_CSR12_BBP_CURRENT_STATE);
+ rt2x00usb_register_read(rt2x00dev, MAC_CSR12, ®2);
+ state = rt2x00_get_field32(reg2, MAC_CSR12_BBP_CURRENT_STATE);
if (state == !put_to_sleep)
return 0;
+ rt2x00usb_register_write(rt2x00dev, MAC_CSR12, reg);
msleep(10);
}
--
1.7.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 2/4] rt2x00: Fix rt2800usb TX descriptor writing.
2010-05-13 19:16 [PATCH 0/4] Final set of fixes and cleanups for 2.6.35 Gertjan van Wingerde
2010-05-13 19:16 ` [PATCH 1/4] rt2x00: Fix failed SLEEP->AWAKE and AWAKE->SLEEP transitions Gertjan van Wingerde
@ 2010-05-13 19:16 ` Gertjan van Wingerde
2010-05-13 19:30 ` Ivo Van Doorn
2010-05-13 19:16 ` [PATCH 3/4] rt2x00: Clean up USB vendor request buffer functions Gertjan van Wingerde
2010-05-13 19:16 ` [PATCH 4/4] rt2x00: Centralize rt2800 beacon writing Gertjan van Wingerde
3 siblings, 1 reply; 10+ messages in thread
From: Gertjan van Wingerde @ 2010-05-13 19:16 UTC (permalink / raw)
To: John W. Linville
Cc: Ivo van Doorn, linux-wireless, users, Gertjan van Wingerde
The recent changes to skb handling introduced a bug in the rt2800usb
TX descriptor writing whereby the length of the USB packet wasn't
calculated correctly.
Found via code inspection, as the devices themselves didn't seem to mind.
Signed-off-by: Gertjan van Wingerde <gwingerde@gmail.com>
---
drivers/net/wireless/rt2x00/rt2800usb.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/drivers/net/wireless/rt2x00/rt2800usb.c b/drivers/net/wireless/rt2x00/rt2800usb.c
index 33d7ac9..eaf0a7e 100644
--- a/drivers/net/wireless/rt2x00/rt2800usb.c
+++ b/drivers/net/wireless/rt2x00/rt2800usb.c
@@ -414,7 +414,7 @@ static void rt2800usb_write_tx_desc(struct rt2x00_dev *rt2x00dev,
*/
rt2x00_desc_read(txi, 0, &word);
rt2x00_set_field32(&word, TXINFO_W0_USB_DMA_TX_PKT_LEN,
- skb->len + TXWI_DESC_SIZE);
+ skb->len - TXINFO_DESC_SIZE);
rt2x00_set_field32(&word, TXINFO_W0_WIV,
!test_bit(ENTRY_TXD_ENCRYPT_IV, &txdesc->flags));
rt2x00_set_field32(&word, TXINFO_W0_QSEL, 2);
--
1.7.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 3/4] rt2x00: Clean up USB vendor request buffer functions.
2010-05-13 19:16 [PATCH 0/4] Final set of fixes and cleanups for 2.6.35 Gertjan van Wingerde
2010-05-13 19:16 ` [PATCH 1/4] rt2x00: Fix failed SLEEP->AWAKE and AWAKE->SLEEP transitions Gertjan van Wingerde
2010-05-13 19:16 ` [PATCH 2/4] rt2x00: Fix rt2800usb TX descriptor writing Gertjan van Wingerde
@ 2010-05-13 19:16 ` Gertjan van Wingerde
2010-05-13 19:31 ` Ivo Van Doorn
2010-05-13 19:16 ` [PATCH 4/4] rt2x00: Centralize rt2800 beacon writing Gertjan van Wingerde
3 siblings, 1 reply; 10+ messages in thread
From: Gertjan van Wingerde @ 2010-05-13 19:16 UTC (permalink / raw)
To: John W. Linville
Cc: Ivo van Doorn, linux-wireless, users, Gertjan van Wingerde
There is no need to force the separation between a buffer USB vendor
request that does fit the CSR cache and one that doesn't onto the
callers. This is something that the rt2x00usb_vendor_request_buff
function can figure out by itself.
Combine the rt2x00usb_vendor_request_buff and
rt2x00usb_vendor_request_large_buff functions into a single one, as
both of them were equivalent for small buffers anyway.
Signed-off-by: Gertjan van Wingerde <gwingerde@gmail.com>
---
drivers/net/wireless/rt2x00/rt2500usb.c | 14 +-----------
drivers/net/wireless/rt2x00/rt2800usb.c | 13 +++--------
drivers/net/wireless/rt2x00/rt2x00usb.c | 22 +--------------------
drivers/net/wireless/rt2x00/rt2x00usb.h | 19 ------------------
drivers/net/wireless/rt2x00/rt73usb.c | 32 ++++++------------------------
5 files changed, 14 insertions(+), 86 deletions(-)
diff --git a/drivers/net/wireless/rt2x00/rt2500usb.c b/drivers/net/wireless/rt2x00/rt2500usb.c
index eb99934..a1af5b8 100644
--- a/drivers/net/wireless/rt2x00/rt2500usb.c
+++ b/drivers/net/wireless/rt2x00/rt2500usb.c
@@ -344,7 +344,6 @@ static int rt2500usb_config_key(struct rt2x00_dev *rt2x00dev,
struct rt2x00lib_crypto *crypto,
struct ieee80211_key_conf *key)
{
- int timeout;
u32 mask;
u16 reg;
@@ -366,18 +365,9 @@ static int rt2500usb_config_key(struct rt2x00_dev *rt2x00dev,
key->hw_key_idx += reg ? ffz(reg) : 0;
- /*
- * The encryption key doesn't fit within the CSR cache,
- * this means we should allocate it seperately and use
- * rt2x00usb_vendor_request() to send the key to the hardware.
- */
reg = KEY_ENTRY(key->hw_key_idx);
- timeout = REGISTER_TIMEOUT32(sizeof(crypto->key));
- rt2x00usb_vendor_request_large_buff(rt2x00dev, USB_MULTI_WRITE,
- USB_VENDOR_REQUEST_OUT, reg,
- crypto->key,
- sizeof(crypto->key),
- timeout);
+ rt2500usb_register_multiwrite(rt2x00dev, reg,
+ crypto->key, sizeof(crypto->key));
/*
* The driver does not support the IV/EIV generation
diff --git a/drivers/net/wireless/rt2x00/rt2800usb.c b/drivers/net/wireless/rt2x00/rt2800usb.c
index eaf0a7e..0f0a4f5 100644
--- a/drivers/net/wireless/rt2x00/rt2800usb.c
+++ b/drivers/net/wireless/rt2x00/rt2800usb.c
@@ -169,11 +169,8 @@ static int rt2800usb_load_firmware(struct rt2x00_dev *rt2x00dev,
/*
* Write firmware to device.
*/
- rt2x00usb_vendor_request_large_buff(rt2x00dev, USB_MULTI_WRITE,
- USB_VENDOR_REQUEST_OUT,
- FIRMWARE_IMAGE_BASE,
- data + offset, length,
- REGISTER_TIMEOUT32(length));
+ rt2800_register_multiwrite(rt2x00dev, FIRMWARE_IMAGE_BASE,
+ data + offset, length);
rt2800_register_write(rt2x00dev, H2M_MAILBOX_CID, ~0);
rt2800_register_write(rt2x00dev, H2M_MAILBOX_STATUS, ~0);
@@ -478,10 +475,8 @@ static void rt2800usb_write_beacon(struct queue_entry *entry,
* Write entire beacon with descriptor to register.
*/
beacon_base = HW_BEACON_OFFSET(entry->entry_idx);
- rt2x00usb_vendor_request_large_buff(rt2x00dev, USB_MULTI_WRITE,
- USB_VENDOR_REQUEST_OUT, beacon_base,
- entry->skb->data, entry->skb->len,
- REGISTER_TIMEOUT32(entry->skb->len));
+ rt2800_register_multiwrite(rt2x00dev, beacon_base,
+ entry->skb->data, entry->skb->len);
/*
* Enable beaconing again.
diff --git a/drivers/net/wireless/rt2x00/rt2x00usb.c b/drivers/net/wireless/rt2x00/rt2x00usb.c
index 1f72c59..1cae159 100644
--- a/drivers/net/wireless/rt2x00/rt2x00usb.c
+++ b/drivers/net/wireless/rt2x00/rt2x00usb.c
@@ -112,26 +112,6 @@ int rt2x00usb_vendor_request_buff(struct rt2x00_dev *rt2x00dev,
const u16 offset, void *buffer,
const u16 buffer_length, const int timeout)
{
- int status;
-
- mutex_lock(&rt2x00dev->csr_mutex);
-
- status = rt2x00usb_vendor_req_buff_lock(rt2x00dev, request,
- requesttype, offset, buffer,
- buffer_length, timeout);
-
- mutex_unlock(&rt2x00dev->csr_mutex);
-
- return status;
-}
-EXPORT_SYMBOL_GPL(rt2x00usb_vendor_request_buff);
-
-int rt2x00usb_vendor_request_large_buff(struct rt2x00_dev *rt2x00dev,
- const u8 request, const u8 requesttype,
- const u16 offset, const void *buffer,
- const u16 buffer_length,
- const int timeout)
-{
int status = 0;
unsigned char *tb;
u16 off, len, bsize;
@@ -156,7 +136,7 @@ int rt2x00usb_vendor_request_large_buff(struct rt2x00_dev *rt2x00dev,
return status;
}
-EXPORT_SYMBOL_GPL(rt2x00usb_vendor_request_large_buff);
+EXPORT_SYMBOL_GPL(rt2x00usb_vendor_request_buff);
int rt2x00usb_regbusy_read(struct rt2x00_dev *rt2x00dev,
const unsigned int offset,
diff --git a/drivers/net/wireless/rt2x00/rt2x00usb.h b/drivers/net/wireless/rt2x00/rt2x00usb.h
index 621d0f8..255b81e 100644
--- a/drivers/net/wireless/rt2x00/rt2x00usb.h
+++ b/drivers/net/wireless/rt2x00/rt2x00usb.h
@@ -167,25 +167,6 @@ int rt2x00usb_vendor_req_buff_lock(struct rt2x00_dev *rt2x00dev,
const u16 buffer_length, const int timeout);
/**
- * rt2x00usb_vendor_request_large_buff - Send register command to device (buffered)
- * @rt2x00dev: Pointer to &struct rt2x00_dev
- * @request: USB vendor command (See &enum rt2x00usb_vendor_request)
- * @requesttype: Request type &USB_VENDOR_REQUEST_*
- * @offset: Register start offset to perform action on
- * @buffer: Buffer where information will be read/written to by device
- * @buffer_length: Size of &buffer
- * @timeout: Operation timeout
- *
- * This function is used to transfer register data in blocks larger
- * then CSR_CACHE_SIZE. Use for firmware upload, keys and beacons.
- */
-int rt2x00usb_vendor_request_large_buff(struct rt2x00_dev *rt2x00dev,
- const u8 request, const u8 requesttype,
- const u16 offset, const void *buffer,
- const u16 buffer_length,
- const int timeout);
-
-/**
* rt2x00usb_vendor_request_sw - Send single register command to device
* @rt2x00dev: Pointer to &struct rt2x00_dev
* @request: USB vendor command (See &enum rt2x00usb_vendor_request)
diff --git a/drivers/net/wireless/rt2x00/rt73usb.c b/drivers/net/wireless/rt2x00/rt73usb.c
index dc4a028..2f7e0ce 100644
--- a/drivers/net/wireless/rt2x00/rt73usb.c
+++ b/drivers/net/wireless/rt2x00/rt73usb.c
@@ -269,7 +269,6 @@ static int rt73usb_config_shared_key(struct rt2x00_dev *rt2x00dev,
{
struct hw_key_entry key_entry;
struct rt2x00_field32 field;
- int timeout;
u32 mask;
u32 reg;
@@ -305,12 +304,8 @@ static int rt73usb_config_shared_key(struct rt2x00_dev *rt2x00dev,
sizeof(key_entry.rx_mic));
reg = SHARED_KEY_ENTRY(key->hw_key_idx);
- timeout = REGISTER_TIMEOUT32(sizeof(key_entry));
- rt2x00usb_vendor_request_large_buff(rt2x00dev, USB_MULTI_WRITE,
- USB_VENDOR_REQUEST_OUT, reg,
- &key_entry,
- sizeof(key_entry),
- timeout);
+ rt2x00usb_register_multiwrite(rt2x00dev, reg,
+ &key_entry, sizeof(key_entry));
/*
* The cipher types are stored over 2 registers.
@@ -371,7 +366,6 @@ static int rt73usb_config_pairwise_key(struct rt2x00_dev *rt2x00dev,
{
struct hw_pairwise_ta_entry addr_entry;
struct hw_key_entry key_entry;
- int timeout;
u32 mask;
u32 reg;
@@ -406,17 +400,11 @@ static int rt73usb_config_pairwise_key(struct rt2x00_dev *rt2x00dev,
sizeof(key_entry.rx_mic));
reg = PAIRWISE_KEY_ENTRY(key->hw_key_idx);
- timeout = REGISTER_TIMEOUT32(sizeof(key_entry));
- rt2x00usb_vendor_request_large_buff(rt2x00dev, USB_MULTI_WRITE,
- USB_VENDOR_REQUEST_OUT, reg,
- &key_entry,
- sizeof(key_entry),
- timeout);
+ rt2x00usb_register_multiwrite(rt2x00dev, reg,
+ &key_entry, sizeof(key_entry));
/*
* Send the address and cipher type to the hardware register.
- * This data fits within the CSR cache size, so we can use
- * rt2x00usb_register_multiwrite() directly.
*/
memset(&addr_entry, 0, sizeof(addr_entry));
memcpy(&addr_entry, crypto->address, ETH_ALEN);
@@ -1091,11 +1079,7 @@ static int rt73usb_load_firmware(struct rt2x00_dev *rt2x00dev,
/*
* Write firmware to device.
*/
- rt2x00usb_vendor_request_large_buff(rt2x00dev, USB_MULTI_WRITE,
- USB_VENDOR_REQUEST_OUT,
- FIRMWARE_IMAGE_BASE,
- data, len,
- REGISTER_TIMEOUT32(len));
+ rt2x00usb_register_multiwrite(rt2x00dev, FIRMWARE_IMAGE_BASE, data, len);
/*
* Send firmware request to device to load firmware,
@@ -1547,10 +1531,8 @@ static void rt73usb_write_beacon(struct queue_entry *entry,
* Write entire beacon with descriptor to register.
*/
beacon_base = HW_BEACON_OFFSET(entry->entry_idx);
- rt2x00usb_vendor_request_large_buff(rt2x00dev, USB_MULTI_WRITE,
- USB_VENDOR_REQUEST_OUT, beacon_base,
- entry->skb->data, entry->skb->len,
- REGISTER_TIMEOUT32(entry->skb->len));
+ rt2x00usb_register_multiwrite(rt2x00dev, beacon_base,
+ entry->skb->data, entry->skb->len);
/*
* Enable beaconing again.
--
1.7.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 4/4] rt2x00: Centralize rt2800 beacon writing.
2010-05-13 19:16 [PATCH 0/4] Final set of fixes and cleanups for 2.6.35 Gertjan van Wingerde
` (2 preceding siblings ...)
2010-05-13 19:16 ` [PATCH 3/4] rt2x00: Clean up USB vendor request buffer functions Gertjan van Wingerde
@ 2010-05-13 19:16 ` Gertjan van Wingerde
2010-05-13 19:32 ` Ivo Van Doorn
3 siblings, 1 reply; 10+ messages in thread
From: Gertjan van Wingerde @ 2010-05-13 19:16 UTC (permalink / raw)
To: John W. Linville
Cc: Ivo van Doorn, linux-wireless, users, Gertjan van Wingerde
The beacon writing functions of rt2800pci and rt2800usb are now identical.
Move them to rt2800lib to only have one central function.
Signed-off-by: Gertjan van Wingerde <gwingerde@gmail.com>
---
drivers/net/wireless/rt2x00/rt2800lib.c | 61 ++++++++++++++++++++++++++++++
drivers/net/wireless/rt2x00/rt2800lib.h | 2 +
drivers/net/wireless/rt2x00/rt2800pci.c | 63 +------------------------------
drivers/net/wireless/rt2x00/rt2800usb.c | 63 +------------------------------
4 files changed, 65 insertions(+), 124 deletions(-)
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
index 53a3257..9ee4ffa 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -378,6 +378,67 @@ void rt2800_process_rxwi(struct sk_buff *skb, struct rxdone_entry_desc *rxdesc)
}
EXPORT_SYMBOL_GPL(rt2800_process_rxwi);
+void rt2800_write_beacon(struct queue_entry *entry, struct txentry_desc *txdesc)
+{
+ struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;
+ struct skb_frame_desc *skbdesc = get_skb_frame_desc(entry->skb);
+ unsigned int beacon_base;
+ u32 reg;
+
+ /*
+ * Disable beaconing while we are reloading the beacon data,
+ * otherwise we might be sending out invalid data.
+ */
+ rt2800_register_read(rt2x00dev, BCN_TIME_CFG, ®);
+ rt2x00_set_field32(®, BCN_TIME_CFG_BEACON_GEN, 0);
+ rt2800_register_write(rt2x00dev, BCN_TIME_CFG, reg);
+
+ /*
+ * Add space for the TXWI in front of the skb.
+ */
+ skb_push(entry->skb, TXWI_DESC_SIZE);
+ memset(entry->skb, 0, TXWI_DESC_SIZE);
+
+ /*
+ * Register descriptor details in skb frame descriptor.
+ */
+ skbdesc->flags |= SKBDESC_DESC_IN_SKB;
+ skbdesc->desc = entry->skb->data;
+ skbdesc->desc_len = TXWI_DESC_SIZE;
+
+ /*
+ * Add the TXWI for the beacon to the skb.
+ */
+ rt2800_write_txwi((__le32 *)entry->skb->data, txdesc);
+
+ /*
+ * Dump beacon to userspace through debugfs.
+ */
+ rt2x00debug_dump_frame(rt2x00dev, DUMP_FRAME_BEACON, entry->skb);
+
+ /*
+ * Write entire beacon with TXWI to register.
+ */
+ beacon_base = HW_BEACON_OFFSET(entry->entry_idx);
+ rt2800_register_multiwrite(rt2x00dev, beacon_base,
+ entry->skb->data, entry->skb->len);
+
+ /*
+ * Enable beaconing again.
+ */
+ rt2x00_set_field32(®, BCN_TIME_CFG_TSF_TICKING, 1);
+ rt2x00_set_field32(®, BCN_TIME_CFG_TBTT_ENABLE, 1);
+ rt2x00_set_field32(®, BCN_TIME_CFG_BEACON_GEN, 1);
+ rt2800_register_write(rt2x00dev, BCN_TIME_CFG, reg);
+
+ /*
+ * Clean up beacon skb.
+ */
+ dev_kfree_skb_any(entry->skb);
+ entry->skb = NULL;
+}
+EXPORT_SYMBOL(rt2800_write_beacon);
+
#ifdef CONFIG_RT2X00_LIB_DEBUGFS
const struct rt2x00debug rt2800_rt2x00debug = {
.owner = THIS_MODULE,
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.h b/drivers/net/wireless/rt2x00/rt2800lib.h
index 0f0a13c..b16fd6d 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.h
+++ b/drivers/net/wireless/rt2x00/rt2800lib.h
@@ -114,6 +114,8 @@ void rt2800_mcu_request(struct rt2x00_dev *rt2x00dev,
void rt2800_write_txwi(__le32 *txwi, struct txentry_desc *txdesc);
void rt2800_process_rxwi(struct sk_buff *skb, struct rxdone_entry_desc *txdesc);
+void rt2800_write_beacon(struct queue_entry *entry, struct txentry_desc *txdesc);
+
extern const struct rt2x00debug rt2800_rt2x00debug;
int rt2800_rfkill_poll(struct rt2x00_dev *rt2x00dev);
diff --git a/drivers/net/wireless/rt2x00/rt2800pci.c b/drivers/net/wireless/rt2x00/rt2800pci.c
index db61a78..f271836 100644
--- a/drivers/net/wireless/rt2x00/rt2800pci.c
+++ b/drivers/net/wireless/rt2x00/rt2800pci.c
@@ -676,67 +676,6 @@ static void rt2800pci_write_tx_desc(struct rt2x00_dev *rt2x00dev,
/*
* TX data initialization
*/
-static void rt2800pci_write_beacon(struct queue_entry *entry,
- struct txentry_desc *txdesc)
-{
- struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;
- struct skb_frame_desc *skbdesc = get_skb_frame_desc(entry->skb);
- unsigned int beacon_base;
- u32 reg;
-
- /*
- * Disable beaconing while we are reloading the beacon data,
- * otherwise we might be sending out invalid data.
- */
- rt2800_register_read(rt2x00dev, BCN_TIME_CFG, ®);
- rt2x00_set_field32(®, BCN_TIME_CFG_BEACON_GEN, 0);
- rt2800_register_write(rt2x00dev, BCN_TIME_CFG, reg);
-
- /*
- * Add space for the TXWI in front of the skb.
- */
- skb_push(entry->skb, TXWI_DESC_SIZE);
- memset(entry->skb, 0, TXWI_DESC_SIZE);
-
- /*
- * Register descriptor details in skb frame descriptor.
- */
- skbdesc->flags |= SKBDESC_DESC_IN_SKB;
- skbdesc->desc = entry->skb->data;
- skbdesc->desc_len = TXWI_DESC_SIZE;
-
- /*
- * Add the TXWI for the beacon to the skb.
- */
- rt2800_write_txwi((__le32 *)entry->skb->data, txdesc);
-
- /*
- * Dump beacon to userspace through debugfs.
- */
- rt2x00debug_dump_frame(rt2x00dev, DUMP_FRAME_BEACON, entry->skb);
-
- /*
- * Write entire beacon with TXWI to register.
- */
- beacon_base = HW_BEACON_OFFSET(entry->entry_idx);
- rt2800_register_multiwrite(rt2x00dev, beacon_base,
- entry->skb->data, entry->skb->len);
-
- /*
- * Enable beaconing again.
- */
- rt2x00_set_field32(®, BCN_TIME_CFG_TSF_TICKING, 1);
- rt2x00_set_field32(®, BCN_TIME_CFG_TBTT_ENABLE, 1);
- rt2x00_set_field32(®, BCN_TIME_CFG_BEACON_GEN, 1);
- rt2800_register_write(rt2x00dev, BCN_TIME_CFG, reg);
-
- /*
- * Clean up beacon skb.
- */
- dev_kfree_skb_any(entry->skb);
- entry->skb = NULL;
-}
-
static void rt2800pci_kick_tx_queue(struct rt2x00_dev *rt2x00dev,
const enum data_queue_qid queue_idx)
{
@@ -1074,7 +1013,7 @@ static const struct rt2x00lib_ops rt2800pci_rt2x00_ops = {
.write_tx_desc = rt2800pci_write_tx_desc,
.write_tx_data = rt2x00pci_write_tx_data,
.write_tx_datadesc = rt2800pci_write_tx_datadesc,
- .write_beacon = rt2800pci_write_beacon,
+ .write_beacon = rt2800_write_beacon,
.kick_tx_queue = rt2800pci_kick_tx_queue,
.kill_tx_queue = rt2800pci_kill_tx_queue,
.fill_rxdone = rt2800pci_fill_rxdone,
diff --git a/drivers/net/wireless/rt2x00/rt2800usb.c b/drivers/net/wireless/rt2x00/rt2800usb.c
index 0f0a4f5..8a15ffb 100644
--- a/drivers/net/wireless/rt2x00/rt2800usb.c
+++ b/drivers/net/wireless/rt2x00/rt2800usb.c
@@ -432,67 +432,6 @@ static void rt2800usb_write_tx_desc(struct rt2x00_dev *rt2x00dev,
/*
* TX data initialization
*/
-static void rt2800usb_write_beacon(struct queue_entry *entry,
- struct txentry_desc *txdesc)
-{
- struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;
- struct skb_frame_desc *skbdesc = get_skb_frame_desc(entry->skb);
- unsigned int beacon_base;
- u32 reg;
-
- /*
- * Disable beaconing while we are reloading the beacon data,
- * otherwise we might be sending out invalid data.
- */
- rt2800_register_read(rt2x00dev, BCN_TIME_CFG, ®);
- rt2x00_set_field32(®, BCN_TIME_CFG_BEACON_GEN, 0);
- rt2800_register_write(rt2x00dev, BCN_TIME_CFG, reg);
-
- /*
- * Add space for the TXWI in front of the skb.
- */
- skb_push(entry->skb, TXWI_DESC_SIZE);
- memset(entry->skb, 0, TXWI_DESC_SIZE);
-
- /*
- * Register descriptor details in skb frame descriptor.
- */
- skbdesc->flags |= SKBDESC_DESC_IN_SKB;
- skbdesc->desc = entry->skb->data;
- skbdesc->desc_len = TXWI_DESC_SIZE;
-
- /*
- * Add the TXWI for the beacon to the skb.
- */
- rt2800_write_txwi((__le32 *) entry->skb->data, txdesc);
-
- /*
- * Dump beacon to userspace through debugfs.
- */
- rt2x00debug_dump_frame(rt2x00dev, DUMP_FRAME_BEACON, entry->skb);
-
- /*
- * Write entire beacon with descriptor to register.
- */
- beacon_base = HW_BEACON_OFFSET(entry->entry_idx);
- rt2800_register_multiwrite(rt2x00dev, beacon_base,
- entry->skb->data, entry->skb->len);
-
- /*
- * Enable beaconing again.
- */
- rt2x00_set_field32(®, BCN_TIME_CFG_TSF_TICKING, 1);
- rt2x00_set_field32(®, BCN_TIME_CFG_TBTT_ENABLE, 1);
- rt2x00_set_field32(®, BCN_TIME_CFG_BEACON_GEN, 1);
- rt2800_register_write(rt2x00dev, BCN_TIME_CFG, reg);
-
- /*
- * Clean up the beacon skb.
- */
- dev_kfree_skb(entry->skb);
- entry->skb = NULL;
-}
-
static int rt2800usb_get_tx_data_len(struct queue_entry *entry)
{
int length;
@@ -674,7 +613,7 @@ static const struct rt2x00lib_ops rt2800usb_rt2x00_ops = {
.link_tuner = rt2800_link_tuner,
.write_tx_desc = rt2800usb_write_tx_desc,
.write_tx_data = rt2x00usb_write_tx_data,
- .write_beacon = rt2800usb_write_beacon,
+ .write_beacon = rt2800_write_beacon,
.get_tx_data_len = rt2800usb_get_tx_data_len,
.kick_tx_queue = rt2x00usb_kick_tx_queue,
.kill_tx_queue = rt2x00usb_kill_tx_queue,
--
1.7.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 1/4] rt2x00: Fix failed SLEEP->AWAKE and AWAKE->SLEEP transitions.
2010-05-13 19:16 ` [PATCH 1/4] rt2x00: Fix failed SLEEP->AWAKE and AWAKE->SLEEP transitions Gertjan van Wingerde
@ 2010-05-13 19:30 ` Ivo Van Doorn
2010-05-13 20:03 ` Gertjan van Wingerde
0 siblings, 1 reply; 10+ messages in thread
From: Ivo Van Doorn @ 2010-05-13 19:30 UTC (permalink / raw)
To: Gertjan van Wingerde; +Cc: John W. Linville, linux-wireless, users
On Thu, May 13, 2010 at 9:16 PM, Gertjan van Wingerde
<gwingerde@gmail.com> wrote:
> (Based on a patch created by Ondrej Zary)
>
> In some circumstances the Ralink devices do not properly go to sleep
> or wake up, with timeouts occurring.
> Fix this by retrying telling the device that it has to wake up or
> sleep.
>
> Signed-off-by: Gertjan van Wingerde <gwingerde@gmail.com>
Nice catch, I think the legacy drivers also did this, but not too sure
about that.
Does this mean we can reenable the flag to enable powersaving by default?
Acked-by: Ivo van Doorn <IvDoorn@gmail.com>
> ---
> drivers/net/wireless/rt2x00/rt2400pci.c | 9 +++++----
> drivers/net/wireless/rt2x00/rt2500pci.c | 9 +++++----
> drivers/net/wireless/rt2x00/rt61pci.c | 7 ++++---
> drivers/net/wireless/rt2x00/rt73usb.c | 7 ++++---
> 4 files changed, 18 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/net/wireless/rt2x00/rt2400pci.c b/drivers/net/wireless/rt2x00/rt2400pci.c
> index 641459b..7b36db2 100644
> --- a/drivers/net/wireless/rt2x00/rt2400pci.c
> +++ b/drivers/net/wireless/rt2x00/rt2400pci.c
> @@ -925,7 +925,7 @@ static void rt2400pci_disable_radio(struct rt2x00_dev *rt2x00dev)
> static int rt2400pci_set_state(struct rt2x00_dev *rt2x00dev,
> enum dev_state state)
> {
> - u32 reg;
> + u32 reg, reg2;
> unsigned int i;
> char put_to_sleep;
> char bbp_state;
> @@ -946,11 +946,12 @@ static int rt2400pci_set_state(struct rt2x00_dev *rt2x00dev,
> * device has entered the correct state.
> */
> for (i = 0; i < REGISTER_BUSY_COUNT; i++) {
> - rt2x00pci_register_read(rt2x00dev, PWRCSR1, ®);
> - bbp_state = rt2x00_get_field32(reg, PWRCSR1_BBP_CURR_STATE);
> - rf_state = rt2x00_get_field32(reg, PWRCSR1_RF_CURR_STATE);
> + rt2x00pci_register_read(rt2x00dev, PWRCSR1, ®2);
> + bbp_state = rt2x00_get_field32(reg2, PWRCSR1_BBP_CURR_STATE);
> + rf_state = rt2x00_get_field32(reg2, PWRCSR1_RF_CURR_STATE);
> if (bbp_state == state && rf_state == state)
> return 0;
> + rt2x00pci_register_write(rt2x00dev, PWRCSR1, reg);
> msleep(10);
> }
>
> diff --git a/drivers/net/wireless/rt2x00/rt2500pci.c b/drivers/net/wireless/rt2x00/rt2500pci.c
> index c8363bc..4a29ede 100644
> --- a/drivers/net/wireless/rt2x00/rt2500pci.c
> +++ b/drivers/net/wireless/rt2x00/rt2500pci.c
> @@ -1083,7 +1083,7 @@ static void rt2500pci_disable_radio(struct rt2x00_dev *rt2x00dev)
> static int rt2500pci_set_state(struct rt2x00_dev *rt2x00dev,
> enum dev_state state)
> {
> - u32 reg;
> + u32 reg, reg2;
> unsigned int i;
> char put_to_sleep;
> char bbp_state;
> @@ -1104,11 +1104,12 @@ static int rt2500pci_set_state(struct rt2x00_dev *rt2x00dev,
> * device has entered the correct state.
> */
> for (i = 0; i < REGISTER_BUSY_COUNT; i++) {
> - rt2x00pci_register_read(rt2x00dev, PWRCSR1, ®);
> - bbp_state = rt2x00_get_field32(reg, PWRCSR1_BBP_CURR_STATE);
> - rf_state = rt2x00_get_field32(reg, PWRCSR1_RF_CURR_STATE);
> + rt2x00pci_register_read(rt2x00dev, PWRCSR1, ®2);
> + bbp_state = rt2x00_get_field32(reg2, PWRCSR1_BBP_CURR_STATE);
> + rf_state = rt2x00_get_field32(reg2, PWRCSR1_RF_CURR_STATE);
> if (bbp_state == state && rf_state == state)
> return 0;
> + rt2x00pci_register_write(rt2x00dev, PWRCSR1, reg);
> msleep(10);
> }
>
> diff --git a/drivers/net/wireless/rt2x00/rt61pci.c b/drivers/net/wireless/rt2x00/rt61pci.c
> index 9ac2f5c..a03b6a2 100644
> --- a/drivers/net/wireless/rt2x00/rt61pci.c
> +++ b/drivers/net/wireless/rt2x00/rt61pci.c
> @@ -1688,7 +1688,7 @@ static void rt61pci_disable_radio(struct rt2x00_dev *rt2x00dev)
>
> static int rt61pci_set_state(struct rt2x00_dev *rt2x00dev, enum dev_state state)
> {
> - u32 reg;
> + u32 reg, reg2;
> unsigned int i;
> char put_to_sleep;
>
> @@ -1705,10 +1705,11 @@ static int rt61pci_set_state(struct rt2x00_dev *rt2x00dev, enum dev_state state)
> * device has entered the correct state.
> */
> for (i = 0; i < REGISTER_BUSY_COUNT; i++) {
> - rt2x00pci_register_read(rt2x00dev, MAC_CSR12, ®);
> - state = rt2x00_get_field32(reg, MAC_CSR12_BBP_CURRENT_STATE);
> + rt2x00pci_register_read(rt2x00dev, MAC_CSR12, ®2);
> + state = rt2x00_get_field32(reg2, MAC_CSR12_BBP_CURRENT_STATE);
> if (state == !put_to_sleep)
> return 0;
> + rt2x00pci_register_write(rt2x00dev, MAC_CSR12, reg);
> msleep(10);
> }
>
> diff --git a/drivers/net/wireless/rt2x00/rt73usb.c b/drivers/net/wireless/rt2x00/rt73usb.c
> index a9738ee..dc4a028 100644
> --- a/drivers/net/wireless/rt2x00/rt73usb.c
> +++ b/drivers/net/wireless/rt2x00/rt73usb.c
> @@ -1365,7 +1365,7 @@ static void rt73usb_disable_radio(struct rt2x00_dev *rt2x00dev)
>
> static int rt73usb_set_state(struct rt2x00_dev *rt2x00dev, enum dev_state state)
> {
> - u32 reg;
> + u32 reg, reg2;
> unsigned int i;
> char put_to_sleep;
>
> @@ -1382,10 +1382,11 @@ static int rt73usb_set_state(struct rt2x00_dev *rt2x00dev, enum dev_state state)
> * device has entered the correct state.
> */
> for (i = 0; i < REGISTER_BUSY_COUNT; i++) {
> - rt2x00usb_register_read(rt2x00dev, MAC_CSR12, ®);
> - state = rt2x00_get_field32(reg, MAC_CSR12_BBP_CURRENT_STATE);
> + rt2x00usb_register_read(rt2x00dev, MAC_CSR12, ®2);
> + state = rt2x00_get_field32(reg2, MAC_CSR12_BBP_CURRENT_STATE);
> if (state == !put_to_sleep)
> return 0;
> + rt2x00usb_register_write(rt2x00dev, MAC_CSR12, reg);
> msleep(10);
> }
>
> --
> 1.7.1
>
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2/4] rt2x00: Fix rt2800usb TX descriptor writing.
2010-05-13 19:16 ` [PATCH 2/4] rt2x00: Fix rt2800usb TX descriptor writing Gertjan van Wingerde
@ 2010-05-13 19:30 ` Ivo Van Doorn
0 siblings, 0 replies; 10+ messages in thread
From: Ivo Van Doorn @ 2010-05-13 19:30 UTC (permalink / raw)
To: Gertjan van Wingerde; +Cc: John W. Linville, linux-wireless, users
On Thu, May 13, 2010 at 9:16 PM, Gertjan van Wingerde
<gwingerde@gmail.com> wrote:
> The recent changes to skb handling introduced a bug in the rt2800usb
> TX descriptor writing whereby the length of the USB packet wasn't
> calculated correctly.
> Found via code inspection, as the devices themselves didn't seem to mind.
>
> Signed-off-by: Gertjan van Wingerde <gwingerde@gmail.com>
Acked-by: Ivo van Doorn <IvDoorn@gmail.com>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 3/4] rt2x00: Clean up USB vendor request buffer functions.
2010-05-13 19:16 ` [PATCH 3/4] rt2x00: Clean up USB vendor request buffer functions Gertjan van Wingerde
@ 2010-05-13 19:31 ` Ivo Van Doorn
0 siblings, 0 replies; 10+ messages in thread
From: Ivo Van Doorn @ 2010-05-13 19:31 UTC (permalink / raw)
To: Gertjan van Wingerde; +Cc: John W. Linville, linux-wireless, users
On Thu, May 13, 2010 at 9:16 PM, Gertjan van Wingerde
<gwingerde@gmail.com> wrote:
> There is no need to force the separation between a buffer USB vendor
> request that does fit the CSR cache and one that doesn't onto the
> callers. This is something that the rt2x00usb_vendor_request_buff
> function can figure out by itself.
> Combine the rt2x00usb_vendor_request_buff and
> rt2x00usb_vendor_request_large_buff functions into a single one, as
> both of them were equivalent for small buffers anyway.
>
> Signed-off-by: Gertjan van Wingerde <gwingerde@gmail.com>
Acked-by: Ivo van Doorn <IvDoorn@gmail.com>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 4/4] rt2x00: Centralize rt2800 beacon writing.
2010-05-13 19:16 ` [PATCH 4/4] rt2x00: Centralize rt2800 beacon writing Gertjan van Wingerde
@ 2010-05-13 19:32 ` Ivo Van Doorn
0 siblings, 0 replies; 10+ messages in thread
From: Ivo Van Doorn @ 2010-05-13 19:32 UTC (permalink / raw)
To: Gertjan van Wingerde; +Cc: John W. Linville, linux-wireless, users
On Thu, May 13, 2010 at 9:16 PM, Gertjan van Wingerde
<gwingerde@gmail.com> wrote:
> The beacon writing functions of rt2800pci and rt2800usb are now identical.
> Move them to rt2800lib to only have one central function.
>
> Signed-off-by: Gertjan van Wingerde <gwingerde@gmail.com>
Acked-by: Ivo van Doorn <IvDoorn@gmail.com>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/4] rt2x00: Fix failed SLEEP->AWAKE and AWAKE->SLEEP transitions.
2010-05-13 19:30 ` Ivo Van Doorn
@ 2010-05-13 20:03 ` Gertjan van Wingerde
0 siblings, 0 replies; 10+ messages in thread
From: Gertjan van Wingerde @ 2010-05-13 20:03 UTC (permalink / raw)
To: Ivo Van Doorn; +Cc: John W. Linville, linux-wireless, users
On 05/13/10 21:30, Ivo Van Doorn wrote:
> On Thu, May 13, 2010 at 9:16 PM, Gertjan van Wingerde
> <gwingerde@gmail.com> wrote:
>> (Based on a patch created by Ondrej Zary)
>>
>> In some circumstances the Ralink devices do not properly go to sleep
>> or wake up, with timeouts occurring.
>> Fix this by retrying telling the device that it has to wake up or
>> sleep.
>>
>> Signed-off-by: Gertjan van Wingerde <gwingerde@gmail.com>
>
> Nice catch, I think the legacy drivers also did this, but not too sure
> about that.
> Does this mean we can reenable the flag to enable powersaving by default?
>
Not sure of that yet. There's one more thing that is on my TODO list on powersaving,
namely to not go to sleep if there are still active entries in the TX queues. This is
also done by the legacy, so we should check for that as well. The only issue is how to
make the device go to sleep once the TX queues are empty, as mac80211 will not inform
us again that we need to sleep.
---
Gertjan.
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2010-05-13 20:03 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-05-13 19:16 [PATCH 0/4] Final set of fixes and cleanups for 2.6.35 Gertjan van Wingerde
2010-05-13 19:16 ` [PATCH 1/4] rt2x00: Fix failed SLEEP->AWAKE and AWAKE->SLEEP transitions Gertjan van Wingerde
2010-05-13 19:30 ` Ivo Van Doorn
2010-05-13 20:03 ` Gertjan van Wingerde
2010-05-13 19:16 ` [PATCH 2/4] rt2x00: Fix rt2800usb TX descriptor writing Gertjan van Wingerde
2010-05-13 19:30 ` Ivo Van Doorn
2010-05-13 19:16 ` [PATCH 3/4] rt2x00: Clean up USB vendor request buffer functions Gertjan van Wingerde
2010-05-13 19:31 ` Ivo Van Doorn
2010-05-13 19:16 ` [PATCH 4/4] rt2x00: Centralize rt2800 beacon writing Gertjan van Wingerde
2010-05-13 19:32 ` Ivo Van Doorn
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).