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

Commit 3cec6870 authored by Stone Piao's avatar Stone Piao Committed by John W. Linville
Browse files

mwifiex: implement cfg80211 mgmt_frame_register handler



Add a new command to implement mgmt_frame_register.

Signed-off-by: default avatarStone Piao <piaoyun@marvell.com>
Signed-off-by: default avatarKiran Divekar <dkiran@marvell.com>
Signed-off-by: default avatarBing Zhao <bzhao@marvell.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 83719be8
Loading
Loading
Loading
Loading
+22 −0
Original line number Original line Diff line number Diff line
@@ -226,6 +226,27 @@ mwifiex_cfg80211_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
	return 0;
	return 0;
}
}


/*
 * CFG802.11 operation handler to register a mgmt frame.
 */
static void
mwifiex_cfg80211_mgmt_frame_register(struct wiphy *wiphy,
				     struct wireless_dev *wdev,
				     u16 frame_type, bool reg)
{
	struct mwifiex_private *priv = mwifiex_netdev_get_priv(wdev->netdev);

	if (reg)
		priv->mgmt_frame_mask |= BIT(frame_type >> 4);
	else
		priv->mgmt_frame_mask &= ~BIT(frame_type >> 4);

	mwifiex_send_cmd_async(priv, HostCmd_CMD_MGMT_FRAME_REG,
			       HostCmd_ACT_GEN_SET, 0, &priv->mgmt_frame_mask);

	wiphy_dbg(wiphy, "info: mgmt frame registered\n");
}

/*
/*
 * CFG802.11 operation handler to set Tx power.
 * CFG802.11 operation handler to set Tx power.
 */
 */
@@ -1928,6 +1949,7 @@ static struct cfg80211_ops mwifiex_cfg80211_ops = {
	.add_key = mwifiex_cfg80211_add_key,
	.add_key = mwifiex_cfg80211_add_key,
	.del_key = mwifiex_cfg80211_del_key,
	.del_key = mwifiex_cfg80211_del_key,
	.mgmt_tx = mwifiex_cfg80211_mgmt_tx,
	.mgmt_tx = mwifiex_cfg80211_mgmt_tx,
	.mgmt_frame_register = mwifiex_cfg80211_mgmt_frame_register,
	.set_default_key = mwifiex_cfg80211_set_default_key,
	.set_default_key = mwifiex_cfg80211_set_default_key,
	.set_power_mgmt = mwifiex_cfg80211_set_power_mgmt,
	.set_power_mgmt = mwifiex_cfg80211_set_power_mgmt,
	.set_tx_power = mwifiex_cfg80211_set_tx_power,
	.set_tx_power = mwifiex_cfg80211_set_tx_power,
+7 −0
Original line number Original line Diff line number Diff line
@@ -263,6 +263,7 @@ enum MWIFIEX_802_11_PRIVACY_FILTER {
#define HostCmd_CMD_CAU_REG_ACCESS                    0x00ed
#define HostCmd_CMD_CAU_REG_ACCESS                    0x00ed
#define HostCmd_CMD_SET_BSS_MODE                      0x00f7
#define HostCmd_CMD_SET_BSS_MODE                      0x00f7
#define HostCmd_CMD_PCIE_DESC_DETAILS                 0x00fa
#define HostCmd_CMD_PCIE_DESC_DETAILS                 0x00fa
#define HostCmd_CMD_MGMT_FRAME_REG                    0x010c


#define PROTOCOL_NO_SECURITY        0x01
#define PROTOCOL_NO_SECURITY        0x01
#define PROTOCOL_STATIC_WEP         0x02
#define PROTOCOL_STATIC_WEP         0x02
@@ -1336,6 +1337,11 @@ struct host_cmd_ds_version_ext {
	char version_str[128];
	char version_str[128];
} __packed;
} __packed;


struct host_cmd_ds_mgmt_frame_reg {
	__le16 action;
	__le32 mask;
} __packed;

struct host_cmd_ds_802_11_ibss_status {
struct host_cmd_ds_802_11_ibss_status {
	__le16 action;
	__le16 action;
	__le16 enable;
	__le16 enable;
@@ -1444,6 +1450,7 @@ struct host_cmd_ds_command {
		struct host_cmd_ds_wmm_get_status get_wmm_status;
		struct host_cmd_ds_wmm_get_status get_wmm_status;
		struct host_cmd_ds_802_11_key_material key_material;
		struct host_cmd_ds_802_11_key_material key_material;
		struct host_cmd_ds_version_ext verext;
		struct host_cmd_ds_version_ext verext;
		struct host_cmd_ds_mgmt_frame_reg reg_mask;
		struct host_cmd_ds_802_11_ibss_status ibss_coalescing;
		struct host_cmd_ds_802_11_ibss_status ibss_coalescing;
		struct host_cmd_ds_mac_reg_access mac_reg;
		struct host_cmd_ds_mac_reg_access mac_reg;
		struct host_cmd_ds_bbp_reg_access bbp_reg;
		struct host_cmd_ds_bbp_reg_access bbp_reg;
+1 −0
Original line number Original line Diff line number Diff line
@@ -496,6 +496,7 @@ struct mwifiex_private {
	u16 rsn_idx;
	u16 rsn_idx;
	struct timer_list scan_delay_timer;
	struct timer_list scan_delay_timer;
	u8 ap_11n_enabled;
	u8 ap_11n_enabled;
	u32 mgmt_frame_mask;
};
};


enum mwifiex_ba_status {
enum mwifiex_ba_status {
+9 −0
Original line number Original line Diff line number Diff line
@@ -1167,6 +1167,15 @@ int mwifiex_sta_prepare_cmd(struct mwifiex_private *priv, uint16_t cmd_no,
				    S_DS_GEN);
				    S_DS_GEN);
		ret = 0;
		ret = 0;
		break;
		break;
	case HostCmd_CMD_MGMT_FRAME_REG:
		cmd_ptr->command = cpu_to_le16(cmd_no);
		cmd_ptr->params.reg_mask.action = cpu_to_le16(cmd_action);
		cmd_ptr->params.reg_mask.mask = cpu_to_le32(*(u32 *)data_buf);
		cmd_ptr->size =
			cpu_to_le16(sizeof(struct host_cmd_ds_mgmt_frame_reg) +
				    S_DS_GEN);
		ret = 0;
		break;
	case HostCmd_CMD_FUNC_INIT:
	case HostCmd_CMD_FUNC_INIT:
		if (priv->adapter->hw_status == MWIFIEX_HW_STATUS_RESET)
		if (priv->adapter->hw_status == MWIFIEX_HW_STATUS_RESET)
			priv->adapter->hw_status = MWIFIEX_HW_STATUS_READY;
			priv->adapter->hw_status = MWIFIEX_HW_STATUS_READY;
+1 −0
Original line number Original line Diff line number Diff line
@@ -875,6 +875,7 @@ int mwifiex_process_sta_cmdresp(struct mwifiex_private *priv, u16 cmdresp_no,
	case HostCmd_CMD_VERSION_EXT:
	case HostCmd_CMD_VERSION_EXT:
		ret = mwifiex_ret_ver_ext(priv, resp, data_buf);
		ret = mwifiex_ret_ver_ext(priv, resp, data_buf);
		break;
		break;
	case HostCmd_CMD_MGMT_FRAME_REG:
	case HostCmd_CMD_FUNC_INIT:
	case HostCmd_CMD_FUNC_INIT:
	case HostCmd_CMD_FUNC_SHUTDOWN:
	case HostCmd_CMD_FUNC_SHUTDOWN:
		break;
		break;