Skip to content

Commit

Permalink
mwifiex: use common keyinfo bitmap for different key types
Browse files Browse the repository at this point in the history
Instead of having separate key information definitions for
each type of key, a common key information bitmap is used.

Signed-off-by: Yogesh Ashok Powar <yogeshp@marvell.com>
Signed-off-by: Bing Zhao <bzhao@marvell.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
  • Loading branch information
Yogesh Ashok Powar authored and John W. Linville committed Apr 12, 2011
1 parent 18bf965 commit 6a35a0a
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 42 deletions.
27 changes: 3 additions & 24 deletions drivers/net/wireless/mwifiex/fw.h
Original file line number Diff line number Diff line change
Expand Up @@ -72,33 +72,12 @@ enum KEY_TYPE_ID {
KEY_TYPE_ID_AES,
KEY_TYPE_ID_WAPI,
};

enum KEY_INFO_WEP {
KEY_INFO_WEP_MCAST = 0x01,
KEY_INFO_WEP_UNICAST = 0x02,
KEY_INFO_WEP_ENABLED = 0x04
};

enum KEY_INFO_TKIP {
KEY_INFO_TKIP_MCAST = 0x01,
KEY_INFO_TKIP_UNICAST = 0x02,
KEY_INFO_TKIP_ENABLED = 0x04
};

enum KEY_INFO_AES {
KEY_INFO_AES_MCAST = 0x01,
KEY_INFO_AES_UNICAST = 0x02,
KEY_INFO_AES_ENABLED = 0x04
};
#define KEY_MCAST BIT(0)
#define KEY_UNICAST BIT(1)
#define KEY_ENABLED BIT(2)

#define WAPI_KEY_LEN 50

enum KEY_INFO_WAPI {
KEY_INFO_WAPI_MCAST = 0x01,
KEY_INFO_WAPI_UNICAST = 0x02,
KEY_INFO_WAPI_ENABLED = 0x04
};

#define MAX_POLL_TRIES 100

