mirror of
https://github.com/nxp-imx/mwifiex.git
synced 2025-01-15 16:25:35 +00:00
MA-21977-1 [Android-14] WCS Q1 release patch integrate
Reason:integrate WCS Q1 RC2 patch WiFi driver part Tested:imx8mq mxm_wifiex: update to mxm6x17437.p3 release Corresponding firmware version: SDIO-UART W8987 Firmware version 16.92.21.p119.2 PCIE-UART W8997 Firmware version 16.92.21.p119.2 SDIO-UART W8997 Firmware version 16.92.21.p119.2 SDIO-UART IW416 Firmware version 16.92.21.p119.2 SDIO_UART IW612 Firmware version 18.99.2.p66.17 SDIO-UART W8801 Firmware version 14.92.36.p188 SDIO-UART W9098 Firmware version 17.92.1.p149.131 PCIE-UART W9098 Firmware version 17.92.1.p149.131 Change-Id: Iea9c2dce8bff8ab65489a225c1b293f51ed8fd7a Signed-off-by: Sherry Sun <sherry.sun@nxp.com>
This commit is contained in:
parent
749db4f4b5
commit
064a3b37e9
50 changed files with 1339 additions and 389 deletions
|
@ -148,7 +148,7 @@ APPDIR= $(shell if test -d "mapp"; then echo mapp; fi)
|
||||||
#############################################################################
|
#############################################################################
|
||||||
|
|
||||||
ccflags-y += -I$(KERNELDIR)/include
|
ccflags-y += -I$(KERNELDIR)/include
|
||||||
ccflags-y += -DMLAN_RELEASE_VERSION='"437"'
|
ccflags-y += -DMLAN_RELEASE_VERSION='"437.p3"'
|
||||||
|
|
||||||
ccflags-y += -DFPNUM='"92"'
|
ccflags-y += -DFPNUM='"92"'
|
||||||
|
|
||||||
|
@ -269,10 +269,6 @@ ifeq ($(CONFIG_SDIW624),y)
|
||||||
CONFIG_SDIO=y
|
CONFIG_SDIO=y
|
||||||
ccflags-y += -DSDIW624
|
ccflags-y += -DSDIW624
|
||||||
endif
|
endif
|
||||||
ifeq ($(CONFIG_SDAW693),y)
|
|
||||||
CONFIG_SDIO=y
|
|
||||||
ccflags-y += -DSDAW693
|
|
||||||
endif
|
|
||||||
ifeq ($(CONFIG_SD9177),y)
|
ifeq ($(CONFIG_SD9177),y)
|
||||||
CONFIG_SDIO=y
|
CONFIG_SDIO=y
|
||||||
ccflags-y += -DSD9177
|
ccflags-y += -DSD9177
|
||||||
|
@ -333,10 +329,6 @@ ifeq ($(CONFIG_PCIEIW624),y)
|
||||||
CONFIG_PCIE=y
|
CONFIG_PCIE=y
|
||||||
ccflags-y += -DPCIEIW624
|
ccflags-y += -DPCIEIW624
|
||||||
endif
|
endif
|
||||||
ifeq ($(CONFIG_PCIEAW693),y)
|
|
||||||
CONFIG_PCIE=y
|
|
||||||
ccflags-y += -DPCIEAW693
|
|
||||||
endif
|
|
||||||
ifeq ($(CONFIG_SDIO),y)
|
ifeq ($(CONFIG_SDIO),y)
|
||||||
ccflags-y += -DSDIO
|
ccflags-y += -DSDIO
|
||||||
ccflags-y += -DSDIO_MMC
|
ccflags-y += -DSDIO_MMC
|
||||||
|
|
|
@ -954,9 +954,9 @@ mlan_status wlan_ret_802_11d_domain_info(mlan_private *pmpriv,
|
||||||
/* Dump domain info response data */
|
/* Dump domain info response data */
|
||||||
HEXDUMP("11D: DOMAIN Info Rsp Data", (t_u8 *)resp, resp->size);
|
HEXDUMP("11D: DOMAIN Info Rsp Data", (t_u8 *)resp, resp->size);
|
||||||
|
|
||||||
no_of_sub_band = (t_u8)(
|
no_of_sub_band = (t_u8)((wlan_le16_to_cpu(domain->header.len) -
|
||||||
(wlan_le16_to_cpu(domain->header.len) - COUNTRY_CODE_LEN) /
|
COUNTRY_CODE_LEN) /
|
||||||
sizeof(IEEEtypes_SubbandSet_t));
|
sizeof(IEEEtypes_SubbandSet_t));
|
||||||
|
|
||||||
PRINTM(MINFO, "11D Domain Info Resp: number of sub-band=%d\n",
|
PRINTM(MINFO, "11D Domain Info Resp: number of sub-band=%d\n",
|
||||||
no_of_sub_band);
|
no_of_sub_band);
|
||||||
|
|
|
@ -2456,6 +2456,7 @@ int wlan_cmd_append_11n_tlv(mlan_private *pmpriv, BSSDescriptor_t *pbss_desc,
|
||||||
pmlan_adapter pmadapter = pmpriv->adapter;
|
pmlan_adapter pmadapter = pmpriv->adapter;
|
||||||
MrvlIETypes_HTCap_t *pht_cap;
|
MrvlIETypes_HTCap_t *pht_cap;
|
||||||
MrvlIEtypes_ChanListParamSet_t *pchan_list;
|
MrvlIEtypes_ChanListParamSet_t *pchan_list;
|
||||||
|
ChanScanParamSet_t *pchan_param;
|
||||||
MrvlIETypes_2040BSSCo_t *p2040_bss_co;
|
MrvlIETypes_2040BSSCo_t *p2040_bss_co;
|
||||||
MrvlIETypes_ExtCap_t *pext_cap;
|
MrvlIETypes_ExtCap_t *pext_cap;
|
||||||
t_u32 usr_dot_11n_dev_cap, orig_usr_dot_11n_dev_cap = 0;
|
t_u32 usr_dot_11n_dev_cap, orig_usr_dot_11n_dev_cap = 0;
|
||||||
|
@ -2529,12 +2530,12 @@ int wlan_cmd_append_11n_tlv(mlan_private *pmpriv, BSSDescriptor_t *pbss_desc,
|
||||||
|
|
||||||
if (pbss_desc->pht_info) {
|
if (pbss_desc->pht_info) {
|
||||||
pchan_list = (MrvlIEtypes_ChanListParamSet_t *)*ppbuffer;
|
pchan_list = (MrvlIEtypes_ChanListParamSet_t *)*ppbuffer;
|
||||||
memset(pmadapter, pchan_list, 0,
|
|
||||||
sizeof(MrvlIEtypes_ChanListParamSet_t));
|
|
||||||
pchan_list->header.type = wlan_cpu_to_le16(TLV_TYPE_CHANLIST);
|
pchan_list->header.type = wlan_cpu_to_le16(TLV_TYPE_CHANLIST);
|
||||||
pchan_list->header.len =
|
pchan_list->header.len = sizeof(ChanScanParamSet_t);
|
||||||
sizeof(MrvlIEtypes_ChanListParamSet_t) -
|
|
||||||
sizeof(MrvlIEtypesHeader_t);
|
pchan_param = (ChanScanParamSet_t *)pchan_list->chan_scan_param;
|
||||||
|
memset(pmadapter, pchan_param, 0x00,
|
||||||
|
sizeof(ChanScanParamSet_t));
|
||||||
pchan_list->chan_scan_param[0].chan_number =
|
pchan_list->chan_scan_param[0].chan_number =
|
||||||
pbss_desc->pht_info->ht_info.pri_chan;
|
pbss_desc->pht_info->ht_info.pri_chan;
|
||||||
pchan_list->chan_scan_param[0].bandcfg.chanBand =
|
pchan_list->chan_scan_param[0].bandcfg.chanBand =
|
||||||
|
@ -2568,11 +2569,14 @@ int wlan_cmd_append_11n_tlv(mlan_private *pmpriv, BSSDescriptor_t *pbss_desc,
|
||||||
pchan_list->chan_scan_param[0].bandcfg.scanMode =
|
pchan_list->chan_scan_param[0].bandcfg.scanMode =
|
||||||
SCAN_MODE_USER;
|
SCAN_MODE_USER;
|
||||||
HEXDUMP("ChanList", (t_u8 *)pchan_list,
|
HEXDUMP("ChanList", (t_u8 *)pchan_list,
|
||||||
sizeof(MrvlIEtypes_ChanListParamSet_t));
|
sizeof(ChanScanParamSet_t) +
|
||||||
|
sizeof(MrvlIEtypesHeader_t));
|
||||||
HEXDUMP("pht_info", (t_u8 *)pbss_desc->pht_info,
|
HEXDUMP("pht_info", (t_u8 *)pbss_desc->pht_info,
|
||||||
sizeof(MrvlIETypes_HTInfo_t) - 2);
|
sizeof(MrvlIETypes_HTInfo_t) - 2);
|
||||||
*ppbuffer += sizeof(MrvlIEtypes_ChanListParamSet_t);
|
*ppbuffer += sizeof(ChanScanParamSet_t) +
|
||||||
ret_len += sizeof(MrvlIEtypes_ChanListParamSet_t);
|
sizeof(MrvlIEtypesHeader_t);
|
||||||
|
ret_len += sizeof(ChanScanParamSet_t) +
|
||||||
|
sizeof(MrvlIEtypesHeader_t);
|
||||||
pchan_list->header.len =
|
pchan_list->header.len =
|
||||||
wlan_cpu_to_le16(pchan_list->header.len);
|
wlan_cpu_to_le16(pchan_list->header.len);
|
||||||
}
|
}
|
||||||
|
@ -2954,10 +2958,11 @@ int wlan_send_addba(mlan_private *priv, int tid, t_u8 *peer_mac)
|
||||||
PRINTM(MCMND, "Send addba: TID %d, " MACSTR "\n", tid,
|
PRINTM(MCMND, "Send addba: TID %d, " MACSTR "\n", tid,
|
||||||
MAC2STR(peer_mac));
|
MAC2STR(peer_mac));
|
||||||
|
|
||||||
add_ba_req.block_ack_param_set = (t_u16)(
|
add_ba_req.block_ack_param_set =
|
||||||
(tid << BLOCKACKPARAM_TID_POS) |
|
(t_u16)((tid << BLOCKACKPARAM_TID_POS) |
|
||||||
(priv->add_ba_param.tx_win_size << BLOCKACKPARAM_WINSIZE_POS) |
|
(priv->add_ba_param.tx_win_size
|
||||||
IMMEDIATE_BLOCK_ACK);
|
<< BLOCKACKPARAM_WINSIZE_POS) |
|
||||||
|
IMMEDIATE_BLOCK_ACK);
|
||||||
/** enable AMSDU inside AMPDU */
|
/** enable AMSDU inside AMPDU */
|
||||||
if (priv->add_ba_param.tx_amsdu &&
|
if (priv->add_ba_param.tx_amsdu &&
|
||||||
(priv->aggr_prio_tbl[tid].amsdu != BA_STREAM_NOT_ALLOWED))
|
(priv->aggr_prio_tbl[tid].amsdu != BA_STREAM_NOT_ALLOWED))
|
||||||
|
|
|
@ -691,20 +691,21 @@ static cfp_table_t cfp_table_A[] = {
|
||||||
/** Number of the CFP tables for 5GHz */
|
/** Number of the CFP tables for 5GHz */
|
||||||
#define MLAN_CFP_TABLE_SIZE_A (NELEMENTS(cfp_table_A))
|
#define MLAN_CFP_TABLE_SIZE_A (NELEMENTS(cfp_table_A))
|
||||||
|
|
||||||
enum { RATEID_DBPSK1Mbps, //(0)
|
enum {
|
||||||
RATEID_DQPSK2Mbps, //(1)
|
RATEID_DBPSK1Mbps, //(0)
|
||||||
RATEID_CCK5_5Mbps, //(2)
|
RATEID_DQPSK2Mbps, //(1)
|
||||||
RATEID_CCK11Mbps, //(3)
|
RATEID_CCK5_5Mbps, //(2)
|
||||||
RATEID_CCK22Mbps, //(4)
|
RATEID_CCK11Mbps, //(3)
|
||||||
RATEID_OFDM6Mbps, //(5)
|
RATEID_CCK22Mbps, //(4)
|
||||||
RATEID_OFDM9Mbps, //(6)
|
RATEID_OFDM6Mbps, //(5)
|
||||||
RATEID_OFDM12Mbps, //(7)
|
RATEID_OFDM9Mbps, //(6)
|
||||||
RATEID_OFDM18Mbps, //(8)
|
RATEID_OFDM12Mbps, //(7)
|
||||||
RATEID_OFDM24Mbps, //(9)
|
RATEID_OFDM18Mbps, //(8)
|
||||||
RATEID_OFDM36Mbps, //(10)
|
RATEID_OFDM24Mbps, //(9)
|
||||||
RATEID_OFDM48Mbps, //(11)
|
RATEID_OFDM36Mbps, //(10)
|
||||||
RATEID_OFDM54Mbps, //(12)
|
RATEID_OFDM48Mbps, //(11)
|
||||||
RATEID_OFDM72Mbps, //(13)
|
RATEID_OFDM54Mbps, //(12)
|
||||||
|
RATEID_OFDM72Mbps, //(13)
|
||||||
};
|
};
|
||||||
|
|
||||||
static const t_u8 rateUnit_500Kbps[] = {
|
static const t_u8 rateUnit_500Kbps[] = {
|
||||||
|
@ -1912,9 +1913,9 @@ t_u8 wlan_get_txpwr_of_chan_from_cfp(mlan_private *pmpriv, t_u16 band,
|
||||||
(cfp_a + j)
|
(cfp_a + j)
|
||||||
->max_tx_power);
|
->max_tx_power);
|
||||||
else
|
else
|
||||||
tx_power = (t_u8)(
|
tx_power =
|
||||||
(cfp_a + j)
|
(t_u8)((cfp_a + j)
|
||||||
->max_tx_power);
|
->max_tx_power);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -556,7 +556,11 @@ static t_void wlan_dump_info(mlan_adapter *pmadapter, t_u8 reason)
|
||||||
PRINTM(MERROR, "tx_lock_flag = %d\n", pmadapter->tx_lock_flag);
|
PRINTM(MERROR, "tx_lock_flag = %d\n", pmadapter->tx_lock_flag);
|
||||||
PRINTM(MERROR, "scan_processing = %d\n", pmadapter->scan_processing);
|
PRINTM(MERROR, "scan_processing = %d\n", pmadapter->scan_processing);
|
||||||
PRINTM(MERROR, "scan_state = 0x%x\n", pmadapter->scan_state);
|
PRINTM(MERROR, "scan_state = 0x%x\n", pmadapter->scan_state);
|
||||||
PRINTM(MERROR, "bypass_pkt_count=%d\n", pmadapter->bypass_pkt_count);
|
PRINTM(MERROR, "bypass_pkt_count=%d\n",
|
||||||
|
util_scalar_read(pmadapter->pmoal_handle,
|
||||||
|
&pmadapter->bypass_pkt_count,
|
||||||
|
pmadapter->callbacks.moal_spin_lock,
|
||||||
|
pmadapter->callbacks.moal_spin_unlock));
|
||||||
#ifdef SDIO
|
#ifdef SDIO
|
||||||
if (IS_SD(pmadapter->card_type)) {
|
if (IS_SD(pmadapter->card_type)) {
|
||||||
mp_aggr_pkt_limit = pmadapter->pcard_sd->mp_aggr_pkt_limit;
|
mp_aggr_pkt_limit = pmadapter->pcard_sd->mp_aggr_pkt_limit;
|
||||||
|
@ -1356,6 +1360,12 @@ static mlan_status wlan_dnld_cmd_to_fw(mlan_private *pmpriv,
|
||||||
if (pcmd->command == HostCmd_CMD_802_11_SCAN_EXT)
|
if (pcmd->command == HostCmd_CMD_802_11_SCAN_EXT)
|
||||||
pmadapter->scan_state |= wlan_get_ext_scan_state(pcmd);
|
pmadapter->scan_state |= wlan_get_ext_scan_state(pcmd);
|
||||||
|
|
||||||
|
if (pmpriv->bss_mode == MLAN_BSS_MODE_INFRA &&
|
||||||
|
pmpriv->media_connected &&
|
||||||
|
(pcmd->command == HostCmd_CMD_802_11_DEAUTHENTICATE ||
|
||||||
|
pcmd->command == HostCmd_CMD_802_11_DISASSOCIATE))
|
||||||
|
wlan_clean_txrx(pmpriv);
|
||||||
|
|
||||||
PRINTM_GET_SYS_TIME(MCMND, &sec, &usec);
|
PRINTM_GET_SYS_TIME(MCMND, &sec, &usec);
|
||||||
PRINTM_NETINTF(MCMND, pmpriv);
|
PRINTM_NETINTF(MCMND, pmpriv);
|
||||||
PRINTM(MCMND,
|
PRINTM(MCMND,
|
||||||
|
@ -2765,6 +2775,13 @@ t_void wlan_cancel_all_pending_cmd(pmlan_adapter pmadapter, t_u8 flag)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pmadapter->cmd_timer_is_set) {
|
||||||
|
pcb->moal_stop_timer(pmadapter->pmoal_handle,
|
||||||
|
pmadapter->pmlan_cmd_timer);
|
||||||
|
/* Cancel command timeout timer */
|
||||||
|
pmadapter->cmd_timer_is_set = MFALSE;
|
||||||
|
}
|
||||||
|
|
||||||
/* Cancel all pending command */
|
/* Cancel all pending command */
|
||||||
while ((pcmd_node = (cmd_ctrl_node *)util_peek_list(
|
while ((pcmd_node = (cmd_ctrl_node *)util_peek_list(
|
||||||
pmadapter->pmoal_handle, &pmadapter->cmd_pending_q,
|
pmadapter->pmoal_handle, &pmadapter->cmd_pending_q,
|
||||||
|
@ -5461,8 +5478,9 @@ mlan_status wlan_process_csi_event(pmlan_private pmpriv)
|
||||||
MLAN_MEM_DEF, &evt_buf);
|
MLAN_MEM_DEF, &evt_buf);
|
||||||
if ((status == MLAN_STATUS_SUCCESS) && evt_buf) {
|
if ((status == MLAN_STATUS_SUCCESS) && evt_buf) {
|
||||||
t_u16 csi_sig;
|
t_u16 csi_sig;
|
||||||
pcsi_record_ds csi_record = (pcsi_record_ds)(
|
pcsi_record_ds csi_record =
|
||||||
pmbuf->pbuf + pmbuf->data_offset + sizeof(eventcause));
|
(pcsi_record_ds)(pmbuf->pbuf + pmbuf->data_offset +
|
||||||
|
sizeof(eventcause));
|
||||||
/* Check CSI signature */
|
/* Check CSI signature */
|
||||||
csi_sig = csi_record->CSI_Sign;
|
csi_sig = csi_record->CSI_Sign;
|
||||||
if (csi_sig != CSI_SIGNATURE) {
|
if (csi_sig != CSI_SIGNATURE) {
|
||||||
|
@ -5966,6 +5984,56 @@ mlan_status wlan_cmd_get_hw_spec(pmlan_private pmpriv, HostCmd_DS_COMMAND *pcmd)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef SDIO
|
#ifdef SDIO
|
||||||
|
/**
|
||||||
|
* @brief This function prepares command of sdio rx aggr command.
|
||||||
|
*
|
||||||
|
* @param pcmd A pointer to HostCmd_DS_COMMAND structure
|
||||||
|
* @param cmd_action Command action: GET or SET
|
||||||
|
* @param pdata_buf A pointer to new setting buf
|
||||||
|
|
||||||
|
* @return MLAN_STATUS_SUCCESS
|
||||||
|
*/
|
||||||
|
mlan_status wlan_cmd_sdio_rx_aggr_cfg(HostCmd_DS_COMMAND *pcmd,
|
||||||
|
t_u16 cmd_action, t_void *pdata_buf)
|
||||||
|
{
|
||||||
|
HostCmd_DS_SDIO_SP_RX_AGGR_CFG *cfg = &pcmd->params.sdio_rx_aggr;
|
||||||
|
|
||||||
|
pcmd->command = wlan_cpu_to_le16(HostCmd_CMD_SDIO_SP_RX_AGGR_CFG);
|
||||||
|
pcmd->size = wlan_cpu_to_le16(sizeof(HostCmd_DS_SDIO_SP_RX_AGGR_CFG) +
|
||||||
|
S_DS_GEN);
|
||||||
|
cfg->action = cmd_action;
|
||||||
|
if (pdata_buf && (cmd_action == HostCmd_ACT_GEN_SET))
|
||||||
|
cfg->enable = *(t_u8 *)pdata_buf;
|
||||||
|
return MLAN_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This function handles the command response of sdio rx aggr command
|
||||||
|
*
|
||||||
|
* @param pmpriv A pointer to mlan_private structure
|
||||||
|
* @param resp A pointer to HostCmd_DS_COMMAND
|
||||||
|
*
|
||||||
|
* @return MLAN_STATUS_SUCCESS or MLAN_STATUS_FAILURE
|
||||||
|
*/
|
||||||
|
mlan_status wlan_ret_sdio_rx_aggr_cfg(pmlan_private pmpriv,
|
||||||
|
HostCmd_DS_COMMAND *resp)
|
||||||
|
{
|
||||||
|
mlan_adapter *pmadapter = pmpriv->adapter;
|
||||||
|
HostCmd_DS_SDIO_SP_RX_AGGR_CFG *cfg = &resp->params.sdio_rx_aggr;
|
||||||
|
|
||||||
|
pmadapter->pcard_sd->sdio_rx_aggr_enable = cfg->enable;
|
||||||
|
pmadapter->pcard_sd->sdio_rx_block_size =
|
||||||
|
wlan_le16_to_cpu(cfg->sdio_block_size);
|
||||||
|
PRINTM(MMSG, "SDIO rx aggr: %d block_size=%d\n", cfg->enable,
|
||||||
|
pmadapter->pcard_sd->sdio_rx_block_size);
|
||||||
|
if (!pmadapter->pcard_sd->sdio_rx_block_size)
|
||||||
|
pmadapter->pcard_sd->sdio_rx_aggr_enable = MFALSE;
|
||||||
|
if (pmadapter->pcard_sd->sdio_rx_aggr_enable) {
|
||||||
|
pmadapter->pcard_sd->max_sp_rx_size = SDIO_CMD53_MAX_SIZE;
|
||||||
|
wlan_re_alloc_sdio_rx_mpa_buffer(pmadapter);
|
||||||
|
}
|
||||||
|
return MLAN_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -6314,6 +6382,22 @@ mlan_status wlan_ret_get_hw_spec(pmlan_private pmpriv, HostCmd_DS_COMMAND *resp,
|
||||||
|
|
||||||
#ifdef SDIO
|
#ifdef SDIO
|
||||||
if (IS_SD(pmadapter->card_type)) {
|
if (IS_SD(pmadapter->card_type)) {
|
||||||
|
if ((pmadapter->fw_cap_info & SDIO_SP_RX_AGGR_ENABLE) &&
|
||||||
|
pmadapter->pcard_sd->sdio_rx_aggr_enable) {
|
||||||
|
t_u8 sdio_sp_rx_aggr = MTRUE;
|
||||||
|
ret = wlan_prepare_cmd(pmpriv,
|
||||||
|
HostCmd_CMD_SDIO_SP_RX_AGGR_CFG,
|
||||||
|
HostCmd_ACT_GEN_SET, 0, MNULL,
|
||||||
|
&sdio_sp_rx_aggr);
|
||||||
|
if (ret) {
|
||||||
|
ret = MLAN_STATUS_FAILURE;
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
pmadapter->pcard_sd->sdio_rx_aggr_enable = MFALSE;
|
||||||
|
PRINTM(MCMND, "FW: SDIO rx aggr disabled 0x%x\n",
|
||||||
|
pmadapter->fw_cap_info);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifdef STA_SUPPORT
|
#ifdef STA_SUPPORT
|
||||||
|
@ -6413,6 +6497,8 @@ mlan_status wlan_ret_get_hw_spec(pmlan_private pmpriv, HostCmd_DS_COMMAND *resp,
|
||||||
fw_cap_tlv = (MrvlIEtypes_fw_cap_info_t *)tlv;
|
fw_cap_tlv = (MrvlIEtypes_fw_cap_info_t *)tlv;
|
||||||
pmadapter->fw_cap_info =
|
pmadapter->fw_cap_info =
|
||||||
wlan_le32_to_cpu(fw_cap_tlv->fw_cap_info);
|
wlan_le32_to_cpu(fw_cap_tlv->fw_cap_info);
|
||||||
|
pmadapter->fw_cap_info &=
|
||||||
|
pmadapter->init_para.dev_cap_mask;
|
||||||
pmadapter->fw_cap_ext =
|
pmadapter->fw_cap_ext =
|
||||||
wlan_le32_to_cpu(fw_cap_tlv->fw_cap_ext);
|
wlan_le32_to_cpu(fw_cap_tlv->fw_cap_ext);
|
||||||
PRINTM(MCMND, "fw_cap_info=0x%x fw_cap_ext=0x%x\n",
|
PRINTM(MCMND, "fw_cap_info=0x%x fw_cap_ext=0x%x\n",
|
||||||
|
|
|
@ -278,7 +278,14 @@ typedef t_s32 t_sval;
|
||||||
|
|
||||||
#ifdef PCIE
|
#ifdef PCIE
|
||||||
/* Interrupt type */
|
/* Interrupt type */
|
||||||
enum { RX_DATA, RX_EVENT, TX_COMPLETE, RX_CMD_RESP, RX_CMD_DNLD };
|
enum {
|
||||||
|
RX_DATA,
|
||||||
|
RX_EVENT,
|
||||||
|
TX_COMPLETE,
|
||||||
|
RX_CMD_RESP,
|
||||||
|
RX_CMD_DNLD,
|
||||||
|
RX_DATA_DELAY
|
||||||
|
};
|
||||||
#endif
|
#endif
|
||||||
#ifdef USB
|
#ifdef USB
|
||||||
#define MLAN_USB_BLOCK_SIZE (512)
|
#define MLAN_USB_BLOCK_SIZE (512)
|
||||||
|
@ -388,6 +395,8 @@ typedef t_u8 mlan_802_11_mac_addr[MLAN_MAC_ADDR_LENGTH];
|
||||||
#define CARD_TYPE_IW624 0x0b
|
#define CARD_TYPE_IW624 0x0b
|
||||||
/** Black bird card type */
|
/** Black bird card type */
|
||||||
#define CARD_TYPE_AW693 0x0c
|
#define CARD_TYPE_AW693 0x0c
|
||||||
|
/** IW615 card type */
|
||||||
|
#define CARD_TYPE_IW615 0x0c
|
||||||
|
|
||||||
/** 9098 A0 reverion num */
|
/** 9098 A0 reverion num */
|
||||||
#define CHIP_9098_REV_A0 1
|
#define CHIP_9098_REV_A0 1
|
||||||
|
@ -423,6 +432,8 @@ typedef t_u8 mlan_802_11_mac_addr[MLAN_MAC_ADDR_LENGTH];
|
||||||
#define CARD_TYPE_SDIW624 (CARD_TYPE_IW624 | (INTF_SD << 8))
|
#define CARD_TYPE_SDIW624 (CARD_TYPE_IW624 | (INTF_SD << 8))
|
||||||
/** SD_IW624 card type */
|
/** SD_IW624 card type */
|
||||||
#define CARD_TYPE_SDAW693 (CARD_TYPE_AW693 | (INTF_SD << 8))
|
#define CARD_TYPE_SDAW693 (CARD_TYPE_AW693 | (INTF_SD << 8))
|
||||||
|
/** SD_IW615 card type */
|
||||||
|
#define CARD_TYPE_SDIW615 (CARD_TYPE_IW615 | (INTF_SD << 8))
|
||||||
|
|
||||||
#define IS_SD8887(ct) (CARD_TYPE_SD8887 == (ct))
|
#define IS_SD8887(ct) (CARD_TYPE_SD8887 == (ct))
|
||||||
#define IS_SD8897(ct) (CARD_TYPE_SD8897 == (ct))
|
#define IS_SD8897(ct) (CARD_TYPE_SD8897 == (ct))
|
||||||
|
@ -436,6 +447,7 @@ typedef t_u8 mlan_802_11_mac_addr[MLAN_MAC_ADDR_LENGTH];
|
||||||
#define IS_SD8801(ct) (CARD_TYPE_SD8801 == (ct))
|
#define IS_SD8801(ct) (CARD_TYPE_SD8801 == (ct))
|
||||||
#define IS_SDIW624(ct) (CARD_TYPE_SDIW624 == (ct))
|
#define IS_SDIW624(ct) (CARD_TYPE_SDIW624 == (ct))
|
||||||
#define IS_SDAW693(ct) (CARD_TYPE_SDAW693 == (ct))
|
#define IS_SDAW693(ct) (CARD_TYPE_SDAW693 == (ct))
|
||||||
|
#define IS_SDIW615(ct) (CARD_TYPE_SDIW615 == (ct))
|
||||||
|
|
||||||
/** SD8887 Card */
|
/** SD8887 Card */
|
||||||
#define CARD_SD8887 "SD8887"
|
#define CARD_SD8887 "SD8887"
|
||||||
|
@ -461,6 +473,8 @@ typedef t_u8 mlan_802_11_mac_addr[MLAN_MAC_ADDR_LENGTH];
|
||||||
#define CARD_SDIW624 "SDIW624"
|
#define CARD_SDIW624 "SDIW624"
|
||||||
/** SDAW693 Card */
|
/** SDAW693 Card */
|
||||||
#define CARD_SDAW693 "SDAW693"
|
#define CARD_SDAW693 "SDAW693"
|
||||||
|
/** SDIW615 Card */
|
||||||
|
#define CARD_SDIW615 "SDIW615"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PCIE
|
#ifdef PCIE
|
||||||
|
@ -519,6 +533,8 @@ typedef t_u8 mlan_802_11_mac_addr[MLAN_MAC_ADDR_LENGTH];
|
||||||
#define CARD_TYPE_USB9097 (CARD_TYPE_9097 | (INTF_USB << 8))
|
#define CARD_TYPE_USB9097 (CARD_TYPE_9097 | (INTF_USB << 8))
|
||||||
/** USBIW624 card type */
|
/** USBIW624 card type */
|
||||||
#define CARD_TYPE_USBIW624 (CARD_TYPE_IW624 | (INTF_USB << 8))
|
#define CARD_TYPE_USBIW624 (CARD_TYPE_IW624 | (INTF_USB << 8))
|
||||||
|
/** USBIW615 card type */
|
||||||
|
#define CARD_TYPE_USBIW615 (CARD_TYPE_IW615 | (INTF_USB << 8))
|
||||||
|
|
||||||
#define IS_USB8801(ct) (CARD_TYPE_USB8801 == (ct))
|
#define IS_USB8801(ct) (CARD_TYPE_USB8801 == (ct))
|
||||||
#define IS_USB8897(ct) (CARD_TYPE_USB8897 == (ct))
|
#define IS_USB8897(ct) (CARD_TYPE_USB8897 == (ct))
|
||||||
|
@ -527,6 +543,7 @@ typedef t_u8 mlan_802_11_mac_addr[MLAN_MAC_ADDR_LENGTH];
|
||||||
#define IS_USB9098(ct) (CARD_TYPE_USB9098 == (ct))
|
#define IS_USB9098(ct) (CARD_TYPE_USB9098 == (ct))
|
||||||
#define IS_USB9097(ct) (CARD_TYPE_USB9097 == (ct))
|
#define IS_USB9097(ct) (CARD_TYPE_USB9097 == (ct))
|
||||||
#define IS_USBIW624(ct) (CARD_TYPE_USBIW624 == (ct))
|
#define IS_USBIW624(ct) (CARD_TYPE_USBIW624 == (ct))
|
||||||
|
#define IS_USBIW615(ct) (CARD_TYPE_USBIW615 == (ct))
|
||||||
|
|
||||||
/** USB8801 Card */
|
/** USB8801 Card */
|
||||||
#define CARD_USB8801 "USB8801"
|
#define CARD_USB8801 "USB8801"
|
||||||
|
@ -542,6 +559,8 @@ typedef t_u8 mlan_802_11_mac_addr[MLAN_MAC_ADDR_LENGTH];
|
||||||
#define CARD_USB9097 "USBIW620"
|
#define CARD_USB9097 "USBIW620"
|
||||||
/** USBIW624 Card */
|
/** USBIW624 Card */
|
||||||
#define CARD_USBIW624 "USBIW624"
|
#define CARD_USBIW624 "USBIW624"
|
||||||
|
/** USBIW615 Card */
|
||||||
|
#define CARD_USBIW615 "USBIW615"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define IS_CARD8801(ct) (CARD_TYPE_8801 == ((ct)&0xf))
|
#define IS_CARD8801(ct) (CARD_TYPE_8801 == ((ct)&0xf))
|
||||||
|
@ -555,6 +574,7 @@ typedef t_u8 mlan_802_11_mac_addr[MLAN_MAC_ADDR_LENGTH];
|
||||||
#define IS_CARD9177(ct) (CARD_TYPE_9177 == ((ct)&0xf))
|
#define IS_CARD9177(ct) (CARD_TYPE_9177 == ((ct)&0xf))
|
||||||
#define IS_CARDIW624(ct) (CARD_TYPE_IW624 == ((ct)&0xf))
|
#define IS_CARDIW624(ct) (CARD_TYPE_IW624 == ((ct)&0xf))
|
||||||
#define IS_CARDAW693(ct) (CARD_TYPE_AW693 == ((ct)&0xf))
|
#define IS_CARDAW693(ct) (CARD_TYPE_AW693 == ((ct)&0xf))
|
||||||
|
#define IS_CARDIW615(ct) (CARD_TYPE_IW615 == ((ct)&0xf))
|
||||||
|
|
||||||
typedef struct _card_type_entry {
|
typedef struct _card_type_entry {
|
||||||
t_u16 card_type;
|
t_u16 card_type;
|
||||||
|
@ -714,6 +734,7 @@ typedef enum _mlan_buf_type {
|
||||||
MLAN_BUF_TYPE_EVENT,
|
MLAN_BUF_TYPE_EVENT,
|
||||||
MLAN_BUF_TYPE_RAW_DATA,
|
MLAN_BUF_TYPE_RAW_DATA,
|
||||||
#ifdef SDIO
|
#ifdef SDIO
|
||||||
|
MLAN_BUF_TYPE_SPA_DATA,
|
||||||
#endif
|
#endif
|
||||||
} mlan_buf_type;
|
} mlan_buf_type;
|
||||||
|
|
||||||
|
@ -945,29 +966,34 @@ enum mlan_channel_type {
|
||||||
};
|
};
|
||||||
|
|
||||||
/** channel band */
|
/** channel band */
|
||||||
enum { BAND_2GHZ = 0,
|
enum {
|
||||||
BAND_5GHZ = 1,
|
BAND_2GHZ = 0,
|
||||||
BAND_6GHZ = 2,
|
BAND_5GHZ = 1,
|
||||||
BAND_4GHZ = 3,
|
BAND_6GHZ = 2,
|
||||||
|
BAND_4GHZ = 3,
|
||||||
};
|
};
|
||||||
|
|
||||||
/** channel offset */
|
/** channel offset */
|
||||||
enum { SEC_CHAN_NONE = 0,
|
enum {
|
||||||
SEC_CHAN_ABOVE = 1,
|
SEC_CHAN_NONE = 0,
|
||||||
SEC_CHAN_5MHZ = 2,
|
SEC_CHAN_ABOVE = 1,
|
||||||
SEC_CHAN_BELOW = 3 };
|
SEC_CHAN_5MHZ = 2,
|
||||||
|
SEC_CHAN_BELOW = 3
|
||||||
|
};
|
||||||
|
|
||||||
/** channel bandwidth */
|
/** channel bandwidth */
|
||||||
enum { CHAN_BW_20MHZ = 0,
|
enum {
|
||||||
CHAN_BW_10MHZ,
|
CHAN_BW_20MHZ = 0,
|
||||||
CHAN_BW_40MHZ,
|
CHAN_BW_10MHZ,
|
||||||
CHAN_BW_80MHZ,
|
CHAN_BW_40MHZ,
|
||||||
|
CHAN_BW_80MHZ,
|
||||||
};
|
};
|
||||||
|
|
||||||
/** scan mode */
|
/** scan mode */
|
||||||
enum { SCAN_MODE_MANUAL = 0,
|
enum {
|
||||||
SCAN_MODE_ACS,
|
SCAN_MODE_MANUAL = 0,
|
||||||
SCAN_MODE_USER,
|
SCAN_MODE_ACS,
|
||||||
|
SCAN_MODE_USER,
|
||||||
};
|
};
|
||||||
|
|
||||||
/** DFS state */
|
/** DFS state */
|
||||||
|
@ -2646,6 +2672,8 @@ typedef struct _mlan_device {
|
||||||
/** SDIO MPA Rx */
|
/** SDIO MPA Rx */
|
||||||
t_u32 mpa_rx_cfg;
|
t_u32 mpa_rx_cfg;
|
||||||
#ifdef SDIO
|
#ifdef SDIO
|
||||||
|
/** SDIO Single port rx aggr */
|
||||||
|
t_u8 sdio_rx_aggr_enable;
|
||||||
/* see blk_queue_max_segment_size */
|
/* see blk_queue_max_segment_size */
|
||||||
t_u32 max_seg_size;
|
t_u32 max_seg_size;
|
||||||
/* see blk_queue_max_segments */
|
/* see blk_queue_max_segments */
|
||||||
|
|
|
@ -1151,6 +1151,8 @@ enum host_cmd_id {
|
||||||
#define TLV_TYPE_PREV_BSSID (PROPRIETARY_TLV_BASE_ID + 330)
|
#define TLV_TYPE_PREV_BSSID (PROPRIETARY_TLV_BASE_ID + 330)
|
||||||
|
|
||||||
#ifdef SDIO
|
#ifdef SDIO
|
||||||
|
/** fw_cap_info bit16 for sdio sp rx aggr flag*/
|
||||||
|
#define SDIO_SP_RX_AGGR_ENABLE MBIT(16)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1292,7 +1294,7 @@ typedef MLAN_PACK_START struct _MrvlIEtypes_Extension_t {
|
||||||
/** Element id extension */
|
/** Element id extension */
|
||||||
t_u8 ext_id;
|
t_u8 ext_id;
|
||||||
/** payload */
|
/** payload */
|
||||||
t_u8 data[1];
|
t_u8 data[];
|
||||||
} MLAN_PACK_END MrvlIEtypes_Extension_t, *pMrvlIEtypes_Extension_t;
|
} MLAN_PACK_END MrvlIEtypes_Extension_t, *pMrvlIEtypes_Extension_t;
|
||||||
|
|
||||||
/* HE MAC Capabilities Information field BIT 1 for TWT Req */
|
/* HE MAC Capabilities Information field BIT 1 for TWT Req */
|
||||||
|
@ -1635,7 +1637,7 @@ typedef MLAN_PACK_START struct _ie_data {
|
||||||
/** IE Length */
|
/** IE Length */
|
||||||
t_u16 ie_length;
|
t_u16 ie_length;
|
||||||
/** IE pointer */
|
/** IE pointer */
|
||||||
t_u8 ie_ptr[1];
|
t_u8 ie_ptr[];
|
||||||
} MLAN_PACK_END tdls_ie_data;
|
} MLAN_PACK_END tdls_ie_data;
|
||||||
|
|
||||||
/** Event structure for generic events from TDLS FW */
|
/** Event structure for generic events from TDLS FW */
|
||||||
|
@ -1706,7 +1708,7 @@ typedef MLAN_PACK_START struct _WLAN_802_11_VARIABLE_IEs {
|
||||||
/** Length */
|
/** Length */
|
||||||
t_u8 length;
|
t_u8 length;
|
||||||
/** IE data */
|
/** IE data */
|
||||||
t_u8 data[1];
|
t_u8 data[];
|
||||||
} MLAN_PACK_END WLAN_802_11_VARIABLE_IEs;
|
} MLAN_PACK_END WLAN_802_11_VARIABLE_IEs;
|
||||||
|
|
||||||
/** TLV related data structures*/
|
/** TLV related data structures*/
|
||||||
|
@ -2156,7 +2158,7 @@ typedef MLAN_PACK_START struct _MrvlIEtypes_ChanListParamSet_t {
|
||||||
/** Header */
|
/** Header */
|
||||||
MrvlIEtypesHeader_t header;
|
MrvlIEtypesHeader_t header;
|
||||||
/** Channel scan parameters */
|
/** Channel scan parameters */
|
||||||
ChanScanParamSet_t chan_scan_param[1];
|
ChanScanParamSet_t chan_scan_param[];
|
||||||
} MLAN_PACK_END MrvlIEtypes_ChanListParamSet_t;
|
} MLAN_PACK_END MrvlIEtypes_ChanListParamSet_t;
|
||||||
|
|
||||||
/** MrvlIEtypes_EESParamSet_t */
|
/** MrvlIEtypes_EESParamSet_t */
|
||||||
|
@ -2206,7 +2208,7 @@ typedef MLAN_PACK_START struct _MrvlIEtypes_ChanBandListParamSet_t {
|
||||||
/** Header */
|
/** Header */
|
||||||
MrvlIEtypesHeader_t header;
|
MrvlIEtypesHeader_t header;
|
||||||
/** Channel Band parameters */
|
/** Channel Band parameters */
|
||||||
ChanBandParamSet_t chan_band_param[1];
|
ChanBandParamSet_t chan_band_param[];
|
||||||
} MLAN_PACK_END MrvlIEtypes_ChanBandListParamSet_t;
|
} MLAN_PACK_END MrvlIEtypes_ChanBandListParamSet_t;
|
||||||
|
|
||||||
/** MrvlIEtypes_RatesParamSet_t */
|
/** MrvlIEtypes_RatesParamSet_t */
|
||||||
|
@ -2214,7 +2216,7 @@ typedef MLAN_PACK_START struct _MrvlIEtypes_RatesParamSet_t {
|
||||||
/** Header */
|
/** Header */
|
||||||
MrvlIEtypesHeader_t header;
|
MrvlIEtypesHeader_t header;
|
||||||
/** Rates */
|
/** Rates */
|
||||||
t_u8 rates[1];
|
t_u8 rates[];
|
||||||
} MLAN_PACK_END MrvlIEtypes_RatesParamSet_t;
|
} MLAN_PACK_END MrvlIEtypes_RatesParamSet_t;
|
||||||
|
|
||||||
/** _MrvlIEtypes_Bssid_List_t */
|
/** _MrvlIEtypes_Bssid_List_t */
|
||||||
|
@ -2230,7 +2232,7 @@ typedef MLAN_PACK_START struct _MrvlIEtypes_SsIdParamSet_t {
|
||||||
/** Header */
|
/** Header */
|
||||||
MrvlIEtypesHeader_t header;
|
MrvlIEtypesHeader_t header;
|
||||||
/** SSID */
|
/** SSID */
|
||||||
t_u8 ssid[1];
|
t_u8 ssid[];
|
||||||
} MLAN_PACK_END MrvlIEtypes_SsIdParamSet_t;
|
} MLAN_PACK_END MrvlIEtypes_SsIdParamSet_t;
|
||||||
|
|
||||||
/**MrvlIEtypes_AssocType_t */
|
/**MrvlIEtypes_AssocType_t */
|
||||||
|
@ -2264,7 +2266,7 @@ typedef MLAN_PACK_START struct _MrvlIEtypes_WildCardSsIdParamSet_t {
|
||||||
/** Maximum SSID length */
|
/** Maximum SSID length */
|
||||||
t_u8 max_ssid_length;
|
t_u8 max_ssid_length;
|
||||||
/** SSID */
|
/** SSID */
|
||||||
t_u8 ssid[1];
|
t_u8 ssid[];
|
||||||
} MLAN_PACK_END MrvlIEtypes_WildCardSsIdParamSet_t;
|
} MLAN_PACK_END MrvlIEtypes_WildCardSsIdParamSet_t;
|
||||||
|
|
||||||
/**TSF data size */
|
/**TSF data size */
|
||||||
|
@ -2275,7 +2277,7 @@ typedef MLAN_PACK_START struct _MrvlIEtypes_TsfTimestamp_t {
|
||||||
MrvlIEtypesHeader_t header;
|
MrvlIEtypesHeader_t header;
|
||||||
/** the length of each TSF data is 8 bytes, could be multiple TSF here
|
/** the length of each TSF data is 8 bytes, could be multiple TSF here
|
||||||
*/
|
*/
|
||||||
t_u8 tsf_data[1];
|
t_u8 tsf_data[];
|
||||||
} MLAN_PACK_END MrvlIEtypes_TsfTimestamp_t;
|
} MLAN_PACK_END MrvlIEtypes_TsfTimestamp_t;
|
||||||
|
|
||||||
/** CfParamSet_t */
|
/** CfParamSet_t */
|
||||||
|
@ -2402,7 +2404,7 @@ typedef MLAN_PACK_START struct _MrvlIEtypes_RxBaSync_t {
|
||||||
/** bitmap len */
|
/** bitmap len */
|
||||||
t_u16 bitmap_len;
|
t_u16 bitmap_len;
|
||||||
/** bitmap */
|
/** bitmap */
|
||||||
t_u8 bitmap[1];
|
t_u8 bitmap[];
|
||||||
} MLAN_PACK_END MrvlIEtypes_RxBaSync_t;
|
} MLAN_PACK_END MrvlIEtypes_RxBaSync_t;
|
||||||
|
|
||||||
/** MrvlIEtypes_RsnParamSet_t */
|
/** MrvlIEtypes_RsnParamSet_t */
|
||||||
|
@ -2715,7 +2717,7 @@ typedef MLAN_PACK_START struct _MrvlIETypes_ChanTRPCConfig_t {
|
||||||
/** channel number */
|
/** channel number */
|
||||||
t_u8 chan_num;
|
t_u8 chan_num;
|
||||||
/** mode groups */
|
/** mode groups */
|
||||||
mod_group_setting mod_group[1];
|
mod_group_setting mod_group[];
|
||||||
} MLAN_PACK_END MrvlIETypes_ChanTRPCConfig_t;
|
} MLAN_PACK_END MrvlIETypes_ChanTRPCConfig_t;
|
||||||
|
|
||||||
/* HostCmd_DS_CHANNEL_TRPC_CONFIG */
|
/* HostCmd_DS_CHANNEL_TRPC_CONFIG */
|
||||||
|
@ -3072,6 +3074,12 @@ typedef MLAN_PACK_START struct _HostCmd_DS_GET_HW_SPEC {
|
||||||
} MLAN_PACK_END HostCmd_DS_GET_HW_SPEC;
|
} MLAN_PACK_END HostCmd_DS_GET_HW_SPEC;
|
||||||
|
|
||||||
#ifdef SDIO
|
#ifdef SDIO
|
||||||
|
/* HostCmd_DS_SDIO_SP_RX_AGGR_CFG */
|
||||||
|
typedef MLAN_PACK_START struct _HostCmd_DS_SDIO_SP_RX_AGGR_CFG {
|
||||||
|
t_u8 action;
|
||||||
|
t_u8 enable;
|
||||||
|
t_u16 sdio_block_size;
|
||||||
|
} MLAN_PACK_END HostCmd_DS_SDIO_SP_RX_AGGR_CFG;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/** HostCmd_DS_802_11_CFG_DATA */
|
/** HostCmd_DS_802_11_CFG_DATA */
|
||||||
|
@ -3172,7 +3180,7 @@ typedef MLAN_PACK_START struct _HostCmd_DS_STATS {
|
||||||
/** Action */
|
/** Action */
|
||||||
t_u16 action;
|
t_u16 action;
|
||||||
/** TLV buffer */
|
/** TLV buffer */
|
||||||
t_u8 tlv_buffer[1];
|
t_u8 tlv_buffer[];
|
||||||
} MLAN_PACK_END HostCmd_DS_STATS;
|
} MLAN_PACK_END HostCmd_DS_STATS;
|
||||||
|
|
||||||
typedef MLAN_PACK_START struct _HostCmd_DS_GET_CH_LOAD {
|
typedef MLAN_PACK_START struct _HostCmd_DS_GET_CH_LOAD {
|
||||||
|
@ -4783,7 +4791,7 @@ typedef MLAN_PACK_START struct _MrvlIEtypes_WmmParamSet_t {
|
||||||
/** Header */
|
/** Header */
|
||||||
MrvlIEtypesHeader_t header;
|
MrvlIEtypesHeader_t header;
|
||||||
/** WMM IE */
|
/** WMM IE */
|
||||||
t_u8 wmm_ie[1];
|
t_u8 wmm_ie[];
|
||||||
} MLAN_PACK_END MrvlIEtypes_WmmParamSet_t;
|
} MLAN_PACK_END MrvlIEtypes_WmmParamSet_t;
|
||||||
|
|
||||||
/** MrvlIEtypes_WmmQueueStatus_t */
|
/** MrvlIEtypes_WmmQueueStatus_t */
|
||||||
|
@ -6237,7 +6245,7 @@ typedef MLAN_PACK_START struct _HostCmd_DS_SYS_CONFIG {
|
||||||
/** CMD Action GET/SET*/
|
/** CMD Action GET/SET*/
|
||||||
t_u16 action;
|
t_u16 action;
|
||||||
/** Tlv buffer */
|
/** Tlv buffer */
|
||||||
t_u8 tlv_buffer[1];
|
t_u8 tlv_buffer[];
|
||||||
} MLAN_PACK_END HostCmd_DS_SYS_CONFIG;
|
} MLAN_PACK_END HostCmd_DS_SYS_CONFIG;
|
||||||
|
|
||||||
/** HostCmd_SYS_CONFIG */
|
/** HostCmd_SYS_CONFIG */
|
||||||
|
@ -7688,6 +7696,7 @@ typedef struct MLAN_PACK_START _HostCmd_DS_COMMAND {
|
||||||
/** Hardware specifications */
|
/** Hardware specifications */
|
||||||
HostCmd_DS_GET_HW_SPEC hw_spec;
|
HostCmd_DS_GET_HW_SPEC hw_spec;
|
||||||
#ifdef SDIO
|
#ifdef SDIO
|
||||||
|
HostCmd_DS_SDIO_SP_RX_AGGR_CFG sdio_rx_aggr;
|
||||||
#endif
|
#endif
|
||||||
/** Cfg data */
|
/** Cfg data */
|
||||||
HostCmd_DS_802_11_CFG_DATA cfg_data;
|
HostCmd_DS_802_11_CFG_DATA cfg_data;
|
||||||
|
|
|
@ -271,6 +271,8 @@ ENUM_ELEMENT(HostCmd_CMD_GET_HW_SPEC, 0x0003),
|
||||||
ENUM_ELEMENT(HostCmd_CMD_PACKET_AGGR_OVER_HOST_INTERFACE, 0x0117),
|
ENUM_ELEMENT(HostCmd_CMD_PACKET_AGGR_OVER_HOST_INTERFACE, 0x0117),
|
||||||
|
|
||||||
#ifdef SDIO
|
#ifdef SDIO
|
||||||
|
/** Host Command ID : SDIO single port RX aggr */
|
||||||
|
ENUM_ELEMENT(HostCmd_CMD_SDIO_SP_RX_AGGR_CFG, 0x0223),
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/** Host Command ID : Extended scan support */
|
/** Host Command ID : Extended scan support */
|
||||||
|
|
|
@ -900,7 +900,7 @@ t_void wlan_init_adapter(pmlan_adapter pmadapter)
|
||||||
|
|
||||||
wlan_wmm_init(pmadapter);
|
wlan_wmm_init(pmadapter);
|
||||||
wlan_init_wmm_param(pmadapter);
|
wlan_init_wmm_param(pmadapter);
|
||||||
pmadapter->bypass_pkt_count = 0;
|
|
||||||
if (pmadapter->psleep_cfm) {
|
if (pmadapter->psleep_cfm) {
|
||||||
pmadapter->psleep_cfm->buf_type = MLAN_BUF_TYPE_CMD;
|
pmadapter->psleep_cfm->buf_type = MLAN_BUF_TYPE_CMD;
|
||||||
pmadapter->psleep_cfm->data_len = sizeof(OPT_Confirm_Sleep);
|
pmadapter->psleep_cfm->data_len = sizeof(OPT_Confirm_Sleep);
|
||||||
|
@ -1187,9 +1187,13 @@ mlan_status wlan_init_lock_list(pmlan_adapter pmadapter)
|
||||||
util_init_list_head((t_void *)pmadapter->pmoal_handle,
|
util_init_list_head((t_void *)pmadapter->pmoal_handle,
|
||||||
&pmadapter->rx_data_queue, MTRUE,
|
&pmadapter->rx_data_queue, MTRUE,
|
||||||
pmadapter->callbacks.moal_init_lock);
|
pmadapter->callbacks.moal_init_lock);
|
||||||
|
util_scalar_init((t_void *)pmadapter->pmoal_handle,
|
||||||
|
&pmadapter->bypass_pkt_count, 0, MNULL,
|
||||||
|
pmadapter->callbacks.moal_init_lock);
|
||||||
util_scalar_init((t_void *)pmadapter->pmoal_handle,
|
util_scalar_init((t_void *)pmadapter->pmoal_handle,
|
||||||
&pmadapter->pending_bridge_pkts, 0, MNULL,
|
&pmadapter->pending_bridge_pkts, 0, MNULL,
|
||||||
pmadapter->callbacks.moal_init_lock);
|
pmadapter->callbacks.moal_init_lock);
|
||||||
|
|
||||||
/* Initialize cmd_free_q */
|
/* Initialize cmd_free_q */
|
||||||
util_init_list_head((t_void *)pmadapter->pmoal_handle,
|
util_init_list_head((t_void *)pmadapter->pmoal_handle,
|
||||||
&pmadapter->cmd_free_q, MTRUE,
|
&pmadapter->cmd_free_q, MTRUE,
|
||||||
|
@ -1297,8 +1301,11 @@ t_void wlan_free_lock_list(pmlan_adapter pmadapter)
|
||||||
util_free_list_head((t_void *)pmadapter->pmoal_handle,
|
util_free_list_head((t_void *)pmadapter->pmoal_handle,
|
||||||
&pmadapter->rx_data_queue, pcb->moal_free_lock);
|
&pmadapter->rx_data_queue, pcb->moal_free_lock);
|
||||||
|
|
||||||
|
util_scalar_free((t_void *)pmadapter->pmoal_handle,
|
||||||
|
&pmadapter->bypass_pkt_count, pcb->moal_free_lock);
|
||||||
util_scalar_free((t_void *)pmadapter->pmoal_handle,
|
util_scalar_free((t_void *)pmadapter->pmoal_handle,
|
||||||
&pmadapter->pending_bridge_pkts, pcb->moal_free_lock);
|
&pmadapter->pending_bridge_pkts, pcb->moal_free_lock);
|
||||||
|
|
||||||
util_free_list_head((t_void *)pmadapter->pmoal_handle,
|
util_free_list_head((t_void *)pmadapter->pmoal_handle,
|
||||||
&pmadapter->cmd_free_q,
|
&pmadapter->cmd_free_q,
|
||||||
pmadapter->callbacks.moal_free_lock);
|
pmadapter->callbacks.moal_free_lock);
|
||||||
|
|
|
@ -2410,6 +2410,8 @@ typedef struct _mlan_debug_info {
|
||||||
t_u32 last_int_status;
|
t_u32 last_int_status;
|
||||||
/** number of interrupt receive */
|
/** number of interrupt receive */
|
||||||
t_u32 num_of_irq;
|
t_u32 num_of_irq;
|
||||||
|
/** flag for sdio rx aggr */
|
||||||
|
t_u8 sdio_rx_aggr;
|
||||||
/** FW update port number */
|
/** FW update port number */
|
||||||
t_u32 mp_update[SDIO_MP_AGGR_DEF_PKT_LIMIT_MAX * 2];
|
t_u32 mp_update[SDIO_MP_AGGR_DEF_PKT_LIMIT_MAX * 2];
|
||||||
/** Invalid port update count */
|
/** Invalid port update count */
|
||||||
|
@ -4280,12 +4282,13 @@ enum _mlan_reg_type {
|
||||||
#if defined(PCIE9098) || defined(SD9098) || defined(USB9098) || \
|
#if defined(PCIE9098) || defined(SD9098) || defined(USB9098) || \
|
||||||
defined(PCIE9097) || defined(USB9097) || defined(SDIW624) || \
|
defined(PCIE9097) || defined(USB9097) || defined(SDIW624) || \
|
||||||
defined(PCIEIW624) || defined(USBIW624) || defined(SD9097) || \
|
defined(PCIEIW624) || defined(USBIW624) || defined(SD9097) || \
|
||||||
defined(SD9177)
|
defined(SD9177) || defined(SDIW615) || defined(USBIW615)
|
||||||
MLAN_REG_CIU = 8,
|
MLAN_REG_CIU = 8,
|
||||||
#endif
|
#endif
|
||||||
#if defined(PCIE9098) || defined(SD9098) || defined(USB9098) || \
|
#if defined(PCIE9098) || defined(SD9098) || defined(USB9098) || \
|
||||||
defined(PCIE9097) || defined(USB9097) || defined(SDIW624) || \
|
defined(PCIE9097) || defined(USB9097) || defined(SDIW624) || \
|
||||||
defined(PCIEIW624) || defined(USBIW624) || defined(SD9097)
|
defined(PCIEIW624) || defined(USBIW624) || defined(SD9097) || \
|
||||||
|
defined(SDIW615) || defined(USBIW615)
|
||||||
MLAN_REG_MAC2 = 0x81,
|
MLAN_REG_MAC2 = 0x81,
|
||||||
MLAN_REG_BBP2 = 0x82,
|
MLAN_REG_BBP2 = 0x82,
|
||||||
MLAN_REG_RF2 = 0x83,
|
MLAN_REG_RF2 = 0x83,
|
||||||
|
@ -6122,7 +6125,7 @@ typedef struct _mlan_ds_stats {
|
||||||
/** tlv len */
|
/** tlv len */
|
||||||
t_u16 tlv_len;
|
t_u16 tlv_len;
|
||||||
/** TLV buffer */
|
/** TLV buffer */
|
||||||
t_u8 tlv_buf[1];
|
t_u8 tlv_buf[];
|
||||||
} mlan_ds_stats;
|
} mlan_ds_stats;
|
||||||
|
|
||||||
typedef struct _mlan_ds_ch_load {
|
typedef struct _mlan_ds_ch_load {
|
||||||
|
|
|
@ -672,7 +672,7 @@ static int wlan_update_rsn_ie(mlan_private *pmpriv,
|
||||||
t_u8 preference_selected;
|
t_u8 preference_selected;
|
||||||
t_u8 cipher_selected_id;
|
t_u8 cipher_selected_id;
|
||||||
#if 0 // defined(ENABLE_GCMP_SUPPORT)
|
#if 0 // defined(ENABLE_GCMP_SUPPORT)
|
||||||
// embedded supplicant doesn't support GCMP yet
|
// embedded supplicant doesn't support GCMP yet
|
||||||
t_u8 cipher_preference[11] = {0, 0, 1, 0, 2, 0, 0, 0, 4, 5, 3};
|
t_u8 cipher_preference[11] = {0, 0, 1, 0, 2, 0, 0, 0, 4, 5, 3};
|
||||||
#else
|
#else
|
||||||
t_u8 cipher_preference[5] = {0, 0, 1, 0, 2};
|
t_u8 cipher_preference[5] = {0, 0, 1, 0, 2};
|
||||||
|
@ -1984,7 +1984,6 @@ mlan_status wlan_disconnect(mlan_private *pmpriv, mlan_ioctl_req *pioctl_req,
|
||||||
memcpy_ext(pmpriv->adapter, &local_param, deauth_param,
|
memcpy_ext(pmpriv->adapter, &local_param, deauth_param,
|
||||||
sizeof(*deauth_param), sizeof(local_param));
|
sizeof(*deauth_param), sizeof(local_param));
|
||||||
if (pmpriv->media_connected == MTRUE) {
|
if (pmpriv->media_connected == MTRUE) {
|
||||||
wlan_clean_txrx(pmpriv);
|
|
||||||
if (pmpriv->bss_mode == MLAN_BSS_MODE_INFRA) {
|
if (pmpriv->bss_mode == MLAN_BSS_MODE_INFRA) {
|
||||||
if (!deauth_param ||
|
if (!deauth_param ||
|
||||||
!memcmp(pmpriv->adapter, deauth_param->mac_addr,
|
!memcmp(pmpriv->adapter, deauth_param->mac_addr,
|
||||||
|
|
|
@ -558,11 +558,20 @@ extern t_void (*assert_callback)(t_void *pmoal_handle, t_u32 cond);
|
||||||
/** Type vdll */
|
/** Type vdll */
|
||||||
#define MLAN_TYPE_VDLL 4
|
#define MLAN_TYPE_VDLL 4
|
||||||
#ifdef SDIO
|
#ifdef SDIO
|
||||||
|
/** Type single port aggr data */
|
||||||
|
#define MLAN_TYPE_SPA_DATA 10
|
||||||
|
/** OFFSET of 512 block number */
|
||||||
|
#define OFFSET_OF_BLOCK_NUMBER 15
|
||||||
|
/** OFFSET of SDIO Header */
|
||||||
|
#define OFFSET_OF_SDIO_HEADER 28
|
||||||
|
/** sdio max rx size for cmd53, 255 * 256, reserve 1 block for DMA alignment */
|
||||||
|
#define SDIO_CMD53_MAX_SIZE 65280
|
||||||
#define MAX_SUPPORT_AMSDU_SIZE 4096
|
#define MAX_SUPPORT_AMSDU_SIZE 4096
|
||||||
/** Maximum numbfer of registers to read for multiple port */
|
/** Maximum numbfer of registers to read for multiple port */
|
||||||
#if defined(SD8887) || defined(SD8997) || defined(SD8977) || \
|
#if defined(SD8887) || defined(SD8997) || defined(SD8977) || \
|
||||||
defined(SD8987) || defined(SD9098) || defined(SD9097) || \
|
defined(SD8987) || defined(SD9098) || defined(SD9097) || \
|
||||||
defined(SDIW624) || defined(SD8978) || defined(SD9177)
|
defined(SDIW624) || defined(SD8978) || defined(SD9177) || \
|
||||||
|
defined(SDIW615)
|
||||||
#define MAX_MP_REGS 196
|
#define MAX_MP_REGS 196
|
||||||
#else
|
#else
|
||||||
/* upto 0xB7 */
|
/* upto 0xB7 */
|
||||||
|
@ -2093,6 +2102,10 @@ typedef struct _mlan_sdio_card {
|
||||||
/** GPIO interrupt pin number */
|
/** GPIO interrupt pin number */
|
||||||
t_u32 gpio_pin;
|
t_u32 gpio_pin;
|
||||||
|
|
||||||
|
/** flag for sdio rx aggr */
|
||||||
|
t_bool sdio_rx_aggr_enable;
|
||||||
|
/** fw rx block size */
|
||||||
|
t_u16 sdio_rx_block_size;
|
||||||
} mlan_sdio_card, *pmlan_sdio_card;
|
} mlan_sdio_card, *pmlan_sdio_card;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -2362,7 +2375,9 @@ struct _mlan_adapter {
|
||||||
/** pcie cmd_dnld_int flag */
|
/** pcie cmd_dnld_int flag */
|
||||||
t_u8 pcie_cmd_dnld_int;
|
t_u8 pcie_cmd_dnld_int;
|
||||||
/** more_tx_task_flag */
|
/** more_tx_task_flag */
|
||||||
t_u32 more_tx_task_flag;
|
t_u8 more_tx_task_flag;
|
||||||
|
/** more event flag */
|
||||||
|
t_u8 more_event_flag;
|
||||||
/** tx data lock to synchronize send_data and send_data_complete */
|
/** tx data lock to synchronize send_data and send_data_complete */
|
||||||
t_void *pmlan_tx_lock;
|
t_void *pmlan_tx_lock;
|
||||||
/** event lock to synchronize process_event and event_ready */
|
/** event lock to synchronize process_event and event_ready */
|
||||||
|
@ -2827,7 +2842,7 @@ struct _mlan_adapter {
|
||||||
/** management frame wakeup filter config */
|
/** management frame wakeup filter config */
|
||||||
mlan_mgmt_frame_wakeup mgmt_filter[MAX_MGMT_FRAME_FILTER];
|
mlan_mgmt_frame_wakeup mgmt_filter[MAX_MGMT_FRAME_FILTER];
|
||||||
/** Bypass TX queue pkt count */
|
/** Bypass TX queue pkt count */
|
||||||
t_u32 bypass_pkt_count;
|
mlan_scalar bypass_pkt_count;
|
||||||
#ifdef STA_SUPPORT
|
#ifdef STA_SUPPORT
|
||||||
/** warm-reset IOCTL request buffer pointer */
|
/** warm-reset IOCTL request buffer pointer */
|
||||||
pmlan_ioctl_req pwarm_reset_ioctl_req;
|
pmlan_ioctl_req pwarm_reset_ioctl_req;
|
||||||
|
@ -2914,9 +2929,16 @@ struct _mlan_adapter {
|
||||||
#define MLAN_ETHER_PKT_TYPE_ARP (0x0806)
|
#define MLAN_ETHER_PKT_TYPE_ARP (0x0806)
|
||||||
/** Ethernet packet type for WAPI */
|
/** Ethernet packet type for WAPI */
|
||||||
#define MLAN_ETHER_PKT_TYPE_WAPI (0x88B4)
|
#define MLAN_ETHER_PKT_TYPE_WAPI (0x88B4)
|
||||||
|
/** Ethernet packet type for IP */
|
||||||
|
#define MLAN_ETHER_PKT_TYPE_IP (0x0800)
|
||||||
/** Ethernet packet type offset */
|
/** Ethernet packet type offset */
|
||||||
#define MLAN_ETHER_PKT_TYPE_OFFSET (12)
|
#define MLAN_ETHER_PKT_TYPE_OFFSET (12)
|
||||||
|
|
||||||
|
/** IP packet Protocol number for ICMP */
|
||||||
|
#define MLAN_IP_PROTOCOL_ICMP (0x01)
|
||||||
|
/** IP packet Protocol number offset */
|
||||||
|
#define MLAN_IP_PROTOCOL_OFFSET (11)
|
||||||
|
|
||||||
/** Rx packet Sniffer Operation Mode
|
/** Rx packet Sniffer Operation Mode
|
||||||
*
|
*
|
||||||
* MODE1 : Can be enabled only in disconnected state.
|
* MODE1 : Can be enabled only in disconnected state.
|
||||||
|
@ -3998,6 +4020,10 @@ mlan_status wlan_cmd_get_hw_spec(pmlan_private pmpriv,
|
||||||
mlan_status wlan_ret_get_hw_spec(pmlan_private pmpriv, HostCmd_DS_COMMAND *resp,
|
mlan_status wlan_ret_get_hw_spec(pmlan_private pmpriv, HostCmd_DS_COMMAND *resp,
|
||||||
t_void *pioctl_buf);
|
t_void *pioctl_buf);
|
||||||
#ifdef SDIO
|
#ifdef SDIO
|
||||||
|
mlan_status wlan_cmd_sdio_rx_aggr_cfg(HostCmd_DS_COMMAND *pcmd,
|
||||||
|
t_u16 cmd_action, t_void *pdata_buf);
|
||||||
|
mlan_status wlan_ret_sdio_rx_aggr_cfg(pmlan_private pmpriv,
|
||||||
|
HostCmd_DS_COMMAND *resp);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
mlan_status wlan_misc_ioctl_mac_control(pmlan_adapter pmadapter,
|
mlan_status wlan_misc_ioctl_mac_control(pmlan_adapter pmadapter,
|
||||||
|
|
|
@ -466,7 +466,11 @@ mlan_status wlan_get_info_debug_info(pmlan_adapter pmadapter,
|
||||||
debug_info->tx_lock_flag = pmadapter->tx_lock_flag;
|
debug_info->tx_lock_flag = pmadapter->tx_lock_flag;
|
||||||
debug_info->port_open = pmpriv->port_open;
|
debug_info->port_open = pmpriv->port_open;
|
||||||
debug_info->tx_pause = pmpriv->tx_pause;
|
debug_info->tx_pause = pmpriv->tx_pause;
|
||||||
debug_info->bypass_pkt_count = pmadapter->bypass_pkt_count;
|
debug_info->bypass_pkt_count =
|
||||||
|
util_scalar_read(pmadapter->pmoal_handle,
|
||||||
|
&pmadapter->bypass_pkt_count,
|
||||||
|
pmadapter->callbacks.moal_spin_lock,
|
||||||
|
pmadapter->callbacks.moal_spin_unlock);
|
||||||
debug_info->scan_processing = pmadapter->scan_processing;
|
debug_info->scan_processing = pmadapter->scan_processing;
|
||||||
debug_info->scan_state = pmadapter->scan_state;
|
debug_info->scan_state = pmadapter->scan_state;
|
||||||
debug_info->mlan_processing = pmadapter->mlan_processing;
|
debug_info->mlan_processing = pmadapter->mlan_processing;
|
||||||
|
@ -591,6 +595,8 @@ mlan_status wlan_get_info_debug_info(pmlan_adapter pmadapter,
|
||||||
debug_info->mpa_buf = pmadapter->pcard_sd->mpa_buf;
|
debug_info->mpa_buf = pmadapter->pcard_sd->mpa_buf;
|
||||||
debug_info->mpa_buf_size =
|
debug_info->mpa_buf_size =
|
||||||
pmadapter->pcard_sd->mpa_buf_size;
|
pmadapter->pcard_sd->mpa_buf_size;
|
||||||
|
debug_info->sdio_rx_aggr =
|
||||||
|
pmadapter->pcard_sd->sdio_rx_aggr_enable;
|
||||||
memcpy_ext(pmadapter, debug_info->mpa_rx_count,
|
memcpy_ext(pmadapter, debug_info->mpa_rx_count,
|
||||||
pmadapter->pcard_sd->mpa_rx_count,
|
pmadapter->pcard_sd->mpa_rx_count,
|
||||||
sizeof(pmadapter->pcard_sd->mpa_rx_count),
|
sizeof(pmadapter->pcard_sd->mpa_rx_count),
|
||||||
|
@ -1711,7 +1717,7 @@ mlan_status wlan_reg_mem_ioctl_reg_rw(pmlan_adapter pmadapter,
|
||||||
#if defined(PCIE9098) || defined(SD9098) || defined(USB9098) || \
|
#if defined(PCIE9098) || defined(SD9098) || defined(USB9098) || \
|
||||||
defined(PCIE9097) || defined(USB9097) || defined(SDIW624) || \
|
defined(PCIE9097) || defined(USB9097) || defined(SDIW624) || \
|
||||||
defined(PCIEIW624) || defined(USBIW624) || defined(SD9097) || \
|
defined(PCIEIW624) || defined(USBIW624) || defined(SD9097) || \
|
||||||
defined(SD9177)
|
defined(SD9177) || defined(SDIW615) || defined(USBIW615)
|
||||||
case MLAN_REG_CIU:
|
case MLAN_REG_CIU:
|
||||||
cmd_no = HostCmd_CMD_REG_ACCESS;
|
cmd_no = HostCmd_CMD_REG_ACCESS;
|
||||||
break;
|
break;
|
||||||
|
@ -3338,6 +3344,7 @@ mlan_status wlan_process_802dot11_mgmt_pkt(mlan_private *priv, t_u8 *payload,
|
||||||
(t_u8 *)priv->curr_bss_params
|
(t_u8 *)priv->curr_bss_params
|
||||||
.bss_descriptor.mac_address,
|
.bss_descriptor.mac_address,
|
||||||
MLAN_MAC_ADDR_LENGTH)) ||
|
MLAN_MAC_ADDR_LENGTH)) ||
|
||||||
|
!priv->assoc_rsp_size ||
|
||||||
!memcmp(pmadapter, pieee_pkt_hdr->addr3,
|
!memcmp(pmadapter, pieee_pkt_hdr->addr3,
|
||||||
(t_u8 *)priv->curr_bss_params
|
(t_u8 *)priv->curr_bss_params
|
||||||
.prev_bssid,
|
.prev_bssid,
|
||||||
|
@ -3352,8 +3359,9 @@ mlan_status wlan_process_802dot11_mgmt_pkt(mlan_private *priv, t_u8 *payload,
|
||||||
}
|
}
|
||||||
PRINTM_NETINTF(MMSG, priv);
|
PRINTM_NETINTF(MMSG, priv);
|
||||||
PRINTM(MMSG,
|
PRINTM(MMSG,
|
||||||
"wlan: HostMlme Disconnected: sub_type=%d\n",
|
"wlan: HostMlme Disconnected: sub_type=%d " MACSTR
|
||||||
sub_type);
|
"\n",
|
||||||
|
sub_type, MAC2STR(pieee_pkt_hdr->addr3));
|
||||||
pmadapter->pending_disconnect_priv = priv;
|
pmadapter->pending_disconnect_priv = priv;
|
||||||
wlan_recv_event(
|
wlan_recv_event(
|
||||||
priv, MLAN_EVENT_ID_DRV_DEFER_HANDLING,
|
priv, MLAN_EVENT_ID_DRV_DEFER_HANDLING,
|
||||||
|
|
|
@ -3167,7 +3167,6 @@ static mlan_status wlan_pcie_process_event_ready(mlan_adapter *pmadapter)
|
||||||
|
|
||||||
event = *((t_u32 *)&pmbuf_evt->pbuf[pmbuf_evt->data_offset +
|
event = *((t_u32 *)&pmbuf_evt->pbuf[pmbuf_evt->data_offset +
|
||||||
PCIE_INTF_HEADER_LEN]);
|
PCIE_INTF_HEADER_LEN]);
|
||||||
pmadapter->event_cause = wlan_le32_to_cpu(event);
|
|
||||||
/* The first 4bytes will be the event transfer header
|
/* The first 4bytes will be the event transfer header
|
||||||
len is 2 bytes followed by type which is 2 bytes */
|
len is 2 bytes followed by type which is 2 bytes */
|
||||||
evt_len = *((t_u16 *)&pmbuf_evt->pbuf[pmbuf_evt->data_offset]);
|
evt_len = *((t_u16 *)&pmbuf_evt->pbuf[pmbuf_evt->data_offset]);
|
||||||
|
@ -3185,7 +3184,13 @@ static mlan_status wlan_pcie_process_event_ready(mlan_adapter *pmadapter)
|
||||||
pmbuf_evt->data_len = evt_len - PCIE_INTF_HEADER_LEN;
|
pmbuf_evt->data_len = evt_len - PCIE_INTF_HEADER_LEN;
|
||||||
PRINTM(MINFO, "Event length: %d\n", pmbuf_evt->data_len);
|
PRINTM(MINFO, "Event length: %d\n", pmbuf_evt->data_len);
|
||||||
|
|
||||||
|
pcb->moal_spin_lock(pmadapter->pmoal_handle,
|
||||||
|
pmadapter->pmlan_event_lock);
|
||||||
|
pmadapter->event_cause = wlan_le32_to_cpu(event);
|
||||||
pmadapter->event_received = MTRUE;
|
pmadapter->event_received = MTRUE;
|
||||||
|
pcb->moal_spin_unlock(pmadapter->pmoal_handle,
|
||||||
|
pmadapter->pmlan_event_lock);
|
||||||
|
|
||||||
pmadapter->pmlan_buffer_event = pmbuf_evt;
|
pmadapter->pmlan_buffer_event = pmbuf_evt;
|
||||||
pmadapter->pcard_pcie->evtbd_rdptr++;
|
pmadapter->pcard_pcie->evtbd_rdptr++;
|
||||||
#if defined(PCIE8997) || defined(PCIE8897)
|
#if defined(PCIE8997) || defined(PCIE8897)
|
||||||
|
@ -3241,18 +3246,27 @@ static void wlan_pcie_process_event(mlan_adapter *pmadapter)
|
||||||
pmadapter->pmlan_event_lock);
|
pmadapter->pmlan_event_lock);
|
||||||
if (pmadapter->pcie_event_processing || pmadapter->event_received ||
|
if (pmadapter->pcie_event_processing || pmadapter->event_received ||
|
||||||
pmadapter->event_cause) {
|
pmadapter->event_cause) {
|
||||||
|
pmadapter->more_event_flag = MTRUE;
|
||||||
pcb->moal_spin_unlock(pmadapter->pmoal_handle,
|
pcb->moal_spin_unlock(pmadapter->pmoal_handle,
|
||||||
pmadapter->pmlan_event_lock);
|
pmadapter->pmlan_event_lock);
|
||||||
goto exit_event_proc;
|
goto exit_event_proc;
|
||||||
} else {
|
} else {
|
||||||
pmadapter->pcie_event_processing = MTRUE;
|
pmadapter->pcie_event_processing = MTRUE;
|
||||||
|
pmadapter->more_event_flag = MFALSE;
|
||||||
pcb->moal_spin_unlock(pmadapter->pmoal_handle,
|
pcb->moal_spin_unlock(pmadapter->pmoal_handle,
|
||||||
pmadapter->pmlan_event_lock);
|
pmadapter->pmlan_event_lock);
|
||||||
}
|
}
|
||||||
|
event_process_start:
|
||||||
wlan_pcie_process_event_ready(pmadapter);
|
wlan_pcie_process_event_ready(pmadapter);
|
||||||
|
|
||||||
pcb->moal_spin_lock(pmadapter->pmoal_handle,
|
pcb->moal_spin_lock(pmadapter->pmoal_handle,
|
||||||
pmadapter->pmlan_event_lock);
|
pmadapter->pmlan_event_lock);
|
||||||
|
if (pmadapter->more_event_flag && !pmadapter->event_cause) {
|
||||||
|
pmadapter->more_event_flag = MFALSE;
|
||||||
|
pcb->moal_spin_unlock(pmadapter->pmoal_handle,
|
||||||
|
pmadapter->pmlan_event_lock);
|
||||||
|
goto event_process_start;
|
||||||
|
}
|
||||||
pmadapter->pcie_event_processing = MFALSE;
|
pmadapter->pcie_event_processing = MFALSE;
|
||||||
pcb->moal_spin_unlock(pmadapter->pmoal_handle,
|
pcb->moal_spin_unlock(pmadapter->pmoal_handle,
|
||||||
pmadapter->pmlan_event_lock);
|
pmadapter->pmlan_event_lock);
|
||||||
|
@ -4608,21 +4622,24 @@ mlan_status wlan_set_pcie_buf_config(mlan_private *pmpriv)
|
||||||
/* Send the ring base addresses and count to firmware */
|
/* Send the ring base addresses and count to firmware */
|
||||||
host_spec.txbd_addr_lo = wlan_cpu_to_le32(
|
host_spec.txbd_addr_lo = wlan_cpu_to_le32(
|
||||||
(t_u32)(pmadapter->pcard_pcie->txbd_ring_pbase));
|
(t_u32)(pmadapter->pcard_pcie->txbd_ring_pbase));
|
||||||
host_spec.txbd_addr_hi = wlan_cpu_to_le32((t_u32)(
|
host_spec.txbd_addr_hi = wlan_cpu_to_le32((
|
||||||
((t_u64)pmadapter->pcard_pcie->txbd_ring_pbase) >> 32));
|
t_u32)(((t_u64)pmadapter->pcard_pcie->txbd_ring_pbase) >>
|
||||||
|
32));
|
||||||
host_spec.txbd_count =
|
host_spec.txbd_count =
|
||||||
wlan_cpu_to_le32(pmadapter->pcard_pcie->txrx_bd_size);
|
wlan_cpu_to_le32(pmadapter->pcard_pcie->txrx_bd_size);
|
||||||
host_spec.rxbd_addr_lo = wlan_cpu_to_le32(
|
host_spec.rxbd_addr_lo = wlan_cpu_to_le32(
|
||||||
(t_u32)(pmadapter->pcard_pcie->rxbd_ring_pbase));
|
(t_u32)(pmadapter->pcard_pcie->rxbd_ring_pbase));
|
||||||
host_spec.rxbd_addr_hi = wlan_cpu_to_le32((t_u32)(
|
host_spec.rxbd_addr_hi = wlan_cpu_to_le32((
|
||||||
((t_u64)pmadapter->pcard_pcie->rxbd_ring_pbase) >> 32));
|
t_u32)(((t_u64)pmadapter->pcard_pcie->rxbd_ring_pbase) >>
|
||||||
|
32));
|
||||||
host_spec.rxbd_count =
|
host_spec.rxbd_count =
|
||||||
wlan_cpu_to_le32(pmadapter->pcard_pcie->txrx_bd_size);
|
wlan_cpu_to_le32(pmadapter->pcard_pcie->txrx_bd_size);
|
||||||
host_spec.evtbd_addr_lo = wlan_cpu_to_le32(
|
host_spec.evtbd_addr_lo = wlan_cpu_to_le32(
|
||||||
(t_u32)(pmadapter->pcard_pcie->evtbd_ring_pbase));
|
(t_u32)(pmadapter->pcard_pcie->evtbd_ring_pbase));
|
||||||
host_spec.evtbd_addr_hi = wlan_cpu_to_le32((t_u32)(
|
host_spec.evtbd_addr_hi =
|
||||||
((t_u64)pmadapter->pcard_pcie->evtbd_ring_pbase) >>
|
wlan_cpu_to_le32((t_u32)(((t_u64)pmadapter->pcard_pcie
|
||||||
32));
|
->evtbd_ring_pbase) >>
|
||||||
|
32));
|
||||||
host_spec.evtbd_count = wlan_cpu_to_le32(MLAN_MAX_EVT_BD);
|
host_spec.evtbd_count = wlan_cpu_to_le32(MLAN_MAX_EVT_BD);
|
||||||
|
|
||||||
ret = wlan_prepare_cmd(pmpriv,
|
ret = wlan_prepare_cmd(pmpriv,
|
||||||
|
|
|
@ -408,6 +408,15 @@ static t_s32 wlan_find_best_network_in_list(mlan_private *pmpriv)
|
||||||
for (i = 0; i < pmadapter->num_in_scan_table; i++) {
|
for (i = 0; i < pmadapter->num_in_scan_table; i++) {
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
case MLAN_BSS_MODE_INFRA:
|
case MLAN_BSS_MODE_INFRA:
|
||||||
|
if (wlan_is_network_compatible(pmpriv, i, mode) >= 0) {
|
||||||
|
if (SCAN_RSSI(pmadapter->pscan_table[i].rssi) >
|
||||||
|
best_rssi) {
|
||||||
|
best_rssi = SCAN_RSSI(
|
||||||
|
pmadapter->pscan_table[i].rssi);
|
||||||
|
best_net = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
case MLAN_BSS_MODE_AUTO:
|
case MLAN_BSS_MODE_AUTO:
|
||||||
default:
|
default:
|
||||||
if (SCAN_RSSI(pmadapter->pscan_table[i].rssi) >
|
if (SCAN_RSSI(pmadapter->pscan_table[i].rssi) >
|
||||||
|
@ -873,14 +882,12 @@ wlan_scan_channel_list(mlan_private *pmpriv, t_void *pioctl_buf,
|
||||||
* prepared */
|
* prepared */
|
||||||
memcpy_ext(pmadapter,
|
memcpy_ext(pmadapter,
|
||||||
pchan_tlv_out->chan_scan_param + tlv_idx,
|
pchan_tlv_out->chan_scan_param + tlv_idx,
|
||||||
ptmp_chan_list,
|
ptmp_chan_list, sizeof(ChanScanParamSet_t),
|
||||||
sizeof(pchan_tlv_out->chan_scan_param),
|
sizeof(ChanScanParamSet_t));
|
||||||
sizeof(pchan_tlv_out->chan_scan_param));
|
|
||||||
|
|
||||||
/* Increment the TLV header length by the size appended
|
/* Increment the TLV header length by the size appended
|
||||||
*/
|
*/
|
||||||
pchan_tlv_out->header.len +=
|
pchan_tlv_out->header.len += sizeof(ChanScanParamSet_t);
|
||||||
sizeof(pchan_tlv_out->chan_scan_param);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The tlv buffer length is set to the number of
|
* The tlv buffer length is set to the number of
|
||||||
|
@ -889,8 +896,9 @@ wlan_scan_channel_list(mlan_private *pmpriv, t_void *pioctl_buf,
|
||||||
* compensates for any TLVs that were appended
|
* compensates for any TLVs that were appended
|
||||||
* before the channel list.
|
* before the channel list.
|
||||||
*/
|
*/
|
||||||
pscan_cfg_out->tlv_buf_len = (t_u32)(
|
pscan_cfg_out->tlv_buf_len =
|
||||||
(t_u8 *)pchan_tlv_out - pscan_cfg_out->tlv_buf);
|
(t_u32)((t_u8 *)pchan_tlv_out -
|
||||||
|
pscan_cfg_out->tlv_buf);
|
||||||
|
|
||||||
/* Add the size of the channel tlv header and the data
|
/* Add the size of the channel tlv header and the data
|
||||||
* length */
|
* length */
|
||||||
|
@ -1231,9 +1239,10 @@ static mlan_status wlan_scan_setup_scan_config(
|
||||||
(MrvlIEtypes_WildCardSsIdParamSet_t *)ptlv_pos;
|
(MrvlIEtypes_WildCardSsIdParamSet_t *)ptlv_pos;
|
||||||
pwildcard_ssid_tlv->header.type =
|
pwildcard_ssid_tlv->header.type =
|
||||||
wlan_cpu_to_le16(TLV_TYPE_WILDCARDSSID);
|
wlan_cpu_to_le16(TLV_TYPE_WILDCARDSSID);
|
||||||
pwildcard_ssid_tlv->header.len = (t_u16)(
|
pwildcard_ssid_tlv->header.len =
|
||||||
ssid_len +
|
(t_u16)(ssid_len +
|
||||||
sizeof(pwildcard_ssid_tlv->max_ssid_length));
|
sizeof(pwildcard_ssid_tlv
|
||||||
|
->max_ssid_length));
|
||||||
pwildcard_ssid_tlv->max_ssid_length =
|
pwildcard_ssid_tlv->max_ssid_length =
|
||||||
puser_scan_in->ssid_list[ssid_idx].max_len;
|
puser_scan_in->ssid_list[ssid_idx].max_len;
|
||||||
|
|
||||||
|
@ -2017,8 +2026,9 @@ static mlan_status wlan_interpret_bss_desc_with_ie(pmlan_adapter pmadapter,
|
||||||
pbss_entry->pwpa_ie =
|
pbss_entry->pwpa_ie =
|
||||||
(IEEEtypes_VendorSpecific_t *)
|
(IEEEtypes_VendorSpecific_t *)
|
||||||
pcurrent_ptr;
|
pcurrent_ptr;
|
||||||
pbss_entry->wpa_offset = (t_u16)(
|
pbss_entry->wpa_offset =
|
||||||
pcurrent_ptr - pbss_entry->pbeacon_buf);
|
(t_u16)(pcurrent_ptr -
|
||||||
|
pbss_entry->pbeacon_buf);
|
||||||
HEXDUMP("InterpretIE: Resp WPA_IE",
|
HEXDUMP("InterpretIE: Resp WPA_IE",
|
||||||
(t_u8 *)pbss_entry->pwpa_ie,
|
(t_u8 *)pbss_entry->pwpa_ie,
|
||||||
((*(pbss_entry->pwpa_ie)).vend_hdr.len +
|
((*(pbss_entry->pwpa_ie)).vend_hdr.len +
|
||||||
|
@ -2094,8 +2104,9 @@ static mlan_status wlan_interpret_bss_desc_with_ie(pmlan_adapter pmadapter,
|
||||||
osen_oui, sizeof(osen_oui))) {
|
osen_oui, sizeof(osen_oui))) {
|
||||||
pbss_entry->posen_ie =
|
pbss_entry->posen_ie =
|
||||||
(IEEEtypes_Generic_t *)pcurrent_ptr;
|
(IEEEtypes_Generic_t *)pcurrent_ptr;
|
||||||
pbss_entry->osen_offset = (t_u16)(
|
pbss_entry->osen_offset =
|
||||||
pcurrent_ptr - pbss_entry->pbeacon_buf);
|
(t_u16)(pcurrent_ptr -
|
||||||
|
pbss_entry->pbeacon_buf);
|
||||||
HEXDUMP("InterpretIE: Resp OSEN_IE",
|
HEXDUMP("InterpretIE: Resp OSEN_IE",
|
||||||
(t_u8 *)pbss_entry->posen_ie,
|
(t_u8 *)pbss_entry->posen_ie,
|
||||||
(*(pbss_entry->posen_ie)).ieee_hdr.len +
|
(*(pbss_entry->posen_ie)).ieee_hdr.len +
|
||||||
|
@ -2270,13 +2281,15 @@ static mlan_status wlan_interpret_bss_desc_with_ie(pmlan_adapter pmadapter,
|
||||||
case HE_CAPABILITY:
|
case HE_CAPABILITY:
|
||||||
pbss_entry->phe_cap =
|
pbss_entry->phe_cap =
|
||||||
(IEEEtypes_HECap_t *)pcurrent_ptr;
|
(IEEEtypes_HECap_t *)pcurrent_ptr;
|
||||||
pbss_entry->he_cap_offset = (t_u16)(
|
pbss_entry->he_cap_offset =
|
||||||
pcurrent_ptr - pbss_entry->pbeacon_buf);
|
(t_u16)(pcurrent_ptr -
|
||||||
|
pbss_entry->pbeacon_buf);
|
||||||
break;
|
break;
|
||||||
case HE_OPERATION:
|
case HE_OPERATION:
|
||||||
pbss_entry->phe_oprat = pext_tlv;
|
pbss_entry->phe_oprat = pext_tlv;
|
||||||
pbss_entry->he_oprat_offset = (t_u16)(
|
pbss_entry->he_oprat_offset =
|
||||||
pcurrent_ptr - pbss_entry->pbeacon_buf);
|
(t_u16)(pcurrent_ptr -
|
||||||
|
pbss_entry->pbeacon_buf);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -4940,10 +4953,10 @@ mlan_status wlan_cmd_802_11_scan_ext(mlan_private *pmpriv,
|
||||||
else
|
else
|
||||||
pext_scan_cmd->ext_scan_type = EXT_SCAN_DEFAULT;
|
pext_scan_cmd->ext_scan_type = EXT_SCAN_DEFAULT;
|
||||||
} else {
|
} else {
|
||||||
pcmd->size = wlan_cpu_to_le16((t_u16)(
|
pcmd->size = wlan_cpu_to_le16((
|
||||||
sizeof(pext_scan_cmd->ext_scan_type) +
|
t_u16)(sizeof(pext_scan_cmd->ext_scan_type) +
|
||||||
(t_u16)(sizeof(pext_scan_cmd->reserved)) +
|
(t_u16)(sizeof(pext_scan_cmd->reserved)) +
|
||||||
S_DS_GEN));
|
S_DS_GEN));
|
||||||
pext_scan_cmd->ext_scan_type = EXT_SCAN_CANCEL;
|
pext_scan_cmd->ext_scan_type = EXT_SCAN_CANCEL;
|
||||||
LEAVE();
|
LEAVE();
|
||||||
return MLAN_STATUS_SUCCESS;
|
return MLAN_STATUS_SUCCESS;
|
||||||
|
@ -5723,8 +5736,8 @@ static mlan_status wlan_parse_ext_scan_result(mlan_private *pmpriv,
|
||||||
*/
|
*/
|
||||||
if (pscan_info_tlv) {
|
if (pscan_info_tlv) {
|
||||||
/* RSSI is 2 byte long */
|
/* RSSI is 2 byte long */
|
||||||
bss_new_entry->rssi = -(t_s32)(
|
bss_new_entry->rssi = -(t_s32)(wlan_le16_to_cpu(
|
||||||
wlan_le16_to_cpu(pscan_info_tlv->rssi));
|
pscan_info_tlv->rssi));
|
||||||
PRINTM(MINFO, "EXT_SCAN: RSSI=%d\n",
|
PRINTM(MINFO, "EXT_SCAN: RSSI=%d\n",
|
||||||
bss_new_entry->rssi);
|
bss_new_entry->rssi);
|
||||||
memcpy_ext(pmpriv->adapter, &tsf_val,
|
memcpy_ext(pmpriv->adapter, &tsf_val,
|
||||||
|
@ -6395,8 +6408,9 @@ mlan_status wlan_cmd_bgscan_config(mlan_private *pmpriv,
|
||||||
pwildcard_ssid_tlv = (MrvlIEtypes_WildCardSsIdParamSet_t *)tlv;
|
pwildcard_ssid_tlv = (MrvlIEtypes_WildCardSsIdParamSet_t *)tlv;
|
||||||
pwildcard_ssid_tlv->header.type =
|
pwildcard_ssid_tlv->header.type =
|
||||||
wlan_cpu_to_le16(TLV_TYPE_WILDCARDSSID);
|
wlan_cpu_to_le16(TLV_TYPE_WILDCARDSSID);
|
||||||
pwildcard_ssid_tlv->header.len = (t_u16)(
|
pwildcard_ssid_tlv->header.len =
|
||||||
ssid_len + sizeof(pwildcard_ssid_tlv->max_ssid_length));
|
(t_u16)(ssid_len +
|
||||||
|
sizeof(pwildcard_ssid_tlv->max_ssid_length));
|
||||||
pwildcard_ssid_tlv->max_ssid_length =
|
pwildcard_ssid_tlv->max_ssid_length =
|
||||||
bg_scan_in->ssid_list[ssid_idx].max_len;
|
bg_scan_in->ssid_list[ssid_idx].max_len;
|
||||||
memcpy_ext(pmadapter, pwildcard_ssid_tlv->ssid,
|
memcpy_ext(pmadapter, pwildcard_ssid_tlv->ssid,
|
||||||
|
@ -6823,6 +6837,7 @@ t_s32 wlan_find_ssid_in_list(mlan_private *pmpriv, mlan_802_11_ssid *ssid,
|
||||||
{
|
{
|
||||||
mlan_adapter *pmadapter = pmpriv->adapter;
|
mlan_adapter *pmadapter = pmpriv->adapter;
|
||||||
t_s32 net = -1;
|
t_s32 net = -1;
|
||||||
|
t_s32 j;
|
||||||
t_u8 best_rssi = 0;
|
t_u8 best_rssi = 0;
|
||||||
t_u32 i;
|
t_u32 i;
|
||||||
|
|
||||||
|
@ -6850,6 +6865,23 @@ t_s32 wlan_find_ssid_in_list(mlan_private *pmpriv, mlan_802_11_ssid *ssid,
|
||||||
|
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
case MLAN_BSS_MODE_INFRA:
|
case MLAN_BSS_MODE_INFRA:
|
||||||
|
j = wlan_is_network_compatible(pmpriv, i, mode);
|
||||||
|
|
||||||
|
if (j >= 0) {
|
||||||
|
if (SCAN_RSSI(pmadapter->pscan_table[i]
|
||||||
|
.rssi) >
|
||||||
|
best_rssi) {
|
||||||
|
best_rssi = SCAN_RSSI(
|
||||||
|
pmadapter
|
||||||
|
->pscan_table[i]
|
||||||
|
.rssi);
|
||||||
|
net = i;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (net == -1)
|
||||||
|
net = j;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case MLAN_BSS_MODE_AUTO:
|
case MLAN_BSS_MODE_AUTO:
|
||||||
default:
|
default:
|
||||||
/*
|
/*
|
||||||
|
@ -6915,6 +6947,9 @@ t_s32 wlan_find_bssid_in_list(mlan_private *pmpriv, t_u8 *bssid, t_u32 mode)
|
||||||
continue;
|
continue;
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
case MLAN_BSS_MODE_INFRA:
|
case MLAN_BSS_MODE_INFRA:
|
||||||
|
net = wlan_is_network_compatible(pmpriv, i,
|
||||||
|
mode);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
net = i;
|
net = i;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -225,7 +225,7 @@ static const struct _mlan_card_info mlan_card_info_sd8897 = {
|
||||||
|
|
||||||
#if defined(SD8977) || defined(SD8997) || defined(SD8987) || \
|
#if defined(SD8977) || defined(SD8997) || defined(SD8987) || \
|
||||||
defined(SD9098) || defined(SD9097) || defined(SDIW624) || \
|
defined(SD9098) || defined(SD9097) || defined(SDIW624) || \
|
||||||
defined(SD8978) || defined(SD9177)
|
defined(SD8978) || defined(SD9177) || defined(SDIW615)
|
||||||
static const struct _mlan_sdio_card_reg mlan_reg_sd8977_sd8997 = {
|
static const struct _mlan_sdio_card_reg mlan_reg_sd8977_sd8997 = {
|
||||||
.start_rd_port = 0,
|
.start_rd_port = 0,
|
||||||
.start_wr_port = 0,
|
.start_wr_port = 0,
|
||||||
|
@ -347,6 +347,17 @@ static const struct _mlan_card_info mlan_card_info_sd9177 = {
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef SDIW615
|
||||||
|
static const struct _mlan_card_info mlan_card_info_sdiw615 = {
|
||||||
|
.max_tx_buf_size = MLAN_TX_DATA_BUF_SIZE_4K,
|
||||||
|
.v16_fw_api = 1,
|
||||||
|
.v17_fw_api = 1,
|
||||||
|
.supp_ps_handshake = 0,
|
||||||
|
.default_11n_tx_bf_cap = DEFAULT_11N_TX_BF_CAP_1X1,
|
||||||
|
.support_11mc = 1,
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(SD8977) || defined(SD8978)
|
#if defined(SD8977) || defined(SD8978)
|
||||||
static const struct _mlan_card_info mlan_card_info_sd8977 = {
|
static const struct _mlan_card_info mlan_card_info_sd8977 = {
|
||||||
.max_tx_buf_size = MLAN_TX_DATA_BUF_SIZE_2K,
|
.max_tx_buf_size = MLAN_TX_DATA_BUF_SIZE_2K,
|
||||||
|
@ -583,8 +594,8 @@ static mlan_status wlan_get_rd_port(mlan_adapter *pmadapter, t_u8 *pport)
|
||||||
} else {
|
} else {
|
||||||
if (pmadapter->pcard_sd->mp_rd_bitmap &
|
if (pmadapter->pcard_sd->mp_rd_bitmap &
|
||||||
(1 << pmadapter->pcard_sd->curr_rd_port)) {
|
(1 << pmadapter->pcard_sd->curr_rd_port)) {
|
||||||
pmadapter->pcard_sd->mp_rd_bitmap &= (t_u32)(
|
pmadapter->pcard_sd->mp_rd_bitmap &= (t_u32)(~(
|
||||||
~(1 << pmadapter->pcard_sd->curr_rd_port));
|
1 << pmadapter->pcard_sd->curr_rd_port));
|
||||||
*pport = pmadapter->pcard_sd->curr_rd_port;
|
*pport = pmadapter->pcard_sd->curr_rd_port;
|
||||||
|
|
||||||
/* hw rx wraps round only after port (MAX_PORT-1) */
|
/* hw rx wraps round only after port (MAX_PORT-1) */
|
||||||
|
@ -1044,10 +1055,11 @@ static mlan_status wlan_sdio_prog_fw_w_helper(pmlan_adapter pmadapter, t_u8 *fw,
|
||||||
check_fw_status = MTRUE;
|
check_fw_status = MTRUE;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#if defined(SD9097) || defined(SD9177) || defined(SDIW624)
|
#if defined(SD9097) || defined(SD9177) || defined(SDIW624) || defined(SDIW615)
|
||||||
if (IS_SD9097(pmadapter->card_type) ||
|
if (IS_SD9097(pmadapter->card_type) ||
|
||||||
IS_SDIW624(pmadapter->card_type) ||
|
IS_SDIW624(pmadapter->card_type) ||
|
||||||
IS_SDAW693(pmadapter->card_type) || IS_SD9177(pmadapter->card_type))
|
IS_SDAW693(pmadapter->card_type) ||
|
||||||
|
IS_SDIW615(pmadapter->card_type) || IS_SD9177(pmadapter->card_type))
|
||||||
check_fw_status = MTRUE;
|
check_fw_status = MTRUE;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1261,6 +1273,32 @@ static mlan_status wlan_decode_rx_packet(mlan_adapter *pmadapter,
|
||||||
ENTER();
|
ENTER();
|
||||||
|
|
||||||
switch (upld_typ) {
|
switch (upld_typ) {
|
||||||
|
case MLAN_TYPE_SPA_DATA:
|
||||||
|
PRINTM(MINFO, "--- Rx: SPA Data packet ---\n");
|
||||||
|
pmbuf->data_len = pmadapter->upld_len;
|
||||||
|
if (pmadapter->rx_work_flag) {
|
||||||
|
pmbuf->buf_type = MLAN_BUF_TYPE_SPA_DATA;
|
||||||
|
if (lock_flag)
|
||||||
|
pmadapter->callbacks.moal_spin_lock(
|
||||||
|
pmadapter->pmoal_handle,
|
||||||
|
pmadapter->rx_data_queue.plock);
|
||||||
|
util_enqueue_list_tail(pmadapter->pmoal_handle,
|
||||||
|
&pmadapter->rx_data_queue,
|
||||||
|
(pmlan_linked_list)pmbuf, MNULL,
|
||||||
|
MNULL);
|
||||||
|
pmadapter->rx_pkts_queued++;
|
||||||
|
if (lock_flag)
|
||||||
|
pmadapter->callbacks.moal_spin_unlock(
|
||||||
|
pmadapter->pmoal_handle,
|
||||||
|
pmadapter->rx_data_queue.plock);
|
||||||
|
} else {
|
||||||
|
wlan_decode_spa_buffer(pmadapter,
|
||||||
|
pmbuf->pbuf + pmbuf->data_offset,
|
||||||
|
pmbuf->data_len);
|
||||||
|
wlan_free_mlan_buffer(pmadapter, pmbuf);
|
||||||
|
}
|
||||||
|
pmadapter->data_received = MTRUE;
|
||||||
|
break;
|
||||||
case MLAN_TYPE_DATA:
|
case MLAN_TYPE_DATA:
|
||||||
PRINTM(MINFO, "--- Rx: Data packet ---\n");
|
PRINTM(MINFO, "--- Rx: Data packet ---\n");
|
||||||
if (pmadapter->upld_len > pmbuf->data_len) {
|
if (pmadapter->upld_len > pmbuf->data_len) {
|
||||||
|
@ -1415,7 +1453,7 @@ static mlan_status wlan_receive_single_packet(mlan_adapter *pmadapter)
|
||||||
ret = MLAN_STATUS_FAILURE;
|
ret = MLAN_STATUS_FAILURE;
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
if (pkt_type != MLAN_TYPE_DATA) {
|
if (pkt_type != MLAN_TYPE_DATA && pkt_type != MLAN_TYPE_SPA_DATA) {
|
||||||
PRINTM(MERROR,
|
PRINTM(MERROR,
|
||||||
"receive a wrong pkt from DATA PORT: type=%d, len=%dd\n",
|
"receive a wrong pkt from DATA PORT: type=%d, len=%dd\n",
|
||||||
pkt_type, pmbuf->data_len);
|
pkt_type, pmbuf->data_len);
|
||||||
|
@ -1549,7 +1587,8 @@ static mlan_status wlan_receive_mp_aggr_buf(mlan_adapter *pmadapter)
|
||||||
/* copy pkt to deaggr buf */
|
/* copy pkt to deaggr buf */
|
||||||
mbuf_deaggr =
|
mbuf_deaggr =
|
||||||
pmadapter->pcard_sd->mpa_rx.mbuf_arr[pind];
|
pmadapter->pcard_sd->mpa_rx.mbuf_arr[pind];
|
||||||
if ((pkt_type == MLAN_TYPE_DATA) &&
|
if ((pkt_type == MLAN_TYPE_DATA ||
|
||||||
|
pkt_type == MLAN_TYPE_SPA_DATA) &&
|
||||||
(pkt_len <=
|
(pkt_len <=
|
||||||
pmadapter->pcard_sd->mpa_rx.len_arr[pind])) {
|
pmadapter->pcard_sd->mpa_rx.len_arr[pind])) {
|
||||||
memcpy_ext(pmadapter,
|
memcpy_ext(pmadapter,
|
||||||
|
@ -1710,7 +1749,8 @@ rx_curr_single:
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
if (new_mode || (port != CTRL_PORT)) {
|
if (new_mode || (port != CTRL_PORT)) {
|
||||||
if (pkt_type != MLAN_TYPE_DATA) {
|
if (pkt_type != MLAN_TYPE_DATA &&
|
||||||
|
pkt_type != MLAN_TYPE_SPA_DATA) {
|
||||||
PRINTM(MERROR,
|
PRINTM(MERROR,
|
||||||
"receive a wrong pkt from DATA PORT: type=%d, len=%dd\n",
|
"receive a wrong pkt from DATA PORT: type=%d, len=%dd\n",
|
||||||
pkt_type, pmbuf->data_len);
|
pkt_type, pmbuf->data_len);
|
||||||
|
@ -2404,6 +2444,12 @@ mlan_status wlan_get_sdio_device(pmlan_adapter pmadapter)
|
||||||
pmadapter->pcard_info = &mlan_card_info_sdiw624;
|
pmadapter->pcard_info = &mlan_card_info_sdiw624;
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef SDIW615
|
||||||
|
case CARD_TYPE_SDIW615:
|
||||||
|
pmadapter->pcard_sd->reg = &mlan_reg_sd8977_sd8997;
|
||||||
|
pmadapter->pcard_info = &mlan_card_info_sdiw615;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
#ifdef SD9177
|
#ifdef SD9177
|
||||||
case CARD_TYPE_SD9177:
|
case CARD_TYPE_SD9177:
|
||||||
pmadapter->pcard_sd->reg = &mlan_reg_sd8977_sd8997;
|
pmadapter->pcard_sd->reg = &mlan_reg_sd8977_sd8997;
|
||||||
|
@ -2614,7 +2660,7 @@ static mlan_status wlan_sdio_card_to_host_recovery(mlan_adapter *pmadapter,
|
||||||
pmadapter->pcard_sd->ioport + port)) {
|
pmadapter->pcard_sd->ioport + port)) {
|
||||||
PRINTM(MERROR, "Recovery: Fail to do cmd53\n");
|
PRINTM(MERROR, "Recovery: Fail to do cmd53\n");
|
||||||
}
|
}
|
||||||
if (pkt_type != MLAN_TYPE_DATA) {
|
if (pkt_type != MLAN_TYPE_DATA && pkt_type != MLAN_TYPE_SPA_DATA) {
|
||||||
PRINTM(MERROR,
|
PRINTM(MERROR,
|
||||||
"Recovery: Receive a wrong pkt: type=%d, len=%d\n",
|
"Recovery: Receive a wrong pkt: type=%d, len=%d\n",
|
||||||
pkt_type, pmadapter->upld_len);
|
pkt_type, pmadapter->upld_len);
|
||||||
|
@ -2624,6 +2670,12 @@ static mlan_status wlan_sdio_card_to_host_recovery(mlan_adapter *pmadapter,
|
||||||
// TODO fill the hole in Rx reorder table
|
// TODO fill the hole in Rx reorder table
|
||||||
PRINTM(MDATA, "Recovery: Drop Data packet\n");
|
PRINTM(MDATA, "Recovery: Drop Data packet\n");
|
||||||
pmadapter->dbg.num_pkt_dropped++;
|
pmadapter->dbg.num_pkt_dropped++;
|
||||||
|
} else if (pkt_type == MLAN_TYPE_SPA_DATA) {
|
||||||
|
PRINTM(MDATA, "Recovery: SPA Data packet len=%d\n",
|
||||||
|
pmadapter->upld_len);
|
||||||
|
wlan_decode_spa_buffer(pmadapter, pmadapter->pcard_sd->rx_buf,
|
||||||
|
pmadapter->upld_len);
|
||||||
|
pmadapter->data_received = MTRUE;
|
||||||
}
|
}
|
||||||
PRINTM(MMSG, "wlan: Success handle rx port=%d, rx_len=%d \n", port,
|
PRINTM(MMSG, "wlan: Success handle rx port=%d, rx_len=%d \n", port,
|
||||||
rx_len);
|
rx_len);
|
||||||
|
@ -2839,7 +2891,7 @@ static mlan_status wlan_process_sdio_int_status(mlan_adapter *pmadapter,
|
||||||
MLAN_SDIO_BLOCK_SIZE;
|
MLAN_SDIO_BLOCK_SIZE;
|
||||||
if (rx_len <= SDIO_INTF_HEADER_LEN ||
|
if (rx_len <= SDIO_INTF_HEADER_LEN ||
|
||||||
(rx_blocks * MLAN_SDIO_BLOCK_SIZE) >
|
(rx_blocks * MLAN_SDIO_BLOCK_SIZE) >
|
||||||
ALLOC_BUF_SIZE) {
|
pmadapter->pcard_sd->mpa_rx.buf_size) {
|
||||||
PRINTM(MERROR, "invalid rx_len=%d\n", rx_len);
|
PRINTM(MERROR, "invalid rx_len=%d\n", rx_len);
|
||||||
ret = MLAN_STATUS_FAILURE;
|
ret = MLAN_STATUS_FAILURE;
|
||||||
goto done;
|
goto done;
|
||||||
|
@ -3015,7 +3067,7 @@ exit:
|
||||||
|
|
||||||
#if defined(SD9098) || defined(SD9097) || defined(SDIW624) || \
|
#if defined(SD9098) || defined(SD9097) || defined(SDIW624) || \
|
||||||
defined(SD9177) || defined(SD8997) || defined(SD8987) || \
|
defined(SD9177) || defined(SD8997) || defined(SD8987) || \
|
||||||
defined(SD8978)
|
defined(SD8978) || defined(SDIW615)
|
||||||
/**
|
/**
|
||||||
* @brief This function sends vdll data to the card.
|
* @brief This function sends vdll data to the card.
|
||||||
*
|
*
|
||||||
|
@ -3078,7 +3130,7 @@ static mlan_status wlan_sdio_host_to_card_ext(pmlan_private pmpriv, t_u8 type,
|
||||||
|
|
||||||
#if defined(SD9098) || defined(SD9097) || defined(SDIW624) || \
|
#if defined(SD9098) || defined(SD9097) || defined(SDIW624) || \
|
||||||
defined(SD9177) || defined(SD8997) || defined(SD8987) || \
|
defined(SD9177) || defined(SD8997) || defined(SD8987) || \
|
||||||
defined(SD8978)
|
defined(SD8978) || defined(SDIW615)
|
||||||
if (type == MLAN_TYPE_VDLL)
|
if (type == MLAN_TYPE_VDLL)
|
||||||
return wlan_sdio_send_vdll(pmadapter, pmbuf);
|
return wlan_sdio_send_vdll(pmadapter, pmbuf);
|
||||||
#endif
|
#endif
|
||||||
|
@ -3091,6 +3143,99 @@ static mlan_status wlan_sdio_host_to_card_ext(pmlan_private pmpriv, t_u8 type,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Deaggregate single port aggregation packet
|
||||||
|
*
|
||||||
|
* @param pmadapter A pointer to mlan_adapter structure
|
||||||
|
* @param buf A pointer to aggregated data packet
|
||||||
|
* @param len
|
||||||
|
*
|
||||||
|
* @return N/A
|
||||||
|
*/
|
||||||
|
void wlan_decode_spa_buffer(mlan_adapter *pmadapter, t_u8 *buf, t_u32 len)
|
||||||
|
{
|
||||||
|
int total_pkt_len;
|
||||||
|
t_u8 block_num = 0;
|
||||||
|
t_u16 block_size = 0;
|
||||||
|
t_u8 *data;
|
||||||
|
t_u32 pkt_len;
|
||||||
|
mlan_buffer *mbuf_deaggr = MNULL;
|
||||||
|
|
||||||
|
ENTER();
|
||||||
|
|
||||||
|
data = (t_u8 *)buf;
|
||||||
|
total_pkt_len = len;
|
||||||
|
if (total_pkt_len < pmadapter->pcard_sd->sdio_rx_block_size) {
|
||||||
|
PRINTM(MERROR, "Invalid sp aggr packet size=%d\n",
|
||||||
|
total_pkt_len);
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
while (total_pkt_len >=
|
||||||
|
(OFFSET_OF_SDIO_HEADER + SDIO_INTF_HEADER_LEN)) {
|
||||||
|
block_num = *(data + OFFSET_OF_BLOCK_NUMBER);
|
||||||
|
block_size =
|
||||||
|
pmadapter->pcard_sd->sdio_rx_block_size * block_num;
|
||||||
|
if (block_size > total_pkt_len) {
|
||||||
|
PRINTM(MERROR,
|
||||||
|
"Error in pkt, block_num=%d, pkt_len=%d\n",
|
||||||
|
block_num, total_pkt_len);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
pkt_len = wlan_le16_to_cpu(
|
||||||
|
*(t_u16 *)(data + OFFSET_OF_SDIO_HEADER));
|
||||||
|
if ((pkt_len + OFFSET_OF_SDIO_HEADER) > block_size) {
|
||||||
|
PRINTM(MERROR,
|
||||||
|
"Error in pkt, pkt_len=%d, block_size=%d\n",
|
||||||
|
pkt_len, block_size);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (pkt_len > SDIO_INTF_HEADER_LEN) {
|
||||||
|
mbuf_deaggr = wlan_alloc_mlan_buffer(
|
||||||
|
pmadapter, pkt_len - SDIO_INTF_HEADER_LEN,
|
||||||
|
MLAN_RX_HEADER_LEN, MOAL_ALLOC_MLAN_BUFFER);
|
||||||
|
} else {
|
||||||
|
PRINTM(MERROR, "Invalid packet length error\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mbuf_deaggr == MNULL) {
|
||||||
|
PRINTM(MERROR, "Error allocating daggr mlan_buffer\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
memcpy_ext(pmadapter,
|
||||||
|
mbuf_deaggr->pbuf + mbuf_deaggr->data_offset,
|
||||||
|
data + OFFSET_OF_SDIO_HEADER + SDIO_INTF_HEADER_LEN,
|
||||||
|
pkt_len - SDIO_INTF_HEADER_LEN,
|
||||||
|
pkt_len - SDIO_INTF_HEADER_LEN);
|
||||||
|
mbuf_deaggr->data_len = pkt_len - SDIO_INTF_HEADER_LEN;
|
||||||
|
wlan_handle_rx_packet(pmadapter, mbuf_deaggr);
|
||||||
|
data += block_size;
|
||||||
|
total_pkt_len -= block_size;
|
||||||
|
if (total_pkt_len < pmadapter->pcard_sd->sdio_rx_block_size)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
done:
|
||||||
|
LEAVE();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This function deaggr rx pkt
|
||||||
|
*
|
||||||
|
* @param pmadapter A pointer to mlan_adapter structure
|
||||||
|
* @param pmbuf A pointer to the SDIO mpa data
|
||||||
|
* @return N/A
|
||||||
|
*/
|
||||||
|
t_void wlan_sdio_deaggr_rx_pkt(pmlan_adapter pmadapter, mlan_buffer *pmbuf)
|
||||||
|
{
|
||||||
|
if (pmbuf->buf_type == MLAN_BUF_TYPE_SPA_DATA) {
|
||||||
|
wlan_decode_spa_buffer(pmadapter,
|
||||||
|
pmbuf->pbuf + pmbuf->data_offset,
|
||||||
|
pmbuf->data_len);
|
||||||
|
wlan_free_mlan_buffer(pmadapter, pmbuf);
|
||||||
|
} else
|
||||||
|
wlan_handle_rx_packet(pmadapter, pmbuf);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This function allocates buffer for the SDIO aggregation buffer
|
* @brief This function allocates buffer for the SDIO aggregation buffer
|
||||||
* related members of adapter structure
|
* related members of adapter structure
|
||||||
|
@ -3206,6 +3351,84 @@ mlan_status wlan_free_sdio_mpa_buffers(mlan_adapter *pmadapter)
|
||||||
return MLAN_STATUS_SUCCESS;
|
return MLAN_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This function re-allocate rx mpa buffer
|
||||||
|
*
|
||||||
|
* @param pmadapter A pointer to mlan_adapter structure
|
||||||
|
*
|
||||||
|
* @return MLAN_STATUS_SUCCESS
|
||||||
|
*/
|
||||||
|
mlan_status wlan_re_alloc_sdio_rx_mpa_buffer(mlan_adapter *pmadapter)
|
||||||
|
{
|
||||||
|
mlan_status ret = MLAN_STATUS_SUCCESS;
|
||||||
|
pmlan_callbacks pcb = &pmadapter->callbacks;
|
||||||
|
t_u32 buf_size = 0;
|
||||||
|
t_u8 mp_aggr_pkt_limit = pmadapter->pcard_sd->mp_aggr_pkt_limit;
|
||||||
|
t_u32 mpa_rx_buf_size = pmadapter->pcard_sd->mp_tx_aggr_buf_size;
|
||||||
|
|
||||||
|
if (pmadapter->pcard_sd->mpa_rx.buf) {
|
||||||
|
pcb->moal_mfree(pmadapter->pmoal_handle,
|
||||||
|
(t_u8 *)pmadapter->pcard_sd->mpa_rx.head_ptr);
|
||||||
|
pmadapter->pcard_sd->mpa_rx.head_ptr = MNULL;
|
||||||
|
pmadapter->pcard_sd->mpa_rx.buf = MNULL;
|
||||||
|
pmadapter->pcard_sd->mpa_rx.buf_size = 0;
|
||||||
|
}
|
||||||
|
if (pmadapter->pcard_sd->sdio_rx_aggr_enable) {
|
||||||
|
mpa_rx_buf_size = MAX(mpa_rx_buf_size, SDIO_CMD53_MAX_SIZE);
|
||||||
|
/** reallocate rx buffer for recover when single port rx
|
||||||
|
* aggregation enabled */
|
||||||
|
if (pmadapter->pcard_sd->rx_buffer) {
|
||||||
|
pcb->moal_mfree(pmadapter->pmoal_handle,
|
||||||
|
(t_u8 *)pmadapter->pcard_sd->rx_buffer);
|
||||||
|
pmadapter->pcard_sd->rx_buffer = MNULL;
|
||||||
|
pmadapter->pcard_sd->rx_buf = MNULL;
|
||||||
|
}
|
||||||
|
ret = pmadapter->callbacks.moal_malloc(
|
||||||
|
pmadapter->pmoal_handle,
|
||||||
|
SDIO_CMD53_MAX_SIZE + DMA_ALIGNMENT,
|
||||||
|
MLAN_MEM_DEF | MLAN_MEM_DMA,
|
||||||
|
(t_u8 **)&pmadapter->pcard_sd->rx_buffer);
|
||||||
|
|
||||||
|
if (ret != MLAN_STATUS_SUCCESS ||
|
||||||
|
!pmadapter->pcard_sd->rx_buffer) {
|
||||||
|
PRINTM(MERROR, "Failed to allocate receive buffer\n");
|
||||||
|
ret = MLAN_STATUS_FAILURE;
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
pmadapter->pcard_sd->rx_buf = (t_u8 *)ALIGN_ADDR(
|
||||||
|
pmadapter->pcard_sd->rx_buffer, DMA_ALIGNMENT);
|
||||||
|
}
|
||||||
|
if ((pmadapter->pcard_sd->max_segs < mp_aggr_pkt_limit) ||
|
||||||
|
(pmadapter->pcard_sd->max_seg_size <
|
||||||
|
pmadapter->pcard_sd->max_sp_rx_size)) {
|
||||||
|
if (!wlan_secure_add(&mpa_rx_buf_size, DMA_ALIGNMENT, &buf_size,
|
||||||
|
TYPE_UINT32))
|
||||||
|
PRINTM(MERROR, "%s:rx_buf_size overflow \n", __func__);
|
||||||
|
|
||||||
|
ret = pcb->moal_malloc(
|
||||||
|
pmadapter->pmoal_handle, buf_size,
|
||||||
|
MLAN_MEM_DEF | MLAN_MEM_DMA,
|
||||||
|
(t_u8 **)&pmadapter->pcard_sd->mpa_rx.head_ptr);
|
||||||
|
if (ret != MLAN_STATUS_SUCCESS ||
|
||||||
|
!pmadapter->pcard_sd->mpa_rx.head_ptr) {
|
||||||
|
PRINTM(MERROR,
|
||||||
|
"Could not allocate buffer for SDIO MP RX aggr\n");
|
||||||
|
ret = MLAN_STATUS_FAILURE;
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
pmadapter->pcard_sd->mpa_rx.buf = (t_u8 *)ALIGN_ADDR(
|
||||||
|
pmadapter->pcard_sd->mpa_rx.head_ptr, DMA_ALIGNMENT);
|
||||||
|
} else {
|
||||||
|
PRINTM(MMSG, "wlan: Enable RX SG mode\n");
|
||||||
|
pmadapter->pcard_sd->mpa_rx.head_ptr = MNULL;
|
||||||
|
pmadapter->pcard_sd->mpa_rx.buf = MNULL;
|
||||||
|
}
|
||||||
|
pmadapter->pcard_sd->mpa_rx.buf_size = mpa_rx_buf_size;
|
||||||
|
PRINTM(MMSG, "mpa_rx_buf_size=%d\n", mpa_rx_buf_size);
|
||||||
|
error:
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This function wakes up the card.
|
* @brief This function wakes up the card.
|
||||||
*
|
*
|
||||||
|
@ -3390,7 +3613,7 @@ mlan_status wlan_reset_fw(pmlan_adapter pmadapter)
|
||||||
}
|
}
|
||||||
#if defined(SD8997) || defined(SD8977) || defined(SD8987) || \
|
#if defined(SD8997) || defined(SD8977) || defined(SD8987) || \
|
||||||
defined(SD9098) || defined(SD9097) || defined(SDIW624) || \
|
defined(SD9098) || defined(SD9097) || defined(SDIW624) || \
|
||||||
defined(SD8978) || defined(SD9177)
|
defined(SD8978) || defined(SD9177) || defined(SDIW615)
|
||||||
if (MFALSE
|
if (MFALSE
|
||||||
#ifdef SD8997
|
#ifdef SD8997
|
||||||
|| IS_SD8997(pmadapter->card_type)
|
|| IS_SD8997(pmadapter->card_type)
|
||||||
|
@ -3413,6 +3636,9 @@ mlan_status wlan_reset_fw(pmlan_adapter pmadapter)
|
||||||
#ifdef SDIW624
|
#ifdef SDIW624
|
||||||
|| IS_SDIW624(pmadapter->card_type)
|
|| IS_SDIW624(pmadapter->card_type)
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef SDIW615
|
||||||
|
|| IS_SDIW615(pmadapter->card_type)
|
||||||
|
#endif
|
||||||
#ifdef SD9177
|
#ifdef SD9177
|
||||||
|| IS_SD9177(pmadapter->card_type)
|
|| IS_SD9177(pmadapter->card_type)
|
||||||
#endif
|
#endif
|
||||||
|
@ -3498,7 +3724,7 @@ static mlan_status wlan_sdio_handle_rx_packet(mlan_adapter *pmadapter,
|
||||||
{
|
{
|
||||||
ENTER();
|
ENTER();
|
||||||
|
|
||||||
wlan_handle_rx_packet(pmadapter, pmbuf);
|
wlan_sdio_deaggr_rx_pkt(pmadapter, pmbuf);
|
||||||
|
|
||||||
LEAVE();
|
LEAVE();
|
||||||
return MLAN_STATUS_SUCCESS;
|
return MLAN_STATUS_SUCCESS;
|
||||||
|
|
|
@ -358,6 +358,10 @@ mlan_status wlan_get_sdio_device(pmlan_adapter pmadapter);
|
||||||
|
|
||||||
mlan_status wlan_send_mp_aggr_buf(mlan_adapter *pmadapter);
|
mlan_status wlan_send_mp_aggr_buf(mlan_adapter *pmadapter);
|
||||||
|
|
||||||
|
mlan_status wlan_re_alloc_sdio_rx_mpa_buffer(mlan_adapter *pmadapter);
|
||||||
|
|
||||||
|
void wlan_decode_spa_buffer(mlan_adapter *pmadapter, t_u8 *buf, t_u32 len);
|
||||||
|
t_void wlan_sdio_deaggr_rx_pkt(pmlan_adapter pmadapter, mlan_buffer *pmbuf);
|
||||||
/** Transfer data to card */
|
/** Transfer data to card */
|
||||||
mlan_status wlan_sdio_host_to_card(mlan_adapter *pmadapter, t_u8 type,
|
mlan_status wlan_sdio_host_to_card(mlan_adapter *pmadapter, t_u8 type,
|
||||||
mlan_buffer *mbuf, mlan_tx_param *tx_param);
|
mlan_buffer *mbuf, mlan_tx_param *tx_param);
|
||||||
|
|
|
@ -362,6 +362,8 @@ mlan_status mlan_register(pmlan_device pmdevice, t_void **ppmlan_adapter)
|
||||||
|
|
||||||
pmadapter->init_para.mpa_tx_cfg = pmdevice->mpa_tx_cfg;
|
pmadapter->init_para.mpa_tx_cfg = pmdevice->mpa_tx_cfg;
|
||||||
pmadapter->init_para.mpa_rx_cfg = pmdevice->mpa_rx_cfg;
|
pmadapter->init_para.mpa_rx_cfg = pmdevice->mpa_rx_cfg;
|
||||||
|
pmadapter->pcard_sd->sdio_rx_aggr_enable =
|
||||||
|
pmdevice->sdio_rx_aggr_enable;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1436,6 +1438,7 @@ mlan_status mlan_send_packet(t_void *padapter, pmlan_buffer pmbuf)
|
||||||
mlan_adapter *pmadapter = (mlan_adapter *)padapter;
|
mlan_adapter *pmadapter = (mlan_adapter *)padapter;
|
||||||
mlan_private *pmpriv;
|
mlan_private *pmpriv;
|
||||||
t_u16 eth_type = 0;
|
t_u16 eth_type = 0;
|
||||||
|
t_u8 ip_protocol = 0;
|
||||||
t_u8 ra[MLAN_MAC_ADDR_LENGTH];
|
t_u8 ra[MLAN_MAC_ADDR_LENGTH];
|
||||||
tdlsStatus_e tdls_status;
|
tdlsStatus_e tdls_status;
|
||||||
|
|
||||||
|
@ -1453,9 +1456,21 @@ mlan_status mlan_send_packet(t_void *padapter, pmlan_buffer pmbuf)
|
||||||
eth_type =
|
eth_type =
|
||||||
mlan_ntohs(*(t_u16 *)&pmbuf->pbuf[pmbuf->data_offset +
|
mlan_ntohs(*(t_u16 *)&pmbuf->pbuf[pmbuf->data_offset +
|
||||||
MLAN_ETHER_PKT_TYPE_OFFSET]);
|
MLAN_ETHER_PKT_TYPE_OFFSET]);
|
||||||
|
|
||||||
|
/** Identify ICMP packet from ETH_IP packet. ICMP packet in IP header
|
||||||
|
* Protocol field is 0x01 */
|
||||||
|
if (eth_type == MLAN_ETHER_PKT_TYPE_IP) {
|
||||||
|
ip_protocol = *((t_u8 *)(pmbuf->pbuf + pmbuf->data_offset +
|
||||||
|
MLAN_ETHER_PKT_TYPE_OFFSET +
|
||||||
|
MLAN_IP_PROTOCOL_OFFSET));
|
||||||
|
}
|
||||||
|
|
||||||
if ((eth_type == MLAN_ETHER_PKT_TYPE_EAPOL) ||
|
if ((eth_type == MLAN_ETHER_PKT_TYPE_EAPOL) ||
|
||||||
(eth_type == MLAN_ETHER_PKT_TYPE_ARP) ||
|
(eth_type == MLAN_ETHER_PKT_TYPE_ARP) ||
|
||||||
(eth_type == MLAN_ETHER_PKT_TYPE_WAPI) ||
|
(eth_type == MLAN_ETHER_PKT_TYPE_WAPI)
|
||||||
|
/** Send ICMP packet via bypass_txqueue to reduce long ping latency
|
||||||
|
*/
|
||||||
|
|| (ip_protocol == MLAN_IP_PROTOCOL_ICMP) ||
|
||||||
(eth_type == MLAN_ETHER_PKT_TYPE_TDLS_ACTION) ||
|
(eth_type == MLAN_ETHER_PKT_TYPE_TDLS_ACTION) ||
|
||||||
(pmbuf->buf_type == MLAN_BUF_TYPE_RAW_DATA)
|
(pmbuf->buf_type == MLAN_BUF_TYPE_RAW_DATA)
|
||||||
/* Adding the Ucast/Mcast pkt to bypass queue when flag is set*/
|
/* Adding the Ucast/Mcast pkt to bypass queue when flag is set*/
|
||||||
|
@ -1943,11 +1958,20 @@ void mlan_process_pcie_interrupt_cb(t_void *padapter, int type)
|
||||||
} else if (type == TX_COMPLETE && !wlan_is_tx_pending(pmadapter)) {
|
} else if (type == TX_COMPLETE && !wlan_is_tx_pending(pmadapter)) {
|
||||||
LEAVE();
|
LEAVE();
|
||||||
return;
|
return;
|
||||||
|
} else if (type == RX_DATA_DELAY) {
|
||||||
|
PRINTM(MEVENT, "Delay Rx DATA\n");
|
||||||
|
pcb->moal_spin_lock(pmadapter->pmoal_handle,
|
||||||
|
pmadapter->pmlan_rx_lock);
|
||||||
|
pmadapter->pcard_pcie->rx_pending = MFALSE;
|
||||||
|
pcb->moal_spin_unlock(pmadapter->pmoal_handle,
|
||||||
|
pmadapter->pmlan_rx_lock);
|
||||||
|
LEAVE();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
pmadapter->ops.process_int_status(pmadapter, type);
|
pmadapter->ops.process_int_status(pmadapter, type);
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case RX_DATA: // Rx Data
|
case RX_DATA: // Rx Data
|
||||||
if (pmadapter->data_received) {
|
if (pmadapter->rx_pkts_queued) {
|
||||||
if (pmadapter->napi)
|
if (pmadapter->napi)
|
||||||
mlan_queue_rx_work(pmadapter);
|
mlan_queue_rx_work(pmadapter);
|
||||||
else
|
else
|
||||||
|
|
|
@ -3634,6 +3634,9 @@ mlan_status wlan_ops_sta_prepare_cmd(t_void *priv, t_u16 cmd_no,
|
||||||
ret = wlan_cmd_get_hw_spec(pmpriv, cmd_ptr);
|
ret = wlan_cmd_get_hw_spec(pmpriv, cmd_ptr);
|
||||||
break;
|
break;
|
||||||
#ifdef SDIO
|
#ifdef SDIO
|
||||||
|
case HostCmd_CMD_SDIO_SP_RX_AGGR_CFG:
|
||||||
|
ret = wlan_cmd_sdio_rx_aggr_cfg(cmd_ptr, cmd_action, pdata_buf);
|
||||||
|
break;
|
||||||
#endif
|
#endif
|
||||||
case HostCmd_CMD_CFG_DATA:
|
case HostCmd_CMD_CFG_DATA:
|
||||||
ret = wlan_cmd_cfg_data(pmpriv, cmd_ptr, cmd_action, cmd_oid,
|
ret = wlan_cmd_cfg_data(pmpriv, cmd_ptr, cmd_action, cmd_oid,
|
||||||
|
|
|
@ -265,6 +265,10 @@ static mlan_status wlan_process_cmdresp_error(mlan_private *pmpriv,
|
||||||
pmadapter->dbg.num_remain_chan_err++;
|
pmadapter->dbg.num_remain_chan_err++;
|
||||||
break;
|
break;
|
||||||
#ifdef SDIO
|
#ifdef SDIO
|
||||||
|
case HostCmd_CMD_SDIO_SP_RX_AGGR_CFG:
|
||||||
|
pmadapter->pcard_sd->sdio_rx_aggr_enable = MFALSE;
|
||||||
|
PRINTM(MMSG, "FW don't support SDIO single port rx aggr\n");
|
||||||
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
case HostCmd_CMD_MGMT_IE_LIST: {
|
case HostCmd_CMD_MGMT_IE_LIST: {
|
||||||
|
@ -3178,6 +3182,9 @@ mlan_status wlan_ops_sta_process_cmdresp(t_void *priv, t_u16 cmdresp_no,
|
||||||
ret = wlan_ret_get_hw_spec(pmpriv, resp, pioctl_buf);
|
ret = wlan_ret_get_hw_spec(pmpriv, resp, pioctl_buf);
|
||||||
break;
|
break;
|
||||||
#ifdef SDIO
|
#ifdef SDIO
|
||||||
|
case HostCmd_CMD_SDIO_SP_RX_AGGR_CFG:
|
||||||
|
ret = wlan_ret_sdio_rx_aggr_cfg(pmpriv, resp);
|
||||||
|
break;
|
||||||
#endif
|
#endif
|
||||||
case HostCmd_CMD_CFG_DATA:
|
case HostCmd_CMD_CFG_DATA:
|
||||||
ret = wlan_ret_cfg_data(pmpriv, resp, pioctl_buf);
|
ret = wlan_ret_cfg_data(pmpriv, resp, pioctl_buf);
|
||||||
|
@ -3262,7 +3269,6 @@ mlan_status wlan_ops_sta_process_cmdresp(t_void *priv, t_u16 cmdresp_no,
|
||||||
case HostCmd_CMD_802_11_DISASSOCIATE:
|
case HostCmd_CMD_802_11_DISASSOCIATE:
|
||||||
ret = wlan_ret_802_11_deauthenticate(pmpriv, resp, pioctl_buf);
|
ret = wlan_ret_802_11_deauthenticate(pmpriv, resp, pioctl_buf);
|
||||||
break;
|
break;
|
||||||
break;
|
|
||||||
case HostCmd_CMD_802_11_GET_LOG:
|
case HostCmd_CMD_802_11_GET_LOG:
|
||||||
ret = wlan_ret_get_log(pmpriv, resp, pioctl_buf);
|
ret = wlan_ret_get_log(pmpriv, resp, pioctl_buf);
|
||||||
break;
|
break;
|
||||||
|
@ -3408,7 +3414,6 @@ mlan_status wlan_ops_sta_process_cmdresp(t_void *priv, t_u16 cmdresp_no,
|
||||||
case HostCmd_CMD_WMM_PARAM_CONFIG:
|
case HostCmd_CMD_WMM_PARAM_CONFIG:
|
||||||
ret = wlan_ret_wmm_param_config(pmpriv, resp, pioctl_buf);
|
ret = wlan_ret_wmm_param_config(pmpriv, resp, pioctl_buf);
|
||||||
break;
|
break;
|
||||||
break;
|
|
||||||
case HostCmd_CMD_MGMT_IE_LIST:
|
case HostCmd_CMD_MGMT_IE_LIST:
|
||||||
ret = wlan_ret_mgmt_ie_list(pmpriv, resp, pioctl_buf);
|
ret = wlan_ret_mgmt_ie_list(pmpriv, resp, pioctl_buf);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -811,6 +811,12 @@ mlan_status wlan_ops_sta_process_event(t_void *priv)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EVENT_LINK_LOST:
|
case EVENT_LINK_LOST:
|
||||||
|
if (pmpriv->curr_bss_params.host_mlme &&
|
||||||
|
!pmpriv->assoc_rsp_size) {
|
||||||
|
PRINTM(MMSG,
|
||||||
|
"wlan: skip link lost event before associate complete\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
if (pmbuf && (pmbuf->data_len >=
|
if (pmbuf && (pmbuf->data_len >=
|
||||||
sizeof(eventcause) + sizeof(Event_Link_Lost))) {
|
sizeof(eventcause) + sizeof(Event_Link_Lost))) {
|
||||||
link_lost_evt = (Event_Link_Lost *)(pmbuf->pbuf +
|
link_lost_evt = (Event_Link_Lost *)(pmbuf->pbuf +
|
||||||
|
|
|
@ -1357,6 +1357,9 @@ static mlan_status wlan_bss_ioctl(pmlan_adapter pmadapter,
|
||||||
&pmpriv->curr_bss_params.attemp_bssid,
|
&pmpriv->curr_bss_params.attemp_bssid,
|
||||||
&bss->param.bssid, MLAN_MAC_ADDR_LENGTH,
|
&bss->param.bssid, MLAN_MAC_ADDR_LENGTH,
|
||||||
MLAN_MAC_ADDR_LENGTH);
|
MLAN_MAC_ADDR_LENGTH);
|
||||||
|
/* clear assoc_rsp_size */
|
||||||
|
pmpriv->assoc_rsp_size = 0;
|
||||||
|
pmpriv->assoc_req_size = 0;
|
||||||
break;
|
break;
|
||||||
case MLAN_OID_BSS_START:
|
case MLAN_OID_BSS_START:
|
||||||
status = wlan_bss_ioctl_start(pmadapter, pioctl_req);
|
status = wlan_bss_ioctl_start(pmadapter, pioctl_req);
|
||||||
|
@ -3223,76 +3226,93 @@ static mlan_status wlan_set_gen_ie_helper(mlan_private *priv, t_u8 *ie_data_ptr,
|
||||||
(!memcmp(priv->adapter, pvendor_ie->oui, wpa_oui,
|
(!memcmp(priv->adapter, pvendor_ie->oui, wpa_oui,
|
||||||
sizeof(wpa_oui)))) ||
|
sizeof(wpa_oui)))) ||
|
||||||
(pvendor_ie->element_id == RSN_IE)) {
|
(pvendor_ie->element_id == RSN_IE)) {
|
||||||
/* IE is a WPA/WPA2 IE so call set_wpa function */
|
/* IE is a WPA/WPA2 IE so call set_wpa function
|
||||||
ret = wlan_set_wpa_ie_helper(priv, ie_data_ptr, ie_len);
|
|
||||||
priv->wps.session_enable = MFALSE;
|
|
||||||
} else if (pvendor_ie->element_id == WAPI_IE) {
|
|
||||||
/* IE is a WAPI IE so call set_wapi function */
|
|
||||||
ret = wlan_set_wapi_ie(priv, ie_data_ptr, ie_len);
|
|
||||||
} else if ((pvendor_ie->element_id == VENDOR_SPECIFIC_221) &&
|
|
||||||
(!memcmp(priv->adapter, pvendor_ie->oui, osen_oui,
|
|
||||||
sizeof(osen_oui)))) {
|
|
||||||
/* IE is a OSEN IE so call set_osen function */
|
|
||||||
ret = wlan_set_osen_ie(priv, ie_data_ptr, ie_len);
|
|
||||||
|
|
||||||
} else if ((pvendor_ie->element_id == WPS_IE) &&
|
|
||||||
(priv->wps.session_enable == MFALSE) &&
|
|
||||||
(!memcmp(priv->adapter, pvendor_ie->oui, wps_oui,
|
|
||||||
sizeof(wps_oui)))) {
|
|
||||||
/*
|
|
||||||
* Discard first two byte (Element ID and Length)
|
|
||||||
* because they are not needed in the case of setting
|
|
||||||
* WPS_IE
|
|
||||||
*/
|
|
||||||
if (pvendor_ie->len > 4) {
|
|
||||||
memcpy_ext(priv->adapter,
|
|
||||||
(t_u8 *)&priv->wps.wps_ie,
|
|
||||||
ie_data_ptr, ie_len,
|
|
||||||
sizeof(IEEEtypes_VendorSpecific_t));
|
|
||||||
HEXDUMP("wps_ie", (t_u8 *)&priv->wps.wps_ie,
|
|
||||||
priv->wps.wps_ie.vend_hdr.len + 2);
|
|
||||||
} else {
|
|
||||||
/* Only wps oui exist, reset driver wps buffer
|
|
||||||
*/
|
*/
|
||||||
memset(priv->adapter, (t_u8 *)&priv->wps.wps_ie,
|
ret = wlan_set_wpa_ie_helper(priv, ie_data_ptr,
|
||||||
0x00, sizeof(priv->wps.wps_ie));
|
ie_len);
|
||||||
PRINTM(MINFO, "wps_ie cleared\n");
|
priv->wps.session_enable = MFALSE;
|
||||||
}
|
} else if (pvendor_ie->element_id == WAPI_IE) {
|
||||||
} else {
|
/* IE is a WAPI IE so call set_wapi function */
|
||||||
/*
|
ret = wlan_set_wapi_ie(priv, ie_data_ptr,
|
||||||
* Verify that the passed length is not larger than
|
ie_len);
|
||||||
* the available space remaining in the buffer
|
} else if ((pvendor_ie->element_id ==
|
||||||
*/
|
VENDOR_SPECIFIC_221) &&
|
||||||
if (ie_len <
|
(!memcmp(priv->adapter, pvendor_ie->oui,
|
||||||
(sizeof(priv->gen_ie_buf) - priv->gen_ie_buf_len)) {
|
osen_oui, sizeof(osen_oui)))) {
|
||||||
/* Test to see if it is a WPS IE, if so, enable
|
/* IE is a OSEN IE so call set_osen function */
|
||||||
* wps session flag */
|
ret = wlan_set_osen_ie(priv, ie_data_ptr,
|
||||||
pvendor_ie =
|
ie_len);
|
||||||
(IEEEtypes_VendorHeader_t *)ie_data_ptr;
|
|
||||||
if ((pvendor_ie->element_id == WPS_IE) &&
|
|
||||||
(!memcmp(priv->adapter, pvendor_ie->oui,
|
|
||||||
wps_oui, sizeof(wps_oui)))) {
|
|
||||||
priv->wps.session_enable = MTRUE;
|
|
||||||
PRINTM(MINFO, "WPS Session Enabled.\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Append the passed data to the end of
|
} else if ((pvendor_ie->element_id == WPS_IE) &&
|
||||||
* the genIeBuffer */
|
(priv->wps.session_enable == MFALSE) &&
|
||||||
memcpy_ext(priv->adapter,
|
(!memcmp(priv->adapter, pvendor_ie->oui,
|
||||||
priv->gen_ie_buf +
|
wps_oui, sizeof(wps_oui)))) {
|
||||||
priv->gen_ie_buf_len,
|
/*
|
||||||
ie_data_ptr, ie_len,
|
* Discard first two byte (Element ID and
|
||||||
MRVDRV_GENIE_BUF_SIZE -
|
* Length) because they are not needed in the
|
||||||
priv->gen_ie_buf_len);
|
* case of setting WPS_IE
|
||||||
/* Increment the stored buffer length by
|
*/
|
||||||
* the size passed */
|
if (pvendor_ie->len > 4) {
|
||||||
priv->gen_ie_buf_len += ie_len;
|
memcpy_ext(
|
||||||
|
priv->adapter,
|
||||||
|
(t_u8 *)&priv->wps.wps_ie,
|
||||||
|
ie_data_ptr, ie_len,
|
||||||
|
sizeof(IEEEtypes_VendorSpecific_t));
|
||||||
|
HEXDUMP("wps_ie",
|
||||||
|
(t_u8 *)&priv->wps.wps_ie,
|
||||||
|
priv->wps.wps_ie.vend_hdr.len +
|
||||||
|
2);
|
||||||
|
} else {
|
||||||
|
/* Only wps oui exist, reset driver wps
|
||||||
|
* buffer
|
||||||
|
*/
|
||||||
|
memset(priv->adapter,
|
||||||
|
(t_u8 *)&priv->wps.wps_ie, 0x00,
|
||||||
|
sizeof(priv->wps.wps_ie));
|
||||||
|
PRINTM(MINFO, "wps_ie cleared\n");
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
/* Passed data does not fit in the
|
/*
|
||||||
* remaining buffer space */
|
* Verify that the passed length is not larger
|
||||||
ret = MLAN_STATUS_FAILURE;
|
* than the available space remaining in the
|
||||||
|
* buffer
|
||||||
|
*/
|
||||||
|
if (ie_len < (sizeof(priv->gen_ie_buf) -
|
||||||
|
priv->gen_ie_buf_len)) {
|
||||||
|
/* Test to see if it is a WPS IE, if so,
|
||||||
|
* enable wps session flag */
|
||||||
|
pvendor_ie =
|
||||||
|
(IEEEtypes_VendorHeader_t *)
|
||||||
|
ie_data_ptr;
|
||||||
|
if ((pvendor_ie->element_id ==
|
||||||
|
WPS_IE) &&
|
||||||
|
(!memcmp(priv->adapter,
|
||||||
|
pvendor_ie->oui, wps_oui,
|
||||||
|
sizeof(wps_oui)))) {
|
||||||
|
priv->wps.session_enable =
|
||||||
|
MTRUE;
|
||||||
|
PRINTM(MINFO,
|
||||||
|
"WPS Session Enabled.\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Append the passed data to the end of
|
||||||
|
* the genIeBuffer */
|
||||||
|
memcpy_ext(
|
||||||
|
priv->adapter,
|
||||||
|
priv->gen_ie_buf +
|
||||||
|
priv->gen_ie_buf_len,
|
||||||
|
ie_data_ptr, ie_len,
|
||||||
|
MRVDRV_GENIE_BUF_SIZE -
|
||||||
|
priv->gen_ie_buf_len);
|
||||||
|
/* Increment the stored buffer length by
|
||||||
|
* the size passed */
|
||||||
|
priv->gen_ie_buf_len += ie_len;
|
||||||
|
} else {
|
||||||
|
/* Passed data does not fit in the
|
||||||
|
* remaining buffer space */
|
||||||
|
ret = MLAN_STATUS_FAILURE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return MLAN_STATUS_SUCCESS, or MLAN_STATUS_FAILURE for error case */
|
/* Return MLAN_STATUS_SUCCESS, or MLAN_STATUS_FAILURE for error case */
|
||||||
|
|
|
@ -133,8 +133,9 @@ t_void *wlan_ops_sta_process_txpd(t_void *priv, pmlan_buffer pmbuf)
|
||||||
MLAN_MAC_ADDR_LENGTH, MLAN_MAC_ADDR_LENGTH);
|
MLAN_MAC_ADDR_LENGTH, MLAN_MAC_ADDR_LENGTH);
|
||||||
}
|
}
|
||||||
/* Offset of actual data */
|
/* Offset of actual data */
|
||||||
plocal_tx_pd->tx_pkt_offset = (t_u16)(
|
plocal_tx_pd->tx_pkt_offset =
|
||||||
(t_ptr)pmbuf->pbuf + pmbuf->data_offset - (t_ptr)plocal_tx_pd);
|
(t_u16)((t_ptr)pmbuf->pbuf + pmbuf->data_offset -
|
||||||
|
(t_ptr)plocal_tx_pd);
|
||||||
|
|
||||||
if (!plocal_tx_pd->tx_control) {
|
if (!plocal_tx_pd->tx_control) {
|
||||||
/* TxCtrl set by user or default */
|
/* TxCtrl set by user or default */
|
||||||
|
|
|
@ -380,13 +380,14 @@ t_void wlan_add_buf_bypass_txqueue(mlan_adapter *pmadapter, pmlan_buffer pmbuf)
|
||||||
|
|
||||||
if (pmbuf->buf_type != MLAN_BUF_TYPE_RAW_DATA)
|
if (pmbuf->buf_type != MLAN_BUF_TYPE_RAW_DATA)
|
||||||
pmbuf->buf_type = MLAN_BUF_TYPE_DATA;
|
pmbuf->buf_type = MLAN_BUF_TYPE_DATA;
|
||||||
pmadapter->callbacks.moal_spin_lock(pmadapter->pmoal_handle,
|
util_scalar_increment(pmadapter->pmoal_handle,
|
||||||
priv->bypass_txq.plock);
|
&pmadapter->bypass_pkt_count,
|
||||||
pmadapter->bypass_pkt_count++;
|
pmadapter->callbacks.moal_spin_lock,
|
||||||
|
pmadapter->callbacks.moal_spin_unlock);
|
||||||
util_enqueue_list_tail(pmadapter->pmoal_handle, &priv->bypass_txq,
|
util_enqueue_list_tail(pmadapter->pmoal_handle, &priv->bypass_txq,
|
||||||
(pmlan_linked_list)pmbuf, MNULL, MNULL);
|
(pmlan_linked_list)pmbuf,
|
||||||
pmadapter->callbacks.moal_spin_unlock(pmadapter->pmoal_handle,
|
pmadapter->callbacks.moal_spin_lock,
|
||||||
priv->bypass_txq.plock);
|
pmadapter->callbacks.moal_spin_unlock);
|
||||||
LEAVE();
|
LEAVE();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -399,6 +400,7 @@ t_void wlan_add_buf_bypass_txqueue(mlan_adapter *pmadapter, pmlan_buffer pmbuf)
|
||||||
*/
|
*/
|
||||||
INLINE t_u8 wlan_bypass_tx_list_empty(mlan_adapter *pmadapter)
|
INLINE t_u8 wlan_bypass_tx_list_empty(mlan_adapter *pmadapter)
|
||||||
{
|
{
|
||||||
|
t_u32 bypass_pkt_count;
|
||||||
#if defined(USB)
|
#if defined(USB)
|
||||||
if (IS_USB(pmadapter->card_type)) {
|
if (IS_USB(pmadapter->card_type)) {
|
||||||
pmlan_callbacks pcb = &pmadapter->callbacks;
|
pmlan_callbacks pcb = &pmadapter->callbacks;
|
||||||
|
@ -418,9 +420,14 @@ INLINE t_u8 wlan_bypass_tx_list_empty(mlan_adapter *pmadapter)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return MTRUE;
|
return MTRUE;
|
||||||
} else
|
}
|
||||||
#endif
|
#endif
|
||||||
return (pmadapter->bypass_pkt_count) ? MFALSE : MTRUE;
|
bypass_pkt_count =
|
||||||
|
util_scalar_read(pmadapter->pmoal_handle,
|
||||||
|
&pmadapter->bypass_pkt_count,
|
||||||
|
pmadapter->callbacks.moal_spin_lock,
|
||||||
|
pmadapter->callbacks.moal_spin_unlock);
|
||||||
|
return (bypass_pkt_count) ? MFALSE : MTRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -443,7 +450,10 @@ t_void wlan_cleanup_bypass_txq(mlan_private *priv)
|
||||||
util_unlink_list(pmadapter->pmoal_handle, &priv->bypass_txq,
|
util_unlink_list(pmadapter->pmoal_handle, &priv->bypass_txq,
|
||||||
(pmlan_linked_list)pmbuf, MNULL, MNULL);
|
(pmlan_linked_list)pmbuf, MNULL, MNULL);
|
||||||
wlan_write_data_complete(pmadapter, pmbuf, MLAN_STATUS_FAILURE);
|
wlan_write_data_complete(pmadapter, pmbuf, MLAN_STATUS_FAILURE);
|
||||||
pmadapter->bypass_pkt_count--;
|
util_scalar_decrement(pmadapter->pmoal_handle,
|
||||||
|
&pmadapter->bypass_pkt_count,
|
||||||
|
pmadapter->callbacks.moal_spin_lock,
|
||||||
|
pmadapter->callbacks.moal_spin_unlock);
|
||||||
}
|
}
|
||||||
pmadapter->callbacks.moal_spin_unlock(pmadapter->pmoal_handle,
|
pmadapter->callbacks.moal_spin_unlock(pmadapter->pmoal_handle,
|
||||||
priv->bypass_txq.plock);
|
priv->bypass_txq.plock);
|
||||||
|
@ -480,13 +490,13 @@ t_void wlan_process_bypass_tx(pmlan_adapter pmadapter)
|
||||||
pmadapter->callbacks.moal_spin_lock,
|
pmadapter->callbacks.moal_spin_lock,
|
||||||
pmadapter->callbacks.moal_spin_unlock);
|
pmadapter->callbacks.moal_spin_unlock);
|
||||||
if (pmbuf) {
|
if (pmbuf) {
|
||||||
pmadapter->callbacks.moal_spin_lock(
|
util_scalar_decrement(
|
||||||
pmadapter->pmoal_handle,
|
pmadapter->pmoal_handle,
|
||||||
priv->bypass_txq.plock);
|
&pmadapter->bypass_pkt_count,
|
||||||
pmadapter->bypass_pkt_count--;
|
pmadapter->callbacks
|
||||||
pmadapter->callbacks.moal_spin_unlock(
|
.moal_spin_lock,
|
||||||
pmadapter->pmoal_handle,
|
pmadapter->callbacks
|
||||||
priv->bypass_txq.plock);
|
.moal_spin_unlock);
|
||||||
PRINTM(MINFO,
|
PRINTM(MINFO,
|
||||||
"Dequeuing bypassed packet %p\n",
|
"Dequeuing bypassed packet %p\n",
|
||||||
pmbuf);
|
pmbuf);
|
||||||
|
@ -504,10 +514,14 @@ t_void wlan_process_bypass_tx(pmlan_adapter pmadapter)
|
||||||
/* Queue the packet again so
|
/* Queue the packet again so
|
||||||
* that it will be TX'ed later
|
* that it will be TX'ed later
|
||||||
*/
|
*/
|
||||||
pmadapter->callbacks.moal_spin_lock(
|
util_scalar_increment(
|
||||||
pmadapter->pmoal_handle,
|
pmadapter->pmoal_handle,
|
||||||
priv->bypass_txq.plock);
|
&pmadapter->bypass_pkt_count,
|
||||||
pmadapter->bypass_pkt_count++;
|
pmadapter->callbacks
|
||||||
|
.moal_spin_lock,
|
||||||
|
pmadapter->callbacks
|
||||||
|
.moal_spin_unlock);
|
||||||
|
|
||||||
util_enqueue_list_head(
|
util_enqueue_list_head(
|
||||||
pmadapter->pmoal_handle,
|
pmadapter->pmoal_handle,
|
||||||
&priv->bypass_txq,
|
&priv->bypass_txq,
|
||||||
|
@ -516,9 +530,6 @@ t_void wlan_process_bypass_tx(pmlan_adapter pmadapter)
|
||||||
.moal_spin_lock,
|
.moal_spin_lock,
|
||||||
pmadapter->callbacks
|
pmadapter->callbacks
|
||||||
.moal_spin_unlock);
|
.moal_spin_unlock);
|
||||||
pmadapter->callbacks.moal_spin_unlock(
|
|
||||||
pmadapter->pmoal_handle,
|
|
||||||
priv->bypass_txq.plock);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -208,6 +208,10 @@ static mlan_status uap_process_cmdresp_error(mlan_private *pmpriv,
|
||||||
*/
|
*/
|
||||||
switch (resp->command) {
|
switch (resp->command) {
|
||||||
#ifdef SDIO
|
#ifdef SDIO
|
||||||
|
case HostCmd_CMD_SDIO_SP_RX_AGGR_CFG:
|
||||||
|
pmadapter->pcard_sd->sdio_rx_aggr_enable = MFALSE;
|
||||||
|
PRINTM(MMSG, "FW don't support SDIO single port rx aggr\n");
|
||||||
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
case HostCmd_CMD_APCMD_SYS_CONFIGURE: {
|
case HostCmd_CMD_APCMD_SYS_CONFIGURE: {
|
||||||
|
@ -732,7 +736,7 @@ static mlan_status wlan_uap_cmd_ap_config(pmlan_private pmpriv,
|
||||||
|
|
||||||
cmd->command = wlan_cpu_to_le16(HostCmd_CMD_APCMD_SYS_CONFIGURE);
|
cmd->command = wlan_cpu_to_le16(HostCmd_CMD_APCMD_SYS_CONFIGURE);
|
||||||
sys_config->action = wlan_cpu_to_le16(cmd_action);
|
sys_config->action = wlan_cpu_to_le16(cmd_action);
|
||||||
cmd_size = sizeof(HostCmd_DS_SYS_CONFIG) - 1 + S_DS_GEN;
|
cmd_size = sizeof(HostCmd_DS_SYS_CONFIG) + S_DS_GEN;
|
||||||
|
|
||||||
tlv = (t_u8 *)sys_config->tlv_buffer;
|
tlv = (t_u8 *)sys_config->tlv_buffer;
|
||||||
if (memcmp(pmpriv->adapter, zero_mac, &bss->param.bss_config.mac_addr,
|
if (memcmp(pmpriv->adapter, zero_mac, &bss->param.bss_config.mac_addr,
|
||||||
|
@ -1516,8 +1520,7 @@ static mlan_status wlan_uap_cmd_sys_configure(pmlan_private pmpriv,
|
||||||
|
|
||||||
cmd->command = wlan_cpu_to_le16(HostCmd_CMD_APCMD_SYS_CONFIGURE);
|
cmd->command = wlan_cpu_to_le16(HostCmd_CMD_APCMD_SYS_CONFIGURE);
|
||||||
sys_config->action = wlan_cpu_to_le16(cmd_action);
|
sys_config->action = wlan_cpu_to_le16(cmd_action);
|
||||||
cmd->size =
|
cmd->size = wlan_cpu_to_le16(sizeof(HostCmd_DS_SYS_CONFIG) + S_DS_GEN);
|
||||||
wlan_cpu_to_le16(sizeof(HostCmd_DS_SYS_CONFIG) - 1 + S_DS_GEN);
|
|
||||||
if (pioctl_buf == MNULL) {
|
if (pioctl_buf == MNULL) {
|
||||||
if (pdata_buf) {
|
if (pdata_buf) {
|
||||||
switch (pdata_header->type) {
|
switch (pdata_header->type) {
|
||||||
|
@ -1527,7 +1530,7 @@ static mlan_status wlan_uap_cmd_sys_configure(pmlan_private pmpriv,
|
||||||
chan_band_tlv = (MrvlIEtypes_channel_band_t *)
|
chan_band_tlv = (MrvlIEtypes_channel_band_t *)
|
||||||
sys_config->tlv_buffer;
|
sys_config->tlv_buffer;
|
||||||
cmd->size = wlan_cpu_to_le16(
|
cmd->size = wlan_cpu_to_le16(
|
||||||
sizeof(HostCmd_DS_SYS_CONFIG) - 1 +
|
sizeof(HostCmd_DS_SYS_CONFIG) +
|
||||||
S_DS_GEN +
|
S_DS_GEN +
|
||||||
sizeof(MrvlIEtypes_channel_band_t));
|
sizeof(MrvlIEtypes_channel_band_t));
|
||||||
chan_band_tlv->header.type = wlan_cpu_to_le16(
|
chan_band_tlv->header.type = wlan_cpu_to_le16(
|
||||||
|
@ -1548,7 +1551,7 @@ static mlan_status wlan_uap_cmd_sys_configure(pmlan_private pmpriv,
|
||||||
pdata_buf;
|
pdata_buf;
|
||||||
bcn_pd_tlv = (MrvlIEtypes_beacon_period_t *)
|
bcn_pd_tlv = (MrvlIEtypes_beacon_period_t *)
|
||||||
sys_config->tlv_buffer;
|
sys_config->tlv_buffer;
|
||||||
cmd->size = sizeof(HostCmd_DS_SYS_CONFIG) - 1 +
|
cmd->size = sizeof(HostCmd_DS_SYS_CONFIG) +
|
||||||
S_DS_GEN +
|
S_DS_GEN +
|
||||||
sizeof(MrvlIEtypes_beacon_period_t);
|
sizeof(MrvlIEtypes_beacon_period_t);
|
||||||
bcn_pd_tlv->header.type = wlan_cpu_to_le16(
|
bcn_pd_tlv->header.type = wlan_cpu_to_le16(
|
||||||
|
@ -1597,7 +1600,7 @@ static mlan_status wlan_uap_cmd_sys_configure(pmlan_private pmpriv,
|
||||||
case TLV_TYPE_MGMT_IE:
|
case TLV_TYPE_MGMT_IE:
|
||||||
cust_ie = (mlan_ds_misc_custom_ie *)pdata_buf;
|
cust_ie = (mlan_ds_misc_custom_ie *)pdata_buf;
|
||||||
cmd->size = wlan_cpu_to_le16(
|
cmd->size = wlan_cpu_to_le16(
|
||||||
sizeof(HostCmd_DS_SYS_CONFIG) - 1 +
|
sizeof(HostCmd_DS_SYS_CONFIG) +
|
||||||
S_DS_GEN + sizeof(MrvlIEtypesHeader_t) +
|
S_DS_GEN + sizeof(MrvlIEtypesHeader_t) +
|
||||||
cust_ie->len);
|
cust_ie->len);
|
||||||
ie_header->type =
|
ie_header->type =
|
||||||
|
@ -1663,7 +1666,7 @@ static mlan_status wlan_uap_cmd_sys_configure(pmlan_private pmpriv,
|
||||||
pmpriv, &oper_class_ie,
|
pmpriv, &oper_class_ie,
|
||||||
curr_oper_class);
|
curr_oper_class);
|
||||||
cmd->size = wlan_cpu_to_le16(
|
cmd->size = wlan_cpu_to_le16(
|
||||||
sizeof(HostCmd_DS_SYS_CONFIG) - 1 +
|
sizeof(HostCmd_DS_SYS_CONFIG) +
|
||||||
S_DS_GEN + length);
|
S_DS_GEN + length);
|
||||||
break;
|
break;
|
||||||
case TLV_TYPE_UAP_MAX_STA_CNT_PER_CHIP:
|
case TLV_TYPE_UAP_MAX_STA_CNT_PER_CHIP:
|
||||||
|
@ -1673,7 +1676,7 @@ static mlan_status wlan_uap_cmd_sys_configure(pmlan_private pmpriv,
|
||||||
sizeof(MrvlIEtypes_uap_max_sta_cnt_t),
|
sizeof(MrvlIEtypes_uap_max_sta_cnt_t),
|
||||||
sizeof(MrvlIEtypes_uap_max_sta_cnt_t));
|
sizeof(MrvlIEtypes_uap_max_sta_cnt_t));
|
||||||
cmd->size = wlan_cpu_to_le16(
|
cmd->size = wlan_cpu_to_le16(
|
||||||
sizeof(HostCmd_DS_SYS_CONFIG) - 1 +
|
sizeof(HostCmd_DS_SYS_CONFIG) +
|
||||||
S_DS_GEN +
|
S_DS_GEN +
|
||||||
sizeof(MrvlIEtypes_uap_max_sta_cnt_t));
|
sizeof(MrvlIEtypes_uap_max_sta_cnt_t));
|
||||||
break;
|
break;
|
||||||
|
@ -1688,7 +1691,7 @@ static mlan_status wlan_uap_cmd_sys_configure(pmlan_private pmpriv,
|
||||||
mac_tlv =
|
mac_tlv =
|
||||||
(MrvlIEtypes_MacAddr_t *)sys_config->tlv_buffer;
|
(MrvlIEtypes_MacAddr_t *)sys_config->tlv_buffer;
|
||||||
cmd->size = wlan_cpu_to_le16(
|
cmd->size = wlan_cpu_to_le16(
|
||||||
sizeof(HostCmd_DS_SYS_CONFIG) - 1 + S_DS_GEN +
|
sizeof(HostCmd_DS_SYS_CONFIG) + S_DS_GEN +
|
||||||
sizeof(MrvlIEtypes_MacAddr_t));
|
sizeof(MrvlIEtypes_MacAddr_t));
|
||||||
mac_tlv->header.type =
|
mac_tlv->header.type =
|
||||||
wlan_cpu_to_le16(TLV_TYPE_UAP_MAC_ADDRESS);
|
wlan_cpu_to_le16(TLV_TYPE_UAP_MAC_ADDRESS);
|
||||||
|
@ -1704,7 +1707,7 @@ static mlan_status wlan_uap_cmd_sys_configure(pmlan_private pmpriv,
|
||||||
mac_tlv =
|
mac_tlv =
|
||||||
(MrvlIEtypes_MacAddr_t *)sys_config->tlv_buffer;
|
(MrvlIEtypes_MacAddr_t *)sys_config->tlv_buffer;
|
||||||
cmd->size = wlan_cpu_to_le16(
|
cmd->size = wlan_cpu_to_le16(
|
||||||
sizeof(HostCmd_DS_SYS_CONFIG) - 1 + S_DS_GEN +
|
sizeof(HostCmd_DS_SYS_CONFIG) + S_DS_GEN +
|
||||||
sizeof(MrvlIEtypes_MacAddr_t));
|
sizeof(MrvlIEtypes_MacAddr_t));
|
||||||
mac_tlv->header.type =
|
mac_tlv->header.type =
|
||||||
wlan_cpu_to_le16(TLV_TYPE_UAP_MAC_ADDRESS);
|
wlan_cpu_to_le16(TLV_TYPE_UAP_MAC_ADDRESS);
|
||||||
|
@ -1719,7 +1722,7 @@ static mlan_status wlan_uap_cmd_sys_configure(pmlan_private pmpriv,
|
||||||
tlv_wmm_parameter = (MrvlIEtypes_wmm_parameter_t *)
|
tlv_wmm_parameter = (MrvlIEtypes_wmm_parameter_t *)
|
||||||
sys_config->tlv_buffer;
|
sys_config->tlv_buffer;
|
||||||
cmd->size = wlan_cpu_to_le16(
|
cmd->size = wlan_cpu_to_le16(
|
||||||
sizeof(HostCmd_DS_SYS_CONFIG) - 1 + S_DS_GEN +
|
sizeof(HostCmd_DS_SYS_CONFIG) + S_DS_GEN +
|
||||||
sizeof(MrvlIEtypes_wmm_parameter_t));
|
sizeof(MrvlIEtypes_wmm_parameter_t));
|
||||||
tlv_wmm_parameter->header.type =
|
tlv_wmm_parameter->header.type =
|
||||||
wlan_cpu_to_le16(TLV_TYPE_AP_WMM_PARAM);
|
wlan_cpu_to_le16(TLV_TYPE_AP_WMM_PARAM);
|
||||||
|
@ -1768,7 +1771,7 @@ static mlan_status wlan_uap_cmd_sys_configure(pmlan_private pmpriv,
|
||||||
bss->param.ap_scan_channels.num_of_chan <=
|
bss->param.ap_scan_channels.num_of_chan <=
|
||||||
MLAN_MAX_CHANNEL) {
|
MLAN_MAX_CHANNEL) {
|
||||||
cmd->size = wlan_cpu_to_le16(
|
cmd->size = wlan_cpu_to_le16(
|
||||||
sizeof(HostCmd_DS_SYS_CONFIG) - 1 +
|
sizeof(HostCmd_DS_SYS_CONFIG) +
|
||||||
S_DS_GEN +
|
S_DS_GEN +
|
||||||
sizeof(tlv_chan_list->header) +
|
sizeof(tlv_chan_list->header) +
|
||||||
sizeof(ChanScanParamSet_t) *
|
sizeof(ChanScanParamSet_t) *
|
||||||
|
@ -1801,7 +1804,7 @@ static mlan_status wlan_uap_cmd_sys_configure(pmlan_private pmpriv,
|
||||||
(t_u16)(sizeof(ChanScanParamSet_t) *
|
(t_u16)(sizeof(ChanScanParamSet_t) *
|
||||||
MLAN_MAX_CHANNEL));
|
MLAN_MAX_CHANNEL));
|
||||||
cmd->size = wlan_cpu_to_le16(
|
cmd->size = wlan_cpu_to_le16(
|
||||||
sizeof(HostCmd_DS_SYS_CONFIG) - 1 +
|
sizeof(HostCmd_DS_SYS_CONFIG) +
|
||||||
S_DS_GEN +
|
S_DS_GEN +
|
||||||
sizeof(MrvlIEtypes_ChanListParamSet_t) +
|
sizeof(MrvlIEtypes_ChanListParamSet_t) +
|
||||||
sizeof(ChanScanParamSet_t) *
|
sizeof(ChanScanParamSet_t) *
|
||||||
|
@ -1811,7 +1814,7 @@ static mlan_status wlan_uap_cmd_sys_configure(pmlan_private pmpriv,
|
||||||
chan_band_tlv = (MrvlIEtypes_channel_band_t *)
|
chan_band_tlv = (MrvlIEtypes_channel_band_t *)
|
||||||
sys_config->tlv_buffer;
|
sys_config->tlv_buffer;
|
||||||
cmd->size = wlan_cpu_to_le16(
|
cmd->size = wlan_cpu_to_le16(
|
||||||
sizeof(HostCmd_DS_SYS_CONFIG) - 1 + S_DS_GEN +
|
sizeof(HostCmd_DS_SYS_CONFIG) + S_DS_GEN +
|
||||||
sizeof(MrvlIEtypes_channel_band_t));
|
sizeof(MrvlIEtypes_channel_band_t));
|
||||||
chan_band_tlv->header.type =
|
chan_band_tlv->header.type =
|
||||||
wlan_cpu_to_le16(TLV_TYPE_UAP_CHAN_BAND_CONFIG);
|
wlan_cpu_to_le16(TLV_TYPE_UAP_CHAN_BAND_CONFIG);
|
||||||
|
@ -1829,8 +1832,7 @@ static mlan_status wlan_uap_cmd_sys_configure(pmlan_private pmpriv,
|
||||||
bss->param.ap_channel.channel);
|
bss->param.ap_channel.channel);
|
||||||
}
|
}
|
||||||
} else if (bss->sub_command == MLAN_OID_ACTION_CHAN_SWITCH) {
|
} else if (bss->sub_command == MLAN_OID_ACTION_CHAN_SWITCH) {
|
||||||
cmd->size = sizeof(HostCmd_DS_SYS_CONFIG) - 1 +
|
cmd->size = sizeof(HostCmd_DS_SYS_CONFIG) + S_DS_GEN +
|
||||||
S_DS_GEN +
|
|
||||||
sizeof(MrvlIEtypes_action_chan_switch_t);
|
sizeof(MrvlIEtypes_action_chan_switch_t);
|
||||||
tlv_chan_switch = (MrvlIEtypes_action_chan_switch_t *)
|
tlv_chan_switch = (MrvlIEtypes_action_chan_switch_t *)
|
||||||
sys_config->tlv_buffer;
|
sys_config->tlv_buffer;
|
||||||
|
@ -1889,7 +1891,7 @@ static mlan_status wlan_uap_cmd_sys_configure(pmlan_private pmpriv,
|
||||||
if ((misc->sub_command == MLAN_OID_MISC_GEN_IE) &&
|
if ((misc->sub_command == MLAN_OID_MISC_GEN_IE) &&
|
||||||
(misc->param.gen_ie.type == MLAN_IE_TYPE_GEN_IE)) {
|
(misc->param.gen_ie.type == MLAN_IE_TYPE_GEN_IE)) {
|
||||||
cmd->size = wlan_cpu_to_le16(
|
cmd->size = wlan_cpu_to_le16(
|
||||||
sizeof(HostCmd_DS_SYS_CONFIG) - 1 + S_DS_GEN +
|
sizeof(HostCmd_DS_SYS_CONFIG) + S_DS_GEN +
|
||||||
sizeof(MrvlIEtypesHeader_t) +
|
sizeof(MrvlIEtypesHeader_t) +
|
||||||
misc->param.gen_ie.len);
|
misc->param.gen_ie.len);
|
||||||
ie_header->type = wlan_cpu_to_le16(TLV_TYPE_WAPI_IE);
|
ie_header->type = wlan_cpu_to_le16(TLV_TYPE_WAPI_IE);
|
||||||
|
@ -1904,7 +1906,7 @@ static mlan_status wlan_uap_cmd_sys_configure(pmlan_private pmpriv,
|
||||||
if ((misc->sub_command == MLAN_OID_MISC_CUSTOM_IE) &&
|
if ((misc->sub_command == MLAN_OID_MISC_CUSTOM_IE) &&
|
||||||
(misc->param.cust_ie.type == TLV_TYPE_MGMT_IE)) {
|
(misc->param.cust_ie.type == TLV_TYPE_MGMT_IE)) {
|
||||||
cmd->size = wlan_cpu_to_le16(
|
cmd->size = wlan_cpu_to_le16(
|
||||||
sizeof(HostCmd_DS_SYS_CONFIG) - 1 + S_DS_GEN +
|
sizeof(HostCmd_DS_SYS_CONFIG) + S_DS_GEN +
|
||||||
sizeof(MrvlIEtypesHeader_t) +
|
sizeof(MrvlIEtypesHeader_t) +
|
||||||
misc->param.cust_ie.len);
|
misc->param.cust_ie.len);
|
||||||
ie_header->type = wlan_cpu_to_le16(TLV_TYPE_MGMT_IE);
|
ie_header->type = wlan_cpu_to_le16(TLV_TYPE_MGMT_IE);
|
||||||
|
@ -1961,7 +1963,7 @@ static mlan_status wlan_uap_cmd_sys_configure(pmlan_private pmpriv,
|
||||||
misc->param.wacp_mode;
|
misc->param.wacp_mode;
|
||||||
}
|
}
|
||||||
cmd->size = wlan_cpu_to_le16(
|
cmd->size = wlan_cpu_to_le16(
|
||||||
sizeof(HostCmd_DS_SYS_CONFIG) - 1 + S_DS_GEN +
|
sizeof(HostCmd_DS_SYS_CONFIG) + S_DS_GEN +
|
||||||
sizeof(MrvlIEtypes_wacp_mode_t));
|
sizeof(MrvlIEtypes_wacp_mode_t));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2043,8 +2045,7 @@ static mlan_status wlan_uap_ret_cmd_ap_config(pmlan_private pmpriv,
|
||||||
|
|
||||||
bss = (mlan_ds_bss *)pioctl_buf->pbuf;
|
bss = (mlan_ds_bss *)pioctl_buf->pbuf;
|
||||||
tlv = (MrvlIEtypesHeader_t *)sys_config->tlv_buffer;
|
tlv = (MrvlIEtypesHeader_t *)sys_config->tlv_buffer;
|
||||||
tlv_buf_left =
|
tlv_buf_left = resp->size - (sizeof(HostCmd_DS_SYS_CONFIG) + S_DS_GEN);
|
||||||
resp->size - (sizeof(HostCmd_DS_SYS_CONFIG) - 1 + S_DS_GEN);
|
|
||||||
|
|
||||||
while (tlv_buf_left >= sizeof(MrvlIEtypesHeader_t)) {
|
while (tlv_buf_left >= sizeof(MrvlIEtypesHeader_t)) {
|
||||||
tlv_type = wlan_le16_to_cpu(tlv->type);
|
tlv_type = wlan_le16_to_cpu(tlv->type);
|
||||||
|
@ -4603,11 +4604,11 @@ static mlan_status wlan_cmd_stats(pmlan_private pmpriv, HostCmd_DS_COMMAND *cmd,
|
||||||
|
|
||||||
ENTER();
|
ENTER();
|
||||||
cmd->command = wlan_cpu_to_le16(HostCmd_CMD_802_11_STATS);
|
cmd->command = wlan_cpu_to_le16(HostCmd_CMD_802_11_STATS);
|
||||||
cmd->size = wlan_cpu_to_le16(sizeof(HostCmd_DS_STATS) + S_DS_GEN);
|
|
||||||
if (cmd_action) {
|
if (cmd_action) {
|
||||||
cmd->size =
|
cmd->size =
|
||||||
wlan_cpu_to_le16(sizeof(HostCmd_DS_STATS) + S_DS_GEN +
|
wlan_cpu_to_le16(sizeof(HostCmd_DS_STATS) + S_DS_GEN +
|
||||||
sizeof(Stats_Cfg_Params_TLV_t) - 1);
|
sizeof(Stats_Cfg_Params_TLV_t));
|
||||||
stats_cmd->action = wlan_cpu_to_le16(HostCmd_ACT_GEN_SET);
|
stats_cmd->action = wlan_cpu_to_le16(HostCmd_ACT_GEN_SET);
|
||||||
|
|
||||||
stats_param = (Stats_Cfg_Params_TLV_t *)stats->tlv_buf;
|
stats_param = (Stats_Cfg_Params_TLV_t *)stats->tlv_buf;
|
||||||
|
@ -4615,7 +4616,15 @@ static mlan_status wlan_cmd_stats(pmlan_private pmpriv, HostCmd_DS_COMMAND *cmd,
|
||||||
NXP_802_11_PER_PEER_STATS_CFG_TLV_ID) {
|
NXP_802_11_PER_PEER_STATS_CFG_TLV_ID) {
|
||||||
cfg_param =
|
cfg_param =
|
||||||
(Stats_Cfg_Params_TLV_t *)stats_cmd->tlv_buffer;
|
(Stats_Cfg_Params_TLV_t *)stats_cmd->tlv_buffer;
|
||||||
*cfg_param = *stats_param;
|
cfg_param->tlvHeader.type =
|
||||||
|
wlan_cpu_to_le16(stats_param->tlvHeader.type);
|
||||||
|
cfg_param->tlvHeader.len = wlan_cpu_to_le16(
|
||||||
|
sizeof(Stats_Cfg_Params_TLV_t) -
|
||||||
|
sizeof(MrvlIEtypesHeader_t));
|
||||||
|
cfg_param->op = stats_param->op;
|
||||||
|
memcpy_ext(pmpriv->adapter, cfg_param->mac,
|
||||||
|
stats_param->mac, MLAN_MAC_ADDR_LENGTH,
|
||||||
|
MLAN_MAC_ADDR_LENGTH);
|
||||||
}
|
}
|
||||||
/* To identify the reset operation */
|
/* To identify the reset operation */
|
||||||
if (stats_param->op == OP_RESET) {
|
if (stats_param->op == OP_RESET) {
|
||||||
|
@ -4660,7 +4669,7 @@ static mlan_status wlan_ret_stats(pmlan_private pmpriv,
|
||||||
(t_u8 *)&misc_cfg->param.stats.tlv_buf, pBuf, len,
|
(t_u8 *)&misc_cfg->param.stats.tlv_buf, pBuf, len,
|
||||||
len);
|
len);
|
||||||
misc_cfg->param.stats.tlv_len = len;
|
misc_cfg->param.stats.tlv_len = len;
|
||||||
pioctl_buf->buf_len = sizeof(mlan_ds_stats) + len - 1;
|
pioctl_buf->buf_len = sizeof(mlan_ds_stats) + len;
|
||||||
|
|
||||||
stats_param =
|
stats_param =
|
||||||
(Stats_Cfg_Params_TLV_t *)misc_cfg->param.stats.tlv_buf;
|
(Stats_Cfg_Params_TLV_t *)misc_cfg->param.stats.tlv_buf;
|
||||||
|
@ -4682,7 +4691,7 @@ static mlan_status wlan_ret_stats(pmlan_private pmpriv,
|
||||||
len + sizeof(Stats_mcast_drv_t);
|
len + sizeof(Stats_mcast_drv_t);
|
||||||
|
|
||||||
pioctl_buf->buf_len = sizeof(mlan_ds_stats) + len +
|
pioctl_buf->buf_len = sizeof(mlan_ds_stats) + len +
|
||||||
sizeof(Stats_mcast_drv_t) - 1;
|
sizeof(Stats_mcast_drv_t);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4796,6 +4805,9 @@ mlan_status wlan_ops_uap_prepare_cmd(t_void *priv, t_u16 cmd_no,
|
||||||
ret = wlan_cmd_get_hw_spec(pmpriv, cmd_ptr);
|
ret = wlan_cmd_get_hw_spec(pmpriv, cmd_ptr);
|
||||||
break;
|
break;
|
||||||
#ifdef SDIO
|
#ifdef SDIO
|
||||||
|
case HostCmd_CMD_SDIO_SP_RX_AGGR_CFG:
|
||||||
|
ret = wlan_cmd_sdio_rx_aggr_cfg(cmd_ptr, cmd_action, pdata_buf);
|
||||||
|
break;
|
||||||
#endif
|
#endif
|
||||||
case HostCmd_CMD_802_11_HS_CFG_ENH:
|
case HostCmd_CMD_802_11_HS_CFG_ENH:
|
||||||
ret = wlan_uap_cmd_802_11_hs_cfg(pmpriv, cmd_ptr, cmd_action,
|
ret = wlan_uap_cmd_802_11_hs_cfg(pmpriv, cmd_ptr, cmd_action,
|
||||||
|
@ -5262,6 +5274,9 @@ mlan_status wlan_ops_uap_process_cmdresp(t_void *priv, t_u16 cmdresp_no,
|
||||||
ret = wlan_ret_get_hw_spec(pmpriv, resp, pioctl_buf);
|
ret = wlan_ret_get_hw_spec(pmpriv, resp, pioctl_buf);
|
||||||
break;
|
break;
|
||||||
#ifdef SDIO
|
#ifdef SDIO
|
||||||
|
case HostCmd_CMD_SDIO_SP_RX_AGGR_CFG:
|
||||||
|
ret = wlan_ret_sdio_rx_aggr_cfg(pmpriv, resp);
|
||||||
|
break;
|
||||||
#endif
|
#endif
|
||||||
case HostCmd_CMD_CFG_DATA:
|
case HostCmd_CMD_CFG_DATA:
|
||||||
ret = wlan_ret_cfg_data(pmpriv, resp, pioctl_buf);
|
ret = wlan_ret_cfg_data(pmpriv, resp, pioctl_buf);
|
||||||
|
|
|
@ -234,8 +234,9 @@ t_void *wlan_ops_uap_process_txpd(t_void *priv, pmlan_buffer pmbuf)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Offset of actual data */
|
/* Offset of actual data */
|
||||||
plocal_tx_pd->tx_pkt_offset = (t_u16)(
|
plocal_tx_pd->tx_pkt_offset =
|
||||||
(t_ptr)pmbuf->pbuf + pmbuf->data_offset - (t_ptr)plocal_tx_pd);
|
(t_u16)((t_ptr)pmbuf->pbuf + pmbuf->data_offset -
|
||||||
|
(t_ptr)plocal_tx_pd);
|
||||||
|
|
||||||
if (!plocal_tx_pd->tx_control) {
|
if (!plocal_tx_pd->tx_control) {
|
||||||
/* TxCtrl set by user or default */
|
/* TxCtrl set by user or default */
|
||||||
|
|
|
@ -110,6 +110,17 @@ static const struct _mlan_card_info mlan_card_info_usbIW624 = {
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef USBIW615
|
||||||
|
static const struct _mlan_card_info mlan_card_info_usbIW615 = {
|
||||||
|
.max_tx_buf_size = MLAN_TX_DATA_BUF_SIZE_4K,
|
||||||
|
.v16_fw_api = 1,
|
||||||
|
.v17_fw_api = 1,
|
||||||
|
.supp_ps_handshake = 1,
|
||||||
|
.default_11n_tx_bf_cap = DEFAULT_11N_TX_BF_CAP_2X2,
|
||||||
|
.support_11mc = 1,
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
/********************************************************
|
/********************************************************
|
||||||
Global Variables
|
Global Variables
|
||||||
********************************************************/
|
********************************************************/
|
||||||
|
@ -492,11 +503,11 @@ static int wlan_usb_deaggr_rx_num_pkts(pmlan_adapter pmadapter, t_u8 *pdata,
|
||||||
static inline t_u32 usb_tx_aggr_pad_len(t_u32 len,
|
static inline t_u32 usb_tx_aggr_pad_len(t_u32 len,
|
||||||
usb_tx_aggr_params *pusb_tx_aggr)
|
usb_tx_aggr_params *pusb_tx_aggr)
|
||||||
{
|
{
|
||||||
return (t_u32)(
|
return (t_u32)((len % pusb_tx_aggr->aggr_ctrl.aggr_align) ?
|
||||||
(len % pusb_tx_aggr->aggr_ctrl.aggr_align) ?
|
(len +
|
||||||
(len + (pusb_tx_aggr->aggr_ctrl.aggr_align -
|
(pusb_tx_aggr->aggr_ctrl.aggr_align -
|
||||||
(len % pusb_tx_aggr->aggr_ctrl.aggr_align))) :
|
(len % pusb_tx_aggr->aggr_ctrl.aggr_align))) :
|
||||||
len);
|
len);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -816,6 +827,11 @@ mlan_status wlan_get_usb_device(pmlan_adapter pmadapter)
|
||||||
case CARD_TYPE_USBIW624:
|
case CARD_TYPE_USBIW624:
|
||||||
pmadapter->pcard_info = &mlan_card_info_usbIW624;
|
pmadapter->pcard_info = &mlan_card_info_usbIW624;
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef USBIW615
|
||||||
|
case CARD_TYPE_USBIW615:
|
||||||
|
pmadapter->pcard_info = &mlan_card_info_usbIW615;
|
||||||
|
break;
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
PRINTM(MERROR, "can't get right USB card type \n");
|
PRINTM(MERROR, "can't get right USB card type \n");
|
||||||
|
|
|
@ -2296,11 +2296,11 @@ mlan_status wlan_ret_wmm_get_status(pmlan_private priv, t_u8 *ptlv,
|
||||||
case TLV_TYPE_WMMQSTATUS:
|
case TLV_TYPE_WMMQSTATUS:
|
||||||
ptlv_wmm_q_status =
|
ptlv_wmm_q_status =
|
||||||
(MrvlIEtypes_WmmQueueStatus_t *)ptlv_hdr;
|
(MrvlIEtypes_WmmQueueStatus_t *)ptlv_hdr;
|
||||||
PRINTM(MEVENT, "WMM_STATUS: QSTATUS TLV: %d\n",
|
PRINTM(MEVENT, "WMM_STATUS: QSTATUS TLV: %u\n",
|
||||||
ptlv_wmm_q_status->queue_index);
|
ptlv_wmm_q_status->queue_index);
|
||||||
|
|
||||||
PRINTM(MINFO,
|
PRINTM(MINFO,
|
||||||
"CMD_RESP: WMM_GET_STATUS: QSTATUS TLV: %d, %d, %d\n",
|
"CMD_RESP: WMM_GET_STATUS: QSTATUS TLV: %u, %d, %d\n",
|
||||||
ptlv_wmm_q_status->queue_index,
|
ptlv_wmm_q_status->queue_index,
|
||||||
ptlv_wmm_q_status->flow_required,
|
ptlv_wmm_q_status->flow_required,
|
||||||
ptlv_wmm_q_status->disabled);
|
ptlv_wmm_q_status->disabled);
|
||||||
|
@ -2309,15 +2309,17 @@ mlan_status wlan_ret_wmm_get_status(pmlan_private priv, t_u8 *ptlv,
|
||||||
* bounds */
|
* bounds */
|
||||||
ptlv_wmm_q_status->queue_index = MIN(
|
ptlv_wmm_q_status->queue_index = MIN(
|
||||||
ptlv_wmm_q_status->queue_index, MAX_AC_QUEUES);
|
ptlv_wmm_q_status->queue_index, MAX_AC_QUEUES);
|
||||||
|
if (ptlv_wmm_q_status->queue_index < MAX_AC_QUEUES) {
|
||||||
pac_status =
|
pac_status =
|
||||||
&priv->wmm.ac_status[ptlv_wmm_q_status
|
&priv->wmm.ac_status
|
||||||
->queue_index];
|
[ptlv_wmm_q_status->queue_index];
|
||||||
pac_status->disabled = ptlv_wmm_q_status->disabled;
|
pac_status->disabled =
|
||||||
pac_status->flow_required =
|
ptlv_wmm_q_status->disabled;
|
||||||
ptlv_wmm_q_status->flow_required;
|
pac_status->flow_required =
|
||||||
pac_status->flow_created =
|
ptlv_wmm_q_status->flow_required;
|
||||||
ptlv_wmm_q_status->flow_created;
|
pac_status->flow_created =
|
||||||
|
ptlv_wmm_q_status->flow_created;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TLV_TYPE_VENDOR_SPECIFIC_IE: /* WMM_IE */
|
case TLV_TYPE_VENDOR_SPECIFIC_IE: /* WMM_IE */
|
||||||
|
|
|
@ -278,7 +278,14 @@ typedef t_s32 t_sval;
|
||||||
|
|
||||||
#ifdef PCIE
|
#ifdef PCIE
|
||||||
/* Interrupt type */
|
/* Interrupt type */
|
||||||
enum { RX_DATA, RX_EVENT, TX_COMPLETE, RX_CMD_RESP, RX_CMD_DNLD };
|
enum {
|
||||||
|
RX_DATA,
|
||||||
|
RX_EVENT,
|
||||||
|
TX_COMPLETE,
|
||||||
|
RX_CMD_RESP,
|
||||||
|
RX_CMD_DNLD,
|
||||||
|
RX_DATA_DELAY
|
||||||
|
};
|
||||||
#endif
|
#endif
|
||||||
#ifdef USB
|
#ifdef USB
|
||||||
#define MLAN_USB_BLOCK_SIZE (512)
|
#define MLAN_USB_BLOCK_SIZE (512)
|
||||||
|
@ -388,6 +395,8 @@ typedef t_u8 mlan_802_11_mac_addr[MLAN_MAC_ADDR_LENGTH];
|
||||||
#define CARD_TYPE_IW624 0x0b
|
#define CARD_TYPE_IW624 0x0b
|
||||||
/** Black bird card type */
|
/** Black bird card type */
|
||||||
#define CARD_TYPE_AW693 0x0c
|
#define CARD_TYPE_AW693 0x0c
|
||||||
|
/** IW615 card type */
|
||||||
|
#define CARD_TYPE_IW615 0x0c
|
||||||
|
|
||||||
/** 9098 A0 reverion num */
|
/** 9098 A0 reverion num */
|
||||||
#define CHIP_9098_REV_A0 1
|
#define CHIP_9098_REV_A0 1
|
||||||
|
@ -423,6 +432,8 @@ typedef t_u8 mlan_802_11_mac_addr[MLAN_MAC_ADDR_LENGTH];
|
||||||
#define CARD_TYPE_SDIW624 (CARD_TYPE_IW624 | (INTF_SD << 8))
|
#define CARD_TYPE_SDIW624 (CARD_TYPE_IW624 | (INTF_SD << 8))
|
||||||
/** SD_IW624 card type */
|
/** SD_IW624 card type */
|
||||||
#define CARD_TYPE_SDAW693 (CARD_TYPE_AW693 | (INTF_SD << 8))
|
#define CARD_TYPE_SDAW693 (CARD_TYPE_AW693 | (INTF_SD << 8))
|
||||||
|
/** SD_IW615 card type */
|
||||||
|
#define CARD_TYPE_SDIW615 (CARD_TYPE_IW615 | (INTF_SD << 8))
|
||||||
|
|
||||||
#define IS_SD8887(ct) (CARD_TYPE_SD8887 == (ct))
|
#define IS_SD8887(ct) (CARD_TYPE_SD8887 == (ct))
|
||||||
#define IS_SD8897(ct) (CARD_TYPE_SD8897 == (ct))
|
#define IS_SD8897(ct) (CARD_TYPE_SD8897 == (ct))
|
||||||
|
@ -436,6 +447,7 @@ typedef t_u8 mlan_802_11_mac_addr[MLAN_MAC_ADDR_LENGTH];
|
||||||
#define IS_SD8801(ct) (CARD_TYPE_SD8801 == (ct))
|
#define IS_SD8801(ct) (CARD_TYPE_SD8801 == (ct))
|
||||||
#define IS_SDIW624(ct) (CARD_TYPE_SDIW624 == (ct))
|
#define IS_SDIW624(ct) (CARD_TYPE_SDIW624 == (ct))
|
||||||
#define IS_SDAW693(ct) (CARD_TYPE_SDAW693 == (ct))
|
#define IS_SDAW693(ct) (CARD_TYPE_SDAW693 == (ct))
|
||||||
|
#define IS_SDIW615(ct) (CARD_TYPE_SDIW615 == (ct))
|
||||||
|
|
||||||
/** SD8887 Card */
|
/** SD8887 Card */
|
||||||
#define CARD_SD8887 "SD8887"
|
#define CARD_SD8887 "SD8887"
|
||||||
|
@ -461,6 +473,8 @@ typedef t_u8 mlan_802_11_mac_addr[MLAN_MAC_ADDR_LENGTH];
|
||||||
#define CARD_SDIW624 "SDIW624"
|
#define CARD_SDIW624 "SDIW624"
|
||||||
/** SDAW693 Card */
|
/** SDAW693 Card */
|
||||||
#define CARD_SDAW693 "SDAW693"
|
#define CARD_SDAW693 "SDAW693"
|
||||||
|
/** SDIW615 Card */
|
||||||
|
#define CARD_SDIW615 "SDIW615"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PCIE
|
#ifdef PCIE
|
||||||
|
@ -519,6 +533,8 @@ typedef t_u8 mlan_802_11_mac_addr[MLAN_MAC_ADDR_LENGTH];
|
||||||
#define CARD_TYPE_USB9097 (CARD_TYPE_9097 | (INTF_USB << 8))
|
#define CARD_TYPE_USB9097 (CARD_TYPE_9097 | (INTF_USB << 8))
|
||||||
/** USBIW624 card type */
|
/** USBIW624 card type */
|
||||||
#define CARD_TYPE_USBIW624 (CARD_TYPE_IW624 | (INTF_USB << 8))
|
#define CARD_TYPE_USBIW624 (CARD_TYPE_IW624 | (INTF_USB << 8))
|
||||||
|
/** USBIW615 card type */
|
||||||
|
#define CARD_TYPE_USBIW615 (CARD_TYPE_IW615 | (INTF_USB << 8))
|
||||||
|
|
||||||
#define IS_USB8801(ct) (CARD_TYPE_USB8801 == (ct))
|
#define IS_USB8801(ct) (CARD_TYPE_USB8801 == (ct))
|
||||||
#define IS_USB8897(ct) (CARD_TYPE_USB8897 == (ct))
|
#define IS_USB8897(ct) (CARD_TYPE_USB8897 == (ct))
|
||||||
|
@ -527,6 +543,7 @@ typedef t_u8 mlan_802_11_mac_addr[MLAN_MAC_ADDR_LENGTH];
|
||||||
#define IS_USB9098(ct) (CARD_TYPE_USB9098 == (ct))
|
#define IS_USB9098(ct) (CARD_TYPE_USB9098 == (ct))
|
||||||
#define IS_USB9097(ct) (CARD_TYPE_USB9097 == (ct))
|
#define IS_USB9097(ct) (CARD_TYPE_USB9097 == (ct))
|
||||||
#define IS_USBIW624(ct) (CARD_TYPE_USBIW624 == (ct))
|
#define IS_USBIW624(ct) (CARD_TYPE_USBIW624 == (ct))
|
||||||
|
#define IS_USBIW615(ct) (CARD_TYPE_USBIW615 == (ct))
|
||||||
|
|
||||||
/** USB8801 Card */
|
/** USB8801 Card */
|
||||||
#define CARD_USB8801 "USB8801"
|
#define CARD_USB8801 "USB8801"
|
||||||
|
@ -542,6 +559,8 @@ typedef t_u8 mlan_802_11_mac_addr[MLAN_MAC_ADDR_LENGTH];
|
||||||
#define CARD_USB9097 "USBIW620"
|
#define CARD_USB9097 "USBIW620"
|
||||||
/** USBIW624 Card */
|
/** USBIW624 Card */
|
||||||
#define CARD_USBIW624 "USBIW624"
|
#define CARD_USBIW624 "USBIW624"
|
||||||
|
/** USBIW615 Card */
|
||||||
|
#define CARD_USBIW615 "USBIW615"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define IS_CARD8801(ct) (CARD_TYPE_8801 == ((ct)&0xf))
|
#define IS_CARD8801(ct) (CARD_TYPE_8801 == ((ct)&0xf))
|
||||||
|
@ -555,6 +574,7 @@ typedef t_u8 mlan_802_11_mac_addr[MLAN_MAC_ADDR_LENGTH];
|
||||||
#define IS_CARD9177(ct) (CARD_TYPE_9177 == ((ct)&0xf))
|
#define IS_CARD9177(ct) (CARD_TYPE_9177 == ((ct)&0xf))
|
||||||
#define IS_CARDIW624(ct) (CARD_TYPE_IW624 == ((ct)&0xf))
|
#define IS_CARDIW624(ct) (CARD_TYPE_IW624 == ((ct)&0xf))
|
||||||
#define IS_CARDAW693(ct) (CARD_TYPE_AW693 == ((ct)&0xf))
|
#define IS_CARDAW693(ct) (CARD_TYPE_AW693 == ((ct)&0xf))
|
||||||
|
#define IS_CARDIW615(ct) (CARD_TYPE_IW615 == ((ct)&0xf))
|
||||||
|
|
||||||
typedef struct _card_type_entry {
|
typedef struct _card_type_entry {
|
||||||
t_u16 card_type;
|
t_u16 card_type;
|
||||||
|
@ -714,6 +734,7 @@ typedef enum _mlan_buf_type {
|
||||||
MLAN_BUF_TYPE_EVENT,
|
MLAN_BUF_TYPE_EVENT,
|
||||||
MLAN_BUF_TYPE_RAW_DATA,
|
MLAN_BUF_TYPE_RAW_DATA,
|
||||||
#ifdef SDIO
|
#ifdef SDIO
|
||||||
|
MLAN_BUF_TYPE_SPA_DATA,
|
||||||
#endif
|
#endif
|
||||||
} mlan_buf_type;
|
} mlan_buf_type;
|
||||||
|
|
||||||
|
@ -945,29 +966,34 @@ enum mlan_channel_type {
|
||||||
};
|
};
|
||||||
|
|
||||||
/** channel band */
|
/** channel band */
|
||||||
enum { BAND_2GHZ = 0,
|
enum {
|
||||||
BAND_5GHZ = 1,
|
BAND_2GHZ = 0,
|
||||||
BAND_6GHZ = 2,
|
BAND_5GHZ = 1,
|
||||||
BAND_4GHZ = 3,
|
BAND_6GHZ = 2,
|
||||||
|
BAND_4GHZ = 3,
|
||||||
};
|
};
|
||||||
|
|
||||||
/** channel offset */
|
/** channel offset */
|
||||||
enum { SEC_CHAN_NONE = 0,
|
enum {
|
||||||
SEC_CHAN_ABOVE = 1,
|
SEC_CHAN_NONE = 0,
|
||||||
SEC_CHAN_5MHZ = 2,
|
SEC_CHAN_ABOVE = 1,
|
||||||
SEC_CHAN_BELOW = 3 };
|
SEC_CHAN_5MHZ = 2,
|
||||||
|
SEC_CHAN_BELOW = 3
|
||||||
|
};
|
||||||
|
|
||||||
/** channel bandwidth */
|
/** channel bandwidth */
|
||||||
enum { CHAN_BW_20MHZ = 0,
|
enum {
|
||||||
CHAN_BW_10MHZ,
|
CHAN_BW_20MHZ = 0,
|
||||||
CHAN_BW_40MHZ,
|
CHAN_BW_10MHZ,
|
||||||
CHAN_BW_80MHZ,
|
CHAN_BW_40MHZ,
|
||||||
|
CHAN_BW_80MHZ,
|
||||||
};
|
};
|
||||||
|
|
||||||
/** scan mode */
|
/** scan mode */
|
||||||
enum { SCAN_MODE_MANUAL = 0,
|
enum {
|
||||||
SCAN_MODE_ACS,
|
SCAN_MODE_MANUAL = 0,
|
||||||
SCAN_MODE_USER,
|
SCAN_MODE_ACS,
|
||||||
|
SCAN_MODE_USER,
|
||||||
};
|
};
|
||||||
|
|
||||||
/** DFS state */
|
/** DFS state */
|
||||||
|
@ -2646,6 +2672,8 @@ typedef struct _mlan_device {
|
||||||
/** SDIO MPA Rx */
|
/** SDIO MPA Rx */
|
||||||
t_u32 mpa_rx_cfg;
|
t_u32 mpa_rx_cfg;
|
||||||
#ifdef SDIO
|
#ifdef SDIO
|
||||||
|
/** SDIO Single port rx aggr */
|
||||||
|
t_u8 sdio_rx_aggr_enable;
|
||||||
/* see blk_queue_max_segment_size */
|
/* see blk_queue_max_segment_size */
|
||||||
t_u32 max_seg_size;
|
t_u32 max_seg_size;
|
||||||
/* see blk_queue_max_segments */
|
/* see blk_queue_max_segments */
|
||||||
|
|
|
@ -2410,6 +2410,8 @@ typedef struct _mlan_debug_info {
|
||||||
t_u32 last_int_status;
|
t_u32 last_int_status;
|
||||||
/** number of interrupt receive */
|
/** number of interrupt receive */
|
||||||
t_u32 num_of_irq;
|
t_u32 num_of_irq;
|
||||||
|
/** flag for sdio rx aggr */
|
||||||
|
t_u8 sdio_rx_aggr;
|
||||||
/** FW update port number */
|
/** FW update port number */
|
||||||
t_u32 mp_update[SDIO_MP_AGGR_DEF_PKT_LIMIT_MAX * 2];
|
t_u32 mp_update[SDIO_MP_AGGR_DEF_PKT_LIMIT_MAX * 2];
|
||||||
/** Invalid port update count */
|
/** Invalid port update count */
|
||||||
|
@ -4280,12 +4282,13 @@ enum _mlan_reg_type {
|
||||||
#if defined(PCIE9098) || defined(SD9098) || defined(USB9098) || \
|
#if defined(PCIE9098) || defined(SD9098) || defined(USB9098) || \
|
||||||
defined(PCIE9097) || defined(USB9097) || defined(SDIW624) || \
|
defined(PCIE9097) || defined(USB9097) || defined(SDIW624) || \
|
||||||
defined(PCIEIW624) || defined(USBIW624) || defined(SD9097) || \
|
defined(PCIEIW624) || defined(USBIW624) || defined(SD9097) || \
|
||||||
defined(SD9177)
|
defined(SD9177) || defined(SDIW615) || defined(USBIW615)
|
||||||
MLAN_REG_CIU = 8,
|
MLAN_REG_CIU = 8,
|
||||||
#endif
|
#endif
|
||||||
#if defined(PCIE9098) || defined(SD9098) || defined(USB9098) || \
|
#if defined(PCIE9098) || defined(SD9098) || defined(USB9098) || \
|
||||||
defined(PCIE9097) || defined(USB9097) || defined(SDIW624) || \
|
defined(PCIE9097) || defined(USB9097) || defined(SDIW624) || \
|
||||||
defined(PCIEIW624) || defined(USBIW624) || defined(SD9097)
|
defined(PCIEIW624) || defined(USBIW624) || defined(SD9097) || \
|
||||||
|
defined(SDIW615) || defined(USBIW615)
|
||||||
MLAN_REG_MAC2 = 0x81,
|
MLAN_REG_MAC2 = 0x81,
|
||||||
MLAN_REG_BBP2 = 0x82,
|
MLAN_REG_BBP2 = 0x82,
|
||||||
MLAN_REG_RF2 = 0x83,
|
MLAN_REG_RF2 = 0x83,
|
||||||
|
@ -6122,7 +6125,7 @@ typedef struct _mlan_ds_stats {
|
||||||
/** tlv len */
|
/** tlv len */
|
||||||
t_u16 tlv_len;
|
t_u16 tlv_len;
|
||||||
/** TLV buffer */
|
/** TLV buffer */
|
||||||
t_u8 tlv_buf[1];
|
t_u8 tlv_buf[];
|
||||||
} mlan_ds_stats;
|
} mlan_ds_stats;
|
||||||
|
|
||||||
typedef struct _mlan_ds_ch_load {
|
typedef struct _mlan_ds_ch_load {
|
||||||
|
|
|
@ -5037,10 +5037,12 @@ void woal_cfg80211_free_bands(struct wiphy *wiphy)
|
||||||
*
|
*
|
||||||
* @param priv A pointer moal_private structure
|
* @param priv A pointer moal_private structure
|
||||||
* @param reason_code disconnect reason code
|
* @param reason_code disconnect reason code
|
||||||
|
* @param bssid A pointer to bssid
|
||||||
|
*
|
||||||
*
|
*
|
||||||
* @return N/A
|
* @return N/A
|
||||||
*/
|
*/
|
||||||
void woal_deauth_event(moal_private *priv, int reason_code)
|
void woal_deauth_event(moal_private *priv, int reason_code, u8 *bssid)
|
||||||
{
|
{
|
||||||
struct woal_event *evt;
|
struct woal_event *evt;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
@ -5054,7 +5056,9 @@ void woal_deauth_event(moal_private *priv, int reason_code)
|
||||||
}
|
}
|
||||||
evt->priv = priv;
|
evt->priv = priv;
|
||||||
evt->type = WOAL_EVENT_DEAUTH;
|
evt->type = WOAL_EVENT_DEAUTH;
|
||||||
evt->reason_code = reason_code;
|
evt->deauth_info.reason_code = reason_code;
|
||||||
|
moal_memcpy_ext(priv->phandle, evt->deauth_info.mac_addr, bssid,
|
||||||
|
MLAN_MAC_ADDR_LENGTH, MLAN_MAC_ADDR_LENGTH);
|
||||||
INIT_LIST_HEAD(&evt->link);
|
INIT_LIST_HEAD(&evt->link);
|
||||||
spin_lock_irqsave(&handle->evt_lock, flags);
|
spin_lock_irqsave(&handle->evt_lock, flags);
|
||||||
list_add_tail(&evt->link, &handle->evt_queue);
|
list_add_tail(&evt->link, &handle->evt_queue);
|
||||||
|
|
|
@ -507,7 +507,7 @@ void woal_cfg80211_notify_antcfg(moal_private *priv, struct wiphy *wiphy,
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if CFG80211_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
|
#if CFG80211_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
|
||||||
void woal_deauth_event(moal_private *priv, int reason_code);
|
void woal_deauth_event(moal_private *priv, int reason_code, u8 *bssid);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if KERNEL_VERSION(3, 8, 0) <= CFG80211_VERSION_CODE
|
#if KERNEL_VERSION(3, 8, 0) <= CFG80211_VERSION_CODE
|
||||||
|
|
|
@ -2940,8 +2940,8 @@ static int woal_cfg80211_subcmd_link_statistic_get(struct wiphy *wiphy,
|
||||||
ioctl_link_stats_buf = info->param.link_statistic;
|
ioctl_link_stats_buf = info->param.link_statistic;
|
||||||
num_radio = *((t_u32 *)info->param.link_statistic);
|
num_radio = *((t_u32 *)info->param.link_statistic);
|
||||||
|
|
||||||
radio_stat = (wifi_radio_stat *)(info->param.link_statistic +
|
radio_stat =
|
||||||
sizeof(num_radio));
|
(wifi_radio_stat *)(ioctl_link_stats_buf + sizeof(num_radio));
|
||||||
radio_stat_len = num_radio * sizeof(wifi_radio_stat);
|
radio_stat_len = num_radio * sizeof(wifi_radio_stat);
|
||||||
|
|
||||||
/* Re-write on_time/tx_time/rx_time/on_time_scan from moal handle */
|
/* Re-write on_time/tx_time/rx_time/on_time_scan from moal handle */
|
||||||
|
@ -2977,8 +2977,9 @@ static int woal_cfg80211_subcmd_link_statistic_get(struct wiphy *wiphy,
|
||||||
radio_stat_tmp++;
|
radio_stat_tmp++;
|
||||||
}
|
}
|
||||||
|
|
||||||
iface_stat = (wifi_iface_stat *)(info->param.link_statistic +
|
iface_stat = (wifi_iface_stat *)(ioctl_link_stats_buf +
|
||||||
sizeof(num_radio) + radio_stat_len);
|
sizeof(num_radio) + radio_stat_len);
|
||||||
|
|
||||||
iface_stat_len = sizeof(wifi_iface_stat);
|
iface_stat_len = sizeof(wifi_iface_stat);
|
||||||
|
|
||||||
/* could get peer info with separate cmd */
|
/* could get peer info with separate cmd */
|
||||||
|
|
|
@ -163,9 +163,10 @@ enum logger_attributes {
|
||||||
|
|
||||||
/* Below events refer to the wifi_connectivity_event ring and shall be supported
|
/* Below events refer to the wifi_connectivity_event ring and shall be supported
|
||||||
*/
|
*/
|
||||||
enum { WIFI_EVENT_ASSOCIATION_REQUESTED = 0,
|
enum {
|
||||||
WIFI_EVENT_AUTH_COMPLETE,
|
WIFI_EVENT_ASSOCIATION_REQUESTED = 0,
|
||||||
WIFI_EVENT_ASSOC_COMPLETE,
|
WIFI_EVENT_AUTH_COMPLETE,
|
||||||
|
WIFI_EVENT_ASSOC_COMPLETE,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
|
@ -175,11 +176,13 @@ enum {
|
||||||
RING_BUFFER_ENTRY_FLAGS_HAS_TIMESTAMP = (1 << (1))
|
RING_BUFFER_ENTRY_FLAGS_HAS_TIMESTAMP = (1 << (1))
|
||||||
};
|
};
|
||||||
|
|
||||||
enum { ENTRY_TYPE_CONNECT_EVENT = 1,
|
enum {
|
||||||
ENTRY_TYPE_PKT,
|
ENTRY_TYPE_CONNECT_EVENT = 1,
|
||||||
ENTRY_TYPE_WAKE_LOCK,
|
ENTRY_TYPE_PKT,
|
||||||
ENTRY_TYPE_POWER_EVENT,
|
ENTRY_TYPE_WAKE_LOCK,
|
||||||
ENTRY_TYPE_DATA };
|
ENTRY_TYPE_POWER_EVENT,
|
||||||
|
ENTRY_TYPE_DATA
|
||||||
|
};
|
||||||
|
|
||||||
/** WiFi ring buffer entry structure */
|
/** WiFi ring buffer entry structure */
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -506,9 +509,10 @@ int woal_packet_fate_monitor(moal_private *priv,
|
||||||
#define APF_FRAME_HEADER_SIZE 14
|
#define APF_FRAME_HEADER_SIZE 14
|
||||||
#define PACKET_FILTER_MAX_LEN 1024
|
#define PACKET_FILTER_MAX_LEN 1024
|
||||||
|
|
||||||
enum { PACKET_FILTER_STATE_INIT = 0,
|
enum {
|
||||||
PACKET_FILTER_STATE_STOP,
|
PACKET_FILTER_STATE_INIT = 0,
|
||||||
PACKET_FILTER_STATE_START,
|
PACKET_FILTER_STATE_STOP,
|
||||||
|
PACKET_FILTER_STATE_START,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum wifi_attr_packet_filter {
|
enum wifi_attr_packet_filter {
|
||||||
|
|
|
@ -163,6 +163,8 @@ static struct debug_data items[] = {
|
||||||
INFO_ADDR | (INTF_SD << 8)},
|
INFO_ADDR | (INTF_SD << 8)},
|
||||||
{"mp_invalid_update", item_size(mp_invalid_update),
|
{"mp_invalid_update", item_size(mp_invalid_update),
|
||||||
item_addr(mp_invalid_update), INFO_ADDR | (INTF_SD << 8)},
|
item_addr(mp_invalid_update), INFO_ADDR | (INTF_SD << 8)},
|
||||||
|
{"sdio_rx_aggr", item_size(sdio_rx_aggr), item_addr(sdio_rx_aggr),
|
||||||
|
INFO_ADDR | (INTF_SD << 8)},
|
||||||
{"mpa_sent_last_pkt", item_size(mpa_sent_last_pkt),
|
{"mpa_sent_last_pkt", item_size(mpa_sent_last_pkt),
|
||||||
item_addr(mpa_sent_last_pkt), INFO_ADDR | (INTF_SD << 8)},
|
item_addr(mpa_sent_last_pkt), INFO_ADDR | (INTF_SD << 8)},
|
||||||
{"mpa_sent_no_ports", item_size(mpa_sent_no_ports),
|
{"mpa_sent_no_ports", item_size(mpa_sent_no_ports),
|
||||||
|
@ -361,6 +363,8 @@ static struct debug_data uap_items[] = {
|
||||||
INFO_ADDR | (INTF_SD << 8)},
|
INFO_ADDR | (INTF_SD << 8)},
|
||||||
{"mp_invalid_update", item_size(mp_invalid_update),
|
{"mp_invalid_update", item_size(mp_invalid_update),
|
||||||
item_addr(mp_invalid_update), INFO_ADDR | (INTF_SD << 8)},
|
item_addr(mp_invalid_update), INFO_ADDR | (INTF_SD << 8)},
|
||||||
|
{"sdio_rx_aggr", item_size(sdio_rx_aggr), item_addr(sdio_rx_aggr),
|
||||||
|
INFO_ADDR | (INTF_SD << 8)},
|
||||||
{"mpa_sent_last_pkt", item_size(mpa_sent_last_pkt),
|
{"mpa_sent_last_pkt", item_size(mpa_sent_last_pkt),
|
||||||
item_addr(mpa_sent_last_pkt), INFO_ADDR | (INTF_SD << 8)},
|
item_addr(mpa_sent_last_pkt), INFO_ADDR | (INTF_SD << 8)},
|
||||||
{"mpa_sent_no_ports", item_size(mpa_sent_no_ports),
|
{"mpa_sent_no_ports", item_size(mpa_sent_no_ports),
|
||||||
|
|
|
@ -13248,8 +13248,8 @@ static int woal_priv_stats(moal_private *priv, t_u8 *respbuf, t_u32 respbuflen)
|
||||||
ioctl_req->action = stats->action;
|
ioctl_req->action = stats->action;
|
||||||
|
|
||||||
moal_memcpy_ext(priv->phandle, &misc->param.stats, stats,
|
moal_memcpy_ext(priv->phandle, &misc->param.stats, stats,
|
||||||
sizeof(mlan_ds_stats) + stats->tlv_len - 1,
|
sizeof(mlan_ds_stats) + stats->tlv_len,
|
||||||
sizeof(mlan_ds_stats) + stats->tlv_len - 1);
|
sizeof(mlan_ds_stats) + stats->tlv_len);
|
||||||
|
|
||||||
status = woal_request_ioctl(priv, ioctl_req, MOAL_IOCTL_WAIT);
|
status = woal_request_ioctl(priv, ioctl_req, MOAL_IOCTL_WAIT);
|
||||||
if (status != MLAN_STATUS_SUCCESS) {
|
if (status != MLAN_STATUS_SUCCESS) {
|
||||||
|
@ -21857,16 +21857,45 @@ handled:
|
||||||
if (priv_cmd.used_len <= priv_cmd.total_len) {
|
if (priv_cmd.used_len <= priv_cmd.total_len) {
|
||||||
memset(buf + priv_cmd.used_len, 0,
|
memset(buf + priv_cmd.used_len, 0,
|
||||||
(size_t)(CMD_BUF_LEN - priv_cmd.used_len));
|
(size_t)(CMD_BUF_LEN - priv_cmd.used_len));
|
||||||
|
#ifdef CONFIG_COMPAT
|
||||||
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 15, 0)
|
||||||
|
if (copy_to_user(
|
||||||
|
((in_compat_syscall()) ?
|
||||||
|
compat_ptr((uintptr_t)cmd_buf) :
|
||||||
|
(void __user *)cmd_buf),
|
||||||
|
buf, priv_cmd.total_len))
|
||||||
|
#else
|
||||||
if (copy_to_user((void __user *)cmd_buf, buf,
|
if (copy_to_user((void __user *)cmd_buf, buf,
|
||||||
priv_cmd.total_len)) {
|
priv_cmd.total_len))
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
if (copy_to_user((void __user *)cmd_buf, buf,
|
||||||
|
priv_cmd.total_len))
|
||||||
|
#endif
|
||||||
|
{
|
||||||
PRINTM(MERROR,
|
PRINTM(MERROR,
|
||||||
"%s: failed to copy data to user buffer\n",
|
"%s: failed to copy data to user buffer\n",
|
||||||
__FUNCTION__);
|
__FUNCTION__);
|
||||||
ret = -EFAULT;
|
ret = -EFAULT;
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
#ifdef CONFIG_COMPAT
|
||||||
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 15, 0)
|
||||||
|
if (copy_to_user(
|
||||||
|
((in_compat_syscall()) ?
|
||||||
|
compat_ptr((
|
||||||
|
uintptr_t)(req->ifr_data)) :
|
||||||
|
req->ifr_data),
|
||||||
|
&priv_cmd, sizeof(android_wifi_priv_cmd)))
|
||||||
|
#else
|
||||||
if (copy_to_user(req->ifr_data, &priv_cmd,
|
if (copy_to_user(req->ifr_data, &priv_cmd,
|
||||||
sizeof(android_wifi_priv_cmd))) {
|
sizeof(android_wifi_priv_cmd)))
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
if (copy_to_user(req->ifr_data, &priv_cmd,
|
||||||
|
sizeof(android_wifi_priv_cmd)))
|
||||||
|
#endif
|
||||||
|
{
|
||||||
PRINTM(MERROR,
|
PRINTM(MERROR,
|
||||||
"%s: failed to copy command header to user buffer\n",
|
"%s: failed to copy command header to user buffer\n",
|
||||||
__FUNCTION__);
|
__FUNCTION__);
|
||||||
|
@ -22117,12 +22146,13 @@ int woal_do_ioctl(struct net_device *dev, struct ifreq *req, int cmd)
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
ENTER();
|
ENTER();
|
||||||
|
#if 0
|
||||||
#ifdef CONFIG_COMPAT
|
#ifdef CONFIG_COMPAT
|
||||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 15, 0)
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 15, 0)
|
||||||
if (in_compat_syscall()) /* not implemented yet */
|
if (in_compat_syscall()) /* not implemented yet */
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
PRINTM(MINFO, "woal_do_ioctl: ioctl cmd = 0x%x\n", cmd);
|
PRINTM(MINFO, "woal_do_ioctl: ioctl cmd = 0x%x\n", cmd);
|
||||||
|
|
|
@ -292,6 +292,7 @@ static int indrstcfg = 0xffffffff;
|
||||||
#define DEFAULT_DEV_CAP_MASK 0xffffffff
|
#define DEFAULT_DEV_CAP_MASK 0xffffffff
|
||||||
static t_u32 dev_cap_mask = DEFAULT_DEV_CAP_MASK;
|
static t_u32 dev_cap_mask = DEFAULT_DEV_CAP_MASK;
|
||||||
#ifdef SDIO
|
#ifdef SDIO
|
||||||
|
static int sdio_rx_aggr = MTRUE;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/** The global variable of scan beacon buffer **/
|
/** The global variable of scan beacon buffer **/
|
||||||
|
@ -364,6 +365,9 @@ static card_type_entry card_type_map_tbl[] = {
|
||||||
#ifdef SDIW624
|
#ifdef SDIW624
|
||||||
{CARD_TYPE_SDIW624, 0, CARD_SDIW624},
|
{CARD_TYPE_SDIW624, 0, CARD_SDIW624},
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef SDIW615
|
||||||
|
{CARD_TYPE_SDIW615, 0, CARD_SDIW615},
|
||||||
|
#endif
|
||||||
#ifdef PCIE8897
|
#ifdef PCIE8897
|
||||||
{CARD_TYPE_PCIE8897, 0, CARD_PCIE8897},
|
{CARD_TYPE_PCIE8897, 0, CARD_PCIE8897},
|
||||||
#endif
|
#endif
|
||||||
|
@ -401,7 +405,9 @@ static card_type_entry card_type_map_tbl[] = {
|
||||||
#ifdef USBIW624
|
#ifdef USBIW624
|
||||||
{CARD_TYPE_USBIW624, 0, CARD_USBIW624},
|
{CARD_TYPE_USBIW624, 0, CARD_USBIW624},
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef USBIW615
|
||||||
|
{CARD_TYPE_USBIW615, 0, CARD_USBIW615},
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
static int dfs53cfg = DFS_W53_DEFAULT_FW;
|
static int dfs53cfg = DFS_W53_DEFAULT_FW;
|
||||||
|
@ -1109,6 +1115,20 @@ static mlan_status parse_cfg_read_block(t_u8 *data, t_u32 size,
|
||||||
PRINTM(MMSG, "dev_cap_mask=%d\n", params->dev_cap_mask);
|
PRINTM(MMSG, "dev_cap_mask=%d\n", params->dev_cap_mask);
|
||||||
}
|
}
|
||||||
#ifdef SDIO
|
#ifdef SDIO
|
||||||
|
else if (strncmp(line, "sdio_rx_aggr",
|
||||||
|
strlen("sdio_rx_aggr")) == 0) {
|
||||||
|
if (parse_line_read_int(line, &out_data) !=
|
||||||
|
MLAN_STATUS_SUCCESS)
|
||||||
|
goto err;
|
||||||
|
if (out_data)
|
||||||
|
moal_extflg_set(handle, EXT_SDIO_RX_AGGR);
|
||||||
|
else
|
||||||
|
moal_extflg_clear(handle, EXT_SDIO_RX_AGGR);
|
||||||
|
PRINTM(MMSG, "sdio_rx_aggr %s\n",
|
||||||
|
moal_extflg_isset(handle, EXT_SDIO_RX_AGGR) ?
|
||||||
|
"on" :
|
||||||
|
"off");
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
else if (strncmp(line, "pmic", strlen("pmic")) == 0) {
|
else if (strncmp(line, "pmic", strlen("pmic")) == 0) {
|
||||||
if (parse_line_read_int(line, &out_data) !=
|
if (parse_line_read_int(line, &out_data) !=
|
||||||
|
@ -1755,6 +1775,8 @@ static void woal_setup_module_param(moal_handle *handle, moal_mod_para *params)
|
||||||
if (params)
|
if (params)
|
||||||
handle->params.dev_cap_mask = params->dev_cap_mask;
|
handle->params.dev_cap_mask = params->dev_cap_mask;
|
||||||
#ifdef SDIO
|
#ifdef SDIO
|
||||||
|
if (sdio_rx_aggr)
|
||||||
|
moal_extflg_set(handle, EXT_SDIO_RX_AGGR);
|
||||||
#endif
|
#endif
|
||||||
if (pmic)
|
if (pmic)
|
||||||
moal_extflg_set(handle, EXT_PMIC);
|
moal_extflg_set(handle, EXT_PMIC);
|
||||||
|
@ -2842,6 +2864,9 @@ MODULE_PARM_DESC(
|
||||||
"0: buf copy in amsud deaggregation; 1: avoid buf copy in amsud deaggregation (default)");
|
"0: buf copy in amsud deaggregation; 1: avoid buf copy in amsud deaggregation (default)");
|
||||||
|
|
||||||
#ifdef SDIO
|
#ifdef SDIO
|
||||||
|
module_param(sdio_rx_aggr, int, 0);
|
||||||
|
MODULE_PARM_DESC(sdio_rx_aggr,
|
||||||
|
"1: Enable SDIO rx aggr; 0: Disable SDIO rx aggr");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
module_param(pmic, int, 0);
|
module_param(pmic, int, 0);
|
||||||
|
|
|
@ -119,6 +119,7 @@ static struct _card_info card_info_SD8801 = {
|
||||||
.scratch_reg = 0x60,
|
.scratch_reg = 0x60,
|
||||||
.func1_reg_start = 0x10,
|
.func1_reg_start = 0x10,
|
||||||
.func1_reg_end = 0x17,
|
.func1_reg_end = 0x17,
|
||||||
|
.fw_stuck_code_reg = 0,
|
||||||
.fw_reset_reg = 0x64,
|
.fw_reset_reg = 0x64,
|
||||||
.fw_reset_val = 0,
|
.fw_reset_val = 0,
|
||||||
.fw_wakeup_reg = 0,
|
.fw_wakeup_reg = 0,
|
||||||
|
@ -158,6 +159,7 @@ static struct _card_info card_info_SD8887 = {
|
||||||
.scratch_reg = 0x90,
|
.scratch_reg = 0x90,
|
||||||
.func1_reg_start = 0x10,
|
.func1_reg_start = 0x10,
|
||||||
.func1_reg_end = 0x17,
|
.func1_reg_end = 0x17,
|
||||||
|
.fw_stuck_code_reg = 0,
|
||||||
.fw_reset_reg = 0x0B6,
|
.fw_reset_reg = 0x0B6,
|
||||||
.fw_reset_val = 1,
|
.fw_reset_val = 1,
|
||||||
.fw_wakeup_reg = 0,
|
.fw_wakeup_reg = 0,
|
||||||
|
@ -197,6 +199,7 @@ static struct _card_info card_info_SD8897 = {
|
||||||
.scratch_reg = 0xc0,
|
.scratch_reg = 0xc0,
|
||||||
.func1_reg_start = 0x04,
|
.func1_reg_start = 0x04,
|
||||||
.func1_reg_end = 0x0b,
|
.func1_reg_end = 0x0b,
|
||||||
|
.fw_stuck_code_reg = 0,
|
||||||
.fw_reset_reg = 0x0E8,
|
.fw_reset_reg = 0x0E8,
|
||||||
.fw_reset_val = 1,
|
.fw_reset_val = 1,
|
||||||
.fw_wakeup_reg = 0,
|
.fw_wakeup_reg = 0,
|
||||||
|
@ -225,6 +228,7 @@ static struct _card_info card_info_PCIE8897 = {
|
||||||
.rev_id_reg = 0x0c58,
|
.rev_id_reg = 0x0c58,
|
||||||
.fw_name = PCIE8897_DEFAULT_COMBO_FW_NAME,
|
.fw_name = PCIE8897_DEFAULT_COMBO_FW_NAME,
|
||||||
.fw_name_wlan = PCIE8897_DEFAULT_WLAN_FW_NAME,
|
.fw_name_wlan = PCIE8897_DEFAULT_WLAN_FW_NAME,
|
||||||
|
.fw_stuck_code_reg = 0,
|
||||||
.sniffer_support = 0,
|
.sniffer_support = 0,
|
||||||
.per_pkt_cfg_support = 0,
|
.per_pkt_cfg_support = 0,
|
||||||
.host_mlme_required = 0,
|
.host_mlme_required = 0,
|
||||||
|
@ -280,6 +284,7 @@ static struct _card_info card_info_SD8977 = {
|
||||||
.scratch_reg = 0xe8,
|
.scratch_reg = 0xe8,
|
||||||
.func1_reg_start = 0x10,
|
.func1_reg_start = 0x10,
|
||||||
.func1_reg_end = 0x17,
|
.func1_reg_end = 0x17,
|
||||||
|
.fw_stuck_code_reg = 0xEB,
|
||||||
.fw_reset_reg = 0x0EE,
|
.fw_reset_reg = 0x0EE,
|
||||||
.fw_reset_val = 0x99,
|
.fw_reset_val = 0x99,
|
||||||
.fw_wakeup_reg = 0,
|
.fw_wakeup_reg = 0,
|
||||||
|
@ -322,6 +327,7 @@ static struct _card_info card_info_SD8978 = {
|
||||||
.scratch_reg = 0xe8,
|
.scratch_reg = 0xe8,
|
||||||
.func1_reg_start = 0x10,
|
.func1_reg_start = 0x10,
|
||||||
.func1_reg_end = 0x17,
|
.func1_reg_end = 0x17,
|
||||||
|
.fw_stuck_code_reg = 0xEB,
|
||||||
.fw_reset_reg = 0x0EE,
|
.fw_reset_reg = 0x0EE,
|
||||||
.fw_reset_val = 0x99,
|
.fw_reset_val = 0x99,
|
||||||
.fw_wakeup_reg = 0,
|
.fw_wakeup_reg = 0,
|
||||||
|
@ -364,6 +370,7 @@ static struct _card_info card_info_SD8997 = {
|
||||||
.scratch_reg = 0xe8,
|
.scratch_reg = 0xe8,
|
||||||
.func1_reg_start = 0x10,
|
.func1_reg_start = 0x10,
|
||||||
.func1_reg_end = 0x17,
|
.func1_reg_end = 0x17,
|
||||||
|
.fw_stuck_code_reg = 0xEB,
|
||||||
.fw_reset_reg = 0x0EE,
|
.fw_reset_reg = 0x0EE,
|
||||||
.fw_reset_val = 0x99,
|
.fw_reset_val = 0x99,
|
||||||
.fw_wakeup_reg = 0,
|
.fw_wakeup_reg = 0,
|
||||||
|
@ -407,6 +414,7 @@ static struct _card_info card_info_SD9098 = {
|
||||||
.scratch_reg = 0xe8,
|
.scratch_reg = 0xe8,
|
||||||
.func1_reg_start = 0x10,
|
.func1_reg_start = 0x10,
|
||||||
.func1_reg_end = 0x17,
|
.func1_reg_end = 0x17,
|
||||||
|
.fw_stuck_code_reg = 0xEB,
|
||||||
.fw_reset_reg = 0x0EE,
|
.fw_reset_reg = 0x0EE,
|
||||||
.fw_reset_val = 0x99,
|
.fw_reset_val = 0x99,
|
||||||
.fw_wakeup_reg = 0,
|
.fw_wakeup_reg = 0,
|
||||||
|
@ -450,6 +458,7 @@ static struct _card_info card_info_SD9097 = {
|
||||||
.scratch_reg = 0xe8,
|
.scratch_reg = 0xe8,
|
||||||
.func1_reg_start = 0x10,
|
.func1_reg_start = 0x10,
|
||||||
.func1_reg_end = 0x17,
|
.func1_reg_end = 0x17,
|
||||||
|
.fw_stuck_code_reg = 0xEB,
|
||||||
.fw_reset_reg = 0x0EE,
|
.fw_reset_reg = 0x0EE,
|
||||||
.fw_reset_val = 0x99,
|
.fw_reset_val = 0x99,
|
||||||
.fw_wakeup_reg = 0,
|
.fw_wakeup_reg = 0,
|
||||||
|
@ -493,6 +502,7 @@ static struct _card_info card_info_SDIW624 = {
|
||||||
.scratch_reg = 0xe8,
|
.scratch_reg = 0xe8,
|
||||||
.func1_reg_start = 0x10,
|
.func1_reg_start = 0x10,
|
||||||
.func1_reg_end = 0x17,
|
.func1_reg_end = 0x17,
|
||||||
|
.fw_stuck_code_reg = 0xEB,
|
||||||
.fw_reset_reg = 0x0EE,
|
.fw_reset_reg = 0x0EE,
|
||||||
.fw_reset_val = 0x99,
|
.fw_reset_val = 0x99,
|
||||||
.fw_wakeup_reg = 0,
|
.fw_wakeup_reg = 0,
|
||||||
|
@ -536,6 +546,7 @@ static struct _card_info card_info_SD9177 = {
|
||||||
.scratch_reg = 0xe8,
|
.scratch_reg = 0xe8,
|
||||||
.func1_reg_start = 0x10,
|
.func1_reg_start = 0x10,
|
||||||
.func1_reg_end = 0x17,
|
.func1_reg_end = 0x17,
|
||||||
|
.fw_stuck_code_reg = 0xEB,
|
||||||
.fw_reset_reg = 0x0EE,
|
.fw_reset_reg = 0x0EE,
|
||||||
.fw_reset_val = 0x99,
|
.fw_reset_val = 0x99,
|
||||||
.fw_wakeup_reg = 0,
|
.fw_wakeup_reg = 0,
|
||||||
|
@ -549,6 +560,47 @@ static struct _card_info card_info_SD9177 = {
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef SDIW615
|
||||||
|
static struct _card_info card_info_SDIW615 = {
|
||||||
|
.embedded_supp = 1,
|
||||||
|
.drcs = 1,
|
||||||
|
.go_noa = 1,
|
||||||
|
.v16_fw_api = 1,
|
||||||
|
.v17_fw_api = 1,
|
||||||
|
.pmic = 1,
|
||||||
|
.cal_data_cfg = 0,
|
||||||
|
.low_power_enable = 0,
|
||||||
|
.rx_rate_max = 412,
|
||||||
|
.histogram_table_num = 3,
|
||||||
|
.feature_control = FEATURE_CTRL_DEFAULT & (~FEATURE_CTRL_STREAM_2X2),
|
||||||
|
.rev_id_reg = 0xc8,
|
||||||
|
.host_strap_reg = 0xf4,
|
||||||
|
.magic_reg = 0xf0,
|
||||||
|
.fw_name = SDIW615_DEFAULT_COMBO_FW_NAME,
|
||||||
|
.fw_name_wlan = SDIW615_DEFAULT_WLAN_FW_NAME,
|
||||||
|
#ifdef SDIO
|
||||||
|
.dump_fw_info = DUMP_FW_SDIO_V3,
|
||||||
|
.dump_fw_ctrl_reg = 0xf9,
|
||||||
|
.dump_fw_start_reg = 0xf1,
|
||||||
|
.dump_fw_end_reg = 0xf8,
|
||||||
|
.dump_fw_host_ready = 0xcc,
|
||||||
|
.dump_reg.reg_table = {0x08, 0x58, 0x5C, 0x5D, 0x60, 0x61, 0x62, 0x64,
|
||||||
|
0x65, 0x66, 0x68, 0x69, 0x6a},
|
||||||
|
.dump_reg.reg_table_size = 13,
|
||||||
|
.scratch_reg = 0xe8,
|
||||||
|
.func1_reg_start = 0x10,
|
||||||
|
.func1_reg_end = 0x17,
|
||||||
|
.fw_stuck_code_reg = 0xEB,
|
||||||
|
.fw_reset_reg = 0x0EE,
|
||||||
|
.fw_reset_val = 0x99,
|
||||||
|
.slew_rate_reg = 0x90002328,
|
||||||
|
.slew_rate_bit_offset = 12,
|
||||||
|
#endif
|
||||||
|
.sniffer_support = 1,
|
||||||
|
.per_pkt_cfg_support = 1,
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef PCIE8997
|
#ifdef PCIE8997
|
||||||
static struct _card_info card_info_PCIE8997 = {
|
static struct _card_info card_info_PCIE8997 = {
|
||||||
.embedded_supp = 1,
|
.embedded_supp = 1,
|
||||||
|
@ -566,6 +618,7 @@ static struct _card_info card_info_PCIE8997 = {
|
||||||
.magic_reg = 0x0cd4,
|
.magic_reg = 0x0cd4,
|
||||||
.fw_name = PCIE8997_DEFAULT_COMBO_FW_NAME,
|
.fw_name = PCIE8997_DEFAULT_COMBO_FW_NAME,
|
||||||
.fw_name_wlan = PCIE8997_DEFAULT_WLAN_FW_NAME,
|
.fw_name_wlan = PCIE8997_DEFAULT_WLAN_FW_NAME,
|
||||||
|
.fw_stuck_code_reg = 0xcf8,
|
||||||
.fw_reset_reg = 0xcf4,
|
.fw_reset_reg = 0xcf4,
|
||||||
.fw_reset_val = 0x99,
|
.fw_reset_val = 0x99,
|
||||||
.fw_wakeup_reg = 0x0c48,
|
.fw_wakeup_reg = 0x0c48,
|
||||||
|
@ -593,6 +646,7 @@ static struct _card_info card_info_PCIE9097 = {
|
||||||
.magic_reg = 0x1c74,
|
.magic_reg = 0x1c74,
|
||||||
.fw_name = PCIE9097_DEFAULT_COMBO_FW_NAME,
|
.fw_name = PCIE9097_DEFAULT_COMBO_FW_NAME,
|
||||||
.fw_name_wlan = PCIE9097_DEFAULT_WLAN_FW_NAME,
|
.fw_name_wlan = PCIE9097_DEFAULT_WLAN_FW_NAME,
|
||||||
|
.fw_stuck_code_reg = 0x1c80,
|
||||||
.fw_reset_reg = 0x1c94,
|
.fw_reset_reg = 0x1c94,
|
||||||
.fw_reset_val = 0x98,
|
.fw_reset_val = 0x98,
|
||||||
.fw_wakeup_reg = 0x0,
|
.fw_wakeup_reg = 0x0,
|
||||||
|
@ -620,6 +674,7 @@ static struct _card_info card_info_PCIE9098 = {
|
||||||
.magic_reg = 0x1c74,
|
.magic_reg = 0x1c74,
|
||||||
.fw_name = PCIE9098_DEFAULT_COMBO_FW_NAME,
|
.fw_name = PCIE9098_DEFAULT_COMBO_FW_NAME,
|
||||||
.fw_name_wlan = PCIE9098_DEFAULT_WLAN_FW_NAME,
|
.fw_name_wlan = PCIE9098_DEFAULT_WLAN_FW_NAME,
|
||||||
|
.fw_stuck_code_reg = 0x1c98,
|
||||||
.fw_reset_reg = 0x1c94,
|
.fw_reset_reg = 0x1c94,
|
||||||
.fw_reset_val = 0x98,
|
.fw_reset_val = 0x98,
|
||||||
.fw_wakeup_reg = 0x0,
|
.fw_wakeup_reg = 0x0,
|
||||||
|
@ -648,6 +703,7 @@ static struct _card_info card_info_PCIEIW624 = {
|
||||||
.boot_mode_reg = 0x1c8c,
|
.boot_mode_reg = 0x1c8c,
|
||||||
.fw_name = PCIEIW624_DEFAULT_COMBO_FW_NAME,
|
.fw_name = PCIEIW624_DEFAULT_COMBO_FW_NAME,
|
||||||
.fw_name_wlan = PCIEIW624_DEFAULT_WLAN_FW_NAME,
|
.fw_name_wlan = PCIEIW624_DEFAULT_WLAN_FW_NAME,
|
||||||
|
.fw_stuck_code_reg = 0x1c80,
|
||||||
.fw_reset_reg = 0x1c94,
|
.fw_reset_reg = 0x1c94,
|
||||||
.fw_reset_val = 0x98,
|
.fw_reset_val = 0x98,
|
||||||
.fw_wakeup_reg = 0x0,
|
.fw_wakeup_reg = 0x0,
|
||||||
|
@ -782,6 +838,26 @@ static struct _card_info card_info_USBIW624 = {
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef USBIW615
|
||||||
|
static struct _card_info card_info_USBIW615 = {
|
||||||
|
.embedded_supp = 1,
|
||||||
|
.drcs = 1,
|
||||||
|
.go_noa = 1,
|
||||||
|
.v16_fw_api = 1,
|
||||||
|
.v17_fw_api = 1,
|
||||||
|
.pmic = 1,
|
||||||
|
.cal_data_cfg = 0,
|
||||||
|
.low_power_enable = 0,
|
||||||
|
.rx_rate_max = 412,
|
||||||
|
.feature_control = FEATURE_CTRL_DEFAULT,
|
||||||
|
.histogram_table_num = 3,
|
||||||
|
.fw_name = USBIW615_DEFAULT_COMBO_FW_NAME,
|
||||||
|
.fw_name_wlan = USBIW615_DEFAULT_WLAN_FW_NAME,
|
||||||
|
.sniffer_support = 1,
|
||||||
|
.per_pkt_cfg_support = 1,
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef SD8987
|
#ifdef SD8987
|
||||||
static struct _card_info card_info_SD8987 = {
|
static struct _card_info card_info_SD8987 = {
|
||||||
.embedded_supp = 1,
|
.embedded_supp = 1,
|
||||||
|
@ -810,6 +886,7 @@ static struct _card_info card_info_SD8987 = {
|
||||||
.scratch_reg = 0xe8,
|
.scratch_reg = 0xe8,
|
||||||
.func1_reg_start = 0x10,
|
.func1_reg_start = 0x10,
|
||||||
.func1_reg_end = 0x17,
|
.func1_reg_end = 0x17,
|
||||||
|
.fw_stuck_code_reg = 0xEB,
|
||||||
.fw_reset_reg = 0x0EE,
|
.fw_reset_reg = 0x0EE,
|
||||||
.fw_reset_val = 0x99,
|
.fw_reset_val = 0x99,
|
||||||
.fw_wakeup_reg = 0,
|
.fw_wakeup_reg = 0,
|
||||||
|
@ -1021,7 +1098,8 @@ void woal_clean_up(moal_handle *handle)
|
||||||
if (priv->host_mlme)
|
if (priv->host_mlme)
|
||||||
woal_deauth_event(
|
woal_deauth_event(
|
||||||
priv,
|
priv,
|
||||||
MLAN_REASON_DEAUTH_LEAVING);
|
MLAN_REASON_DEAUTH_LEAVING,
|
||||||
|
priv->cfg_bssid);
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
cfg80211_disconnected(priv->netdev, 0,
|
cfg80211_disconnected(priv->netdev, 0,
|
||||||
|
@ -1147,7 +1225,8 @@ static void woal_hang_work_queue(struct work_struct *work)
|
||||||
if (priv->host_mlme)
|
if (priv->host_mlme)
|
||||||
woal_deauth_event(
|
woal_deauth_event(
|
||||||
priv,
|
priv,
|
||||||
MLAN_REASON_DEAUTH_LEAVING);
|
MLAN_REASON_DEAUTH_LEAVING,
|
||||||
|
priv->cfg_bssid);
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
cfg80211_disconnected(priv->netdev, 0,
|
cfg80211_disconnected(priv->netdev, 0,
|
||||||
|
@ -2300,6 +2379,8 @@ mlan_status woal_init_sw(moal_handle *handle)
|
||||||
#endif
|
#endif
|
||||||
#ifdef SDIO
|
#ifdef SDIO
|
||||||
if (IS_SD(handle->card_type)) {
|
if (IS_SD(handle->card_type)) {
|
||||||
|
device.sdio_rx_aggr_enable =
|
||||||
|
moal_extflg_isset(handle, EXT_SDIO_RX_AGGR);
|
||||||
device.int_mode = (t_u32)moal_extflg_isset(handle, EXT_INTMODE);
|
device.int_mode = (t_u32)moal_extflg_isset(handle, EXT_INTMODE);
|
||||||
device.gpio_pin = (t_u32)handle->params.gpiopin;
|
device.gpio_pin = (t_u32)handle->params.gpiopin;
|
||||||
#ifdef SDIO_MMC
|
#ifdef SDIO_MMC
|
||||||
|
@ -2651,9 +2732,11 @@ static t_u32 woal_set_sdio_slew_rate(moal_handle *handle)
|
||||||
if ((handle->card_info->slew_rate_reg != 0) &&
|
if ((handle->card_info->slew_rate_reg != 0) &&
|
||||||
(handle->params.slew_rate > 3 || handle->params.slew_rate < 0))
|
(handle->params.slew_rate > 3 || handle->params.slew_rate < 0))
|
||||||
return MLAN_STATUS_FAILURE;
|
return MLAN_STATUS_FAILURE;
|
||||||
#if defined(SD9098) || defined(SD9097) || defined(SDIW624) || defined(SD9177)
|
#if defined(SD9098) || defined(SD9097) || defined(SDIW624) || \
|
||||||
|
defined(SD9177) || defined(SDIW615)
|
||||||
if (IS_SD9098(handle->card_type) || IS_SD9097(handle->card_type) ||
|
if (IS_SD9098(handle->card_type) || IS_SD9097(handle->card_type) ||
|
||||||
IS_SDIW624(handle->card_type) || IS_SD9177(handle->card_type))
|
IS_SDIW624(handle->card_type) || IS_SDIW615(handle->card_type) ||
|
||||||
|
IS_SD9177(handle->card_type))
|
||||||
reg_type = MLAN_REG_CIU;
|
reg_type = MLAN_REG_CIU;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -4237,6 +4320,7 @@ static mlan_status woal_init_fw_dpc(moal_handle *handle)
|
||||||
!IS_USB9098(handle->card_type) &&
|
!IS_USB9098(handle->card_type) &&
|
||||||
!IS_USB9097(handle->card_type) &&
|
!IS_USB9097(handle->card_type) &&
|
||||||
!IS_USBIW624(handle->card_type) &&
|
!IS_USBIW624(handle->card_type) &&
|
||||||
|
!IS_USBIW615(handle->card_type) &&
|
||||||
!IS_USB8978(handle->card_type))
|
!IS_USB8978(handle->card_type))
|
||||||
ret = woal_reset_usb_dev(handle);
|
ret = woal_reset_usb_dev(handle);
|
||||||
goto done;
|
goto done;
|
||||||
|
@ -6710,6 +6794,8 @@ void woal_tx_timeout(struct net_device *dev
|
||||||
{
|
{
|
||||||
moal_private *priv = (moal_private *)netdev_priv(dev);
|
moal_private *priv = (moal_private *)netdev_priv(dev);
|
||||||
t_u8 auto_fw_dump = MFALSE;
|
t_u8 auto_fw_dump = MFALSE;
|
||||||
|
moal_handle *ref_handle = NULL;
|
||||||
|
|
||||||
ENTER();
|
ENTER();
|
||||||
|
|
||||||
priv->num_tx_timeout++;
|
priv->num_tx_timeout++;
|
||||||
|
@ -6732,6 +6818,9 @@ void woal_tx_timeout(struct net_device *dev
|
||||||
woal_mlan_debug_info(priv);
|
woal_mlan_debug_info(priv);
|
||||||
woal_moal_debug_info(priv, NULL, MFALSE);
|
woal_moal_debug_info(priv, NULL, MFALSE);
|
||||||
priv->phandle->driver_status = MTRUE;
|
priv->phandle->driver_status = MTRUE;
|
||||||
|
ref_handle = (moal_handle *)priv->phandle->pref_mac;
|
||||||
|
if (ref_handle)
|
||||||
|
ref_handle->driver_status = MTRUE;
|
||||||
if (!auto_fw_dump && !priv->phandle->fw_dump)
|
if (!auto_fw_dump && !priv->phandle->fw_dump)
|
||||||
woal_process_hang(priv->phandle);
|
woal_process_hang(priv->phandle);
|
||||||
|
|
||||||
|
@ -8727,6 +8816,11 @@ static int woal_get_card_info(moal_handle *phandle)
|
||||||
phandle->card_info = &card_info_SDIW624;
|
phandle->card_info = &card_info_SDIW624;
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef SDIW615
|
||||||
|
case CARD_TYPE_SDIW615:
|
||||||
|
phandle->card_info = &card_info_SDIW615;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
#ifdef SD9177
|
#ifdef SD9177
|
||||||
case CARD_TYPE_SD9177:
|
case CARD_TYPE_SD9177:
|
||||||
phandle->card_info = &card_info_SD9177;
|
phandle->card_info = &card_info_SD9177;
|
||||||
|
@ -8785,6 +8879,11 @@ static int woal_get_card_info(moal_handle *phandle)
|
||||||
phandle->card_info = &card_info_USBIW624;
|
phandle->card_info = &card_info_USBIW624;
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef USBIW615
|
||||||
|
case CARD_TYPE_USBIW615:
|
||||||
|
phandle->card_info = &card_info_USBIW615;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
#ifdef SD8987
|
#ifdef SD8987
|
||||||
case CARD_TYPE_SD8987:
|
case CARD_TYPE_SD8987:
|
||||||
phandle->card_info = &card_info_SD8987;
|
phandle->card_info = &card_info_SD8987;
|
||||||
|
@ -9610,7 +9709,8 @@ t_void woal_send_disconnect_to_system(moal_private *priv,
|
||||||
is not valid */
|
is not valid */
|
||||||
#if CFG80211_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
|
#if CFG80211_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
|
||||||
if (priv->host_mlme)
|
if (priv->host_mlme)
|
||||||
woal_deauth_event(priv, reason_code);
|
woal_deauth_event(priv, reason_code,
|
||||||
|
priv->cfg_bssid);
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
cfg80211_disconnected(priv->netdev, reason_code,
|
cfg80211_disconnected(priv->netdev, reason_code,
|
||||||
|
@ -11320,6 +11420,7 @@ t_void woal_scan_timeout_handler(struct work_struct *work)
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
moal_private *priv = woal_get_priv(handle, MLAN_BSS_ROLE_STA);
|
moal_private *priv = woal_get_priv(handle, MLAN_BSS_ROLE_STA);
|
||||||
t_u8 auto_fw_dump = MFALSE;
|
t_u8 auto_fw_dump = MFALSE;
|
||||||
|
moal_handle *ref_handle = NULL;
|
||||||
|
|
||||||
ENTER();
|
ENTER();
|
||||||
|
|
||||||
|
@ -11347,6 +11448,10 @@ t_void woal_scan_timeout_handler(struct work_struct *work)
|
||||||
woal_moal_debug_info(priv, NULL, MFALSE);
|
woal_moal_debug_info(priv, NULL, MFALSE);
|
||||||
}
|
}
|
||||||
handle->driver_status = MTRUE;
|
handle->driver_status = MTRUE;
|
||||||
|
ref_handle = (moal_handle *)handle->pref_mac;
|
||||||
|
if (ref_handle)
|
||||||
|
ref_handle->driver_status = MTRUE;
|
||||||
|
|
||||||
if (!auto_fw_dump && !handle->fw_dump && priv)
|
if (!auto_fw_dump && !handle->fw_dump && priv)
|
||||||
woal_process_hang(priv->phandle);
|
woal_process_hang(priv->phandle);
|
||||||
wifi_status = WIFI_STATUS_SCAN_TIMEOUT;
|
wifi_status = WIFI_STATUS_SCAN_TIMEOUT;
|
||||||
|
@ -11420,8 +11525,9 @@ t_void woal_evt_work_queue(struct work_struct *work)
|
||||||
#if CFG80211_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
|
#if CFG80211_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
|
||||||
case WOAL_EVENT_DEAUTH:
|
case WOAL_EVENT_DEAUTH:
|
||||||
priv = evt->priv;
|
priv = evt->priv;
|
||||||
woal_host_mlme_disconnect(evt->priv, evt->reason_code,
|
woal_host_mlme_disconnect(evt->priv,
|
||||||
priv->cfg_bssid);
|
evt->deauth_info.reason_code,
|
||||||
|
evt->deauth_info.mac_addr);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WOAL_EVENT_ASSOC_RESP:
|
case WOAL_EVENT_ASSOC_RESP:
|
||||||
|
@ -11550,6 +11656,8 @@ void woal_pcie_rx_data_task(unsigned long data)
|
||||||
#if defined(STA_CFG80211) || defined(UAP_CFG80211)
|
#if defined(STA_CFG80211) || defined(UAP_CFG80211)
|
||||||
#if CFG80211_VERSION_CODE >= KERNEL_VERSION(3, 2, 0)
|
#if CFG80211_VERSION_CODE >= KERNEL_VERSION(3, 2, 0)
|
||||||
if (handle->cfg80211_suspend == MTRUE) {
|
if (handle->cfg80211_suspend == MTRUE) {
|
||||||
|
mlan_process_pcie_interrupt_cb(handle->pmlan_adapter,
|
||||||
|
RX_DATA_DELAY);
|
||||||
LEAVE();
|
LEAVE();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -11616,6 +11724,8 @@ t_void woal_pcie_rx_work_queue(struct work_struct *work)
|
||||||
#if defined(STA_CFG80211) || defined(UAP_CFG80211)
|
#if defined(STA_CFG80211) || defined(UAP_CFG80211)
|
||||||
#if CFG80211_VERSION_CODE >= KERNEL_VERSION(3, 2, 0)
|
#if CFG80211_VERSION_CODE >= KERNEL_VERSION(3, 2, 0)
|
||||||
if (handle->cfg80211_suspend == MTRUE) {
|
if (handle->cfg80211_suspend == MTRUE) {
|
||||||
|
mlan_process_pcie_interrupt_cb(handle->pmlan_adapter,
|
||||||
|
RX_DATA_DELAY);
|
||||||
LEAVE();
|
LEAVE();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -398,11 +398,13 @@ typedef enum _MOAL_HARDWARE_STATUS {
|
||||||
enum { MOAL_NO_WAIT, MOAL_IOCTL_WAIT, MOAL_IOCTL_WAIT_TIMEOUT };
|
enum { MOAL_NO_WAIT, MOAL_IOCTL_WAIT, MOAL_IOCTL_WAIT_TIMEOUT };
|
||||||
|
|
||||||
/** moal_main_state */
|
/** moal_main_state */
|
||||||
enum { MOAL_STATE_IDLE,
|
enum {
|
||||||
MOAL_RECV_INT,
|
MOAL_STATE_IDLE,
|
||||||
MOAL_ENTER_WORK_QUEUE,
|
MOAL_RECV_INT,
|
||||||
MOAL_START_MAIN_PROCESS,
|
MOAL_ENTER_WORK_QUEUE,
|
||||||
MOAL_END_MAIN_PROCESS };
|
MOAL_START_MAIN_PROCESS,
|
||||||
|
MOAL_END_MAIN_PROCESS
|
||||||
|
};
|
||||||
|
|
||||||
/** HostCmd_Header */
|
/** HostCmd_Header */
|
||||||
typedef struct _HostCmd_Header {
|
typedef struct _HostCmd_Header {
|
||||||
|
@ -1224,7 +1226,7 @@ struct woal_event {
|
||||||
chan_band_info chan_info;
|
chan_band_info chan_info;
|
||||||
woal_evt_buf evt;
|
woal_evt_buf evt;
|
||||||
mlan_ds_assoc_info assoc_info;
|
mlan_ds_assoc_info assoc_info;
|
||||||
int reason_code;
|
mlan_deauth_param deauth_info;
|
||||||
chan_radar_info radar_info;
|
chan_radar_info radar_info;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -1667,7 +1669,7 @@ struct _moal_private {
|
||||||
#endif
|
#endif
|
||||||
#ifdef STA_CFG80211
|
#ifdef STA_CFG80211
|
||||||
#ifdef STA_SUPPORT
|
#ifdef STA_SUPPORT
|
||||||
/** CFG80211 association description */
|
/** CFG80211 association bssid */
|
||||||
t_u8 cfg_bssid[ETH_ALEN];
|
t_u8 cfg_bssid[ETH_ALEN];
|
||||||
/** Disconnect request from CFG80211 */
|
/** Disconnect request from CFG80211 */
|
||||||
bool cfg_disconnect;
|
bool cfg_disconnect;
|
||||||
|
@ -1728,6 +1730,10 @@ struct _moal_private {
|
||||||
t_u8 auth_tx_cnt;
|
t_u8 auth_tx_cnt;
|
||||||
/** deauth evt cnt */
|
/** deauth evt cnt */
|
||||||
t_u8 deauth_evt_cnt;
|
t_u8 deauth_evt_cnt;
|
||||||
|
/** delay deauth event */
|
||||||
|
t_u8 delay_deauth_notify;
|
||||||
|
/** notify bssid */
|
||||||
|
t_u8 bssid_notify[ETH_ALEN];
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_PROC_FS
|
#ifdef CONFIG_PROC_FS
|
||||||
/** Proc entry */
|
/** Proc entry */
|
||||||
|
@ -1933,6 +1939,7 @@ typedef struct _card_info {
|
||||||
t_u8 slew_rate_bit_offset;
|
t_u8 slew_rate_bit_offset;
|
||||||
#endif
|
#endif
|
||||||
#if defined(SDIO) || defined(PCIE)
|
#if defined(SDIO) || defined(PCIE)
|
||||||
|
t_u32 fw_stuck_code_reg;
|
||||||
t_u32 fw_reset_reg;
|
t_u32 fw_reset_reg;
|
||||||
t_u8 fw_reset_val;
|
t_u8 fw_reset_val;
|
||||||
t_u32 fw_wakeup_reg;
|
t_u32 fw_wakeup_reg;
|
||||||
|
@ -2176,7 +2183,8 @@ extern t_u8 ru_signal_52[9];
|
||||||
y = (y + 1) - TONE_MAX_USERS_242; \
|
y = (y + 1) - TONE_MAX_USERS_242; \
|
||||||
} else { \
|
} else { \
|
||||||
tone = (y == 2) ? RU_TONE_106 : \
|
tone = (y == 2) ? RU_TONE_106 : \
|
||||||
(y == 1) ? 0 : RU_TONE_106; \
|
(y == 1) ? 0 : \
|
||||||
|
RU_TONE_106; \
|
||||||
} \
|
} \
|
||||||
} else if (x == RU_40_242_TONE) { \
|
} else if (x == RU_40_242_TONE) { \
|
||||||
if (!y) { \
|
if (!y) { \
|
||||||
|
@ -2377,6 +2385,7 @@ enum ext_mod_params {
|
||||||
EXT_AGGR_CTRL,
|
EXT_AGGR_CTRL,
|
||||||
EXT_LOW_PW_MODE,
|
EXT_LOW_PW_MODE,
|
||||||
#ifdef SDIO
|
#ifdef SDIO
|
||||||
|
EXT_SDIO_RX_AGGR,
|
||||||
#endif
|
#endif
|
||||||
EXT_PMIC,
|
EXT_PMIC,
|
||||||
EXT_DISCONNECT_ON_SUSPEND,
|
EXT_DISCONNECT_ON_SUSPEND,
|
||||||
|
|
|
@ -333,6 +333,8 @@ static mlan_status woal_do_flr(moal_handle *handle, bool prepare, bool flr_flag)
|
||||||
|
|
||||||
if (!prepare)
|
if (!prepare)
|
||||||
goto perform_init;
|
goto perform_init;
|
||||||
|
if (!handle->pmlan_adapter)
|
||||||
|
goto exit;
|
||||||
|
|
||||||
/* Reset all interfaces */
|
/* Reset all interfaces */
|
||||||
priv = woal_get_priv(handle, MLAN_BSS_ROLE_ANY);
|
priv = woal_get_priv(handle, MLAN_BSS_ROLE_ANY);
|
||||||
|
@ -417,6 +419,8 @@ perform_init:
|
||||||
PRINTM(MFATAL, "Software Init Failed\n");
|
PRINTM(MFATAL, "Software Init Failed\n");
|
||||||
goto err_init_fw;
|
goto err_init_fw;
|
||||||
}
|
}
|
||||||
|
if (!handle->pmlan_adapter)
|
||||||
|
goto err_init_fw;
|
||||||
|
|
||||||
#if defined(PCIE9098)
|
#if defined(PCIE9098)
|
||||||
if ((card->dev->device == PCIE_DEVICE_ID_88W9098P_FN1) ||
|
if ((card->dev->device == PCIE_DEVICE_ID_88W9098P_FN1) ||
|
||||||
|
@ -1431,7 +1435,7 @@ static mlan_status woal_pcie_register_dev(moal_handle *handle)
|
||||||
pdev = card->dev;
|
pdev = card->dev;
|
||||||
/* save adapter pointer in card */
|
/* save adapter pointer in card */
|
||||||
card->handle = handle;
|
card->handle = handle;
|
||||||
PRINTM(MERROR, "---yunjie--- woal_pcie_register_dev int mode %d\n", pcie_int_mode);
|
|
||||||
switch (pcie_int_mode) {
|
switch (pcie_int_mode) {
|
||||||
case PCIE_INT_MODE_MSIX:
|
case PCIE_INT_MODE_MSIX:
|
||||||
pcie_int_mode = PCIE_INT_MODE_MSIX;
|
pcie_int_mode = PCIE_INT_MODE_MSIX;
|
||||||
|
@ -1458,8 +1462,8 @@ static mlan_status woal_pcie_register_dev(moal_handle *handle)
|
||||||
&(card->msix_contexts[i]));
|
&(card->msix_contexts[i]));
|
||||||
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
PRINTM(MERROR,
|
PRINTM(MFATAL,
|
||||||
"---yunjie--- request_irq failed: ret=%d\n",
|
"request_irq failed: ret=%d\n",
|
||||||
ret);
|
ret);
|
||||||
for (j = 0; j < i; j++)
|
for (j = 0; j < i; j++)
|
||||||
free_irq(card->msix_entries[j]
|
free_irq(card->msix_entries[j]
|
||||||
|
@ -1483,7 +1487,7 @@ static mlan_status woal_pcie_register_dev(moal_handle *handle)
|
||||||
ret = request_irq(pdev->irq, woal_pcie_interrupt, 0,
|
ret = request_irq(pdev->irq, woal_pcie_interrupt, 0,
|
||||||
"mrvl_pcie_msi", pdev);
|
"mrvl_pcie_msi", pdev);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
PRINTM(MERROR, "---yunjie--- request_irq failed: ret=%d\n",
|
PRINTM(MFATAL, "request_irq failed: ret=%d\n",
|
||||||
ret);
|
ret);
|
||||||
pci_disable_msi(pdev);
|
pci_disable_msi(pdev);
|
||||||
} else {
|
} else {
|
||||||
|
@ -1498,7 +1502,7 @@ static mlan_status woal_pcie_register_dev(moal_handle *handle)
|
||||||
ret = request_irq(pdev->irq, woal_pcie_interrupt, IRQF_SHARED,
|
ret = request_irq(pdev->irq, woal_pcie_interrupt, IRQF_SHARED,
|
||||||
"mrvl_pcie", pdev);
|
"mrvl_pcie", pdev);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
PRINTM(MERROR, "---yunjie--- request_irq failed: ret=%d\n", ret);
|
PRINTM(MFATAL, "request_irq failed: ret=%d\n", ret);
|
||||||
ret = MLAN_STATUS_FAILURE;
|
ret = MLAN_STATUS_FAILURE;
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
@ -1506,7 +1510,7 @@ static mlan_status woal_pcie_register_dev(moal_handle *handle)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
PRINTM(MERROR, "---yunjie--- pcie_int_mode %d failed\n", pcie_int_mode);
|
PRINTM(MFATAL, "pcie_int_mode %d failed\n", pcie_int_mode);
|
||||||
ret = MLAN_STATUS_FAILURE;
|
ret = MLAN_STATUS_FAILURE;
|
||||||
goto done;
|
goto done;
|
||||||
break;
|
break;
|
||||||
|
@ -1702,6 +1706,18 @@ static int woal_pcie_dump_reg_info(moal_handle *phandle, t_u8 *buffer)
|
||||||
drv_ptr += sprintf(drv_ptr, "reg:0x%02x value=0x%08x\n",
|
drv_ptr += sprintf(drv_ptr, "reg:0x%02x value=0x%08x\n",
|
||||||
config_reg_table[i], value);
|
config_reg_table[i], value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
reg = phandle->card_info->fw_stuck_code_reg;
|
||||||
|
if (reg != 0) {
|
||||||
|
woal_pcie_read_reg(phandle, reg, &value);
|
||||||
|
value = (value & 0xff00) >> 8;
|
||||||
|
if (value) {
|
||||||
|
PRINTM(MERROR, "FW in debug mode (0x%x)\n", value);
|
||||||
|
drv_ptr += sprintf(drv_ptr, "FW in debug mode (0x%x)\n",
|
||||||
|
value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
drv_ptr += sprintf(drv_ptr, "FW Scrach Registers:\n");
|
drv_ptr += sprintf(drv_ptr, "FW Scrach Registers:\n");
|
||||||
|
|
||||||
#if defined(PCIE8897) || defined(PCIE8997)
|
#if defined(PCIE8897) || defined(PCIE8997)
|
||||||
|
@ -1851,6 +1867,16 @@ static void woal_pcie_reg_dbg(moal_handle *phandle)
|
||||||
PRINTM(MERROR, "reg:0x%02x value=0x%08x\n", config_reg_table[i],
|
PRINTM(MERROR, "reg:0x%02x value=0x%08x\n", config_reg_table[i],
|
||||||
value);
|
value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
reg = phandle->card_info->fw_stuck_code_reg;
|
||||||
|
if (reg != 0) {
|
||||||
|
woal_pcie_read_reg(phandle, reg, &value);
|
||||||
|
value = (value & 0xff00) >> 8;
|
||||||
|
if (value) {
|
||||||
|
PRINTM(MERROR, "FW in debug mode (0x%x)\n", value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
PRINTM(MMSG, "FW Scrach Registers:\n");
|
PRINTM(MMSG, "FW Scrach Registers:\n");
|
||||||
#if defined(PCIE8897) || defined(PCIE8997)
|
#if defined(PCIE8897) || defined(PCIE8997)
|
||||||
if (IS_PCIE8897(phandle->card_type) ||
|
if (IS_PCIE8897(phandle->card_type) ||
|
||||||
|
|
|
@ -674,6 +674,7 @@ static ssize_t woal_config_write(struct file *f, const char __user *buf,
|
||||||
handle->driver_status = MTRUE;
|
handle->driver_status = MTRUE;
|
||||||
ref_handle = (moal_handle *)handle->pref_mac;
|
ref_handle = (moal_handle *)handle->pref_mac;
|
||||||
if (ref_handle) {
|
if (ref_handle) {
|
||||||
|
ref_handle->driver_status = MTRUE;
|
||||||
priv = woal_get_priv(ref_handle, MLAN_BSS_ROLE_ANY);
|
priv = woal_get_priv(ref_handle, MLAN_BSS_ROLE_ANY);
|
||||||
if (priv) {
|
if (priv) {
|
||||||
ref_handle->fw_dump_status = MTRUE;
|
ref_handle->fw_dump_status = MTRUE;
|
||||||
|
|
|
@ -156,19 +156,27 @@ Change log:
|
||||||
#ifdef SD9177
|
#ifdef SD9177
|
||||||
#define SD9177_A0 0x00
|
#define SD9177_A0 0x00
|
||||||
#define SD9177_A1 0x01
|
#define SD9177_A1 0x01
|
||||||
#define SD9177_DEFAULT_COMBO_FW_NAME "nxp/sdsd_nw61x.bin"
|
#define SD9177_DEFAULT_COMBO_FW_NAME "nxp/sdsd_nw61x.bin.se"
|
||||||
#define SD9177_DEFAULT_COMBO_V1_FW_NAME "nxp/sduart_nw61x_v1.bin"
|
#define SD9177_DEFAULT_COMBO_V1_FW_NAME "nxp/sduart_nw61x_v1.bin.se"
|
||||||
#define SDUART9177_DEFAULT_COMBO_FW_NAME "nxp/sduart_nw61x.bin"
|
#define SDUART9177_DEFAULT_COMBO_FW_NAME "nxp/sduart_nw61x.bin.se"
|
||||||
#define SDSD9177_DEFAULT_COMBO_FW_NAME "nxp/sdsd_nw61x.bin"
|
#define SDSD9177_DEFAULT_COMBO_FW_NAME "nxp/sdsd_nw61x.bin.se"
|
||||||
#define SD9177_DEFAULT_WLAN_FW_NAME "nxp/sd_w61x.bin"
|
#define SD9177_DEFAULT_WLAN_FW_NAME "nxp/sd_w61x.bin.se"
|
||||||
#define SDUART9177_DEFAULT_COMBO_V1_FW_NAME "nxp/sduart_nw61x_v1.bin"
|
#define SDUART9177_DEFAULT_COMBO_V1_FW_NAME "nxp/sduart_nw61x_v1.bin.se"
|
||||||
#define SDSD9177_DEFAULT_COMBO_V1_FW_NAME "nxp/sdsd_nw61x_v1.bin"
|
#define SDSD9177_DEFAULT_COMBO_V1_FW_NAME "nxp/sdsd_nw61x_v1.bin.se"
|
||||||
#define SD9177_DEFAULT_WLAN_V1_FW_NAME "nxp/sd_w61x_v1.bin"
|
#define SD9177_DEFAULT_WLAN_V1_FW_NAME "nxp/sd_w61x_v1.bin.se"
|
||||||
#define SDUART9177_DEFAULT_RFTM_COMBO_V1_FW_NAME "nxp/sduart_nw61x_rftm_v1.bin"
|
#define SDUART9177_DEFAULT_RFTM_COMBO_V1_FW_NAME \
|
||||||
#define SDSD9177_DEFAULT_RFTM_COMBO_V1_FW_NAME "nxp/sdsd_nw61x_rftm_v1.bin"
|
"nxp/sduart_nw61x_rftm_v1.bin.se"
|
||||||
#define SD9177_DEFAULT_RFTM_WLAN_V1_FW_NAME "nxp/sd_w61x_rftm_v1.bin"
|
#define SDSD9177_DEFAULT_RFTM_COMBO_V1_FW_NAME "nxp/sdsd_nw61x_rftm_v1.bin.se"
|
||||||
|
#define SD9177_DEFAULT_RFTM_WLAN_V1_FW_NAME "nxp/sd_w61x_rftm_v1.bin.se"
|
||||||
#endif /* SD9177 */
|
#endif /* SD9177 */
|
||||||
|
|
||||||
|
#ifdef SDIW615
|
||||||
|
#define SDIW615_DEFAULT_COMBO_FW_NAME "nxp/sdsdiw615_combo.bin"
|
||||||
|
#define SDUARTIW615_COMBO_FW_NAME "nxp/sduartiw615_combo.bin"
|
||||||
|
#define SDSDIW615_COMBO_FW_NAME "sdsdiw615_combo.bin"
|
||||||
|
#define SDIW615_DEFAULT_WLAN_FW_NAME "nxp/sdiw615_wlan.bin"
|
||||||
|
#endif /* SDIW615 */
|
||||||
|
|
||||||
/********************************************************
|
/********************************************************
|
||||||
Global Functions
|
Global Functions
|
||||||
********************************************************/
|
********************************************************/
|
||||||
|
|
|
@ -96,6 +96,10 @@ static moal_if_ops sdiommc_ops;
|
||||||
/** Device ID for SDIW624 */
|
/** Device ID for SDIW624 */
|
||||||
#define SD_DEVICE_ID_IW624 (0x020D)
|
#define SD_DEVICE_ID_IW624 (0x020D)
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef SDIW615
|
||||||
|
/** Device ID for SDIW615 */
|
||||||
|
#define SD_DEVICE_ID_IW615 (0x020D)
|
||||||
|
#endif
|
||||||
|
|
||||||
/** WLAN IDs */
|
/** WLAN IDs */
|
||||||
static const struct sdio_device_id wlan_ids[] = {
|
static const struct sdio_device_id wlan_ids[] = {
|
||||||
|
@ -132,6 +136,9 @@ static const struct sdio_device_id wlan_ids[] = {
|
||||||
#endif
|
#endif
|
||||||
#ifdef SDIW624
|
#ifdef SDIW624
|
||||||
{SDIO_DEVICE(NXP_VENDOR_ID, SD_DEVICE_ID_IW624)},
|
{SDIO_DEVICE(NXP_VENDOR_ID, SD_DEVICE_ID_IW624)},
|
||||||
|
#endif
|
||||||
|
#ifdef SDIW615
|
||||||
|
{SDIO_DEVICE(NXP_VENDOR_ID, SD_DEVICE_ID_IW615)},
|
||||||
#endif
|
#endif
|
||||||
{},
|
{},
|
||||||
};
|
};
|
||||||
|
@ -463,6 +470,20 @@ static t_u16 woal_update_card_type(t_void *card)
|
||||||
strlen(driver_version) -
|
strlen(driver_version) -
|
||||||
(strlen(INTF_CARDTYPE) + strlen(KERN_VERSION)));
|
(strlen(INTF_CARDTYPE) + strlen(KERN_VERSION)));
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef SDIW615
|
||||||
|
if (cardp_sd->func->device == SD_DEVICE_ID_IW615) {
|
||||||
|
card_type = CARD_TYPE_SDIW615;
|
||||||
|
moal_memcpy_ext(NULL, driver_version, CARD_SDIW615,
|
||||||
|
strlen(CARD_SDIW615), strlen(driver_version));
|
||||||
|
moal_memcpy_ext(
|
||||||
|
NULL,
|
||||||
|
driver_version + strlen(INTF_CARDTYPE) +
|
||||||
|
strlen(KERN_VERSION),
|
||||||
|
V18, strlen(V18),
|
||||||
|
strlen(driver_version) -
|
||||||
|
(strlen(INTF_CARDTYPE) + strlen(KERN_VERSION)));
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
return card_type;
|
return card_type;
|
||||||
}
|
}
|
||||||
|
@ -1446,7 +1467,7 @@ static mlan_status woal_sdiommc_get_fw_name(moal_handle *handle)
|
||||||
|
|
||||||
#if defined(SD8987) || defined(SD8997) || defined(SD9098) || \
|
#if defined(SD8987) || defined(SD8997) || defined(SD9098) || \
|
||||||
defined(SD9097) || defined(SDIW624) || defined(SD8978) || \
|
defined(SD9097) || defined(SDIW624) || defined(SD8978) || \
|
||||||
defined(SD9177)
|
defined(SD9177) || defined(SDIW615)
|
||||||
t_u32 magic_reg = handle->card_info->magic_reg;
|
t_u32 magic_reg = handle->card_info->magic_reg;
|
||||||
t_u32 magic = 0;
|
t_u32 magic = 0;
|
||||||
t_u32 host_strap_reg = handle->card_info->host_strap_reg;
|
t_u32 host_strap_reg = handle->card_info->host_strap_reg;
|
||||||
|
@ -1467,7 +1488,7 @@ static mlan_status woal_sdiommc_get_fw_name(moal_handle *handle)
|
||||||
|
|
||||||
#if defined(SD8987) || defined(SD8997) || defined(SD9098) || \
|
#if defined(SD8987) || defined(SD8997) || defined(SD9098) || \
|
||||||
defined(SD9097) || defined(SDIW624) || defined(SD8978) || \
|
defined(SD9097) || defined(SDIW624) || defined(SD8978) || \
|
||||||
defined(SD9177)
|
defined(SD9177) || defined(SDIW615)
|
||||||
/** Revision ID register */
|
/** Revision ID register */
|
||||||
woal_sdiommc_read_reg(handle, magic_reg, &magic);
|
woal_sdiommc_read_reg(handle, magic_reg, &magic);
|
||||||
/** Revision ID register */
|
/** Revision ID register */
|
||||||
|
@ -1720,6 +1741,19 @@ static mlan_status woal_sdiommc_get_fw_name(moal_handle *handle)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef SDIW615
|
||||||
|
if (IS_SDIW615(handle->card_type)) {
|
||||||
|
if (magic == CHIP_MAGIC_VALUE) {
|
||||||
|
if (strap == CARD_TYPE_SD_UART)
|
||||||
|
strcpy(handle->card_info->fw_name,
|
||||||
|
SDUARTIW615_COMBO_FW_NAME);
|
||||||
|
else
|
||||||
|
strcpy(handle->card_info->fw_name,
|
||||||
|
SDSDIW615_COMBO_FW_NAME);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
done:
|
done:
|
||||||
PRINTM(MCMND, "combo fw:%s wlan fw:%s \n", handle->card_info->fw_name,
|
PRINTM(MCMND, "combo fw:%s wlan fw:%s \n", handle->card_info->fw_name,
|
||||||
handle->card_info->fw_name_wlan);
|
handle->card_info->fw_name_wlan);
|
||||||
|
@ -2573,6 +2607,15 @@ static void woal_sdiommc_reg_dbg(moal_handle *phandle)
|
||||||
char buf[256], *ptr;
|
char buf[256], *ptr;
|
||||||
|
|
||||||
mlan_pm_wakeup_card(phandle->pmlan_adapter, MTRUE);
|
mlan_pm_wakeup_card(phandle->pmlan_adapter, MTRUE);
|
||||||
|
|
||||||
|
reg = phandle->card_info->fw_stuck_code_reg;
|
||||||
|
if (reg != 0) {
|
||||||
|
ret = woal_sdio_readb(phandle, reg, &data);
|
||||||
|
if (!ret && data) {
|
||||||
|
PRINTM(MERROR, "FW in debug mode (0x%x)\n", data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (loop = 0; loop < 5; loop++) {
|
for (loop = 0; loop < 5; loop++) {
|
||||||
memset(buf, 0, sizeof(buf));
|
memset(buf, 0, sizeof(buf));
|
||||||
ptr = buf;
|
ptr = buf;
|
||||||
|
@ -2718,6 +2761,16 @@ static int woal_sdiommc_dump_reg_info(moal_handle *phandle, t_u8 *drv_buf)
|
||||||
|
|
||||||
mlan_pm_wakeup_card(phandle->pmlan_adapter, MTRUE);
|
mlan_pm_wakeup_card(phandle->pmlan_adapter, MTRUE);
|
||||||
|
|
||||||
|
reg = phandle->card_info->fw_stuck_code_reg;
|
||||||
|
if (reg != 0) {
|
||||||
|
ret = woal_sdio_readb(phandle, reg, &data);
|
||||||
|
if (!ret && data) {
|
||||||
|
PRINTM(MERROR, "FW in debug mode (0x%x)\n", data);
|
||||||
|
drv_ptr += snprintf(drv_ptr, MAX_BUF_LEN,
|
||||||
|
"FW in debug mode (0x%x)\n", data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
drv_ptr += snprintf(drv_ptr, MAX_BUF_LEN,
|
drv_ptr += snprintf(drv_ptr, MAX_BUF_LEN,
|
||||||
"--------sdio_reg_debug_info---------\n");
|
"--------sdio_reg_debug_info---------\n");
|
||||||
for (loop = 0; loop < 5; loop++) {
|
for (loop = 0; loop < 5; loop++) {
|
||||||
|
@ -2877,10 +2930,11 @@ static int woal_sdiommc_reset_fw(moal_handle *handle)
|
||||||
ret = -EFAULT;
|
ret = -EFAULT;
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
#if defined(SD9098) || defined(SD9097) || defined(SDIW624) || defined(SD9177)
|
#if defined(SD9098) || defined(SD9097) || defined(SDIW624) || \
|
||||||
|
defined(SD9177) || defined(SDIW615)
|
||||||
if (IS_SD9098(handle->card_type) || IS_SD9097(handle->card_type) ||
|
if (IS_SD9098(handle->card_type) || IS_SD9097(handle->card_type) ||
|
||||||
IS_SDIW624(handle->card_type) || IS_SD9177(handle->card_type) ||
|
IS_SDIW624(handle->card_type) || IS_SD9177(handle->card_type) ||
|
||||||
IS_SDAW693(handle->card_type))
|
IS_SDIW615(handle->card_type) || IS_SDAW693(handle->card_type))
|
||||||
handle->ops.write_reg(handle, 0x00, 0x10);
|
handle->ops.write_reg(handle, 0x00, 0x10);
|
||||||
#endif
|
#endif
|
||||||
/* Poll register around 100 ms */
|
/* Poll register around 100 ms */
|
||||||
|
|
|
@ -2955,10 +2955,11 @@ mlan_status moal_recv_event(t_void *pmoal, pmlan_event pmevent)
|
||||||
|
|
||||||
if (!is_zero_timeval(priv->phandle->scan_time_start)) {
|
if (!is_zero_timeval(priv->phandle->scan_time_start)) {
|
||||||
woal_get_monotonic_time(&priv->phandle->scan_time_end);
|
woal_get_monotonic_time(&priv->phandle->scan_time_end);
|
||||||
priv->phandle->scan_time += (t_u64)(
|
priv->phandle->scan_time +=
|
||||||
timeval_to_usec(priv->phandle->scan_time_end) -
|
(t_u64)(timeval_to_usec(
|
||||||
timeval_to_usec(
|
priv->phandle->scan_time_end) -
|
||||||
priv->phandle->scan_time_start));
|
timeval_to_usec(
|
||||||
|
priv->phandle->scan_time_start));
|
||||||
PRINTM(MINFO,
|
PRINTM(MINFO,
|
||||||
"%s : start_timeval=%d:%d end_timeval=%d:%d inter=%llu scan_time=%llu\n",
|
"%s : start_timeval=%d:%d end_timeval=%d:%d inter=%llu scan_time=%llu\n",
|
||||||
__func__,
|
__func__,
|
||||||
|
@ -3293,6 +3294,12 @@ mlan_status moal_recv_event(t_void *pmoal, pmlan_event pmevent)
|
||||||
0,
|
0,
|
||||||
#endif
|
#endif
|
||||||
GFP_KERNEL);
|
GFP_KERNEL);
|
||||||
|
/* sending becon_loss event will help supplicant to roam to other APs if
|
||||||
|
* available on the same Network */
|
||||||
|
#if CFG80211_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
|
||||||
|
cfg80211_cqm_beacon_loss_notify(priv->netdev,
|
||||||
|
GFP_KERNEL);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
priv->last_event |= EVENT_PRE_BCN_LOST;
|
priv->last_event |= EVENT_PRE_BCN_LOST;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2181,6 +2181,7 @@ static int woal_cfg80211_authenticate(struct wiphy *wiphy,
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
priv->cfg_disconnect = MFALSE;
|
priv->cfg_disconnect = MFALSE;
|
||||||
|
priv->delay_deauth_notify = MFALSE;
|
||||||
#ifdef UAP_CFG80211
|
#ifdef UAP_CFG80211
|
||||||
if (GET_BSS_ROLE(priv) == MLAN_BSS_ROLE_UAP) {
|
if (GET_BSS_ROLE(priv) == MLAN_BSS_ROLE_UAP) {
|
||||||
PRINTM(MERROR, "ERR: Role is AP\n");
|
PRINTM(MERROR, "ERR: Role is AP\n");
|
||||||
|
@ -5512,12 +5513,9 @@ static int woal_cfg80211_deauthenticate(struct wiphy *wiphy,
|
||||||
|
|
||||||
#if CFG80211_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
|
#if CFG80211_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
|
||||||
if (priv->host_mlme) {
|
if (priv->host_mlme) {
|
||||||
priv->host_mlme = MFALSE;
|
priv->delay_deauth_notify = MTRUE;
|
||||||
priv->auth_flag = 0;
|
moal_memcpy_ext(priv->phandle, priv->bssid_notify, req->bssid,
|
||||||
priv->auth_alg = 0xFFFF;
|
MLAN_MAC_ADDR_LENGTH, MLAN_MAC_ADDR_LENGTH);
|
||||||
/*send deauth packet to notify disconnection to wpa_supplicant
|
|
||||||
*/
|
|
||||||
woal_deauth_event(priv, req->reason_code);
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -5560,12 +5558,15 @@ static int woal_cfg80211_disassociate(struct wiphy *wiphy,
|
||||||
|
|
||||||
#if CFG80211_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
|
#if CFG80211_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
|
||||||
if (priv->host_mlme) {
|
if (priv->host_mlme) {
|
||||||
priv->host_mlme = MFALSE;
|
priv->delay_deauth_notify = MTRUE;
|
||||||
priv->auth_flag = 0;
|
#if CFG80211_VERSION_CODE >= KERNEL_VERSION(6, 0, 0)
|
||||||
priv->auth_alg = 0xFFFF;
|
moal_memcpy_ext(priv->phandle, priv->bssid_notify, req->ap_addr,
|
||||||
/*send deauth packet to notify disconnection to wpa_supplicant
|
MLAN_MAC_ADDR_LENGTH, MLAN_MAC_ADDR_LENGTH);
|
||||||
*/
|
#else
|
||||||
woal_deauth_event(priv, req->reason_code);
|
moal_memcpy_ext(priv->phandle, priv->bssid_notify,
|
||||||
|
req->bss->bssid, MLAN_MAC_ADDR_LENGTH,
|
||||||
|
MLAN_MAC_ADDR_LENGTH);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -6842,7 +6843,20 @@ int woal_cfg80211_suspend(struct wiphy *wiphy, struct cfg80211_wowlan *wow)
|
||||||
|
|
||||||
handle->cfg80211_suspend = MTRUE;
|
handle->cfg80211_suspend = MTRUE;
|
||||||
if (!wow) {
|
if (!wow) {
|
||||||
PRINTM(MERROR, "None of the WOWLAN triggers enabled\n");
|
PRINTM(MEVENT,
|
||||||
|
"None of the WOWLAN triggers enabled in suspend\n");
|
||||||
|
#if CFG80211_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
|
||||||
|
if (priv->delay_deauth_notify) {
|
||||||
|
priv->delay_deauth_notify = MFALSE;
|
||||||
|
priv->host_mlme = MFALSE;
|
||||||
|
priv->auth_flag = 0;
|
||||||
|
priv->auth_alg = 0xFFFF;
|
||||||
|
/*send deauth packet to notify disconnection to
|
||||||
|
* wpa_supplicant */
|
||||||
|
woal_deauth_event(priv, MLAN_REASON_DEAUTH_LEAVING,
|
||||||
|
priv->bssid_notify);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
ret = 0;
|
ret = 0;
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
@ -7923,20 +7937,30 @@ static int woal_send_tdls_action_frame(struct wiphy *wiphy,
|
||||||
t_u16 pkt_len;
|
t_u16 pkt_len;
|
||||||
t_u16 packet_len;
|
t_u16 packet_len;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
t_u16 buf_size = 0;
|
||||||
|
|
||||||
ENTER();
|
ENTER();
|
||||||
|
|
||||||
#define HEADER_SIZE 8 /* pkt_type + tx_control */
|
#define HEADER_SIZE 8 /* pkt_type + tx_control */
|
||||||
|
|
||||||
pmbuf = woal_alloc_mlan_buffer(
|
woal_secure_add(&buf_size, MLAN_MIN_DATA_HEADER_LEN, &buf_size,
|
||||||
priv->phandle,
|
TYPE_UINT32);
|
||||||
((int)((MLAN_MIN_DATA_HEADER_LEN + HEADER_SIZE +
|
woal_secure_add(&buf_size, HEADER_SIZE, &buf_size, TYPE_UINT32);
|
||||||
sizeof(pkt_len) +
|
woal_secure_add(&buf_size, sizeof(pkt_len), &buf_size, TYPE_UINT32);
|
||||||
|
woal_secure_add(&buf_size,
|
||||||
max(sizeof(struct ieee80211_mgmt),
|
max(sizeof(struct ieee80211_mgmt),
|
||||||
sizeof(struct ieee80211_tdls_data))) +
|
sizeof(struct ieee80211_tdls_data)),
|
||||||
50 + /* supported rates */
|
&buf_size, TYPE_UINT32);
|
||||||
sizeof(IEEEtypes_ExtCap_t) + /* ext capab */
|
/* supported rates */
|
||||||
extra_ies_len + sizeof(IEEEtypes_tdls_linkie))));
|
woal_secure_add(&buf_size, 50, &buf_size, TYPE_UINT32);
|
||||||
|
/* ext capab */
|
||||||
|
woal_secure_add(&buf_size, sizeof(IEEEtypes_ExtCap_t), &buf_size,
|
||||||
|
TYPE_UINT32);
|
||||||
|
woal_secure_add(&buf_size, extra_ies_len, &buf_size, TYPE_UINT32);
|
||||||
|
woal_secure_add(&buf_size, sizeof(IEEEtypes_tdls_linkie), &buf_size,
|
||||||
|
TYPE_UINT32);
|
||||||
|
pmbuf = woal_alloc_mlan_buffer(priv->phandle, buf_size);
|
||||||
|
|
||||||
if (!pmbuf) {
|
if (!pmbuf) {
|
||||||
PRINTM(MERROR, "Fail to allocate mlan_buffer\n");
|
PRINTM(MERROR, "Fail to allocate mlan_buffer\n");
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
|
@ -9620,8 +9644,8 @@ void woal_host_mlme_disconnect(moal_private *priv, u16 reason_code, u8 *sa)
|
||||||
moal_memcpy_ext(priv->phandle, mgmt->sa,
|
moal_memcpy_ext(priv->phandle, mgmt->sa,
|
||||||
priv->sme_current.bssid, ETH_ALEN,
|
priv->sme_current.bssid, ETH_ALEN,
|
||||||
sizeof(mgmt->sa));
|
sizeof(mgmt->sa));
|
||||||
moal_memcpy_ext(priv->phandle, mgmt->bssid, priv->cfg_bssid,
|
moal_memcpy_ext(priv->phandle, mgmt->bssid, sa, ETH_ALEN,
|
||||||
ETH_ALEN, sizeof(mgmt->bssid));
|
sizeof(mgmt->bssid));
|
||||||
priv->host_mlme = MFALSE;
|
priv->host_mlme = MFALSE;
|
||||||
priv->auth_flag = 0;
|
priv->auth_flag = 0;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -4609,12 +4609,13 @@ int woal_uap_do_ioctl(struct net_device *dev, struct ifreq *req, int cmd)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
ENTER();
|
ENTER();
|
||||||
|
#if 0
|
||||||
#ifdef CONFIG_COMPAT
|
#ifdef CONFIG_COMPAT
|
||||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 15, 0)
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 15, 0)
|
||||||
if (in_compat_syscall()) /* not implemented yet */
|
if (in_compat_syscall()) /* not implemented yet */
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
|
|
|
@ -3438,9 +3438,9 @@ int woal_uap_cfg80211_dump_station(struct wiphy *wiphy, struct net_device *dev,
|
||||||
if (info->param.sta_list.info[idx].stats.last_rx_in_msec) {
|
if (info->param.sta_list.info[idx].stats.last_rx_in_msec) {
|
||||||
moal_get_system_time(priv->phandle, &sec, &usec);
|
moal_get_system_time(priv->phandle, &sec, &usec);
|
||||||
cur_msec = (t_u64)sec * 1000 + (t_u64)usec / 1000;
|
cur_msec = (t_u64)sec * 1000 + (t_u64)usec / 1000;
|
||||||
sinfo->inactive_time = (t_u32)(
|
sinfo->inactive_time =
|
||||||
cur_msec -
|
(t_u32)(cur_msec - info->param.sta_list.info[idx]
|
||||||
info->param.sta_list.info[idx].stats.last_rx_in_msec);
|
.stats.last_rx_in_msec);
|
||||||
PRINTM(MIOCTL,
|
PRINTM(MIOCTL,
|
||||||
"cur:%llu - [%d].last_rx:%llu = inactive_time:%d\n",
|
"cur:%llu - [%d].last_rx:%llu = inactive_time:%d\n",
|
||||||
cur_msec, idx,
|
cur_msec, idx,
|
||||||
|
|
|
@ -35,7 +35,7 @@ extern struct semaphore AddRemoveCardSem;
|
||||||
********************************************************/
|
********************************************************/
|
||||||
|
|
||||||
#if defined(USB8997) || defined(USB9098) || defined(USB9097) || \
|
#if defined(USB8997) || defined(USB9098) || defined(USB9097) || \
|
||||||
defined(USB8978) || defined(USBIW624)
|
defined(USB8978) || defined(USBIW624) || defined(USBIW615)
|
||||||
/** Card-type detection frame response */
|
/** Card-type detection frame response */
|
||||||
typedef struct {
|
typedef struct {
|
||||||
/** 32-bit ACK+WINNER field */
|
/** 32-bit ACK+WINNER field */
|
||||||
|
@ -100,6 +100,12 @@ static struct usb_device_id woal_usb_table[] = {
|
||||||
"NXP WLAN USB Adapter")},
|
"NXP WLAN USB Adapter")},
|
||||||
{NXP_USB_DEVICE(USBIW624_VID_1, USBIW624_PID_2,
|
{NXP_USB_DEVICE(USBIW624_VID_1, USBIW624_PID_2,
|
||||||
"NXP WLAN USB Adapter")},
|
"NXP WLAN USB Adapter")},
|
||||||
|
#endif
|
||||||
|
#ifdef USBIW615
|
||||||
|
{NXP_USB_DEVICE(USBIW615_VID_1, USBIW615_PID_1,
|
||||||
|
"NXP WLAN USB Adapter")},
|
||||||
|
{NXP_USB_DEVICE(USBIW615_VID_1, USBIW615_PID_2,
|
||||||
|
"NXP WLAN USB Adapter")},
|
||||||
#endif
|
#endif
|
||||||
/* Terminating entry */
|
/* Terminating entry */
|
||||||
{},
|
{},
|
||||||
|
@ -131,6 +137,10 @@ static struct usb_device_id woal_usb_table_skip_fwdnld[] = {
|
||||||
#ifdef USBIW624
|
#ifdef USBIW624
|
||||||
{NXP_USB_DEVICE(USBIW624_VID_1, USBIW624_PID_2,
|
{NXP_USB_DEVICE(USBIW624_VID_1, USBIW624_PID_2,
|
||||||
"NXP WLAN USB Adapter")},
|
"NXP WLAN USB Adapter")},
|
||||||
|
#endif
|
||||||
|
#ifdef USBIW615
|
||||||
|
{NXP_USB_DEVICE(USBIW615_VID_1, USBIW615_PID_2,
|
||||||
|
"NXP WLAN USB Adapter")},
|
||||||
#endif
|
#endif
|
||||||
/* Terminating entry */
|
/* Terminating entry */
|
||||||
{},
|
{},
|
||||||
|
@ -497,7 +507,7 @@ rx_ret:
|
||||||
********************************************************/
|
********************************************************/
|
||||||
|
|
||||||
#if defined(USB8997) || defined(USB9098) || defined(USB9097) || \
|
#if defined(USB8997) || defined(USB9098) || defined(USB9097) || \
|
||||||
defined(USB8978) || defined(USBIW624)
|
defined(USB8978) || defined(USBIW624) || defined(USBIW615)
|
||||||
/**
|
/**
|
||||||
* @brief Check chip revision
|
* @brief Check chip revision
|
||||||
*
|
*
|
||||||
|
@ -825,6 +835,22 @@ static t_u16 woal_update_card_type(t_void *card)
|
||||||
strlen(driver_version) - strlen(INTF_CARDTYPE) -
|
strlen(driver_version) - strlen(INTF_CARDTYPE) -
|
||||||
strlen(KERN_VERSION));
|
strlen(KERN_VERSION));
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef USBIW615
|
||||||
|
if (woal_cpu_to_le16(cardp_usb->udev->descriptor.idProduct) ==
|
||||||
|
(__force __le16)USBIW615_PID_1 ||
|
||||||
|
woal_cpu_to_le16(cardp_usb->udev->descriptor.idProduct) ==
|
||||||
|
(__force __le16)USBIW615_PID_2) {
|
||||||
|
card_type = CARD_TYPE_USBIW615;
|
||||||
|
moal_memcpy_ext(NULL, driver_version, CARD_USBIW615,
|
||||||
|
strlen(CARD_USBIW615), strlen(driver_version));
|
||||||
|
moal_memcpy_ext(NULL,
|
||||||
|
driver_version + strlen(INTF_CARDTYPE) +
|
||||||
|
strlen(KERN_VERSION),
|
||||||
|
V17, strlen(V17),
|
||||||
|
strlen(driver_version) - strlen(INTF_CARDTYPE) -
|
||||||
|
strlen(KERN_VERSION));
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
return card_type;
|
return card_type;
|
||||||
}
|
}
|
||||||
|
@ -896,6 +922,9 @@ static int woal_usb_probe(struct usb_interface *intf,
|
||||||
#ifdef USBIW624
|
#ifdef USBIW624
|
||||||
case (__force __le16)USBIW624_PID_1:
|
case (__force __le16)USBIW624_PID_1:
|
||||||
#endif /* USBIW624 */
|
#endif /* USBIW624 */
|
||||||
|
#ifdef USBIW615
|
||||||
|
case (__force __le16)USBIW615_PID_1:
|
||||||
|
#endif /* USBIW615 */
|
||||||
|
|
||||||
/* If skip FW is set, we must return error so
|
/* If skip FW is set, we must return error so
|
||||||
* the next driver can download the FW */
|
* the next driver can download the FW */
|
||||||
|
@ -926,6 +955,9 @@ static int woal_usb_probe(struct usb_interface *intf,
|
||||||
#ifdef USBIW624
|
#ifdef USBIW624
|
||||||
case (__force __le16)USBIW624_PID_2:
|
case (__force __le16)USBIW624_PID_2:
|
||||||
#endif /* USBIW624 */
|
#endif /* USBIW624 */
|
||||||
|
#ifdef USBIW615
|
||||||
|
case (__force __le16)USBIW615_PID_2:
|
||||||
|
#endif /* USBIW615 */
|
||||||
|
|
||||||
usb_cardp->boot_state = USB_FW_READY;
|
usb_cardp->boot_state = USB_FW_READY;
|
||||||
break;
|
break;
|
||||||
|
@ -2064,7 +2096,7 @@ static mlan_status woal_usb_get_fw_name(moal_handle *handle)
|
||||||
{
|
{
|
||||||
mlan_status ret = MLAN_STATUS_SUCCESS;
|
mlan_status ret = MLAN_STATUS_SUCCESS;
|
||||||
#if defined(USB8997) || defined(USB9098) || defined(USB9097) || \
|
#if defined(USB8997) || defined(USB9098) || defined(USB9097) || \
|
||||||
defined(USB8978) || defined(USBIW624)
|
defined(USB8978) || defined(USBIW624) || defined(USBIW615)
|
||||||
t_u32 revision_id = 0;
|
t_u32 revision_id = 0;
|
||||||
t_u32 strap = 0;
|
t_u32 strap = 0;
|
||||||
t_u32 boot_mode = 0;
|
t_u32 boot_mode = 0;
|
||||||
|
@ -2085,7 +2117,7 @@ static mlan_status woal_usb_get_fw_name(moal_handle *handle)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(USB8997) || defined(USB9098) || defined(USB9097) || \
|
#if defined(USB8997) || defined(USB9098) || defined(USB9097) || \
|
||||||
defined(USB8978) || defined(USBIW624)
|
defined(USB8978) || defined(USBIW624) || defined(USBIW615)
|
||||||
ret = woal_check_chip_revision(handle, &revision_id, &strap,
|
ret = woal_check_chip_revision(handle, &revision_id, &strap,
|
||||||
&boot_mode);
|
&boot_mode);
|
||||||
if (ret != MLAN_STATUS_SUCCESS) {
|
if (ret != MLAN_STATUS_SUCCESS) {
|
||||||
|
@ -2203,6 +2235,16 @@ static mlan_status woal_usb_get_fw_name(moal_handle *handle)
|
||||||
USBUSBIW624_COMBO_FW_NAME, FW_NAMW_MAX_LEN);
|
USBUSBIW624_COMBO_FW_NAME, FW_NAMW_MAX_LEN);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef USBIW615
|
||||||
|
if (IS_USBIW615(handle->card_type)) {
|
||||||
|
if (strap == CARD_TYPE_USB_UART)
|
||||||
|
strcpy(handle->card_info->fw_name,
|
||||||
|
USBUARTIW615_COMBO_FW_NAME);
|
||||||
|
else
|
||||||
|
strcpy(handle->card_info->fw_name,
|
||||||
|
USBUSBIW615_COMBO_FW_NAME);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
done:
|
done:
|
||||||
PRINTM(MCMND, "combo fw:%s wlan fw:%s \n", handle->card_info->fw_name,
|
PRINTM(MCMND, "combo fw:%s wlan fw:%s \n", handle->card_info->fw_name,
|
||||||
|
|
|
@ -98,6 +98,15 @@ Change Log:
|
||||||
#define USBIW624_PID_2 0x020F
|
#define USBIW624_PID_2 0x020F
|
||||||
#endif /* USBIW624 */
|
#endif /* USBIW624 */
|
||||||
|
|
||||||
|
#ifdef USBIW615
|
||||||
|
/** USB VID 1 */
|
||||||
|
#define USBIW615_VID_1 0x0471
|
||||||
|
/** USB PID 1 */
|
||||||
|
#define USBIW615_PID_1 0x021E
|
||||||
|
/** USB PID 2 */
|
||||||
|
#define USBIW615_PID_2 0x021F
|
||||||
|
#endif /* USBIW615 */
|
||||||
|
|
||||||
/** Boot state: FW download */
|
/** Boot state: FW download */
|
||||||
#define USB_FW_DNLD 1
|
#define USB_FW_DNLD 1
|
||||||
/** Boot state: FW ready */
|
/** Boot state: FW ready */
|
||||||
|
@ -110,7 +119,8 @@ Change Log:
|
||||||
#define MVUSB_RX_DATA_URB 6
|
#define MVUSB_RX_DATA_URB 6
|
||||||
|
|
||||||
#if defined(USB8997) || defined(USB9098) || defined(USB9097) || \
|
#if defined(USB8997) || defined(USB9098) || defined(USB9097) || \
|
||||||
defined(USB8978) || defined(USB8801) || defined(USBIW624)
|
defined(USB8978) || defined(USB8801) || defined(USBIW624) || \
|
||||||
|
defined(USBIW615)
|
||||||
/* Transmit buffer size for chip revision check */
|
/* Transmit buffer size for chip revision check */
|
||||||
#define CHIP_REV_TX_BUF_SIZE 16
|
#define CHIP_REV_TX_BUF_SIZE 16
|
||||||
/* Receive buffer size for chip revision check */
|
/* Receive buffer size for chip revision check */
|
||||||
|
@ -174,11 +184,18 @@ Change Log:
|
||||||
|
|
||||||
#ifdef USBIW624
|
#ifdef USBIW624
|
||||||
#define USBIW624_DEFAULT_COMBO_FW_NAME "nxp/usbusbiw624_combo.bin"
|
#define USBIW624_DEFAULT_COMBO_FW_NAME "nxp/usbusbiw624_combo.bin"
|
||||||
#define USBUARTIW624_COMBO_FW_NAME "nxp/usbusbiw624_combo.bin"
|
#define USBUARTIW624_COMBO_FW_NAME "nxp/usbuartiw624_combo.bin"
|
||||||
#define USBUSBIW624_COMBO_FW_NAME "nxp/usbusbiw624_combo.bin"
|
#define USBUSBIW624_COMBO_FW_NAME "nxp/usbusbiw624_combo.bin"
|
||||||
#define USBIW624_DEFAULT_WLAN_FW_NAME "nxp/usbiw624_wlan.bin"
|
#define USBIW624_DEFAULT_WLAN_FW_NAME "nxp/usbiw624_wlan.bin"
|
||||||
#endif /* USBIW624 */
|
#endif /* USBIW624 */
|
||||||
|
|
||||||
|
#ifdef USBIW615
|
||||||
|
#define USBIW615_DEFAULT_COMBO_FW_NAME "nxp/usbusbiw615_combo.bin"
|
||||||
|
#define USBUARTIW615_COMBO_FW_NAME "nxp/usbuartiw615_combo.bin"
|
||||||
|
#define USBUSBIW615_COMBO_FW_NAME "nxp/usbusbiw615_combo.bin"
|
||||||
|
#define USBIW615_DEFAULT_WLAN_FW_NAME "nxp/usbiw615_wlan.bin"
|
||||||
|
#endif /* USBIW615 */
|
||||||
|
|
||||||
/** urb context */
|
/** urb context */
|
||||||
typedef struct _urb_context {
|
typedef struct _urb_context {
|
||||||
/** Pointer to moal_handle structure */
|
/** Pointer to moal_handle structure */
|
||||||
|
|
|
@ -3156,8 +3156,8 @@ static int woal_get_scan(struct net_device *dev, struct iw_request_info *info,
|
||||||
|
|
||||||
while ((unsigned int)beacon_size >=
|
while ((unsigned int)beacon_size >=
|
||||||
sizeof(IEEEtypes_Header_t)) {
|
sizeof(IEEEtypes_Header_t)) {
|
||||||
element_id = (IEEEtypes_ElementId_e)(
|
element_id = (IEEEtypes_ElementId_e)(*(
|
||||||
*(t_u8 *)pbeacon);
|
t_u8 *)pbeacon);
|
||||||
element_len = *((t_u8 *)pbeacon + 1);
|
element_len = *((t_u8 *)pbeacon + 1);
|
||||||
if ((unsigned int)beacon_size <
|
if ((unsigned int)beacon_size <
|
||||||
(unsigned int)element_len +
|
(unsigned int)element_len +
|
||||||
|
|
Loading…
Reference in a new issue