aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStone Piao <piaoyun@marvell.com>2012-09-25 23:23:34 -0400
committerJohn W. Linville <linville@tuxdriver.com>2012-09-28 13:54:04 -0400
commit3cec68701a104c8aa0b5c38b6bfad4193cdff3fe (patch)
treeb444caf2fa4398bd14762e44718f46c8d9824228
parent83719be861d23013ae73e126f5cd422ec584c53a (diff)
mwifiex: implement cfg80211 mgmt_frame_register handler
Add a new command to implement mgmt_frame_register. Signed-off-by: Stone Piao <piaoyun@marvell.com> Signed-off-by: Kiran Divekar <dkiran@marvell.com> Signed-off-by: Bing Zhao <bzhao@marvell.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r--drivers/net/wireless/mwifiex/cfg80211.c22
-rw-r--r--drivers/net/wireless/mwifiex/fw.h7
-rw-r--r--drivers/net/wireless/mwifiex/main.h1
-rw-r--r--drivers/net/wireless/mwifiex/sta_cmd.c9
-rw-r--r--drivers/net/wireless/mwifiex/sta_cmdresp.c1
5 files changed, 40 insertions, 0 deletions
diff --git a/drivers/net/wireless/mwifiex/cfg80211.c b/drivers/net/wireless/mwifiex/cfg80211.c
index 2befac5659cc..f86043df8d4d 100644
--- a/drivers/net/wireless/mwifiex/cfg80211.c
+++ b/drivers/net/wireless/mwifiex/cfg80211.c
@@ -227,6 +227,27 @@ mwifiex_cfg80211_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
227} 227}
228 228
229/* 229/*
230 * CFG802.11 operation handler to register a mgmt frame.
231 */
232static void
233mwifiex_cfg80211_mgmt_frame_register(struct wiphy *wiphy,
234 struct wireless_dev *wdev,
235 u16 frame_type, bool reg)
236{
237 struct mwifiex_private *priv = mwifiex_netdev_get_priv(wdev->netdev);
238
239 if (reg)
240 priv->mgmt_frame_mask |= BIT(frame_type >> 4);
241 else
242 priv->mgmt_frame_mask &= ~BIT(frame_type >> 4);
243
244 mwifiex_send_cmd_async(priv, HostCmd_CMD_MGMT_FRAME_REG,
245 HostCmd_ACT_GEN_SET, 0, &priv->mgmt_frame_mask);
246
247 wiphy_dbg(wiphy, "info: mgmt frame registered\n");
248}
249
250/*
230 * CFG802.11 operation handler to set Tx power. 251 * CFG802.11 operation handler to set Tx power.
231 */ 252 */
232static int 253static int
@@ -1928,6 +1949,7 @@ static struct cfg80211_ops mwifiex_cfg80211_ops = {
1928 .add_key = mwifiex_cfg80211_add_key, 1949 .add_key = mwifiex_cfg80211_add_key,
1929 .del_key = mwifiex_cfg80211_del_key, 1950 .del_key = mwifiex_cfg80211_del_key,
1930 .mgmt_tx = mwifiex_cfg80211_mgmt_tx, 1951 .mgmt_tx = mwifiex_cfg80211_mgmt_tx,
1952 .mgmt_frame_register = mwifiex_cfg80211_mgmt_frame_register,
1931 .set_default_key = mwifiex_cfg80211_set_default_key, 1953 .set_default_key = mwifiex_cfg80211_set_default_key,
1932 .set_power_mgmt = mwifiex_cfg80211_set_power_mgmt, 1954 .set_power_mgmt = mwifiex_cfg80211_set_power_mgmt,
1933 .set_tx_power = mwifiex_cfg80211_set_tx_power, 1955 .set_tx_power = mwifiex_cfg80211_set_tx_power,
diff --git a/drivers/net/wireless/mwifiex/fw.h b/drivers/net/wireless/mwifiex/fw.h
index b8ce78e2ba47..41b304a33a07 100644
--- a/drivers/net/wireless/mwifiex/fw.h
+++ b/drivers/net/wireless/mwifiex/fw.h
@@ -263,6 +263,7 @@ enum MWIFIEX_802_11_PRIVACY_FILTER {
263#define HostCmd_CMD_CAU_REG_ACCESS 0x00ed 263#define HostCmd_CMD_CAU_REG_ACCESS 0x00ed
264#define HostCmd_CMD_SET_BSS_MODE 0x00f7 264#define HostCmd_CMD_SET_BSS_MODE 0x00f7
265#define HostCmd_CMD_PCIE_DESC_DETAILS 0x00fa 265#define HostCmd_CMD_PCIE_DESC_DETAILS 0x00fa
266#define HostCmd_CMD_MGMT_FRAME_REG 0x010c
266 267
267#define PROTOCOL_NO_SECURITY 0x01 268#define PROTOCOL_NO_SECURITY 0x01
268#define PROTOCOL_STATIC_WEP 0x02 269#define PROTOCOL_STATIC_WEP 0x02
@@ -1336,6 +1337,11 @@ struct host_cmd_ds_version_ext {
1336 char version_str[128]; 1337 char version_str[128];
1337} __packed; 1338} __packed;
1338 1339
1340struct host_cmd_ds_mgmt_frame_reg {
1341 __le16 action;
1342 __le32 mask;
1343} __packed;
1344
1339struct host_cmd_ds_802_11_ibss_status { 1345struct host_cmd_ds_802_11_ibss_status {
1340 __le16 action; 1346 __le16 action;
1341 __le16 enable; 1347 __le16 enable;
@@ -1444,6 +1450,7 @@ struct host_cmd_ds_command {
1444 struct host_cmd_ds_wmm_get_status get_wmm_status; 1450 struct host_cmd_ds_wmm_get_status get_wmm_status;
1445 struct host_cmd_ds_802_11_key_material key_material; 1451 struct host_cmd_ds_802_11_key_material key_material;
1446 struct host_cmd_ds_version_ext verext; 1452 struct host_cmd_ds_version_ext verext;
1453 struct host_cmd_ds_mgmt_frame_reg reg_mask;
1447 struct host_cmd_ds_802_11_ibss_status ibss_coalescing; 1454 struct host_cmd_ds_802_11_ibss_status ibss_coalescing;
1448 struct host_cmd_ds_mac_reg_access mac_reg; 1455 struct host_cmd_ds_mac_reg_access mac_reg;
1449 struct host_cmd_ds_bbp_reg_access bbp_reg; 1456 struct host_cmd_ds_bbp_reg_access bbp_reg;
diff --git a/drivers/net/wireless/mwifiex/main.h b/drivers/net/wireless/mwifiex/main.h
index 092fbfaeb882..6e0806244b82 100644
--- a/drivers/net/wireless/mwifiex/main.h
+++ b/drivers/net/wireless/mwifiex/main.h
@@ -496,6 +496,7 @@ struct mwifiex_private {
496 u16 rsn_idx; 496 u16 rsn_idx;
497 struct timer_list scan_delay_timer; 497 struct timer_list scan_delay_timer;
498 u8 ap_11n_enabled; 498 u8 ap_11n_enabled;
499 u32 mgmt_frame_mask;
499}; 500};
500 501
501enum mwifiex_ba_status { 502enum mwifiex_ba_status {
diff --git a/drivers/net/wireless/mwifiex/sta_cmd.c b/drivers/net/wireless/mwifiex/sta_cmd.c
index 3a4161cfeed7..dc4fe8c320fd 100644
--- a/drivers/net/wireless/mwifiex/sta_cmd.c
+++ b/drivers/net/wireless/mwifiex/sta_cmd.c
@@ -1167,6 +1167,15 @@ int mwifiex_sta_prepare_cmd(struct mwifiex_private *priv, uint16_t cmd_no,
1167 S_DS_GEN); 1167 S_DS_GEN);
1168 ret = 0; 1168 ret = 0;
1169 break; 1169 break;
1170 case HostCmd_CMD_MGMT_FRAME_REG:
1171 cmd_ptr->command = cpu_to_le16(cmd_no);
1172 cmd_ptr->params.reg_mask.action = cpu_to_le16(cmd_action);
1173 cmd_ptr->params.reg_mask.mask = cpu_to_le32(*(u32 *)data_buf);
1174 cmd_ptr->size =
1175 cpu_to_le16(sizeof(struct host_cmd_ds_mgmt_frame_reg) +
1176 S_DS_GEN);
1177 ret = 0;
1178 break;
1170 case HostCmd_CMD_FUNC_INIT: 1179 case HostCmd_CMD_FUNC_INIT:
1171 if (priv->adapter->hw_status == MWIFIEX_HW_STATUS_RESET) 1180 if (priv->adapter->hw_status == MWIFIEX_HW_STATUS_RESET)
1172 priv->adapter->hw_status = MWIFIEX_HW_STATUS_READY; 1181 priv->adapter->hw_status = MWIFIEX_HW_STATUS_READY;
diff --git a/drivers/net/wireless/mwifiex/sta_cmdresp.c b/drivers/net/wireless/mwifiex/sta_cmdresp.c
index 31f80e10e29e..d1f53e39028f 100644
--- a/drivers/net/wireless/mwifiex/sta_cmdresp.c
+++ b/drivers/net/wireless/mwifiex/sta_cmdresp.c
@@ -875,6 +875,7 @@ int mwifiex_process_sta_cmdresp(struct mwifiex_private *priv, u16 cmdresp_no,
875 case HostCmd_CMD_VERSION_EXT: 875 case HostCmd_CMD_VERSION_EXT:
876 ret = mwifiex_ret_ver_ext(priv, resp, data_buf); 876 ret = mwifiex_ret_ver_ext(priv, resp, data_buf);
877 break; 877 break;
878 case HostCmd_CMD_MGMT_FRAME_REG:
878 case HostCmd_CMD_FUNC_INIT: 879 case HostCmd_CMD_FUNC_INIT:
879 case HostCmd_CMD_FUNC_SHUTDOWN: 880 case HostCmd_CMD_FUNC_SHUTDOWN:
880 break; 881 break;