diff options
Diffstat (limited to 'package/mac80211/patches/303-rt2x00-Implement-support-for-rt2800usb.patch')
-rw-r--r-- | package/mac80211/patches/303-rt2x00-Implement-support-for-rt2800usb.patch | 46 |
1 files changed, 24 insertions, 22 deletions
diff --git a/package/mac80211/patches/303-rt2x00-Implement-support-for-rt2800usb.patch b/package/mac80211/patches/303-rt2x00-Implement-support-for-rt2800usb.patch index 7a25490195..c9152fd366 100644 --- a/package/mac80211/patches/303-rt2x00-Implement-support-for-rt2800usb.patch +++ b/package/mac80211/patches/303-rt2x00-Implement-support-for-rt2800usb.patch @@ -1,6 +1,6 @@ -From b249bc450f982cd2491448c91faf797ed37b69b8 Mon Sep 17 00:00:00 2001 +From 101b65d221593c1bdeacf0c6085d885ea5447c4c Mon Sep 17 00:00:00 2001 From: Ivo van Doorn <IvDoorn@gmail.com> -Date: Tue, 3 Mar 2009 19:25:49 +0100 +Date: Sat, 14 Mar 2009 20:46:40 +0100 Subject: [PATCH] rt2x00: Implement support for rt2800usb Add support for the rt2800usb chipset. @@ -16,9 +16,9 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com> drivers/net/wireless/rt2x00/Kconfig | 14 + drivers/net/wireless/rt2x00/Makefile | 1 + drivers/net/wireless/rt2x00/rt2800usb.c | 3032 +++++++++++++++++++++++++++++++ - drivers/net/wireless/rt2x00/rt2800usb.h | 1932 ++++++++++++++++++++ + drivers/net/wireless/rt2x00/rt2800usb.h | 1934 ++++++++++++++++++++ drivers/net/wireless/rt2x00/rt2x00.h | 7 + - 5 files changed, 4986 insertions(+), 0 deletions(-) + 5 files changed, 4988 insertions(+), 0 deletions(-) create mode 100644 drivers/net/wireless/rt2x00/rt2800usb.c create mode 100644 drivers/net/wireless/rt2x00/rt2800usb.h @@ -397,10 +397,11 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com> + rt2x00usb_register_read(rt2x00dev, offset, ®); + rt2x00_set_field32(®, MAC_WCID_ATTRIBUTE_KEYTAB, + !!(key->flags & IEEE80211_KEY_FLAG_PAIRWISE)); -+ rt2x00_set_field32(®, MAC_WCID_ATTRIBUTE_CIPHER, crypto->cipher); ++ rt2x00_set_field32(®, MAC_WCID_ATTRIBUTE_CIPHER, ++ (crypto->cmd == SET_KEY) * crypto->cipher); + rt2x00_set_field32(®, MAC_WCID_ATTRIBUTE_BSS_IDX, + (crypto->cmd == SET_KEY) * crypto->bssidx); -+ rt2x00_set_field32(®, MAC_WCID_ATTRIBUTE_RX_WIUDF, 0); ++ rt2x00_set_field32(®, MAC_WCID_ATTRIBUTE_RX_WIUDF, crypto->cipher); + rt2x00usb_register_write(rt2x00dev, offset, reg); + + offset = MAC_IVEIV_ENTRY(key->hw_key_idx); @@ -459,10 +460,10 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com> + * Using the correct defines correctly will cause overhead, + * so just calculate the correct offset. + */ -+ field.bit_offset = (4 * key->keyidx) + (16 * (crypto->bssidx & 1)); ++ field.bit_offset = 4 * (key->hw_key_idx % 8); + field.bit_mask = 0x7 << field.bit_offset; + -+ offset = SHARED_KEY_MODE_ENTRY(key->hw_key_idx / 2); ++ offset = SHARED_KEY_MODE_ENTRY(key->hw_key_idx / 8); + + rt2x00usb_register_read(rt2x00dev, offset, ®); + rt2x00_set_field32(®, field, @@ -488,9 +489,13 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com> + if (crypto->cmd == SET_KEY) { + /* + * 1 pairwise key is possible per AID, this means that the AID -+ * equals our hw_key_idx. ++ * equals our hw_key_idx. Make sure the WCID starts _after_ the ++ * last possible shared key entry. + */ -+ key->hw_key_idx = crypto->aid; ++ if (crypto->aid > (256 - 32)) ++ return -ENOSPC; ++ ++ key->hw_key_idx = 32 + crypto->aid; + + memcpy(key_entry.key, crypto->key, + sizeof(key_entry.key)); @@ -2183,12 +2188,7 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com> + rxdesc->flags |= RX_FLAG_FAILED_FCS_CRC; + + if (test_bit(CONFIG_SUPPORT_HW_CRYPTO, &rt2x00dev->flags)) { -+ /* -+ * Unfortunately we don't know the cipher type used during -+ * decryption. This prevents us from correct providing -+ * correct statistics through debugfs. -+ */ -+ rxdesc->cipher = CIPHER_NONE; ++ rxdesc->cipher = rt2x00_get_field32(rxwi0, RXWI_W0_UDF); + rxdesc->cipher_status = + rt2x00_get_field32(rxd0, RXD_W0_CIPHER_ERROR); + } @@ -2227,7 +2227,7 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com> + /* + * Mask of 0x8 bit to remove the short preamble flag. + */ -+ if (rxdesc->dev_flags == RATE_MODE_CCK) ++ if (rxdesc->rate_mode == RATE_MODE_CCK) + rxdesc->signal &= ~0x8; + + rxdesc->rssi = @@ -3066,7 +3066,7 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com> +module_exit(rt2800usb_exit); --- /dev/null +++ b/drivers/net/wireless/rt2x00/rt2800usb.h -@@ -0,0 +1,1932 @@ +@@ -0,0 +1,1934 @@ +/* + Copyright (C) 2004 - 2009 rt2x00 SourceForge Project + <http://rt2x00.serialmonkey.com> @@ -4783,6 +4783,7 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com> + */ +#define MCU_SLEEP 0x30 +#define MCU_WAKEUP 0x31 ++#define MCU_RADIO_OFF 0x35 +#define MCU_LED 0x50 +#define MCU_LED_STRENGTH 0x51 +#define MCU_LED_1 0x52 @@ -4790,6 +4791,7 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com> +#define MCU_LED_3 0x54 +#define MCU_RADAR 0x60 +#define MCU_BOOT_SIGNAL 0x72 ++#define MCU_BBP_SIGNAL 0x80 + +/* + * DMA descriptor defines. @@ -5001,15 +5003,15 @@ Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com> +#endif /* RT2800USB_H */ --- a/drivers/net/wireless/rt2x00/rt2x00.h +++ b/drivers/net/wireless/rt2x00/rt2x00.h -@@ -142,6 +142,7 @@ struct rt2x00_chip { - #define RT2860D 0x0681 /* 2.4GHz, 5GHz PCI/CB */ - #define RT2890 0x0701 /* 2.4GHz PCIe */ +@@ -144,6 +144,7 @@ struct rt2x00_chip { #define RT2890D 0x0781 /* 2.4GHz, 5GHz PCIe */ + #define RT2880 0x2880 /* WSOC */ + #define RT3052 0x3052 /* WSOC */ +#define RT2870 0x1600 u16 rf; u32 rev; -@@ -780,6 +781,12 @@ struct rt2x00_dev { +@@ -788,6 +789,12 @@ struct rt2x00_dev { u8 freq_offset; /* |