diff options
Diffstat (limited to 'drivers/net/wireless/rt2x00/rt2500usb.c')
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2500usb.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2500usb.c b/drivers/net/wireless/rt2x00/rt2500usb.c index 242d59558b79..cdaf93f48263 100644 --- a/drivers/net/wireless/rt2x00/rt2500usb.c +++ b/drivers/net/wireless/rt2x00/rt2500usb.c | |||
@@ -351,6 +351,14 @@ static int rt2500usb_config_key(struct rt2x00_dev *rt2x00dev, | |||
351 | 351 | ||
352 | if (crypto->cmd == SET_KEY) { | 352 | if (crypto->cmd == SET_KEY) { |
353 | /* | 353 | /* |
354 | * Disallow to set WEP key other than with index 0, | ||
355 | * it is known that not work at least on some hardware. | ||
356 | * SW crypto will be used in that case. | ||
357 | */ | ||
358 | if (key->alg == ALG_WEP && key->keyidx != 0) | ||
359 | return -EOPNOTSUPP; | ||
360 | |||
361 | /* | ||
354 | * Pairwise key will always be entry 0, but this | 362 | * Pairwise key will always be entry 0, but this |
355 | * could collide with a shared key on the same | 363 | * could collide with a shared key on the same |
356 | * position... | 364 | * position... |
@@ -376,7 +384,7 @@ static int rt2500usb_config_key(struct rt2x00_dev *rt2x00dev, | |||
376 | if (key->hw_key_idx > 0 && crypto->cipher != curr_cipher) | 384 | if (key->hw_key_idx > 0 && crypto->cipher != curr_cipher) |
377 | return -EOPNOTSUPP; | 385 | return -EOPNOTSUPP; |
378 | 386 | ||
379 | rt2500usb_register_multiwrite(rt2x00dev, reg, | 387 | rt2500usb_register_multiwrite(rt2x00dev, KEY_ENTRY(key->hw_key_idx), |
380 | crypto->key, sizeof(crypto->key)); | 388 | crypto->key, sizeof(crypto->key)); |
381 | 389 | ||
382 | /* | 390 | /* |
@@ -817,6 +825,7 @@ static int rt2500usb_init_registers(struct rt2x00_dev *rt2x00dev) | |||
817 | rt2500usb_register_write(rt2x00dev, MAC_CSR8, reg); | 825 | rt2500usb_register_write(rt2x00dev, MAC_CSR8, reg); |
818 | 826 | ||
819 | rt2500usb_register_read(rt2x00dev, TXRX_CSR0, ®); | 827 | rt2500usb_register_read(rt2x00dev, TXRX_CSR0, ®); |
828 | rt2x00_set_field16(®, TXRX_CSR0_ALGORITHM, CIPHER_NONE); | ||
820 | rt2x00_set_field16(®, TXRX_CSR0_IV_OFFSET, IEEE80211_HEADER); | 829 | rt2x00_set_field16(®, TXRX_CSR0_IV_OFFSET, IEEE80211_HEADER); |
821 | rt2x00_set_field16(®, TXRX_CSR0_KEY_ID, 0); | 830 | rt2x00_set_field16(®, TXRX_CSR0_KEY_ID, 0); |
822 | rt2500usb_register_write(rt2x00dev, TXRX_CSR0, reg); | 831 | rt2500usb_register_write(rt2x00dev, TXRX_CSR0, reg); |