aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/rt2x00
diff options
context:
space:
mode:
authorHelmut Schaa <helmut.schaa@googlemail.com>2010-10-02 05:26:17 -0400
committerJohn W. Linville <linville@tuxdriver.com>2010-10-05 13:35:25 -0400
commit2a0cfeb826df6751933fd95a797ac18371992c3b (patch)
tree5deb2818a402090138ff3d30e975dec2abee6e0e /drivers/net/wireless/rt2x00
parent1a92795dac419128eb511dce30a6aad672064b88 (diff)
rt2x00: Don't overwrite beacon buffers in pairwise key setup
rt2800 devices use parts of the pariwise key table to store the beacon frames for beacon 6 and 7. To not overwrite the beacon frame buffers limit the number of entries we store in the pairwise key table to 222. Also add some descriptive comments about this shared memory usage. Signed-off-by: Helmut Schaa <helmut.schaa@googlemail.com> Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/rt2x00')
-rw-r--r--drivers/net/wireless/rt2x00/rt2800.h21
-rw-r--r--drivers/net/wireless/rt2x00/rt2800lib.c6
2 files changed, 25 insertions, 2 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2800.h b/drivers/net/wireless/rt2x00/rt2800.h
index 2edc7742a7e..e1583cf5894 100644
--- a/drivers/net/wireless/rt2x00/rt2800.h
+++ b/drivers/net/wireless/rt2x00/rt2800.h
@@ -1435,6 +1435,24 @@
1435 1435
1436/* 1436/*
1437 * Security key table memory. 1437 * Security key table memory.
1438 *
1439 * The pairwise key table shares some memory with the beacon frame
1440 * buffers 6 and 7. That basically means that when beacon 6 & 7
1441 * are used we should only use the reduced pairwise key table which
1442 * has a maximum of 222 entries.
1443 *
1444 * ---------------------------------------------
1445 * |0x4000 | Pairwise Key | Reduced Pairwise |
1446 * | | Table | Key Table |
1447 * | | Size: 256 * 32 | Size: 222 * 32 |
1448 * |0x5BC0 | |-------------------
1449 * | | | Beacon 6 |
1450 * |0x5DC0 | |-------------------
1451 * | | | Beacon 7 |
1452 * |0x5FC0 | |-------------------
1453 * |0x5FFF | |
1454 * --------------------------
1455 *
1438 * MAC_WCID_BASE: 8-bytes (use only 6 bytes) * 256 entry 1456 * MAC_WCID_BASE: 8-bytes (use only 6 bytes) * 256 entry
1439 * PAIRWISE_KEY_TABLE_BASE: 32-byte * 256 entry 1457 * PAIRWISE_KEY_TABLE_BASE: 32-byte * 256 entry
1440 * MAC_IVEIV_TABLE_BASE: 8-byte * 256-entry 1458 * MAC_IVEIV_TABLE_BASE: 8-byte * 256-entry
@@ -1584,7 +1602,8 @@ struct mac_iveiv_entry {
1584 * 2. Extract memory from FCE table for BCN 4~5 1602 * 2. Extract memory from FCE table for BCN 4~5
1585 * 3. Extract memory from Pair-wise key table for BCN 6~7 1603 * 3. Extract memory from Pair-wise key table for BCN 6~7
1586 * It occupied those memory of wcid 238~253 for BCN 6 1604 * It occupied those memory of wcid 238~253 for BCN 6
1587 * and wcid 222~237 for BCN 7 1605 * and wcid 222~237 for BCN 7 (see Security key table memory
1606 * for more info).
1588 * 1607 *
1589 * IMPORTANT NOTE: Not sure why legacy driver does this, 1608 * IMPORTANT NOTE: Not sure why legacy driver does this,
1590 * but HW_BEACON_BASE7 is 0x0200 bytes below HW_BEACON_BASE6. 1609 * but HW_BEACON_BASE7 is 0x0200 bytes below HW_BEACON_BASE6.
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
index c7076deaece..daa32ae4286 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -1031,8 +1031,12 @@ int rt2800_config_pairwise_key(struct rt2x00_dev *rt2x00dev,
1031 * 1 pairwise key is possible per AID, this means that the AID 1031 * 1 pairwise key is possible per AID, this means that the AID
1032 * equals our hw_key_idx. Make sure the WCID starts _after_ the 1032 * equals our hw_key_idx. Make sure the WCID starts _after_ the
1033 * last possible shared key entry. 1033 * last possible shared key entry.
1034 *
1035 * Since parts of the pairwise key table might be shared with
1036 * the beacon frame buffers 6 & 7 we should only write into the
1037 * first 222 entries.
1034 */ 1038 */
1035 if (crypto->aid > (256 - 32)) 1039 if (crypto->aid > (222 - 32))
1036 return -ENOSPC; 1040 return -ENOSPC;
1037 1041
1038 key->hw_key_idx = 32 + crypto->aid; 1042 key->hw_key_idx = 32 + crypto->aid;