summaryrefslogtreecommitdiffstats
path: root/net/mac80211
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2015-06-01 09:36:51 -0400
committerJohannes Berg <johannes.berg@intel.com>2015-06-02 05:16:35 -0400
commitdb388a567ff9600debc2433c1fddf79a8fc38b21 (patch)
treec61ca3afeb1980de84cedde6ee6a74938d6556fe /net/mac80211
parentc9c99f8938e41b878802d5d8481d6f7a212515b0 (diff)
mac80211: move TX PN to public part of key struct
For drivers supporting TSO or similar features, but that still have PN assignment in software, there's a need to have some memory to store the current PN value. As mac80211 already stores this and it's somewhat complicated to add a per-driver area to the key struct (due to the dynamic sizing thereof) it makes sense to just move the TX PN to the keyconf, i.e. the public part of the key struct. As TKIP is more complicated and we won't able to offload it in this way right now (fast-xmit is skipped for TKIP unless the HW does it all, and our hardware needs MMIC calculation in software) I've not moved that for now - it's possible but requires exposing a lot of the internal TKIP state. As an bonus side effect, we can remove a lot of code by assuming the keyseq struct has a certain layout - with BUILD_BUG_ON to verify it. This might also improve performance, since now TX and RX no longer share a cacheline. Reviewed-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/mac80211')
-rw-r--r--net/mac80211/cfg.c59
-rw-r--r--net/mac80211/debugfs_key.c17
-rw-r--r--net/mac80211/key.c80
-rw-r--r--net/mac80211/key.h4
-rw-r--r--net/mac80211/tx.c10
-rw-r--r--net/mac80211/wpa.c10
6 files changed, 38 insertions, 142 deletions
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
index bb9f83640b46..02f48c848ef5 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -361,66 +361,25 @@ static int ieee80211_get_key(struct wiphy *wiphy, struct net_device *dev,
361 break; 361 break;
362 case WLAN_CIPHER_SUITE_CCMP: 362 case WLAN_CIPHER_SUITE_CCMP:
363 case WLAN_CIPHER_SUITE_CCMP_256: 363 case WLAN_CIPHER_SUITE_CCMP_256:
364 if (key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE &&
365 !(key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV)) {
366 drv_get_key_seq(sdata->local, key, &kseq);
367 memcpy(seq, kseq.ccmp.pn, 6);
368 } else {
369 pn64 = atomic64_read(&key->u.ccmp.tx_pn);
370 seq[0] = pn64;
371 seq[1] = pn64 >> 8;
372 seq[2] = pn64 >> 16;
373 seq[3] = pn64 >> 24;
374 seq[4] = pn64 >> 32;
375 seq[5] = pn64 >> 40;
376 }
377 params.seq = seq;
378 params.seq_len = 6;
379 break;
380 case WLAN_CIPHER_SUITE_AES_CMAC: 364 case WLAN_CIPHER_SUITE_AES_CMAC:
381 case WLAN_CIPHER_SUITE_BIP_CMAC_256: 365 case WLAN_CIPHER_SUITE_BIP_CMAC_256:
382 if (key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE && 366 BUILD_BUG_ON(offsetof(typeof(kseq), ccmp) !=
383 !(key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV)) { 367 offsetof(typeof(kseq), aes_cmac));
384 drv_get_key_seq(sdata->local, key, &kseq);
385 memcpy(seq, kseq.aes_cmac.pn, 6);
386 } else {
387 pn64 = atomic64_read(&key->u.aes_cmac.tx_pn);
388 seq[0] = pn64;
389 seq[1] = pn64 >> 8;
390 seq[2] = pn64 >> 16;
391 seq[3] = pn64 >> 24;
392 seq[4] = pn64 >> 32;
393 seq[5] = pn64 >> 40;
394 }
395 params.seq = seq;
396 params.seq_len = 6;
397 break;
398 case WLAN_CIPHER_SUITE_BIP_GMAC_128: 368 case WLAN_CIPHER_SUITE_BIP_GMAC_128:
399 case WLAN_CIPHER_SUITE_BIP_GMAC_256: 369 case WLAN_CIPHER_SUITE_BIP_GMAC_256:
400 if (key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE && 370 BUILD_BUG_ON(offsetof(typeof(kseq), ccmp) !=
401 !(key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV)) { 371 offsetof(typeof(kseq), aes_gmac));
402 drv_get_key_seq(sdata->local, key, &kseq);
403 memcpy(seq, kseq.aes_gmac.pn, 6);
404 } else {
405 pn64 = atomic64_read(&key->u.aes_gmac.tx_pn);
406 seq[0] = pn64;
407 seq[1] = pn64 >> 8;
408 seq[2] = pn64 >> 16;
409 seq[3] = pn64 >> 24;
410 seq[4] = pn64 >> 32;
411 seq[5] = pn64 >> 40;
412 }
413 params.seq = seq;
414 params.seq_len = 6;
415 break;
416 case WLAN_CIPHER_SUITE_GCMP: 372 case WLAN_CIPHER_SUITE_GCMP:
417 case WLAN_CIPHER_SUITE_GCMP_256: 373 case WLAN_CIPHER_SUITE_GCMP_256:
374 BUILD_BUG_ON(offsetof(typeof(kseq), ccmp) !=
375 offsetof(typeof(kseq), gcmp));
376
418 if (key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE && 377 if (key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE &&
419 !(key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV)) { 378 !(key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV)) {
420 drv_get_key_seq(sdata->local, key, &kseq); 379 drv_get_key_seq(sdata->local, key, &kseq);
421 memcpy(seq, kseq.gcmp.pn, 6); 380 memcpy(seq, kseq.ccmp.pn, 6);
422 } else { 381 } else {
423 pn64 = atomic64_read(&key->u.gcmp.tx_pn); 382 pn64 = atomic64_read(&key->conf.tx_pn);
424 seq[0] = pn64; 383 seq[0] = pn64;
425 seq[1] = pn64 >> 8; 384 seq[1] = pn64 >> 8;
426 seq[2] = pn64 >> 16; 385 seq[2] = pn64 >> 16;
diff --git a/net/mac80211/debugfs_key.c b/net/mac80211/debugfs_key.c
index 71ac1b5f4da5..e82bf1e9d7a8 100644
--- a/net/mac80211/debugfs_key.c
+++ b/net/mac80211/debugfs_key.c
@@ -95,28 +95,13 @@ static ssize_t key_tx_spec_read(struct file *file, char __user *userbuf,
95 break; 95 break;
96 case WLAN_CIPHER_SUITE_CCMP: 96 case WLAN_CIPHER_SUITE_CCMP:
97 case WLAN_CIPHER_SUITE_CCMP_256: 97 case WLAN_CIPHER_SUITE_CCMP_256:
98 pn = atomic64_read(&key->u.ccmp.tx_pn);
99 len = scnprintf(buf, sizeof(buf), "%02x%02x%02x%02x%02x%02x\n",
100 (u8)(pn >> 40), (u8)(pn >> 32), (u8)(pn >> 24),
101 (u8)(pn >> 16), (u8)(pn >> 8), (u8)pn);
102 break;
103 case WLAN_CIPHER_SUITE_AES_CMAC: 98 case WLAN_CIPHER_SUITE_AES_CMAC:
104 case WLAN_CIPHER_SUITE_BIP_CMAC_256: 99 case WLAN_CIPHER_SUITE_BIP_CMAC_256:
105 pn = atomic64_read(&key->u.aes_cmac.tx_pn);
106 len = scnprintf(buf, sizeof(buf), "%02x%02x%02x%02x%02x%02x\n",
107 (u8)(pn >> 40), (u8)(pn >> 32), (u8)(pn >> 24),
108 (u8)(pn >> 16), (u8)(pn >> 8), (u8)pn);
109 break;
110 case WLAN_CIPHER_SUITE_BIP_GMAC_128: 100 case WLAN_CIPHER_SUITE_BIP_GMAC_128:
111 case WLAN_CIPHER_SUITE_BIP_GMAC_256: 101 case WLAN_CIPHER_SUITE_BIP_GMAC_256:
112 pn = atomic64_read(&key->u.aes_gmac.tx_pn);
113 len = scnprintf(buf, sizeof(buf), "%02x%02x%02x%02x%02x%02x\n",
114 (u8)(pn >> 40), (u8)(pn >> 32), (u8)(pn >> 24),
115 (u8)(pn >> 16), (u8)(pn >> 8), (u8)pn);
116 break;
117 case WLAN_CIPHER_SUITE_GCMP: 102 case WLAN_CIPHER_SUITE_GCMP:
118 case WLAN_CIPHER_SUITE_GCMP_256: 103 case WLAN_CIPHER_SUITE_GCMP_256:
119 pn = atomic64_read(&key->u.gcmp.tx_pn); 104 pn = atomic64_read(&key->conf.tx_pn);
120 len = scnprintf(buf, sizeof(buf), "%02x%02x%02x%02x%02x%02x\n", 105 len = scnprintf(buf, sizeof(buf), "%02x%02x%02x%02x%02x%02x\n",
121 (u8)(pn >> 40), (u8)(pn >> 32), (u8)(pn >> 24), 106 (u8)(pn >> 40), (u8)(pn >> 32), (u8)(pn >> 24),
122 (u8)(pn >> 16), (u8)(pn >> 8), (u8)pn); 107 (u8)(pn >> 16), (u8)(pn >> 8), (u8)pn);
diff --git a/net/mac80211/key.c b/net/mac80211/key.c
index 2e677376c958..9a4a4bfafdc2 100644
--- a/net/mac80211/key.c
+++ b/net/mac80211/key.c
@@ -832,27 +832,19 @@ void ieee80211_get_key_tx_seq(struct ieee80211_key_conf *keyconf,
832 break; 832 break;
833 case WLAN_CIPHER_SUITE_CCMP: 833 case WLAN_CIPHER_SUITE_CCMP:
834 case WLAN_CIPHER_SUITE_CCMP_256: 834 case WLAN_CIPHER_SUITE_CCMP_256:
835 pn64 = atomic64_read(&key->u.ccmp.tx_pn);
836 seq->ccmp.pn[5] = pn64;
837 seq->ccmp.pn[4] = pn64 >> 8;
838 seq->ccmp.pn[3] = pn64 >> 16;
839 seq->ccmp.pn[2] = pn64 >> 24;
840 seq->ccmp.pn[1] = pn64 >> 32;
841 seq->ccmp.pn[0] = pn64 >> 40;
842 break;
843 case WLAN_CIPHER_SUITE_AES_CMAC: 835 case WLAN_CIPHER_SUITE_AES_CMAC:
844 case WLAN_CIPHER_SUITE_BIP_CMAC_256: 836 case WLAN_CIPHER_SUITE_BIP_CMAC_256:
845 pn64 = atomic64_read(&key->u.aes_cmac.tx_pn); 837 BUILD_BUG_ON(offsetof(typeof(*seq), ccmp) !=
846 seq->ccmp.pn[5] = pn64; 838 offsetof(typeof(*seq), aes_cmac));
847 seq->ccmp.pn[4] = pn64 >> 8;
848 seq->ccmp.pn[3] = pn64 >> 16;
849 seq->ccmp.pn[2] = pn64 >> 24;
850 seq->ccmp.pn[1] = pn64 >> 32;
851 seq->ccmp.pn[0] = pn64 >> 40;
852 break;
853 case WLAN_CIPHER_SUITE_BIP_GMAC_128: 839 case WLAN_CIPHER_SUITE_BIP_GMAC_128:
854 case WLAN_CIPHER_SUITE_BIP_GMAC_256: 840 case WLAN_CIPHER_SUITE_BIP_GMAC_256:
855 pn64 = atomic64_read(&key->u.aes_gmac.tx_pn); 841 BUILD_BUG_ON(offsetof(typeof(*seq), ccmp) !=
842 offsetof(typeof(*seq), aes_gmac));
843 case WLAN_CIPHER_SUITE_GCMP:
844 case WLAN_CIPHER_SUITE_GCMP_256:
845 BUILD_BUG_ON(offsetof(typeof(*seq), ccmp) !=
846 offsetof(typeof(*seq), gcmp));
847 pn64 = atomic64_read(&key->conf.tx_pn);
856 seq->ccmp.pn[5] = pn64; 848 seq->ccmp.pn[5] = pn64;
857 seq->ccmp.pn[4] = pn64 >> 8; 849 seq->ccmp.pn[4] = pn64 >> 8;
858 seq->ccmp.pn[3] = pn64 >> 16; 850 seq->ccmp.pn[3] = pn64 >> 16;
@@ -860,16 +852,6 @@ void ieee80211_get_key_tx_seq(struct ieee80211_key_conf *keyconf,
860 seq->ccmp.pn[1] = pn64 >> 32; 852 seq->ccmp.pn[1] = pn64 >> 32;
861 seq->ccmp.pn[0] = pn64 >> 40; 853 seq->ccmp.pn[0] = pn64 >> 40;
862 break; 854 break;
863 case WLAN_CIPHER_SUITE_GCMP:
864 case WLAN_CIPHER_SUITE_GCMP_256:
865 pn64 = atomic64_read(&key->u.gcmp.tx_pn);
866 seq->gcmp.pn[5] = pn64;
867 seq->gcmp.pn[4] = pn64 >> 8;
868 seq->gcmp.pn[3] = pn64 >> 16;
869 seq->gcmp.pn[2] = pn64 >> 24;
870 seq->gcmp.pn[1] = pn64 >> 32;
871 seq->gcmp.pn[0] = pn64 >> 40;
872 break;
873 default: 855 default:
874 WARN_ON(1); 856 WARN_ON(1);
875 } 857 }
@@ -944,43 +926,25 @@ void ieee80211_set_key_tx_seq(struct ieee80211_key_conf *keyconf,
944 break; 926 break;
945 case WLAN_CIPHER_SUITE_CCMP: 927 case WLAN_CIPHER_SUITE_CCMP:
946 case WLAN_CIPHER_SUITE_CCMP_256: 928 case WLAN_CIPHER_SUITE_CCMP_256:
947 pn64 = (u64)seq->ccmp.pn[5] |
948 ((u64)seq->ccmp.pn[4] << 8) |
949 ((u64)seq->ccmp.pn[3] << 16) |
950 ((u64)seq->ccmp.pn[2] << 24) |
951 ((u64)seq->ccmp.pn[1] << 32) |
952 ((u64)seq->ccmp.pn[0] << 40);
953 atomic64_set(&key->u.ccmp.tx_pn, pn64);
954 break;
955 case WLAN_CIPHER_SUITE_AES_CMAC: 929 case WLAN_CIPHER_SUITE_AES_CMAC:
956 case WLAN_CIPHER_SUITE_BIP_CMAC_256: 930 case WLAN_CIPHER_SUITE_BIP_CMAC_256:
957 pn64 = (u64)seq->aes_cmac.pn[5] | 931 BUILD_BUG_ON(offsetof(typeof(*seq), ccmp) !=
958 ((u64)seq->aes_cmac.pn[4] << 8) | 932 offsetof(typeof(*seq), aes_cmac));
959 ((u64)seq->aes_cmac.pn[3] << 16) |
960 ((u64)seq->aes_cmac.pn[2] << 24) |
961 ((u64)seq->aes_cmac.pn[1] << 32) |
962 ((u64)seq->aes_cmac.pn[0] << 40);
963 atomic64_set(&key->u.aes_cmac.tx_pn, pn64);
964 break;
965 case WLAN_CIPHER_SUITE_BIP_GMAC_128: 933 case WLAN_CIPHER_SUITE_BIP_GMAC_128:
966 case WLAN_CIPHER_SUITE_BIP_GMAC_256: 934 case WLAN_CIPHER_SUITE_BIP_GMAC_256:
967 pn64 = (u64)seq->aes_gmac.pn[5] | 935 BUILD_BUG_ON(offsetof(typeof(*seq), ccmp) !=
968 ((u64)seq->aes_gmac.pn[4] << 8) | 936 offsetof(typeof(*seq), aes_gmac));
969 ((u64)seq->aes_gmac.pn[3] << 16) |
970 ((u64)seq->aes_gmac.pn[2] << 24) |
971 ((u64)seq->aes_gmac.pn[1] << 32) |
972 ((u64)seq->aes_gmac.pn[0] << 40);
973 atomic64_set(&key->u.aes_gmac.tx_pn, pn64);
974 break;
975 case WLAN_CIPHER_SUITE_GCMP: 937 case WLAN_CIPHER_SUITE_GCMP:
976 case WLAN_CIPHER_SUITE_GCMP_256: 938 case WLAN_CIPHER_SUITE_GCMP_256:
977 pn64 = (u64)seq->gcmp.pn[5] | 939 BUILD_BUG_ON(offsetof(typeof(*seq), ccmp) !=
978 ((u64)seq->gcmp.pn[4] << 8) | 940 offsetof(typeof(*seq), gcmp));
979 ((u64)seq->gcmp.pn[3] << 16) | 941 pn64 = (u64)seq->ccmp.pn[5] |
980 ((u64)seq->gcmp.pn[2] << 24) | 942 ((u64)seq->ccmp.pn[4] << 8) |
981 ((u64)seq->gcmp.pn[1] << 32) | 943 ((u64)seq->ccmp.pn[3] << 16) |
982 ((u64)seq->gcmp.pn[0] << 40); 944 ((u64)seq->ccmp.pn[2] << 24) |
983 atomic64_set(&key->u.gcmp.tx_pn, pn64); 945 ((u64)seq->ccmp.pn[1] << 32) |
946 ((u64)seq->ccmp.pn[0] << 40);
947 atomic64_set(&key->conf.tx_pn, pn64);
984 break; 948 break;
985 default: 949 default:
986 WARN_ON(1); 950 WARN_ON(1);
diff --git a/net/mac80211/key.h b/net/mac80211/key.h
index df430a618764..ac747e442139 100644
--- a/net/mac80211/key.h
+++ b/net/mac80211/key.h
@@ -77,7 +77,6 @@ struct ieee80211_key {
77 u32 mic_failures; 77 u32 mic_failures;
78 } tkip; 78 } tkip;
79 struct { 79 struct {
80 atomic64_t tx_pn;
81 /* 80 /*
82 * Last received packet number. The first 81 * Last received packet number. The first
83 * IEEE80211_NUM_TIDS counters are used with Data 82 * IEEE80211_NUM_TIDS counters are used with Data
@@ -89,21 +88,18 @@ struct ieee80211_key {
89 u32 replays; /* dot11RSNAStatsCCMPReplays */ 88 u32 replays; /* dot11RSNAStatsCCMPReplays */
90 } ccmp; 89 } ccmp;
91 struct { 90 struct {
92 atomic64_t tx_pn;
93 u8 rx_pn[IEEE80211_CMAC_PN_LEN]; 91 u8 rx_pn[IEEE80211_CMAC_PN_LEN];
94 struct crypto_cipher *tfm; 92 struct crypto_cipher *tfm;
95 u32 replays; /* dot11RSNAStatsCMACReplays */ 93 u32 replays; /* dot11RSNAStatsCMACReplays */
96 u32 icverrors; /* dot11RSNAStatsCMACICVErrors */ 94 u32 icverrors; /* dot11RSNAStatsCMACICVErrors */
97 } aes_cmac; 95 } aes_cmac;
98 struct { 96 struct {
99 atomic64_t tx_pn;
100 u8 rx_pn[IEEE80211_GMAC_PN_LEN]; 97 u8 rx_pn[IEEE80211_GMAC_PN_LEN];
101 struct crypto_aead *tfm; 98 struct crypto_aead *tfm;
102 u32 replays; /* dot11RSNAStatsCMACReplays */ 99 u32 replays; /* dot11RSNAStatsCMACReplays */
103 u32 icverrors; /* dot11RSNAStatsCMACICVErrors */ 100 u32 icverrors; /* dot11RSNAStatsCMACICVErrors */
104 } aes_gmac; 101 } aes_gmac;
105 struct { 102 struct {
106 atomic64_t tx_pn;
107 /* Last received packet number. The first 103 /* Last received packet number. The first
108 * IEEE80211_NUM_TIDS counters are used with Data 104 * IEEE80211_NUM_TIDS counters are used with Data
109 * frames and the last counter is used with Robust 105 * frames and the last counter is used with Robust
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index 8df134213adf..dbef1b881b3d 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -2813,17 +2813,9 @@ static bool ieee80211_xmit_fast(struct ieee80211_sub_if_data *sdata,
2813 switch (fast_tx->key->conf.cipher) { 2813 switch (fast_tx->key->conf.cipher) {
2814 case WLAN_CIPHER_SUITE_CCMP: 2814 case WLAN_CIPHER_SUITE_CCMP:
2815 case WLAN_CIPHER_SUITE_CCMP_256: 2815 case WLAN_CIPHER_SUITE_CCMP_256:
2816 pn = atomic64_inc_return(&fast_tx->key->u.ccmp.tx_pn);
2817 crypto_hdr[0] = pn;
2818 crypto_hdr[1] = pn >> 8;
2819 crypto_hdr[4] = pn >> 16;
2820 crypto_hdr[5] = pn >> 24;
2821 crypto_hdr[6] = pn >> 32;
2822 crypto_hdr[7] = pn >> 40;
2823 break;
2824 case WLAN_CIPHER_SUITE_GCMP: 2816 case WLAN_CIPHER_SUITE_GCMP:
2825 case WLAN_CIPHER_SUITE_GCMP_256: 2817 case WLAN_CIPHER_SUITE_GCMP_256:
2826 pn = atomic64_inc_return(&fast_tx->key->u.gcmp.tx_pn); 2818 pn = atomic64_inc_return(&fast_tx->key->conf.tx_pn);
2827 crypto_hdr[0] = pn; 2819 crypto_hdr[0] = pn;
2828 crypto_hdr[1] = pn >> 8; 2820 crypto_hdr[1] = pn >> 8;
2829 crypto_hdr[4] = pn >> 16; 2821 crypto_hdr[4] = pn >> 16;
diff --git a/net/mac80211/wpa.c b/net/mac80211/wpa.c
index 9d63d93c836e..943f7606527e 100644
--- a/net/mac80211/wpa.c
+++ b/net/mac80211/wpa.c
@@ -444,7 +444,7 @@ static int ccmp_encrypt_skb(struct ieee80211_tx_data *tx, struct sk_buff *skb,
444 hdr = (struct ieee80211_hdr *) pos; 444 hdr = (struct ieee80211_hdr *) pos;
445 pos += hdrlen; 445 pos += hdrlen;
446 446
447 pn64 = atomic64_inc_return(&key->u.ccmp.tx_pn); 447 pn64 = atomic64_inc_return(&key->conf.tx_pn);
448 448
449 pn[5] = pn64; 449 pn[5] = pn64;
450 pn[4] = pn64 >> 8; 450 pn[4] = pn64 >> 8;
@@ -670,7 +670,7 @@ static int gcmp_encrypt_skb(struct ieee80211_tx_data *tx, struct sk_buff *skb)
670 hdr = (struct ieee80211_hdr *)pos; 670 hdr = (struct ieee80211_hdr *)pos;
671 pos += hdrlen; 671 pos += hdrlen;
672 672
673 pn64 = atomic64_inc_return(&key->u.gcmp.tx_pn); 673 pn64 = atomic64_inc_return(&key->conf.tx_pn);
674 674
675 pn[5] = pn64; 675 pn[5] = pn64;
676 pn[4] = pn64 >> 8; 676 pn[4] = pn64 >> 8;
@@ -940,7 +940,7 @@ ieee80211_crypto_aes_cmac_encrypt(struct ieee80211_tx_data *tx)
940 mmie->key_id = cpu_to_le16(key->conf.keyidx); 940 mmie->key_id = cpu_to_le16(key->conf.keyidx);
941 941
942 /* PN = PN + 1 */ 942 /* PN = PN + 1 */
943 pn64 = atomic64_inc_return(&key->u.aes_cmac.tx_pn); 943 pn64 = atomic64_inc_return(&key->conf.tx_pn);
944 944
945 bip_ipn_set64(mmie->sequence_number, pn64); 945 bip_ipn_set64(mmie->sequence_number, pn64);
946 946
@@ -984,7 +984,7 @@ ieee80211_crypto_aes_cmac_256_encrypt(struct ieee80211_tx_data *tx)
984 mmie->key_id = cpu_to_le16(key->conf.keyidx); 984 mmie->key_id = cpu_to_le16(key->conf.keyidx);
985 985
986 /* PN = PN + 1 */ 986 /* PN = PN + 1 */
987 pn64 = atomic64_inc_return(&key->u.aes_cmac.tx_pn); 987 pn64 = atomic64_inc_return(&key->conf.tx_pn);
988 988
989 bip_ipn_set64(mmie->sequence_number, pn64); 989 bip_ipn_set64(mmie->sequence_number, pn64);
990 990
@@ -1129,7 +1129,7 @@ ieee80211_crypto_aes_gmac_encrypt(struct ieee80211_tx_data *tx)
1129 mmie->key_id = cpu_to_le16(key->conf.keyidx); 1129 mmie->key_id = cpu_to_le16(key->conf.keyidx);
1130 1130
1131 /* PN = PN + 1 */ 1131 /* PN = PN + 1 */
1132 pn64 = atomic64_inc_return(&key->u.aes_gmac.tx_pn); 1132 pn64 = atomic64_inc_return(&key->conf.tx_pn);
1133 1133
1134 bip_ipn_set64(mmie->sequence_number, pn64); 1134 bip_ipn_set64(mmie->sequence_number, pn64);
1135 1135