#define MAX_MULTI_INTERFACE_POLL_TRIES 1000
Expand Down
27 changes: 13 additions & 14 deletions drivers/net/wireless/mwifiex/sta_cmd.c
Original file line number Diff line number Diff line change
Expand Up @@ -500,9 +500,8 @@ mwifiex_set_keyparamset_wep(struct mwifiex_private *priv,
key_param_set->key_type_id =
cpu_to_le16(KEY_TYPE_ID_WEP);
key_param_set->key_info =
cpu_to_le16(KEY_INFO_WEP_ENABLED |
KEY_INFO_WEP_UNICAST |
KEY_INFO_WEP_MCAST);
cpu_to_le16(KEY_ENABLED | KEY_UNICAST |
KEY_MCAST);
key_param_set->key_len =
cpu_to_le16(priv->wep_key[i].key_length);
/* Set WEP key index */
Expand Down Expand Up @@ -589,10 +588,10 @@ static int mwifiex_cmd_802_11_key_material(struct mwifiex_private *priv,
cpu_to_le16(KEY_TYPE_ID_WAPI);
if (cmd_oid == KEY_INFO_ENABLED)
key_material->key_param_set.key_info =
cpu_to_le16(KEY_INFO_WAPI_ENABLED);
cpu_to_le16(KEY_ENABLED);
else
key_material->key_param_set.key_info =
cpu_to_le16(!KEY_INFO_WAPI_ENABLED);
cpu_to_le16(!KEY_ENABLED);

key_material->key_param_set.key[0] = enc_key->key_index;
if (!priv->sec_info.wapi_key_on)
Expand All @@ -604,10 +603,10 @@ static int mwifiex_cmd_802_11_key_material(struct mwifiex_private *priv,
if (0 != memcmp(enc_key->mac_addr, bc_mac, sizeof(bc_mac))) {
/* WAPI pairwise key: unicast */
key_material->key_param_set.key_info |=
cpu_to_le16(KEY_INFO_WAPI_UNICAST);
cpu_to_le16(KEY_UNICAST);
} else { /* WAPI group key: multicast */
key_material->key_param_set.key_info |=
cpu_to_le16(KEY_INFO_WAPI_MCAST);
cpu_to_le16(KEY_MCAST);
priv->sec_info.wapi_key_on = true;
}

Expand All @@ -634,32 +633,32 @@ static int mwifiex_cmd_802_11_key_material(struct mwifiex_private *priv,
cpu_to_le16(KEY_TYPE_ID_AES);
if (cmd_oid == KEY_INFO_ENABLED)
key_material->key_param_set.key_info =
cpu_to_le16(KEY_INFO_AES_ENABLED);
cpu_to_le16(KEY_ENABLED);
else
key_material->key_param_set.key_info =
cpu_to_le16(!KEY_INFO_AES_ENABLED);
cpu_to_le16(!KEY_ENABLED);

if (enc_key->key_index & MWIFIEX_KEY_INDEX_UNICAST)
/* AES pairwise key: unicast */
key_material->key_param_set.key_info |=
cpu_to_le16(KEY_INFO_AES_UNICAST);
cpu_to_le16(KEY_UNICAST);
else /* AES group key: multicast */
key_material->key_param_set.key_info |=
cpu_to_le16(KEY_INFO_AES_MCAST);
cpu_to_le16(KEY_MCAST);
} else if (enc_key->key_len == WLAN_KEY_LEN_TKIP) {
dev_dbg(priv->adapter->dev, "cmd: WPA_TKIP\n");
key_material->key_param_set.key_type_id =
cpu_to_le16(KEY_TYPE_ID_TKIP);
key_material->key_param_set.key_info =
cpu_to_le16(KEY_INFO_TKIP_ENABLED);
cpu_to_le16(KEY_ENABLED);

if (enc_key->key_index & MWIFIEX_KEY_INDEX_UNICAST)
/* TKIP pairwise key: unicast */
key_material->key_param_set.key_info |=
cpu_to_le16(KEY_INFO_TKIP_UNICAST);
cpu_to_le16(KEY_UNICAST);
else /* TKIP group key: multicast */
key_material->key_param_set.key_info |=
cpu_to_le16(KEY_INFO_TKIP_MCAST);
cpu_to_le16(KEY_MCAST);
}

if (key_material->key_param_set.key_type_id) {
Expand Down
3 changes: 1 addition & 2 deletions drivers/net/wireless/mwifiex/sta_cmdresp.c
Original file line number Diff line number Diff line change
Expand Up @@ -574,8 +574,7 @@ static int mwifiex_ret_802_11_key_material(struct mwifiex_private *priv,
&resp->params.key_material;

if (le16_to_cpu(key->action) == HostCmd_ACT_GEN_SET) {
if ((le16_to_cpu(key->key_param_set.key_info) &
KEY_INFO_TKIP_MCAST)) {
if ((le16_to_cpu(key->key_param_set.key_info) & KEY_MCAST)) {
dev_dbg(priv->adapter->dev, "info: key: GTK is set\n");
priv->wpa_is_gtk_set = true;
priv->scan_block = false;
Expand Down
3 changes: 1 addition & 2 deletions drivers/net/wireless/mwifiex/sta_ioctl.c
Original file line number Diff line number Diff line change
Expand Up @@ -1729,8 +1729,7 @@ static int mwifiex_sec_ioctl_set_wpa_key(struct mwifiex_adapter *adapter,
sizeof(ibss_key->key_param_set.key_len));
ibss_key->key_param_set.key_type_id
= cpu_to_le16(KEY_TYPE_ID_TKIP);
ibss_key->key_param_set.key_info
= cpu_to_le16(KEY_INFO_TKIP_ENABLED);
ibss_key->key_param_set.key_info = cpu_to_le16(KEY_ENABLED);

/* Send the key as GTK to firmware */
encrypt_key->key_index = ~MWIFIEX_KEY_INDEX_UNICAST;
Expand Down

0 comments on commit 6a35a0a

Please sign in to comment.