aboutsummaryrefslogtreecommitdiffstats
path: root/include/net/mac80211.h
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2011-07-07 12:58:01 -0400
committerJohn W. Linville <linville@tuxdriver.com>2011-07-08 11:42:23 -0400
commit42d98795505314c7af42c7c6b988425300958ed3 (patch)
tree75fc047570677de0a2ea6f9846ca41af61a74c68 /include/net/mac80211.h
parent3ea542d3c2862142ae511fac5ce2dfc7419dcc53 (diff)
mac80211: allow driver to generate P1K for IV32
In order to support pre-populating the P1K cache in iwlwifi hardware for WoWLAN, we need to calculate the P1K for the current IV32. Allow drivers to get the P1K for any given IV32 instead of for a given packet, but keep the packet-based version around as an inline. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'include/net/mac80211.h')
-rw-r--r--include/net/mac80211.h24
1 files changed, 22 insertions, 2 deletions
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index 84770cedae2d..b29456a945c2 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -20,6 +20,7 @@
20#include <linux/device.h> 20#include <linux/device.h>
21#include <linux/ieee80211.h> 21#include <linux/ieee80211.h>
22#include <net/cfg80211.h> 22#include <net/cfg80211.h>
23#include <asm/unaligned.h>
23 24
24/** 25/**
25 * DOC: Introduction 26 * DOC: Introduction
@@ -2564,6 +2565,18 @@ struct sk_buff *
2564ieee80211_get_buffered_bc(struct ieee80211_hw *hw, struct ieee80211_vif *vif); 2565ieee80211_get_buffered_bc(struct ieee80211_hw *hw, struct ieee80211_vif *vif);
2565 2566
2566/** 2567/**
2568 * ieee80211_get_tkip_p1k_iv - get a TKIP phase 1 key for IV32
2569 *
2570 * This function returns the TKIP phase 1 key for the given IV32.
2571 *
2572 * @keyconf: the parameter passed with the set key
2573 * @iv32: IV32 to get the P1K for
2574 * @p1k: a buffer to which the key will be written, as 5 u16 values
2575 */
2576void ieee80211_get_tkip_p1k_iv(struct ieee80211_key_conf *keyconf,
2577 u32 iv32, u16 *p1k);
2578
2579/**
2567 * ieee80211_get_tkip_p1k - get a TKIP phase 1 key 2580 * ieee80211_get_tkip_p1k - get a TKIP phase 1 key
2568 * 2581 *
2569 * This function returns the TKIP phase 1 key for the IV32 taken 2582 * This function returns the TKIP phase 1 key for the IV32 taken
@@ -2574,8 +2587,15 @@ ieee80211_get_buffered_bc(struct ieee80211_hw *hw, struct ieee80211_vif *vif);
2574 * with this P1K 2587 * with this P1K
2575 * @p1k: a buffer to which the key will be written, as 5 u16 values 2588 * @p1k: a buffer to which the key will be written, as 5 u16 values
2576 */ 2589 */
2577void ieee80211_get_tkip_p1k(struct ieee80211_key_conf *keyconf, 2590static inline void ieee80211_get_tkip_p1k(struct ieee80211_key_conf *keyconf,
2578 struct sk_buff *skb, u16 *p1k); 2591 struct sk_buff *skb, u16 *p1k)
2592{
2593 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
2594 const u8 *data = (u8 *)hdr + ieee80211_hdrlen(hdr->frame_control);
2595 u32 iv32 = get_unaligned_le32(&data[4]);
2596
2597 ieee80211_get_tkip_p1k_iv(keyconf, iv32, p1k);
2598}
2579 2599
2580/** 2600/**
2581 * ieee80211_get_tkip_p2k - get a TKIP phase 2 key 2601 * ieee80211_get_tkip_p2k - get a TKIP phase 2 key