diff options
author | Stone Piao <piaoyun@marvell.com> | 2012-09-25 23:23:34 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2012-09-28 13:54:04 -0400 |
commit | 3cec68701a104c8aa0b5c38b6bfad4193cdff3fe (patch) | |
tree | b444caf2fa4398bd14762e44718f46c8d9824228 | |
parent | 83719be861d23013ae73e126f5cd422ec584c53a (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.c | 22 | ||||
-rw-r--r-- | drivers/net/wireless/mwifiex/fw.h | 7 | ||||
-rw-r--r-- | drivers/net/wireless/mwifiex/main.h | 1 | ||||
-rw-r--r-- | drivers/net/wireless/mwifiex/sta_cmd.c | 9 | ||||
-rw-r--r-- | drivers/net/wireless/mwifiex/sta_cmdresp.c | 1 |
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 | */ | ||
232 | static void | ||
233 | mwifiex_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 | */ |
232 | static int | 253 | static 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 | ||
1340 | struct host_cmd_ds_mgmt_frame_reg { | ||
1341 | __le16 action; | ||
1342 | __le32 mask; | ||
1343 | } __packed; | ||
1344 | |||
1339 | struct host_cmd_ds_802_11_ibss_status { | 1345 | struct 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 | ||
501 | enum mwifiex_ba_status { | 502 | enum 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; |