Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6a35a0ac authored by Yogesh Ashok Powar's avatar Yogesh Ashok Powar Committed by John W. Linville
Browse files

mwifiex: use common keyinfo bitmap for different key types



Instead of having separate key information definitions for
each type of key, a common key information bitmap is used.

Signed-off-by: default avatarYogesh Ashok Powar <yogeshp@marvell.com>
Signed-off-by: default avatarBing Zhao <bzhao@marvell.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 18bf9657
Loading
Loading
Loading
Loading
+3 −24
Original line number Diff line number Diff line
@@ -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
+13 −14
Original line number Diff line number Diff line
@@ -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 */
@@ -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)
@@ -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;
		}

@@ -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) {
+1 −2
Original line number Diff line number Diff line
@@ -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;
+1 −2
Original line number Diff line number Diff line
@@ -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;