aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/wireless/ath/ath5k/mac80211-ops.c1
-rw-r--r--drivers/net/wireless/rt2x00/rt2800lib.c16
-rw-r--r--drivers/net/wireless/rt2x00/rt2800lib.h5
-rw-r--r--drivers/net/wireless/rt2x00/rt2800pci.c2
-rw-r--r--drivers/net/wireless/rt2x00/rt2800soc.c2
-rw-r--r--drivers/net/wireless/rt2x00/rt2800usb.c2
-rw-r--r--include/net/mac80211.h79
-rw-r--r--net/mac80211/cfg.c91
-rw-r--r--net/mac80211/driver-ops.h11
-rw-r--r--net/mac80211/trace.h42
10 files changed, 143 insertions, 108 deletions
diff --git a/drivers/net/wireless/ath/ath5k/mac80211-ops.c b/drivers/net/wireless/ath/ath5k/mac80211-ops.c
index 0210630972d6..dc44cfef7517 100644
--- a/drivers/net/wireless/ath/ath5k/mac80211-ops.c
+++ b/drivers/net/wireless/ath/ath5k/mac80211-ops.c
@@ -798,7 +798,6 @@ const struct ieee80211_ops ath5k_hw_ops = {
798 .sw_scan_start = ath5k_sw_scan_start, 798 .sw_scan_start = ath5k_sw_scan_start,
799 .sw_scan_complete = ath5k_sw_scan_complete, 799 .sw_scan_complete = ath5k_sw_scan_complete,
800 .get_stats = ath5k_get_stats, 800 .get_stats = ath5k_get_stats,
801 /* .get_tkip_seq = not implemented */
802 /* .set_frag_threshold = not implemented */ 801 /* .set_frag_threshold = not implemented */
803 /* .set_rts_threshold = not implemented */ 802 /* .set_rts_threshold = not implemented */
804 /* .sta_add = not implemented */ 803 /* .sta_add = not implemented */
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
index 09135192c516..dfeca8355b22 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -7817,21 +7817,25 @@ EXPORT_SYMBOL_GPL(rt2800_probe_hw);
7817/* 7817/*
7818 * IEEE80211 stack callback functions. 7818 * IEEE80211 stack callback functions.
7819 */ 7819 */
7820void rt2800_get_tkip_seq(struct ieee80211_hw *hw, u8 hw_key_idx, u32 *iv32, 7820void rt2800_get_key_seq(struct ieee80211_hw *hw,
7821 u16 *iv16) 7821 struct ieee80211_key_conf *key,
7822 struct ieee80211_key_seq *seq)
7822{ 7823{
7823 struct rt2x00_dev *rt2x00dev = hw->priv; 7824 struct rt2x00_dev *rt2x00dev = hw->priv;
7824 struct mac_iveiv_entry iveiv_entry; 7825 struct mac_iveiv_entry iveiv_entry;
7825 u32 offset; 7826 u32 offset;
7826 7827
7827 offset = MAC_IVEIV_ENTRY(hw_key_idx); 7828 if (key->cipher != WLAN_CIPHER_SUITE_TKIP)
7829 return;
7830
7831 offset = MAC_IVEIV_ENTRY(key->hw_key_idx);
7828 rt2800_register_multiread(rt2x00dev, offset, 7832 rt2800_register_multiread(rt2x00dev, offset,
7829 &iveiv_entry, sizeof(iveiv_entry)); 7833 &iveiv_entry, sizeof(iveiv_entry));
7830 7834
7831 memcpy(iv16, &iveiv_entry.iv[0], sizeof(*iv16)); 7835 memcpy(&seq->tkip.iv16, &iveiv_entry.iv[0], 2);
7832 memcpy(iv32, &iveiv_entry.iv[4], sizeof(*iv32)); 7836 memcpy(&seq->tkip.iv32, &iveiv_entry.iv[4], 4);
7833} 7837}
7834EXPORT_SYMBOL_GPL(rt2800_get_tkip_seq); 7838EXPORT_SYMBOL_GPL(rt2800_get_key_seq);
7835 7839
7836int rt2800_set_rts_threshold(struct ieee80211_hw *hw, u32 value) 7840int rt2800_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
7837{ 7841{
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.h b/drivers/net/wireless/rt2x00/rt2800lib.h
index 3019db637a4b..1609b8a7f7eb 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.h
+++ b/drivers/net/wireless/rt2x00/rt2800lib.h
@@ -209,8 +209,9 @@ int rt2800_read_eeprom_efuse(struct rt2x00_dev *rt2x00dev);
209 209
210int rt2800_probe_hw(struct rt2x00_dev *rt2x00dev); 210int rt2800_probe_hw(struct rt2x00_dev *rt2x00dev);
211 211
212void rt2800_get_tkip_seq(struct ieee80211_hw *hw, u8 hw_key_idx, u32 *iv32, 212void rt2800_get_key_seq(struct ieee80211_hw *hw,
213 u16 *iv16); 213 struct ieee80211_key_conf *key,
214 struct ieee80211_key_seq *seq);
214int rt2800_set_rts_threshold(struct ieee80211_hw *hw, u32 value); 215int rt2800_set_rts_threshold(struct ieee80211_hw *hw, u32 value);
215int rt2800_conf_tx(struct ieee80211_hw *hw, 216int rt2800_conf_tx(struct ieee80211_hw *hw,
216 struct ieee80211_vif *vif, u16 queue_idx, 217 struct ieee80211_vif *vif, u16 queue_idx,
diff --git a/drivers/net/wireless/rt2x00/rt2800pci.c b/drivers/net/wireless/rt2x00/rt2800pci.c
index cc1b3cc73c5a..0af22573a2eb 100644
--- a/drivers/net/wireless/rt2x00/rt2800pci.c
+++ b/drivers/net/wireless/rt2x00/rt2800pci.c
@@ -309,7 +309,7 @@ static const struct ieee80211_ops rt2800pci_mac80211_ops = {
309 .sw_scan_start = rt2x00mac_sw_scan_start, 309 .sw_scan_start = rt2x00mac_sw_scan_start,
310 .sw_scan_complete = rt2x00mac_sw_scan_complete, 310 .sw_scan_complete = rt2x00mac_sw_scan_complete,
311 .get_stats = rt2x00mac_get_stats, 311 .get_stats = rt2x00mac_get_stats,
312 .get_tkip_seq = rt2800_get_tkip_seq, 312 .get_key_seq = rt2800_get_key_seq,
313 .set_rts_threshold = rt2800_set_rts_threshold, 313 .set_rts_threshold = rt2800_set_rts_threshold,
314 .sta_add = rt2x00mac_sta_add, 314 .sta_add = rt2x00mac_sta_add,
315 .sta_remove = rt2x00mac_sta_remove, 315 .sta_remove = rt2x00mac_sta_remove,
diff --git a/drivers/net/wireless/rt2x00/rt2800soc.c b/drivers/net/wireless/rt2x00/rt2800soc.c
index aaa7aa4cad9d..a985a5a7945e 100644
--- a/drivers/net/wireless/rt2x00/rt2800soc.c
+++ b/drivers/net/wireless/rt2x00/rt2800soc.c
@@ -148,7 +148,7 @@ static const struct ieee80211_ops rt2800soc_mac80211_ops = {
148 .sw_scan_start = rt2x00mac_sw_scan_start, 148 .sw_scan_start = rt2x00mac_sw_scan_start,
149 .sw_scan_complete = rt2x00mac_sw_scan_complete, 149 .sw_scan_complete = rt2x00mac_sw_scan_complete,
150 .get_stats = rt2x00mac_get_stats, 150 .get_stats = rt2x00mac_get_stats,
151 .get_tkip_seq = rt2800_get_tkip_seq, 151 .get_key_seq = rt2800_get_key_seq,
152 .set_rts_threshold = rt2800_set_rts_threshold, 152 .set_rts_threshold = rt2800_set_rts_threshold,
153 .sta_add = rt2x00mac_sta_add, 153 .sta_add = rt2x00mac_sta_add,
154 .sta_remove = rt2x00mac_sta_remove, 154 .sta_remove = rt2x00mac_sta_remove,
diff --git a/drivers/net/wireless/rt2x00/rt2800usb.c b/drivers/net/wireless/rt2x00/rt2800usb.c
index 6ec2466b52b6..5932306084fd 100644
--- a/drivers/net/wireless/rt2x00/rt2800usb.c
+++ b/drivers/net/wireless/rt2x00/rt2800usb.c
@@ -835,7 +835,7 @@ static const struct ieee80211_ops rt2800usb_mac80211_ops = {
835 .sw_scan_start = rt2x00mac_sw_scan_start, 835 .sw_scan_start = rt2x00mac_sw_scan_start,
836 .sw_scan_complete = rt2x00mac_sw_scan_complete, 836 .sw_scan_complete = rt2x00mac_sw_scan_complete,
837 .get_stats = rt2x00mac_get_stats, 837 .get_stats = rt2x00mac_get_stats,
838 .get_tkip_seq = rt2800_get_tkip_seq, 838 .get_key_seq = rt2800_get_key_seq,
839 .set_rts_threshold = rt2800_set_rts_threshold, 839 .set_rts_threshold = rt2800_set_rts_threshold,
840 .sta_add = rt2x00mac_sta_add, 840 .sta_add = rt2x00mac_sta_add,
841 .sta_remove = rt2x00mac_sta_remove, 841 .sta_remove = rt2x00mac_sta_remove,
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index 8a3a7d7cda26..47b39c26fc05 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -1502,6 +1502,40 @@ struct ieee80211_key_conf {
1502}; 1502};
1503 1503
1504/** 1504/**
1505 * struct ieee80211_key_seq - key sequence counter
1506 *
1507 * @tkip: TKIP data, containing IV32 and IV16 in host byte order
1508 * @ccmp: PN data, most significant byte first (big endian,
1509 * reverse order than in packet)
1510 * @aes_cmac: PN data, most significant byte first (big endian,
1511 * reverse order than in packet)
1512 * @aes_gmac: PN data, most significant byte first (big endian,
1513 * reverse order than in packet)
1514 * @gcmp: PN data, most significant byte first (big endian,
1515 * reverse order than in packet)
1516 */
1517struct ieee80211_key_seq {
1518 union {
1519 struct {
1520 u32 iv32;
1521 u16 iv16;
1522 } tkip;
1523 struct {
1524 u8 pn[6];
1525 } ccmp;
1526 struct {
1527 u8 pn[6];
1528 } aes_cmac;
1529 struct {
1530 u8 pn[6];
1531 } aes_gmac;
1532 struct {
1533 u8 pn[6];
1534 } gcmp;
1535 };
1536};
1537
1538/**
1505 * struct ieee80211_cipher_scheme - cipher scheme 1539 * struct ieee80211_cipher_scheme - cipher scheme
1506 * 1540 *
1507 * This structure contains a cipher scheme information defining 1541 * This structure contains a cipher scheme information defining
@@ -2836,9 +2870,9 @@ enum ieee80211_reconfig_type {
2836 * Returns zero if statistics are available. 2870 * Returns zero if statistics are available.
2837 * The callback can sleep. 2871 * The callback can sleep.
2838 * 2872 *
2839 * @get_tkip_seq: If your device implements TKIP encryption in hardware this 2873 * @get_key_seq: If your device implements encryption in hardware and does
2840 * callback should be provided to read the TKIP transmit IVs (both IV32 2874 * IV/PN assignment then this callback should be provided to read the
2841 * and IV16) for the given key from hardware. 2875 * IV/PN for the given key from hardware.
2842 * The callback must be atomic. 2876 * The callback must be atomic.
2843 * 2877 *
2844 * @set_frag_threshold: Configuration of fragmentation threshold. Assign this 2878 * @set_frag_threshold: Configuration of fragmentation threshold. Assign this
@@ -3237,8 +3271,9 @@ struct ieee80211_ops {
3237 struct ieee80211_vif *vif); 3271 struct ieee80211_vif *vif);
3238 int (*get_stats)(struct ieee80211_hw *hw, 3272 int (*get_stats)(struct ieee80211_hw *hw,
3239 struct ieee80211_low_level_stats *stats); 3273 struct ieee80211_low_level_stats *stats);
3240 void (*get_tkip_seq)(struct ieee80211_hw *hw, u8 hw_key_idx, 3274 void (*get_key_seq)(struct ieee80211_hw *hw,
3241 u32 *iv32, u16 *iv16); 3275 struct ieee80211_key_conf *key,
3276 struct ieee80211_key_seq *seq);
3242 int (*set_frag_threshold)(struct ieee80211_hw *hw, u32 value); 3277 int (*set_frag_threshold)(struct ieee80211_hw *hw, u32 value);
3243 int (*set_rts_threshold)(struct ieee80211_hw *hw, u32 value); 3278 int (*set_rts_threshold)(struct ieee80211_hw *hw, u32 value);
3244 int (*sta_add)(struct ieee80211_hw *hw, struct ieee80211_vif *vif, 3279 int (*sta_add)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
@@ -4273,40 +4308,6 @@ void ieee80211_aes_cmac_calculate_k1_k2(struct ieee80211_key_conf *keyconf,
4273 u8 *k1, u8 *k2); 4308 u8 *k1, u8 *k2);
4274 4309
4275/** 4310/**
4276 * struct ieee80211_key_seq - key sequence counter
4277 *
4278 * @tkip: TKIP data, containing IV32 and IV16 in host byte order
4279 * @ccmp: PN data, most significant byte first (big endian,
4280 * reverse order than in packet)
4281 * @aes_cmac: PN data, most significant byte first (big endian,
4282 * reverse order than in packet)
4283 * @aes_gmac: PN data, most significant byte first (big endian,
4284 * reverse order than in packet)
4285 * @gcmp: PN data, most significant byte first (big endian,
4286 * reverse order than in packet)
4287 */
4288struct ieee80211_key_seq {
4289 union {
4290 struct {
4291 u32 iv32;
4292 u16 iv16;
4293 } tkip;
4294 struct {
4295 u8 pn[6];
4296 } ccmp;
4297 struct {
4298 u8 pn[6];
4299 } aes_cmac;
4300 struct {
4301 u8 pn[6];
4302 } aes_gmac;
4303 struct {
4304 u8 pn[6];
4305 } gcmp;
4306 };
4307};
4308
4309/**
4310 * ieee80211_get_key_tx_seq - get key TX sequence counter 4311 * ieee80211_get_key_tx_seq - get key TX sequence counter
4311 * 4312 *
4312 * @keyconf: the parameter passed with the set key 4313 * @keyconf: the parameter passed with the set key
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
index 72a0178af737..dd7014b09396 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -312,6 +312,7 @@ static int ieee80211_get_key(struct wiphy *wiphy, struct net_device *dev,
312 u32 iv32; 312 u32 iv32;
313 u16 iv16; 313 u16 iv16;
314 int err = -ENOENT; 314 int err = -ENOENT;
315 struct ieee80211_key_seq kseq = {};
315 316
316 sdata = IEEE80211_DEV_TO_SUB_IF(dev); 317 sdata = IEEE80211_DEV_TO_SUB_IF(dev);
317 318
@@ -342,10 +343,12 @@ static int ieee80211_get_key(struct wiphy *wiphy, struct net_device *dev,
342 iv32 = key->u.tkip.tx.iv32; 343 iv32 = key->u.tkip.tx.iv32;
343 iv16 = key->u.tkip.tx.iv16; 344 iv16 = key->u.tkip.tx.iv16;
344 345
345 if (key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE) 346 if (key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE &&
346 drv_get_tkip_seq(sdata->local, 347 !(key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV)) {
347 key->conf.hw_key_idx, 348 drv_get_key_seq(sdata->local, key, &kseq);
348 &iv32, &iv16); 349 iv32 = kseq.tkip.iv32;
350 iv16 = kseq.tkip.iv16;
351 }
349 352
350 seq[0] = iv16 & 0xff; 353 seq[0] = iv16 & 0xff;
351 seq[1] = (iv16 >> 8) & 0xff; 354 seq[1] = (iv16 >> 8) & 0xff;
@@ -358,49 +361,73 @@ static int ieee80211_get_key(struct wiphy *wiphy, struct net_device *dev,
358 break; 361 break;
359 case WLAN_CIPHER_SUITE_CCMP: 362 case WLAN_CIPHER_SUITE_CCMP:
360 case WLAN_CIPHER_SUITE_CCMP_256: 363 case WLAN_CIPHER_SUITE_CCMP_256:
361 pn64 = atomic64_read(&key->u.ccmp.tx_pn); 364 if (key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE &&
362 seq[0] = pn64; 365 !(key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV)) {
363 seq[1] = pn64 >> 8; 366 drv_get_key_seq(sdata->local, key, &kseq);
364 seq[2] = pn64 >> 16; 367 memcpy(seq, kseq.ccmp.pn, 6);
365 seq[3] = pn64 >> 24; 368 } else {
366 seq[4] = pn64 >> 32; 369 pn64 = atomic64_read(&key->u.ccmp.tx_pn);
367 seq[5] = pn64 >> 40; 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 }
368 params.seq = seq; 377 params.seq = seq;
369 params.seq_len = 6; 378 params.seq_len = 6;
370 break; 379 break;
371 case WLAN_CIPHER_SUITE_AES_CMAC: 380 case WLAN_CIPHER_SUITE_AES_CMAC:
372 case WLAN_CIPHER_SUITE_BIP_CMAC_256: 381 case WLAN_CIPHER_SUITE_BIP_CMAC_256:
373 pn64 = atomic64_read(&key->u.aes_cmac.tx_pn); 382 if (key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE &&
374 seq[0] = pn64; 383 !(key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV)) {
375 seq[1] = pn64 >> 8; 384 drv_get_key_seq(sdata->local, key, &kseq);
376 seq[2] = pn64 >> 16; 385 memcpy(seq, kseq.aes_cmac.pn, 6);
377 seq[3] = pn64 >> 24; 386 } else {
378 seq[4] = pn64 >> 32; 387 pn64 = atomic64_read(&key->u.aes_cmac.tx_pn);
379 seq[5] = pn64 >> 40; 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 }
380 params.seq = seq; 395 params.seq = seq;
381 params.seq_len = 6; 396 params.seq_len = 6;
382 break; 397 break;
383 case WLAN_CIPHER_SUITE_BIP_GMAC_128: 398 case WLAN_CIPHER_SUITE_BIP_GMAC_128:
384 case WLAN_CIPHER_SUITE_BIP_GMAC_256: 399 case WLAN_CIPHER_SUITE_BIP_GMAC_256:
385 pn64 = atomic64_read(&key->u.aes_gmac.tx_pn); 400 if (key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE &&
386 seq[0] = pn64; 401 !(key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV)) {
387 seq[1] = pn64 >> 8; 402 drv_get_key_seq(sdata->local, key, &kseq);
388 seq[2] = pn64 >> 16; 403 memcpy(seq, kseq.aes_gmac.pn, 6);
389 seq[3] = pn64 >> 24; 404 } else {
390 seq[4] = pn64 >> 32; 405 pn64 = atomic64_read(&key->u.aes_gmac.tx_pn);
391 seq[5] = pn64 >> 40; 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 }
392 params.seq = seq; 413 params.seq = seq;
393 params.seq_len = 6; 414 params.seq_len = 6;
394 break; 415 break;
395 case WLAN_CIPHER_SUITE_GCMP: 416 case WLAN_CIPHER_SUITE_GCMP:
396 case WLAN_CIPHER_SUITE_GCMP_256: 417 case WLAN_CIPHER_SUITE_GCMP_256:
397 pn64 = atomic64_read(&key->u.gcmp.tx_pn); 418 if (key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE &&
398 seq[0] = pn64; 419 !(key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV)) {
399 seq[1] = pn64 >> 8; 420 drv_get_key_seq(sdata->local, key, &kseq);
400 seq[2] = pn64 >> 16; 421 memcpy(seq, kseq.gcmp.pn, 6);
401 seq[3] = pn64 >> 24; 422 } else {
402 seq[4] = pn64 >> 32; 423 pn64 = atomic64_read(&key->u.gcmp.tx_pn);
403 seq[5] = pn64 >> 40; 424 seq[0] = pn64;
425 seq[1] = pn64 >> 8;
426 seq[2] = pn64 >> 16;
427 seq[3] = pn64 >> 24;
428 seq[4] = pn64 >> 32;
429 seq[5] = pn64 >> 40;
430 }
404 params.seq = seq; 431 params.seq = seq;
405 params.seq_len = 6; 432 params.seq_len = 6;
406 break; 433 break;
diff --git a/net/mac80211/driver-ops.h b/net/mac80211/driver-ops.h
index 26e1ca8a474a..c01e681b90fb 100644
--- a/net/mac80211/driver-ops.h
+++ b/net/mac80211/driver-ops.h
@@ -417,12 +417,13 @@ static inline int drv_get_stats(struct ieee80211_local *local,
417 return ret; 417 return ret;
418} 418}
419 419
420static inline void drv_get_tkip_seq(struct ieee80211_local *local, 420static inline void drv_get_key_seq(struct ieee80211_local *local,
421 u8 hw_key_idx, u32 *iv32, u16 *iv16) 421 struct ieee80211_key *key,
422 struct ieee80211_key_seq *seq)
422{ 423{
423 if (local->ops->get_tkip_seq) 424 if (local->ops->get_key_seq)
424 local->ops->get_tkip_seq(&local->hw, hw_key_idx, iv32, iv16); 425 local->ops->get_key_seq(&local->hw, &key->conf, seq);
425 trace_drv_get_tkip_seq(local, hw_key_idx, iv32, iv16); 426 trace_drv_get_key_seq(local, &key->conf);
426} 427}
427 428
428static inline int drv_set_frag_threshold(struct ieee80211_local *local, 429static inline int drv_set_frag_threshold(struct ieee80211_local *local,
diff --git a/net/mac80211/trace.h b/net/mac80211/trace.h
index 4c2e7690226a..6f14591d8ca9 100644
--- a/net/mac80211/trace.h
+++ b/net/mac80211/trace.h
@@ -69,6 +69,17 @@
69#define CHANCTX_PR_ARG CHANDEF_PR_ARG, MIN_CHANDEF_PR_ARG, \ 69#define CHANCTX_PR_ARG CHANDEF_PR_ARG, MIN_CHANDEF_PR_ARG, \
70 __entry->rx_chains_static, __entry->rx_chains_dynamic 70 __entry->rx_chains_static, __entry->rx_chains_dynamic
71 71
72#define KEY_ENTRY __field(u32, cipher) \
73 __field(u8, hw_key_idx) \
74 __field(u8, flags) \
75 __field(s8, keyidx)
76#define KEY_ASSIGN(k) __entry->cipher = (k)->cipher; \
77 __entry->flags = (k)->flags; \
78 __entry->keyidx = (k)->keyidx; \
79 __entry->hw_key_idx = (k)->hw_key_idx;
80#define KEY_PR_FMT " cipher:0x%x, flags=%#x, keyidx=%d, hw_key_idx=%d"
81#define KEY_PR_ARG __entry->cipher, __entry->flags, __entry->keyidx, __entry->hw_key_idx
82
72 83
73 84
74/* 85/*
@@ -522,25 +533,19 @@ TRACE_EVENT(drv_set_key,
522 LOCAL_ENTRY 533 LOCAL_ENTRY
523 VIF_ENTRY 534 VIF_ENTRY
524 STA_ENTRY 535 STA_ENTRY
525 __field(u32, cipher) 536 KEY_ENTRY
526 __field(u8, hw_key_idx)
527 __field(u8, flags)
528 __field(s8, keyidx)
529 ), 537 ),
530 538
531 TP_fast_assign( 539 TP_fast_assign(
532 LOCAL_ASSIGN; 540 LOCAL_ASSIGN;
533 VIF_ASSIGN; 541 VIF_ASSIGN;
534 STA_ASSIGN; 542 STA_ASSIGN;
535 __entry->cipher = key->cipher; 543 KEY_ASSIGN(key);
536 __entry->flags = key->flags;
537 __entry->keyidx = key->keyidx;
538 __entry->hw_key_idx = key->hw_key_idx;
539 ), 544 ),
540 545
541 TP_printk( 546 TP_printk(
542 LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT, 547 LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT KEY_PR_FMT,
543 LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG 548 LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, KEY_PR_ARG
544 ) 549 )
545); 550);
546 551
@@ -656,28 +661,25 @@ TRACE_EVENT(drv_get_stats,
656 ) 661 )
657); 662);
658 663
659TRACE_EVENT(drv_get_tkip_seq, 664TRACE_EVENT(drv_get_key_seq,
660 TP_PROTO(struct ieee80211_local *local, 665 TP_PROTO(struct ieee80211_local *local,
661 u8 hw_key_idx, u32 *iv32, u16 *iv16), 666 struct ieee80211_key_conf *key),
662 667
663 TP_ARGS(local, hw_key_idx, iv32, iv16), 668 TP_ARGS(local, key),
664 669
665 TP_STRUCT__entry( 670 TP_STRUCT__entry(
666 LOCAL_ENTRY 671 LOCAL_ENTRY
667 __field(u8, hw_key_idx) 672 KEY_ENTRY
668 __field(u32, iv32)
669 __field(u16, iv16)
670 ), 673 ),
671 674
672 TP_fast_assign( 675 TP_fast_assign(
673 LOCAL_ASSIGN; 676 LOCAL_ASSIGN;
674 __entry->hw_key_idx = hw_key_idx; 677 KEY_ASSIGN(key);
675 __entry->iv32 = *iv32;
676 __entry->iv16 = *iv16;
677 ), 678 ),
678 679
679 TP_printk( 680 TP_printk(
680 LOCAL_PR_FMT, LOCAL_PR_ARG 681 LOCAL_PR_FMT KEY_PR_FMT,
682 LOCAL_PR_ARG, KEY_PR_ARG
681 ) 683 )
682); 684);
683 685