Commit b21783e9 authored by Xinming Hu's avatar Xinming Hu Committed by Kalle Valo

mwifiex: add sta_list firmware command

This patch add sta_list firmware command, which can be used
to get power status and rssi for the stations associated to
mwifiex micro AP.
Signed-off-by: default avatarXinming Hu <huxm@marvell.com>
Signed-off-by: default avatarAvinash Patil <patila@marvell.com>
Signed-off-by: default avatarCathy Luo <cluo@marvell.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent 442f6f9b
...@@ -575,6 +575,7 @@ int mwifiex_send_cmd(struct mwifiex_private *priv, u16 cmd_no, ...@@ -575,6 +575,7 @@ int mwifiex_send_cmd(struct mwifiex_private *priv, u16 cmd_no,
case HostCmd_CMD_UAP_BSS_STOP: case HostCmd_CMD_UAP_BSS_STOP:
case HostCmd_CMD_UAP_STA_DEAUTH: case HostCmd_CMD_UAP_STA_DEAUTH:
case HOST_CMD_APCMD_SYS_RESET: case HOST_CMD_APCMD_SYS_RESET:
case HOST_CMD_APCMD_STA_LIST:
ret = mwifiex_uap_prepare_cmd(priv, cmd_no, cmd_action, ret = mwifiex_uap_prepare_cmd(priv, cmd_no, cmd_action,
cmd_oid, data_buf, cmd_oid, data_buf,
cmd_ptr); cmd_ptr);
......
...@@ -334,6 +334,7 @@ enum MWIFIEX_802_11_PRIVACY_FILTER { ...@@ -334,6 +334,7 @@ enum MWIFIEX_802_11_PRIVACY_FILTER {
#define HostCmd_CMD_UAP_SYS_CONFIG 0x00b0 #define HostCmd_CMD_UAP_SYS_CONFIG 0x00b0
#define HostCmd_CMD_UAP_BSS_START 0x00b1 #define HostCmd_CMD_UAP_BSS_START 0x00b1
#define HostCmd_CMD_UAP_BSS_STOP 0x00b2 #define HostCmd_CMD_UAP_BSS_STOP 0x00b2
#define HOST_CMD_APCMD_STA_LIST 0x00b3
#define HostCmd_CMD_UAP_STA_DEAUTH 0x00b5 #define HostCmd_CMD_UAP_STA_DEAUTH 0x00b5
#define HostCmd_CMD_11N_CFG 0x00cd #define HostCmd_CMD_11N_CFG 0x00cd
#define HostCmd_CMD_11N_ADDBA_REQ 0x00ce #define HostCmd_CMD_11N_ADDBA_REQ 0x00ce
...@@ -1465,6 +1466,18 @@ struct host_cmd_ds_sta_deauth { ...@@ -1465,6 +1466,18 @@ struct host_cmd_ds_sta_deauth {
__le16 reason; __le16 reason;
} __packed; } __packed;
struct mwifiex_ie_types_sta_info {
struct mwifiex_ie_types_header header;
u8 mac[ETH_ALEN];
u8 power_mfg_status;
s8 rssi;
};
struct host_cmd_ds_sta_list {
u16 sta_count;
u8 tlv[0];
} __packed;
struct mwifiex_ie_types_pwr_capability { struct mwifiex_ie_types_pwr_capability {
struct mwifiex_ie_types_header header; struct mwifiex_ie_types_header header;
s8 min_pwr; s8 min_pwr;
...@@ -1994,6 +2007,7 @@ struct host_cmd_ds_command { ...@@ -1994,6 +2007,7 @@ struct host_cmd_ds_command {
struct host_cmd_ds_802_11_subsc_evt subsc_evt; struct host_cmd_ds_802_11_subsc_evt subsc_evt;
struct host_cmd_ds_sys_config uap_sys_config; struct host_cmd_ds_sys_config uap_sys_config;
struct host_cmd_ds_sta_deauth sta_deauth; struct host_cmd_ds_sta_deauth sta_deauth;
struct host_cmd_ds_sta_list sta_list;
struct host_cmd_11ac_vht_cfg vht_cfg; struct host_cmd_11ac_vht_cfg vht_cfg;
struct host_cmd_ds_coalesce_cfg coalesce_cfg; struct host_cmd_ds_coalesce_cfg coalesce_cfg;
struct host_cmd_ds_tdls_oper tdls_oper; struct host_cmd_ds_tdls_oper tdls_oper;
......
...@@ -958,6 +958,27 @@ static int mwifiex_ret_subsc_evt(struct mwifiex_private *priv, ...@@ -958,6 +958,27 @@ static int mwifiex_ret_subsc_evt(struct mwifiex_private *priv,
return 0; return 0;
} }
static int mwifiex_ret_uap_sta_list(struct mwifiex_private *priv,
struct host_cmd_ds_command *resp)
{
struct host_cmd_ds_sta_list *sta_list =
&resp->params.sta_list;
struct mwifiex_ie_types_sta_info *sta_info = (void *)&sta_list->tlv;
int i;
struct mwifiex_sta_node *sta_node;
for (i = 0; i < sta_list->sta_count; i++) {
sta_node = mwifiex_get_sta_entry(priv, sta_info->mac);
if (unlikely(!sta_node))
continue;
sta_node->stats.rssi = sta_info->rssi;
sta_info++;
}
return 0;
}
/* This function handles the command response of set_cfg_data */ /* This function handles the command response of set_cfg_data */
static int mwifiex_ret_cfg_data(struct mwifiex_private *priv, static int mwifiex_ret_cfg_data(struct mwifiex_private *priv,
struct host_cmd_ds_command *resp) struct host_cmd_ds_command *resp)
...@@ -1148,6 +1169,9 @@ int mwifiex_process_sta_cmdresp(struct mwifiex_private *priv, u16 cmdresp_no, ...@@ -1148,6 +1169,9 @@ int mwifiex_process_sta_cmdresp(struct mwifiex_private *priv, u16 cmdresp_no,
break; break;
case HostCmd_CMD_UAP_SYS_CONFIG: case HostCmd_CMD_UAP_SYS_CONFIG:
break; break;
case HOST_CMD_APCMD_STA_LIST:
ret = mwifiex_ret_uap_sta_list(priv, resp);
break;
case HostCmd_CMD_UAP_BSS_START: case HostCmd_CMD_UAP_BSS_START:
adapter->tx_lock_flag = false; adapter->tx_lock_flag = false;
adapter->pps_uapsd_mode = false; adapter->pps_uapsd_mode = false;
......
...@@ -755,6 +755,7 @@ int mwifiex_uap_prepare_cmd(struct mwifiex_private *priv, u16 cmd_no, ...@@ -755,6 +755,7 @@ int mwifiex_uap_prepare_cmd(struct mwifiex_private *priv, u16 cmd_no,
case HostCmd_CMD_UAP_BSS_START: case HostCmd_CMD_UAP_BSS_START:
case HostCmd_CMD_UAP_BSS_STOP: case HostCmd_CMD_UAP_BSS_STOP:
case HOST_CMD_APCMD_SYS_RESET: case HOST_CMD_APCMD_SYS_RESET:
case HOST_CMD_APCMD_STA_LIST:
cmd->command = cpu_to_le16(cmd_no); cmd->command = cpu_to_le16(cmd_no);
cmd->size = cpu_to_le16(S_DS_GEN); cmd->size = cpu_to_le16(S_DS_GEN);
break; break;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment