MLK-25013 net: wireless: nxp: mxm_wifiex: upgrade to mxm5x16210 release
Upgrade to mxm5x16210 verison: - Fixed WPA3 SAE pre-cert requirement where there is no assoc request from DUT, if EX-AP sends the Auth confirm frame immediately after Auth commit frame Reviewed-by: yang.tian <yang.tian@nxp.com> Signed-off-by: Fugang Duan <fugang.duan@nxp.com> (cherry picked from commit: 0a14a53a273aecb7dfb837cf90f15744e893e6bf)
This commit is contained in:
parent
c2863ce025
commit
04b2fa2cd5
|
@ -831,6 +831,8 @@ mlan_status wlan_cmd_twt_cfg(pmlan_private pmpriv, HostCmd_DS_COMMAND *cmd,
|
|||
ds_twtcfg->param.twt_setup.twt_exponent;
|
||||
twt_setup_params->twt_mantissa = wlan_cpu_to_le16(
|
||||
ds_twtcfg->param.twt_setup.twt_mantissa);
|
||||
twt_setup_params->twt_request =
|
||||
ds_twtcfg->param.twt_setup.twt_request;
|
||||
cmd->size += sizeof(hostcmd_twtcfg->param.twt_setup);
|
||||
break;
|
||||
case MLAN_11AX_TWT_TEARDOWN_SUBID:
|
||||
|
|
|
@ -517,6 +517,7 @@ static t_u32 wlan_process_hostcmd_cfg(pmlan_private pmpriv, t_u16 cfg_type,
|
|||
HostCmd_DS_802_11_CFG_DATA *pcfg_cmd = MNULL;
|
||||
mlan_adapter *pmadapter = MNULL;
|
||||
mlan_callbacks *pcb = MNULL;
|
||||
t_u8 hostcmd_flag = MFALSE;
|
||||
|
||||
ENTER();
|
||||
if (!pmpriv) {
|
||||
|
@ -574,7 +575,7 @@ static t_u32 wlan_process_hostcmd_cfg(pmlan_private pmpriv, t_u16 cfg_type,
|
|||
}
|
||||
ret = wlan_prepare_cmd(pmpriv, 0, 0, 0, MNULL,
|
||||
(t_void *)hostcmd);
|
||||
memset(pmadapter, buf, 0, MLAN_SIZE_OF_CMD_BUFFER);
|
||||
memset(pmadapter, buf, 0, MRVDRV_SIZE_OF_CMD_BUFFER);
|
||||
ptr = buf;
|
||||
start_raw = MFALSE;
|
||||
pos++;
|
||||
|
@ -583,16 +584,19 @@ static t_u32 wlan_process_hostcmd_cfg(pmlan_private pmpriv, t_u16 cfg_type,
|
|||
|
||||
if (start_raw == MFALSE) {
|
||||
intf_s = wlan_strchr(pos, '=');
|
||||
if (intf_s)
|
||||
if (intf_s) {
|
||||
if (*(intf_s + 1) == '=')
|
||||
hostcmd_flag = MTRUE;
|
||||
intf_e = wlan_strchr(intf_s, '{');
|
||||
else
|
||||
} else
|
||||
intf_e = MNULL;
|
||||
|
||||
if (intf_s && intf_e) {
|
||||
start_raw = MTRUE;
|
||||
pos = intf_e + 1;
|
||||
/* Reserve command head for DPD RAW data conf */
|
||||
if (cfg_type == CFG_TYPE_DPDFILE) {
|
||||
if (cfg_type == CFG_TYPE_DPDFILE &&
|
||||
!hostcmd_flag) {
|
||||
pcmd = (HostCmd_DS_GEN *)ptr;
|
||||
ptr += S_DS_GEN +
|
||||
sizeof(HostCmd_DS_802_11_CFG_DATA);
|
||||
|
@ -888,7 +892,7 @@ static mlan_status wlan_ret_host_cmd(pmlan_private pmpriv,
|
|||
misc = (mlan_ds_misc_cfg *)pioctl_buf->pbuf;
|
||||
misc->param.hostcmd.len = size;
|
||||
memcpy_ext(pmpriv->adapter, misc->param.hostcmd.cmd,
|
||||
(void *)resp, size, MLAN_SIZE_OF_CMD_BUFFER);
|
||||
(void *)resp, size, MRVDRV_SIZE_OF_CMD_BUFFER);
|
||||
}
|
||||
|
||||
LEAVE();
|
||||
|
@ -1512,7 +1516,8 @@ mlan_status wlan_process_event(pmlan_adapter pmadapter)
|
|||
sizeof(eventcause));
|
||||
}
|
||||
|
||||
if (eventcause != EVENT_PS_SLEEP && eventcause != EVENT_PS_AWAKE) {
|
||||
if (eventcause != EVENT_PS_SLEEP && eventcause != EVENT_PS_AWAKE &&
|
||||
eventcause != EVENT_FW_DUMP_INFO) {
|
||||
PRINTM_GET_SYS_TIME(MEVENT, &in_ts_sec, &in_ts_usec);
|
||||
PRINTM_NETINTF(MEVENT, priv);
|
||||
PRINTM(MEVENT, "%lu.%06lu : Event: 0x%x\n", in_ts_sec,
|
||||
|
@ -4051,6 +4056,16 @@ mlan_status wlan_adapter_get_hw_spec(pmlan_adapter pmadapter)
|
|||
pmadapter->ptxpwr_data = MNULL;
|
||||
pmadapter->txpwr_data_len = 0;
|
||||
}
|
||||
if (!pmadapter->pdpd_data &&
|
||||
(pmadapter->dpd_data_len == UNKNOW_DPD_LENGTH)) {
|
||||
ret = wlan_prepare_cmd(priv, HostCmd_CMD_CFG_DATA,
|
||||
HostCmd_ACT_GEN_GET, OID_TYPE_DPD, MNULL,
|
||||
MNULL);
|
||||
if (ret) {
|
||||
ret = MLAN_STATUS_FAILURE;
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
/** Cal data dnld cmd prepare */
|
||||
if ((pmadapter->pcal_data) && (pmadapter->cal_data_len > 0)) {
|
||||
ret = wlan_prepare_cmd(priv, HostCmd_CMD_CFG_DATA,
|
||||
|
@ -4577,7 +4592,7 @@ mlan_status wlan_cmd_cfg_data(pmlan_private pmpriv, HostCmd_DS_COMMAND *pcmd,
|
|||
mlan_status ret = MLAN_STATUS_SUCCESS;
|
||||
HostCmd_DS_802_11_CFG_DATA *pcfg_data = &(pcmd->params.cfg_data);
|
||||
pmlan_adapter pmadapter = pmpriv->adapter;
|
||||
t_u32 len;
|
||||
t_u32 len = 0;
|
||||
t_u32 data_offset;
|
||||
t_u8 *temp_pcmd = (t_u8 *)pcmd;
|
||||
|
||||
|
@ -4590,9 +4605,6 @@ mlan_status wlan_cmd_cfg_data(pmlan_private pmpriv, HostCmd_DS_COMMAND *pcmd,
|
|||
len = wlan_parse_cal_cfg((t_u8 *)pmadapter->pcal_data,
|
||||
pmadapter->cal_data_len,
|
||||
(t_u8 *)(temp_pcmd + data_offset));
|
||||
} else {
|
||||
ret = MLAN_STATUS_FAILURE;
|
||||
goto done;
|
||||
}
|
||||
|
||||
pcfg_data->action = cmd_action;
|
||||
|
@ -4609,7 +4621,6 @@ mlan_status wlan_cmd_cfg_data(pmlan_private pmpriv, HostCmd_DS_COMMAND *pcmd,
|
|||
pcfg_data->type = wlan_cpu_to_le16(pcfg_data->type);
|
||||
pcfg_data->data_len = wlan_cpu_to_le16(pcfg_data->data_len);
|
||||
|
||||
done:
|
||||
LEAVE();
|
||||
return ret;
|
||||
}
|
||||
|
@ -4623,10 +4634,17 @@ done:
|
|||
*
|
||||
* @return MLAN_STATUS_SUCCESS or MLAN_STATUS_FAILURE
|
||||
*/
|
||||
mlan_status wlan_ret_cfg_data(pmlan_private pmpriv, HostCmd_DS_COMMAND *resp,
|
||||
t_void *pioctl_buf)
|
||||
mlan_status wlan_ret_cfg_data(IN pmlan_private pmpriv,
|
||||
IN HostCmd_DS_COMMAND *resp,
|
||||
IN t_void *pioctl_buf)
|
||||
{
|
||||
mlan_status ret = MLAN_STATUS_SUCCESS;
|
||||
t_u8 event_buf[100];
|
||||
mlan_cmdresp_event *pevent = (mlan_cmdresp_event *)event_buf;
|
||||
mlan_adapter *pmadapter = pmpriv->adapter;
|
||||
HostCmd_DS_802_11_CFG_DATA *pcfg_data = &resp->params.cfg_data;
|
||||
t_u16 action;
|
||||
t_u16 type;
|
||||
|
||||
ENTER();
|
||||
|
||||
|
@ -4634,6 +4652,25 @@ mlan_status wlan_ret_cfg_data(pmlan_private pmpriv, HostCmd_DS_COMMAND *resp,
|
|||
PRINTM(MERROR, "CFG data cmd resp failed\n");
|
||||
ret = MLAN_STATUS_FAILURE;
|
||||
}
|
||||
|
||||
if (!pmadapter->pdpd_data &&
|
||||
(pmadapter->dpd_data_len == UNKNOW_DPD_LENGTH) &&
|
||||
pmadapter->hw_status == WlanHardwareStatusGetHwSpec) {
|
||||
action = wlan_le16_to_cpu(pcfg_data->action);
|
||||
type = wlan_le16_to_cpu(pcfg_data->type);
|
||||
if (action == HostCmd_ACT_GEN_GET && (type == OID_TYPE_DPD)) {
|
||||
pcfg_data->action =
|
||||
wlan_cpu_to_le16(HostCmd_ACT_GEN_SET);
|
||||
pevent->bss_index = pmpriv->bss_index;
|
||||
pevent->event_id = MLAN_EVENT_ID_STORE_HOST_CMD_RESP;
|
||||
pevent->resp = (t_u8 *)resp;
|
||||
pevent->event_len = wlan_le16_to_cpu(resp->size);
|
||||
wlan_recv_event(pmpriv,
|
||||
MLAN_EVENT_ID_STORE_HOST_CMD_RESP,
|
||||
(mlan_event *)pevent);
|
||||
}
|
||||
}
|
||||
|
||||
LEAVE();
|
||||
return ret;
|
||||
}
|
||||
|
@ -7842,6 +7879,70 @@ mlan_status wlan_ret_rxabortcfg_ext(pmlan_private pmpriv,
|
|||
return MLAN_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function prepares command of Dot11mc unassoc ftm cfg
|
||||
*
|
||||
* @param pmpriv A pointer to mlan_private structure
|
||||
* @param cmd A pointer to HostCmd_DS_COMMAND structure
|
||||
* @param cmd_action the action: GET or SET
|
||||
* @param pdata_buf A pointer to data buffer
|
||||
* @return MLAN_STATUS_SUCCESS
|
||||
*/
|
||||
mlan_status wlan_cmd_dot11mc_unassoc_ftm_cfg(pmlan_private pmpriv,
|
||||
HostCmd_DS_COMMAND *cmd,
|
||||
t_u16 cmd_action,
|
||||
t_void *pdata_buf)
|
||||
{
|
||||
HostCmd_DS_CMD_DOT11MC_UNASSOC_FTM_CFG *cfg_cmd =
|
||||
(HostCmd_DS_CMD_DOT11MC_UNASSOC_FTM_CFG *)&cmd->params
|
||||
.dot11mc_unassoc_ftm_cfg;
|
||||
mlan_ds_misc_dot11mc_unassoc_ftm_cfg *cfg =
|
||||
(mlan_ds_misc_dot11mc_unassoc_ftm_cfg *)pdata_buf;
|
||||
|
||||
ENTER();
|
||||
|
||||
cmd->command = wlan_cpu_to_le16(HostCmd_CMD_DOT11MC_UNASSOC_FTM_CFG);
|
||||
cmd->size = wlan_cpu_to_le16(
|
||||
sizeof(HostCmd_DS_CMD_DOT11MC_UNASSOC_FTM_CFG) + S_DS_GEN);
|
||||
cfg_cmd->action = wlan_cpu_to_le16(cmd_action);
|
||||
|
||||
if (cmd_action == HostCmd_ACT_GEN_SET) {
|
||||
cfg_cmd->state = wlan_cpu_to_le16(cfg->state);
|
||||
}
|
||||
|
||||
LEAVE();
|
||||
return MLAN_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles the command response of Dot11mc unassoc ftm cfg
|
||||
*
|
||||
* @param pmpriv A pointer to mlan_private structure
|
||||
* @param resp A pointer to HostCmd_DS_COMMAND
|
||||
* @param pioctl_buf A pointer to mlan_ioctl_req structure
|
||||
*
|
||||
* @return MLAN_STATUS_SUCCESS
|
||||
*/
|
||||
mlan_status wlan_ret_dot11mc_unassoc_ftm_cfg(pmlan_private pmpriv,
|
||||
HostCmd_DS_COMMAND *resp,
|
||||
mlan_ioctl_req *pioctl_buf)
|
||||
{
|
||||
HostCmd_DS_CMD_DOT11MC_UNASSOC_FTM_CFG *cfg_cmd =
|
||||
(HostCmd_DS_CMD_DOT11MC_UNASSOC_FTM_CFG *)&resp->params
|
||||
.dot11mc_unassoc_ftm_cfg;
|
||||
mlan_ds_misc_cfg *misc_cfg = MNULL;
|
||||
|
||||
ENTER();
|
||||
|
||||
if (pioctl_buf) {
|
||||
misc_cfg = (mlan_ds_misc_cfg *)pioctl_buf->pbuf;
|
||||
misc_cfg->param.dot11mc_unassoc_ftm_cfg.state =
|
||||
wlan_le16_to_cpu(cfg_cmd->state);
|
||||
}
|
||||
LEAVE();
|
||||
return MLAN_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function prepares command of Tx ampdu prot mode
|
||||
*
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
#define _MLAN_DECL_H_
|
||||
|
||||
/** MLAN release version */
|
||||
#define MLAN_RELEASE_VERSION "207"
|
||||
#define MLAN_RELEASE_VERSION "210"
|
||||
|
||||
/** Re-define generic data types for MLAN/MOAL */
|
||||
/** Signed char (1-byte) */
|
||||
|
@ -238,7 +238,7 @@ typedef t_s32 t_sval;
|
|||
|
||||
/** Size of command buffer */
|
||||
/** because cal_data_size 2.4 k */
|
||||
#define MRVDRV_SIZE_OF_CMD_BUFFER (3 * 1024)
|
||||
#define MRVDRV_SIZE_OF_CMD_BUFFER (4 * 1024)
|
||||
/** Size of rx command buffer */
|
||||
#define MLAN_RX_CMD_BUF_SIZE MRVDRV_SIZE_OF_CMD_BUFFER
|
||||
/** Upload size */
|
||||
|
@ -754,6 +754,7 @@ typedef enum _mlan_event_id {
|
|||
MLAN_EVENT_ID_DRV_ASSOC_SUCC_LOGGER = 0x80000027,
|
||||
MLAN_EVENT_ID_DRV_DISCONNECT_LOGGER = 0x80000028,
|
||||
MLAN_EVENT_ID_DRV_WIFI_STATUS = 0x80000029,
|
||||
MLAN_EVENT_ID_STORE_HOST_CMD_RESP = 0x80000030,
|
||||
} mlan_event_id;
|
||||
|
||||
/** Data Structures */
|
||||
|
@ -803,6 +804,7 @@ typedef MLAN_PACK_START struct _MrvlIEtypes_Data_t {
|
|||
|
||||
#define OID_TYPE_CAL 0x2
|
||||
#define OID_TYPE_DPD 0xa
|
||||
#define UNKNOW_DPD_LENGTH 0xffffffff
|
||||
|
||||
/** Custom data structure */
|
||||
typedef struct _mlan_init_param {
|
||||
|
@ -958,6 +960,18 @@ typedef struct _mlan_event {
|
|||
t_u8 event_buf[];
|
||||
} mlan_event, *pmlan_event;
|
||||
|
||||
/** mlan_cmdresp_event data structure */
|
||||
typedef struct _mlan_cmdresp_event {
|
||||
/** BSS index number for multiple BSS support */
|
||||
t_u32 bss_index;
|
||||
/** Event ID */
|
||||
mlan_event_id event_id;
|
||||
/** Event length */
|
||||
t_u32 event_len;
|
||||
/** resp buffer pointer */
|
||||
t_u8 *resp;
|
||||
} mlan_cmdresp_event, *pmlan_cmdresp_event;
|
||||
|
||||
/** csi event data structure */
|
||||
|
||||
/** mlan_ioctl_req data structure */
|
||||
|
|
|
@ -1598,6 +1598,7 @@ typedef MLAN_PACK_START struct _power_table_attr {
|
|||
#define HostCmd_CMD_LOW_POWER_MODE_CFG 0x026e
|
||||
#define HostCmd_CMD_UAP_BEACON_STUCK_CFG 0x0271
|
||||
#define HostCmd_CMD_ARB_CONFIG 0x0273
|
||||
#define HostCmd_CMD_DOT11MC_UNASSOC_FTM_CFG 0x0275
|
||||
|
||||
/** Enhanced PS modes */
|
||||
typedef enum _ENH_PS_MODES {
|
||||
|
@ -4649,10 +4650,12 @@ typedef struct MLAN_PACK_START _hostcmd_twt_setup {
|
|||
t_u8 twt_exponent;
|
||||
/** TWT Mantissa Range: [0-sizeof(UINT16)] */
|
||||
t_u16 twt_mantissa;
|
||||
/** TWT Request Type, 0: REQUEST_TWT, 1: SUGGEST_TWT*/
|
||||
t_u8 twt_request;
|
||||
/** TWT Setup State. Set to 0 by driver, filled by FW in response*/
|
||||
t_u8 twt_setup_state;
|
||||
/** Reserved, set to 0. */
|
||||
t_u8 reserved[3];
|
||||
t_u8 reserved[2];
|
||||
} MLAN_PACK_END hostcmd_twt_setup, *phostcmd_twt_setup;
|
||||
|
||||
/** Type definition of hostcmd_twt_teardown */
|
||||
|
@ -7031,6 +7034,14 @@ typedef MLAN_PACK_START struct _HostCmd_DS_CMD_TX_AMPDU_PROT_MODE {
|
|||
t_u16 mode;
|
||||
} MLAN_PACK_END HostCmd_DS_CMD_TX_AMPDU_PROT_MODE;
|
||||
|
||||
/** HostCmd_DS_CMD_DOT11MC_UNASSOC_FTM_CFG */
|
||||
typedef MLAN_PACK_START struct _HostCmd_DS_CMD_DOT11MC_UNASSOC_FTM_CFG {
|
||||
/** Action */
|
||||
t_u16 action;
|
||||
/** Cfg state */
|
||||
t_u16 state;
|
||||
} MLAN_PACK_END HostCmd_DS_CMD_DOT11MC_UNASSOC_FTM_CFG;
|
||||
|
||||
/** HostCmd_CMD_RATE_ADAPT_CFG */
|
||||
typedef MLAN_PACK_START struct _HostCmd_DS_CMD_RATE_ADAPT_CFG {
|
||||
/** Action */
|
||||
|
@ -7325,6 +7336,7 @@ typedef struct MLAN_PACK_START _HostCmd_DS_COMMAND {
|
|||
struct mfg_cmd_tx_cont mfg_tx_cont;
|
||||
struct mfg_cmd_tx_frame2 mfg_tx_frame2;
|
||||
HostCmd_DS_CMD_ARB_CONFIG arb_cfg;
|
||||
HostCmd_DS_CMD_DOT11MC_UNASSOC_FTM_CFG dot11mc_unassoc_ftm_cfg;
|
||||
} params;
|
||||
} MLAN_PACK_END HostCmd_DS_COMMAND, *pHostCmd_DS_COMMAND;
|
||||
|
||||
|
|
|
@ -330,6 +330,7 @@ enum _mlan_ioctl_req_id {
|
|||
MLAN_OID_MISC_BEACON_STUCK = 0x00200079,
|
||||
MLAN_OID_MISC_CFP_TABLE = 0x0020007A,
|
||||
MLAN_OID_MISC_RANGE_EXT = 0x0020007B,
|
||||
MLAN_OID_MISC_DOT11MC_UNASSOC_FTM_CFG = 0x0020007C,
|
||||
};
|
||||
|
||||
/** Sub command size */
|
||||
|
@ -2870,9 +2871,7 @@ typedef struct _mlan_ds_beacon_stuck_param_cfg {
|
|||
#define HOST_SLEEP_COND_IPV6_PACKET MBIT(31)
|
||||
|
||||
/** Host sleep config conditions: Default */
|
||||
#define HOST_SLEEP_DEF_COND \
|
||||
(HOST_SLEEP_COND_BROADCAST_DATA | HOST_SLEEP_COND_UNICAST_DATA | \
|
||||
HOST_SLEEP_COND_MAC_EVENT)
|
||||
#define HOST_SLEEP_DEF_COND 0
|
||||
|
||||
/** Host sleep config GPIO : Default */
|
||||
#define HOST_SLEEP_DEF_GPIO 0xff
|
||||
|
@ -3908,6 +3907,8 @@ typedef struct MLAN_PACK_START _mlan_ds_twt_setup {
|
|||
t_u8 twt_exponent;
|
||||
/** TWT Mantissa Range: [0-sizeof(UINT16)] */
|
||||
t_u16 twt_mantissa;
|
||||
/** TWT Request Type, 0: REQUEST_TWT, 1: SUGGEST_TWT*/
|
||||
t_u8 twt_request;
|
||||
} MLAN_PACK_END mlan_ds_twt_setup, *pmlan_ds_twt_setup;
|
||||
|
||||
/** Type definition of mlan_ds_twt_teardown for MLAN_OID_11AX_TWT_CFG */
|
||||
|
@ -4175,7 +4176,7 @@ typedef struct _mlan_ds_misc_cmd {
|
|||
/** Command length */
|
||||
t_u32 len;
|
||||
/** Command buffer */
|
||||
t_u8 cmd[MLAN_SIZE_OF_CMD_BUFFER];
|
||||
t_u8 cmd[MRVDRV_SIZE_OF_CMD_BUFFER];
|
||||
} mlan_ds_misc_cmd;
|
||||
|
||||
/** Maximum number of system clocks */
|
||||
|
@ -4244,6 +4245,14 @@ typedef struct _mlan_ds_misc_tx_ampdu_prot_mode {
|
|||
t_u16 mode;
|
||||
} mlan_ds_misc_tx_ampdu_prot_mode;
|
||||
|
||||
/** Type definition of mlan_ds_misc_dot11mc_unassoc_ftm_cfg
|
||||
* for MLAN_OID_MISC_DOT11MC_UNASSOC_FTM_CFG
|
||||
*/
|
||||
typedef struct _mlan_ds_misc_dot11mc_unassoc_ftm_cfg {
|
||||
/** set the state */
|
||||
t_u16 state;
|
||||
} mlan_ds_misc_dot11mc_unassoc_ftm_cfg;
|
||||
|
||||
#define RATEADAPT_ALGO_LEGACY 0
|
||||
#define RATEADAPT_ALGO_SR 1
|
||||
|
||||
|
@ -5089,6 +5098,7 @@ typedef struct _mlan_ds_misc_cfg {
|
|||
mlan_ds_misc_arb_cfg arb_cfg;
|
||||
mlan_ds_misc_cfp_tbl cfp;
|
||||
t_u8 range_ext_mode;
|
||||
mlan_ds_misc_dot11mc_unassoc_ftm_cfg dot11mc_unassoc_ftm_cfg;
|
||||
} param;
|
||||
} mlan_ds_misc_cfg, *pmlan_ds_misc_cfg;
|
||||
|
||||
|
|
|
@ -2671,6 +2671,7 @@ typedef struct _mlan_adapter {
|
|||
|
||||
/** Ethernet packet type for EAPOL */
|
||||
#define MLAN_ETHER_PKT_TYPE_EAPOL (0x888E)
|
||||
#define MLAN_ETHER_PKT_TYPE_ARP (0x0806)
|
||||
/** Ethernet packet type for WAPI */
|
||||
#define MLAN_ETHER_PKT_TYPE_WAPI (0x88B4)
|
||||
/** Ethernet packet type offset */
|
||||
|
@ -3312,6 +3313,13 @@ mlan_status wlan_cmd_tx_ampdu_prot_mode(pmlan_private pmpriv,
|
|||
mlan_status wlan_ret_tx_ampdu_prot_mode(pmlan_private pmpriv,
|
||||
HostCmd_DS_COMMAND *resp,
|
||||
mlan_ioctl_req *pioctl_buf);
|
||||
mlan_status wlan_cmd_dot11mc_unassoc_ftm_cfg(pmlan_private pmpriv,
|
||||
HostCmd_DS_COMMAND *cmd,
|
||||
t_u16 cmd_action,
|
||||
t_void *pdata_buf);
|
||||
mlan_status wlan_ret_dot11mc_unassoc_ftm_cfg(pmlan_private pmpriv,
|
||||
HostCmd_DS_COMMAND *resp,
|
||||
mlan_ioctl_req *pioctl_buf);
|
||||
|
||||
mlan_status wlan_cmd_rate_adapt_cfg(pmlan_private pmpriv,
|
||||
HostCmd_DS_COMMAND *cmd, t_u16 cmd_action,
|
||||
|
@ -3338,6 +3346,8 @@ mlan_status wlan_misc_ioctl_rxabortcfg_ext(pmlan_adapter pmadapter,
|
|||
pmlan_ioctl_req pioctl_req);
|
||||
mlan_status wlan_misc_ioctl_tx_ampdu_prot_mode(pmlan_adapter pmadapter,
|
||||
pmlan_ioctl_req pioctl_req);
|
||||
mlan_status wlan_misc_ioctl_dot11mc_unassoc_ftm_cfg(pmlan_adapter pmadapter,
|
||||
pmlan_ioctl_req pioctl_req);
|
||||
mlan_status wlan_misc_ioctl_rate_adapt_cfg(pmlan_adapter pmadapter,
|
||||
pmlan_ioctl_req pioctl_req);
|
||||
mlan_status wlan_misc_ioctl_cck_desense_cfg(pmlan_adapter pmadapter,
|
||||
|
|
|
@ -5563,6 +5563,38 @@ mlan_status wlan_misc_ioctl_rxabortcfg_ext(pmlan_adapter pmadapter,
|
|||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Dot11mc unassociated FTM CFG
|
||||
*
|
||||
* @param pmadapter A pointer to mlan_adapter structure
|
||||
* @param pioctl_req A pointer to ioctl request buffer
|
||||
*
|
||||
* @return MLAN_STATUS_PENDING --success, otherwise fail
|
||||
*/
|
||||
mlan_status wlan_misc_ioctl_dot11mc_unassoc_ftm_cfg(pmlan_adapter pmadapter,
|
||||
pmlan_ioctl_req pioctl_req)
|
||||
{
|
||||
mlan_private *pmpriv = pmadapter->priv[pioctl_req->bss_index];
|
||||
mlan_ds_misc_cfg *pmisc = (mlan_ds_misc_cfg *)pioctl_req->pbuf;
|
||||
mlan_status ret = MLAN_STATUS_SUCCESS;
|
||||
t_u16 cmd_action = 0;
|
||||
|
||||
ENTER();
|
||||
|
||||
if (pioctl_req->action == MLAN_ACT_SET)
|
||||
cmd_action = HostCmd_ACT_GEN_SET;
|
||||
else
|
||||
cmd_action = HostCmd_ACT_GEN_GET;
|
||||
ret = wlan_prepare_cmd(pmpriv, HostCmd_CMD_DOT11MC_UNASSOC_FTM_CFG,
|
||||
cmd_action, 0, (t_void *)pioctl_req,
|
||||
&(pmisc->param.dot11mc_unassoc_ftm_cfg));
|
||||
if (ret == MLAN_STATUS_SUCCESS)
|
||||
ret = MLAN_STATUS_PENDING;
|
||||
|
||||
LEAVE();
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Tx ampdu protection mode
|
||||
*
|
||||
|
|
|
@ -1365,7 +1365,7 @@ static mlan_status wlan_pcie_delete_cmdrsp_buf(mlan_adapter *pmadapter)
|
|||
pmbuf = pmadapter->pcard_pcie->cmd_buf;
|
||||
pcb->moal_unmap_memory(pmadapter->pmoal_handle,
|
||||
pmbuf->pbuf + pmbuf->data_offset,
|
||||
pmbuf->buf_pa, MLAN_SIZE_OF_CMD_BUFFER,
|
||||
pmbuf->buf_pa, MRVDRV_SIZE_OF_CMD_BUFFER,
|
||||
PCI_DMA_TODEVICE);
|
||||
}
|
||||
|
||||
|
@ -2362,7 +2362,7 @@ static mlan_status wlan_pcie_process_cmd_resp(mlan_adapter *pmadapter)
|
|||
memcpy_ext(pmadapter, pmadapter->upld_buf,
|
||||
pmbuf->pbuf + pmbuf->data_offset +
|
||||
PCIE_INTF_HEADER_LEN,
|
||||
pmadapter->upld_len, MLAN_SIZE_OF_CMD_BUFFER);
|
||||
pmadapter->upld_len, MRVDRV_SIZE_OF_CMD_BUFFER);
|
||||
|
||||
} else {
|
||||
pmadapter->cmd_resp_received = MTRUE;
|
||||
|
|
|
@ -670,7 +670,7 @@ mlan_status mlan_set_init_param(t_void *pmlan_adapter, pmlan_init_param pparam)
|
|||
MASSERT(pmlan_adapter);
|
||||
|
||||
/** Save DPD data in MLAN */
|
||||
if ((pparam->pdpd_data_buf) && (pparam->dpd_data_len > 0)) {
|
||||
if ((pparam->pdpd_data_buf) || (pparam->dpd_data_len > 0)) {
|
||||
pmadapter->pdpd_data = pparam->pdpd_data_buf;
|
||||
pmadapter->dpd_data_len = pparam->dpd_data_len;
|
||||
}
|
||||
|
@ -1308,6 +1308,7 @@ mlan_status mlan_send_packet(t_void *pmlan_adapter, pmlan_buffer pmbuf)
|
|||
MLAN_ETHER_PKT_TYPE_OFFSET]);
|
||||
if (((pmadapter->priv[pmbuf->bss_index]->port_ctrl_mode == MTRUE) &&
|
||||
((eth_type == MLAN_ETHER_PKT_TYPE_EAPOL) ||
|
||||
(eth_type == MLAN_ETHER_PKT_TYPE_ARP) ||
|
||||
(eth_type == MLAN_ETHER_PKT_TYPE_WAPI))) ||
|
||||
(pmbuf->buf_type == MLAN_BUF_TYPE_RAW_DATA)
|
||||
|
||||
|
|
|
@ -2833,6 +2833,10 @@ mlan_status wlan_ops_sta_prepare_cmd(t_void *priv, t_u16 cmd_no,
|
|||
ret = wlan_cmd_tx_ampdu_prot_mode(pmpriv, cmd_ptr, cmd_action,
|
||||
pdata_buf);
|
||||
break;
|
||||
case HostCmd_CMD_DOT11MC_UNASSOC_FTM_CFG:
|
||||
ret = wlan_cmd_dot11mc_unassoc_ftm_cfg(pmpriv, cmd_ptr,
|
||||
cmd_action, pdata_buf);
|
||||
break;
|
||||
case HostCmd_CMD_RATE_ADAPT_CFG:
|
||||
ret = wlan_cmd_rate_adapt_cfg(pmpriv, cmd_ptr, cmd_action,
|
||||
pdata_buf);
|
||||
|
|
|
@ -2692,6 +2692,10 @@ mlan_status wlan_ops_sta_process_cmdresp(t_void *priv, t_u16 cmdresp_no,
|
|||
case HostCmd_CMD_TX_AMPDU_PROT_MODE:
|
||||
ret = wlan_ret_tx_ampdu_prot_mode(pmpriv, resp, pioctl_buf);
|
||||
break;
|
||||
case HostCmd_CMD_DOT11MC_UNASSOC_FTM_CFG:
|
||||
ret = wlan_ret_dot11mc_unassoc_ftm_cfg(pmpriv, resp,
|
||||
pioctl_buf);
|
||||
break;
|
||||
case HostCmd_CMD_RATE_ADAPT_CFG:
|
||||
ret = wlan_ret_rate_adapt_cfg(pmpriv, resp, pioctl_buf);
|
||||
break;
|
||||
|
|
|
@ -930,7 +930,7 @@ mlan_status wlan_ops_sta_process_event(t_void *priv)
|
|||
} break;
|
||||
|
||||
case EVENT_FW_DUMP_INFO:
|
||||
PRINTM(MEVENT, "EVENT: Dump FW info\n");
|
||||
PRINTM(MINFO, "EVENT: Dump FW info\n");
|
||||
pevent->bss_index = pmpriv->bss_index;
|
||||
pevent->event_id = MLAN_EVENT_ID_FW_DUMP_INFO;
|
||||
pevent->event_len = pmbuf->data_len;
|
||||
|
|
|
@ -4493,7 +4493,7 @@ mlan_status wlan_misc_ioctl_mef_cfg(pmlan_adapter pmadapter,
|
|||
buf_len += sizeof(HostCmd_DS_MEF_CFG);
|
||||
filter = buf + buf_len;
|
||||
memcpy_ext(pmpriv->adapter, filter, fltr_buf, sizeof(fltr_buf),
|
||||
MLAN_SIZE_OF_CMD_BUFFER - buf_len);
|
||||
MRVDRV_SIZE_OF_CMD_BUFFER - buf_len);
|
||||
buf_len += sizeof(fltr_buf);
|
||||
break;
|
||||
case MEF_CFG_AUTO_ARP_RESP:
|
||||
|
@ -4505,7 +4505,7 @@ mlan_status wlan_misc_ioctl_mef_cfg(pmlan_adapter pmadapter,
|
|||
filter = buf + buf_len;
|
||||
memcpy_ext(pmpriv->adapter, filter, mef_cfg->param.cmd_buf.cmd,
|
||||
mef_cfg->param.cmd_buf.len,
|
||||
MLAN_SIZE_OF_CMD_BUFFER - buf_len);
|
||||
MRVDRV_SIZE_OF_CMD_BUFFER - buf_len);
|
||||
buf_len += mef_cfg->param.cmd_buf.len;
|
||||
break;
|
||||
default:
|
||||
|
@ -5147,6 +5147,10 @@ static mlan_status wlan_misc_cfg_ioctl(pmlan_adapter pmadapter,
|
|||
status = wlan_misc_ioctl_tx_ampdu_prot_mode(pmadapter,
|
||||
pioctl_req);
|
||||
break;
|
||||
case MLAN_OID_MISC_DOT11MC_UNASSOC_FTM_CFG:
|
||||
status = wlan_misc_ioctl_dot11mc_unassoc_ftm_cfg(pmadapter,
|
||||
pioctl_req);
|
||||
break;
|
||||
case MLAN_OID_MISC_RATE_ADAPT_CFG:
|
||||
status = wlan_misc_ioctl_rate_adapt_cfg(pmadapter, pioctl_req);
|
||||
break;
|
||||
|
@ -5167,6 +5171,7 @@ static mlan_status wlan_misc_cfg_ioctl(pmlan_adapter pmadapter,
|
|||
case MLAN_OID_MISC_ARB_CONFIG:
|
||||
status = wlan_misc_ioctl_arb_cfg(pmadapter, pioctl_req);
|
||||
break;
|
||||
case MLAN_OID_MISC_RANGE_EXT:
|
||||
status = wlan_misc_ioctl_range_ext(pmadapter, pioctl_req);
|
||||
break;
|
||||
default:
|
||||
|
|
|
@ -4571,6 +4571,10 @@ mlan_status wlan_ops_uap_prepare_cmd(t_void *priv, t_u16 cmd_no,
|
|||
ret = wlan_cmd_tx_ampdu_prot_mode(pmpriv, cmd_ptr, cmd_action,
|
||||
pdata_buf);
|
||||
break;
|
||||
case HostCmd_CMD_DOT11MC_UNASSOC_FTM_CFG:
|
||||
ret = wlan_cmd_dot11mc_unassoc_ftm_cfg(pmpriv, cmd_ptr,
|
||||
cmd_action, pdata_buf);
|
||||
break;
|
||||
case HostCmd_CMD_RATE_ADAPT_CFG:
|
||||
ret = wlan_cmd_rate_adapt_cfg(pmpriv, cmd_ptr, cmd_action,
|
||||
pdata_buf);
|
||||
|
@ -4941,6 +4945,10 @@ mlan_status wlan_ops_uap_process_cmdresp(t_void *priv, t_u16 cmdresp_no,
|
|||
case HostCmd_CMD_TX_AMPDU_PROT_MODE:
|
||||
ret = wlan_ret_tx_ampdu_prot_mode(pmpriv, resp, pioctl_buf);
|
||||
break;
|
||||
case HostCmd_CMD_DOT11MC_UNASSOC_FTM_CFG:
|
||||
ret = wlan_ret_dot11mc_unassoc_ftm_cfg(pmpriv, resp,
|
||||
pioctl_buf);
|
||||
break;
|
||||
case HostCmd_CMD_RATE_ADAPT_CFG:
|
||||
ret = wlan_ret_rate_adapt_cfg(pmpriv, resp, pioctl_buf);
|
||||
break;
|
||||
|
|
|
@ -2069,6 +2069,9 @@ mlan_status wlan_ops_uap_ioctl(t_void *adapter, pmlan_ioctl_req pioctl_req)
|
|||
if (misc->sub_command == MLAN_OID_MISC_TX_AMPDU_PROT_MODE)
|
||||
status = wlan_misc_ioctl_tx_ampdu_prot_mode(pmadapter,
|
||||
pioctl_req);
|
||||
if (misc->sub_command == MLAN_OID_MISC_DOT11MC_UNASSOC_FTM_CFG)
|
||||
status = wlan_misc_ioctl_dot11mc_unassoc_ftm_cfg(
|
||||
pmadapter, pioctl_req);
|
||||
if (misc->sub_command == MLAN_OID_MISC_RATE_ADAPT_CFG)
|
||||
status = wlan_misc_ioctl_rate_adapt_cfg(pmadapter,
|
||||
pioctl_req);
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
#define _MLAN_DECL_H_
|
||||
|
||||
/** MLAN release version */
|
||||
#define MLAN_RELEASE_VERSION "207"
|
||||
#define MLAN_RELEASE_VERSION "210"
|
||||
|
||||
/** Re-define generic data types for MLAN/MOAL */
|
||||
/** Signed char (1-byte) */
|
||||
|
@ -238,7 +238,7 @@ typedef t_s32 t_sval;
|
|||
|
||||
/** Size of command buffer */
|
||||
/** because cal_data_size 2.4 k */
|
||||
#define MRVDRV_SIZE_OF_CMD_BUFFER (3 * 1024)
|
||||
#define MRVDRV_SIZE_OF_CMD_BUFFER (4 * 1024)
|
||||
/** Size of rx command buffer */
|
||||
#define MLAN_RX_CMD_BUF_SIZE MRVDRV_SIZE_OF_CMD_BUFFER
|
||||
/** Upload size */
|
||||
|
@ -754,6 +754,7 @@ typedef enum _mlan_event_id {
|
|||
MLAN_EVENT_ID_DRV_ASSOC_SUCC_LOGGER = 0x80000027,
|
||||
MLAN_EVENT_ID_DRV_DISCONNECT_LOGGER = 0x80000028,
|
||||
MLAN_EVENT_ID_DRV_WIFI_STATUS = 0x80000029,
|
||||
MLAN_EVENT_ID_STORE_HOST_CMD_RESP = 0x80000030,
|
||||
} mlan_event_id;
|
||||
|
||||
/** Data Structures */
|
||||
|
@ -803,6 +804,7 @@ typedef MLAN_PACK_START struct _MrvlIEtypes_Data_t {
|
|||
|
||||
#define OID_TYPE_CAL 0x2
|
||||
#define OID_TYPE_DPD 0xa
|
||||
#define UNKNOW_DPD_LENGTH 0xffffffff
|
||||
|
||||
/** Custom data structure */
|
||||
typedef struct _mlan_init_param {
|
||||
|
@ -958,6 +960,18 @@ typedef struct _mlan_event {
|
|||
t_u8 event_buf[];
|
||||
} mlan_event, *pmlan_event;
|
||||
|
||||
/** mlan_cmdresp_event data structure */
|
||||
typedef struct _mlan_cmdresp_event {
|
||||
/** BSS index number for multiple BSS support */
|
||||
t_u32 bss_index;
|
||||
/** Event ID */
|
||||
mlan_event_id event_id;
|
||||
/** Event length */
|
||||
t_u32 event_len;
|
||||
/** resp buffer pointer */
|
||||
t_u8 *resp;
|
||||
} mlan_cmdresp_event, *pmlan_cmdresp_event;
|
||||
|
||||
/** csi event data structure */
|
||||
|
||||
/** mlan_ioctl_req data structure */
|
||||
|
|
|
@ -330,6 +330,7 @@ enum _mlan_ioctl_req_id {
|
|||
MLAN_OID_MISC_BEACON_STUCK = 0x00200079,
|
||||
MLAN_OID_MISC_CFP_TABLE = 0x0020007A,
|
||||
MLAN_OID_MISC_RANGE_EXT = 0x0020007B,
|
||||
MLAN_OID_MISC_DOT11MC_UNASSOC_FTM_CFG = 0x0020007C,
|
||||
};
|
||||
|
||||
/** Sub command size */
|
||||
|
@ -2870,9 +2871,7 @@ typedef struct _mlan_ds_beacon_stuck_param_cfg {
|
|||
#define HOST_SLEEP_COND_IPV6_PACKET MBIT(31)
|
||||
|
||||
/** Host sleep config conditions: Default */
|
||||
#define HOST_SLEEP_DEF_COND \
|
||||
(HOST_SLEEP_COND_BROADCAST_DATA | HOST_SLEEP_COND_UNICAST_DATA | \
|
||||
HOST_SLEEP_COND_MAC_EVENT)
|
||||
#define HOST_SLEEP_DEF_COND 0
|
||||
|
||||
/** Host sleep config GPIO : Default */
|
||||
#define HOST_SLEEP_DEF_GPIO 0xff
|
||||
|
@ -3908,6 +3907,8 @@ typedef struct MLAN_PACK_START _mlan_ds_twt_setup {
|
|||
t_u8 twt_exponent;
|
||||
/** TWT Mantissa Range: [0-sizeof(UINT16)] */
|
||||
t_u16 twt_mantissa;
|
||||
/** TWT Request Type, 0: REQUEST_TWT, 1: SUGGEST_TWT*/
|
||||
t_u8 twt_request;
|
||||
} MLAN_PACK_END mlan_ds_twt_setup, *pmlan_ds_twt_setup;
|
||||
|
||||
/** Type definition of mlan_ds_twt_teardown for MLAN_OID_11AX_TWT_CFG */
|
||||
|
@ -4175,7 +4176,7 @@ typedef struct _mlan_ds_misc_cmd {
|
|||
/** Command length */
|
||||
t_u32 len;
|
||||
/** Command buffer */
|
||||
t_u8 cmd[MLAN_SIZE_OF_CMD_BUFFER];
|
||||
t_u8 cmd[MRVDRV_SIZE_OF_CMD_BUFFER];
|
||||
} mlan_ds_misc_cmd;
|
||||
|
||||
/** Maximum number of system clocks */
|
||||
|
@ -4244,6 +4245,14 @@ typedef struct _mlan_ds_misc_tx_ampdu_prot_mode {
|
|||
t_u16 mode;
|
||||
} mlan_ds_misc_tx_ampdu_prot_mode;
|
||||
|
||||
/** Type definition of mlan_ds_misc_dot11mc_unassoc_ftm_cfg
|
||||
* for MLAN_OID_MISC_DOT11MC_UNASSOC_FTM_CFG
|
||||
*/
|
||||
typedef struct _mlan_ds_misc_dot11mc_unassoc_ftm_cfg {
|
||||
/** set the state */
|
||||
t_u16 state;
|
||||
} mlan_ds_misc_dot11mc_unassoc_ftm_cfg;
|
||||
|
||||
#define RATEADAPT_ALGO_LEGACY 0
|
||||
#define RATEADAPT_ALGO_SR 1
|
||||
|
||||
|
@ -5089,6 +5098,7 @@ typedef struct _mlan_ds_misc_cfg {
|
|||
mlan_ds_misc_arb_cfg arb_cfg;
|
||||
mlan_ds_misc_cfp_tbl cfp;
|
||||
t_u8 range_ext_mode;
|
||||
mlan_ds_misc_dot11mc_unassoc_ftm_cfg dot11mc_unassoc_ftm_cfg;
|
||||
} param;
|
||||
} mlan_ds_misc_cfg, *pmlan_ds_misc_cfg;
|
||||
|
||||
|
|
|
@ -401,7 +401,7 @@ int woal_priv_hostcmd(moal_private *priv, t_u8 *respbuf, t_u32 respbuflen,
|
|||
|
||||
PRINTM(MINFO, "Host command len = %d\n",
|
||||
woal_le16_to_cpu(cmd_header.size));
|
||||
if (woal_le16_to_cpu(cmd_header.size) > MLAN_SIZE_OF_CMD_BUFFER) {
|
||||
if (woal_le16_to_cpu(cmd_header.size) > MRVDRV_SIZE_OF_CMD_BUFFER) {
|
||||
LEAVE();
|
||||
return -EINVAL;
|
||||
}
|
||||
|
@ -419,7 +419,7 @@ int woal_priv_hostcmd(moal_private *priv, t_u8 *respbuf, t_u32 respbuflen,
|
|||
/* get the whole command */
|
||||
moal_memcpy_ext(priv->phandle, misc_cfg->param.hostcmd.cmd,
|
||||
data_ptr + sizeof(buf_len), misc_cfg->param.hostcmd.len,
|
||||
MLAN_SIZE_OF_CMD_BUFFER);
|
||||
MRVDRV_SIZE_OF_CMD_BUFFER);
|
||||
|
||||
status = woal_request_ioctl(priv, req, wait_option);
|
||||
if (status != MLAN_STATUS_SUCCESS) {
|
||||
|
@ -10370,7 +10370,7 @@ static int woal_priv_dfs_testing(moal_private *priv, t_u8 *respbuf,
|
|||
goto done;
|
||||
}
|
||||
ds_11hcfg->param.dfs_testing.usr_cac_period_msec =
|
||||
(t_u32)data[0];
|
||||
(t_u32)data[0] * 1000;
|
||||
ds_11hcfg->param.dfs_testing.usr_nop_period_sec =
|
||||
(t_u16)data[1];
|
||||
ds_11hcfg->param.dfs_testing.usr_no_chan_change =
|
||||
|
@ -10393,7 +10393,8 @@ static int woal_priv_dfs_testing(moal_private *priv, t_u8 *respbuf,
|
|||
}
|
||||
|
||||
if (!user_data_len) {
|
||||
data[0] = ds_11hcfg->param.dfs_testing.usr_cac_period_msec;
|
||||
data[0] =
|
||||
ds_11hcfg->param.dfs_testing.usr_cac_period_msec / 1000;
|
||||
data[1] = ds_11hcfg->param.dfs_testing.usr_nop_period_sec;
|
||||
data[2] = ds_11hcfg->param.dfs_testing.usr_no_chan_change;
|
||||
data[3] = ds_11hcfg->param.dfs_testing.usr_fixed_new_chan;
|
||||
|
@ -14267,6 +14268,86 @@ done:
|
|||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Enable/Disable Un-associated Dot11mc FTM Frame exchanges
|
||||
*
|
||||
* @param priv A pointer to moal_private structure
|
||||
* @param respbuf A pointer to response buffer
|
||||
* @param respbuflen Available length of response buffer
|
||||
*
|
||||
* @return Number of bytes written, negative for failure.
|
||||
*/
|
||||
int woal_priv_dot11mc_unassoc_ftm_cfg(moal_private *priv, t_u8 *respbuf,
|
||||
t_u32 respbuflen)
|
||||
{
|
||||
mlan_ioctl_req *req = NULL;
|
||||
mlan_ds_misc_cfg *misc = NULL;
|
||||
int ret = 0;
|
||||
int data[1] = {0};
|
||||
int header_len = 0, user_data_len = 0;
|
||||
mlan_status status = MLAN_STATUS_SUCCESS;
|
||||
|
||||
ENTER();
|
||||
|
||||
if (!respbuf) {
|
||||
PRINTM(MERROR, "response buffer is not available!\n");
|
||||
ret = -EINVAL;
|
||||
goto done;
|
||||
}
|
||||
header_len = strlen(CMD_NXP) + strlen(PRIV_CMD_DOT11MC_UNASSOC_FTM_CFG);
|
||||
user_data_len = strlen(respbuf) - header_len;
|
||||
|
||||
/* Allocate an IOCTL request buffer */
|
||||
req = woal_alloc_mlan_ioctl_req(sizeof(mlan_ds_misc_cfg));
|
||||
if (req == NULL) {
|
||||
ret = -ENOMEM;
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* Fill request buffer */
|
||||
misc = (mlan_ds_misc_cfg *)req->pbuf;
|
||||
misc->sub_command = MLAN_OID_MISC_DOT11MC_UNASSOC_FTM_CFG;
|
||||
req->req_id = MLAN_IOCTL_MISC_CFG;
|
||||
if (strlen(respbuf) == header_len) {
|
||||
/* GET operation */
|
||||
user_data_len = 0;
|
||||
req->action = MLAN_ACT_GET;
|
||||
} else {
|
||||
/* SET operation */
|
||||
parse_arguments(respbuf + header_len, data, ARRAY_SIZE(data),
|
||||
&user_data_len);
|
||||
if (user_data_len > 1) {
|
||||
PRINTM(MERROR, "Invalid number of args!\n");
|
||||
ret = -EINVAL;
|
||||
goto done;
|
||||
}
|
||||
if ((data[0] != MTRUE) && (data[0] != MFALSE)) {
|
||||
PRINTM(MERROR, "Invalid state for unassoc ftm\n");
|
||||
ret = -EINVAL;
|
||||
goto done;
|
||||
}
|
||||
misc->param.dot11mc_unassoc_ftm_cfg.state = (t_u16)data[0];
|
||||
req->action = MLAN_ACT_SET;
|
||||
}
|
||||
/* Send IOCTL request to MLAN */
|
||||
status = woal_request_ioctl(priv, req, MOAL_IOCTL_WAIT);
|
||||
if (status != MLAN_STATUS_SUCCESS) {
|
||||
ret = -EFAULT;
|
||||
goto done;
|
||||
}
|
||||
|
||||
data[0] = misc->param.dot11mc_unassoc_ftm_cfg.state;
|
||||
moal_memcpy_ext(priv->phandle, respbuf, (t_u8 *)data, sizeof(data),
|
||||
respbuflen);
|
||||
ret = sizeof(data);
|
||||
done:
|
||||
if (status != MLAN_STATUS_PENDING)
|
||||
kfree(req);
|
||||
|
||||
LEAVE();
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set/Get Tx AMPDU protection mode
|
||||
*
|
||||
|
@ -15225,6 +15306,15 @@ int woal_android_priv_cmd(struct net_device *dev, struct ifreq *req)
|
|||
len = woal_priv_tx_ampdu_prot_mode(priv, buf,
|
||||
priv_cmd.total_len);
|
||||
goto handled;
|
||||
} else if (strnicmp(buf + strlen(CMD_NXP),
|
||||
PRIV_CMD_DOT11MC_UNASSOC_FTM_CFG,
|
||||
strlen(PRIV_CMD_DOT11MC_UNASSOC_FTM_CFG)) ==
|
||||
0) {
|
||||
/* setting for dot11mc un-associated case FTM frame
|
||||
* exchange */
|
||||
len = woal_priv_dot11mc_unassoc_ftm_cfg(
|
||||
priv, buf, priv_cmd.total_len);
|
||||
goto handled;
|
||||
} else if (strnicmp(buf + strlen(CMD_NXP),
|
||||
PRIV_CMD_RATE_ADAPT_CFG,
|
||||
strlen(PRIV_CMD_RATE_ADAPT_CFG)) == 0) {
|
||||
|
|
|
@ -293,6 +293,7 @@ typedef struct _chan_stats {
|
|||
#define CCK_DESENSE_MODE_DYN_ENH 2
|
||||
/**Private command to configure cck desense config */
|
||||
#define PRIV_CMD_CCK_DESENSE_CFG "cck_desense_cfg"
|
||||
#define PRIV_CMD_DOT11MC_UNASSOC_FTM_CFG "dot11mc_unassoc_ftm_cfg"
|
||||
|
||||
/** Private command ID for Android default commands */
|
||||
#define WOAL_ANDROID_DEF_CMD (SIOCDEVPRIVATE + 1)
|
||||
|
|
|
@ -2067,7 +2067,7 @@ int woal_host_command(moal_private *priv, struct iwreq *wrq)
|
|||
PRINTM(MINFO, "Host command len = %u\n", misc->param.hostcmd.len);
|
||||
|
||||
if (!misc->param.hostcmd.len ||
|
||||
misc->param.hostcmd.len > MLAN_SIZE_OF_CMD_BUFFER) {
|
||||
misc->param.hostcmd.len > MRVDRV_SIZE_OF_CMD_BUFFER) {
|
||||
PRINTM(MERROR, "Invalid data buffer length\n");
|
||||
ret = -EINVAL;
|
||||
goto done;
|
||||
|
@ -2156,7 +2156,7 @@ int woal_hostcmd_ioctl(struct net_device *dev, struct ifreq *req)
|
|||
PRINTM(MINFO, "Host command len = %d\n",
|
||||
woal_le16_to_cpu(cmd_header.size));
|
||||
|
||||
if (woal_le16_to_cpu(cmd_header.size) > MLAN_SIZE_OF_CMD_BUFFER) {
|
||||
if (woal_le16_to_cpu(cmd_header.size) > MRVDRV_SIZE_OF_CMD_BUFFER) {
|
||||
ret = -EINVAL;
|
||||
goto done;
|
||||
}
|
||||
|
|
|
@ -2784,6 +2784,7 @@ static mlan_status woal_req_dpd_data(moal_handle *handle,
|
|||
int ret = MLAN_STATUS_SUCCESS;
|
||||
t_u8 req_fw_nowait = moal_extflg_isset(handle, EXT_REQ_FW_NOWAIT);
|
||||
char *dpd_data_cfg = handle->params.dpd_data_cfg;
|
||||
mlan_status status = MLAN_STATUS_SUCCESS;
|
||||
|
||||
ENTER();
|
||||
|
||||
|
@ -2819,8 +2820,10 @@ static mlan_status woal_req_dpd_data(moal_handle *handle,
|
|||
handle->init_user_conf_wait_q,
|
||||
handle->init_user_conf_wait_flag);
|
||||
} else {
|
||||
if ((request_firmware(&handle->dpd_data, dpd_data_cfg,
|
||||
handle->hotplug_device)) < 0) {
|
||||
status = request_firmware(&handle->dpd_data,
|
||||
dpd_data_cfg,
|
||||
handle->hotplug_device);
|
||||
if (status < 0 && status != -ENOENT) {
|
||||
PRINTM(MERROR,
|
||||
"DPD data request_firmware() failed\n");
|
||||
ret = MLAN_STATUS_FAILURE;
|
||||
|
@ -2830,6 +2833,8 @@ static mlan_status woal_req_dpd_data(moal_handle *handle,
|
|||
if (handle->dpd_data) {
|
||||
param->pdpd_data_buf = (t_u8 *)handle->dpd_data->data;
|
||||
param->dpd_data_len = handle->dpd_data->size;
|
||||
} else {
|
||||
param->dpd_data_len = UNKNOW_DPD_LENGTH;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -6195,6 +6200,7 @@ static int woal_get_card_info(moal_handle *phandle)
|
|||
#ifdef PCIE9098
|
||||
case CARD_TYPE_PCIE9098:
|
||||
phandle->card_info = &card_info_PCIE9098;
|
||||
phandle->event_fw_dump = MTRUE;
|
||||
break;
|
||||
#endif
|
||||
#ifdef USB8997
|
||||
|
@ -6987,11 +6993,14 @@ save_ssudump:
|
|||
#endif /* SSU_SUPPORT */
|
||||
|
||||
#define OFFSET_SEQNUM 4
|
||||
#define OFFSET_TYPE 8
|
||||
#define DUMP_TYPE_ENDE 2
|
||||
t_void woal_store_firmware_dump(moal_handle *phandle, mlan_event *pmevent)
|
||||
{
|
||||
struct file *pfile_fwdump = NULL;
|
||||
loff_t pos = 0;
|
||||
t_u16 seqnum;
|
||||
t_u16 type = 0;
|
||||
t_u8 path_name[64];
|
||||
moal_handle *ref_handle = NULL;
|
||||
|
||||
|
@ -7002,7 +7011,15 @@ t_void woal_store_firmware_dump(moal_handle *phandle, mlan_event *pmevent)
|
|||
else {
|
||||
seqnum = woal_le16_to_cpu(
|
||||
*(t_u16 *)(pmevent->event_buf + OFFSET_SEQNUM));
|
||||
type = woal_le16_to_cpu(
|
||||
*(t_u16 *)(pmevent->event_buf + OFFSET_TYPE));
|
||||
|
||||
if (seqnum == 1) {
|
||||
if (drvdbg & MFW_D)
|
||||
drvdbg &= ~MFW_D;
|
||||
phandle->fw_dump_len = 0;
|
||||
PRINTM(MMSG,
|
||||
"==== Start Receive FW dump event ====\n");
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 1, 0)
|
||||
/** Create dump directort*/
|
||||
woal_create_dump_dir(phandle, path_name,
|
||||
|
@ -7049,13 +7066,18 @@ t_void woal_store_firmware_dump(moal_handle *phandle, mlan_event *pmevent)
|
|||
LEAVE();
|
||||
return;
|
||||
}
|
||||
phandle->fw_dump_len += pmevent->event_len - OFFSET_SEQNUM;
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 14, 0)
|
||||
vfs_write(pfile_fwdump, pmevent->event_buf, pmevent->event_len, &pos);
|
||||
vfs_write(pfile_fwdump, pmevent->event_buf + OFFSET_SEQNUM,
|
||||
pmevent->event_len - OFFSET_SEQNUM, &pos);
|
||||
#else
|
||||
kernel_write(pfile_fwdump, pmevent->event_buf, pmevent->event_len,
|
||||
&pos);
|
||||
kernel_write(pfile_fwdump, pmevent->event_buf + OFFSET_SEQNUM,
|
||||
pmevent->event_len - OFFSET_SEQNUM, &pos);
|
||||
#endif
|
||||
filp_close(pfile_fwdump, NULL);
|
||||
if (type == DUMP_TYPE_ENDE)
|
||||
PRINTM(MMSG, "==== FW DUMP END: %ld bytes ====\n",
|
||||
(long int)phandle->fw_dump_len);
|
||||
LEAVE();
|
||||
return;
|
||||
}
|
||||
|
@ -7094,7 +7116,7 @@ static int woal_save_hex_dump(int rowsize, const void *buf, size_t len,
|
|||
hex_dump_to_buffer(ptr + i, linelen, rowsize, 1, linebuf,
|
||||
sizeof(linebuf), false);
|
||||
|
||||
pos += sprintf(pos, "%p: %s\n", ptr + i, linebuf);
|
||||
pos += sprintf(pos, "%s\n", linebuf);
|
||||
}
|
||||
|
||||
return pos - (char *)save_buf;
|
||||
|
@ -7438,6 +7460,81 @@ static int woal_dump_mlan_drv_info(moal_private *priv, t_u8 *buf)
|
|||
LEAVE();
|
||||
return ptr - (char *)buf;
|
||||
}
|
||||
#define HostCmd_CMD_CFG_DATA 0x008f
|
||||
#define DEF_FW_PATH "/lib/firmware/"
|
||||
#define DEF_HOSTCMD_PATH "/lib/firmware/nxp/hostcmd.conf"
|
||||
/**
|
||||
* @brief This function save the hostcmd response to file
|
||||
*
|
||||
* @param phandle A pointer to moal_handle
|
||||
* @param pevent A pointer to mlan_cmdresp_event
|
||||
*
|
||||
* @return N/A
|
||||
*/
|
||||
t_void woal_save_host_cmdresp(moal_handle *phandle, mlan_cmdresp_event *pevent)
|
||||
{
|
||||
HostCmd_DS_GEN *resp;
|
||||
char file_path[256];
|
||||
struct file *pfile = NULL;
|
||||
char *dpd_data_cfg = phandle->params.dpd_data_cfg;
|
||||
int ret;
|
||||
t_u8 *buf;
|
||||
t_u16 command;
|
||||
int len = 0;
|
||||
char *ptr;
|
||||
loff_t pos = 0;
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 14, 0)
|
||||
mm_segment_t fs;
|
||||
#endif
|
||||
|
||||
resp = (HostCmd_DS_GEN *)pevent->resp;
|
||||
command = woal_le16_to_cpu(resp->command);
|
||||
memset(file_path, 0, sizeof(file_path));
|
||||
ret = moal_vmalloc(phandle, pevent->event_len * 5, &buf);
|
||||
if (ret != MLAN_STATUS_SUCCESS || !buf) {
|
||||
PRINTM(MERROR, "Fail to allocate memory to save hostcmd\n");
|
||||
return;
|
||||
}
|
||||
memset(buf, 0, pevent->event_len * 5);
|
||||
ptr = (char *)buf;
|
||||
switch (command) {
|
||||
case HostCmd_CMD_CFG_DATA:
|
||||
if (dpd_data_cfg)
|
||||
sprintf(file_path, "%s%s", DEF_FW_PATH, dpd_data_cfg);
|
||||
else
|
||||
sprintf(file_path, "%s", DEF_HOSTCMD_PATH);
|
||||
break;
|
||||
default:
|
||||
sprintf(file_path, "%s", DEF_HOSTCMD_PATH);
|
||||
break;
|
||||
}
|
||||
pfile = filp_open(file_path, O_CREAT | O_WRONLY | O_APPEND, 0644);
|
||||
if (IS_ERR(pfile)) {
|
||||
PRINTM(MERROR, "Cannot create file %s\n", file_path);
|
||||
moal_vfree(phandle, buf);
|
||||
return;
|
||||
}
|
||||
ptr += sprintf(ptr, "hostcmd_%02x=={\n", command);
|
||||
ptr += woal_save_hex_dump(ROW_SIZE_16, resp, pevent->event_len, MFALSE,
|
||||
ptr);
|
||||
ptr += sprintf(ptr, "}\n");
|
||||
len = ptr - (char *)buf;
|
||||
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 14, 0)
|
||||
fs = get_fs();
|
||||
set_fs(KERNEL_DS);
|
||||
vfs_write(pfile, buf, len, &pos);
|
||||
set_fs(fs);
|
||||
#else
|
||||
kernel_write(pfile, buf, len, &pos);
|
||||
#endif
|
||||
PRINTM(MMSG, "Save hostcmd 0x%02x, cmd len=%d file len=%d to file %s\n",
|
||||
command, pevent->event_len, len, file_path);
|
||||
if (buf)
|
||||
moal_vfree(phandle, buf);
|
||||
filp_close(pfile, NULL);
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function dump moal hex to file
|
||||
|
|
|
@ -1906,6 +1906,10 @@ struct _moal_handle {
|
|||
t_u8 ioctl_timeout;
|
||||
/** FW dump state */
|
||||
t_u8 fw_dump;
|
||||
/** event fw dump */
|
||||
t_u8 event_fw_dump;
|
||||
/** fw dump buffer total len */
|
||||
t_u64 fw_dump_len;
|
||||
/** FW dump full name */
|
||||
t_u8 firmware_dump_file[128];
|
||||
#ifdef SDIO
|
||||
|
@ -2733,6 +2737,8 @@ void woal_store_firmware_dump(moal_handle *phandle, pmlan_event pmevent);
|
|||
void woal_store_ssu_dump(moal_handle *phandle, pmlan_event pmevent);
|
||||
#endif /* SSU_SUPPORT */
|
||||
|
||||
/** save hostcmd response to file */
|
||||
t_void woal_save_host_cmdresp(moal_handle *phandle, mlan_cmdresp_event *pevent);
|
||||
int woal_pre_warmreset(moal_private *priv);
|
||||
int woal_warmreset(moal_private *priv);
|
||||
|
||||
|
|
|
@ -34,7 +34,9 @@ Change log:
|
|||
#include <linux/pm_qos.h>
|
||||
#endif
|
||||
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 4, 70)
|
||||
#include <linux/busfreq-imx.h>
|
||||
#endif
|
||||
/********************************************************
|
||||
Local Variables
|
||||
********************************************************/
|
||||
|
@ -119,6 +121,8 @@ static const struct pci_device_id wlan_ids[] = {
|
|||
/* moal interface ops */
|
||||
static moal_if_ops pcie_ops;
|
||||
|
||||
MODULE_DEVICE_TABLE(pci, wlan_ids);
|
||||
|
||||
/********************************************************
|
||||
Global Variables
|
||||
********************************************************/
|
||||
|
@ -1352,7 +1356,9 @@ mlan_status woal_pcie_bus_register(void)
|
|||
#endif
|
||||
#endif
|
||||
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 4, 70)
|
||||
request_bus_freq(BUS_FREQ_HIGH);
|
||||
#endif
|
||||
/* API registers the NXP PCIE driver */
|
||||
if (pci_register_driver(&wlan_pcie)) {
|
||||
PRINTM(MFATAL, "PCIE Driver Registration Failed \n");
|
||||
|
@ -1377,7 +1383,9 @@ void woal_pcie_bus_unregister(void)
|
|||
{
|
||||
ENTER();
|
||||
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 4, 70)
|
||||
release_bus_freq(BUS_FREQ_HIGH);
|
||||
#endif
|
||||
/* PCIE Driver Unregistration */
|
||||
pci_unregister_driver(&wlan_pcie);
|
||||
#if LINUX_VERSION_CODE <= KERNEL_VERSION(5, 6, 0)
|
||||
|
@ -1488,7 +1496,7 @@ int woal_pcie_dump_reg_info(moal_handle *phandle, t_u8 *buffer)
|
|||
drv_ptr +=
|
||||
sprintf(drv_ptr, "reg:0x%x value=0x%x\n", reg, value);
|
||||
|
||||
msleep(100);
|
||||
mdelay(100);
|
||||
}
|
||||
drv_ptr +=
|
||||
sprintf(drv_ptr,
|
||||
|
@ -1627,7 +1635,7 @@ static void woal_pcie_reg_dbg(moal_handle *phandle)
|
|||
woal_pcie_read_reg(phandle, reg, &value);
|
||||
PRINTM(MERROR, "reg:0x%x value=0x%x\n", reg, value);
|
||||
|
||||
msleep(100);
|
||||
mdelay(100);
|
||||
}
|
||||
PRINTM(MMSG, "Interface registers dump from offset 0x%x to 0x%x\n",
|
||||
dump_start_reg, dump_end_reg);
|
||||
|
@ -1740,6 +1748,7 @@ memory_type_mapping mem_type_mapping_tbl_8897[] = {
|
|||
|
||||
#if defined(PCIE8997) || defined(PCIE9098) || defined(PCIE9097)
|
||||
#define DEBUG_HOST_READY_8997 0xCC
|
||||
#define DEBUG_HOST_EVENT_READY 0xAA
|
||||
#define DEBUG_MEMDUMP_FINISH_8997 0xDD
|
||||
memory_type_mapping mem_type_mapping_tbl_8997 = {"DUMP", NULL, NULL, 0xDD,
|
||||
0x00};
|
||||
|
@ -1797,7 +1806,10 @@ rdwr_status woal_pcie_rdwr_firmware(moal_handle *phandle, t_u8 doneflag)
|
|||
#if defined(PCIE9098) || defined(PCIE9097)
|
||||
if (IS_PCIE9098(phandle->card_type) ||
|
||||
IS_PCIE9097(phandle->card_type)) {
|
||||
debug_host_ready = DEBUG_HOST_READY_8997;
|
||||
if (phandle->event_fw_dump)
|
||||
debug_host_ready = DEBUG_HOST_EVENT_READY;
|
||||
else
|
||||
debug_host_ready = DEBUG_HOST_READY_8997;
|
||||
dump_ctrl_reg = PCIE9098_DUMP_CTRL_REG;
|
||||
}
|
||||
#endif
|
||||
|
@ -2044,7 +2056,19 @@ void woal_pcie_dump_fw_info_v2(moal_handle *phandle)
|
|||
PRINTM(MERROR, "Could not dump firmwware info\n");
|
||||
return;
|
||||
}
|
||||
|
||||
#if defined(PCIE9098) || defined(PCIE9097)
|
||||
if (IS_PCIE9098(phandle->card_type) ||
|
||||
IS_PCIE9097(phandle->card_type)) {
|
||||
if (phandle->event_fw_dump) {
|
||||
if (RDWR_STATUS_FAILURE !=
|
||||
woal_pcie_rdwr_firmware(phandle, doneflag))
|
||||
PRINTM(MMSG,
|
||||
"====PCIE FW DUMP EVENT MODE START ====\n");
|
||||
phandle->event_fw_dump = MFALSE;
|
||||
return;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 1, 0)
|
||||
/** Create dump directory*/
|
||||
woal_create_dump_dir(phandle, path_name, sizeof(path_name));
|
||||
|
|
|
@ -111,6 +111,8 @@ static const struct sdio_device_id wlan_ids[] = {
|
|||
{},
|
||||
};
|
||||
|
||||
MODULE_DEVICE_TABLE(sdio, wlan_ids);
|
||||
|
||||
int woal_sdio_probe(struct sdio_func *func, const struct sdio_device_id *id);
|
||||
void woal_sdio_remove(struct sdio_func *func);
|
||||
#ifdef SDIO
|
||||
|
|
|
@ -1415,21 +1415,25 @@ mlan_status moal_recv_event(t_void *pmoal_handle, pmlan_event pmevent)
|
|||
t_u8 radar_detected;
|
||||
|
||||
ENTER();
|
||||
|
||||
if ((pmevent->event_id != MLAN_EVENT_ID_DRV_DEFER_RX_WORK) &&
|
||||
(pmevent->event_id != MLAN_EVENT_ID_DRV_DEFER_HANDLING) &&
|
||||
(pmevent->event_id != MLAN_EVENT_ID_DRV_MGMT_FRAME))
|
||||
PRINTM(MEVENT, "event id:0x%x\n", pmevent->event_id);
|
||||
if (pmevent->event_id == MLAN_EVENT_ID_FW_DUMP_INFO) {
|
||||
woal_store_firmware_dump(pmoal_handle, pmevent);
|
||||
goto done;
|
||||
}
|
||||
if ((pmevent->event_id != MLAN_EVENT_ID_DRV_DEFER_RX_WORK) &&
|
||||
(pmevent->event_id != MLAN_EVENT_ID_DRV_DEFER_HANDLING) &&
|
||||
(pmevent->event_id != MLAN_EVENT_ID_DRV_MGMT_FRAME))
|
||||
PRINTM(MEVENT, "event id:0x%x\n", pmevent->event_id);
|
||||
#if defined(PCIE)
|
||||
if (pmevent->event_id == MLAN_EVENT_ID_SSU_DUMP_FILE) {
|
||||
woal_store_ssu_dump(pmoal_handle, pmevent);
|
||||
goto done;
|
||||
}
|
||||
#endif /* SSU_SUPPORT */
|
||||
if (pmevent->event_id == MLAN_EVENT_ID_STORE_HOST_CMD_RESP) {
|
||||
woal_save_host_cmdresp((moal_handle *)pmoal_handle,
|
||||
(mlan_cmdresp_event *)pmevent);
|
||||
goto done;
|
||||
}
|
||||
priv = woal_bss_index_to_priv(pmoal_handle, pmevent->bss_index);
|
||||
if (priv == NULL) {
|
||||
PRINTM(MERROR, "%s: priv is null\n", __func__);
|
||||
|
|
|
@ -895,7 +895,7 @@ enum moal_tm_attr {
|
|||
static const struct nla_policy moal_tm_policy[MOAL_TM_ATTR_MAX + 1] = {
|
||||
[MOAL_TM_ATTR_CMD] = {.type = NLA_U32},
|
||||
[MOAL_TM_ATTR_DATA] = {.type = NLA_BINARY,
|
||||
.len = MLAN_SIZE_OF_CMD_BUFFER},
|
||||
.len = MRVDRV_SIZE_OF_CMD_BUFFER},
|
||||
};
|
||||
|
||||
enum moal_tm_command {
|
||||
|
@ -948,7 +948,7 @@ static int woal_testmode_cmd(struct wiphy *wiphy, void *data, int len)
|
|||
moal_memcpy_ext(priv->phandle, misc_cfg->param.hostcmd.cmd,
|
||||
nla_data(tb[MOAL_TM_ATTR_DATA]),
|
||||
misc_cfg->param.hostcmd.len,
|
||||
MLAN_SIZE_OF_CMD_BUFFER);
|
||||
MRVDRV_SIZE_OF_CMD_BUFFER);
|
||||
status = woal_request_ioctl(priv, req, MOAL_IOCTL_WAIT);
|
||||
if (status != MLAN_STATUS_SUCCESS) {
|
||||
err = -EFAULT;
|
||||
|
|
Loading…
Reference in New Issue