diff options
| author | Ming-yi Lin <mylin@qca.qualcomm.com> | 2014-02-25 14:48:04 +0800 |
|---|---|---|
| committer | Akash Patel <c_akashp@qca.qualcomm.com> | 2014-02-28 15:58:09 -0800 |
| commit | 5bd9c6942351bb8483a607f29f0efdce2a64ff37 (patch) | |
| tree | 90b87283c0d278468d757fad52dd7bd138e186d5 | |
| parent | f434de0471a11724fc29a6461e4b1b5f08fae9c6 (diff) | |
qcacld: sap: per-interface intra-bss
supplicant had ability to config the intra-bss
but it was not supported. Consider the use case
when multiple APs existed with different configs,
per-vdev intra-bss is introduced.
Change-Id: Iec0a4d75e5679f32129a6650e6b86c54b23de2f5
CRs-fixed: 622584
| -rw-r--r-- | CORE/CLD_TXRX/TXRX/ol_rx_fwd.c | 3 | ||||
| -rw-r--r-- | CORE/CLD_TXRX/TXRX/ol_txrx.c | 9 | ||||
| -rw-r--r-- | CORE/CLD_TXRX/TXRX/ol_txrx_types.h | 2 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_cfg80211.c | 18 | ||||
| -rw-r--r-- | CORE/MAC/src/include/sirParams.h | 1 | ||||
| -rw-r--r-- | CORE/SERVICES/COMMON/ol_txrx_ctrl_api.h | 1 | ||||
| -rw-r--r-- | CORE/SERVICES/COMMON/wdi_in.h | 1 | ||||
| -rw-r--r-- | CORE/SERVICES/WMA/wma.c | 24 | ||||
| -rw-r--r-- | CORE/SME/inc/sme_Api.h | 2 | ||||
| -rw-r--r-- | CORE/SME/src/sme_common/sme_Api.c | 55 | ||||
| -rw-r--r-- | CORE/SYS/legacy/src/utils/src/macTrace.c | 1 | ||||
| -rw-r--r-- | CORE/WDA/inc/legacy/halMsgApi.h | 6 | ||||
| -rw-r--r-- | CORE/WDA/inc/wlan_qct_wda.h | 1 |
13 files changed, 118 insertions, 6 deletions
diff --git a/CORE/CLD_TXRX/TXRX/ol_rx_fwd.c b/CORE/CLD_TXRX/TXRX/ol_rx_fwd.c index c77a7ea5fd1a..5ad0233cfcdc 100644 --- a/CORE/CLD_TXRX/TXRX/ol_rx_fwd.c +++ b/CORE/CLD_TXRX/TXRX/ol_rx_fwd.c @@ -168,7 +168,8 @@ ol_rx_fwd_check( rx_desc = htt_rx_msdu_desc_retrieve(pdev->htt_pdev, msdu); - if (htt_rx_msdu_forward(pdev->htt_pdev, rx_desc)) { + if (!vdev->disable_intrabss_fwd && + htt_rx_msdu_forward(pdev->htt_pdev, rx_desc)) { /* * Use the same vdev that received the frame to * transmit the frame. diff --git a/CORE/CLD_TXRX/TXRX/ol_txrx.c b/CORE/CLD_TXRX/TXRX/ol_txrx.c index 25ded5a54f1e..d0b3b2f63a69 100644 --- a/CORE/CLD_TXRX/TXRX/ol_txrx.c +++ b/CORE/CLD_TXRX/TXRX/ol_txrx.c @@ -1958,3 +1958,12 @@ ol_txrx_peer_stats_copy( return A_OK; } #endif /* QCA_ENABLE_OL_TXRX_PEER_STATS */ + +void +ol_vdev_rx_set_intrabss_fwd( + ol_txrx_vdev_handle vdev, + a_bool_t val) +{ + vdev->disable_intrabss_fwd = val; +} + diff --git a/CORE/CLD_TXRX/TXRX/ol_txrx_types.h b/CORE/CLD_TXRX/TXRX/ol_txrx_types.h index f1b185148ea7..94c62e76d17a 100644 --- a/CORE/CLD_TXRX/TXRX/ol_txrx_types.h +++ b/CORE/CLD_TXRX/TXRX/ol_txrx_types.h @@ -753,7 +753,7 @@ struct ol_txrx_vdev_t { adf_os_spinlock_t mutex; adf_os_timer_t timer; } ll_pause; - + a_bool_t disable_intrabss_fwd; }; struct ol_rx_reorder_array_elem_t { diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c index e78bd684992f..092d08643ca9 100644 --- a/CORE/HDD/src/wlan_hdd_cfg80211.c +++ b/CORE/HDD/src/wlan_hdd_cfg80211.c @@ -2784,11 +2784,15 @@ static int wlan_hdd_cfg80211_change_bss (struct wiphy *wiphy, struct bss_parameters *params) { hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + int ret = 0; + eHalStatus halStatus; ENTER(); - hddLog(VOS_TRACE_LEVEL_INFO, "%s: device_mode = %d\n", - __func__,pAdapter->device_mode); + hddLog(VOS_TRACE_LEVEL_INFO, "%s: device_mode = %d, ap_isolate = %d", + __func__,pAdapter->device_mode, + params->ap_isolate); if((pAdapter->device_mode == WLAN_HDD_SOFTAP) || (pAdapter->device_mode == WLAN_HDD_P2P_GO) @@ -2799,11 +2803,19 @@ static int wlan_hdd_cfg80211_change_bss (struct wiphy *wiphy, if (-1 != params->ap_isolate) { pAdapter->sessionCtx.ap.apDisableIntraBssFwd = !!params->ap_isolate; + + halStatus = sme_ApDisableIntraBssFwd(pHddCtx->hHal, + pAdapter->sessionId, + pAdapter->sessionCtx.ap.apDisableIntraBssFwd); + if (!HAL_STATUS_SUCCESS(halStatus)) + { + ret = -EINVAL; + } } } EXIT(); - return 0; + return ret; } static int wlan_hdd_change_iface_to_sta_mode(struct net_device *ndev, diff --git a/CORE/MAC/src/include/sirParams.h b/CORE/MAC/src/include/sirParams.h index 41a8a34de5b1..70e693e85b8a 100644 --- a/CORE/MAC/src/include/sirParams.h +++ b/CORE/MAC/src/include/sirParams.h @@ -649,6 +649,7 @@ typedef struct sSirMbMsgP2p #endif #define SIR_HAL_SET_TX_POWER_LIMIT (SIR_HAL_ITC_MSG_TYPES_BEGIN + 251) +#define SIR_HAL_SET_SAP_INTRABSS_DIS (SIR_HAL_ITC_MSG_TYPES_BEGIN + 252) #define SIR_HAL_MSG_TYPES_END (SIR_HAL_MSG_TYPES_BEGIN + 0x1FF) diff --git a/CORE/SERVICES/COMMON/ol_txrx_ctrl_api.h b/CORE/SERVICES/COMMON/ol_txrx_ctrl_api.h index ec0e2359debe..4ec903979b67 100644 --- a/CORE/SERVICES/COMMON/ol_txrx_ctrl_api.h +++ b/CORE/SERVICES/COMMON/ol_txrx_ctrl_api.h @@ -995,5 +995,6 @@ static inline void ol_tx_throttle_init_period(struct ol_txrx_pdev_t *pdev, } #endif /* QCA_SUPPORT_TX_THROTTLE_LL */ +void ol_vdev_rx_set_intrabss_fwd(ol_txrx_vdev_handle vdev, a_bool_t val); #endif /* _OL_TXRX_CTRL_API__H_ */ diff --git a/CORE/SERVICES/COMMON/wdi_in.h b/CORE/SERVICES/COMMON/wdi_in.h index fa823b65485f..7f7f0c807787 100644 --- a/CORE/SERVICES/COMMON/wdi_in.h +++ b/CORE/SERVICES/COMMON/wdi_in.h @@ -1221,6 +1221,7 @@ ol_tx_queue_log_display(ol_txrx_pdev_handle pdev); #define wdi_in_set_drop_unenc ol_txrx_set_drop_unenc #define wdi_in_peer_state_update ol_txrx_peer_state_update #define wdi_in_peer_keyinstalled_state_update ol_txrx_peer_keyinstalled_state_update +#define wdi_in_vdev_rx_fwd_disabled ol_vdev_rx_set_intrabss_fwd #include <ol_txrx_dbg.h> diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c index 76e69872ce95..ac33a682e019 100644 --- a/CORE/SERVICES/WMA/wma.c +++ b/CORE/SERVICES/WMA/wma.c @@ -14932,6 +14932,25 @@ static void wma_process_set_mimops_req(tp_wma_handle wma_handle, mimops->sessionId); } +/* function : wma_set_vdev_intrabss_fwd + * Descriptin : Set intra_fwd value to wni_in. + * Args : + * wma_handle : Pointer to WMA handle + * pdis_intra_fwd : Pointer to DisableIntraBssFwd struct + * Returns : + */ +static void wma_set_vdev_intrabss_fwd(tp_wma_handle wma_handle, + tpDisableIntraBssFwd pdis_intra_fwd) +{ + ol_txrx_vdev_handle txrx_vdev; + WMA_LOGD("%s:intra_fwd:vdev(%d) intrabss_dis=%s", + __func__, pdis_intra_fwd->sessionId, + (pdis_intra_fwd->disableintrabssfwd ? "true" : "false")); + + txrx_vdev = wma_handle->interfaces[pdis_intra_fwd->sessionId].handle; + wdi_in_vdev_rx_fwd_disabled(txrx_vdev, pdis_intra_fwd->disableintrabssfwd); +} + /* * function : wma_mc_process_msg * Descriptin : @@ -15316,7 +15335,10 @@ VOS_STATUS wma_mc_process_msg(v_VOID_t *vos_context, vos_msg_t *msg) wma_process_set_mimops_req(wma_handle, (tSetMIMOPS *) msg->bodyptr); vos_mem_free(msg->bodyptr); break; - + case WDA_SET_SAP_INTRABSS_DIS: + wma_set_vdev_intrabss_fwd(wma_handle, (tDisableIntraBssFwd *)msg->bodyptr); + vos_mem_free(msg->bodyptr); + break; default: WMA_LOGD("unknow msg type %x", msg->type); /* Do Nothing? MSG Body should be freed at here */ diff --git a/CORE/SME/inc/sme_Api.h b/CORE/SME/inc/sme_Api.h index 44468a626cdf..d82b056271c9 100644 --- a/CORE/SME/inc/sme_Api.h +++ b/CORE/SME/inc/sme_Api.h @@ -3417,4 +3417,6 @@ eHalStatus sme_SetThermalLevel( tHalHandle hHal, tANI_U8 level ); eHalStatus sme_TxpowerLimit( tHalHandle hHal, tSirTxPowerLimit *psmetx); #endif eHalStatus sme_UpdateConnectDebug(tHalHandle hHal, tANI_U32 set_value); +eHalStatus sme_ApDisableIntraBssFwd(tHalHandle hHal, tANI_U8 sessionId, + tANI_BOOLEAN disablefwd); #endif //#if !defined( __SME_API_H ) diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c index 0fbd174d6ca9..fbb9ade935e0 100644 --- a/CORE/SME/src/sme_common/sme_Api.c +++ b/CORE/SME/src/sme_common/sme_Api.c @@ -11505,3 +11505,58 @@ eHalStatus sme_UpdateConnectDebug(tHalHandle hHal, tANI_U32 set_value) pMac->fEnableDebugLog = set_value; return (status); } + +/* --------------------------------------------------------------------------- + \fn sme_ApDisableIntraBssFwd + + \brief + SME will send message to WMA to set Intra BSS in txrx + + \param + + hHal - The handle returned by macOpen + + sessionId - session id ( vdev id) + + disablefwd - boolean value that indicate disable intrabss fwd disable + + \return eHalStatus +--------------------------------------------------------------------------- */ +eHalStatus sme_ApDisableIntraBssFwd(tHalHandle hHal, tANI_U8 sessionId, + tANI_BOOLEAN disablefwd) +{ + tpAniSirGlobal pMac = PMAC_STRUCT(hHal); + int status = eHAL_STATUS_SUCCESS; + VOS_STATUS vosStatus = VOS_STATUS_SUCCESS; + vos_msg_t vosMessage; + tpDisableIntraBssFwd pSapDisableIntraFwd = NULL; + + //Prepare the request to send to SME. + pSapDisableIntraFwd = vos_mem_malloc(sizeof(tDisableIntraBssFwd)); + if (NULL == pSapDisableIntraFwd) + { + smsLog(pMac, LOGP, "Memory Allocation Failure!!! %s", __func__); + return eSIR_MEM_ALLOC_FAILED; + } + + vos_mem_zero(pSapDisableIntraFwd, sizeof(tDisableIntraBssFwd)); + + pSapDisableIntraFwd->sessionId = sessionId; + pSapDisableIntraFwd->disableintrabssfwd = disablefwd; + + if (eHAL_STATUS_SUCCESS == (status = sme_AcquireGlobalLock(&pMac->sme))) + { + /* serialize the req through MC thread */ + vosMessage.bodyptr = pSapDisableIntraFwd; + vosMessage.type = WDA_SET_SAP_INTRABSS_DIS; + vosStatus = vos_mq_post_message(VOS_MQ_ID_WDA, &vosMessage); + if (!VOS_IS_STATUS_SUCCESS(vosStatus)) + { + status = eHAL_STATUS_FAILURE; + vos_mem_free(pSapDisableIntraFwd); + } + sme_ReleaseGlobalLock(&pMac->sme); + } + return (status); +} + diff --git a/CORE/SYS/legacy/src/utils/src/macTrace.c b/CORE/SYS/legacy/src/utils/src/macTrace.c index 00d289bee7a1..c99ed6905e6c 100644 --- a/CORE/SYS/legacy/src/utils/src/macTrace.c +++ b/CORE/SYS/legacy/src/utils/src/macTrace.c @@ -804,6 +804,7 @@ tANI_U8* macTraceGetWdaMsgString( tANI_U16 wdaMsg ) CASE_RETURN_STRING(WDA_DHCP_STOP_IND); CASE_RETURN_STRING(WDA_INIT_THERMAL_INFO_CMD); CASE_RETURN_STRING(WDA_SET_THERMAL_LEVEL); + CASE_RETURN_STRING(WDA_SET_SAP_INTRABSS_DIS); default: return((tANI_U8*) "UNKNOWN" ); break; diff --git a/CORE/WDA/inc/legacy/halMsgApi.h b/CORE/WDA/inc/legacy/halMsgApi.h index fdbcfa5cd7b8..cbffb16ce481 100644 --- a/CORE/WDA/inc/legacy/halMsgApi.h +++ b/CORE/WDA/inc/legacy/halMsgApi.h @@ -1470,4 +1470,10 @@ typedef __ani_attr_pre_packed struct sRemBeaconFilterMsg tANI_U8 ucRemIeId[1]; } __ani_attr_packed tRemBeaconFilterMsg, *tpRemBeaconFilterMsg; +typedef __ani_attr_pre_packed struct sDisableIntraBssFwd +{ + tANI_U16 sessionId; + tANI_BOOLEAN disableintrabssfwd; +} __ani_attr_packed tDisableIntraBssFwd, *tpDisableIntraBssFwd; + #endif /* _HALMSGAPI_H_ */ diff --git a/CORE/WDA/inc/wlan_qct_wda.h b/CORE/WDA/inc/wlan_qct_wda.h index aa27adeb3bcc..222e78d8a12f 100644 --- a/CORE/WDA/inc/wlan_qct_wda.h +++ b/CORE/WDA/inc/wlan_qct_wda.h @@ -1321,6 +1321,7 @@ tSirRetStatus uMacPostCtrlMsg(void* pSirGlobal, tSirMbMsg* pMb); #define WDA_TDLS_PEER_DISCONNECTED SIR_HAL_TDLS_PEER_DISCONNECTED #endif #endif +#define WDA_SET_SAP_INTRABSS_DIS SIR_HAL_SET_SAP_INTRABSS_DIS /* Message to Indicate Radar Presence on SAP Channel */ #define WDA_DFS_RADAR_IND SIR_HAL_DFS_RADAR_IND |
