diff options
54 files changed, 351 insertions, 9120 deletions
diff --git a/CORE/CLD_TXRX/HTT/htt_h2t.c b/CORE/CLD_TXRX/HTT/htt_h2t.c index a2c61bff2c67..3ac693fd6f13 100644 --- a/CORE/CLD_TXRX/HTT/htt_h2t.c +++ b/CORE/CLD_TXRX/HTT/htt_h2t.c @@ -227,13 +227,31 @@ htt_h2t_rx_ring_cfg_msg_ll(struct htt_pdev_t *pdev) #ifndef REMOVE_PKT_LOG if (ol_cfg_is_packet_log_enabled(pdev->ctrl_pdev)) { - enable_ctrl_data = 1; - enable_mgmt_data = 1; - enable_null_data = 1; - enable_phy_data = 1; - enable_hdr = 1; - enable_ppdu_start= 1; - enable_ppdu_end = 1; + if (ol_cfg_is_full_reorder_offload(pdev->ctrl_pdev)) { + /* In fw with full reorder offload, when pktlog is enabled mgmt/ctrl/ + null frames are routed to fw remote ring which are discarded with + the error bit set. As a result they are not sent to the BA state + machine which causes a problem. + Disable ctrl/mgmt/null flag since frames with status + HTT_RX_IND_MPDU_STATUS_MGMT_CTRL are always dropped by the host. + The ppdu start and end flags are only used in monitor mode which + is not supported on CLD.*/ + enable_ctrl_data = 0; + enable_mgmt_data = 0; + enable_null_data = 0; + enable_phy_data = 1; + enable_hdr = 1; + enable_ppdu_start= 0; + enable_ppdu_end = 0; + } else { + enable_ctrl_data = 1; + enable_mgmt_data = 1; + enable_null_data = 1; + enable_phy_data = 1; + enable_hdr = 1; + enable_ppdu_start= 1; + enable_ppdu_end = 1; + } /* Disable ASPM when pkt log is enabled */ adf_os_print("Pkt log is enabled\n"); htt_htc_disable_aspm(); diff --git a/CORE/HDD/inc/wlan_hdd_ftm.h b/CORE/HDD/inc/wlan_hdd_ftm.h index 97217240af40..d470d24e13e9 100644 --- a/CORE/HDD/inc/wlan_hdd_ftm.h +++ b/CORE/HDD/inc/wlan_hdd_ftm.h @@ -38,104 +38,6 @@ #define WLAN_FTM_SUCCESS 0 #define WLAN_FTM_FAILURE 1 -#define WLAN_FTM_START 1 -#define WLAN_FTM_STOP 2 -#define WLAN_FTM_CMD 3 - - -#define WLAN_FTM_PHY_CMD 100 -#define SIR_HAL_FTM_CMD 10 -#define QUALCOMM_MODULE_TYPE 2 -#define WLAN_FTM_COMMAND_TIME_OUT 1000 -#define PHYDBG_PREAMBLE_NOT_SUPPORTED 0xFF -/* Private ioctls and their sub-ioctls */ -#define WLAN_FTM_PRIV_SET_INT_GET_NONE (SIOCIWFIRSTPRIV + 0) -#define WE_FTM_ON_OFF 1 -#define WE_TX_PKT_GEN 2 -#define WE_SET_TX_IFS 3 -#define WE_SET_TX_PKT_CNT 4 -#define WE_SET_TX_PKT_LEN 5 -#define WE_SET_CHANNEL 6 -#define WE_SET_TX_POWER 7 -#define WE_CLEAR_RX_PKT_CNT 8 -#define WE_RX 9 -#define WE_ENABLE_CHAIN 10 -#define WE_SET_PWR_CNTL_MODE 11 -#define WE_ENABLE_DPD 12 -#define WE_SET_CB 13 - -/* Private ioctls and their sub-ioctls */ -#define WLAN_FTM_PRIV_SET_NONE_GET_INT (SIOCIWFIRSTPRIV + 1) -#define WE_GET_CHANNEL 1 -#define WE_GET_TX_POWER 2 -#define WE_GET_RX_PKT_CNT 3 - -/* Private ioctls and their sub-ioctls */ -#define WLAN_FTM_PRIV_SET_INT_GET_INT (SIOCIWFIRSTPRIV + 2) - -/* Private ioctls and their sub-ioctls */ -#define WLAN_FTM_PRIV_SET_CHAR_GET_NONE (SIOCIWFIRSTPRIV + 3) -#define WE_SET_MAC_ADDRESS 1 -#define WE_SET_TX_RATE 2 - -/* Private ioctls and their sub-ioctls */ -#define WLAN_FTM_PRIV_SET_THREE_INT_GET_NONE (SIOCIWFIRSTPRIV + 4) -#define WE_SET_WLAN_DBG 1 - -/* Private ioctls and their sub-ioctls */ -#define WLAN_FTM_PRIV_GET_CHAR_SET_NONE (SIOCIWFIRSTPRIV + 5) -#define WE_GET_MAC_ADDRESS 1 -#define WE_GET_TX_RATE 2 -#define WE_GET_FTM_VERSION 3 -#define WE_GET_FTM_STATUS 4 -#define WE_GET_RX_RSSI 5 - -/* Private ioctls and their sub-ioctls */ -#define WLAN_FTM_PRIV_SET_NONE_GET_NONE (SIOCIWFIRSTPRIV + 6) -#define WE_SET_NV_DEFAULTS 1 - -#define WE_FTM_MAX_STR_LEN 1024 - -#define MAX_NV_TABLE_SIZE 40000 - -typedef enum { - WLAN_FTM_CMD_START = 1, - WLAN_FTM_CMD_STOP, - WLAN_FTM_CMD_CMD -} wlan_hdd_ftm_cmds; -typedef struct ftm_hdr_s { - v_U16_t cmd_id; - v_U16_t data_len; - v_U16_t respPktSize; -} ftm_hdr_t; - -/* The request buffer of FTM which contains a byte of command and the request */ -typedef struct wlan_hdd_ftm_payload_s { - v_U16_t ftm_cmd_type; - v_U8_t pFtmCmd[1]; -}wlan_hdd_ftm_payload; -#define SIZE_OF_FTM_DIAG_HEADER_LEN 12 -/* the FTM command/response structure */ -typedef struct wlan_hdd_ftm_request_s -{ - v_U8_t cmd_code; - v_U8_t sub_sys_id; - v_U16_t mode_id; - ftm_hdr_t ftm_hdr; - v_U16_t module_type; - wlan_hdd_ftm_payload ftmpkt; -}wlan_hdd_ftm_request_t; - -typedef struct wlan_hdd_ftm_response_s -{ - v_U8_t cmd_code; - v_U8_t sub_sys_id; - v_U16_t mode_id; - ftm_hdr_t ftm_hdr; - v_U16_t ftm_err_code; - wlan_hdd_ftm_payload ftmpkt; -}wlan_hdd_ftm_response_t; - typedef enum { WLAN_FTM_INITIALIZED, WLAN_FTM_STOPPED, @@ -144,72 +46,15 @@ typedef enum { typedef struct wlan_hdd_ftm_status_s { v_U8_t ftm_state; - wlan_hdd_ftm_request_t *pRequestBuf; - wlan_hdd_ftm_response_t *pResponseBuf; - tAniNlHdr *wnl; /**vos event */ vos_event_t ftm_vos_event; /** completion variable for ftm command to complete*/ struct completion ftm_comp_var; v_BOOL_t IsCmdPending; - v_BOOL_t cmd_iwpriv; - - /** Large size of NV Table Handle **/ - eNvTable processingNVTable; - v_U32_t targetNVTableSize; - v_U8_t *targetNVTablePointer; - v_U32_t processedNVTableSize; - v_U8_t *tempNVTableBuffer; - } wlan_hdd_ftm_status_t; -typedef struct ftm_msg_s -{ - /* This field can be used as sequence - number/dialogue token for matching request/response */ - v_U16_t type; - - /* This guy carries the command buffer along with command id */ - void *cmd_ptr; - v_U32_t bodyval; -} ftm_msg_t; -typedef struct ftm_rsp_msg_s -{ - v_U16_t msgId; - v_U16_t msgBodyLength; - v_U32_t respStatus; - v_U8_t *msgResponse; -} ftm_rsp_msg_t; - -typedef struct rateIndex2Preamble -{ - v_U16_t rate_index; - v_U16_t Preamble; -} rateIndex2Preamble_t; -typedef struct freq_chan_s -{ - v_U16_t freq; - v_U16_t chan; -} freq_chan_t; - -typedef struct rateStr2rateIndex_s -{ - v_U16_t rate_index; - char rate_str[30]; -} rateStr2rateIndex_t; - - -#define FTM_SWAP16(A) ((((tANI_U16)(A) & 0xff00) >> 8) | \ - (((tANI_U16)(A) & 0x00ff) << 8) \ - ) -#define PTT_HEADER_LENGTH 8 - -#define FTM_VOS_EVENT_WAIT_TIME 10000 - -#define SIZE_OF_TABLE(a) (sizeof(a) / sizeof(a[0])) int wlan_hdd_ftm_open(hdd_context_t *pHddCtx); -void wlan_hdd_process_ftm_cmd (hdd_context_t *pHddCtx,tAniNlHdr *wnl); int wlan_hdd_ftm_close(hdd_context_t *pHddCtx); #if defined(QCA_WIFI_FTM) diff --git a/CORE/HDD/inc/wlan_hdd_main.h b/CORE/HDD/inc/wlan_hdd_main.h index 2522285a0aa8..4f71219bcbb1 100644 --- a/CORE/HDD/inc/wlan_hdd_main.h +++ b/CORE/HDD/inc/wlan_hdd_main.h @@ -227,6 +227,10 @@ #define HDD_MIN_TX_POWER (-100) // minimum tx power #define HDD_MAX_TX_POWER (+100) // maximum tx power +#ifdef WLAN_FEATURE_LPSS +#define HDD_RSSI_THRESHOLD 10 /* RSSI threshold set to 10 for temp */ +#endif + typedef v_U8_t tWlanHddMacAddr[HDD_MAC_ADDR_LEN]; /* @@ -1009,6 +1013,9 @@ struct hdd_adapter_s #endif v_S7_t rssi; +#ifdef WLAN_FEATURE_LPSS + v_S7_t last_rssi_send; +#endif tANI_U8 snr; @@ -1670,6 +1677,7 @@ void wlan_hdd_send_status_pkg(hdd_adapter_t *pAdapter, void wlan_hdd_send_version_pkg(v_U32_t fw_version, v_U32_t chip_id, const char *chip_name); +void wlan_hdd_send_all_scan_intf_info(hdd_context_t *pHddCtx); #endif void wlan_hdd_send_svc_nlink_msg(int type, void *data, int len); #ifdef FEATURE_WLAN_AUTO_SHUTDOWN diff --git a/CORE/HDD/src/wlan_hdd_assoc.c b/CORE/HDD/src/wlan_hdd_assoc.c index 4da1261cd401..11a8218ca028 100644 --- a/CORE/HDD/src/wlan_hdd_assoc.c +++ b/CORE/HDD/src/wlan_hdd_assoc.c @@ -1398,6 +1398,11 @@ static eHalStatus hdd_AssociationCompletionHandler( hdd_adapter_t *pAdapter, tCs if ( eCSR_ROAM_RESULT_ASSOCIATED == roamResult ) { + if (NULL == pRoamInfo) { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + FL("pRoamInfo is NULL")); + return eHAL_STATUS_FAILURE; + } if ( !hddDisconInProgress ) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, @@ -2219,7 +2224,8 @@ static eHalStatus hdd_RoamSetKeyCompleteHandler( hdd_adapter_t *pAdapter, tCsrRo { sme_PsOffloadEnableDeferredPowerSave( WLAN_HDD_GET_HAL_CTX(pAdapter), - pAdapter->sessionId); + pAdapter->sessionId, + pHddStaCtx->hdd_ReassocScenario); } } else @@ -3037,6 +3043,7 @@ hdd_smeRoamCallback(void *pContext, tCsrRoamInfo *pRoamInfo, tANI_U32 roamId, (WLAN_HDD_GET_CTX(pAdapter))->hdd_mcastbcast_filter_set = FALSE; } pHddStaCtx->ft_carrier_on = FALSE; + pHddStaCtx->hdd_ReassocScenario = FALSE; break; case eCSR_ROAM_FT_START: @@ -3199,7 +3206,6 @@ hdd_smeRoamCallback(void *pContext, tCsrRoamInfo *pRoamInfo, tANI_U32 roamId, before the ENTER_BMPS_REQ ensures Listen Interval is regained back to LI * Modulated DTIM */ hdd_set_pwrparams(pHddCtx); - pHddStaCtx->hdd_ReassocScenario = VOS_FALSE; /* At this point, device should not be in BMPS; if due to unexpected scenario, if we are in BMPS, @@ -3215,6 +3221,8 @@ hdd_smeRoamCallback(void *pContext, tCsrRoamInfo *pRoamInfo, tANI_U32 roamId, } } halStatus = hdd_RoamSetKeyCompleteHandler( pAdapter, pRoamInfo, roamId, roamStatus, roamResult ); + if (eCSR_ROAM_RESULT_AUTHENTICATED == roamResult) + pHddStaCtx->hdd_ReassocScenario = VOS_FALSE; } #ifdef WLAN_FEATURE_ROAM_OFFLOAD pRoamInfo->roamSynchInProgress = VOS_FALSE; @@ -3885,8 +3893,6 @@ int iw_set_essid(struct net_device *dev, hddLog( LOGE, FL("Disconnect event timed out")); } } - } else { - return -EINVAL; } /** when cfg80211 defined, wpa_supplicant wext driver uses diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c index a2f478f6a268..2f4415602681 100644 --- a/CORE/HDD/src/wlan_hdd_cfg80211.c +++ b/CORE/HDD/src/wlan_hdd_cfg80211.c @@ -5951,10 +5951,6 @@ static int __wlan_hdd_cfg80211_change_iface(struct wiphy *wiphy, eCsrRoamBssType LastBSSType; hdd_config_t *pConfig = NULL; eMib_dot11DesiredBssType connectedBssType; -#ifdef WLAN_FEATURE_LPSS - hdd_adapter_t *pDataAdapter = NULL; - hdd_adapter_list_node_t *pAdapterNode = NULL, *pNext = NULL; -#endif unsigned long rc; VOS_STATUS vstatus; eHalStatus hstatus; @@ -6275,22 +6271,7 @@ done: #endif /* WLAN_BTAMP_FEATURE */ #ifdef WLAN_FEATURE_LPSS - vstatus = hdd_get_front_adapter(pHddCtx, &pAdapterNode); - while (NULL != pAdapterNode && VOS_STATUS_SUCCESS == vstatus) { - pDataAdapter = pAdapterNode->pAdapter; - if (pDataAdapter) { - if (pDataAdapter->device_mode == WLAN_HDD_INFRA_STATION) - break; - if (pDataAdapter->device_mode == WLAN_HDD_P2P_CLIENT) - break; - if (pDataAdapter->device_mode == WLAN_HDD_P2P_DEVICE) - break; - } - vstatus = hdd_get_next_adapter (pHddCtx, pAdapterNode, &pNext); - pAdapterNode = pNext; - } - - wlan_hdd_send_status_pkg(pDataAdapter, NULL, 1, 0); + wlan_hdd_send_all_scan_intf_info(pHddCtx); #endif EXIT(); @@ -10511,6 +10492,10 @@ static int __wlan_hdd_cfg80211_get_station(struct wiphy *wiphy, eDataRate11ACMaxMcs vhtMaxMcs; #endif /* WLAN_FEATURE_11AC */ +#ifdef WLAN_FEATURE_LPSS + v_S7_t last_rssi_send; +#endif /* WLAN_FEATURE_LPSS */ + ENTER(); if ((eConnectionState_Associated != pHddStaCtx->conn_info.connState) || @@ -10531,9 +10516,20 @@ static int __wlan_hdd_cfg80211_get_station(struct wiphy *wiphy, return status; } +#ifdef WLAN_FEATURE_LPSS + last_rssi_send = pAdapter->last_rssi_send; +#endif wlan_hdd_get_rssi(pAdapter, &sinfo->signal); sinfo->filled |= STATION_INFO_SIGNAL; +#ifdef WLAN_FEATURE_LPSS + if ((pAdapter->rssi >= last_rssi_send + HDD_RSSI_THRESHOLD) || + (pAdapter->rssi <= last_rssi_send - HDD_RSSI_THRESHOLD)) { + pAdapter->last_rssi_send = pAdapter->rssi; + wlan_hdd_send_status_pkg(pAdapter, pHddStaCtx, 1, 1); + } +#endif + wlan_hdd_get_station_stats(pAdapter); rate_flags = pAdapter->hdd_stats.ClassA_stat.tx_rate_flags; @@ -12548,7 +12544,6 @@ static int __wlan_hdd_cfg80211_tdls_oper(struct wiphy *wiphy, rc = wait_for_completion_timeout(&pAdapter->tdls_del_station_comp, msecs_to_jiffies(WAIT_TIME_TDLS_DEL_STA)); if (!rc) { - wlan_hdd_tdls_set_peer_link_status(pTdlsPeer, eTDLS_LINK_IDLE); VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s: Del station timed out", __func__); return -EPERM; @@ -13447,6 +13442,19 @@ int __wlan_hdd_cfg80211_suspend_wlan(struct wiphy *wiphy, hddLog(LOG1, FL("Roaming in progress, do not allow suspend")); return -EAGAIN; } + + if (pHddCtx->cfg_ini->enablePowersaveOffload && + pHddCtx->cfg_ini->fIsBmpsEnabled && + ((WLAN_HDD_INFRA_STATION == pAdapter->device_mode) || + (WLAN_HDD_P2P_CLIENT == pAdapter->device_mode))) { + if (!sme_PsOffloadIsStaInPowerSave(pHddCtx->hHal, + pAdapter->sessionId)) { + hddLog(VOS_TRACE_LEVEL_DEBUG, + FL("STA is not in power save, Do not allow suspend")); + return -EAGAIN; + } + } + if (pScanInfo->mScanPending && pAdapter->request) { INIT_COMPLETION(pScanInfo->abortscan_event_var); diff --git a/CORE/HDD/src/wlan_hdd_early_suspend.c b/CORE/HDD/src/wlan_hdd_early_suspend.c index 4b9e0cae5c6d..f426b2f5158c 100644 --- a/CORE/HDD/src/wlan_hdd_early_suspend.c +++ b/CORE/HDD/src/wlan_hdd_early_suspend.c @@ -2204,7 +2204,7 @@ VOS_STATUS hdd_wlan_re_init(void *hif_sc) vos_set_reinit_in_progress(VOS_MODULE_ID_VOSS, FALSE); #ifdef WLAN_FEATURE_LPSS - wlan_hdd_send_status_pkg(pAdapter, NULL, 1, 0); + wlan_hdd_send_all_scan_intf_info(pHddCtx); wlan_hdd_send_version_pkg(pHddCtx->target_fw_version, pHddCtx->target_hw_version, pHddCtx->target_hw_name); diff --git a/CORE/HDD/src/wlan_hdd_ftm.c b/CORE/HDD/src/wlan_hdd_ftm.c index 870fb7402aa4..068b1198589b 100644 --- a/CORE/HDD/src/wlan_hdd_ftm.c +++ b/CORE/HDD/src/wlan_hdd_ftm.c @@ -47,9 +47,9 @@ when who what, where, why -------- --- -------------------------------------------------------- - 04/20/11 Leo/Henri Convergence for Prima and Volans. Single image - for FTM and mission mode - 04/5/09 Shailender Created module. + 07/18/14 kanand Cleanup. Remove legacy Prima code and retain support for Rome only + 04/20/11 Leo/Henri Convergence for Prima and Volans. Single image for FTM and mission mode + 04/05/09 Shailender Created module. ==========================================================================*/ #include <vos_mq.h> @@ -68,7 +68,6 @@ #include "vos_nvitem.h" #include "wlan_hdd_main.h" #include "qwlan_version.h" - #include "wlan_nv.h" #include "wlan_qct_wda.h" #include "cfgApi.h" @@ -91,436 +90,9 @@ #endif #endif -#define RXMODE_DISABLE_ALL 0 -#define RXMODE_ENABLE_ALL 1 -#define RXMODE_ENABLE_11GN 2 -#define RXMODE_ENABLE_11B 3 - -#define FTM_CHAIN_SEL_NO_RX_TX 0 -#define FTM_CHAIN_SEL_R0_ON 1 -#define FTM_CHAIN_SEL_T0_ON 2 -#define FTM_CHAIN_SEL_R0_T0_ON 3 -#define FTM_CHAIN_SEL_MAX 3 - -#ifndef QWLAN_PHYDBG_BASE -#define QWLAN_PHYDBG_BASE 0x03004000 -#endif /* QWLAN_PHYDBG_BASE */ - -#ifndef QWLAN_PHYDBG_TXPKT_CNT_REG -#define QWLAN_PHYDBG_TXPKT_CNT_REG (QWLAN_PHYDBG_BASE + 0x6C) -#define QWLAN_PHYDBG_TXPKT_CNT_CNT_MASK 0xFFFF -#endif - -#ifndef QWLAN_AGC_BASE -#define QWLAN_AGC_BASE 0x03013C00 -#endif /* QWLAN_AGC_BASE */ - -#ifndef QWLAN_AGC_CHANNEL_FREQ_REG -#define QWLAN_AGC_CHANNEL_FREQ_REG (QWLAN_AGC_BASE + 0x34) -#define QWLAN_AGC_CHANNEL_FREQ_FREQ_MASK 0x1FFF -#endif /* QWLAN_AGC_CHANNEL_FREQ_REG */ - -#ifndef QWLAN_AGC_SUBBAND_CONFIG_REG -#define QWLAN_AGC_SUBBAND_CONFIG_REG (QWLAN_AGC_BASE + 0x30) -#define QWLAN_AGC_SUBBAND_CONFIG_STG2_SUBBAND_MASK 0x03 -#endif /* QWLAN_AGC_SUBBAND_CONFIG_REG */ - -#ifndef QWLAN_RFAPB_BASE -#define QWLAN_RFAPB_BASE 0x0E02F800 -#endif /* QWLAN_RFAPB_BASE */ - -#ifndef QWLAN_RFAPB_REV_ID_REG -#define QWLAN_RFAPB_REV_ID_REG (QWLAN_RFAPB_BASE + 0x00) -#endif /* QWLAN_RFAPB_REV_ID_REG */ - -#ifndef QWLAN_TXCTL_BASE -#define QWLAN_TXCTL_BASE 0x03012000 -#endif /* QWLAN_TXCTL_BASE */ - -#ifndef QWLAN_TXCTL_FSHIFT_REG -#define QWLAN_TXCTL_FSHIFT_REG (QWLAN_TXCTL_BASE + 0x20) -#define QWLAN_TXCTL_FSHIFT_BW14_OFFSET 0x02 -#define QWLAN_TXCTL_FSHIFT_BW14_MASK 0x1C -#define QWLAN_TXCTL_FSHIFT_BW12_OFFSET 0x00 -#define QWLAN_TXCTL_FSHIFT_BW12_MASK 0x03 -#endif /* QWLAN_TXCTL_FSHIFT_REG */ - -/* To set 4MAC addresses from given first MAC address, - * Last byte value within given MAC address must less than 0xFF - 3 */ -#define QWLAN_MAX_MAC_LAST_BYTE_VALUE 0xFC -#define NV_EMBEDDED_VERSION 0x80 - -#define QWLAN_TXFIR_CFG_DPD_BYPASS_MASK 0x8 - -typedef struct { - tANI_U32 tableSize; /* Whole NV Table Size */ - tANI_U32 chunkSize; /* Current Chunk Size < 2K */ - eNvTable nvTable; - tANI_U8 tableData; /* Filled by host driver */ -} pttGetNvTable; - -typedef struct { - tANI_U32 tableSize; /* Whole NV Table Size */ - tANI_U32 chunkSize; /* Current Chunk Size < 2K */ - eNvTable nvTable; - tANI_U8 tableData; -} pttSetNvTable; - -extern const sHalNv nvDefaults; -static int wlan_ftm_register_wext(hdd_adapter_t *pAdapter); static int wlan_ftm_stop(hdd_context_t *pHddCtx); -VOS_STATUS wlan_write_to_efs (v_U8_t *pData, v_U16_t data_len); static int hdd_ftm_service_registration(hdd_context_t *pHddCtx); -/* for PRIMA: all the available frequency, channal pair i the table are defined for channel frequency @ RF center frequency - Since it is associated to agc.channel_freq register for mapping. - For channel bonding, the channel number is +2 or -2 for CB with primary high, or with primary low respectively. -*/ -static const freq_chan_t freq_chan_tbl[] = { - {2412, 1}, {2417, 2},{2422, 3}, {2427, 4}, {2432, 5}, {2437, 6}, {2442, 7}, - {2447, 8}, {2452, 9},{2457, 10},{2462, 11},{2467 ,12},{2472, 13},{2484, 14} -}; - -static rateStr2rateIndex_t rateName_rateIndex_tbl[] = -{ - { HAL_PHY_RATE_11B_LONG_1_MBPS, "11B_LONG_1_MBPS"}, - { HAL_PHY_RATE_11B_LONG_2_MBPS, "11B_LONG_2_MBPS"}, - { HAL_PHY_RATE_11B_LONG_5_5_MBPS, "11B_LONG_5_5_MBPS"}, - { HAL_PHY_RATE_11B_LONG_11_MBPS, "11B_LONG_11_MBPS"}, - { HAL_PHY_RATE_11B_SHORT_2_MBPS, "11B_SHORT_2_MBPS"}, - { HAL_PHY_RATE_11B_SHORT_5_5_MBPS, "11B_SHORT_5_5_MBPS"}, - { HAL_PHY_RATE_11B_SHORT_11_MBPS, "11B_SHORT_11_MBPS"}, - //Spica_Virgo 11A 20MHz Rates - { HAL_PHY_RATE_11A_6_MBPS, "11A_6_MBPS"}, - { HAL_PHY_RATE_11A_9_MBPS, "11A_9_MBPS"}, - { HAL_PHY_RATE_11A_12_MBPS, "11A_12_MBPS"}, - { HAL_PHY_RATE_11A_18_MBPS, "11A_18_MBPS"}, - { HAL_PHY_RATE_11A_24_MBPS, "11A_24_MBPS"}, - { HAL_PHY_RATE_11A_36_MBPS, "11A_36_MBPS"}, - { HAL_PHY_RATE_11A_48_MBPS, "11A_48_MBPS"}, - { HAL_PHY_RATE_11A_54_MBPS, "11A_54_MBPS"}, - -//MCS Index #0-15 (20MHz) - { HAL_PHY_RATE_MCS_1NSS_6_5_MBPS, "MCS_6_5_MBPS"}, - { HAL_PHY_RATE_MCS_1NSS_13_MBPS, "MCS_13_MBPS"}, - { HAL_PHY_RATE_MCS_1NSS_19_5_MBPS, "MCS_19_5_MBPS"}, - { HAL_PHY_RATE_MCS_1NSS_26_MBPS, "MCS_26_MBPS"}, - { HAL_PHY_RATE_MCS_1NSS_39_MBPS, "MCS_39_MBPS"}, - { HAL_PHY_RATE_MCS_1NSS_52_MBPS, "MCS_52_MBPS"}, - { HAL_PHY_RATE_MCS_1NSS_58_5_MBPS, "MCS_58_5_MBPS"}, - { HAL_PHY_RATE_MCS_1NSS_65_MBPS, "MCS_65_MBPS"}, - { HAL_PHY_RATE_MCS_1NSS_MM_SG_72_2_MBPS, "MCS_72_2_MBPS"}, - -//MCS Index #8-15 (40MHz) - - { HAL_PHY_RATE_MCS_1NSS_CB_13_5_MBPS, "MCS_CB_13_B_MBPS" }, - { HAL_PHY_RATE_MCS_1NSS_CB_27_MBPS, "MCS_CB_27_MBPS" }, - { HAL_PHY_RATE_MCS_1NSS_CB_40_5_MBPS, "MCS_CB_40_5_MBPS" }, - { HAL_PHY_RATE_MCS_1NSS_CB_54_MBPS, "MCS_CB_54_MBPS"}, - { HAL_PHY_RATE_MCS_1NSS_CB_81_MBPS, "MCS_CB_81_MBPS"}, - { HAL_PHY_RATE_MCS_1NSS_CB_108_MBPS, "MCS_CB_108_MBPS"}, - { HAL_PHY_RATE_MCS_1NSS_CB_121_5_MBPS, "MCS_CB_121_5_MBPS"}, - { HAL_PHY_RATE_MCS_1NSS_CB_135_MBPS, "MCS_CB_135_MBPS"}, - { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_15_MBPS, "MCS_CB_15_MBPS"}, - { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_30_MBPS, "MCS_CB_30_MBPS"}, - { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_45_MBPS, "MCS_CB_45_MBPS"}, - { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_60_MBPS, "MCS_CB_60_MBPS"}, - { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_90_MBPS, "MCS_CB_90_MBPS"}, - { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_120_MBPS, "MCS_CB_120_MBPS"}, - { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_135_MBPS, "MCS_CB_135_MBPS"}, - { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_150_MBPS, "MCS_CB_150_MBPS"}, - -#ifdef WLAN_FEATURE_11AC - /*11AC rate 20MHZ Normal GI*/ - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_6_5_MBPS, "MCS_VHT20_NGI_6_5_MBPS"}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_13_MBPS, "MCS_VHT20_NGI_13_MBPS"}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_19_5_MBPS,"MCS_VHT20_NGI_19_5_MBPS"}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_26_MBPS, "MCS_VHT20_NGI_26_MBPS"}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_39_MBPS, "MCS_VHT20_NGI_39_MBPS"}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_52_MBPS, "MCS_VHT20_NGI_52_MBPS"}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_58_5_MBPS,"MCS_VHT20_NGI_58_5_MBPS"}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_65_MBPS, "MCS_VHT20_NGI_65_MBPS"}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_78_MBPS, "MCS_VHT20_NGI_78_MBPS"}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_86_5_MBPS,"MCS_VHT20_NGI_86_5_MBPS"}, - - /*11AC rate 20MHZ Short GI*/ - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_7_2_MBPS, "MCS_VHT20_SGI_7_2_MBPS"}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_14_4_MBPS,"MCS_VHT20_SGI_14_4_MBPS"}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_21_6_MBPS,"MCS_VHT20_SGI_21_6_MBPS"}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_28_8_MBPS,"MCS_VHT20_SGI_28_8_MBPS"}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_43_3_MBPS,"MCS_VHT20_SGI_43_3_MBPS"}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_57_7_MBPS,"MCS_VHT20_SGI_57_7_MBPS"}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_65_MBPS, "MCS_VHT20_SGI_65_MBPS"}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_72_2_MBPS,"MCS_VHT20_SGI_72_2_MBPS"}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_86_6_MBPS,"MCS_VHT20_SGI_86_6_MBPS"}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_96_1_MBPS,"MCS_VHT20_SGI_96_1_MBPS"}, - - /*11AC rates 40MHZ normal GI*/ - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_13_5_MBPS, - "MCS_VHT40_NGI_CB_13_5_MBPS"}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_27_MBPS, - "MCS_VHT40_NGI_CB_27_MBPS"}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_40_5_MBPS, - "MCS_VHT40_NGI_CB_40_5_MBPS"}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_54_MBPS, - "MCS_VHT40_NGI_CB_54_MBPS"}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_81_MBPS, - "MCS_VHT40_NGI_CB_81_MBPS"}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_108_MBPS, - "MCS_VHT40_NGI_CB_108_MBPS"}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_121_5_MBPS, - "MCS_VHT40_NGI_CB_121_5_MBPS"}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_135_MBPS, - "MCS_VHT40_NGI_CB_135_MBPS"}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_162_MBPS, - "MCS_VHT40_NGI_CB_162_MBPS"}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_180_MBPS, - "MCS_VHT40_NGI_CB_180_MBPS"}, - - /*11AC rates 40MHZ short GI*/ - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_15_MBPS, - "MCS_VHT40_SGI_CB_15_MBPS"}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_30_MBPS, - "MCS_VHT40_SGI_CB_30_MBPS"}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_45_MBPS, - "MCS_VHT40_SGI_CB_45_MBPS"}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_60_MBPS, - "MCS_VHT40_SGI_CB_60_MBPS"}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_90_MBPS, - "MCS_VHT40_SGI_CB_90_MBPS"}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_120_MBPS, - "MCS_VHT40_SGI_CB_120_MBPS"}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_135_MBPS, - "MCS_VHT40_SGI_CB_135_MBPS"}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_150_MBPS, - "MCS_VHT40_SGI_CB_150_MBPS"}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_180_MBPS, - "MCS_VHT40_SGI_CB_180_MBPS"}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_200_MBPS, - "MCS_VHT40_SGI_CB_200_MBPS"}, - - /*11AC rates 80 MHZ normal GI*/ - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_29_3_MBPS, - "MCS_VHT80_NGI_CB_29_3_MBPS"}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_58_5_MBPS, - "MCS_VHT80_NGI_CB_58_5_MBPS"}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_87_8_MBPS, - "MCS_VHT80_NGI_CB_87_8_MBPS"}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_117_MBPS, - "MCS_VHT80_NGI_CB_117_MBPS"}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_175_5_MBPS, - "MCS_VHT80_NGI_CB_175_5_MBPS"}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_234_MBPS, - "MCS_VHT80_NGI_CB_234_MBPS"}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_263_3_MBPS, - "MCS_VHT80_NGI_CB_263_3_MBPS"}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_292_5_MBPS, - "MCS_VHT80_NGI_CB_292_5_MBPS"}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_351_MBPS, - "MCS_VHT80_NGI_CB_351_MBPS"}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_390_MBPS, - "MCS_VHT80_NGI_CB_390_MBPS"}, - - /*11AC rates 80 MHZ short GI*/ - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_32_5_MBPS, - "MCS_VHT80_SGI_CB_32_5_MBPS"}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_65_MBPS, - "MCS_VHT80_SGI_CB_65_MBPS"}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_97_5_MBPS, - "MCS_VHT80_SGI_CB_97_5_MBPS"}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_130_MBPS, - "MCS_VHT80_SGI_CB_130_MBPS"}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_195_MBPS, - "MCS_VHT80_SGI_CB_195_MBPS"}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_260_MBPS, - "MCS_VHT80_SGI_CB_260_MBPS"}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_292_5_MBPS, - "MCS_VHT80_SGI_CB_292_5_MBPS"}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_325_MBPS, - "MCS_VHT80_SGI_CB_325_MBPS"}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_390_MBPS, - "MCS_VHT80_SGI_CB_390_MBPS"}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_433_3_MBPS, - "MCS_VHT80_SGI_CB_433_3_MBPS"}, -#endif - -}; - -static rateIndex2Preamble_t rate_index_2_preamble_table[] = -{ - - { HAL_PHY_RATE_11B_LONG_1_MBPS, PHYDBG_PREAMBLE_LONGB}, - { HAL_PHY_RATE_11B_LONG_2_MBPS, PHYDBG_PREAMBLE_LONGB}, - { HAL_PHY_RATE_11B_LONG_5_5_MBPS, PHYDBG_PREAMBLE_LONGB}, - { HAL_PHY_RATE_11B_LONG_11_MBPS, PHYDBG_PREAMBLE_LONGB}, - { HAL_PHY_RATE_11B_SHORT_2_MBPS, PHYDBG_PREAMBLE_SHORTB}, - { HAL_PHY_RATE_11B_SHORT_5_5_MBPS, PHYDBG_PREAMBLE_SHORTB}, - { HAL_PHY_RATE_11B_SHORT_11_MBPS, PHYDBG_PREAMBLE_SHORTB}, - - - //Spica_Virgo 11A 20MHz Rates - { HAL_PHY_RATE_11A_6_MBPS, PHYDBG_PREAMBLE_OFDM}, - { HAL_PHY_RATE_11A_9_MBPS, PHYDBG_PREAMBLE_OFDM}, - { HAL_PHY_RATE_11A_12_MBPS, PHYDBG_PREAMBLE_OFDM}, - { HAL_PHY_RATE_11A_18_MBPS, PHYDBG_PREAMBLE_OFDM}, - { HAL_PHY_RATE_11A_24_MBPS, PHYDBG_PREAMBLE_OFDM}, - { HAL_PHY_RATE_11A_36_MBPS, PHYDBG_PREAMBLE_OFDM}, - { HAL_PHY_RATE_11A_48_MBPS, PHYDBG_PREAMBLE_OFDM}, - { HAL_PHY_RATE_11A_54_MBPS, PHYDBG_PREAMBLE_OFDM}, - - // 11A 20MHz Rates - { HAL_PHY_RATE_11A_DUP_6_MBPS, PHYDBG_PREAMBLE_OFDM}, - { HAL_PHY_RATE_11A_DUP_9_MBPS, PHYDBG_PREAMBLE_OFDM}, - { HAL_PHY_RATE_11A_DUP_12_MBPS, PHYDBG_PREAMBLE_OFDM}, - { HAL_PHY_RATE_11A_DUP_18_MBPS, PHYDBG_PREAMBLE_OFDM}, - { HAL_PHY_RATE_11A_DUP_24_MBPS, PHYDBG_PREAMBLE_OFDM}, - { HAL_PHY_RATE_11A_DUP_36_MBPS, PHYDBG_PREAMBLE_OFDM}, - { HAL_PHY_RATE_11A_DUP_48_MBPS, PHYDBG_PREAMBLE_OFDM}, - { HAL_PHY_RATE_11A_DUP_54_MBPS, PHYDBG_PREAMBLE_OFDM}, - - //MCS Index #0-15 (20MHz) - { HAL_PHY_RATE_MCS_1NSS_6_5_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_MCS_1NSS_13_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_MCS_1NSS_19_5_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_MCS_1NSS_26_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_MCS_1NSS_39_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_MCS_1NSS_52_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_MCS_1NSS_58_5_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_MCS_1NSS_65_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_MCS_1NSS_MM_SG_7_2_MBPS, PHYDBG_PREAMBLE_NOT_SUPPORTED}, - { HAL_PHY_RATE_MCS_1NSS_MM_SG_14_4_MBPS,PHYDBG_PREAMBLE_NOT_SUPPORTED}, - { HAL_PHY_RATE_MCS_1NSS_MM_SG_21_7_MBPS,PHYDBG_PREAMBLE_NOT_SUPPORTED}, - { HAL_PHY_RATE_MCS_1NSS_MM_SG_28_9_MBPS,PHYDBG_PREAMBLE_NOT_SUPPORTED}, - { HAL_PHY_RATE_MCS_1NSS_MM_SG_43_3_MBPS,PHYDBG_PREAMBLE_NOT_SUPPORTED}, - { HAL_PHY_RATE_MCS_1NSS_MM_SG_57_8_MBPS,PHYDBG_PREAMBLE_NOT_SUPPORTED}, - { HAL_PHY_RATE_MCS_1NSS_MM_SG_65_MBPS, PHYDBG_PREAMBLE_NOT_SUPPORTED}, - { HAL_PHY_RATE_MCS_1NSS_MM_SG_72_2_MBPS, PHYDBG_PREAMBLE_MIXED}, - - //MCS index (40MHz) - { HAL_PHY_RATE_MCS_1NSS_CB_13_5_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_MCS_1NSS_CB_27_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_MCS_1NSS_CB_40_5_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_MCS_1NSS_CB_54_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_MCS_1NSS_CB_81_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_MCS_1NSS_CB_108_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_MCS_1NSS_CB_121_5_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_MCS_1NSS_CB_135_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_15_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_30_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_45_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_60_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_90_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_120_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_135_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_150_MBPS, PHYDBG_PREAMBLE_MIXED}, - -#ifdef WLAN_FEATURE_11AC - /*11AC rate 20MHZ Normal GI*/ - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_6_5_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_13_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_19_5_MBPS,PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_26_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_39_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_52_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_58_5_MBPS,PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_65_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_78_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_86_5_MBPS,PHYDBG_PREAMBLE_MIXED}, - - /*11AC rate 20MHZ Short GI*/ - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_7_2_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_14_4_MBPS,PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_21_6_MBPS,PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_28_8_MBPS,PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_43_3_MBPS,PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_57_7_MBPS,PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_65_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_72_2_MBPS,PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_86_6_MBPS,PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_96_1_MBPS,PHYDBG_PREAMBLE_MIXED}, - - /*11AC rates 40MHZ normal GI*/ - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_13_5_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_27_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_40_5_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_54_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_81_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_108_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_121_5_MBPS,PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_135_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_162_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_180_MBPS, PHYDBG_PREAMBLE_MIXED}, - - /*11AC rates 40MHZ short GI*/ - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_15_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_30_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_45_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_60_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_90_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_120_MBPS,PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_135_MBPS,PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_150_MBPS,PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_180_MBPS,PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_200_MBPS,PHYDBG_PREAMBLE_MIXED}, - - /*11AC rates 80 MHZ normal GI*/ - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_29_3_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_58_5_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_87_8_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_117_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_175_5_MBPS,PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_234_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_263_3_MBPS,PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_292_5_MBPS,PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_351_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_390_MBPS, PHYDBG_PREAMBLE_MIXED}, - - /*11AC rates 80 MHZ short GI*/ - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_32_5_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_65_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_97_5_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_130_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_195_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_260_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_292_5_MBPS,PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_325_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_390_MBPS, PHYDBG_PREAMBLE_MIXED}, - { HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_433_3_MBPS,PHYDBG_PREAMBLE_MIXED}, -#endif -}; - -static unsigned int valid_channel[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 36, 40, 44, 48, - 52, 56, 60, 64, 100, 104, 108, - 112, 116, 120, 124, 128, 132, - 136, 140, 149, 153, 157, 161, - 165, 208, 212, 216, 240, 244, - 248, 252, 0 }; -static unsigned int valid_channel_cb40[] = { 3, 4, 5, 6, 7, 8, 9, 10, 11, 38, - 42, 46, 50, 54, 58, 62, 102, 106, - 110, 114, 118, 122, 126, 130, 134, - 138, 151, 155, 159, 163, 210, 214, - 242, 246, 250, 0 }; -static unsigned int valid_channel_cb80[] = { 7, 42, 46, 50, 54, 58, 106, 110, - 114, 118, 122, 126, 130, 134, 155, - 159, 246, 0 }; - -typedef struct -{ - tANI_BOOLEAN frameGenEnabled; - tANI_BOOLEAN wfmEnabled; - sPttFrameGenParams frameParams; - v_U16_t txpower; - v_U16_t rxmode; - v_U16_t chainSelect; - ePhyChanBondState cbmode; - -} FTM_STATUS ; -static FTM_STATUS ftm_status; - -//tpAniSirGlobal pMac; -static tPttMsgbuffer *pMsgBuf; - #if defined(QCA_WIFI_FTM) #if defined(LINUX_QCMBR) #define ATH_XIOCTL_UNIFIED_UTF_CMD 0x1000 @@ -541,34 +113,6 @@ DEFINE_SPINLOCK(qcmbr_queue_lock); #endif #endif -static void _ftm_status_init(void) -{ - tANI_U8 addr1[ANI_MAC_ADDR_SIZE] = { 0x00, 0x11, 0x11, 0x11, 0x11, 0x11 }; //dest - tANI_U8 addr2[ANI_MAC_ADDR_SIZE] = { 0x00, 0x22, 0x22, 0x22, 0x22, 0x22 }; //sour - tANI_U8 addr3[ANI_MAC_ADDR_SIZE] = { 0x00, 0x33, 0x33, 0x33, 0x33, 0x33 }; //bssId - - ftm_status.wfmEnabled = eANI_BOOLEAN_FALSE; - ftm_status.frameGenEnabled = eANI_BOOLEAN_FALSE; - ftm_status.frameParams.numTestPackets = 0; //Continuous - ftm_status.frameParams.interFrameSpace = 10; - ftm_status.frameParams.rate = HAL_PHY_RATE_11A_6_MBPS; - ftm_status.frameParams.payloadContents = TEST_PAYLOAD_RANDOM; - ftm_status.frameParams.payloadLength = 2000; - ftm_status.frameParams.payloadFillByte = 0xA5; - ftm_status.frameParams.pktAutoSeqNum = eANI_BOOLEAN_FALSE; - ftm_status.frameParams.tx_mode = 0; - ftm_status.frameParams.crc = 0; - ftm_status.frameParams.preamble = PHYDBG_PREAMBLE_OFDM; - memcpy(&ftm_status.frameParams.addr1[0], addr1, ANI_MAC_ADDR_SIZE); - memcpy(&ftm_status.frameParams.addr2[0], addr2, ANI_MAC_ADDR_SIZE); - memcpy(&ftm_status.frameParams.addr3[0], addr3, ANI_MAC_ADDR_SIZE); - ftm_status.txpower = 2 ; - ftm_status.rxmode = RXMODE_ENABLE_ALL; /* macStart() enables all receive pkt types */ - ftm_status.chainSelect = FTM_CHAIN_SEL_R0_T0_ON; - ftm_status.cbmode = 0 ; //none channel bonding - - return; -} /**--------------------------------------------------------------------------- @@ -836,16 +380,6 @@ static VOS_STATUS wlan_ftm_vos_open( v_CONTEXT_t pVosContext, v_SIZE_t hddContex goto err_wda_close; } - vStatus = vos_nv_get_dictionary_data(); - - if (!VOS_IS_STATUS_SUCCESS(vStatus)) - { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - "%s : failed to get dictionary data for NV %d", - __func__, vStatus); - goto err_wda_close; - } - /* If we arrive here, both threads dispacthing messages correctly */ /* Now proceed to open the MAC */ @@ -914,7 +448,7 @@ err_htc_close: err_bmi_close: BMICleanup(pHifContext); -#endif /* #QCA_WIFI_2_0 && QCA_WIFI_FTM */ +#endif /* QCA_WIFI_FTM */ err_sched_close: vos_sched_close(gpVosContext); @@ -1034,308 +568,6 @@ static VOS_STATUS wlan_ftm_vos_close( v_CONTEXT_t vosContext ) return VOS_STATUS_SUCCESS; } -/**--------------------------------------------------------------------------- - - \brief wlan_ftm_priv_set_txifs() - - - This function is used for - - \param - pAdapter - Pointer HDD Context. - - ifs - - \return - 0 for success, non zero for failure - - --------------------------------------------------------------------------*/ - - - -static VOS_STATUS wlan_ftm_priv_set_txifs(hdd_adapter_t *pAdapter,v_U32_t ifs) -{ - hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - if(pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ftm has not started. Please start the ftm. ",__func__); - return VOS_STATUS_E_FAILURE; - } - - /* do not allow to change setting when tx pktgen is enabled */ - if (ftm_status.frameGenEnabled) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:cannot set txifs when pktgen is enabled.",__func__); - return VOS_STATUS_E_FAILURE; - } - - if (ifs > 100000) //max = (MSK_24 / ONE_MICROSECOND) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:ifs value is invalid %x", __func__, ifs); - return VOS_STATUS_E_FAILURE; - } - - ftm_status.frameParams.interFrameSpace = ifs; - - return VOS_STATUS_SUCCESS; -} - -/**--------------------------------------------------------------------------- - - \brief wlan_ftm_priv_set_txpktcnt() - - - This function is used for - - \param - pAdapter - Pointer HDD Context. - - ifs - - \return - 0 for success, non zero for failure - - --------------------------------------------------------------------------*/ - -static VOS_STATUS wlan_ftm_priv_set_txpktcnt(hdd_adapter_t *pAdapter,v_U32_t cnt) -{ - hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - if(pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ftm has not started. Please start the ftm. ",__func__); - return VOS_STATUS_E_FAILURE; - } - - /* do not allow to change setting when tx pktgen is enabled */ - if (ftm_status.frameGenEnabled) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:cannot set txpktcnt when pktgen is enabled.",__func__); - return VOS_STATUS_E_FAILURE; - } - - if (cnt > QWLAN_PHYDBG_TXPKT_CNT_CNT_MASK) //0xFFFF - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:pktcnt value is invalid %08x", __func__, cnt); - return VOS_STATUS_E_FAILURE; - } - - ftm_status.frameParams.numTestPackets = cnt; - - return VOS_STATUS_SUCCESS; -} - -static VOS_STATUS wlan_ftm_priv_set_txpktlen(hdd_adapter_t *pAdapter,v_U32_t len) -{ - hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - if(pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ftm has not started. Please start the ftm. ",__func__); - return VOS_STATUS_E_FAILURE; - } - - /* do not allow to change setting when tx pktgen is enabled */ - if (ftm_status.frameGenEnabled) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:cannot set txpktcnt when pktgen is enabled.",__func__); - return VOS_STATUS_E_FAILURE; - } - - if (len > 4095) //4096 - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:payload len is invalid %08x", __func__, len); - return VOS_STATUS_E_FAILURE; - } - - ftm_status.frameParams.payloadLength = (tANI_U16)len; - - return VOS_STATUS_SUCCESS; -} - - -static VOS_STATUS wlan_ftm_priv_enable_chain(hdd_adapter_t *pAdapter,v_U16_t chainSelect) -{ - uPttMsgs *pMsgBody; - VOS_STATUS status; - v_U16_t chainSelect_save = chainSelect; - hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - unsigned long rc; - - if(pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ftm has not started. Please start the ftm. ",__func__); - return VOS_STATUS_E_FAILURE; - } - - if (chainSelect > FTM_CHAIN_SEL_MAX) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Invalid chain %08x", __func__, chainSelect); - return VOS_STATUS_E_FAILURE; - } - - /* do not allow to change setting when tx pktgen is enabled */ - if (ftm_status.frameGenEnabled) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:cannot select chain when pktgen is enabled.",__func__); - return VOS_STATUS_E_FAILURE; - } - - switch (chainSelect) - { - case FTM_CHAIN_SEL_NO_RX_TX: - chainSelect = PHY_CHAIN_SEL_NO_RX_TX; - break; - - case FTM_CHAIN_SEL_R0_ON: - chainSelect = PHY_CHAIN_SEL_R0_ON; - break; - - case FTM_CHAIN_SEL_T0_ON: - chainSelect = PHY_CHAIN_SEL_T0_ON; - break; - } - - vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0); - init_completion(&pHddCtx->ftm.ftm_comp_var); - pMsgBuf->msgId = PTT_MSG_ENABLE_CHAINS; - pMsgBuf->msgBodyLength = sizeof(tMsgPttEnableChains) + PTT_HEADER_LENGTH; - - pMsgBody = &pMsgBuf->msgBody; - pMsgBody->EnableChains.chainSelect = chainSelect; - - status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - - if (status != VOS_STATUS_SUCCESS) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:wlan_ftm_postmsg failed", __func__); - status = VOS_STATUS_E_FAILURE; - goto done; - } - rc = wait_for_completion_timeout(&pHddCtx->ftm.ftm_comp_var, - msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); - if (!rc) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - FL("wait on ftm_comp_var failed")); - } - - if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ptt response status failed", __func__); - status = VOS_STATUS_E_FAILURE; - goto done; - } - ftm_status.chainSelect = chainSelect_save; -done: - - return status; -} - -/**--------------------------------------------------------------------------- - --------------------------------------------------------------------------*/ -static VOS_STATUS wlan_ftm_priv_get_status(hdd_adapter_t *pAdapter,char *buf) -{ - int ii; - int lenBuf = WE_FTM_MAX_STR_LEN; - int lenRes = 0; - char *chain[] = { - "None", - "R0,R1", - "R0", - "R1", - "T0", - "R0,R1,T0" - }; - char *rx[] = { - "disable", - "11b/g/n", - "11g/n", - "11b" - }; - char *tx[] = { - "stopped", - "started", - }; - hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - - if(pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ftm has not started. Please start the ftm. ",__func__); - return VOS_STATUS_E_FAILURE; - } - - lenRes = snprintf(buf, lenBuf, "\n chainSelect: %s\n rxmode: %s\n " - "txpktgen: %s\n txifs: %d\n txrate: ", - chain[ftm_status.chainSelect], rx[ftm_status.rxmode], - tx[ftm_status.frameGenEnabled], - ftm_status.frameParams.interFrameSpace); - if ((lenRes < 0) || (lenRes >= lenBuf)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - FL("failed to copy data into buf %d"), lenRes); - return VOS_STATUS_E_FAILURE; - } - - buf += lenRes; - lenBuf -= lenRes; - - for (ii = 0; ii < SIZE_OF_TABLE(rateName_rateIndex_tbl); ii++) - { - if (rateName_rateIndex_tbl[ii].rate_index == ftm_status.frameParams.rate) - break; - } - - if (ii < SIZE_OF_TABLE(rateName_rateIndex_tbl)) - { - lenRes = strlcpy(buf, rateName_rateIndex_tbl[ii].rate_str, lenBuf); - } - else - { - lenRes = strlcpy(buf, "invalid", lenBuf); - } - if ((lenRes < 0) || (lenRes >= lenBuf)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - FL("failed to copy data into buf %d"), lenRes); - return VOS_STATUS_E_FAILURE; - } - - buf += lenRes; - lenBuf -= lenRes; - - lenRes = snprintf(buf, lenBuf, "\n txpower: %d\n txpktcnt: %d\n " - "txpktlen: %d\n", ftm_status.txpower, - ftm_status.frameParams.numTestPackets, - ftm_status.frameParams.payloadLength); - - if ((lenRes < 0) || (lenRes >= lenBuf)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - FL("failed to copy data into buf %d"), lenRes); - return VOS_STATUS_E_FAILURE; - } - - return VOS_STATUS_SUCCESS; -} - - -void HEXDUMP(char *s0, char *s1, int len) -{ - int i = 0, j = 0; - printk(KERN_EMERG "%s\n :", s0); - - if (len > 8) - { - for (j = 0; j < len/8; j++) - { - printk(KERN_EMERG "%02x %02x %02x %02x %02x %02x %02x %02x", - s1[j*8], s1[j*8+1], s1[j*8+2], s1[j*8+3], s1[j*8+4], - s1[j*8+5],s1[j*8+6],s1[j*8+7] ); - } - len = len - j*8; - } - for (i = 0; i< len; i++) { - printk(KERN_EMERG "%02x ", s1[j*8+i]); - } - printk("\n"); -} - /*--------------------------------------------------------------------------- \brief vos_ftm_preStart() - @@ -1437,7 +669,7 @@ VOS_STATUS vos_ftm_preStart( v_CONTEXT_t vosContext ) return VOS_STATUS_E_FAILURE; } wma_wait_for_ready_event(gpVosContext->pWDAContext); -#endif /* QCA_WIFI_2_0 && QCA_WIFI_FTM */ +#endif /* QCA_WIFI_FTM */ return VOS_STATUS_SUCCESS; } @@ -1489,12 +721,14 @@ int wlan_hdd_ftm_open(hdd_context_t *pHddCtx) if ( NULL == pHddCtx->hHal ) { hddLog(VOS_TRACE_LEVEL_ERROR,"%s: HAL context is null", __func__); - goto err_sal_close; + goto err_ftm_close; } return VOS_STATUS_SUCCESS; -err_sal_close: + +err_ftm_close: wlan_ftm_vos_close(pVosContext); + err_vos_status_failure: return VOS_STATUS_E_FAILURE; } @@ -1510,78 +744,20 @@ static int hdd_ftm_service_registration(hdd_context_t *pHddCtx) goto err_adapter_open_failure; } - if( wlan_ftm_register_wext(pAdapter)!= 0 ) - { - hddLog(VOS_TRACE_LEVEL_ERROR,"%s: hdd_register_wext failed", __func__); - goto err_sal_close; - } - -#ifndef QCA_WIFI_FTM - //Initialize the nlink service - if(nl_srv_init() != 0) - { - hddLog(VOS_TRACE_LEVEL_ERROR,"%s: nl_srv_init failed", __func__); - goto err_ftm_register_wext_close; - } - -#ifdef WLAN_KD_READY_NOTIFIER - pHddCtx->kd_nl_init = 1; -#endif /* WLAN_KD_READY_NOTIFIER */ - -#ifdef PTT_SOCK_SVC_ENABLE - //Initialize the PTT service - if(ptt_sock_activate_svc(pHddCtx) != 0) - { - hddLog(VOS_TRACE_LEVEL_ERROR,"%s: ptt_sock_activate_svc failed", __func__); - goto err_nl_srv_init; - } -#endif -#endif - - pHddCtx->ftm.processingNVTable = NV_MAX_TABLE; - pHddCtx->ftm.targetNVTableSize = 0; - pHddCtx->ftm.targetNVTablePointer = NULL; - pHddCtx->ftm.processedNVTableSize = 0; - pHddCtx->ftm.tempNVTableBuffer = (v_U8_t *)vos_mem_malloc(MAX_NV_TABLE_SIZE); - if(NULL == pHddCtx->ftm.tempNVTableBuffer) - { - VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s: NV Table Buffer Alloc Fail", __func__); - VOS_ASSERT(0); - goto err_nl_srv_init; - } - vos_mem_zero((v_VOID_t *)pHddCtx->ftm.tempNVTableBuffer, MAX_NV_TABLE_SIZE); - - _ftm_status_init(); /* Initialize the ftm vos event */ if (vos_event_init(&pHddCtx->ftm.ftm_vos_event) != VOS_STATUS_SUCCESS) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s: Unable to init probeEvent", __func__); VOS_ASSERT(0); - vos_mem_free(pHddCtx->ftm.tempNVTableBuffer); - goto err_nl_srv_init; + goto err_adapter_close; } pHddCtx->ftm.ftm_state = WLAN_FTM_INITIALIZED; return VOS_STATUS_SUCCESS; -err_nl_srv_init: -#ifndef QCA_WIFI_FTM -#ifdef WLAN_KD_READY_NOTIFIER -nl_srv_exit(pHddCtx->ptt_pid); -#else -nl_srv_exit(); -#endif /* WLAN_KD_READY_NOTIFIER */ -#endif - -#ifndef QCA_WIFI_FTM -err_ftm_register_wext_close: -#endif -hdd_UnregisterWext(pAdapter->dev); - -err_sal_close: +err_adapter_close: hdd_close_all_adapters( pHddCtx ); err_adapter_open_failure: @@ -1604,7 +780,6 @@ int wlan_hdd_ftm_close(hdd_context_t *pHddCtx) return VOS_STATUS_E_NOMEM; } - /*release the wlan_hdd_process_ftm_cmd(), if waiting for any response.*/ if (pHddCtx->ftm.IsCmdPending == TRUE) { if (vos_event_set(&pHddCtx->ftm.ftm_vos_event)!= VOS_STATUS_SUCCESS) @@ -1621,24 +796,7 @@ int wlan_hdd_ftm_close(hdd_context_t *pHddCtx) wlan_ftm_stop(pHddCtx); } -#ifdef WLAN_KD_READY_NOTIFIER - nl_srv_exit(pHddCtx->ptt_pid); -#else - nl_srv_exit(); -#endif /* WLAN_KD_READY_NOTIFIER */ - //TODO---------- - //Deregister the device with the kernel - hdd_UnregisterWext(pAdapter->dev); - hdd_close_all_adapters( pHddCtx ); -#if 0 - if(test_bit(NET_DEVICE_REGISTERED, &pAdapter->event_flags)) - { - unregister_netdev(pAdapter->dev); - clear_bit(NET_DEVICE_REGISTERED, &pAdapter->event_flags); - } -#endif - //----------------- vosStatus = vos_sched_close( vosContext ); if (!VOS_IS_STATUS_SUCCESS(vosStatus)) { @@ -1658,7 +816,6 @@ int wlan_hdd_ftm_close(hdd_context_t *pHddCtx) "%s: Failed to destroy ftm_vos Event",__func__); VOS_ASSERT( VOS_IS_STATUS_SUCCESS( vosStatus ) ); } - vos_mem_free(pHddCtx->ftm.tempNVTableBuffer); //Free up dynamically allocated members inside HDD Adapter kfree(pHddCtx->cfg_ini); @@ -1682,34 +839,11 @@ int wlan_hdd_ftm_close(hdd_context_t *pHddCtx) /**--------------------------------------------------------------------------- - \brief wlan_ftm_send_response() - - - The function sends the response to the ptt socket application running in user space. - - \param - pAdapter - Pointer HDD Context. - - \return - 0 for success, non zero for failure - - --------------------------------------------------------------------------*/ - -static VOS_STATUS wlan_ftm_send_response(hdd_context_t *pHddCtx){ - - if( ptt_sock_send_msg_to_app(&pHddCtx->ftm.wnl->wmsg, 0, ANI_NL_MSG_PUMAC, pHddCtx->ftm.wnl->nlh.nlmsg_pid) < 0) { - - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, ("Ptt Socket error sending message to the app!!")); - return VOS_STATUS_E_FAILURE; - } - return VOS_STATUS_SUCCESS; -} - -/**--------------------------------------------------------------------------- - \brief wlan_hdd_ftm_start() - - This function gets called when the FTM start commands received from the ptt socket application and - it starts the following modules. - 1) SAL Start. - 2) BAL Start. + This function starts the following modules. + 1) WDA Start. + 2) HTC Start. 3) MAC Start to download the firmware. @@ -1730,7 +864,7 @@ static int wlan_hdd_ftm_start(hdd_context_t *pHddCtx) } VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Starting Libra SW", __func__); + "%s: Starting CLD SW", __func__); /* We support only one instance for now ...*/ if (pVosContext == NULL) @@ -1748,10 +882,6 @@ static int wlan_hdd_ftm_start(hdd_context_t *pHddCtx) goto err_status_failure; } - /* - Prima needs to start the WDA correctly instead of BAL and SAL - */ - /* Vos preStart is calling */ if ( !VOS_IS_STATUS_SUCCESS(vos_ftm_preStart(pHddCtx->pvosContext) ) ) { @@ -1810,7 +940,6 @@ static int wlan_ftm_stop(hdd_context_t *pHddCtx) return VOS_STATUS_E_FAILURE; } - //if(pHddCtx->ftm.cmd_iwpriv == TRUE) { /* STOP MAC only */ v_VOID_t *hHal; @@ -1838,3606 +967,9 @@ int hdd_ftm_stop(hdd_context_t *pHddCtx) } #endif -/**--------------------------------------------------------------------------- - - \brief wlan_hdd_ftm_get_nv_table() - - Get Specific NV table - - \param - ftmCmd - Pointer FTM Commad Buffer - - \return - int - -1, Process Host command fail, vail out - 1, Process Host command success - - --------------------------------------------------------------------------*/ -int wlan_hdd_ftm_get_nv_table -( - hdd_context_t *pHddCtx, - tPttMsgbuffer *ftmCmd -) -{ - VOS_STATUS nvStatus = VOS_STATUS_SUCCESS; - pttGetNvTable *nvTable = (pttGetNvTable *)&ftmCmd->msgBody.GetNvTable; - v_SIZE_t nvSize; - sHalNv *nvContents = NULL; - - - if (NULL == pHddCtx) - { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, - "Not valid driver context"); - return -EINVAL; - } - - /* Test first chunk of NV table */ - if ((NV_MAX_TABLE == pHddCtx->ftm.processingNVTable) || - (0 == pHddCtx->ftm.processedNVTableSize)) - { - nvStatus = vos_nv_getNVBuffer((void **)&nvContents, &nvSize); - if ((VOS_STATUS_SUCCESS != nvStatus) || (NULL == nvContents)) - { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - FL("Fail to get cached NV value Status %d"), nvStatus); - return -EIO; - } - - switch (nvTable->nvTable) - { - case NV_TABLE_RATE_POWER_SETTINGS: - pHddCtx->ftm.targetNVTableSize = sizeof(nvContents->tables.pwrOptimum); - pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)&nvContents->tables.pwrOptimum; - break; - - case NV_TABLE_REGULATORY_DOMAINS: - pHddCtx->ftm.targetNVTableSize = sizeof(nvContents->tables.regDomains); - pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)&nvContents->tables.regDomains; - break; - - case NV_TABLE_DEFAULT_COUNTRY: - pHddCtx->ftm.targetNVTableSize = sizeof(nvContents->tables.defaultCountryTable); - pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)&nvContents->tables.defaultCountryTable; - break; - - case NV_TABLE_TPC_POWER_TABLE: - pHddCtx->ftm.targetNVTableSize = sizeof(nvContents->tables.plutCharacterized); - pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)&nvContents->tables.plutCharacterized[0]; - break; - - case NV_TABLE_TPC_PDADC_OFFSETS: - pHddCtx->ftm.targetNVTableSize = sizeof(nvContents->tables.plutPdadcOffset); - pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)&nvContents->tables.plutPdadcOffset[0]; - break; - - case NV_TABLE_VIRTUAL_RATE: - pHddCtx->ftm.targetNVTableSize = sizeof(nvContents->tables.pwrOptimum_virtualRate); - pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)&nvContents->tables.pwrOptimum_virtualRate[0]; - break; - - case NV_TABLE_RSSI_CHANNEL_OFFSETS: - pHddCtx->ftm.targetNVTableSize = sizeof(nvContents->tables.rssiChanOffsets); - pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)&nvContents->tables.rssiChanOffsets[0]; - break; - - case NV_TABLE_HW_CAL_VALUES: - pHddCtx->ftm.targetNVTableSize = sizeof(nvContents->tables.hwCalValues); - pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)&nvContents->tables.hwCalValues; - break; - - case NV_TABLE_FW_CONFIG: - pHddCtx->ftm.targetNVTableSize = sizeof(nvContents->tables.fwConfig); - pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)&nvContents->tables.fwConfig; - break; - - case NV_TABLE_ANTENNA_PATH_LOSS: - pHddCtx->ftm.targetNVTableSize = sizeof(nvContents->tables.antennaPathLoss); - pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)&nvContents->tables.antennaPathLoss[0]; - break; - - case NV_TABLE_PACKET_TYPE_POWER_LIMITS: - pHddCtx->ftm.targetNVTableSize = sizeof(nvContents->tables.pktTypePwrLimits); - pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)&nvContents->tables.pktTypePwrLimits[0][0]; - break; - - default: - VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - "Not Valid NV Table %d", nvTable->nvTable); - return -EIO; - break; - } - - if (pHddCtx->ftm.targetNVTableSize != nvTable->tableSize) - { - /* Invalid table size, discard and initialize data */ - VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, - "Invalid Table Size %d for Table %d" - " expected size %d", nvTable->tableSize, nvTable->nvTable, - pHddCtx->ftm.targetNVTableSize); - pHddCtx->ftm.processingNVTable = NV_MAX_TABLE; - pHddCtx->ftm.targetNVTableSize = 0; - pHddCtx->ftm.processedNVTableSize = 0; - vos_mem_zero(pHddCtx->ftm.tempNVTableBuffer, MAX_NV_TABLE_SIZE); - return -EINVAL; - } - - /* Set Current Processing NV table type */ - pHddCtx->ftm.processingNVTable = nvTable->nvTable; - /* Copy target NV table value into temp context buffer */ - vos_mem_copy(pHddCtx->ftm.tempNVTableBuffer, - pHddCtx->ftm.targetNVTablePointer, - pHddCtx->ftm.targetNVTableSize); - - } - - if (pHddCtx->ftm.processingNVTable != nvTable->nvTable) - { - /* Invalid table type */ - VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, - "Invalid NV Table, now Processing %d, not %d", - pHddCtx->ftm.processingNVTable, nvTable->nvTable); - pHddCtx->ftm.processingNVTable = NV_MAX_TABLE; - pHddCtx->ftm.targetNVTableSize = 0; - pHddCtx->ftm.processedNVTableSize = 0; - vos_mem_zero(pHddCtx->ftm.tempNVTableBuffer, MAX_NV_TABLE_SIZE); - - return -EINVAL; - } - - /* Copy next chunk of NV table value into response buffer */ - vos_mem_copy(&nvTable->tableData, - pHddCtx->ftm.tempNVTableBuffer + pHddCtx->ftm.processedNVTableSize, - nvTable->chunkSize); - /* Update processed pointer to prepare next chunk copy */ - pHddCtx->ftm.processedNVTableSize += nvTable->chunkSize; - - if (pHddCtx->ftm.targetNVTableSize == pHddCtx->ftm.processedNVTableSize) - { - /* Finished to process last chunk of data, initialize buffer */ - pHddCtx->ftm.processingNVTable = NV_MAX_TABLE; - pHddCtx->ftm.targetNVTableSize = 0; - pHddCtx->ftm.processedNVTableSize = 0; - vos_mem_zero(pHddCtx->ftm.tempNVTableBuffer, MAX_NV_TABLE_SIZE); - } - - return 1; -} - -/**--------------------------------------------------------------------------- - - \brief wlan_hdd_ftm_set_nv_table() - - Set Specific NV table as given - - \param - ftmCmd - Pointer FTM Commad Buffer - - \return - int - -1, Process Host command fail, vail out - 1, Process Host command success - - --------------------------------------------------------------------------*/ -int wlan_hdd_ftm_set_nv_table -( - hdd_context_t *pHddCtx, - tPttMsgbuffer *ftmCmd -) -{ - VOS_STATUS nvStatus = VOS_STATUS_SUCCESS; - pttSetNvTable *nvTable = (pttSetNvTable *)&ftmCmd->msgBody.SetNvTable; - v_SIZE_t nvSize; - sHalNv *nvContents = NULL; - - if (NULL == pHddCtx) - { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, - "Not valid driver context"); - return -EINVAL; - } - - /* Test first chunk of NV table */ - if ((NV_MAX_TABLE == pHddCtx->ftm.processingNVTable) || - (0 == pHddCtx->ftm.processedNVTableSize)) - { - nvStatus = vos_nv_getNVBuffer((void **)&nvContents, &nvSize); - if ((VOS_STATUS_SUCCESS != nvStatus) || (NULL == nvContents)) - { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - FL("Fail to get cached NV value Status %d"), nvStatus); - return -EINVAL; - } - - switch (nvTable->nvTable) - { - case NV_TABLE_RATE_POWER_SETTINGS: - pHddCtx->ftm.targetNVTableSize = sizeof(nvContents->tables.pwrOptimum); - pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)&nvContents->tables.pwrOptimum; - break; - - case NV_TABLE_REGULATORY_DOMAINS: - pHddCtx->ftm.targetNVTableSize = sizeof(nvContents->tables.regDomains); - pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)&nvContents->tables.regDomains; - break; - - case NV_TABLE_DEFAULT_COUNTRY: - pHddCtx->ftm.targetNVTableSize = sizeof(nvContents->tables.defaultCountryTable); - pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)&nvContents->tables.defaultCountryTable; - break; - - case NV_TABLE_TPC_POWER_TABLE: - pHddCtx->ftm.targetNVTableSize = sizeof(nvContents->tables.plutCharacterized); - pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)&nvContents->tables.plutCharacterized[0]; - break; - - case NV_TABLE_TPC_PDADC_OFFSETS: - pHddCtx->ftm.targetNVTableSize = sizeof(nvContents->tables.plutPdadcOffset); - pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)&nvContents->tables.plutPdadcOffset[0]; - break; - - case NV_TABLE_VIRTUAL_RATE: - pHddCtx->ftm.targetNVTableSize = sizeof(nvContents->tables.pwrOptimum_virtualRate); - pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)&nvContents->tables.pwrOptimum_virtualRate[0]; - break; - - case NV_TABLE_RSSI_CHANNEL_OFFSETS: - pHddCtx->ftm.targetNVTableSize = sizeof(nvContents->tables.rssiChanOffsets); - pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)&nvContents->tables.rssiChanOffsets[0]; - break; - - case NV_TABLE_HW_CAL_VALUES: - pHddCtx->ftm.targetNVTableSize = sizeof(nvContents->tables.hwCalValues); - pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)&nvContents->tables.hwCalValues; - break; - - case NV_TABLE_FW_CONFIG: - pHddCtx->ftm.targetNVTableSize = sizeof(nvContents->tables.fwConfig); - pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)&nvContents->tables.fwConfig; - break; - - case NV_TABLE_ANTENNA_PATH_LOSS: - pHddCtx->ftm.targetNVTableSize = sizeof(nvContents->tables.antennaPathLoss); - pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)&nvContents->tables.antennaPathLoss[0]; - break; - - case NV_TABLE_PACKET_TYPE_POWER_LIMITS: - pHddCtx->ftm.targetNVTableSize = sizeof(nvContents->tables.pktTypePwrLimits); - pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)&nvContents->tables.pktTypePwrLimits[0][0]; - break; - - default: - VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - "Not Valid NV Table %d", nvTable->nvTable); - return -EIO; - break; - } - - /* Set Current Processing NV table type */ - pHddCtx->ftm.processingNVTable = nvTable->nvTable; - if (pHddCtx->ftm.targetNVTableSize != nvTable->tableSize) - { - VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, - "Invalid Table Size %d", nvTable->tableSize); - pHddCtx->ftm.processingNVTable = NV_MAX_TABLE; - pHddCtx->ftm.targetNVTableSize = 0; - pHddCtx->ftm.processedNVTableSize = 0; - vos_mem_zero(pHddCtx->ftm.tempNVTableBuffer, MAX_NV_TABLE_SIZE); - return -EINVAL; - } - } - - if (pHddCtx->ftm.processingNVTable != nvTable->nvTable) - { - VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - "Invalid NV Table, now Processing %d, not %d", - pHddCtx->ftm.processingNVTable, nvTable->nvTable); - pHddCtx->ftm.processingNVTable = NV_MAX_TABLE; - pHddCtx->ftm.targetNVTableSize = 0; - pHddCtx->ftm.processedNVTableSize = 0; - vos_mem_zero(pHddCtx->ftm.tempNVTableBuffer, MAX_NV_TABLE_SIZE); - return -EINVAL; - } - vos_mem_copy(pHddCtx->ftm.tempNVTableBuffer + pHddCtx->ftm.processedNVTableSize, - &nvTable->tableData, - nvTable->chunkSize); - - pHddCtx->ftm.processedNVTableSize += nvTable->chunkSize; - if (pHddCtx->ftm.targetNVTableSize == pHddCtx->ftm.processedNVTableSize) - { - vos_mem_copy(pHddCtx->ftm.targetNVTablePointer, - pHddCtx->ftm.tempNVTableBuffer, - pHddCtx->ftm.targetNVTableSize); - pHddCtx->ftm.processingNVTable = NV_MAX_TABLE; - pHddCtx->ftm.targetNVTableSize = 0; - pHddCtx->ftm.processedNVTableSize = 0; - vos_mem_zero(pHddCtx->ftm.tempNVTableBuffer, MAX_NV_TABLE_SIZE); - } - - return 1; -} - -/**--------------------------------------------------------------------------- - - \brief wlan_hdd_ftm_blank_nv() - - Set all NV table value as default - - \param - ftmCmd - Pointer FTM Commad Buffer - - \return - int - -1, Process Host command fail, vail out - 0, Process Host command success - - --------------------------------------------------------------------------*/ -int wlan_hdd_ftm_blank_nv_table -( - tPttMsgbuffer *ftmCmd -) -{ - VOS_STATUS nvStatus = VOS_STATUS_SUCCESS; - v_SIZE_t nvSize; - v_SIZE_t itemSize; - sHalNv *nvContents = NULL; - - nvStatus = vos_nv_getNVBuffer((void **)&nvContents, &nvSize); - if((VOS_STATUS_SUCCESS != nvStatus) || (NULL == nvContents)) - { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - FL("Fail to get cached NV value Status %d"), nvStatus); - return -EIO; - } - - itemSize = sizeof(nvContents->tables.pwrOptimum); - memcpy(&nvContents->tables.pwrOptimum, - &nvDefaults.tables.pwrOptimum, - itemSize); - - itemSize = sizeof(nvContents->tables.regDomains); - memcpy(&nvContents->tables.regDomains, - &nvDefaults.tables.regDomains, - itemSize); - - itemSize = sizeof(nvContents->tables.defaultCountryTable); - memcpy(&nvContents->tables.defaultCountryTable, - &nvDefaults.tables.defaultCountryTable, - itemSize); - - itemSize = sizeof(nvContents->tables.plutCharacterized); - memcpy(&nvContents->tables.plutCharacterized[0], - &nvDefaults.tables.plutCharacterized[0], - itemSize); - - itemSize = sizeof(nvContents->tables.plutPdadcOffset); - memcpy(&nvContents->tables.plutPdadcOffset[0], - &nvDefaults.tables.plutPdadcOffset[0], - itemSize); - - itemSize = sizeof(nvContents->tables.pwrOptimum_virtualRate); - memcpy(&nvContents->tables.pwrOptimum_virtualRate[0], - &nvDefaults.tables.pwrOptimum_virtualRate[0], - itemSize); - - itemSize = sizeof(nvContents->tables.rssiChanOffsets); - memcpy(&nvContents->tables.rssiChanOffsets[0], - &nvDefaults.tables.rssiChanOffsets[0], - itemSize); - - itemSize = sizeof(nvContents->tables.hwCalValues); - memcpy(&nvContents->tables.hwCalValues, - &nvDefaults.tables.hwCalValues, - itemSize); - - itemSize = sizeof(nvContents->tables.antennaPathLoss); - memcpy(&nvContents->tables.antennaPathLoss[0], - &nvDefaults.tables.antennaPathLoss[0], - itemSize); - - itemSize = sizeof(nvContents->tables.pktTypePwrLimits); - memcpy(&nvContents->tables.pktTypePwrLimits[0][0], - &nvDefaults.tables.pktTypePwrLimits[0][0], - itemSize); - - return 1; -} - -/**--------------------------------------------------------------------------- - - \brief wlan_hdd_ftm_delete_nv_table() - - Delete Specific NV table - - \param - ftmCmd - Pointer FTM Commad Buffer - - \return - int - -1, Process Host command fail, vail out - 1, Process Host command success - - --------------------------------------------------------------------------*/ -int wlan_hdd_ftm_delete_nv_table -( - tPttMsgbuffer *ftmCmd -) -{ - VOS_STATUS nvStatus = VOS_STATUS_SUCCESS; - tMsgPttDelNvTable *nvTable = (tMsgPttDelNvTable *)&ftmCmd->msgBody.DelNvTable; - v_SIZE_t nvSize; - v_SIZE_t itemSize; - sHalNv *nvContents = NULL; - - nvStatus = vos_nv_getNVBuffer((void **)&nvContents, &nvSize); - if ((VOS_STATUS_SUCCESS != nvStatus) || (NULL == nvContents)) - { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - FL("Fail to get cached NV value Status %d"), nvStatus); - return -EIO; - } - - switch (nvTable->nvTable) - { - case NV_TABLE_RATE_POWER_SETTINGS: - itemSize = sizeof(nvContents->tables.pwrOptimum); - memcpy(&nvContents->tables.pwrOptimum, - &nvDefaults.tables.pwrOptimum, - itemSize); - break; - - case NV_TABLE_REGULATORY_DOMAINS: - itemSize = sizeof(nvContents->tables.regDomains); - memcpy(&nvContents->tables.regDomains, - &nvDefaults.tables.regDomains, - itemSize); - break; - - case NV_TABLE_DEFAULT_COUNTRY: - itemSize = sizeof(nvContents->tables.defaultCountryTable); - memcpy(&nvContents->tables.defaultCountryTable, - &nvDefaults.tables.defaultCountryTable, - itemSize); - break; - - case NV_TABLE_TPC_POWER_TABLE: - itemSize = sizeof(nvContents->tables.plutCharacterized); - memcpy(&nvContents->tables.plutCharacterized[0], - &nvDefaults.tables.plutCharacterized[0], - itemSize); - break; - - case NV_TABLE_TPC_PDADC_OFFSETS: - itemSize = sizeof(nvContents->tables.plutPdadcOffset); - memcpy(&nvContents->tables.plutPdadcOffset[0], - &nvDefaults.tables.plutPdadcOffset[0], - itemSize); - break; - - case NV_TABLE_VIRTUAL_RATE: - itemSize = sizeof(nvContents->tables.pwrOptimum_virtualRate); - memcpy(&nvContents->tables.pwrOptimum_virtualRate[0], - &nvDefaults.tables.pwrOptimum_virtualRate[0], - itemSize); - break; - - case NV_TABLE_RSSI_CHANNEL_OFFSETS: - itemSize = sizeof(nvContents->tables.rssiChanOffsets); - memcpy(&nvContents->tables.rssiChanOffsets[0], - &nvDefaults.tables.rssiChanOffsets[0], - itemSize); - break; - - case NV_TABLE_HW_CAL_VALUES: - itemSize = sizeof(nvContents->tables.hwCalValues); - memcpy(&nvContents->tables.hwCalValues, - &nvDefaults.tables.hwCalValues, - itemSize); - break; - - case NV_TABLE_FW_CONFIG: - itemSize = sizeof(nvContents->tables.fwConfig); - memcpy(&nvContents->tables.fwConfig, - &nvDefaults.tables.fwConfig, - itemSize); - break; - - case NV_TABLE_ANTENNA_PATH_LOSS: - itemSize = sizeof(nvContents->tables.antennaPathLoss); - memcpy(&nvContents->tables.antennaPathLoss[0], - &nvDefaults.tables.antennaPathLoss[0], - itemSize); - break; - - case NV_TABLE_PACKET_TYPE_POWER_LIMITS: - itemSize = sizeof(nvContents->tables.pktTypePwrLimits); - memcpy(&nvContents->tables.pktTypePwrLimits[0][0], - &nvDefaults.tables.pktTypePwrLimits[0][0], - itemSize); - break; - - default: - VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - "Not Valid NV Table %d", nvTable->nvTable); - return -EIO; - break; - } - - return 1; -} - -/**--------------------------------------------------------------------------- - - \brief wlan_hdd_ftm_get_nv_field() - - Get Specific NV field - - \param - ftmCmd - Pointer FTM Commad Buffer - - \return - int - -1, Process Host command fail, vail out - 1, Process Host command success - - --------------------------------------------------------------------------*/ -int wlan_hdd_ftm_get_nv_field -( - tPttMsgbuffer *ftmCmd -) -{ - sNvFields nvFieldDataBuffer; - tMsgPttGetNvField *nvField = (tMsgPttGetNvField *)&ftmCmd->msgBody.GetNvField; - VOS_STATUS nvStatus = VOS_STATUS_SUCCESS; - sHalNv *nvContents = NULL; - v_SIZE_t nvSize; - - nvStatus = vos_nv_getNVBuffer((void **)&nvContents, &nvSize); - if ((VOS_STATUS_SUCCESS != nvStatus) || (NULL == nvContents)) - { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - FL("Fail to get cached NV value Status %d"), nvStatus); - return -EIO; - } - memcpy(&nvFieldDataBuffer, &nvContents->fields, sizeof(sNvFields)); - - switch (nvField->nvField) - { - case NV_COMMON_PRODUCT_ID: - memcpy((void *)&nvField->fieldData, - &nvFieldDataBuffer.productId, - sizeof(nvFieldDataBuffer.productId)); - break; - - case NV_COMMON_PRODUCT_BANDS: - memcpy((void *)&nvField->fieldData, - &nvFieldDataBuffer.productBands, - sizeof(nvFieldDataBuffer.productBands)); - break; - - case NV_COMMON_NUM_OF_TX_CHAINS: - memcpy((void *)&nvField->fieldData, - &nvFieldDataBuffer.numOfTxChains, - sizeof(nvFieldDataBuffer.numOfTxChains)); - break; - - case NV_COMMON_NUM_OF_RX_CHAINS: - memcpy((void *)&nvField->fieldData, - &nvFieldDataBuffer.numOfRxChains, - sizeof(nvFieldDataBuffer.numOfRxChains)); - break; - - case NV_COMMON_MAC_ADDR: - memcpy((void *)&nvField->fieldData, - &nvFieldDataBuffer.macAddr[0], - NV_FIELD_MAC_ADDR_SIZE); - break; - - case NV_COMMON_MFG_SERIAL_NUMBER: - memcpy((void *)&nvField->fieldData, - &nvFieldDataBuffer.mfgSN[0], - NV_FIELD_MFG_SN_SIZE); - break; - - case NV_COMMON_WLAN_NV_REV_ID: - memcpy((void *)&nvField->fieldData, - &nvFieldDataBuffer.wlanNvRevId, - sizeof(nvFieldDataBuffer.wlanNvRevId)); - break; - - case NV_COMMON_COUPLER_TYPE: - memcpy((void *)&nvField->fieldData, - &nvFieldDataBuffer.couplerType, - sizeof(nvFieldDataBuffer.couplerType)); - break; - - case NV_COMMON_NV_VERSION: - { - VOS_STATUS nvEmbededStatus = VOS_STATUS_SUCCESS; - v_U8_t nvVersion = nvFieldDataBuffer.nvVersion; - - nvEmbededStatus = vos_nv_isEmbeddedNV(); - - if ( nvEmbededStatus == VOS_STATUS_SUCCESS ) - { - // High bit is set to indicate embedded NV.. - nvVersion = nvVersion | NV_EMBEDDED_VERSION; - } - - memcpy((void *)&nvField->fieldData, - &nvVersion, - sizeof(nvFieldDataBuffer.nvVersion)); - } - break; - - default: - VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - "Not Valid NV field %d", nvField->nvField); - return -EIO; - break; - } - - return 1; -} - -/**--------------------------------------------------------------------------- - - \brief wlan_hdd_ftm_set_nv_field() - - Set Specific NV field - - \param - ftmCmd - Pointer FTM Commad Buffer - - \return - int - -1, Process Host command fail, vail out - 1, Process Host command success - - --------------------------------------------------------------------------*/ -int wlan_hdd_ftm_set_nv_field -( - tPttMsgbuffer *ftmCmd -) -{ - tMsgPttSetNvField *nvField = (tMsgPttSetNvField *)&ftmCmd->msgBody.SetNvField; - VOS_STATUS nvStatus = VOS_STATUS_SUCCESS; - v_SIZE_t nvSize; - sHalNv *nvContents = NULL; - v_U8_t macLoop; - v_U8_t *pNVMac; - v_U8_t lastByteMAC; - - - nvStatus = vos_nv_getNVBuffer((void **)&nvContents, &nvSize); - if((VOS_STATUS_SUCCESS != nvStatus) || (NULL == nvContents)) - { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - FL("Fail to get cached NV value Status %d"), nvStatus); - return -EIO; - } - - switch (nvField->nvField) - { - case NV_COMMON_PRODUCT_ID: - memcpy(&nvContents->fields.productId, - &nvField->fieldData, - sizeof(nvContents->fields.productId)); - break; - - case NV_COMMON_PRODUCT_BANDS: - memcpy(&nvContents->fields.productBands, - &nvField->fieldData, - sizeof(nvContents->fields.productBands)); - break; - - case NV_COMMON_NUM_OF_TX_CHAINS: - memcpy(&nvContents->fields.numOfTxChains, - &nvField->fieldData, - sizeof(nvContents->fields.numOfTxChains)); - break; - - case NV_COMMON_NUM_OF_RX_CHAINS: - memcpy(&nvContents->fields.numOfRxChains, - &nvField->fieldData, - sizeof(nvContents->fields.numOfRxChains)); - break; - - case NV_COMMON_MAC_ADDR: - /* If Last byte is larger than 252 (0xFC), return Error, - * Since 3MACs should be derived from first MAC */ - if(QWLAN_MAX_MAC_LAST_BYTE_VALUE < - nvField->fieldData.macAddr.macAddr1[VOS_MAC_ADDRESS_LEN - 1]) - { - VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - "Last Byte of the seed MAC is too large 0x%x", - nvField->fieldData.macAddr.macAddr1[VOS_MAC_ADDRESS_LEN - 1]); - return -EILSEQ; - } - - pNVMac = (v_U8_t *)nvContents->fields.macAddr; - lastByteMAC = nvField->fieldData.macAddr.macAddr1[VOS_MAC_ADDRESS_LEN - 1]; - for(macLoop = 0; macLoop < VOS_MAX_CONCURRENCY_PERSONA; macLoop++) - { - nvField->fieldData.macAddr.macAddr1[VOS_MAC_ADDRESS_LEN - 1] = - lastByteMAC + macLoop; - vos_mem_copy(pNVMac + (macLoop * NV_FIELD_MAC_ADDR_SIZE), - &nvField->fieldData.macAddr.macAddr1[0], - NV_FIELD_MAC_ADDR_SIZE); - } - break; - - case NV_COMMON_MFG_SERIAL_NUMBER: - memcpy(&nvContents->fields.mfgSN[0], - &nvField->fieldData, - NV_FIELD_MFG_SN_SIZE); - break; - - case NV_COMMON_WLAN_NV_REV_ID: - memcpy(&nvContents->fields.wlanNvRevId, - &nvField->fieldData, - sizeof(nvContents->fields.wlanNvRevId)); - break; - - case NV_COMMON_COUPLER_TYPE: - memcpy(&nvContents->fields.couplerType, - &nvField->fieldData, - sizeof(nvContents->fields.couplerType)); - break; - - case NV_COMMON_NV_VERSION: - VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - "Cannot modify NV version field %d", nvField->nvField); - return -EIO; - break; - - default: - VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - "Not Valid NV field %d", nvField->nvField); - return -EIO; - break; - } - - return 1; -} - -/**--------------------------------------------------------------------------- - - \brief wlan_hdd_ftm_store_nv_table() - - Store Cached NV information into Flash Memory, file - - \param - ftmCmd - Pointer FTM Commad Buffer - - \return - int - -1, Process Host command fail, vail out - 0, Process Host command success - - --------------------------------------------------------------------------*/ -int wlan_hdd_ftm_store_nv_table -( - tPttMsgbuffer *ftmCmd -) -{ - VOS_STATUS nvStatus = VOS_STATUS_SUCCESS; - v_SIZE_t nvSize; - sHalNv *nvContents = NULL; - tMsgPttStoreNvTable *nvTable = (tMsgPttStoreNvTable *)&ftmCmd->msgBody.StoreNvTable; - void *tablePtr = NULL; - unsigned int tableSize = 0; - VNV_TYPE tableVNVType = VNV_FIELD_IMAGE; - - nvStatus = vos_nv_getNVBuffer((void **)&nvContents, &nvSize); - if((VOS_STATUS_SUCCESS != nvStatus) || (NULL == nvContents)) - { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - FL("Fail to get cached NV value Status %d"), nvStatus); - return -EIO; - } - - /* Set Platform type as PRIMA */ - nvContents->fields.wlanNvRevId = 2; - - switch(nvTable->nvTable) - { - case NV_FIELDS_IMAGE: - tablePtr = (void *)&nvContents->fields; - tableSize = sizeof(nvContents->fields); - tableVNVType = VNV_FIELD_IMAGE; - break; - - case NV_TABLE_RATE_POWER_SETTINGS: - tablePtr = (void *)&nvContents->tables.pwrOptimum[0]; - tableSize = sizeof(nvContents->tables.pwrOptimum); - tableVNVType = VNV_RATE_TO_POWER_TABLE; - break; - - case NV_TABLE_REGULATORY_DOMAINS: - tablePtr = (void *)&nvContents->tables.regDomains[0]; - tableSize = sizeof(nvContents->tables.regDomains); - tableVNVType = VNV_REGULARTORY_DOMAIN_TABLE; - break; - - case NV_TABLE_DEFAULT_COUNTRY: - tablePtr = (void *)&nvContents->tables.defaultCountryTable; - tableSize = sizeof(nvContents->tables.defaultCountryTable); - tableVNVType = VNV_DEFAULT_LOCATION; - break; - - case NV_TABLE_TPC_POWER_TABLE: - tablePtr = (void *)&nvContents->tables.plutCharacterized[0]; - tableSize = sizeof(nvContents->tables.plutCharacterized); - tableVNVType = VNV_TPC_POWER_TABLE; - break; - - case NV_TABLE_TPC_PDADC_OFFSETS: - tablePtr = (void *)&nvContents->tables.plutPdadcOffset[0]; - tableSize = sizeof(nvContents->tables.plutPdadcOffset); - tableVNVType = VNV_TPC_PDADC_OFFSETS; - break; - - case NV_TABLE_VIRTUAL_RATE: - tablePtr = (void *)&nvContents->tables.pwrOptimum_virtualRate[0]; - tableSize = sizeof(nvContents->tables.pwrOptimum_virtualRate); - tableVNVType = VNV_TABLE_VIRTUAL_RATE; - break; - - case NV_TABLE_RSSI_CHANNEL_OFFSETS: - tablePtr = (void *)&nvContents->tables.rssiChanOffsets[0]; - tableSize = sizeof(nvContents->tables.rssiChanOffsets); - tableVNVType = VNV_RSSI_CHANNEL_OFFSETS; - break; - - case NV_TABLE_HW_CAL_VALUES: - tablePtr = (void *)&nvContents->tables.hwCalValues; - tableSize = sizeof(nvContents->tables.hwCalValues); - tableVNVType = VNV_HW_CAL_VALUES; - break; - - case NV_TABLE_FW_CONFIG: - tablePtr = (void *)&nvContents->tables.fwConfig; - tableSize = sizeof(nvContents->tables.fwConfig); - tableVNVType = VNV_FW_CONFIG; - break; - - case NV_TABLE_ANTENNA_PATH_LOSS: - tablePtr = (void *)&nvContents->tables.antennaPathLoss[0]; - tableSize = sizeof(nvContents->tables.antennaPathLoss); - tableVNVType = VNV_ANTENNA_PATH_LOSS; - break; - - case NV_TABLE_PACKET_TYPE_POWER_LIMITS: - tablePtr = (void *)&nvContents->tables.pktTypePwrLimits[0][0]; - tableSize = sizeof(nvContents->tables.pktTypePwrLimits); - tableVNVType = VNV_PACKET_TYPE_POWER_LIMITS; - break; - - default: - VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - "Not Supported Table Type %d", nvTable->nvTable); - return -EIO; - break; - - } - - nvStatus = vos_nv_write(tableVNVType, - tablePtr, - tableSize); - if(VOS_STATUS_SUCCESS != nvStatus) - { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - "Failed update nv item %d", nvStatus); - return -EIO; - } - - return 1; -} - -/* -------------------------------------------------------------------------- - \brief wlan_hdd_ftm_get_nv_bin() - - Get NV bin read from Flash Memory, file - - \param - ftmCmd - Pointer FTM Commad Buffer - - \return - int - -1, Process Host command fail, vail out - 0, Process Host command success ---------------------------------------------------------------------------*/ - -static int wlan_hdd_ftm_get_nv_bin -( - v_U16_t msgId, - hdd_context_t *pHddCtx, - tPttMsgbuffer *ftmCmd -) -{ - VOS_STATUS nvStatus = VOS_STATUS_SUCCESS; - pttGetNvTable *nvTable = (pttGetNvTable *)&ftmCmd->msgBody.GetNvBin; - v_SIZE_t nvSize; - v_U8_t *nvContents; - v_U16_t offset = 0; - - - if ((NV_MAX_TABLE == pHddCtx->ftm.processingNVTable) || - (0 == pHddCtx->ftm.processedNVTableSize)) - { - if ( msgId == PTT_MSG_GET_NV_BIN ) - { - nvStatus = vos_nv_getNVEncodedBuffer((void **)&nvContents, &nvSize); - } - else - { - nvStatus = vos_nv_getNVDictionary((void **)&nvContents, &nvSize); - } - - if ((VOS_STATUS_SUCCESS != nvStatus) || (NULL == nvContents)) - { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - FL("Fail to get cached NV value Status %d"), nvStatus); - return -EIO; - } - - switch (nvTable->nvTable) - { - case NV_BINARY_IMAGE: - pHddCtx->ftm.targetNVTablePointer = (v_U8_t *)nvContents; - break; - default: - VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - "Not Valid NV Table %d", nvTable->nvTable); - return -EIO; - break; - } - - /* Set Current Processing NV table type */ - pHddCtx->ftm.processingNVTable = nvTable->nvTable; - if ( msgId == PTT_MSG_GET_NV_BIN ) - { - pHddCtx->ftm.targetNVTableSize = nvSize + sizeof(v_U32_t); - /* Validity Period */ - pHddCtx->ftm.tempNVTableBuffer[0] = 0xFF; - pHddCtx->ftm.tempNVTableBuffer[1] = 0xFF; - pHddCtx->ftm.tempNVTableBuffer[2] = 0xFF; - pHddCtx->ftm.tempNVTableBuffer[3] = 0xFF; - offset = sizeof(v_U32_t); - } - else - { - pHddCtx->ftm.targetNVTableSize = nvSize; - offset = 0; - } - - /* Copy target NV table value into temp context buffer */ - vos_mem_copy(&pHddCtx->ftm.tempNVTableBuffer[offset], - pHddCtx->ftm.targetNVTablePointer, - pHddCtx->ftm.targetNVTableSize); - } - - - if (pHddCtx->ftm.processingNVTable != nvTable->nvTable) - { - /* Invalid table type */ - VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, - "Invalid NV Table, now Processing %d, not %d", - pHddCtx->ftm.processingNVTable, nvTable->nvTable); - - pHddCtx->ftm.processingNVTable = NV_MAX_TABLE; - pHddCtx->ftm.targetNVTableSize = 0; - pHddCtx->ftm.processedNVTableSize = 0; - vos_mem_zero(pHddCtx->ftm.tempNVTableBuffer, MAX_NV_TABLE_SIZE); - - return -EINVAL; - } - - nvTable->tableSize = pHddCtx->ftm.targetNVTableSize; - - /* Update processed pointer to prepare next chunk copy */ - if ( (nvTable->chunkSize + pHddCtx->ftm.processedNVTableSize) > - pHddCtx->ftm.targetNVTableSize ) - { - nvTable->chunkSize = - (pHddCtx->ftm.targetNVTableSize - pHddCtx->ftm.processedNVTableSize); - } - - /* Copy next chunk of NV table value into response buffer */ - vos_mem_copy( - &nvTable->tableData, - pHddCtx->ftm.tempNVTableBuffer + pHddCtx->ftm.processedNVTableSize, - nvTable->chunkSize); - - pHddCtx->ftm.processedNVTableSize += nvTable->chunkSize; - - if (pHddCtx->ftm.targetNVTableSize == pHddCtx->ftm.processedNVTableSize) - { - /* Finished to process last chunk of data, initialize buffer */ - pHddCtx->ftm.processingNVTable = NV_MAX_TABLE; - pHddCtx->ftm.targetNVTableSize = 0; - pHddCtx->ftm.processedNVTableSize = 0; - vos_mem_zero(pHddCtx->ftm.tempNVTableBuffer, MAX_NV_TABLE_SIZE); - } - - return 1; -} - -/**--------------------------------------------------------------------------- - - \brief wlan_hdd_ftm_set_nv_bin() - - Set NV bin to Flash Memory, file - - \param - ftmCmd - Pointer FTM Commad Buffer - - \return - int - -1, Process Host command fail, vail out - 0, Process Host command success - -+----------------------------------------------------------------------------*/ - -static int wlan_hdd_ftm_set_nv_bin -( - hdd_context_t *pHddCtx, - tPttMsgbuffer *ftmCmd -) -{ - VOS_STATUS nvStatus = VOS_STATUS_SUCCESS; - pttSetNvTable *nvTable = (pttSetNvTable *)&ftmCmd->msgBody.SetNvBin; - - /* Test first chunk of NV table */ - if ((NV_MAX_TABLE == pHddCtx->ftm.processingNVTable) || - (0 == pHddCtx->ftm.processedNVTableSize)) - { - switch (nvTable->nvTable) - { - case NV_BINARY_IMAGE: - pHddCtx->ftm.targetNVTableSize = nvTable->tableSize; - break; - default: - VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - "Not Valid NV Table %d", nvTable->nvTable); - return -EIO; - break; - } - - /* Set Current Processing NV table type */ - pHddCtx->ftm.processingNVTable = nvTable->nvTable; - pHddCtx->ftm.processedNVTableSize = 0; - - if (pHddCtx->ftm.targetNVTableSize != nvTable->tableSize) - { - VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, - "Invalid Table Size %d", nvTable->tableSize); - pHddCtx->ftm.processingNVTable = NV_MAX_TABLE; - pHddCtx->ftm.targetNVTableSize = 0; - pHddCtx->ftm.processedNVTableSize = 0; - vos_mem_zero(pHddCtx->ftm.tempNVTableBuffer, MAX_NV_TABLE_SIZE); - return -EINVAL; - } - } - - if (pHddCtx->ftm.processingNVTable != nvTable->nvTable) - { - VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - "Invalid NV Table, now Processing %d, not %d", - pHddCtx->ftm.processingNVTable, nvTable->nvTable); - pHddCtx->ftm.processingNVTable = NV_MAX_TABLE; - pHddCtx->ftm.targetNVTableSize = 0; - pHddCtx->ftm.processedNVTableSize = 0; - vos_mem_zero(pHddCtx->ftm.tempNVTableBuffer, MAX_NV_TABLE_SIZE); - return -EINVAL; - } - - vos_mem_copy( - pHddCtx->ftm.tempNVTableBuffer + pHddCtx->ftm.processedNVTableSize, - &nvTable->tableData, - nvTable->chunkSize); - - pHddCtx->ftm.processedNVTableSize += nvTable->chunkSize; - - if (pHddCtx->ftm.targetNVTableSize == pHddCtx->ftm.processedNVTableSize) - { - VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - "Processing Done!! write encoded Buffer %d", - pHddCtx->ftm.targetNVTableSize); - - nvStatus = wlan_write_to_efs ((v_U8_t*)pHddCtx->ftm.tempNVTableBuffer, - (v_U16_t)pHddCtx->ftm.targetNVTableSize); - - if ((VOS_STATUS_SUCCESS != nvStatus)) - { - VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, - "Fail to set NV Binary %d", nvStatus); - return -EIO; - } - - nvStatus = vos_nv_setNVEncodedBuffer( - (v_U8_t*)pHddCtx->ftm.tempNVTableBuffer, - (v_SIZE_t)pHddCtx->ftm.targetNVTableSize); - - if ((VOS_STATUS_SUCCESS != nvStatus)) - { - VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL, - "Fail to set NV Binary %d", nvStatus); - return -EIO; - } - - pHddCtx->ftm.processingNVTable = NV_MAX_TABLE; - pHddCtx->ftm.targetNVTableSize = 0; - pHddCtx->ftm.processedNVTableSize = 0; - vos_mem_zero(pHddCtx->ftm.tempNVTableBuffer, MAX_NV_TABLE_SIZE); - } - - return 1; -} - -/**--------------------------------------------------------------------------- - - \brief wlan_hdd_ftm_temp_get_rel_num() - - Get internal release number - - \param - ftmCmd - Pointer FTM Commad Buffer - - \return - int - -1, Process Host command fail, vail out - 0, Process Host command success - - --------------------------------------------------------------------------*/ -int wlan_hdd_ftm_temp_get_rel_num -( - tPttMsgbuffer *ftmCmd -) -{ - tMsgPttGetBuildReleaseNumber *relNum = (tMsgPttGetBuildReleaseNumber *)&ftmCmd->msgBody.GetBuildReleaseNumber; - - relNum->relParams.drvMjr = QWLAN_VERSION_MAJOR; - relNum->relParams.drvMnr = QWLAN_VERSION_MINOR; - relNum->relParams.drvPtch = QWLAN_VERSION_PATCH; - relNum->relParams.drvBld = QWLAN_VERSION_BUILD; - relNum->relParams.pttMax = 10; - relNum->relParams.pttMin = 1; - - return 1; -} - -/**--------------------------------------------------------------------------- - - \brief wlan_hdd_process_ftm_host_cmd() - - process any command should be handled within host. - decide any command should be send to HAL or not - - \param - ftmCmd - Pointer FTM Commad Buffer - - \return - int - < 0, Process Host command fail, bail out - 0, Process Host command success, not need to send CMD to HAL - 1, Process Host command success, need to send CMD to HAL - - --------------------------------------------------------------------------*/ -int wlan_hdd_process_ftm_host_cmd -( - hdd_context_t *pHddCtx, - void *ftmCmd -) -{ - tPttMsgbuffer *pFTMCmd = (tPttMsgbuffer *)ftmCmd; - int needToRouteHal = 1; - int hostState = 1; - - switch(pFTMCmd->msgId) - { - case PTT_MSG_GET_NV_TABLE: - hostState = wlan_hdd_ftm_get_nv_table(pHddCtx, pFTMCmd); - needToRouteHal = 0; - break; - - case PTT_MSG_SET_NV_TABLE: - hostState = wlan_hdd_ftm_set_nv_table(pHddCtx, pFTMCmd); - /* Temp NV Operation will be isolated to host - needToRouteHal = 1; */ - needToRouteHal = 0; - break; - - case PTT_MSG_BLANK_NV: - hostState = wlan_hdd_ftm_blank_nv_table(pFTMCmd); - needToRouteHal = 1; - break; - - case PTT_MSG_DEL_NV_TABLE: - hostState = wlan_hdd_ftm_delete_nv_table(pFTMCmd); - needToRouteHal = 1; - break; - - case PTT_MSG_GET_NV_FIELD: - hostState = wlan_hdd_ftm_get_nv_field(pFTMCmd); - needToRouteHal = 0; - break; - - case PTT_MSG_SET_NV_FIELD: - hostState = wlan_hdd_ftm_set_nv_field(pFTMCmd); - needToRouteHal = 0; - break; - - case PTT_MSG_STORE_NV_TABLE: - hostState = wlan_hdd_ftm_store_nv_table(pFTMCmd); - needToRouteHal = 0; - break; - - case PTT_MSG_GET_NV_BIN: - case PTT_MSG_GET_DICTIONARY: - hostState = wlan_hdd_ftm_get_nv_bin(pFTMCmd->msgId, pHddCtx, pFTMCmd); - needToRouteHal = 0; - break; - - case PTT_MSG_SET_NV_BIN: - hostState = wlan_hdd_ftm_set_nv_bin(pHddCtx, pFTMCmd); - needToRouteHal = 0; - break; - - case PTT_MSG_DBG_READ_REGISTER: - wpalReadRegister(pFTMCmd->msgBody.DbgReadRegister.regAddr, - &pFTMCmd->msgBody.DbgReadRegister.regValue); - needToRouteHal = 0; - break; - - case PTT_MSG_DBG_WRITE_REGISTER: - wpalWriteRegister(pFTMCmd->msgBody.DbgWriteRegister.regAddr, - pFTMCmd->msgBody.DbgWriteRegister.regValue); - needToRouteHal = 0; - break; - - case PTT_MSG_DBG_READ_MEMORY: - wpalReadDeviceMemory(pFTMCmd->msgBody.DbgReadMemory.memAddr, - (unsigned char *)pFTMCmd->msgBody.DbgReadMemory.pMemBuf, - pFTMCmd->msgBody.DbgReadMemory.nBytes); - needToRouteHal = 0; - break; - - case PTT_MSG_DBG_WRITE_MEMORY: - wpalWriteDeviceMemory(pFTMCmd->msgBody.DbgWriteMemory.memAddr, - (unsigned char *)pFTMCmd->msgBody.DbgWriteMemory.pMemBuf, - pFTMCmd->msgBody.DbgWriteMemory.nBytes); - needToRouteHal = 0; - break; - - case PTT_MSG_GET_BUILD_RELEASE_NUMBER: - wlan_hdd_ftm_temp_get_rel_num(pFTMCmd); - needToRouteHal = 0; - break; - - default: - needToRouteHal = 1; - break; - } - - if( 0 > hostState) - { - VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - "Host Command Handle Fail, Bailout"); - return hostState; - } - - return needToRouteHal; -} - -/**--------------------------------------------------------------------------- - - \brief wlan_hdd_process_ftm_cmd() - - - This function process the commands received from the ptt socket application. - - \param - pAdapter - Pointer HDD Context. - - \param - wnl - Pointer to the ANI netlink header. - - \return - none - - --------------------------------------------------------------------------*/ - -void wlan_hdd_process_ftm_cmd -( - hdd_context_t *pHddCtx, - tAniNlHdr *wnl -) -{ - wlan_hdd_ftm_request_t *pRequestBuf = (wlan_hdd_ftm_request_t*)(((v_U8_t*)(&wnl->wmsg))+sizeof(tAniHdr)) ; - v_U16_t cmd_len; - v_U8_t *pftm_data; - pVosContextType pVosContext = (pVosContextType)(pHddCtx->pvosContext); - int hostState; - tPttMsgbuffer *tempRspBuffer = NULL; - - ENTER(); - - //Delay to fix NV write failure on JB - vos_busy_wait(10000); //10ms - - if (!pRequestBuf) { - - hddLog(VOS_TRACE_LEVEL_ERROR,"%s: request buffer is null", __func__); - return ; - } - - if (vos_is_load_unload_in_progress(VOS_MODULE_ID_HDD, NULL)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, - "%s: Load/Unload in Progress. Ignoring FTM Command %d", - __func__, pRequestBuf->ftmpkt.ftm_cmd_type); - } - - - /*Save the received request*/ - pHddCtx->ftm.pRequestBuf = pRequestBuf; - - pHddCtx->ftm.pResponseBuf = (wlan_hdd_ftm_response_t*)pRequestBuf; - /*Save the received request netlink header used for sending the response*/ - pHddCtx->ftm.wnl = wnl; - if (pRequestBuf->module_type != QUALCOMM_MODULE_TYPE) { - - hddLog(VOS_TRACE_LEVEL_ERROR,"%s: Invalid Module Type =%d", __func__,pRequestBuf->module_type); - - pHddCtx->ftm.pResponseBuf->ftm_err_code = WLAN_FTM_FAILURE; - wlan_ftm_send_response(pHddCtx); - return ; - } - - switch (pRequestBuf->ftmpkt.ftm_cmd_type) - { - case WLAN_FTM_START: - if (pHddCtx->ftm.ftm_state == WLAN_FTM_STARTED) { - - hddLog(VOS_TRACE_LEVEL_ERROR,"%s: FTM has already started =%d", __func__,pRequestBuf->ftmpkt.ftm_cmd_type); - pHddCtx->ftm.pResponseBuf->ftm_hdr.data_len -= 1; - pHddCtx->ftm.pResponseBuf->ftm_err_code = WLAN_FTM_SUCCESS; - wlan_ftm_send_response(pHddCtx); - return; - } - - if (wlan_hdd_ftm_start(pVosContext->pHDDContext) != VOS_STATUS_SUCCESS) - { - hddLog(VOS_TRACE_LEVEL_ERROR, "%s: : Failed to start WLAN FTM" - ,__func__); - pHddCtx->ftm.pResponseBuf->ftm_err_code = WLAN_FTM_FAILURE; - wlan_ftm_send_response(pHddCtx); - return; - } - /* Ptt application running on the host PC expects the length to be one byte less that what we have received*/ - pHddCtx->ftm.pResponseBuf->ftm_hdr.data_len -= 1; - pHddCtx->ftm.pResponseBuf->ftm_err_code = WLAN_FTM_SUCCESS; - pHddCtx->ftm.pResponseBuf->ftmpkt.ftm_cmd_type = 0; - - wlan_ftm_send_response(pHddCtx); - - break; - - case WLAN_FTM_STOP: - if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) { - - hddLog(VOS_TRACE_LEVEL_ERROR,"%s:: FTM has not started", __func__); - pHddCtx->ftm.pResponseBuf->ftm_err_code = WLAN_FTM_SUCCESS; - wlan_ftm_send_response(pHddCtx); - return; - } - - if (VOS_STATUS_SUCCESS != wlan_ftm_stop(pHddCtx)) { - - pHddCtx->ftm.pResponseBuf->ftm_err_code = WLAN_FTM_FAILURE; - wlan_ftm_send_response(pHddCtx); - return; - } - - pHddCtx->ftm.ftm_state = WLAN_FTM_STOPPED; - /* This would send back the Command Success Status */ - pHddCtx->ftm.pResponseBuf->ftm_err_code = WLAN_FTM_SUCCESS; - - wlan_ftm_send_response(pHddCtx); - - break; - - case WLAN_FTM_CMD: - /* if it is regular FTM command, pass it to HAL PHY */ - if(pHddCtx->ftm.IsCmdPending == TRUE) { - hddLog(VOS_TRACE_LEVEL_ERROR,"%s:: FTM command pending for process", __func__); - return; - } - if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) { - - hddLog(VOS_TRACE_LEVEL_ERROR,"%s:: FTM has not started", __func__); - - pHddCtx->ftm.pResponseBuf->ftm_err_code = WLAN_FTM_FAILURE; - wlan_ftm_send_response(pHddCtx); - return; - - } - vos_event_reset(&pHddCtx->ftm.ftm_vos_event); - cmd_len = pRequestBuf->ftm_hdr.data_len; - cmd_len -= (sizeof(wlan_hdd_ftm_request_t)- sizeof(pRequestBuf->ftmpkt.ftm_cmd_type)); - pftm_data = pRequestBuf->ftmpkt.pFtmCmd; - - hostState = wlan_hdd_process_ftm_host_cmd(pHddCtx, pftm_data); - if (0 == hostState) - { - tempRspBuffer = (tPttMsgbuffer *)vos_mem_malloc(((tPttMsgbuffer *)pftm_data)->msgBodyLength); - if (NULL == tempRspBuffer) - { - hddLog(VOS_TRACE_LEVEL_ERROR, - "%s:: temp Mem Alloc Fail", __func__); - pHddCtx->ftm.pResponseBuf->ftm_err_code = WLAN_FTM_FAILURE; - wlan_ftm_send_response(pHddCtx); - return; - } - memcpy(tempRspBuffer, pftm_data, ((tPttMsgbuffer *)pftm_data)->msgBodyLength); - tempRspBuffer->msgResponse = PTT_STATUS_SUCCESS; - memcpy((unsigned char *)&pHddCtx->ftm.pResponseBuf->ftmpkt, - (unsigned char *) tempRspBuffer, - tempRspBuffer->msgBodyLength); - pHddCtx->ftm.pResponseBuf->ftm_err_code = WLAN_FTM_SUCCESS; - wlan_ftm_send_response(pHddCtx); - vos_mem_free(tempRspBuffer); - return; - } - else if (0 > hostState) - { - hddLog(VOS_TRACE_LEVEL_ERROR, "*** Host Command Handle Fail ***"); - pHddCtx->ftm.pResponseBuf->ftm_err_code = WLAN_FTM_FAILURE; - wlan_ftm_send_response(pHddCtx); - return; - } - - //HEXDUMP("Request:",(char*)pftm_data,cmd_len); - - /*Post the command to the HAL*/ - if (wlan_ftm_postmsg(pftm_data, cmd_len) != VOS_STATUS_SUCCESS) { - - hddLog(VOS_TRACE_LEVEL_ERROR,"%s:: FTM command failed", __func__); - return; - - } - - /*After successful posting of message the command should be pending*/ - pHddCtx->ftm.IsCmdPending = TRUE; - - /*Wait here until you get the response from HAL*/ - if (vos_wait_single_event(&pHddCtx->ftm.ftm_vos_event, FTM_VOS_EVENT_WAIT_TIME)!= VOS_STATUS_SUCCESS) - { - hddLog(VOS_TRACE_LEVEL_ERROR,"%s: vos_wait_single_event failed",__func__); - pHddCtx->ftm.pResponseBuf->ftm_err_code = WLAN_FTM_FAILURE; - wlan_ftm_send_response(pHddCtx); - pHddCtx->ftm.IsCmdPending = FALSE; - return; - } - - /*This check will handle the case where the completion is sent by - wlan_hdd_process_ftm_cmd() and not by the HAL*/ - if (vos_is_load_unload_in_progress(VOS_MODULE_ID_HDD, NULL)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_WARN, - "%s: Load/Unload in Progress. Ignoring FTM Command %d" - , __func__, pRequestBuf->ftmpkt.ftm_cmd_type); - - pHddCtx->ftm.pResponseBuf->ftm_err_code = WLAN_FTM_FAILURE; - wlan_ftm_send_response(pHddCtx); - pHddCtx->ftm.IsCmdPending = FALSE; - return ; - } - - cmd_len = be16_to_cpu(pHddCtx->ftm.wnl->wmsg.length); - - //HEXDUMP("Response to QXDM:", (char *)&pAdapter->ftm.wnl->wmsg, cmd_len); - - wlan_ftm_send_response(pHddCtx); - pHddCtx->ftm.IsCmdPending = FALSE; - break; - - default: - - hddLog(VOS_TRACE_LEVEL_ERROR,"%s:: Command not supported", __func__); - return; - } - - EXIT(); - return; -} /* wlan_adp_ftm_cmd() */ - -/**--------------------------------------------------------------------------- - - \brief wlan_ftm_priv_start_stop_ftm() - - - This function is used for start/stop the ftm driver. - - \param - pAdapter - Pointer HDD Context. - - start - 1/0 to start/stop ftm driver. - - \return - 0 for success, non zero for failure - - --------------------------------------------------------------------------*/ - -static VOS_STATUS wlan_ftm_priv_start_stop_ftm(hdd_adapter_t *pAdapter, - v_U16_t start) -{ - VOS_STATUS status; - hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - - if (start) - { - pHddCtx->ftm.cmd_iwpriv = TRUE; - status = wlan_hdd_ftm_start(pHddCtx); - - if (status != VOS_STATUS_SUCCESS) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "FTM Start Failed"); - return VOS_STATUS_E_FAILURE; - } - if (NULL == pMsgBuf) - { - pMsgBuf = (tPttMsgbuffer *)vos_mem_malloc(sizeof(tPttMsgbuffer)); - if (NULL == pMsgBuf) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:pMsgBuf is NULL", __func__); - return VOS_STATUS_E_FAILURE; - } - } - } - else - { - status = wlan_ftm_stop(pHddCtx); - - if (status != VOS_STATUS_SUCCESS) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "FTM Stop Failed"); - return VOS_STATUS_E_FAILURE; - } - pHddCtx->ftm.ftm_state = WLAN_FTM_STOPPED; - if (pMsgBuf) - { - vos_mem_free((v_VOID_t * )pMsgBuf); - pMsgBuf = NULL; - } - } - return VOS_STATUS_SUCCESS; -} - - -static VOS_STATUS validate_channel(unsigned int channel,unsigned int cb) -{ - unsigned int *table = NULL; - int index = 0; - - if (PHY_SINGLE_CHANNEL_CENTERED == cb) - table = valid_channel; - else if (cb >= PHY_DOUBLE_CHANNEL_LOW_PRIMARY && - cb <= PHY_DOUBLE_CHANNEL_HIGH_PRIMARY) - table = valid_channel_cb40; - else if (cb >= PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_CENTERED && - cb <= PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_HIGH) - table = valid_channel_cb80; - - if (NULL == table) - { - hddLog(VOS_TRACE_LEVEL_ERROR, "%s failed to find channel table %d", - __func__, cb); - return VOS_STATUS_E_FAILURE; - } - - while (table[index] != 0) - { - if (table[index] == channel) - return VOS_STATUS_SUCCESS; - - index++; - } - - return VOS_STATUS_E_FAILURE; -} - - -static unsigned int get_primary_channel(unsigned int center_channel,unsigned int cb) -{ - unsigned int primary_channel = center_channel; - - if (center_channel <= 14) - return primary_channel ; - - switch (cb) - { - case PHY_DOUBLE_CHANNEL_LOW_PRIMARY: - case PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_CENTERED: - case PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_LOW: - primary_channel -= 2; - break; - - - case PHY_DOUBLE_CHANNEL_HIGH_PRIMARY: - case PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_CENTERED: - case PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_HIGH: - primary_channel += 2; - break; - - case PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_LOW: - primary_channel -= 6; - break; - - case PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_HIGH: - primary_channel += 6; - break; - } - - return primary_channel; - -} - -/**--------------------------------------------------------------------------- - - \brief wlan_ftm_priv_set_channel() - - - This function is used for setting the channel to the halphy ptt module. - - \param - pAdapter - Pointer HDD Context. - - channel - Channel Number 1-14. - - \return - 0 for success, non zero for failure - - --------------------------------------------------------------------------*/ - -static VOS_STATUS wlan_ftm_priv_set_channel(hdd_adapter_t *pAdapter,v_U16_t channel) -{ - uPttMsgs *pMsgBody; - VOS_STATUS status; - unsigned long rc; - - hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - - if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ftm has not started. Please start the ftm. ", __func__); - return VOS_STATUS_E_FAILURE; - } - - if (VOS_STATUS_SUCCESS != validate_channel(channel, ftm_status.cbmode)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Invalid Channel Number. ", __func__); - return VOS_STATUS_E_FAILURE; - } - - vos_mem_set(pMsgBuf, sizeof(*pMsgBuf), 0); - init_completion(&pHddCtx->ftm.ftm_comp_var); - pMsgBuf->msgId = PTT_MSG_SET_CHANNEL; - pMsgBuf->msgBodyLength = sizeof(tMsgPttSetChannel) + PTT_HEADER_LENGTH; - - pMsgBody = &pMsgBuf->msgBody; - - pMsgBody->SetChannel.chId = get_primary_channel(channel, ftm_status.cbmode); - - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Channel =%d", pMsgBody->SetChannel.chId); - pMsgBody->SetChannel.cbState = ftm_status.cbmode ; - - status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - - if (status != VOS_STATUS_SUCCESS) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:wlan_ftm_postmsg failed", __func__); - status = VOS_STATUS_E_FAILURE; - goto done; - - } - rc = wait_for_completion_timeout(&pHddCtx->ftm.ftm_comp_var, - msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); - if (!rc) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - FL("wait on ftm_comp_var timed out")); - } - - if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ptt response status failed", __func__); - status = VOS_STATUS_E_FAILURE; - goto done; - - } -done: - - return status; -} - - -/**--------------------------------------------------------------------------- - - \brief wlan_ftm_priv_set_pwr_cntl_mode() - - - This function is used for setting the power control mode for tx. - - \param - pAdapter - Pointer HDD Context. - - pwr_mode - power control mode 0-2. - - \return - 0 for success, non zero for failure - - --------------------------------------------------------------------------*/ - -static VOS_STATUS wlan_ftm_priv_set_pwr_cntl_mode(hdd_adapter_t *pAdapter, - v_U16_t pwr_mode) -{ - uPttMsgs *pMsgBody; - VOS_STATUS status; - unsigned long rc; - - hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - - if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ftm has not started. Please start the ftm. ", __func__); - return VOS_STATUS_E_FAILURE; - } - - if (pwr_mode > 2) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:invalid control mode.valid mode is 0 , 1, 2.", __func__); - return VOS_STATUS_E_FAILURE; - } - - vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0); - init_completion(&pHddCtx->ftm.ftm_comp_var); - pMsgBody = &pMsgBuf->msgBody; - pMsgBuf->msgId = PTT_MSG_CLOSE_TPC_LOOP_PRIMA_V1; - pMsgBuf->msgBodyLength = sizeof(tMsgPttCloseTpcLoop) + PTT_HEADER_LENGTH; - - pMsgBody->CloseTpcLoop.tpcClose = pwr_mode; - status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf, pMsgBuf->msgBodyLength); - - if (status != VOS_STATUS_SUCCESS) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:wlan_ftm_postmsg failed", __func__); - status = VOS_STATUS_E_FAILURE; - goto done; - } - rc = wait_for_completion_timeout(&pHddCtx->ftm.ftm_comp_var, - msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); - if (!rc) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - FL("wait on ftm_comp_var timed out")); - } - - if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ptt response status failed", __func__); - status = VOS_STATUS_E_FAILURE; - goto done; - } - - done: - return status; - -} - -/**--------------------------------------------------------------------------- - - \brief wlan_ftm_priv_set_txpower() - - - This function is used for setting the txpower to the halphy ptt module. - - \param - pAdapter - Pointer HDD Context. - - txpower - txpower Number 1-18. - - \return - 0 for success, non zero for failure - - --------------------------------------------------------------------------*/ - -static VOS_STATUS wlan_ftm_priv_set_txpower(hdd_adapter_t *pAdapter, - v_U16_t txpower) -{ - uPttMsgs *pMsgBody; - VOS_STATUS status; - unsigned long rc; - - hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - - if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ftm has not started. Please start the ftm. ", __func__); - return VOS_STATUS_E_FAILURE; - } - - /* do not allow to change setting when tx pktgen is enabled, although halphy does allow changing tx power - * when tx pktgen is enabled - */ - if (ftm_status.frameGenEnabled) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:cannot set txpower when pktgen is enabled.", __func__); - return VOS_STATUS_E_FAILURE; - } - - if(!(txpower >= 9 && txpower <= 24)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Invalid tx power. ", __func__); - return VOS_STATUS_E_FAILURE; - } - - vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0); - init_completion(&pHddCtx->ftm.ftm_comp_var); - pMsgBody = &pMsgBuf->msgBody; - pMsgBuf->msgId = PTT_MSG_SET_TX_POWER; - pMsgBuf->msgBodyLength = sizeof(tMsgPttSetTxPower) + PTT_HEADER_LENGTH; - - pMsgBody->SetTxPower.dbmPwr = txpower*100; - - status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - - if (status != VOS_STATUS_SUCCESS) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:wlan_ftm_postmsg failed", __func__); - status = VOS_STATUS_E_FAILURE; - goto done; - } - rc = wait_for_completion_timeout(&pHddCtx->ftm.ftm_comp_var, - msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); - if (!rc) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - FL("wait on ftm_comp_var timed out")); - } - - if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ptt response status failed", __func__); - status = VOS_STATUS_E_FAILURE; - goto done; - } - - ftm_status.txpower = txpower ; - done: - - return status; - -} - - -static VOS_STATUS wlan_ftm_priv_enable_dpd(hdd_adapter_t *pAdapter, - v_U16_t enable) -{ - tANI_U32 value = 0; - tANI_U32 reg_addr; - hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ftm has not started. Please start the ftm. ", __func__); - return VOS_STATUS_E_FAILURE; - } - -#ifdef WCN_PRONTO - reg_addr = 0xfb018000; -#else - reg_addr = 0x03018000; -#endif - wpalReadRegister(reg_addr, &value); - if (enable) - { - value &= (~QWLAN_TXFIR_CFG_DPD_BYPASS_MASK); - } - else - { - value |= QWLAN_TXFIR_CFG_DPD_BYPASS_MASK; - } - - wpalWriteRegister(reg_addr, value); - - return VOS_STATUS_SUCCESS; -} - - -/**--------------------------------------------------------------------------- - - \brief wlan_ftm_priv_set_txrate() - - - This function is used for setting the txrate to the halphy ptt module. - It converts the user input string for txrate to the tx rate index. - - \param - pAdapter - Pointer HDD Context. - - txrate - Pointer to the tx rate string. - - \return - 0 for success, non zero for failure - - --------------------------------------------------------------------------*/ - -static VOS_STATUS wlan_ftm_priv_set_txrate(hdd_adapter_t *pAdapter,char *txrate) -{ - int ii; - hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - if(pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ftm has not started. Please start the ftm.", __func__); - return VOS_STATUS_E_FAILURE; - } - - /* do not allow to change setting when tx pktgen is enabled */ - if (ftm_status.frameGenEnabled) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:cannot set txrate when pktgen is enabled.", __func__); - return VOS_STATUS_E_FAILURE; - } - - for(ii = 0; ii < SIZE_OF_TABLE(rateName_rateIndex_tbl); ii++) - { - if(!strcmp(rateName_rateIndex_tbl[ii].rate_str,txrate)) - break; - } - if(ii >= SIZE_OF_TABLE(rateName_rateIndex_tbl)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Invalid Rate String", __func__); - return VOS_STATUS_E_FAILURE; - } - - ftm_status.frameParams.rate = rateName_rateIndex_tbl[ii].rate_index; - ftm_status.frameParams.preamble = rate_index_2_preamble_table[rateName_rateIndex_tbl[ii].rate_index].Preamble; - - return VOS_STATUS_SUCCESS; -} - -/**--------------------------------------------------------------------------- - - \brief wlan_ftm_priv_start_stop_tx_pktgen() - - - This function is used for start/stop the tx packet generation. - - \param - pAdapter - Pointer HDD Context. - - startStop - Value( 1/0) start/stop the tx packet generation. - - \return - 0 for success, non zero for failure - - --------------------------------------------------------------------------*/ - -static VOS_STATUS wlan_ftm_priv_start_stop_tx_pktgen(hdd_adapter_t *pAdapter,v_U16_t startStop) -{ - uPttMsgs *pMsgBody; - VOS_STATUS status; - unsigned long rc; - - hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - - if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ftm has not started. Please start the ftm. ", __func__); - return VOS_STATUS_E_FAILURE; - } - - if (startStop != 1 && startStop != 0) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Tx value is invalid ", __func__); - return VOS_STATUS_E_FAILURE; - } - - if ((ftm_status.frameGenEnabled && startStop == 1) || - (!ftm_status.frameGenEnabled && startStop == 0)) - { - return VOS_STATUS_SUCCESS ; - } - vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0); - - if (startStop == 1) - { - init_completion(&pHddCtx->ftm.ftm_comp_var); - pMsgBuf->msgId = PTT_MSG_CONFIG_TX_PACKET_GEN; - pMsgBuf->msgBodyLength = sizeof(tMsgPttConfigTxPacketGen) + PTT_HEADER_LENGTH; - pMsgBody = &pMsgBuf->msgBody; - pMsgBody->ConfigTxPacketGen.frameParams = ftm_status.frameParams ; - - status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - if (status != VOS_STATUS_SUCCESS) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:posting PTT_MSG_CONFIG_TX_PACKET_GEN failed", __func__); - status = VOS_STATUS_E_FAILURE; - goto done; - } - - rc = wait_for_completion_timeout(&pHddCtx->ftm.ftm_comp_var, - msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); - if (!rc) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - FL("wait on ftm_comp_var timed out")); - } - - if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s: PTT_MSG_CONFIG_TX_PACKET_GEN failed", __func__); - status = VOS_STATUS_E_FAILURE; - goto done; - } - } - - init_completion(&pHddCtx->ftm.ftm_comp_var); - pMsgBuf->msgId = PTT_MSG_START_STOP_TX_PACKET_GEN; - pMsgBuf->msgBodyLength = sizeof(tMsgPttStartStopTxPacketGen) + PTT_HEADER_LENGTH; - pMsgBody = &pMsgBuf->msgBody; - pMsgBody->StartStopTxPacketGen.startStop = startStop; - - status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - if(status != VOS_STATUS_SUCCESS) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:wlan_ftm_postmsg failed",__func__); - status = VOS_STATUS_E_FAILURE; - goto done; - } - - rc = wait_for_completion_timeout(&pHddCtx->ftm.ftm_comp_var, - msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); - if (!rc) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - FL("wait on ftm_comp_var timed out")); - } - - if(pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ptt response status failed",__func__); - status = VOS_STATUS_E_FAILURE; - goto done; - } - -done: - - if (status == VOS_STATUS_SUCCESS) - { - if (startStop == 1) - { - ftm_status.frameGenEnabled = eANI_BOOLEAN_TRUE; - } - else - { - ftm_status.frameGenEnabled = eANI_BOOLEAN_FALSE; - } - } - - return status; -} - - - -static VOS_STATUS wlan_ftm_priv_set_cb(hdd_adapter_t *pAdapter, v_U16_t cbmode) -{ - - hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ftm has not started. Please start the ftm. ", __func__); - return VOS_STATUS_E_FAILURE; - } - - if (cbmode > PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_HIGH) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:cb mode value is invalid ", __func__); - return VOS_STATUS_E_FAILURE; - } - - ftm_status.cbmode = cbmode; - - return VOS_STATUS_SUCCESS; - -} - -/**--------------------------------------------------------------------------- - - \brief wlan_ftm_rx_mode() - - - This function is used for start/stop the rx packet generation. - - \param - pAdapter - Pointer HDD Context. - - rxmode - 0-disable RX. - - 1-rx ALL frames - - 2-rx 11 g/n frames - - 3-rx 11b frames - - \return - 0 for success, non zero for failure - - --------------------------------------------------------------------------*/ - -static VOS_STATUS wlan_ftm_priv_rx_mode(hdd_adapter_t *pAdapter,v_U16_t rxmode) -{ - uPttMsgs *pMsgBody; - VOS_STATUS status; - unsigned long rc; - - hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ftm has not started. Please start the ftm. ", __func__); - return VOS_STATUS_E_FAILURE; - } - - if (rxmode > 3) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Rx mode value is invalid ", __func__); - return VOS_STATUS_E_FAILURE; - } - - vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0); - init_completion(&pHddCtx->ftm.ftm_comp_var); - - pMsgBuf->msgId = PTT_MSG_SET_RX_DISABLE_MODE; - pMsgBuf->msgBodyLength = sizeof(tMsgPttSetRxDisableMode) + PTT_HEADER_LENGTH; - - pMsgBody = &pMsgBuf->msgBody; - - switch(rxmode) - { - case RXMODE_DISABLE_ALL: - pMsgBody->SetRxDisableMode.disabled.agPktsDisabled = VOS_TRUE; - pMsgBody->SetRxDisableMode.disabled.bPktsDisabled = VOS_TRUE; - pMsgBody->SetRxDisableMode.disabled.slrPktsDisabled= VOS_TRUE; - break; - - case RXMODE_ENABLE_ALL: - pMsgBody->SetRxDisableMode.disabled.agPktsDisabled = VOS_FALSE; - pMsgBody->SetRxDisableMode.disabled.bPktsDisabled = VOS_FALSE; - pMsgBody->SetRxDisableMode.disabled.slrPktsDisabled= VOS_FALSE; - break; - - case RXMODE_ENABLE_11GN: - pMsgBody->SetRxDisableMode.disabled.agPktsDisabled = VOS_FALSE; - pMsgBody->SetRxDisableMode.disabled.bPktsDisabled = VOS_TRUE; - pMsgBody->SetRxDisableMode.disabled.slrPktsDisabled= VOS_TRUE; - break; - - case RXMODE_ENABLE_11B: - pMsgBody->SetRxDisableMode.disabled.agPktsDisabled = VOS_TRUE; - pMsgBody->SetRxDisableMode.disabled.bPktsDisabled = VOS_FALSE; - pMsgBody->SetRxDisableMode.disabled.slrPktsDisabled= VOS_TRUE; - break; - - } - - status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - - if (status != VOS_STATUS_SUCCESS) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:wlan_ftm_postmsg failed", __func__); - status = VOS_STATUS_E_FAILURE; - goto done; - } - rc = wait_for_completion_timeout(&pHddCtx->ftm.ftm_comp_var, - msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); - if (!rc) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - FL(" wait on ftm_comp_var timed out")); - } - - if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ptt response status failed", __func__); - status = VOS_STATUS_E_FAILURE; - goto done; - } - ftm_status.rxmode = rxmode ; -done: - - return status; -} - -/**--------------------------------------------------------------------------- - - \brief wlan_ftm_priv_rx_pkt_clear() - - - This function sets the rx pkt count to zero. - - \param - pAdapter - Pointer HDD Context. - - rx_pkt_clear - rx_pkt_clear value. - - \return - 0 for success, non zero for failure - - --------------------------------------------------------------------------*/ - -static VOS_STATUS wlan_ftm_priv_rx_pkt_clear(hdd_adapter_t *pAdapter,v_U16_t rx_pkt_clear) -{ - VOS_STATUS status; - unsigned long rc; - - hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - - if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ftm has not started. Please start the ftm. ", __func__); - return VOS_STATUS_E_FAILURE; - } - - if (rx_pkt_clear != 1) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Invalid rx_pkt_clear value ", __func__); - return VOS_STATUS_E_FAILURE; - } - - vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0); - init_completion(&pHddCtx->ftm.ftm_comp_var); - pMsgBuf->msgId = PTT_MSG_RESET_RX_PACKET_STATISTICS; - pMsgBuf->msgBodyLength = sizeof(tMsgPttResetRxPacketStatistics) + PTT_HEADER_LENGTH; - - status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - - if (status != VOS_STATUS_SUCCESS) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:wlan_ftm_postmsg failed", __func__); - status = VOS_STATUS_E_FAILURE; - goto done; - } - rc = wait_for_completion_timeout(&pHddCtx->ftm.ftm_comp_var, - msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); - if (!rc) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - FL("wait on ftm_comp_var timed out")); - } - - if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ptt response status failed", __func__); - status = VOS_STATUS_E_FAILURE; - goto done; - } -done: - - return status; -} - -/**--------------------------------------------------------------------------- - - \brief wlan_ftm_priv_get_channel() - - - This function gets the channel number from the halphy ptt module and - returns the channel number to the application. - - \param - pAdapter - Pointer HDD Context. - - pChannel - Poniter to get the Channel number. - - \return - 0 for success, non zero for failure - - --------------------------------------------------------------------------*/ - -static VOS_STATUS wlan_ftm_priv_get_channel(hdd_adapter_t *pAdapter,v_U16_t *pChannel) -{ - unsigned long rc; - uPttMsgs *pMsgBody; - VOS_STATUS status; - v_U16_t freq; - v_U8_t indx=0; - - hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - - if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ftm has not started. Please start the ftm. ", __func__); - return VOS_STATUS_E_FAILURE; - } - vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0); - init_completion(&pHddCtx->ftm.ftm_comp_var); - pMsgBuf->msgId = PTT_MSG_DBG_READ_REGISTER; - pMsgBuf->msgBodyLength = sizeof(tMsgPttDbgReadRegister) + PTT_HEADER_LENGTH; - - pMsgBody = &pMsgBuf->msgBody; - pMsgBody->DbgReadRegister.regAddr = QWLAN_AGC_CHANNEL_FREQ_REG; - - status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - - if (status != VOS_STATUS_SUCCESS) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:wlan_ftm_postmsg failed", __func__); - status = VOS_STATUS_E_FAILURE; - goto done; - - } - rc = wait_for_completion_timeout(&pHddCtx->ftm.ftm_comp_var, - msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); - if (!rc) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - FL("wait on ftm_comp_var timed out")); - } - - if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ptt response status failed", __func__); - status = VOS_STATUS_E_FAILURE; - goto done; - } - - freq = ((v_U16_t)pMsgBody->DbgReadRegister.regValue & QWLAN_AGC_CHANNEL_FREQ_FREQ_MASK); - - while ((indx < SIZE_OF_TABLE(freq_chan_tbl)) && (freq != freq_chan_tbl[indx].freq)) - indx++; - if (indx >= SIZE_OF_TABLE(freq_chan_tbl)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Invalid Frequency!!!", __func__); - status = VOS_STATUS_E_FAILURE; - goto done; - } - - *pChannel = freq_chan_tbl[indx].chan; - - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Channel = %d freq = %d", *pChannel, freq); - done: - - return status; -} - -/**--------------------------------------------------------------------------- - - \brief wlan_ftm_priv_get_txpower() - - - This function gets the TX power from the halphy ptt module and - returns the TX power to the application. - - \param - pAdapter - Pointer HDD Context. - - pTxPwr - Poniter to get the Tx power. - - \return - 0 for success, non zero for failure - - --------------------------------------------------------------------------*/ - -static VOS_STATUS wlan_ftm_priv_get_txpower(hdd_adapter_t *pAdapter,v_U16_t *pTxPwr) -{ - uPttMsgs *pMsgBody; - VOS_STATUS status; - unsigned long rc; - - hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - - if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ftm has not started. Please start the ftm. ", __func__); - return VOS_STATUS_E_FAILURE; - } - vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0); - init_completion(&pHddCtx->ftm.ftm_comp_var); - pMsgBuf->msgId = PTT_MSG_GET_TX_POWER_REPORT; - pMsgBuf->msgBodyLength = sizeof(tMsgPttGetTxPowerReport) + PTT_HEADER_LENGTH; - - pMsgBody = &pMsgBuf->msgBody; - - status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - - if (status != VOS_STATUS_SUCCESS) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:wlan_ftm_postmsg failed", __func__); - status = VOS_STATUS_E_FAILURE; - goto done; - } - rc = wait_for_completion_timeout(&pHddCtx->ftm.ftm_comp_var, - msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); - if (!rc) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - FL("wait on ftm_comp_var timed out")); - } - - if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s: PTT_MSG_GET_TX_POWER_REPORT failed", __func__); - status = VOS_STATUS_E_FAILURE; - goto done; - } - *pTxPwr = ((((pMsgBody->GetTxPowerReport.pwrTemplateIndex & 0x1F) + 4)*50)/100); - - done: - - return status; -} - -/**--------------------------------------------------------------------------- - - \brief wlan_ftm_priv_get_ftm_version() - - - This function gets ftm driver and firmware version. - - \param - pAdapter - Pointer HDD Context. - - pTxRate - Poniter to get the Tx rate. - - \return - 0 for success, non zero for failure - - --------------------------------------------------------------------------*/ - -VOS_STATUS wlan_ftm_priv_get_ftm_version(hdd_adapter_t *pAdapter,char *pftmVer) -{ - uPttMsgs *pMsgBody; - VOS_STATUS status; - v_U32_t reg_val; - char *buf = pftmVer; - hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - int lenRes = 0; - int lenBuf = WE_FTM_MAX_STR_LEN; - unsigned long rc; - - if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ftm has not started. Please start the ftm. ", __func__); - return VOS_STATUS_E_FAILURE; - } - - if (!pMsgBuf) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s: pMsgBuf is NULL", __func__); - return VOS_STATUS_E_FAILURE; - } - - vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0); - init_completion(&pHddCtx->ftm.ftm_comp_var); - pMsgBuf->msgId = PTT_MSG_DBG_READ_REGISTER; - pMsgBuf->msgBodyLength = sizeof(tMsgPttDbgReadRegister) + PTT_HEADER_LENGTH; - - pMsgBody = &pMsgBuf->msgBody; - pMsgBody->DbgReadRegister.regAddr = QWLAN_RFAPB_REV_ID_REG; - - status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - - if (status != VOS_STATUS_SUCCESS) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:wlan_ftm_postmsg failed", __func__); - status = VOS_STATUS_E_FAILURE; - goto done; - - } - rc = wait_for_completion_timeout(&pHddCtx->ftm.ftm_comp_var, - msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); - if (!rc) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - FL("wait on ftm_comp_var timed out")); - } - - if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ptt response status failed", __func__); - status = VOS_STATUS_E_FAILURE; - goto done; - } - - reg_val = (v_U16_t)pMsgBody->DbgReadRegister.regValue; - - init_completion(&pHddCtx->ftm.ftm_comp_var); - - pMsgBuf->msgId = PTT_MSG_GET_BUILD_RELEASE_NUMBER; - pMsgBuf->msgBodyLength = sizeof(tMsgPttGetBuildReleaseNumber) + PTT_HEADER_LENGTH; - - pMsgBody = &pMsgBuf->msgBody; - - status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - - if (status != VOS_STATUS_SUCCESS) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:wlan_ftm_postmsg failed", __func__); - status = VOS_STATUS_E_FAILURE; - goto done; - } - rc = wait_for_completion_timeout(&pHddCtx->ftm.ftm_comp_var, - msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); - if (!rc) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - FL("wait on ftm_comp_var timed out")); - } - - lenRes = snprintf(buf, lenBuf, "%s_",WLAN_CHIP_VERSION); - if(lenRes < 0 || lenRes >= lenBuf) - { - status = VOS_STATUS_E_FAILURE; - goto done; - } - - buf += lenRes; - lenBuf -= lenRes; - - /*Read the RevID*/ - lenRes = snprintf(buf, lenBuf, "%x.%x-",(v_U8_t)(reg_val >> 8), (v_U8_t)(reg_val &0x000000FF)); - if(lenRes < 0 || lenRes >= lenBuf) - { - status = VOS_STATUS_E_FAILURE; - goto done; - } - - buf += lenRes; - lenBuf -= lenRes; - - lenRes = snprintf(buf, lenBuf, "%s-", QWLAN_VERSIONSTR); - if(lenRes < 0 || lenRes >= lenBuf) - { - status = VOS_STATUS_E_FAILURE; - goto done; - } - - buf += lenRes; - lenBuf -= lenRes; - - -done: - - return status; - -} - -/**--------------------------------------------------------------------------- - - \brief wlan_ftm_priv_get_txrate() - - - This function gets the TX rate from the halphy ptt module and - returns the TX rate to the application. - - \param - pAdapter - Pointer HDD Context. - - pTxRate - Poniter to get the Tx rate. - - \return - 0 for success, non zero for failure - - --------------------------------------------------------------------------*/ - -static VOS_STATUS wlan_ftm_priv_get_txrate(hdd_adapter_t *pAdapter,char *pTxRate) -{ - uPttMsgs *pMsgBody; - VOS_STATUS status; - v_U16_t rate_index,ii; - unsigned long rc; - - hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - - if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ftm has not started. Please start the ftm. ", __func__); - return VOS_STATUS_E_FAILURE; - } - - if (!pMsgBuf) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s: pMsgBuf is NULL", __func__); - return VOS_STATUS_E_FAILURE; - } - - vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0); - init_completion(&pHddCtx->ftm.ftm_comp_var); - pMsgBuf->msgId = PTT_MSG_GET_TX_POWER_REPORT; - pMsgBuf->msgBodyLength = sizeof(tMsgPttGetTxPowerReport) + PTT_HEADER_LENGTH; - - pMsgBody = &pMsgBuf->msgBody; - - status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - - if (status != VOS_STATUS_SUCCESS) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:wlan_ftm_postmsg failed", __func__); - status = VOS_STATUS_E_FAILURE; - goto done; - } - rc = wait_for_completion_timeout(&pHddCtx->ftm.ftm_comp_var, - msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); - if (!rc) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - FL("wait on ftm_comp_var timed out")); - } - - if (pMsgBuf->msgResponse == PTT_STATUS_SUCCESS) { - - rate_index = pMsgBody->GetTxPowerReport.rate; - } - else { - /*Return the default rate*/ - //rate_index = HAL_PHY_RATE_11A_6_MBPS; - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s: PTT_MSG_GET_TX_POWER_REPORT failed", __func__); - status = VOS_STATUS_E_FAILURE; - goto done; - } - - for(ii = 0; ii < SIZE_OF_TABLE(rateName_rateIndex_tbl); ii++) { - if(rateName_rateIndex_tbl[ii].rate_index == rate_index) - break; - } - if(ii >= SIZE_OF_TABLE(rateName_rateIndex_tbl)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Invalid Rate Index", __func__); - status = VOS_STATUS_E_FAILURE; - goto done; - } - strlcpy(pTxRate,rateName_rateIndex_tbl[ii].rate_str, WE_FTM_MAX_STR_LEN); -done: - - return status; - -} - -/**--------------------------------------------------------------------------- - - \brief wlan_ftm_priv_get_rx_pkt_count() - - - This function gets the rx pkt count from the halphy ptt module and - returns the rx pkt count to the application. - - \param - pAdapter - Pointer HDD Context. - - pRxPktCnt - Poniter to get the rx pkt count. - - \return - 0 for success, non zero for failure - - --------------------------------------------------------------------------*/ - -static VOS_STATUS wlan_ftm_priv_get_rx_pkt_count(hdd_adapter_t *pAdapter,v_U16_t *pRxPktCnt) -{ - uPttMsgs *pMsgBody; - VOS_STATUS status; - unsigned long rc; - - hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - - if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ftm has not started. Please start the ftm. ", __func__); - return VOS_STATUS_E_FAILURE; - } - vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0); - init_completion(&pHddCtx->ftm.ftm_comp_var); - pMsgBuf->msgId = PTT_MSG_GET_RX_PKT_COUNTS; - pMsgBuf->msgBodyLength = sizeof(tMsgPttGetRxPktCounts) + PTT_HEADER_LENGTH; - - pMsgBody = &pMsgBuf->msgBody; - - status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - - if (status != VOS_STATUS_SUCCESS) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:wlan_ftm_postmsg failed", __func__); - status = VOS_STATUS_E_FAILURE; - goto done; - } - rc = wait_for_completion_timeout(&pHddCtx->ftm.ftm_comp_var, - msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); - if (!rc) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - FL("wait on ftm_comp_var timed out")); - } - - if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ptt response status failed", __func__); - status = VOS_STATUS_E_FAILURE; - goto done; - } - *pRxPktCnt = pMsgBody->GetRxPktCounts.counters.totalRxPackets; -done: - - return status; -} - -/**--------------------------------------------------------------------------- - - \brief wlan_ftm_priv_get_rx_rssi() - - - This function gets the rx rssi from the halphy ptt module and - returns the rx rssi to the application. - - \param - pAdapter - Pointer HDD Context. - - buf - Poniter to get rssi of Rx chains - - \return - 0 for success, non zero for failure - - --------------------------------------------------------------------------*/ - -static VOS_STATUS wlan_ftm_priv_get_rx_rssi(hdd_adapter_t *pAdapter,char *buf) -{ - uPttMsgs *pMsgBody; - VOS_STATUS status; - hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - unsigned long rc; - long ret; - - if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ftm has not started. Please start the ftm. ", __func__); - return VOS_STATUS_E_FAILURE; - } - vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0); - init_completion(&pHddCtx->ftm.ftm_comp_var); - pMsgBuf->msgId = PTT_MSG_GET_RX_RSSI; - pMsgBuf->msgBodyLength = sizeof(tMsgPttGetRxRssi) + PTT_HEADER_LENGTH; - - pMsgBody = &pMsgBuf->msgBody; - - status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - - if (status != VOS_STATUS_SUCCESS) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:wlan_ftm_postmsg failed", __func__); - status = VOS_STATUS_E_FAILURE; - goto done; - } - rc = wait_for_completion_timeout(&pHddCtx->ftm.ftm_comp_var, - msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); - if (!rc) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - FL("wait on ftm_comp_var timed out")); - } - - if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ptt response status failed", __func__); - status = VOS_STATUS_E_FAILURE; - goto done; - } - - ret = snprintf(buf, WE_FTM_MAX_STR_LEN, " R0:%d, R1:%d", - pMsgBody->GetRxRssi.rssi.rx[0], - pMsgBody->GetRxRssi.rssi.rx[1]); - - if( ret < 0 || ret >= WE_FTM_MAX_STR_LEN ) - { - status = VOS_STATUS_E_FAILURE; - } - -done: - - return status; -} - -/**--------------------------------------------------------------------------- - - \brief wlan_ftm_priv_get_mac_address() - - - This function gets the mac address from the halphy ptt module and - returns the mac address to the application. - - \param - pAdapter - Pointer HDD Context. - - buf - Poniter to get the mac address. - - \return - 0 for success, non zero for failure - - --------------------------------------------------------------------------*/ - -static VOS_STATUS wlan_ftm_priv_get_mac_address(hdd_adapter_t *pAdapter,char *buf) -{ - v_BOOL_t itemIsValid = VOS_FALSE; - v_U8_t macAddr[VOS_MAC_ADDRESS_LEN] = {0, 0x0a, 0xf5, 4,5, 6}; - int ret; - - hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - - if(pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:Ftm has not started. Please start the ftm. ",__func__); - return VOS_STATUS_E_FAILURE; - } - /*Check the NV FIELD is valid or not*/ - if (vos_nv_getValidity(VNV_FIELD_IMAGE, &itemIsValid) == VOS_STATUS_SUCCESS) - { - if (itemIsValid == VOS_TRUE) - { - vos_nv_readMacAddress(macAddr); - - ret = snprintf(buf, WE_FTM_MAX_STR_LEN, - "%02x:%02x:%02x:%02x:%02x:%02x", - MAC_ADDR_ARRAY(macAddr)); - if( ret < 0 || ret >= WE_FTM_MAX_STR_LEN ) - { - return VOS_STATUS_E_FAILURE; - } - } - } - else - { - /*Return Hard coded mac address*/ - ret = snprintf(buf, WE_FTM_MAX_STR_LEN, - "%02x:%02x:%02x:%02x:%02x:%02x", - MAC_ADDR_ARRAY(macAddr)); - - if( ret < 0 || ret >= WE_FTM_MAX_STR_LEN ) - { - return VOS_STATUS_E_FAILURE; - } - } - return VOS_STATUS_SUCCESS; -} - -/**--------------------------------------------------------------------------- - - \brief wlan_ftm_priv_set_mac_address() - - - This function sets the mac address to the halphy ptt module and - sends the netlink message to the ptt socket application which writes - the macaddress to the qcom_wlan_nv.bin file - - \param - pAdapter - Pointer HDD Context. - - buf - Poniter to the macaddress. - - \return - 0 for success, non zero for failure - - --------------------------------------------------------------------------*/ - -static VOS_STATUS wlan_ftm_priv_set_mac_address(hdd_adapter_t *pAdapter,char *buf) -{ - uPttMsgs *pMsgBody; - VOS_STATUS status; - int macAddr[VOS_MAC_ADDRESS_LEN]; - v_U8_t *pMacAddress; - v_U8_t ii; - unsigned long rc; - - hdd_context_t *pHddCtx = (hdd_context_t *)pAdapter->pHddCtx; - - if (pHddCtx->ftm.ftm_state != WLAN_FTM_STARTED) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ftm has not started. Please start the ftm. ", __func__); - return VOS_STATUS_E_FAILURE; - } - vos_mem_set(pMsgBuf, sizeof(tPttMsgbuffer), 0); - init_completion(&pHddCtx->ftm.ftm_comp_var); - pMsgBuf->msgId = PTT_MSG_SET_NV_FIELD; - pMsgBuf->msgBodyLength = sizeof(tMsgPttSetNvField) + PTT_HEADER_LENGTH; - - pMsgBody = &pMsgBuf->msgBody; - pMsgBody->SetNvField.nvField = NV_COMMON_MAC_ADDR; - - /*We get the mac address in string format "XX:XX:XX:XX:XX:XX" convert to hex*/ - if (6 != sscanf(buf,"%02x:%02x:%02x:%02x:%02x:%02x",&macAddr[0],(int*)&macAddr[1],(int*)&macAddr[2],(int*)&macAddr[3],(int*)&macAddr[4],(int*)&macAddr[5])) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "Invalid MacAddress Input %s", buf); - return VOS_STATUS_E_FAILURE; - } - - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, - "MacAddress = " MAC_ADDRESS_STR, MAC_ADDR_ARRAY(macAddr)); - - - pMacAddress = &pMsgBody->SetNvField.fieldData.macAddr.macAddr1[0]; - - for(ii = 0; ii < VOS_MAC_ADDRESS_LEN; ii++) - pMacAddress[ii] = (v_U8_t)macAddr[ii]; - - - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, - "pMacAddress = " MAC_ADDRESS_STR, MAC_ADDR_ARRAY(pMacAddress)); - status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - - if (status != VOS_STATUS_SUCCESS) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:wlan_ftm_postmsg failed!!", __func__); - status = VOS_STATUS_E_FAILURE; - goto done; - } - rc = wait_for_completion_timeout(&pHddCtx->ftm.ftm_comp_var, - msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); - if (!rc) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - FL("wait on ftm_comp_var timed out")); - } - - if (pMsgBuf->msgResponse != PTT_STATUS_SUCCESS) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:Ptt response status failed", __func__); - status = VOS_STATUS_E_FAILURE; - goto done; - } - - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "NV_COMMON_MAC_ADDR Success!!!"); - - init_completion(&pHddCtx->ftm.ftm_comp_var); - memset( pMsgBuf,0,sizeof(tPttMsgbuffer)); - - pMsgBuf->msgId = PTT_MSG_STORE_NV_TABLE; - pMsgBuf->msgBodyLength = sizeof(tMsgPttStoreNvTable) + PTT_HEADER_LENGTH; - - pMsgBody = &pMsgBuf->msgBody; - - pMsgBody->StoreNvTable.nvTable = NV_FIELDS_IMAGE; - - status = wlan_ftm_postmsg((v_U8_t*)pMsgBuf,pMsgBuf->msgBodyLength); - - if (status != VOS_STATUS_SUCCESS) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, - "%s:wlan_ftm_postmsg failed!!!!", __func__); - status = VOS_STATUS_E_FAILURE; - goto done; - } - rc = wait_for_completion_timeout(&pHddCtx->ftm.ftm_comp_var, - msecs_to_jiffies(WLAN_FTM_COMMAND_TIME_OUT)); - if (!rc) { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - FL("wait on ftm_comp_var timed out")); - } -done: - - return VOS_STATUS_SUCCESS; -} - -/* set param sub-ioctls */ -static int iw_ftm_setchar_getnone(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - int ret,sub_cmd; - unsigned int length; - char *pointer,*param; - VOS_STATUS status; - hdd_adapter_t *pAdapter; - - ret =0; - pointer = wrqu->data.pointer; - length = wrqu->data.length; - sub_cmd = wrqu->data.flags; - pAdapter = (hdd_adapter_t *)netdev_priv(dev); - - /* we cannot use iotctl_private_iw_point in kernel to allocate memory - * to store data from userspace as IW_SETCHAR_GETNONE is defined as - * odd number which assigns set_args to zero.we assisgn memory using - * kzalloc here to hold userspace data - */ - param = kzalloc(length + 1, GFP_KERNEL); - if (!param) - return -EINVAL; - - if (copy_from_user(param, pointer, length)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s:Failed to get user data %s", __func__, param); - ret = -EINVAL; - goto OUT; - } - - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Received length %d", __func__, length); - - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "%s: Received parameters %s", __func__, param); - - switch(sub_cmd) - { - case WE_SET_MAC_ADDRESS: - { - - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - "SET MAC ADDRESS"); - - status = wlan_ftm_priv_set_mac_address(pAdapter, param); - - if(status != VOS_STATUS_SUCCESS) - { - hddLog(VOS_TRACE_LEVEL_FATAL, - "wlan_ftm_priv_set_mac_address Failed =%d", status); - - ret = -EINVAL; - } - - break; - } - case WE_SET_TX_RATE: - { - status = wlan_ftm_priv_set_txrate(pAdapter, param); - - if(status != VOS_STATUS_SUCCESS) - { - hddLog(VOS_TRACE_LEVEL_FATAL, - "wlan_ftm_priv_set_txrate Failed =%d", status); - - ret = -EINVAL; - } - - break; - } - default: - { - hddLog(LOGE, "%s: Invalid sub command %d", __func__, sub_cmd); - ret = -EINVAL; - break; - } - } - -OUT: - kfree(param); - return ret; -} - -static int iw_ftm_setint_getnone(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - hdd_adapter_t *pAdapter = (netdev_priv(dev)); - int *value = (int *)extra; - int sub_cmd = value[0]; - int set_value = value[1]; - int ret = 0; /* success */ - VOS_STATUS status; - - switch(sub_cmd) - { - case WE_FTM_ON_OFF: - { - status = wlan_ftm_priv_start_stop_ftm(pAdapter,set_value); - - if(status != VOS_STATUS_SUCCESS) - { - hddLog(VOS_TRACE_LEVEL_FATAL,"%s Failed =%d", __func__, status); - ret = -EINVAL; - } - - break; - } - - case WE_TX_PKT_GEN: - status = wlan_ftm_priv_start_stop_tx_pktgen(pAdapter,set_value); - - if(status != VOS_STATUS_SUCCESS) - { - hddLog(VOS_TRACE_LEVEL_FATAL,"wlan_ftm_priv_start_stop_tx_pktgen Failed =%d", status); - ret = -EINVAL; - } - break; - - case WE_SET_TX_IFS: - status = wlan_ftm_priv_set_txifs(pAdapter,set_value); - - if(status != VOS_STATUS_SUCCESS) - { - hddLog(VOS_TRACE_LEVEL_FATAL,"wlan_ftm_priv_set_txifs Failed =%d", status); - ret = -EINVAL; - } - break; - - case WE_SET_TX_PKT_CNT: - status = wlan_ftm_priv_set_txpktcnt(pAdapter,set_value); - - if(status != VOS_STATUS_SUCCESS) - { - hddLog(VOS_TRACE_LEVEL_FATAL,"wlan_ftm_priv_set_txpktcnt Failed =%d", status); - ret = -EINVAL; - } - break; - - case WE_SET_TX_PKT_LEN: - status = wlan_ftm_priv_set_txpktlen(pAdapter,set_value); - - if(status != VOS_STATUS_SUCCESS) - { - hddLog(VOS_TRACE_LEVEL_FATAL,"wlan_ftm_priv_set_txpktlen Failed =%d", status); - ret = -EINVAL; - } - break; - - case WE_SET_CHANNEL: - { - status = wlan_ftm_priv_set_channel(pAdapter,set_value); - - if(status != VOS_STATUS_SUCCESS) - { - hddLog(VOS_TRACE_LEVEL_FATAL,"wlan_ftm_priv_set_channel Failed =%d", status); - ret = -EINVAL; - } - break; - } - case WE_SET_TX_POWER: - { - status = wlan_ftm_priv_set_txpower(pAdapter,set_value); - - if(status != VOS_STATUS_SUCCESS) - { - hddLog(VOS_TRACE_LEVEL_FATAL,"wlan_ftm_priv_set_txpower Failed =%d", status); - ret = -EINVAL; - } - break; - } - case WE_CLEAR_RX_PKT_CNT: - { - status = wlan_ftm_priv_rx_pkt_clear(pAdapter,set_value); - - if(status != VOS_STATUS_SUCCESS) - { - hddLog(VOS_TRACE_LEVEL_FATAL,"wlan_ftm_priv_rx_pkt_clear Failed =%d", status); - ret = -EINVAL; - } - break; - } - case WE_RX: - { - status = wlan_ftm_priv_rx_mode(pAdapter,set_value); - - if(status != VOS_STATUS_SUCCESS) - { - hddLog(VOS_TRACE_LEVEL_FATAL,"wlan_ftm_priv_rx_mode Failed =%d", status); - ret = -EINVAL; - } - break; - } - case WE_ENABLE_CHAIN: - { - status = wlan_ftm_priv_enable_chain(pAdapter,set_value); - - if(status != VOS_STATUS_SUCCESS) - { - hddLog(VOS_TRACE_LEVEL_FATAL,"wlan_ftm_priv_enable_chain Failed =%d", status); - ret = -EINVAL; - } - break; - } - - case WE_SET_PWR_CNTL_MODE: - { - status = wlan_ftm_priv_set_pwr_cntl_mode(pAdapter, set_value); - if (status != VOS_STATUS_SUCCESS) - { - hddLog(VOS_TRACE_LEVEL_FATAL, "set_pwr_cntl_mode failed = %d", - status); - ret = -EINVAL; - } - break; - } - - case WE_ENABLE_DPD: - { - status = wlan_ftm_priv_enable_dpd(pAdapter, set_value); - if (status != VOS_STATUS_SUCCESS) - { - hddLog(VOS_TRACE_LEVEL_FATAL, "enable_dpd failed = %d", status); - ret = -EINVAL; - } - break; - } - - case WE_SET_CB: - { - status = wlan_ftm_priv_set_cb(pAdapter, set_value); - if (status != VOS_STATUS_SUCCESS) - { - hddLog(VOS_TRACE_LEVEL_FATAL, "set_cb failed = %d", status); - ret = -EINVAL; - } - break; - } - - default: - { - hddLog(LOGE, "Invalid IOCTL setvalue command %d value %d", - sub_cmd, set_value); - break; - } - } - - return ret; -} - -/* get param sub-ioctls */ -static int iw_ftm_setnone_getint(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - hdd_adapter_t *pAdapter = (netdev_priv(dev)); - int *value = (int *)extra; - int ret = 0; /* success */ - VOS_STATUS status; - - switch (value[0]) - { - case WE_GET_CHANNEL: - { - status = wlan_ftm_priv_get_channel(pAdapter,(v_U16_t*)value); - - if(status != VOS_STATUS_SUCCESS) - { - hddLog(VOS_TRACE_LEVEL_FATAL,"wlan_ftm_priv_get_channel Failed =%d", status); - ret = -EINVAL; - } - break; - } - case WE_GET_TX_POWER: - { - status = wlan_ftm_priv_get_txpower(pAdapter,(v_U16_t*)value); - - if(status != VOS_STATUS_SUCCESS) - { - hddLog(VOS_TRACE_LEVEL_FATAL,"wlan_ftm_priv_get_txpower Failed =%d", status); - ret = -EINVAL; - } - break; - } - case WE_GET_RX_PKT_CNT: - { - status = wlan_ftm_priv_get_rx_pkt_count(pAdapter,(v_U16_t*)value); - - if(status != VOS_STATUS_SUCCESS) - { - hddLog(VOS_TRACE_LEVEL_FATAL,"wlan_ftm_priv_get_rx_pkt_count Failed =%d", status); - ret = -EINVAL; - } - break; - } - default: - { - hddLog(LOGE, "Invalid IOCTL get_value command %d ",value[0]); - break; - } - } - - return ret; -} - -static int iw_ftm_get_char_setnone(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - int sub_cmd = wrqu->data.flags; - VOS_STATUS status; - hdd_adapter_t *pAdapter = (netdev_priv(dev)); - - switch(sub_cmd) - { - case WE_GET_MAC_ADDRESS: - { - status = wlan_ftm_priv_get_mac_address(pAdapter, extra); - - if(status != VOS_STATUS_SUCCESS) - { - hddLog(VOS_TRACE_LEVEL_FATAL, "wlan_ftm_priv_get_mac_address failed =%d", status); - return -EINVAL; - } - wrqu->data.length = strlen(extra)+1; - break; - } - case WE_GET_TX_RATE: - { - status = wlan_ftm_priv_get_txrate(pAdapter, extra); - - if(status != VOS_STATUS_SUCCESS) - { - hddLog(VOS_TRACE_LEVEL_FATAL, "wlan_ftm_priv_get_txrate failed =%d", status); - return -EINVAL; - } - - wrqu->data.length = strlen(extra)+1; - break; - } - case WE_GET_FTM_VERSION: - { - status = wlan_ftm_priv_get_ftm_version(pAdapter, extra); - - if(status != VOS_STATUS_SUCCESS) - { - hddLog(VOS_TRACE_LEVEL_FATAL, "wlan_ftm_priv_get_mac_address failed =%d", status); - return -EINVAL; - } - wrqu->data.length = strlen(extra)+1; - break; - } - case WE_GET_FTM_STATUS: - { - status = wlan_ftm_priv_get_status(pAdapter, extra); - - if(status != VOS_STATUS_SUCCESS) - { - hddLog(VOS_TRACE_LEVEL_FATAL, "wlan_ftm_priv_get_status failed =%d", status); - return -EINVAL; - } - - wrqu->data.length = strlen(extra)+1; - break; - } - case WE_GET_RX_RSSI: - { - status = wlan_ftm_priv_get_rx_rssi(pAdapter, extra); - - if(status != VOS_STATUS_SUCCESS) - { - hddLog(VOS_TRACE_LEVEL_FATAL, "wlan_ftm_priv_get_rx_rssi failed =%d", status); - return -EINVAL; - } - - wrqu->data.length = strlen(extra)+1; - break; - } - default: - { - hddLog(LOGE, "%s: Invalid IOCTL command %d", __func__, sub_cmd ); - break; - } - } - - return 0; -} - -VOS_STATUS wlan_write_to_efs (v_U8_t *pData, v_U16_t data_len) -{ -#if defined(MSM_PLATFORM) - tAniHdr *wmsg = NULL; - v_U8_t *pBuf; - hdd_context_t *pHddCtx = NULL; - v_CONTEXT_t pVosContext= NULL; - - pBuf = (v_U8_t*)vos_mem_malloc(sizeof(tAniHdr) + sizeof(v_U32_t)+ data_len); - if(pBuf == NULL) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:pBuf is NULL",__func__); - return VOS_STATUS_E_NOMEM; - } - wmsg = (tAniHdr*)pBuf; - wmsg->type = PTT_MSG_FTM_CMDS_TYPE; - wmsg->length = data_len + sizeof(tAniHdr)+ sizeof(v_U32_t); - wmsg->length = FTM_SWAP16(wmsg->length); - pBuf += sizeof(tAniHdr); - - /*Get the global context */ - pVosContext = vos_get_global_context(VOS_MODULE_ID_SYS, NULL); - - /*Get the Hdd Context */ - //pAdapter = ((VosContextType*)(pVosContext))->pHDDContext; - pHddCtx = (hdd_context_t *)(((VosContextType*)(pVosContext))->pHDDContext); - - /* EfS command Code */ - *(v_U32_t*)pBuf = 0x000000EF; - - pBuf += sizeof(v_U32_t); - - memcpy(pBuf, pData,data_len); - - if(pHddCtx->ftm.cmd_iwpriv == TRUE) { - if( ptt_sock_send_msg_to_app(wmsg, 0, ANI_NL_MSG_PUMAC, pHddCtx->ptt_pid) < 0) { - - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, ("Ptt Socket error sending message to the app!!")); - vos_mem_free((v_VOID_t*)wmsg); - return VOS_STATUS_E_FAILURE; - } - } - else { - if( ptt_sock_send_msg_to_app(wmsg, 0, ANI_NL_MSG_PUMAC, pHddCtx->ftm.wnl->nlh.nlmsg_pid) < 0) { - - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, ("Ptt Socket error sending message to the app!!")); - vos_mem_free((v_VOID_t*)wmsg); - return VOS_STATUS_E_FAILURE; - } - } - - vos_mem_free((v_VOID_t*)wmsg); -#endif //FTM and ANDROID - - return VOS_STATUS_SUCCESS; -} - -/* action sub-ioctls */ -static int iw_ftm_setnone_getnone(struct net_device *dev, struct iw_request_info *info, - union iwreq_data *wrqu, char *extra) -{ - int sub_cmd = wrqu->data.flags; - int ret = 0; /* success */ - - switch (sub_cmd) - { - case WE_SET_NV_DEFAULTS: - { - v_U8_t *pu8buf,*pTempBuf; - v_U16_t size; - size = sizeof(v_U32_t) + sizeof(sHalNv); - hddLog(VOS_TRACE_LEVEL_INFO_HIGH,"HAL NV Size =%d", size); - pu8buf = vos_mem_malloc(size); - if(pu8buf == NULL) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:pu8buf is NULL",__func__); - return VOS_STATUS_E_NOMEM; - } - memset(pu8buf,0,size); - pTempBuf = pu8buf; - pTempBuf += sizeof(v_U32_t); - memcpy(pTempBuf,&nvDefaults,sizeof(sHalNv)); - - wlan_write_to_efs(pu8buf,size); - vos_mem_free(pu8buf); - } - - default: - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,"%s: unknown ioctl %d", __func__, sub_cmd); - hddLog(LOGE, "Invalid IOCTL action command %d ", sub_cmd); - break; - } - } - - return ret; -} - -static const iw_handler we_ftm_private[] = { - - [WLAN_FTM_PRIV_SET_INT_GET_NONE - SIOCIWFIRSTPRIV] = iw_ftm_setint_getnone, //set priv ioctl - [WLAN_FTM_PRIV_SET_NONE_GET_INT - SIOCIWFIRSTPRIV] = iw_ftm_setnone_getint, //get priv ioctl - [WLAN_FTM_PRIV_SET_CHAR_GET_NONE - SIOCIWFIRSTPRIV] = iw_ftm_setchar_getnone, //get priv ioctl - [WLAN_FTM_PRIV_GET_CHAR_SET_NONE - SIOCIWFIRSTPRIV] = iw_ftm_get_char_setnone, - [WLAN_FTM_PRIV_SET_NONE_GET_NONE - SIOCIWFIRSTPRIV] = iw_ftm_setnone_getnone, //action priv ioctl -}; - -/*Maximum command length can be only 15 */ -static const struct iw_priv_args we_ftm_private_args[] = { - - /* handlers for main ioctl */ - { WLAN_FTM_PRIV_SET_INT_GET_NONE, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, - 0, - "" }, - - { WE_FTM_ON_OFF, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, - 0, - "ftm" }, - - { WE_TX_PKT_GEN, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, - 0, - "tx" }, - - { WE_SET_TX_IFS, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, - 0, - "set_txifs" }, - - { WE_SET_TX_PKT_CNT, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, - 0, - "set_txpktcnt" }, - - { WE_SET_TX_PKT_LEN, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, - 0, - "set_txpktlen" }, - - { WE_SET_CHANNEL, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, - 0, - "set_channel" }, - - { WE_SET_TX_POWER, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, - 0, - "set_txpower" }, - - { WE_CLEAR_RX_PKT_CNT, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, - 0, - "clr_rxpktcnt" }, - - { WE_RX, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, - 0, - "rx" }, - - { WE_ENABLE_CHAIN, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, - 0, - "ena_chain" }, - - { WE_SET_PWR_CNTL_MODE, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, - 0, - "pwr_cntl_mode" }, - - { WE_ENABLE_DPD, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, - 0, - "ena_dpd" }, - - { WE_SET_CB, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, - 0, - "set_cb" }, - - /* handlers for main ioctl */ - { WLAN_FTM_PRIV_SET_NONE_GET_INT, - 0, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, - "" }, - - { WE_GET_CHANNEL, - 0, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, - "get_channel" }, - - { WE_GET_TX_POWER, - 0, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, - "get_txpower" }, - - { WE_GET_RX_PKT_CNT, - 0, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, - "get_rxpktcnt" }, - - /* handlers for main ioctl */ - { WLAN_FTM_PRIV_SET_CHAR_GET_NONE, - IW_PRIV_TYPE_CHAR| 512, - 0, - "" }, - - { WE_SET_MAC_ADDRESS, - IW_PRIV_TYPE_CHAR| 512, - 0, - "set_mac_address" }, - - { WE_SET_TX_RATE, - IW_PRIV_TYPE_CHAR | 512, - 0, - "set_txrate" }, - - /* handlers for main ioctl */ - { WLAN_FTM_PRIV_GET_CHAR_SET_NONE, - 0, - IW_PRIV_TYPE_CHAR| WE_FTM_MAX_STR_LEN, - "" }, - - { WE_GET_MAC_ADDRESS, - 0, - IW_PRIV_TYPE_CHAR| WE_FTM_MAX_STR_LEN, - "get_mac_address" }, - - { WE_GET_FTM_VERSION, - 0, - IW_PRIV_TYPE_CHAR| WE_FTM_MAX_STR_LEN, - "ftm_version" }, - - { WE_GET_TX_RATE, - 0, - IW_PRIV_TYPE_CHAR| WE_FTM_MAX_STR_LEN, - "get_txrate" }, - - { WE_GET_FTM_STATUS, - 0, - IW_PRIV_TYPE_CHAR| WE_FTM_MAX_STR_LEN, - "get_status" }, - - { WE_GET_RX_RSSI, - 0, - IW_PRIV_TYPE_CHAR| WE_FTM_MAX_STR_LEN, - "get_rx_rssi" }, - - /* handlers for main ioctl */ - { WLAN_FTM_PRIV_SET_NONE_GET_NONE, - 0, - 0, - "" }, - - /* handlers for sub-ioctl */ - { WE_SET_NV_DEFAULTS, - 0, - 0, - "set_nv_defaults" }, - -}; - -const struct iw_handler_def we_ftm_handler_def = { - .num_standard = 0, - .num_private = sizeof(we_ftm_private) / sizeof(we_ftm_private[0]), - .num_private_args = sizeof(we_ftm_private_args) / sizeof(we_ftm_private_args[0]), - - .standard = (iw_handler *)NULL, - .private = (iw_handler *)we_ftm_private, - .private_args = we_ftm_private_args, - .get_wireless_stats = NULL, -}; - -static int wlan_ftm_register_wext(hdd_adapter_t *pAdapter) -{ - - //hdd_wext_state_t *pwextBuf = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter); - - // Zero the memory. This zeros the profile structure. - //memset(pwextBuf, 0,sizeof(hdd_wext_state_t)); - - pAdapter->dev->wireless_handlers = (struct iw_handler_def *)&we_ftm_handler_def; - - return 0; -} - #if defined(QCA_WIFI_FTM) #if defined(LINUX_QCMBR) -int wlan_hdd_qcmbr_command(hdd_adapter_t *pAdapter, qcmbr_data_t *pqcmbr_data) +static int wlan_hdd_qcmbr_command(hdd_adapter_t *pAdapter, qcmbr_data_t *pqcmbr_data) { int ret = 0; qcmbr_queue_t *qcmbr_buf = NULL; @@ -5456,6 +988,7 @@ int wlan_hdd_qcmbr_command(hdd_adapter_t *pAdapter, qcmbr_data_t *pqcmbr_data) } } break; + case ATH_XIOCTL_UNIFIED_UTF_RSP: { pqcmbr_data->copy_to_user = 1; if (!list_empty(&qcmbr_queue_head)) { @@ -5555,7 +1088,7 @@ int wlan_hdd_qcmbr_unified_ioctl(hdd_adapter_t *pAdapter, struct ifreq *ifr) return ret; } -void WLANQCMBR_McProcessMsg(v_VOID_t *message) +static void WLANQCMBR_McProcessMsg(v_VOID_t *message) { qcmbr_queue_t *qcmbr_buf = NULL; u_int32_t data_len; @@ -5569,7 +1102,7 @@ void WLANQCMBR_McProcessMsg(v_VOID_t *message) spin_unlock_bh(&qcmbr_queue_lock); } } -#endif +#endif /*LINUX_QCMBR*/ VOS_STATUS WLANFTM_McProcessMsg (v_VOID_t *message) { @@ -5617,74 +1150,15 @@ VOS_STATUS wlan_hdd_ftm_testmode_cmd(void *data, int len) return VOS_STATUS_E_NOMEM; } - cmd_data->len = len; - vos_mem_copy(cmd_data->data, data, len); - - if (wlan_ftm_postmsg((v_U8_t *)cmd_data, sizeof(*cmd_data))) { - vos_mem_free(cmd_data->data); - vos_mem_free(cmd_data); - return VOS_STATUS_E_FAILURE; - } - - return VOS_STATUS_SUCCESS; -} -#else -VOS_STATUS WLANFTM_McProcessMsg (v_VOID_t *message) -{ - ftm_rsp_msg_t *pFtmMsgRsp; - - VOS_STATUS vos_status = VOS_STATUS_SUCCESS; - hdd_context_t *pHddCtx; - v_CONTEXT_t pVosContext= NULL; - - ENTER(); + cmd_data->len = len; + vos_mem_copy(cmd_data->data, data, len); - pFtmMsgRsp = (ftm_rsp_msg_t *)message; - - if (!message ) - { - VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR, - "WLAN FTM:Invalid parameter sent on WLANFTM_ProcessMainMessage"); - return VOS_STATUS_E_INVAL; - } - /*Get the global context */ - pVosContext = vos_get_global_context(VOS_MODULE_ID_SYS, NULL); - - /*Get the Hdd Context */ - pHddCtx = ((VosContextType*)(pVosContext))->pHDDContext; - - if (pHddCtx->ftm.cmd_iwpriv == TRUE) { - - memcpy((char*)pMsgBuf, (char*)message, pFtmMsgRsp->msgBodyLength); - complete(&pHddCtx->ftm.ftm_comp_var); - } - else { - /*Response length to Ptt App*/ - pHddCtx->ftm.wnl->wmsg.length = sizeof(tAniHdr)+ SIZE_OF_FTM_DIAG_HEADER_LEN + pFtmMsgRsp->msgBodyLength; - - /*Ptt App expects the response length in LE */ - pHddCtx->ftm.wnl->wmsg.length = FTM_SWAP16(pHddCtx->ftm.wnl->wmsg.length); - - /*Response expects the length to be in */ - pHddCtx->ftm.pResponseBuf->ftm_hdr.data_len = pHddCtx->ftm.pRequestBuf->ftm_hdr.data_len - - sizeof(pHddCtx->ftm.pRequestBuf->ftm_hdr.data_len); - - /*Copy the message*/ - memcpy((char*)&pHddCtx->ftm.pResponseBuf->ftmpkt,(char*)message,pFtmMsgRsp->msgBodyLength); - - /*Update the error code*/ - pHddCtx->ftm.pResponseBuf->ftm_err_code = WLAN_FTM_SUCCESS; - - vos_status = vos_event_set(&pHddCtx->ftm.ftm_vos_event); - - if (!VOS_IS_STATUS_SUCCESS(vos_status)) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, ("ERROR: HDD vos_event_set failed!!")); + if (wlan_ftm_postmsg((v_U8_t *)cmd_data, sizeof(*cmd_data))) { + vos_mem_free(cmd_data->data); + vos_mem_free(cmd_data); return VOS_STATUS_E_FAILURE; - } - } - EXIT(); - return VOS_STATUS_SUCCESS; + } + return VOS_STATUS_SUCCESS; } -#endif +#endif /*QCA_WIFI_FTM*/ diff --git a/CORE/HDD/src/wlan_hdd_ipa.c b/CORE/HDD/src/wlan_hdd_ipa.c index 033ecf182103..053b9e870c57 100644 --- a/CORE/HDD/src/wlan_hdd_ipa.c +++ b/CORE/HDD/src/wlan_hdd_ipa.c @@ -1203,8 +1203,13 @@ static int hdd_ipa_setup_rm(struct hdd_ipa_priv *hdd_ipa) } vos_wake_lock_init(&hdd_ipa->wake_lock, "wlan_ipa"); +#ifdef CONFIG_CNSS + cnss_init_delayed_work(&hdd_ipa->wake_lock_work, + hdd_ipa_wake_lock_timer_func); +#else INIT_DELAYED_WORK(&hdd_ipa->wake_lock_work, hdd_ipa_wake_lock_timer_func); +#endif adf_os_spinlock_init(&hdd_ipa->rm_lock); hdd_ipa->rm_state = HDD_IPA_RM_RELEASED; hdd_ipa->wake_lock_released = true; @@ -1235,7 +1240,9 @@ static void hdd_ipa_destory_rm_resource(struct hdd_ipa_priv *hdd_ipa) cancel_delayed_work_sync(&hdd_ipa->wake_lock_work); vos_wake_lock_destroy(&hdd_ipa->wake_lock); +#ifdef WLAN_OPEN_SOURCE cancel_work_sync(&hdd_ipa->rm_work); +#endif adf_os_spinlock_destroy(&hdd_ipa->rm_lock); ipa_rm_inactivity_timer_destroy(IPA_RM_RESOURCE_WLAN_PROD); @@ -1803,7 +1810,9 @@ static void hdd_ipa_i2w_cb(void *priv, enum ipa_dp_evt_type evt, * If we are here means, host is not suspended, wait for the work queue * to finish. */ +#ifdef WLAN_OPEN_SOURCE flush_work(&hdd_ipa->pm_work); +#endif return hdd_ipa_send_pkt_to_tl(iface_context, ipa_tx_desc); } @@ -2812,7 +2821,11 @@ VOS_STATUS hdd_ipa_init(hdd_context_t *hdd_ctx) adf_os_spinlock_init(&iface_context->interface_lock); } +#ifdef CONFIG_CNSS + cnss_init_work(&hdd_ipa->pm_work, hdd_ipa_pm_send_pkt_to_tl); +#else INIT_WORK(&hdd_ipa->pm_work, hdd_ipa_pm_send_pkt_to_tl); +#endif adf_os_spinlock_init(&hdd_ipa->pm_lock); adf_nbuf_queue_init(&hdd_ipa->pm_queue_head); @@ -2871,7 +2884,9 @@ VOS_STATUS hdd_ipa_cleanup(hdd_context_t *hdd_ctx) if (!hdd_ipa_is_enabled(hdd_ctx)) return VOS_STATUS_SUCCESS; +#ifdef WLAN_OPEN_SOURCE cancel_work_sync(&hdd_ipa->pm_work); +#endif adf_os_spin_lock_bh(&hdd_ipa->pm_lock); diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c index c2ad7262b1f1..5a9493e34914 100755 --- a/CORE/HDD/src/wlan_hdd_main.c +++ b/CORE/HDD/src/wlan_hdd_main.c @@ -12089,7 +12089,7 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc) #endif #ifdef WLAN_FEATURE_LPSS - wlan_hdd_send_status_pkg(pAdapter, NULL, 1, 0); + wlan_hdd_send_all_scan_intf_info(pHddCtx); wlan_hdd_send_version_pkg(pHddCtx->target_fw_version, pHddCtx->target_hw_version, pHddCtx->target_hw_name); @@ -13357,6 +13357,7 @@ int wlan_hdd_gen_wlan_status_pack(struct wlan_status_data *data, data->vdev_mode = pAdapter->device_mode; if (pHddStaCtx) { data->is_connected = is_connected; + data->rssi = pAdapter->rssi; data->freq = vos_chan_to_freq(pHddStaCtx->conn_info.operationChannel); if (WLAN_SVC_MAX_SSID_LEN >= pHddStaCtx->conn_info.SSID.SSID.length) { data->ssid_len = pHddStaCtx->conn_info.SSID.SSID.length; @@ -13620,6 +13621,39 @@ void wlan_hdd_send_version_pkg(v_U32_t fw_version, wlan_hdd_send_svc_nlink_msg(WLAN_SVC_WLAN_VERSION_IND, &data, sizeof(struct wlan_version_data)); } + +void wlan_hdd_send_all_scan_intf_info(hdd_context_t *pHddCtx) +{ + hdd_adapter_t *pDataAdapter = NULL; + hdd_adapter_list_node_t *pAdapterNode = NULL, *pNext = NULL; + v_BOOL_t scan_intf_found = VOS_FALSE; + VOS_STATUS status; + + if (!pHddCtx) { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: NULL pointer for pHddCtx", + __func__); + return; + } + + status = hdd_get_front_adapter(pHddCtx, &pAdapterNode); + while (NULL != pAdapterNode && VOS_STATUS_SUCCESS == status) { + pDataAdapter = pAdapterNode->pAdapter; + if (pDataAdapter) { + if (pDataAdapter->device_mode == WLAN_HDD_INFRA_STATION || + pDataAdapter->device_mode == WLAN_HDD_P2P_CLIENT || + pDataAdapter->device_mode == WLAN_HDD_P2P_DEVICE) { + scan_intf_found = VOS_TRUE; + wlan_hdd_send_status_pkg(pDataAdapter, NULL, 1, 0); + } + } + status = hdd_get_next_adapter(pHddCtx, pAdapterNode, &pNext); + pAdapterNode = pNext; + } + + if (!scan_intf_found) + wlan_hdd_send_status_pkg(pDataAdapter, NULL, 1, 0); +} #endif #ifdef FEATURE_WLAN_AUTO_SHUTDOWN diff --git a/CORE/HDD/src/wlan_hdd_tdls.c b/CORE/HDD/src/wlan_hdd_tdls.c index 7560d63cee89..1803644468cc 100644 --- a/CORE/HDD/src/wlan_hdd_tdls.c +++ b/CORE/HDD/src/wlan_hdd_tdls.c @@ -139,11 +139,6 @@ static v_VOID_t wlan_hdd_tdls_start_peer_discover_timer(tdlsCtx_t *pHddTdlsCtx, } pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pHddTdlsCtx->pAdapter); -#ifdef FEATURE_WLAN_TDLS_INTERNAL - wlan_hdd_tdls_timer_restart(pHddTdlsCtx->pAdapter, - &pHddTdlsCtx->peerDiscoverTimer, - discoveryExpiry); -#endif VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "beacon rssi: %d", pHddTdlsCtx->ap_rssi); @@ -1741,11 +1736,6 @@ void wlan_hdd_tdls_connection_callback(hdd_adapter_t *pAdapter) pHddTdlsCtx->discovery_sent_cnt = 0; wlan_hdd_tdls_check_power_save_prohibited(pHddTdlsCtx->pAdapter); -#ifdef FEATURE_WLAN_TDLS_INTERNAL - wlan_hdd_tdls_timer_restart(pHddTdlsCtx->pAdapter, - &pHddTdlsCtx->peerDiscoverTimer, - pHddTdlsCtx->threshold_config.discovery_period_t); -#endif } mutex_unlock(&pHddCtx->tdls_lock); @@ -2020,11 +2010,6 @@ static void wlan_hdd_tdls_implicit_enable(tdlsCtx_t *pHddTdlsCtx) wlan_hdd_tdls_check_power_save_prohibited(pHddTdlsCtx->pAdapter); -#ifdef FEATURE_WLAN_TDLS_INTERNAL - wlan_hdd_tdls_timer_restart(pHddTdlsCtx->pAdapter, - &pHddTdlsCtx->peerDiscoverTimer, - pHddTdlsCtx->threshold_config.discovery_period_t); -#endif } void wlan_hdd_tdls_set_mode(hdd_context_t *pHddCtx, diff --git a/CORE/HDD/src/wlan_hdd_trace.c b/CORE/HDD/src/wlan_hdd_trace.c index 69100959954c..f7d683e6522a 100644 --- a/CORE/HDD/src/wlan_hdd_trace.c +++ b/CORE/HDD/src/wlan_hdd_trace.c @@ -107,7 +107,7 @@ static tANI_U8 *hddTraceGetEventString(tANI_U32 code) void hddTraceDump(void *pMac, tpvosTraceRecord pRecord, tANI_U16 recIndex) { - hddLog(LOGE, "%04d %012u S%d %-14s %-30s(0x%x) ", + hddLog(LOGE, "%04d %012llu S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session, "HDD Event:", hddTraceGetEventString(pRecord->code), pRecord->data); diff --git a/CORE/HDD/src/wlan_hdd_wowl.c b/CORE/HDD/src/wlan_hdd_wowl.c index 219a5b8a7c88..af1dc841aaa9 100644 --- a/CORE/HDD/src/wlan_hdd_wowl.c +++ b/CORE/HDD/src/wlan_hdd_wowl.c @@ -386,6 +386,8 @@ v_BOOL_t hdd_add_wowl_ptrn_debugfs(hdd_adapter_t *pAdapter, v_U8_t pattern_idx, localPattern.ucPatternId = pattern_idx; localPattern.ucPatternByteOffset = pattern_offset; localPattern.ucPatternSize = pattern_len; + localPattern.sessionId = sessionId; + if (localPattern.ucPatternSize > SIR_WOWL_BCAST_PATTERN_MAX_SIZE) { VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, "%s: WoW pattern size (%d) greater than max (%d)", diff --git a/CORE/MAC/inc/aniGlobal.h b/CORE/MAC/inc/aniGlobal.h index 70eda75d5919..b5586204e88a 100644 --- a/CORE/MAC/inc/aniGlobal.h +++ b/CORE/MAC/inc/aniGlobal.h @@ -242,11 +242,6 @@ typedef struct sLimTimers TX_TIMER gLimEseTsmTimer; #endif TX_TIMER gLimRemainOnChannelTimer; -#ifdef FEATURE_WLAN_TDLS_INTERNAL - TX_TIMER gLimTdlsDisRspWaitTimer; - TX_TIMER gLimTdlsLinkSetupRspTimeouTimer; - TX_TIMER gLimTdlsLinkSetupCnfTimeoutTimer; -#endif TX_TIMER gLimPeriodicJoinProbeReqTimer; TX_TIMER gLimDisassocAckTimer; @@ -853,22 +848,6 @@ typedef struct sAniSirLim //////////////////////////////// HT RELATED ////////////////////////////////////////// -#ifdef FEATURE_WLAN_TDLS_INTERNAL - //////////////////////////////// TDLS RELATED ////////////////////////////////////////// - - tSirTdlsDisReq gLimTdlsDisReq ; - //tLimDisResultList *gTdlsDisResultList ; - tLimDisResultList *gLimTdlsDisResultList ; - tANI_U8 gLimTdlsDisStaCount ; - tANI_U8 gAddStaDisRspWait ; - - tLimTdlsLinkSetupInfo gLimTdlsLinkSetupInfo; - - /* to track if direct link is b/g/n, this can be independent of AP link */ -#ifdef FEATURE_WLAN_TDLS_NEGATIVE - tANI_U32 gLimTdlsNegativeBehavior; -#endif -#endif #ifdef FEATURE_WLAN_TDLS tANI_U8 gLimAddStaTdls ; tANI_U8 gLimTdlsLinkMode ; @@ -1059,9 +1038,6 @@ typedef struct sAniSirGlobal #ifdef FEATURE_OEM_DATA_SUPPORT tOemDataStruct oemData; #endif -#ifdef FEATURE_WLAN_TDLS_INTERNAL - tCsrTdlsCtxStruct tdlsCtx ; -#endif tPmcInfo pmc; tSmeBtcInfo btc; diff --git a/CORE/MAC/inc/qwlan_version.h b/CORE/MAC/inc/qwlan_version.h index 3aef267db70f..321ee2d2654a 100644 --- a/CORE/MAC/inc/qwlan_version.h +++ b/CORE/MAC/inc/qwlan_version.h @@ -42,9 +42,9 @@ BRIEF DESCRIPTION: #define QWLAN_VERSION_MINOR 0 #define QWLAN_VERSION_PATCH 0 #define QWLAN_VERSION_EXTRA "" -#define QWLAN_VERSION_BUILD 161 +#define QWLAN_VERSION_BUILD 162 -#define QWLAN_VERSIONSTR "1.0.0.161" +#define QWLAN_VERSIONSTR "1.0.0.162" #ifdef QCA_WIFI_2_0 diff --git a/CORE/MAC/inc/sirApi.h b/CORE/MAC/inc/sirApi.h index b3de29820154..d7b166da7270 100644 --- a/CORE/MAC/inc/sirApi.h +++ b/CORE/MAC/inc/sirApi.h @@ -4412,166 +4412,6 @@ typedef struct sSirTdlsEventNotify #endif #endif /* FEATURE_WLAN_TDLS */ -#ifdef FEATURE_WLAN_TDLS_INTERNAL -typedef enum tdlsListType -{ - TDLS_DIS_LIST, - TDLS_SETUP_LIST -}eTdlsListType ; - -typedef enum tdlsStates -{ - TDLS_LINK_IDLE_STATE, - TDLS_LINK_DIS_INIT_STATE, - TDLS_LINK_DIS_RSP_WAIT_STATE, - TDLS_DIS_REQ_PROCESS_STATE, - TDLS_DIS_RSP_SENT_WAIT_STATE, - TDLS_DIS_RSP_SENT_DONE_STATE, - TDLS_LINK_DIS_DONE_STATE, - TDLS_LINK_SETUP_START_STATE, - TDLS_LINK_SETUP_WAIT_STATE, - TDLS_LINK_SETUP_RSP_WAIT_STATE, - TDLS_LINK_SETUP_DONE_STATE, - TDLS_LINK_TEARDOWN_START_STATE, - TDLS_LINK_TEARDOWN_DONE_STATE, - TDLS_LINK_SETUP_STATE -}eSirTdlsStates ; - -typedef struct sSirTdlsPeerInfo -{ - tSirMacAddr peerMac; - tANI_U8 sessionId; - tANI_U8 dialog ; - tSirMacCapabilityInfo capabilityInfo ; - tSirMacRateSet tdlsPeerSuppRates ; - tSirMacRateSet tdlsPeerExtRates ; - //tDot11fIEHTCaps tdlsPeerHtCaps ; - tSirMacHTCapabilityInfo tdlsPeerHtCaps ; - tSirMacHTParametersInfo tdlsPeerHtParams ; - tSirMacExtendedHTCapabilityInfo tdlsPeerHtExtCaps ; - tANI_U8 supportedMCSSet[SIZE_OF_SUPPORTED_MCS_SET]; - - //tDot11fIEExtCapability tdlsPeerExtenCaps ; - tSirMacRsnInfo tdlsPeerRsn ; - tANI_U16 tdlsPeerFtIe ; - tANI_U16 tdlsPeerTimeoutIntvl ; - tANI_U16 tdlsPeerSuppChan ; - tANI_U16 tdlsPeerSuppReguClass ; - tANI_S8 tdlsPeerRssi ; - tANI_U16 tdlsPeerState ; - /* flags to indicate optional IE's are in */ - tANI_U8 ExtRatesPresent ; - tANI_U8 rsnIePresent ; - tANI_U8 htCapPresent ; - tANI_U8 delStaNeeded ; - -} tSirTdlsPeerInfo, *tpSirSmeTdlsPeerInfo ; - -/* TDLS Request struct SME-->PE */ -typedef struct sSirTdlsDiscoveryReq -{ - tANI_U16 messageType; // eWNI_SME_TDLS_DISCOVERY_START_REQ - tANI_U16 length; - tANI_U8 sessionId; // Session ID - tANI_U16 transactionId; // Transaction ID for cmd - tANI_U8 reqType; - tANI_U8 dialog; - tSirMacAddr bssid; // For multi-session, for PE to locate peSession ID - tSirMacAddr peerMac; -} tSirTdlsDisReq, *tpSirSmeTdlsDisReq ; - -typedef struct sSirTdlsLinkSetupReq -{ - tANI_U16 messageType; // eWNI_SME_TDLS_LINK_START_REQ - tANI_U16 length; - tANI_U8 sessionId; // Session ID - tANI_U16 transactionId; // Transaction ID for cmd - tANI_U8 dialog; - tSirMacAddr bssid; // For multi-session, for PE to locate peSession ID - tSirMacAddr peerMac; -} tSirTdlsSetupReq, *tpSirSmeTdlsSetupReq ; - -typedef struct sSirTdlsTeardownReq -{ - tANI_U16 messageType; // eWNI_SME_TDLS_TEARDOWN_REQ - tANI_U16 length; - tANI_U8 sessionId; // Session ID - tANI_U16 transactionId; // Transaction ID for cmd - tSirMacAddr bssid; // For multi-session, for PE to locate peSession ID - tSirMacAddr peerMac; -} tSirTdlsTeardownReq, *tpSirSmeTdlsTeardownReq ; - - -/* TDLS response struct PE-->SME */ -typedef struct sSirTdlsDiscoveryRsp -{ - tANI_U16 messageType; - tANI_U16 length; - tSirResultCodes statusCode; - tANI_U16 numDisSta ; - tSirTdlsPeerInfo tdlsDisPeerInfo[0]; -} tSirTdlsDisRsp, *tpSirSmeTdlsDiscoveryRsp; - -typedef struct sSirTdlsLinkSetupRsp -{ - tANI_U16 messageType; - tANI_U16 length; - tSirResultCodes statusCode; - tSirMacAddr peerMac; -} tSirTdlsLinksetupRsp ; - -typedef struct sSirTdlsLinkSetupInd -{ - tANI_U16 messageType; - tANI_U16 length; - tSirResultCodes statusCode; - tSirMacAddr peerMac; -} tSirTdlsLinkSetupInd ; - - -typedef struct sSirTdlsTeardownRsp -{ - tANI_U16 messageType; - tANI_U16 length; - tSirResultCodes statusCode; - tSirMacAddr peerMac; -} tSirTdlsTeardownRsp ; - -typedef struct sSirTdlsPeerInd -{ - tANI_U16 messageType; - tANI_U16 length; - tSirMacAddr peerMac; - tANI_U8 sessionId; // Session ID - tANI_U16 staId ; - tANI_U16 staType ; - tANI_U8 ucastSig; - tANI_U8 bcastSig; -} tSirTdlsPeerInd ; - -typedef struct sSirTdlsLinkEstablishInd -{ - tANI_U16 messageType; - tANI_U16 length; - tANI_U8 bIsResponder; /* if this is 1, self is initiator and peer is reponder */ - tANI_U8 linkIdenOffset; /* offset of LinkIdentifierIE.bssid[0] from ptiTemplateBuf */ - tANI_U8 ptiBufStatusOffset; /* offset of BufferStatus from ptiTemplateBuf */ - tANI_U8 ptiTemplateLen; - tANI_U8 ptiTemplateBuf[64]; - tANI_U8 extCapability[8]; -/* This will be part of PTI template when sent by PE - tANI_U8 linkIdentifier[20]; -*/ -} tSirTdlsLinkEstablishInd, *tpSirTdlsLinkEstablishInd; - -typedef struct sSirTdlsLinkTeardownInd -{ - tANI_U16 messageType; - tANI_U16 length; - tANI_U16 staId; -} tSirTdlsLinkTeardownInd, *tpSirTdlsLinkTeardownInd; - -#endif /* FEATURE_WLAN_TDLS_INTERNAL */ typedef struct sSirActiveModeSetBcnFilterReq { diff --git a/CORE/MAC/inc/wniApi.h b/CORE/MAC/inc/wniApi.h index ce24720314b7..18aabb777c05 100644 --- a/CORE/MAC/inc/wniApi.h +++ b/CORE/MAC/inc/wniApi.h @@ -346,20 +346,6 @@ enum eWniMsgTypes //SIR_LIM_MSG_TYPES_BEGIN+0xB0 = 12B0 (which means max of 176 messages and //eWNI_SME_TDLS_DEL_STA_RSP = 175. //Should fix above issue to enable TDLS_INTERNAL -#ifdef FEATURE_WLAN_TDLS_INTERNAL -#error ERROR_TDLS_INTERNAL - eWNI_SME_TDLS_DISCOVERY_START_REQ, - eWNI_SME_TDLS_DISCOVERY_START_RSP, - eWNI_SME_TDLS_DISCOVERY_START_IND, - eWNI_SME_TDLS_LINK_START_REQ, - eWNI_SME_TDLS_LINK_START_RSP, - eWNI_SME_TDLS_LINK_START_IND, - eWNI_SME_TDLS_TEARDOWN_REQ, - eWNI_SME_TDLS_TEARDOWN_RSP, - eWNI_SME_TDLS_TEARDOWN_IND, - eWNI_SME_ADD_TDLS_PEER_IND, - eWNI_SME_DELETE_TDLS_PEER_IND, -#endif eWNI_SME_SET_BCN_FILTER_REQ, eWNI_SME_RESET_AP_CAPS_CHANGED, #ifdef WLAN_FEATURE_11W diff --git a/CORE/MAC/src/include/sirParams.h b/CORE/MAC/src/include/sirParams.h index 9f69127426d7..d4fd9ec3065e 100644 --- a/CORE/MAC/src/include/sirParams.h +++ b/CORE/MAC/src/include/sirParams.h @@ -815,11 +815,6 @@ typedef struct sSirMbMsgP2p #define SIR_LIM_DEAUTH_ACK_TIMEOUT (SIR_LIM_TIMEOUT_MSG_START + 0x27) #define SIR_LIM_PERIODIC_JOIN_PROBE_REQ_TIMEOUT (SIR_LIM_TIMEOUT_MSG_START + 0x28) -#ifdef FEATURE_WLAN_TDLS_INTERNAL -#define SIR_LIM_TDLS_DISCOVERY_RSP_WAIT (SIR_LIM_TIMEOUT_MSG_START + 0x29) -#define SIR_LIM_TDLS_LINK_SETUP_RSP_TIMEOUT (SIR_LIM_TIMEOUT_MSG_START + 0x2A) -#define SIR_LIM_TDLS_LINK_SETUP_CNF_TIMEOUT (SIR_LIM_TIMEOUT_MSG_START + 0x2B) -#endif #define SIR_LIM_CONVERT_ACTIVE_CHANNEL_TO_PASSIVE (SIR_LIM_TIMEOUT_MSG_START + 0x2C) #define SIR_LIM_MSG_TYPES_END (SIR_LIM_MSG_TYPES_BEGIN+0xFF) diff --git a/CORE/MAC/src/pe/include/limGlobal.h b/CORE/MAC/src/pe/include/limGlobal.h index cf92870edb87..3fddb1c32ff3 100644 --- a/CORE/MAC/src/pe/include/limGlobal.h +++ b/CORE/MAC/src/pe/include/limGlobal.h @@ -692,13 +692,6 @@ typedef struct sLimSpecMgmtInfo tANI_BOOLEAN fRadarIntrConfigured; /* Whether radar interrupt has been configured */ }tLimSpecMgmtInfo, *tpLimSpecMgmtInfo; -#ifdef FEATURE_WLAN_TDLS_INTERNAL -typedef struct sLimDisResultList -{ - struct sLimDisResultList *next ; - tSirTdlsPeerInfo tdlsDisPeerInfo ; -}tLimDisResultList ; -#endif #ifdef FEATURE_WLAN_TDLS /* diff --git a/CORE/MAC/src/pe/lim/limAssocUtils.c b/CORE/MAC/src/pe/lim/limAssocUtils.c index c46418268129..113853347c5a 100644 --- a/CORE/MAC/src/pe/lim/limAssocUtils.c +++ b/CORE/MAC/src/pe/lim/limAssocUtils.c @@ -3707,6 +3707,9 @@ tSirRetStatus limStaSendAddBss( tpAniSirGlobal pMac, tpSirAssocRsp pAssocRsp, pAddBssParams->llaCoexist, pAddBssParams->llbCoexist, pAddBssParams->llgCoexist, pAddBssParams->ht20Coexist); + pAddBssParams->dot11_mode = psessionEntry->dot11mode; + limLog(pMac, LOG2, FL("dot11_mode:%d"), pAddBssParams->dot11_mode); + // Use the advertised capabilities from the received beacon/PR @@ -4326,6 +4329,9 @@ tSirRetStatus limStaSendAddBssPreAssoc( tpAniSirGlobal pMac, tANI_U8 updateEntry MAC_ADDR_ARRAY(pAddBssParams->staContext.staMac), pAddBssParams->staContext.shortPreambleSupported); + pAddBssParams->dot11_mode = psessionEntry->dot11mode; + limLog(pMac, LOG2, FL("dot11_mode:%d"), pAddBssParams->dot11_mode); + if (IS_DOT11_MODE_HT(psessionEntry->dot11mode) && ( pBeaconStruct->HTCaps.present )) { pAddBssParams->staContext.us32MaxAmpduDuration = 0; diff --git a/CORE/MAC/src/pe/lim/limProcessActionFrame.c b/CORE/MAC/src/pe/lim/limProcessActionFrame.c index f83cde3be830..9d482d9cd685 100644 --- a/CORE/MAC/src/pe/lim/limProcessActionFrame.c +++ b/CORE/MAC/src/pe/lim/limProcessActionFrame.c @@ -2552,9 +2552,6 @@ limProcessActionFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession ps #ifdef FEATURE_WLAN_TDLS case SIR_MAC_TDLS_DIS_RSP: { -#ifdef FEATURE_WLAN_TDLS_INTERNAL - limProcessTdlsPublicActionFrame(pMac, (tANI_U32*)pRxPacketInfo, psessionEntry) ; -#else tpSirMacMgmtHdr pHdr; tANI_U32 frameLen; tANI_S8 rssi; @@ -2567,7 +2564,6 @@ limProcessActionFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,tpPESession ps limSendSmeMgmtFrameInd(pMac, pHdr->fc.subType, (tANI_U8*)pHdr, frameLen + sizeof(tSirMacMgmtHdr), 0, WDA_GET_RX_CH( pRxPacketInfo ), psessionEntry, rssi); -#endif } break; #endif diff --git a/CORE/MAC/src/pe/lim/limProcessMessageQueue.c b/CORE/MAC/src/pe/lim/limProcessMessageQueue.c index d26dea8088f1..3eea3723f58a 100644 --- a/CORE/MAC/src/pe/lim/limProcessMessageQueue.c +++ b/CORE/MAC/src/pe/lim/limProcessMessageQueue.c @@ -770,27 +770,6 @@ limHandle80211Frames(tpAniSirGlobal pMac, tpSirMsgQ limMsg, tANI_U8 *pDeferMsg) break; case SIR_MAC_DATA_FRAME: { -#ifdef FEATURE_WLAN_TDLS_INTERNAL - /* - * if we reach here, following cases are possible. - * Possible cases: a) if frame translation is disabled. - * b) Some frame with ADRR2 filter enabled may come - * here. - */ - tANI_U8 *dataOffset = WDA_GET_RX_MPDU_DATA(pRxPacketInfo); - tANI_U8 *rfc1042Hdr = (tANI_U8 *)(dataOffset + RFC1042_HDR_LENGTH) ; - tANI_U16 ethType = GET_BE16(rfc1042Hdr) ; - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("TDLS frame with 80211 Header")) ; - if(ETH_TYPE_89_0d == ethType) - { - tANI_U8 payloadType = (rfc1042Hdr + ETH_TYPE_LEN)[0] ; - if(PAYLOAD_TYPE_TDLS == payloadType) - { - limProcessTdlsFrame(pMac, (tANI_U32*)pRxPacketInfo) ; - } - } -#endif #if defined(FEATURE_WLAN_ESE) && !defined(FEATURE_WLAN_ESE_UPLOAD) /* We accept data frame (IAPP frame) only if Session is * present and ese connection is established on that @@ -1190,9 +1169,6 @@ limProcessMessages(tpAniSirGlobal pMac, tpSirMsgQ limMsg) vos_pkt_t *pVosPkt; VOS_STATUS vosStatus; tSirMsgQ limMsgNew; -#ifdef FEATURE_WLAN_TDLS_INTERNAL - tANI_U32 *pBD = NULL ; -#endif /* The original limMsg which we were deferring have the * bodyPointer point to 'BD' instead of 'Vos pkt'. If we don't make a copy @@ -1231,24 +1207,6 @@ limProcessMessages(tpAniSirGlobal pMac, tpSirMsgQ limMsg) break; } #endif -#ifdef FEATURE_WLAN_TDLS_INTERNAL - /* - * TDLS frames comes as translated frames as well as - * MAC 802.11 data frames.. - */ - limGetBDfromRxPacket(pMac, limMsgNew.bodyptr, &pBD); - if(0 != WDA_GET_RX_FT_DONE(pBD)) - { - /* - * TODO: check for scanning state and set deferMesg flag - * accordingly.. - */ - deferMsg = false ; - - limProcessTdlsFrame(pMac, pBD) ; - } - else -#endif limHandle80211Frames(pMac, &limMsgNew, &deferMsg); if ( deferMsg == true ) @@ -1289,11 +1247,6 @@ limProcessMessages(tpAniSirGlobal pMac, tpSirMsgQ limMsg) case eWNI_SME_TDLS_DEL_STA_REQ: case eWNI_SME_TDLS_LINK_ESTABLISH_REQ: #endif -#ifdef FEATURE_WLAN_TDLS_INTERNAL - case eWNI_SME_TDLS_DISCOVERY_START_REQ: - case eWNI_SME_TDLS_LINK_START_REQ: - case eWNI_SME_TDLS_TEARDOWN_REQ: -#endif case eWNI_SME_RESET_AP_CAPS_CHANGED: // These messages are from HDD limProcessNormalHddMsg(pMac, limMsg, true); //need to response to hdd @@ -1804,73 +1757,6 @@ limProcessMessages(tpAniSirGlobal pMac, tpSirMsgQ limMsg) #endif #endif -#ifdef FEATURE_WLAN_TDLS_INTERNAL - /* - * Here discovery timer expires, now we can go ahead and collect all - * the dicovery responses PE has process till now and send this - * responses to SME.. - */ - case SIR_LIM_TDLS_DISCOVERY_RSP_WAIT: - { - //fetch the sessionEntry based on the sessionId - tpPESession psessionEntry = peFindSessionBySessionId(pMac, - pMac->lim.limTimers.gLimTdlsDisRspWaitTimer.sessionId) ; - if(NULL == psessionEntry) - { - limLog(pMac, LOGP,FL("Session Does not exist for given sessionID %d"), pMac->lim.limTimers.gLimTdlsDisRspWaitTimer.sessionId); - return; - } - - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - ("Discovery Rsp timer expires ")) ; - limSendSmeTdlsDisRsp(pMac, eSIR_SUCCESS, - eWNI_SME_TDLS_DISCOVERY_START_RSP) ; - break ; - } - - /* - * we initiated link setup and did not receive TDLS setup rsp - * from TDLS peer STA, send failure RSP to SME. - */ - case SIR_LIM_TDLS_LINK_SETUP_RSP_TIMEOUT: - { - tANI_U8 *peerMac = (tANI_U8 *)limMsg->bodyval ; - tLimTdlsLinkSetupPeer *setupPeer = NULL ; - - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("TDLS setup rsp timer expires ")) ; - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, - ("TDLS setup rsp timer expires for peer:" - MAC_ADDRESS_STR), MAC_ADDR_ARRAY(peerMac)); - - limTdlsFindLinkPeer(pMac, peerMac, &setupPeer) ; - if(NULL != setupPeer) - { - limTdlsDelLinkPeer( pMac, peerMac) ; - } - - limSendSmeTdlsLinkStartRsp(pMac, eSIR_FAILURE, peerMac, - eWNI_SME_TDLS_LINK_START_RSP) ; - break ; - } - case SIR_LIM_TDLS_LINK_SETUP_CNF_TIMEOUT: - { - tANI_U8 *peerMac = (tANI_U8 *)limMsg->bodyval ; - tLimTdlsLinkSetupPeer *setupPeer = NULL ; - - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("TDLS setup CNF timer expires ")) ; - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, - ("TDLS setup CNF timer expires for peer: " - MAC_ADDRESS_STR), MAC_ADDR_ARRAY(peerMac)); - limTdlsFindLinkPeer(pMac, peerMac, &setupPeer) ; - if(NULL != setupPeer) - { - limTdlsDelLinkPeer( pMac, peerMac) ; - } - break ; - } -#endif /* FEATURE_WLAN_TDLS TIMER */ case WDA_ADD_BSS_RSP: limProcessMlmAddBssRsp( pMac, limMsg ); break; diff --git a/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c b/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c index 8ffb3719585e..d6608fa6e9f5 100644 --- a/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c +++ b/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c @@ -1721,6 +1721,9 @@ limMlmAddBss ( pAddBssParams->extSetStaKeyParamValid = 0; #endif + pAddBssParams->dot11_mode = psessionEntry->dot11mode; + limLog(pMac, LOG2, FL("dot11_mode:%d"), pAddBssParams->dot11_mode); + msgQ.type = WDA_ADD_BSS_REQ; msgQ.reserved = 0; msgQ.bodyptr = pAddBssParams; diff --git a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c index 6c067fd3305c..6f42fb4aad7b 100644 --- a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c +++ b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c @@ -5437,251 +5437,6 @@ void limProcessRegdDefdSmeReqAfterNOAStart(tpAniSirGlobal pMac) } } -#ifdef FEATURE_WLAN_TDLS_INTERNAL -/* - * Process Discovery request recieved from SME and transmit to AP. - */ -static tSirRetStatus limProcessSmeDisStartReq(tpAniSirGlobal pMac, - tANI_U32 *pMsgBuf) -{ - /* get all discovery request parameters */ - tSirTdlsDisReq *disReq = (tSirTdlsDisReq *) pMsgBuf ; - tpPESession psessionEntry; - tANI_U8 sessionId; - - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, - ("Discovery Req Recieved")) ; - - if((psessionEntry = peFindSessionByBssid(pMac, disReq->bssid, &sessionId)) - == NULL) - { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - "PE Session does not exist for given sme sessionId %d", - disReq->sessionId); - goto lim_tdls_dis_start_error; - } - - /* check if we are in proper state to work as TDLS client */ - if (psessionEntry->limSystemRole != eLIM_STA_ROLE) - { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - "dis req received in wrong system Role %d", - psessionEntry->limSystemRole); - goto lim_tdls_dis_start_error; - } - - /* - * if we are still good, go ahead and check if we are in proper state to - * do TDLS discovery procedure. - */ - if ((psessionEntry->limSmeState != eLIM_SME_ASSOCIATED_STATE) && - (psessionEntry->limSmeState != eLIM_SME_LINK_EST_STATE)) - { - - limLog(pMac, LOGE, "dis req received in invalid LIMsme \ - state (%d)", psessionEntry->limSmeState); - goto lim_tdls_dis_start_error; - } - - /* - * if we are still good, go ahead and transmit TDLS discovery request, - * and save Dis Req info for future reference. - */ - - /* save dis request message for matching dialog token */ - vos_mem_copy((tANI_U8 *) &pMac->lim.gLimTdlsDisReq, - (tANI_U8 *) disReq, sizeof(tSirTdlsDisReq)); - - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, - "Transmit Discovery Request Frame") ; - /* format TDLS discovery request frame and transmit it */ - limSendTdlsDisReqFrame(pMac, disReq->peerMac, disReq->dialog, - psessionEntry) ; - - /* prepare for response */ - pMac->lim.gLimTdlsDisStaCount = 0 ; - pMac->lim.gLimTdlsDisResultList = NULL ; - - /* - * start TDLS discovery request timer to wait for discovery responses - * from all TDLS enabled clients in BSS. - */ - - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, - ("Start Discovery request Timeout Timer")) ; - MTRACE(macTrace(pMac, TRACE_CODE_TIMER_ACTIVATE, 0, - eLIM_TDLS_DISCOVERY_RSP_WAIT)); - - /* assign appropriate sessionId to the timer object */ - pMac->lim.limTimers.gLimTdlsDisRspWaitTimer.sessionId = - psessionEntry->peSessionId; - - if (tx_timer_activate(&pMac->lim.limTimers.gLimTdlsDisRspWaitTimer) - != TX_SUCCESS) - { - limLog(pMac, LOGP, FL("TDLS discovery response timer \ - activation failed!")); - goto lim_tdls_dis_start_error; - } - /* - * when timer expired, eWNI_SME_TDLS_DISCOVERY_START_RSP is sent - * back to SME - */ - return (eSIR_SUCCESS) ; -lim_tdls_dis_start_error: - /* in error case, PE has to sent the response SME immediately with error code */ - limSendSmeTdlsDisRsp(pMac, eSIR_FAILURE, - eWNI_SME_TDLS_DISCOVERY_START_RSP); - return eSIR_FAILURE; -} -/* - * Process link start request recieved from SME and transmit to AP. - */ -eHalStatus limProcessSmeLinkStartReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) -{ - /* get all discovery request parameters */ - tSirTdlsSetupReq *setupReq = (tSirTdlsSetupReq *) pMsgBuf ; - tLimTdlsLinkSetupInfo *linkSetupInfo; - tpPESession psessionEntry; - tANI_U8 sessionId; - eHalStatus status; - - if((psessionEntry = peFindSessionByBssid(pMac, - setupReq->bssid, &sessionId)) == NULL) - { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - "PE Session does not exist for given sme sessionId %d", - setupReq->sessionId); - goto lim_tdls_link_start_error; - } - - /* check if we are in proper state to work as TDLS client */ - if (psessionEntry->limSystemRole != eLIM_STA_ROLE) - { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - "TDLS link setup req received in wrong system Role %d", - psessionEntry->limSystemRole); - goto lim_tdls_link_start_error; - } - - /* - * if we are still good, go ahead and check if we are in proper state to - * do TDLS setup procedure. - */ - if ((psessionEntry->limSmeState != eLIM_SME_ASSOCIATED_STATE) && - (psessionEntry->limSmeState != eLIM_SME_LINK_EST_STATE)) - { - limLog(pMac, LOGE, "Setup request in invalid LIMsme \ - state (%d)", pMac->lim.gLimSmeState); - goto lim_tdls_link_start_error; - } - - /* - * Now, go ahead and transmit TDLS discovery request, and save setup Req - * info for future reference. - */ - /* create node for Link setup */ - linkSetupInfo = &pMac->lim.gLimTdlsLinkSetupInfo ; - - status = limTdlsPrepareSetupReqFrame(pMac, linkSetupInfo, setupReq->dialog, - setupReq->peerMac, psessionEntry) ; - if(eHAL_STATUS_SUCCESS == status) - /* in case of success, eWNI_SME_TDLS_LINK_START_RSP is sent back to SME later when - TDLS setup cnf TX complete is successful. */ - return eSIR_SUCCESS; - -lim_tdls_link_start_error: - /* in case of error, return immediately to SME */ - limSendSmeTdlsLinkStartRsp(pMac, eSIR_FAILURE, setupReq->peerMac, - eWNI_SME_TDLS_LINK_START_RSP); - return eSIR_FAILURE ; -} - -/* - * Process link teardown request recieved from SME and transmit to AP. - */ -eHalStatus limProcessSmeTeardownReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) -{ - /* get all discovery request parameters */ - tSirTdlsTeardownReq *teardownReq = (tSirTdlsTeardownReq *) pMsgBuf ; - tLimTdlsLinkSetupPeer *setupPeer; - tpPESession psessionEntry; - tANI_U8 sessionId; - - if((psessionEntry = peFindSessionByBssid(pMac, teardownReq->bssid, &sessionId)) == NULL) - { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - "PE Session does not exist for given sme sessionId %d", teardownReq->sessionId); - goto lim_tdls_teardown_req_error; - } - - /* check if we are in proper state to work as TDLS client */ - if (psessionEntry->limSystemRole != eLIM_STA_ROLE) - { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - "TDLS teardown req received in wrong system Role %d", psessionEntry->limSystemRole); - goto lim_tdls_teardown_req_error; - } - - /* - * if we are still good, go ahead and check if we are in proper state to - * do TDLS setup procedure. - */ - if ((psessionEntry->limSmeState != eLIM_SME_ASSOCIATED_STATE) && - (psessionEntry->limSmeState != eLIM_SME_LINK_EST_STATE)) - { - limLog(pMac, LOGE, "TDLS teardwon req received in invalid LIMsme \ - state (%d)", psessionEntry->limSmeState); - goto lim_tdls_teardown_req_error; - } - - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, - "Teardown for peer = " MAC_ADDRESS_STR, MAC_ADDR_ARRAY(teardownReq->peerMac)); - /* - * Now, go ahead and transmit TDLS teardown request, and save teardown info - * info for future reference. - */ - /* Verify if this link is setup */ - setupPeer = NULL ; - limTdlsFindLinkPeer(pMac, teardownReq->peerMac, &setupPeer); - if(NULL == setupPeer) - { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, - ("invalid Peer on teardown ")) ; - goto lim_tdls_teardown_req_error; - } - - - (setupPeer)->tdls_prev_link_state = (setupPeer)->tdls_link_state ; - (setupPeer)->tdls_link_state = TDLS_LINK_TEARDOWN_START_STATE ; - /* TDLS_sessionize: check sessionId in case */ - if((setupPeer)->tdls_sessionId != psessionEntry->peSessionId) - { - limLog(pMac, LOGE, "TDLS teardown req; stored sessionId (%d) not matched from peSessionId (%d)", \ - (setupPeer)->tdls_sessionId, psessionEntry->limSmeState); - (setupPeer)->tdls_sessionId = psessionEntry->peSessionId; - } - - /* format TDLS teardown request frame and transmit it */ - if(eSIR_SUCCESS != limSendTdlsTeardownFrame(pMac, teardownReq->peerMac, - eSIR_MAC_TDLS_TEARDOWN_UNSPEC_REASON, psessionEntry, NULL, 0 )) - { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, - ("couldn't send teardown frame ")) ; - goto lim_tdls_teardown_req_error; - } - /* in case of success, eWNI_SME_TDLS_TEARDOWN_RSP is sent back to SME later when - TDLS teardown TX complete is successful. --> see limTdlsTeardownTxComplete() */ - return eSIR_SUCCESS; -lim_tdls_teardown_req_error: - /* in case of error, return immediately to SME */ - limSendSmeTdlsTeardownRsp(pMac, eSIR_FAILURE, teardownReq->peerMac, - eWNI_SME_TDLS_TEARDOWN_RSP); - return eSIR_FAILURE; -} - - -#endif static void __limProcessSmeResetApCapsChange(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf) @@ -6032,17 +5787,6 @@ limProcessSmeReqMessages(tpAniSirGlobal pMac, tpSirMsgQ pMsg) limProcesSmeTdlsLinkEstablishReq(pMac, pMsgBuf); break; #endif -#ifdef FEATURE_WLAN_TDLS_INTERNAL - case eWNI_SME_TDLS_DISCOVERY_START_REQ: - limProcessSmeDisStartReq(pMac, pMsgBuf); - break ; - case eWNI_SME_TDLS_LINK_START_REQ: - limProcessSmeLinkStartReq(pMac, pMsgBuf); - break ; - case eWNI_SME_TDLS_TEARDOWN_REQ: - limProcessSmeTeardownReq(pMac, pMsgBuf); - break ; -#endif case eWNI_SME_RESET_AP_CAPS_CHANGED: __limProcessSmeResetApCapsChange(pMac, pMsgBuf); break; @@ -6400,8 +6144,7 @@ limProcessModifyAddIEs(tpAniSirGlobal pMac, tANI_U32 *pMsg) { tpSirModifyIEsInd pModifyAddIEs = (tpSirModifyIEsInd)pMsg; tANI_U8 sessionId; - tANI_U16 bufferLen = 0; - tANI_U8 *pBuffer = NULL; + tANI_BOOLEAN ret = FALSE; /* Incoming message has smeSession, use BSSID to find PE session*/ tpPESession psessionEntry = peFindSessionByBssid(pMac, @@ -6420,41 +6163,27 @@ limProcessModifyAddIEs(tpAniSirGlobal pMac, tANI_U32 *pMsg) case eUPDATE_IE_PROBE_RESP: { /* Probe resp */ - if ((bufferLen = psessionEntry->addIeParams.probeRespDataLen) - == 0) - { - limLog(pMac, LOGE, FL("probe resp add ie not present %d"), - psessionEntry->addIeParams.probeRespDataLen); - break; - } - /* vendor IE and oui 0x00, 0x16, 0x32 */ - /* search through the buffer and modify the IE */ - pBuffer = psessionEntry->addIeParams.probeRespData_buff; break; } case eUPDATE_IE_ASSOC_RESP: /* assoc resp IE */ if (psessionEntry->addIeParams.assocRespDataLen == 0) { - limLog(pMac, LOGE, FL("assoc resp add ie not present %d"), - psessionEntry->addIeParams.assocRespDataLen); + VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, + FL("assoc resp add ie not present %d"), + psessionEntry->addIeParams.assocRespDataLen); } /* search through the buffer and modify the IE */ break; case eUPDATE_IE_PROBE_BCN: + { /*probe beacon IE*/ - if ((bufferLen = psessionEntry->addIeParams.probeRespBCNDataLen) - == 0) + if (ret == TRUE && pModifyAddIEs->modifyIE.notify) { - limLog(pMac, LOGE, - FL("probe resp Bcn add ie not present %d"), - psessionEntry->addIeParams.probeRespBCNDataLen); - break; + limHandleParamUpdate(pMac, pModifyAddIEs->updateType); } - /* vendor IE and oui 0x00, 0x16, 0x32 */ - /* search through the buffer and modify the IE */ - pBuffer = psessionEntry->addIeParams.probeRespBCNData_buff; break; + } default: limLog(pMac, LOGE, FL("unhandled buffer type %d."), pModifyAddIEs->updateType); @@ -6471,7 +6200,6 @@ limProcessModifyAddIEs(tpAniSirGlobal pMac, tANI_U32 *pMsg) pModifyAddIEs->modifyIE.ieIDLen, pModifyAddIEs->updateType); } - } else { diff --git a/CORE/MAC/src/pe/lim/limProcessTdls.c b/CORE/MAC/src/pe/lim/limProcessTdls.c index 379f749c752d..f0ae2927af5b 100644 --- a/CORE/MAC/src/pe/lim/limProcessTdls.c +++ b/CORE/MAC/src/pe/lim/limProcessTdls.c @@ -98,25 +98,6 @@ If there is other IOT issue because of this bandage, define NO_PAD... #define TDLS_DEBUG_LOG_LEVEL VOS_TRACE_LEVEL_INFO #endif -#ifdef FEATURE_WLAN_TDLS_INTERNAL -/* forword declarations */ -static tSirRetStatus limTdlsDisAddSta(tpAniSirGlobal pMac, tSirMacAddr peerMac, - tSirTdlsPeerInfo *peerInfo, tpPESession psessionEntry) ; -static eHalStatus limSendSmeTdlsLinkSetupInd(tpAniSirGlobal pMac, - tSirMacAddr peerMac, tANI_U8 status); -static eHalStatus limSendSmeTdlsDelPeerInd(tpAniSirGlobal pMac, - tANI_U8 sessionId, tDphHashNode *pStaDs, tANI_U8 status) ; -static tSirTdlsPeerInfo *limTdlsFindDisPeerByState(tpAniSirGlobal pMac, - tANI_U8 state); -static tANI_U8 limTdlsFindSetupPeerByState(tpAniSirGlobal pMac, tANI_U8 state, - tLimTdlsLinkSetupPeer **setupPeer) ; -static tSirRetStatus limTdlsLinkEstablish(tpAniSirGlobal pMac, tSirMacAddr peer_mac); - -static tSirRetStatus limTdlsLinkTeardown(tpAniSirGlobal pMac, tSirMacAddr peer_mac); -static tpDphHashNode limTdlsDelSta(tpAniSirGlobal pMac, tSirMacAddr peerMac, - tpPESession psessionEntry) ; - -#endif static tSirRetStatus limTdlsSetupAddSta(tpAniSirGlobal pMac, tSirTdlsAddStaReq *pAddStaReq, tpPESession psessionEntry) ; @@ -337,42 +318,10 @@ const tANI_U8* limTraceTdlsActionString( tANI_U8 tdlsActionCode ) */ void limInitTdlsData(tpAniSirGlobal pMac, tpPESession pSessionEntry) { -#ifdef FEATURE_WLAN_TDLS_INTERNAL - pMac->lim.gLimTdlsDisResultList = NULL ; - pMac->lim.gLimTdlsDisStaCount = 0 ; - vos_mem_set(&pMac->lim.gLimTdlsDisReq, sizeof(tSirTdlsDisReq), 0); - vos_mem_set(&pMac->lim.gLimTdlsLinkSetupInfo, sizeof(tLimTdlsLinkSetupInfo), 0); - pMac->lim.gAddStaDisRspWait = 0 ; - -#ifdef FEATURE_WLAN_TDLS_NEGATIVE - /* when reassociated, negative behavior will not be kept */ - /* you have to explicitly enable negative behavior per (re)association */ - pMac->lim.gLimTdlsNegativeBehavior = 0; -#endif -#endif limInitPeerIdxpool(pMac, pSessionEntry) ; return ; } -#ifdef FEATURE_WLAN_TDLS_NEGATIVE -void limTdlsSetNegativeBehavior(tpAniSirGlobal pMac, tANI_U8 value, tANI_BOOLEAN on) -{ - if(on) { - if(value == 255) - pMac->lim.gLimTdlsNegativeBehavior = 0XFFFFFFFF; - else - pMac->lim.gLimTdlsNegativeBehavior |= (1 << (value-1)); - } - else { - if(value == 255) - pMac->lim.gLimTdlsNegativeBehavior = 0; - else - pMac->lim.gLimTdlsNegativeBehavior &= ~(1 << (value-1)); - } - LIM_LOG_TDLS(VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,("%d %d -> gLimTdlsNegativeBehavior= 0x%lx"), - value, on, pMac->lim.gLimTdlsNegativeBehavior)); -} -#endif /* * prepare TDLS frame header, it includes * | | | | @@ -602,16 +551,6 @@ tSirRetStatus limSendTdlsDisReqFrame(tpAniSirGlobal pMac, tSirMacAddr peer_mac, header_offset = limPrepareTdlsFrameHeader(pMac, pFrame, LINK_IDEN_ADDR_OFFSET(tdlsDisReq), TDLS_LINK_AP, TDLS_INITIATOR, TID_AC_VI, psessionEntry) ; -#ifdef FEATURE_WLAN_TDLS_NEGATIVE - if(pMac->lim.gLimTdlsNegativeBehavior & LIM_TDLS_NEGATIVE_WRONG_BSSID_IN_DSCV_REQ) - { - tdlsDisReq.LinkIdentifier.bssid[4] = 0xde; - tdlsDisReq.LinkIdentifier.bssid[5] = 0xad; - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("TDLS negative running: wrong BSSID " MAC_ADDRESS_STR " in TDLS Discovery Req"), - MAC_ADDR_ARRAY(tdlsDisReq.LinkIdentifier.bssid)); - } -#endif status = dot11fPackTDLSDisReq( pMac, &tdlsDisReq, pFrame + header_offset, nPayload, &nPayload ); @@ -674,236 +613,8 @@ tSirRetStatus limSendTdlsDisReqFrame(tpAniSirGlobal pMac, tSirMacAddr peer_mac, } -#ifdef FEATURE_WLAN_TDLS_INTERNAL -/* - * Once Discovery response is sent successfully (or failure) on air, now send - * response to PE and send del STA to HAL. - */ -eHalStatus limTdlsDisRspTxComplete(tpAniSirGlobal pMac, - tANI_U32 txCompleteSuccess) -{ - eHalStatus status = eHAL_STATUS_SUCCESS ; - tpDphHashNode pStaDs = NULL ; - tSirTdlsPeerInfo *peerInfo = 0 ; - - /* find peer by looking into the list by expected state */ - peerInfo = limTdlsFindDisPeerByState(pMac, TDLS_DIS_RSP_SENT_WAIT_STATE) ; - - if(NULL == peerInfo) - { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("DisRspTxComplete: No TDLS state machine waits for this event")); - VOS_ASSERT(0) ; - return eHAL_STATUS_FAILURE; - } - - peerInfo->tdlsPeerState = TDLS_DIS_RSP_SENT_DONE_STATE ; - - if(peerInfo->delStaNeeded) - { - tpPESession psessionEntry; - - peerInfo->delStaNeeded = false ; - psessionEntry = peFindSessionBySessionId (pMac, peerInfo->sessionId); - - if(NULL == psessionEntry) - { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("DisRspTxComplete: sessionID %d is not found"), peerInfo->sessionId); - return eHAL_STATUS_FAILURE; - } - /* send del STA to remove context for this TDLS STA */ - pStaDs = limTdlsDelSta(pMac, peerInfo->peerMac, psessionEntry) ; - - /* now send indication to SME-->HDD->TL to remove STA from TL */ - if(pStaDs) - { - limSendSmeTdlsDelPeerInd(pMac, psessionEntry->smeSessionId, - pStaDs, eSIR_SUCCESS) ; - } - else - { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("DisRspTxComplete: staDs not found for " MAC_ADDRESS_STR), - MAC_ADDR_ARRAY((peerInfo)->peerMac)); - VOS_ASSERT(0) ; - return eHAL_STATUS_FAILURE; - } - } - if(!txCompleteSuccess) - { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("TX complete failure for Dis RSP")); - limSendSmeTdlsDisRsp(pMac, eSIR_FAILURE, - eWNI_SME_TDLS_DISCOVERY_START_IND) ; - status = eHAL_STATUS_FAILURE; - } - else - { - limSendSmeTdlsDisRsp(pMac, eSIR_SUCCESS, - eWNI_SME_TDLS_DISCOVERY_START_IND) ; - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, - ("TX complete Success for Dis RSP")); - status = eHAL_STATUS_SUCCESS ; - } - return status ; -} -#endif - -#ifdef FEATURE_WLAN_TDLS_INTERNAL -/* - * Once setup CNF is sent successfully (or failure) on air, now send - * response to PE and send del STA to HAL. - */ -eHalStatus limTdlsSetupCnfTxComplete(tpAniSirGlobal pMac, - tANI_U32 txCompleteSuccess) -{ - eHalStatus status = eHAL_STATUS_SUCCESS ; - tLimTdlsLinkSetupPeer *peerInfo = 0 ; - /* find peer by looking into the list by expected state */ - limTdlsFindSetupPeerByState(pMac, - TDLS_LINK_SETUP_RSP_WAIT_STATE, &peerInfo) ; - - if(NULL == peerInfo) - { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("limTdlsSetupCnfTxComplete: No TDLS state machine waits for this event")); - VOS_ASSERT(0) ; - return eHAL_STATUS_FAILURE; - } - - (peerInfo)->tdls_prev_link_state = (peerInfo)->tdls_link_state ; - (peerInfo)->tdls_link_state = TDLS_LINK_SETUP_DONE_STATE ; - - if(!txCompleteSuccess) - { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("TX complete Failure for setup CNF")); - limSendSmeTdlsLinkStartRsp(pMac, eSIR_FAILURE, (peerInfo)->peerMac, - eWNI_SME_TDLS_LINK_START_RSP) ; - status = eHAL_STATUS_FAILURE; - } - else - { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, - ("RSP-->SME peer MAC = " MAC_ADDRESS_STR), - MAC_ADDR_ARRAY((peerInfo)->peerMac)); - - limSendSmeTdlsLinkStartRsp(pMac, eSIR_SUCCESS, (peerInfo)->peerMac, - eWNI_SME_TDLS_LINK_START_RSP) ; - - /* tdls_hklee: prepare PTI template and send it to HAL */ - limTdlsLinkEstablish(pMac, (peerInfo)->peerMac); - - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, - ("TX complete Success for setup CNF")); - status = eHAL_STATUS_SUCCESS ; - } - return status ; -} -#endif - -#ifdef FEATURE_WLAN_TDLS_INTERNAL -/* - * Tx Complete for Teardown frame - */ -eHalStatus limTdlsTeardownTxComplete(tpAniSirGlobal pMac, - tANI_U32 txCompleteSuccess) -{ - eHalStatus status = eHAL_STATUS_SUCCESS ; - tpDphHashNode pStaDs = NULL ; - tLimTdlsLinkSetupPeer *peerInfo = 0 ; - tpPESession psessionEntry = NULL ; - - /* find peer by looking into the list by expected state */ - limTdlsFindSetupPeerByState(pMac, - TDLS_LINK_TEARDOWN_START_STATE, &peerInfo) ; - - if(NULL == peerInfo) - { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("limTdlsTeardownTxComplete: No TDLS state machine waits for this event")); - VOS_ASSERT(0) ; - return eHAL_STATUS_FAILURE; - } - - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, - ("teardown peer Mac = " MAC_ADDRESS_STR), - MAC_ADDR_ARRAY((peerInfo)->peerMac)); - - psessionEntry = peFindSessionBySessionId(pMac, (peerInfo)->tdls_sessionId); - - if(NULL == psessionEntry) - { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("limTdlsTeardownTxComplete: sessionID %d is not found"), (peerInfo)->tdls_sessionId); - VOS_ASSERT(0) ; - return eHAL_STATUS_FAILURE; - } - - if(!txCompleteSuccess) - { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("TX complete failure for Teardown ")) ; - - /* - * we should be sending Teradown to AP with status code - * eSIR_MAC_TDLS_TEARDOWN_PEER_UNREACHABLE, we are not worried if - * that is delivered or not, any way we removing this peer STA from our - * list - */ - if(NULL != psessionEntry) - { - limSendTdlsTeardownFrame(pMac, (peerInfo)->peerMac, - eSIR_MAC_TDLS_TEARDOWN_PEER_UNREACHABLE, psessionEntry, NULL, 0) ; - } - } - - if(TDLS_LINK_SETUP_WAIT_STATE != (peerInfo)->tdls_prev_link_state) - { - (peerInfo)->tdls_prev_link_state = (peerInfo)->tdls_link_state ; - (peerInfo)->tdls_link_state = TDLS_LINK_TEARDOWN_DONE_STATE ; - /* send del STA to remove context for this TDLS STA */ - if(NULL != psessionEntry) - { - /* tdls_hklee: send message to HAL before it is deleted */ - limTdlsLinkTeardown(pMac, (peerInfo)->peerMac) ; - - pStaDs = limTdlsDelSta(pMac, (peerInfo)->peerMac, psessionEntry) ; - } - - /* now send indication to SME-->HDD->TL to remove STA from TL */ - if(!pStaDs) - { - VOS_ASSERT(0) ; - return eSIR_FAILURE ; - } - limSendSmeTdlsDelPeerInd(pMac, psessionEntry->smeSessionId, - pStaDs, eSIR_SUCCESS) ; - - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, - ("TX complete SUCCESS for Teardown")) ; - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, - ("Prev State = %d"), (peerInfo)->tdls_prev_link_state) ; - limSendSmeTdlsTeardownRsp(pMac, eSIR_SUCCESS, (peerInfo)->peerMac, - eWNI_SME_TDLS_TEARDOWN_RSP) ; - /* Delete Peer for Link Peer List */ - limTdlsDelLinkPeer(pMac, (peerInfo)->peerMac) ; - } - else - { - (peerInfo)->tdls_prev_link_state = (peerInfo)->tdls_link_state ; - (peerInfo)->tdls_link_state = TDLS_LINK_TEARDOWN_DONE_STATE ; - limSendSmeTdlsTeardownRsp(pMac, eSIR_SUCCESS, (peerInfo)->peerMac, - eWNI_SME_TDLS_TEARDOWN_IND) ; - } - - status = eHAL_STATUS_SUCCESS ; - return status ; -} -#endif /* * This static function is consistent with any kind of TDLS management @@ -1099,16 +810,6 @@ static tSirRetStatus limSendTdlsDisRspFrame(tpAniSirGlobal pMac, sirCopyMacAddr(pMacHdr->bssId,psessionEntry->bssId); } -#ifdef FEATURE_WLAN_TDLS_NEGATIVE - if(pMac->lim.gLimTdlsNegativeBehavior & LIM_TDLS_NEGATIVE_WRONG_BSSID_IN_DSCV_RSP) - { - tdlsDisRsp.LinkIdentifier.bssid[4] = 0xde; - tdlsDisRsp.LinkIdentifier.bssid[5] = 0xad; - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("TDLS negative running: wrong BSSID " MAC_ADDRESS_STR " in TDLS Discovery Rsp"), - MAC_ADDR_ARRAY(tdlsDisRsp.LinkIdentifier.bssid)); - } -#endif status = dot11fPackTDLSDisRsp( pMac, &tdlsDisRsp, pFrame + sizeof( tSirMacMgmtHdr ), nPayload, &nPayload ); @@ -1369,16 +1070,6 @@ tSirRetStatus limSendTdlsLinkSetupReqFrame(tpAniSirGlobal pMac, header_offset = limPrepareTdlsFrameHeader(pMac, pFrame, LINK_IDEN_ADDR_OFFSET(tdlsSetupReq), TDLS_LINK_AP, TDLS_INITIATOR, TID_AC_BK, psessionEntry) ; -#ifdef FEATURE_WLAN_TDLS_NEGATIVE - if(pMac->lim.gLimTdlsNegativeBehavior & LIM_TDLS_NEGATIVE_WRONG_BSSID_IN_SETUP_REQ) - { - tdlsSetupReq.LinkIdentifier.bssid[4] = 0xde; - tdlsSetupReq.LinkIdentifier.bssid[5] = 0xad; - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("TDLS negative running: wrong BSSID " MAC_ADDRESS_STR " in TDLS Setup Req"), - MAC_ADDR_ARRAY(tdlsSetupReq.LinkIdentifier.bssid)); - } -#endif limLog( pMac, LOGW, FL("%s: SupportedChnlWidth %x rxMCSMap %x rxMCSMap %x txSupDataRate %x"), __func__, tdlsSetupReq.VHTCaps.supportedChannelWidthSet, tdlsSetupReq.VHTCaps.rxMCSMap, tdlsSetupReq.VHTCaps.txMCSMap, tdlsSetupReq.VHTCaps.txSupDataRate ); @@ -1807,16 +1498,6 @@ static tSirRetStatus limSendTdlsSetupRspFrame(tpAniSirGlobal pMac, TDLS_LINK_AP, TDLS_RESPONDER, TID_AC_BK, psessionEntry) ; -#ifdef FEATURE_WLAN_TDLS_NEGATIVE - if(pMac->lim.gLimTdlsNegativeBehavior & LIM_TDLS_NEGATIVE_WRONG_BSSID_IN_SETUP_RSP) - { - tdlsSetupRsp.LinkIdentifier.bssid[4] = 0xde; - tdlsSetupRsp.LinkIdentifier.bssid[5] = 0xad; - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("TDLS negative running: wrong BSSID " MAC_ADDRESS_STR " in TDLS Setup Rsp"), - MAC_ADDR_ARRAY(tdlsSetupRsp.LinkIdentifier.bssid)); - } -#endif limLog( pMac, LOGW, FL("%s: SupportedChnlWidth %x rxMCSMap %x rxMCSMap %x txSupDataRate %x"), __func__, tdlsSetupRsp.VHTCaps.supportedChannelWidthSet, tdlsSetupRsp.VHTCaps.rxMCSMap, tdlsSetupRsp.VHTCaps.txMCSMap, tdlsSetupRsp.VHTCaps.txSupDataRate ); @@ -2016,13 +1697,6 @@ tSirRetStatus limSendTdlsLinkSetupCnfFrame(tpAniSirGlobal pMac, LINK_IDEN_ADDR_OFFSET(tdlsSetupCnf), TDLS_LINK_AP, TDLS_INITIATOR, TID_AC_VI, psessionEntry) ; -#ifdef FEATURE_WLAN_TDLS_NEGATIVE - if(pMac->lim.gLimTdlsNegativeBehavior & LIM_TDLS_NEGATIVE_STATUS_37_IN_SETUP_CNF) { - tdlsSetupCnf.StatusCode.statusCode = 37; - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("TDLS negative running: StatusCode = 37 in TDLS Setup Cnf")); - } -#endif status = dot11fPackTDLSSetupCnf( pMac, &tdlsSetupCnf, pFrame + header_offset, nPayload, &nPayload ); @@ -2106,178 +1780,6 @@ tSirRetStatus limSendTdlsLinkSetupCnfFrame(tpAniSirGlobal pMac, return eSIR_SUCCESS; } -#ifdef FEATURE_WLAN_TDLS_INTERNAL -/* - * Convert HT caps to lim based HT caps - */ -static void limTdlsCovertHTCaps(tpAniSirGlobal pMac, - tSirTdlsPeerInfo *peerInfo, tDot11fIEHTCaps *HTCaps) -{ - - /* HT Capability Info */ - peerInfo->tdlsPeerHtCaps.advCodingCap = HTCaps->advCodingCap ; - peerInfo->tdlsPeerHtCaps.supportedChannelWidthSet = - HTCaps->supportedChannelWidthSet ; - peerInfo->tdlsPeerHtCaps.mimoPowerSave = HTCaps->mimoPowerSave ; - peerInfo->tdlsPeerHtCaps.greenField = HTCaps->greenField ; - peerInfo->tdlsPeerHtCaps.shortGI20MHz = HTCaps->shortGI20MHz ; - peerInfo->tdlsPeerHtCaps.shortGI40MHz = HTCaps->shortGI40MHz ; - peerInfo->tdlsPeerHtCaps.txSTBC = HTCaps->txSTBC ; - peerInfo->tdlsPeerHtCaps.rxSTBC = HTCaps->rxSTBC ; - peerInfo->tdlsPeerHtCaps.delayedBA = HTCaps->delayedBA; - peerInfo->tdlsPeerHtCaps.maximalAMSDUsize = HTCaps->maximalAMSDUsize ; - peerInfo->tdlsPeerHtCaps.dsssCckMode40MHz = HTCaps->dsssCckMode40MHz ; - peerInfo->tdlsPeerHtCaps.psmp = HTCaps->stbcControlFrame ; - peerInfo->tdlsPeerHtCaps.stbcControlFrame = HTCaps->stbcControlFrame ; - peerInfo->tdlsPeerHtCaps.lsigTXOPProtection = - HTCaps->lsigTXOPProtection ; - - /* HT Capa parameters */ - peerInfo->tdlsPeerHtParams.maxRxAMPDUFactor = HTCaps->maxRxAMPDUFactor ; - peerInfo->tdlsPeerHtParams.mpduDensity = HTCaps->mpduDensity ; - peerInfo->tdlsPeerHtParams.reserved = HTCaps->reserved1 ; - - /* Extended HT caps */ - peerInfo->tdlsPeerHtExtCaps.pco = HTCaps->pco ; - peerInfo->tdlsPeerHtExtCaps.transitionTime = HTCaps->transitionTime ; - peerInfo->tdlsPeerHtExtCaps.mcsFeedback = HTCaps->mcsFeedback ; - vos_mem_copy( peerInfo->supportedMCSSet, - HTCaps->supportedMCSSet, SIZE_OF_SUPPORTED_MCS_SET) ; - - return ; -} - -/* - * update capability info.. - */ -void tdlsUpdateCapInfo(tSirMacCapabilityInfo *capabilityInfo, - tDot11fFfCapabilities *Capabilities) -{ - - capabilityInfo->ess = Capabilities->ess; - capabilityInfo->ibss = Capabilities->ibss; - capabilityInfo->cfPollable = Capabilities->cfPollable; - capabilityInfo->cfPollReq = Capabilities->cfPollReq; - capabilityInfo->privacy = Capabilities->privacy; - capabilityInfo->shortPreamble = Capabilities->shortPreamble; - capabilityInfo->pbcc = Capabilities->pbcc; - capabilityInfo->channelAgility = Capabilities->channelAgility; - capabilityInfo->spectrumMgt = Capabilities->spectrumMgt; - capabilityInfo->qos = Capabilities->qos; - capabilityInfo->shortSlotTime = Capabilities->shortSlotTime; - capabilityInfo->apsd = Capabilities->apsd; - capabilityInfo->rrm = Capabilities->rrm; - capabilityInfo->dsssOfdm = Capabilities->dsssOfdm; - capabilityInfo->immediateBA = Capabilities->immediateBA; - - return ; -} - -/* - * update Peer info from the link request frame recieved from Peer.. - * in list of STA participating in TDLS link setup - */ -void limTdlsUpdateLinkReqPeerInfo(tpAniSirGlobal pMac, - tLimTdlsLinkSetupPeer *setupPeer, - tDot11fTDLSSetupReq *setupReq) -{ - - /* Populate peer info of tdls discovery result */ - - tdlsUpdateCapInfo(&setupPeer->capabilityInfo, &setupReq->Capabilities) ; - - if(setupReq->SuppRates.present) - { - ConvertSuppRates( pMac, &setupPeer->supportedRates, - &setupReq->SuppRates ); - } - - /* update QOS info, needed for Peer U-APSD session */ - if(setupReq->QOSCapsStation.present) - { - ConvertQOSCapsStation(pMac->hHdd, &setupPeer->qosCaps, - &setupReq->QOSCapsStation) ; - LIM_LOG_TDLS(VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,("setupReq->SPLen=%d (be %d %d %d %d vo) more %d qack %d."), - setupReq->QOSCapsStation.max_sp_length, setupReq->QOSCapsStation.acbe_uapsd, - setupReq->QOSCapsStation.acbk_uapsd, setupReq->QOSCapsStation.acvi_uapsd, - setupReq->QOSCapsStation.acvo_uapsd, setupReq->QOSCapsStation.more_data_ack, - setupReq->QOSCapsStation.qack)); - } - - if (setupReq->ExtSuppRates.present) - { - setupPeer->ExtRatesPresent = 1; - ConvertExtSuppRates( pMac, &setupPeer->extendedRates, - &setupReq->ExtSuppRates ); - } - /* update HT caps */ - if (setupReq->HTCaps.present) - { - vos_mem_copy( &setupPeer->tdlsPeerHTCaps, - &setupReq->HTCaps, sizeof(tDot11fIEHTCaps)) ; - } - /* Update EXT caps */ - if (setupReq->ExtCap.present) - { - vos_mem_copy( &setupPeer->tdlsPeerExtCaps, - &setupReq->ExtCap, sizeof(tDot11fIEExtCap)) ; - } - - return ; -} - -/* - * update peer Info recieved with TDLS setup RSP - */ -void limTdlsUpdateLinkRspPeerInfo(tpAniSirGlobal pMac, - tLimTdlsLinkSetupPeer *setupPeer, - tDot11fTDLSSetupRsp *setupRsp) -{ - - /* Populate peer info of tdls discovery result */ - tdlsUpdateCapInfo(&setupPeer->capabilityInfo, &setupRsp->Capabilities) ; - - if(setupRsp->SuppRates.present) - { - tDot11fIESuppRates *suppRates = &setupRsp->SuppRates ; - ConvertSuppRates( pMac, &setupPeer->supportedRates, suppRates); - } - - /* update QOS info, needed for Peer U-APSD session */ - if(setupRsp->QOSCapsStation.present) - { - ConvertQOSCapsStation(pMac->hHdd, &setupPeer->qosCaps, - &setupRsp->QOSCapsStation) ; - LIM_LOG_TDLS(VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, ("setupRsp->SPLen=%d (be %d %d %d %d vo) more %d qack %d."), - setupRsp->QOSCapsStation.max_sp_length, setupRsp->QOSCapsStation.acbe_uapsd, - setupRsp->QOSCapsStation.acbk_uapsd, setupRsp->QOSCapsStation.acvi_uapsd, - setupRsp->QOSCapsStation.acvo_uapsd, setupRsp->QOSCapsStation.more_data_ack, - setupRsp->QOSCapsStation.qack)); - } - - if(setupRsp->ExtSuppRates.present) - { - setupPeer->ExtRatesPresent = 1; - ConvertExtSuppRates( pMac, &setupPeer->extendedRates, - &setupRsp->ExtSuppRates ); - } - /* update HT caps */ - if (setupRsp->HTCaps.present) - { - vos_mem_copy(&setupPeer->tdlsPeerHTCaps, - &setupRsp->HTCaps, sizeof(tDot11fIEHTCaps)) ; - } - - /* update EXT caps */ - if (setupRsp->ExtCap.present) - { - vos_mem_copy( &setupPeer->tdlsPeerExtCaps, - &setupRsp->ExtCap, sizeof(tDot11fIEExtCap)) ; - } - - return ; -} -#endif /* This Function is similar to PopulateDot11fHTCaps, except that the HT Capabilities * are considered from the AddStaReq rather from the cfg.dat as in PopulateDot11fHTCaps @@ -2767,1311 +2269,6 @@ static void limTdlsUpdateHashNodeInfo(tpAniSirGlobal pMac, tDphHashNode *pStaDs, return ; } -#ifdef FEATURE_WLAN_TDLS_INTERNAL -/* - * find Peer in setup link list. - */ - -tANI_U8 limTdlsFindLinkPeer(tpAniSirGlobal pMac, tSirMacAddr peerMac, - tLimTdlsLinkSetupPeer **setupPeer) -{ - tLimTdlsLinkSetupInfo *setupInfo = &pMac->lim.gLimTdlsLinkSetupInfo ; - tLimTdlsLinkSetupPeer *linkSetupList = setupInfo->tdlsLinkSetupList ; - tANI_U8 checkNode = TDLS_NODE_NOT_FOUND ; - - while (linkSetupList != NULL) - { - if (vos_mem_compare((tANI_U8 *) peerMac, - (tANI_U8 *) linkSetupList->peerMac, - sizeof(tSirMacAddr)) ) - { - checkNode = TDLS_NODE_FOUND ; - *setupPeer = linkSetupList ; - break ; - } - linkSetupList = linkSetupList->next; - } - - return ((TDLS_NODE_FOUND == checkNode) ? eSIR_SUCCESS : eSIR_FAILURE ) ; -} - -/* - * find peer in Discovery list. - * Dicovery list get populated in two instances, a) Recieved responses in reply - * to discovery request b) If discover request is received from TDLS peer STA - */ -tSirTdlsPeerInfo *limTdlsFindDisPeer(tpAniSirGlobal pMac, tSirMacAddr peerMac) -{ - tLimDisResultList *discoveryList = pMac->lim.gLimTdlsDisResultList ; - tSirTdlsPeerInfo *peerInfo = NULL ; - - while (discoveryList != NULL) - { - peerInfo = &discoveryList->tdlsDisPeerInfo ; - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, - ("Peer in discovery list = " MAC_ADDRESS_STR), - MAC_ADDR_ARRAY(peerInfo->peerMac)); - - if (vos_mem_compare((tANI_U8 *) peerMac, - (tANI_U8 *) &peerInfo->peerMac, sizeof(tSirMacAddr)) ) - { - break ; - } - discoveryList = discoveryList->next; - } - - return peerInfo ; -} - -/* - * find peer in Discovery list by looking into peer state. - * Dicovery list get populated in two instances, a) Recieved responses in reply - * to discovery request b) If discover request is received from TDLS peer STA - */ -static tSirTdlsPeerInfo *limTdlsFindDisPeerByState(tpAniSirGlobal pMac, - tANI_U8 state) -{ - tLimDisResultList *discoveryList = pMac->lim.gLimTdlsDisResultList ; - tSirTdlsPeerInfo *peerInfo = NULL ; - - while (discoveryList != NULL) - { - peerInfo = &discoveryList->tdlsDisPeerInfo ; - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, - ("peerInfo Mac = " MAC_ADDRESS_STR), - MAC_ADDR_ARRAY(peerInfo->peerMac)); - - if (peerInfo->tdlsPeerState == state) - { - break ; - } - discoveryList = discoveryList->next; - } - - return peerInfo ; -} - -/* - * find peer in Setup list by looking into peer state. - * setup list get populated in two instances, a) Recieved responses in reply - * to setup request b) If discover request is received from TDLS peer STA - */ -static tANI_U8 limTdlsFindSetupPeerByState(tpAniSirGlobal pMac, tANI_U8 state, - tLimTdlsLinkSetupPeer **setupPeer) -{ - - tLimTdlsLinkSetupInfo *setupInfo = &pMac->lim.gLimTdlsLinkSetupInfo ; - tLimTdlsLinkSetupPeer *linkSetupList = setupInfo->tdlsLinkSetupList ; - tANI_U8 checkNode = TDLS_NODE_NOT_FOUND ; - - while (linkSetupList != NULL) - { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, - ("peer state = %02x"), (linkSetupList)->tdls_link_state) ; - if((linkSetupList)->tdls_link_state == state) - { - checkNode = TDLS_NODE_FOUND ; - *setupPeer = linkSetupList ; - break ; - } - linkSetupList = (linkSetupList)->next; - } - - return ((TDLS_NODE_FOUND == checkNode) ? eSIR_SUCCESS: eSIR_FAILURE) ; -} - - -/* - * delete Peer from Setup Link - */ -void limTdlsDelLinkPeer(tpAniSirGlobal pMac, tSirMacAddr peerMac) -{ - tLimTdlsLinkSetupInfo *setupInfo = &pMac->lim.gLimTdlsLinkSetupInfo ; - tLimTdlsLinkSetupPeer **linkSetupList = &setupInfo->tdlsLinkSetupList ; - tLimTdlsLinkSetupPeer *currentNode = NULL ; - tLimTdlsLinkSetupPeer *prevNode = NULL ; - - for(currentNode = *linkSetupList ; currentNode != NULL ; - prevNode = currentNode, currentNode = currentNode->next) - { - if (vos_mem_compare( (tANI_U8 *) peerMac, - (tANI_U8 *) currentNode->peerMac, - sizeof(tSirMacAddr)) ) - { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, - ("Del Node for Peer = " MAC_ADDRESS_STR), - MAC_ADDR_ARRAY(currentNode->peerMac)); - /* if it's first Node */ - if(NULL == prevNode) - { - *linkSetupList = currentNode->next ; - } - else - { - prevNode->next = currentNode->next ; - } - vos_mem_free(currentNode) ; - return ; - } - } - - return ; -} - - - -/* - * TDLS discovery request frame received from TDLS peer STA.. - */ -static tSirRetStatus limProcessTdlsDisReqFrame(tpAniSirGlobal pMac, - tANI_U8 *pBody, tANI_U32 frmLen ) -{ - tDot11fTDLSDisReq tdlsDisReq = {{0}} ; - tANI_U32 status = 0 ; - tLimDisResultList *tdlsDisResult = NULL ; - tLimDisResultList **disResultList = &pMac->lim.gLimTdlsDisResultList ; - tSirMacAddr peerMac = {0} ; - tLimTdlsLinkSetupPeer *setupPeer = NULL ; - tSirTdlsPeerInfo *peerInfo = NULL ; - tpPESession psessionEntry = NULL ; - tANI_U8 sessionId = 0 ; - - status = dot11fUnpackTDLSDisReq(pMac, pBody, frmLen, &tdlsDisReq) ; - - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_WARN, - ("TDLS dis request dialog = %d"), tdlsDisReq.DialogToken.token); - - if ( DOT11F_FAILED( status ) ) - { - limLog(pMac, LOGE, FL("Failed to parse TDLS discovery Request " - "frame (0x%08x, %d bytes):"),status, frmLen); - PELOG2(sirDumpBuf(pMac, SIR_DBG_MODULE_ID, LOG2, pBody, frmLen);) - return eSIR_FAILURE; - } - else if ( DOT11F_WARNED( status ) ) - { - limLog( pMac, LOGW, FL("There were warnings while unpacking a TDLS " - "discovery Request frame (0x%08x, %d bytes):"), - status, frmLen ); - PELOG2(sirDumpBuf(pMac, SIR_DBG_MODULE_ID, LOG2, pBody, frmLen);) - } - - /* - * find session entry using BSSID in link identifier, not using MAC - * header beacuse, there is cases in TDLS, there may be BSSID will not - * be present in header - */ - psessionEntry = peFindSessionByBssid(pMac, - &tdlsDisReq.LinkIdentifier.bssid[0], &sessionId) ; - if(NULL == psessionEntry) - { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("no Session entry for TDLS session (bssid "MAC_ADDR_ARRAY")"), - MAC_ADDR_ARRAY(tdlsDisReq.LinkIdentifier.bssid)); - - return eSIR_FAILURE; - } - - /* varify BSSID */ - status = vos_mem_compare( &psessionEntry->bssId[0], - &tdlsDisReq.LinkIdentifier.bssid[0], sizeof(tSirMacAddr)) ; - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, - ("lim BSSID "MAC_ADDRESS_STR), - MAC_ADDR_ARRAY( psessionEntry->bssId)); - - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, - ("Dis req from BSSID "MAC_ADDRESS_STR), - MAC_ADDR_ARRAY(tdlsDisReq.LinkIdentifier.bssid)); - if(!status) - { - limLog( pMac, LOGE, FL("TDLS discovery request frame from other BSS -> something wrong. Check RXP filter")) ; - - return eSIR_FAILURE ; - } - - /* - * check if this is echo of our transmitted discovery request - * drop it here, TODO: better to drop this in TL. - */ - status = vos_mem_compare( psessionEntry->selfMacAddr, - &tdlsDisReq.LinkIdentifier.InitStaAddr[0], - sizeof(tSirMacAddr)) ; - if(status) - { - limLog( pMac, LOGE, FL("Echo of our TDLS discovery request frame")) ; - return eSIR_FAILURE ; - } - - /* - * while processing Discovery request from Peer, - * STA_MAC--> MAC of TDLS discovery initiator - * STA_PEER_MAC--> MAC of TDLS discovery responder. - */ - vos_mem_copy( peerMac, - &tdlsDisReq.LinkIdentifier.InitStaAddr[0], - sizeof(tSirMacAddr)) ; - /* TODO, do more validation */ - - /* see if discovery is already in progress */ - peerInfo = limTdlsFindDisPeer(pMac, peerMac) ; - - if(NULL == peerInfo) - { - /* - * we are allocating peer info for individual peers found in TDLS - * discovery, we need to keep adding TDLS peers till we have timed - * out. We are freeing this memory at the time we are sending this - * collected peer info to SME. - */ - tdlsDisResult = vos_mem_malloc(sizeof(tLimDisResultList)); - if ( NULL == tdlsDisResult ) - { - limLog(pMac, LOGP, FL("alloc fail for TDLS discovery " - "reponse info")) ; - return eSIR_FAILURE ; - } - - - peerInfo = &tdlsDisResult->tdlsDisPeerInfo ; - peerInfo->tdlsPeerState = TDLS_DIS_REQ_PROCESS_STATE ; - peerInfo->dialog = tdlsDisReq.DialogToken.token ; - - peerInfo->sessionId = psessionEntry->peSessionId; - - /* Populate peer info of tdls discovery result */ - vos_mem_copy( peerInfo->peerMac, peerMac, sizeof(tSirMacAddr)) ; - - /* - * Now, as per D13, there will not be any Supp rates, ext Supp rates - * info in Discovery request frames, so we are populating this info - * locally to pass it to ADD STA. - */ - do - { - tDot11fIESuppRates suppRates = {0} ; - tDot11fIEExtSuppRates extSuppRates = {0} ; - tANI_U16 caps = 0 ; - tDot11fFfCapabilities capsInfo = {0} ; - tDot11fIEHTCaps HTCaps = {0} ; - /* populate supported rate IE */ - PopulateDot11fSuppRates( pMac, POPULATE_DOT11F_RATES_OPERATIONAL, - &suppRates, psessionEntry ); - ConvertSuppRates( pMac, &peerInfo->tdlsPeerSuppRates, - &suppRates); - /* Populate extended supported rates */ - PopulateDot11fExtSuppRates( pMac, POPULATE_DOT11F_RATES_OPERATIONAL, - &extSuppRates, psessionEntry ); - - peerInfo->ExtRatesPresent = 1; - ConvertExtSuppRates( pMac, &peerInfo->tdlsPeerExtRates, - &extSuppRates); - - if(cfgGetCapabilityInfo(pMac, &caps, psessionEntry) != eSIR_SUCCESS) - { - /* - * Could not get Capabilities value - * from CFG. Log error. - */ - limLog(pMac, LOGP, - FL("could not retrieve Capabilities value")); - } - swapBitField16(caps, ( tANI_U16* )&capsInfo ); - /* update Caps Info */ - tdlsUpdateCapInfo(&peerInfo->capabilityInfo, &capsInfo) ; - - PopulateDot11fHTCaps( pMac, psessionEntry, &HTCaps ); - limTdlsCovertHTCaps(pMac, peerInfo, &HTCaps) ; - - } while (0) ; - - /* now add this new found discovery node into tdls discovery list */ - tdlsDisResult->next = *disResultList ; - *disResultList = tdlsDisResult ; - pMac->lim.gLimTdlsDisStaCount++ ; - - /* See if for this peer already entry in setup Link */ - limTdlsFindLinkPeer(pMac, peerMac, &setupPeer) ; - - /* - * if there is no entry for this peer in setup list, we need to - * do add sta for this peer to transmit discovery rsp. - */ - if(NULL == setupPeer) - { - /* To start with, send add STA request to HAL */ - pMac->lim.gLimAddStaTdls = true ; - peerInfo->delStaNeeded = true ; - - if(eSIR_FAILURE == limTdlsDisAddSta(pMac, peerMac, - peerInfo, psessionEntry)) - { - VOS_ASSERT(0) ; - limLog(pMac, LOGE, "Add STA for dis response is failed ") ; - return eSIR_FAILURE ; - } - } /* use setup link sta ID for discovery rsp */ - else - { - peerInfo->delStaNeeded = false ; - limSendTdlsDisRspFrame(pMac, peerInfo->peerMac, peerInfo->dialog, psessionEntry) ; - peerInfo->tdlsPeerState = TDLS_DIS_RSP_SENT_WAIT_STATE ; - } - - } - else - { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, - ("discovery procedure in progress for this peer")) ; - } - - return eSIR_SUCCESS ; -} - -/* Process TDLS setup Request Frame */ - -static tSirRetStatus limProcessTdlsSetupReqFrame(tpAniSirGlobal pMac, - tANI_U8 *pBody, tANI_U32 frmLen) -{ - - tDot11fTDLSSetupReq tdlsSetupReq = {{0}} ; - tANI_U32 status = 0 ; - tpPESession psessionEntry = NULL ; - tANI_U8 sessionId = 0 ; - tANI_U8 currentState = TDLS_LINK_SETUP_WAIT_STATE ; - tANI_U8 previousState = TDLS_LINK_IDLE_STATE ; - /* create node for Link setup */ - tLimTdlsLinkSetupInfo *linkSetupInfo = &pMac->lim.gLimTdlsLinkSetupInfo ; - tLimTdlsLinkSetupPeer *setupPeer = NULL ; - tLimTdlsLinkSetupPeer *tmpSetupPeer = NULL ; - - status = dot11fUnpackTDLSSetupReq(pMac, pBody, frmLen, &tdlsSetupReq) ; - - if ( DOT11F_FAILED( status ) ) - { - limLog(pMac, LOGE, FL("Failed to parse TDLS discovery Request " - "frame (0x%08x, %d bytes):"),status, frmLen); - PELOG2(sirDumpBuf(pMac, SIR_DBG_MODULE_ID, LOG2, pBody, frmLen);) - return eSIR_FAILURE; - } - else if ( DOT11F_WARNED( status ) ) - { - limLog( pMac, LOGW, FL("There were warnings while unpacking a TDLS " - "setup Request frame (0x%08x, %d bytes):"), - status, frmLen ); - PELOG2(sirDumpBuf(pMac, SIR_DBG_MODULE_ID, LOG2, pBody, frmLen);) - } - /* - * find session entry using BSSID in link identifier, not using MAC - * header beacuse, there is cases in TDLS, there may be BSSID will not - * be present in header - */ - psessionEntry = peFindSessionByBssid(pMac, - &tdlsSetupReq.LinkIdentifier.bssid[0], &sessionId) ; - if(NULL == psessionEntry) - { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("no Session entry for TDLS session (bssid " - MAC_ADDRESS_STR")"), - MAC_ADDR_ARRAY(tdlsSetupReq.LinkIdentifier.bssid)); - - return eSIR_FAILURE ; - } - /* TODO: we don;t need this check now, varify BSSID */ - status = vos_mem_compare( psessionEntry->bssId, - &tdlsSetupReq.LinkIdentifier.bssid[0], - sizeof(tSirMacAddr)) ; - - if(!status) - { - limLog( pMac, LOGE, FL("TDLS setup request frame from other BSS -> something wrong. Check RXP filter")) ; - - limSendTdlsSetupRspFrame(pMac, tdlsSetupReq.LinkIdentifier.InitStaAddr, - tdlsSetupReq.DialogToken.token, psessionEntry, - TDLS_SETUP_STATUS_FAILURE, NULL, 0 ) ; - return eSIR_FAILURE ; - } - -#ifdef FEATURE_WLAN_TDLS_NEGATIVE - if(pMac->lim.gLimTdlsNegativeBehavior & LIM_TDLS_NEGATIVE_RSP_TIMEOUT_TO_SETUP_REQ) - { - /* simply ignore this setup request packet */ - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("TDLS negative running: ignore TDLS Setup Req packet")); - return eSIR_SUCCESS ; - } - if(pMac->lim.gLimTdlsNegativeBehavior & LIM_TDLS_NEGATIVE_SEND_REQ_TO_SETUP_REQ) - { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("TDLS negative running: send TDLS Setup Req to peer TDLS Setup Req")); - /* format TDLS discovery request frame and transmit it */ - limSendTdlsLinkSetupReqFrame(pMac, tdlsSetupReq.LinkIdentifier.InitStaAddr, tdlsSetupReq.DialogToken.token, psessionEntry, - NULL, 0) ; - } -#endif - /* TODO, do more validation */ - - if(!limTdlsFindLinkPeer(pMac, - &tdlsSetupReq.LinkIdentifier.InitStaAddr[0], - &tmpSetupPeer)) - { - tANI_U32 tdlsStateStatus = TDLS_LINK_SETUP_START_STATE ; - - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("Link is already setup with this peer" )) ; - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("state = %d"), tmpSetupPeer->tdls_link_state) ; - - if(tmpSetupPeer == NULL) - { - VOS_ASSERT(0) ; - return eSIR_FAILURE ; - - } - switch(tmpSetupPeer->tdls_link_state) - { - - case TDLS_LINK_SETUP_START_STATE: - { - v_SINT_t macCompare = 0 ; - macCompare= vos_mem_compare2(tmpSetupPeer->peerMac, - psessionEntry->selfMacAddr, sizeof(tSirMacAddr)) ; - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("MAC comparison Rslt = %d"), macCompare ) ; - if(0 > macCompare) - { - /* - * Delete our Setup Request/Peer info and honour Peer - * Setup Request, go ahead and respond for this - */ - /* Deactivate the timer */ - tx_timer_deactivate(&tmpSetupPeer->gLimTdlsLinkSetupRspTimeoutTimer) ; -#ifdef FEATURE_WLAN_TDLS_NEGATIVE - if((pMac->lim.gLimTdlsNegativeBehavior & LIM_TDLS_NEGATIVE_SEND_REQ_TO_SETUP_REQ) - != LIM_TDLS_NEGATIVE_SEND_REQ_TO_SETUP_REQ) -#endif - limSendSmeTdlsLinkStartRsp(pMac, eSIR_FAILURE, - tmpSetupPeer->peerMac, eWNI_SME_TDLS_LINK_START_RSP); - - limTdlsDelLinkPeer(pMac, tmpSetupPeer->peerMac) ; - tdlsStateStatus = TDLS_LINK_IDLE_STATE ; - } - else if(0 < macCompare) - { - /* - * Go ahead with current setup as peer is going to - * respond for setup request - */ - tdlsStateStatus = TDLS_LINK_SETUP_START_STATE ; - } - else - { - /* same MAC, not possible */ - VOS_ASSERT(0) ; - } - - break ; - } - - case TDLS_LINK_SETUP_DONE_STATE: - { - tpDphHashNode pStaDs = NULL ; - - previousState = TDLS_LINK_SETUP_WAIT_STATE ; - currentState = TDLS_LINK_TEARDOWN_START_STATE ; - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("link Setup Done state " )) ; - tmpSetupPeer->tdls_prev_link_state = previousState ; - tmpSetupPeer->tdls_link_state = currentState ; - setupPeer = tmpSetupPeer ; - - /* tdls_hklee: send message to HAL before it is deleted, cause */ - limTdlsLinkTeardown(pMac, (setupPeer)->peerMac) ; - - /* send del STA to remove context for this TDLS STA */ - pStaDs = limTdlsDelSta(pMac, (setupPeer)->peerMac, psessionEntry) ; - - /* now send indication to SME-->HDD->TL to remove STA from TL */ - - if(pStaDs) - { - limSendSmeTdlsDelPeerInd(pMac, psessionEntry->smeSessionId, - pStaDs, eSIR_SUCCESS) ; - - /* send Teardown Ind to SME */ - limSendSmeTdlsTeardownRsp(pMac, eSIR_SUCCESS, (setupPeer)->peerMac, - eWNI_SME_TDLS_TEARDOWN_IND) ; - /* remove node from setup list */ - limTdlsDelLinkPeer(pMac, (setupPeer)->peerMac) ; - } - tdlsStateStatus = TDLS_LINK_IDLE_STATE ; - break ; - - } - default: - { - VOS_ASSERT(0) ; - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("link Setup is Recieved in unknown state" )) ; - break ; - } - } - if(tdlsStateStatus == TDLS_LINK_SETUP_START_STATE) - return eSIR_FAILURE ; - } - - if(currentState != TDLS_LINK_TEARDOWN_START_STATE) - { - /* - * Now we are sure to send discovery response frame to TDLS discovery - * initiator, we don't care, if this request is unicast ro broadcast, - * we simply, send discovery response frame on direct link. - */ - setupPeer = vos_mem_malloc(sizeof( tLimTdlsLinkSetupPeer )); - if ( NULL == setupPeer ) - { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ( "Unable to allocate memory during ADD_STA" )); - return eSIR_MEM_ALLOC_FAILED; - } - - setupPeer->dialog = tdlsSetupReq.DialogToken.token ; - setupPeer->tdls_prev_link_state = previousState ; - setupPeer->tdls_link_state = currentState ; - /* TDLS_sessionize: remember sessionId for future */ - setupPeer->tdls_sessionId = psessionEntry->peSessionId; - setupPeer->tdls_bIsResponder = 0; - - vos_mem_copy(setupPeer->peerMac, - &tdlsSetupReq.LinkIdentifier.InitStaAddr[0], - sizeof(tSirMacAddr)) ; - - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, - ("Setup REQ MAC = " MAC_ADDRESS_STR), - MAC_ADDR_ARRAY(setupPeer->peerMac)); - - limTdlsUpdateLinkReqPeerInfo(pMac, setupPeer, &tdlsSetupReq) ; - pMac->lim.gLimAddStaTdls = true ; - - /* To start with, send add STA request to HAL */ - if(eSIR_FAILURE == limTdlsSetupAddSta(pMac, setupPeer->peerMac, - setupPeer, psessionEntry)) - { - VOS_ASSERT(0) ; - vos_mem_free((void **) &setupPeer) ; - return eSIR_FAILURE ; - } - - limSendTdlsSetupRspFrame(pMac, tdlsSetupReq.LinkIdentifier.InitStaAddr, - tdlsSetupReq.DialogToken.token, psessionEntry, - TDLS_SETUP_STATUS_SUCCESS, NULL, 0) ; - - limStartTdlsTimer(pMac, psessionEntry->peSessionId, - &setupPeer->gLimTdlsLinkSetupCnfTimeoutTimer, - (tANI_U32)setupPeer->peerMac, - WNI_CFG_TDLS_LINK_SETUP_CNF_TIMEOUT, - SIR_LIM_TDLS_LINK_SETUP_CNF_TIMEOUT) ; - - /* update setup peer list */ - setupPeer->next = linkSetupInfo->tdlsLinkSetupList ; - linkSetupInfo->tdlsLinkSetupList = setupPeer ; - } - else - { - setupPeer->dialog = tdlsSetupReq.DialogToken.token ; - setupPeer->tdls_prev_link_state = previousState ; - setupPeer->tdls_link_state = currentState ; - /* TDLS_sessionize: remember sessionId for future */ - setupPeer->tdls_sessionId = psessionEntry->peSessionId; - setupPeer->tdls_bIsResponder = 0; - - vos_mem_copy( setupPeer->peerMac, - &tdlsSetupReq.LinkIdentifier.InitStaAddr[0], - sizeof(tSirMacAddr)) ; - - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, - ("Setup REQ MAC = "MAC_ADDRESS_STR), - MAC_ADDR_ARRAY(setupPeer->peerMac)); - - limTdlsUpdateLinkReqPeerInfo(pMac, setupPeer, &tdlsSetupReq) ; - limSendTdlsSetupRspFrame(pMac, tdlsSetupReq.LinkIdentifier.InitStaAddr, - tdlsSetupReq.DialogToken.token, psessionEntry, - TDLS_SETUP_STATUS_SUCCESS, NULL, 0) ; - - limStartTdlsTimer(pMac, psessionEntry->peSessionId, - &setupPeer->gLimTdlsLinkSetupCnfTimeoutTimer, - (tANI_U32)setupPeer->peerMac, - WNI_CFG_TDLS_LINK_SETUP_CNF_TIMEOUT, - SIR_LIM_TDLS_LINK_SETUP_CNF_TIMEOUT) ; - } - - - return eSIR_SUCCESS ; - -} - -/* - * TDLS discovery request frame received from TDLS peer STA.. - */ -static tSirRetStatus limProcessTdlsSetupRspFrame(tpAniSirGlobal pMac, - tANI_U8 *pBody, tANI_U32 frmLen ) -{ - tDot11fTDLSSetupRsp tdlsSetupRsp = {{0}} ; - tANI_U32 status = 0 ; - tSirMacAddr peerMac = {0} ; - tLimTdlsLinkSetupPeer *setupPeer = NULL ; - tpPESession psessionEntry = NULL ; - tANI_U8 sessionId = 0 ; - - status = dot11fUnpackTDLSSetupRsp(pMac, pBody, frmLen, &tdlsSetupRsp) ; - - if ( DOT11F_FAILED( status ) ) - { - limLog(pMac, LOGE, FL("Failed to parse TDLS discovery Request " - "frame (0x%08x, %d bytes):"),status, frmLen); - PELOG2(sirDumpBuf(pMac, SIR_DBG_MODULE_ID, LOG2, pBody, frmLen);) - return eSIR_FAILURE; - } - else if ( DOT11F_WARNED( status ) ) - { - limLog( pMac, LOGW, FL("There were warnings while unpacking a TDLS " - "discovery Request frame (0x%08x, %d bytes):"), - status, frmLen ); - PELOG2(sirDumpBuf(pMac, SIR_DBG_MODULE_ID, LOG2, pBody, frmLen);) - } - - /* - * find session entry using BSSID in link identifier, not using MAC - * header beacuse, there is cases in TDLS, there may be BSSID will not - * be present in header - */ - psessionEntry = peFindSessionByBssid(pMac, - &tdlsSetupRsp.LinkIdentifier.bssid[0], &sessionId) ; - if(NULL == psessionEntry) - { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("no Session entry for TDLS session (bssid " - MAC_ADDRESS_STR")"), - MAC_ADDR_ARRAY(tdlsSetupRsp.LinkIdentifier.bssid)); - - return eSIR_FAILURE; - } - - /* varify BSSID */ - status = vos_mem_compare( psessionEntry->bssId, - &tdlsSetupRsp.LinkIdentifier.bssid[0], - sizeof(tSirMacAddr)) ; - - if(!status) - { - limLog( pMac, LOGE, FL("TDLS discovery request frame from other BSS -> something wrong. Check RXP filter")) ; - - VOS_ASSERT(0) ; - return eSIR_FAILURE ; - } - vos_mem_copy( peerMac, - &tdlsSetupRsp.LinkIdentifier.RespStaAddr[0], - sizeof(tSirMacAddr)) ; - - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, - ("TDLS setup RSP peer = "MAC_ADDRESS_STR), MAC_ADDR_ARRAY(peerMac)); - limTdlsFindLinkPeer(pMac, peerMac, &setupPeer) ; - - if(NULL == setupPeer) - { - limLog( pMac, LOGE, FL("unknown setup Response frame other BSS")) ; - return eSIR_FAILURE ; - } - - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, - ("deactivating Setup RSP timer")) ; - - /* Deactivate the timer */ - tx_timer_deactivate(&(setupPeer)->gLimTdlsLinkSetupRspTimeoutTimer) ; - - /* - * TDLS Setup RSP is recieved with Failure, Delete this STA entry - * don't respond with TDLS CNF frame. - */ - if(TDLS_SETUP_STATUS_SUCCESS != tdlsSetupRsp.Status.status) - { - limTdlsDelLinkPeer(pMac, (setupPeer)->peerMac) ; - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, - ("setup RSP with Failure Code")) ; - return eSIR_FAILURE ; - } - - /* update Link Info */ - limTdlsUpdateLinkRspPeerInfo(pMac, setupPeer, &tdlsSetupRsp) ; - - /* TODO, do more validation */ - - - /* - * Now we are sure to send link setup CNF frame to TDLS link setup - * reponded, now we will create dph hash entry and send add STA to HAL - */ - - pMac->lim.gLimAddStaTdls = true ; - if(eSIR_FAILURE == limTdlsSetupAddSta(pMac, peerMac, - setupPeer, psessionEntry)) - { - /* through error */ - VOS_ASSERT(0) ; - return eSIR_FAILURE ; - } - /* TDLS_HKLEE_FIXME: now we add some delay for AddSta_Rsp comes */ - - - /* send TDLS confim frame to TDLS Peer STA */ - limSendTdlsLinkSetupCnfFrame(pMac, peerMac, tdlsSetupRsp.DialogToken.token, 0, psessionEntry, NULL, 0) ; - - /* - * set the tdls_link_state to TDLS_LINK_SETUP_RSP_WAIT_STATE, and - * wait for Setup CNF transmission on air, once we receive tx complete - * message, we will change the peer state and send message to SME - * callback.. - */ - (setupPeer)->tdls_prev_link_state = (setupPeer)->tdls_link_state ; - (setupPeer)->tdls_link_state = TDLS_LINK_SETUP_RSP_WAIT_STATE ; - - return eSIR_SUCCESS ; -} -/* - * TDLS setup CNF frame processing .. - */ - -static tSirRetStatus limProcessTdlsSetupCnfFrame(tpAniSirGlobal pMac, - tANI_U8 *pBody, tANI_U32 frmLen) -{ - tDot11fTDLSSetupCnf tdlsSetupCnf = {{0}} ; - tANI_U32 status = 0 ; - tLimTdlsLinkSetupPeer *setupPeer = NULL ; - tpPESession psessionEntry = NULL ; - tANI_U8 sessionId = 0 ; - - status = dot11fUnpackTDLSSetupCnf(pMac, pBody, frmLen, &tdlsSetupCnf) ; - - if ( DOT11F_FAILED( status ) ) - { - limLog(pMac, LOGE, FL("Failed to parse an TDLS discovery Response " - "frame (0x%08x, %d bytes):"),status, frmLen); - PELOG2(sirDumpBuf(pMac, SIR_DBG_MODULE_ID, LOG2, pBody, frmLen);) - return eSIR_FAILURE; - } - else if ( DOT11F_WARNED( status ) ) - { - limLog( pMac, LOGW, FL("There were warnings while unpacking a TDLS " - "discovery Response frame (0x%08x, %d bytes):"), - status, frmLen ); - PELOG2(sirDumpBuf(pMac, SIR_DBG_MODULE_ID, LOG2, pBody, frmLen);) - } - /* - * find session entry using BSSID in link identifier, not using MAC - * header beacuse, there is cases in TDLS, there may be BSSID will not - * be present in header - */ - psessionEntry = peFindSessionByBssid(pMac, - &tdlsSetupCnf.LinkIdentifier.bssid[0], &sessionId) ; - if(NULL == psessionEntry) - { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("no Session entry for TDLS session (bssid " - MAC_ADDRESS_STR")"), - MAC_ADDR_ARRAY(tdlsSetupCnf.LinkIdentifier.bssid)); - - return eSIR_FAILURE; - } - - /* varify BSSID */ - status = vos_mem_compare( psessionEntry->bssId, - &tdlsSetupCnf.LinkIdentifier.bssid[0], - sizeof(tSirMacAddr)) ; - - if(!status) - { - limLog( pMac, LOGE, FL("TDLS setup CNF frame other BSS -> something wrong. Check RXP filter")) ; - - VOS_ASSERT(0) ; - return eSIR_FAILURE ; - } - /* TODO, do more validation */ - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, - ("setup Cnf peer MAc = "MAC_ADDRESS_STR), - MAC_ADDR_ARRAY(tdlsSetupCnf.LinkIdentifier.InitStaAddr)); - - limTdlsFindLinkPeer(pMac, - &tdlsSetupCnf.LinkIdentifier.InitStaAddr[0], - &setupPeer) ; - - if(NULL == setupPeer) - { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, - (" unknown setup CNF frame")) ; - VOS_ASSERT(0) ; - return eSIR_FAILURE ; - } - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, - ("setup CNF peer MAC = "MAC_ADDRESS_STR), - MAC_ADDR_ARRAY((setupPeer)->peerMac)); - /*T match dialog token, before proceeding further */ - if((setupPeer)->dialog != tdlsSetupCnf.DialogToken.token) - { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("setup CNF frame not matching with setup RSP")) ; - VOS_ASSERT(0) ; - return eSIR_FAILURE ; - } - - /* - * Now we are sure that, this set CNF is for us, now stop - * the running timer.. - */ - tx_timer_deactivate(&(setupPeer)->gLimTdlsLinkSetupCnfTimeoutTimer) ; - - /* change TDLS peer State */ - (setupPeer)->tdls_prev_link_state = (setupPeer)->tdls_link_state ; - (setupPeer)->tdls_link_state = TDLS_LINK_SETUP_DONE_STATE ; - - /* send indication to SME that, new link is setup */ - limSendSmeTdlsLinkSetupInd(pMac, (setupPeer)->peerMac, eSIR_SUCCESS) ; - - /* tdls_hklee: prepare PTI template and send it to HAL */ - limTdlsLinkEstablish(pMac, (setupPeer)->peerMac); - - return eSIR_SUCCESS ; - -} - -/* - * TDLS discovery response frame processing .. - */ - -static tSirRetStatus limProcessTdlsDisRspFrame(tpAniSirGlobal pMac, - tANI_U8 *pBody, tANI_U32 frmLen, - tANI_S8 rssi, tpPESession psessionEntry) -{ - tDot11fTDLSDisRsp tdlsDisRsp = {{0}} ; - tANI_U32 status = 0 ; - tLimDisResultList *tdlsDisResult = NULL ; - tLimDisResultList **disResultList = &pMac->lim.gLimTdlsDisResultList ; - tSirTdlsDisReq *prevDisReq = &pMac->lim.gLimTdlsDisReq ; - - status = dot11fUnpackTDLSDisRsp(pMac, pBody, frmLen, &tdlsDisRsp) ; - - if ( DOT11F_FAILED( status ) ) - { - limLog(pMac, LOGE, FL("Failed to parse an TDLS discovery Response " - "frame (0x%08x, %d bytes):"),status, frmLen); - PELOG2(sirDumpBuf(pMac, SIR_DBG_MODULE_ID, LOG2, pBody, frmLen);) - return eSIR_FAILURE; - } - else if ( DOT11F_WARNED( status ) ) - { - limLog( pMac, LOGW, FL("There were warnings while unpacking a TDLS " - "discovery Response frame (0x%08x, %d bytes):"), - status, frmLen ); - PELOG2(sirDumpBuf(pMac, SIR_DBG_MODULE_ID, LOG2, pFrame, nFrame);) - } - /*TODO: match dialog token, before proceeding further */ - - /* varify BSSID */ - status = vos_mem_compare( psessionEntry->bssId, - &tdlsDisRsp.LinkIdentifier.bssid[0], - sizeof(tSirMacAddr)) ; - - if(!status) - { - limLog( pMac, LOGW, FL(" TDLS discovery Response frame other BSS")) ; - return eSIR_FAILURE ; - } - /* TODO, do more validation */ - - if(tdlsDisRsp.DialogToken.token != prevDisReq->dialog) - { - limLog( pMac, LOGW, FL(" wrong TDLS discovery Response frame")) ; - return eSIR_FAILURE ; - } - - pMac->lim.gLimTdlsDisStaCount++ ; - - /* - * we are allocating peer info for individual peers found in TDLS - * discovery, we need to keep adding TDLS peers till we have timed - * out. We are freeing this memory at the time we are sending this - * collected peer info to SME. - */ - tdlsDisResult = vos_mem_malloc(sizeof(tLimDisResultList)); - if ( NULL == tdlsDisResult ) - { - limLog(pMac, LOGP, FL("alloc fail for TDLS discovery reponse info")) ; - return eSIR_FAILURE ; - } - - do - { - tSirTdlsPeerInfo *peerInfo = &tdlsDisResult->tdlsDisPeerInfo ; - - /* Populate peer info of tdls discovery result */ - peerInfo->sessionId = psessionEntry->peSessionId; - /* - * When we receive DIS RSP from peer MAC, - * STA_MAC_OFFSET will carry peer MAC address and PEER MAC OFFSET - * will carry our MAC. - */ - vos_mem_copy( peerInfo->peerMac, - &tdlsDisRsp.LinkIdentifier.RespStaAddr[0], - sizeof(tSirMacAddr)) ; - - /* update RSSI for this TDLS peer STA */ - peerInfo->tdlsPeerRssi = rssi ; - - /* update Caps Info */ - tdlsUpdateCapInfo(&peerInfo->capabilityInfo, - &tdlsDisRsp.Capabilities) ; - - /* update Supp rates */ - if(tdlsDisRsp.SuppRates.present) - { - ConvertSuppRates( pMac, &peerInfo->tdlsPeerSuppRates, - &tdlsDisRsp.SuppRates ); - } - - /* update EXT supp rates */ - if(tdlsDisRsp.ExtSuppRates.present) - { - peerInfo->ExtRatesPresent = 1; - ConvertExtSuppRates( pMac, &peerInfo->tdlsPeerExtRates, - &tdlsDisRsp.ExtSuppRates ); - } - /* update HT caps */ - if (tdlsDisRsp.HTCaps.present) - { - vos_mem_copy( &peerInfo->tdlsPeerHtCaps, &tdlsDisRsp.HTCaps, - sizeof( tDot11fIEHTCaps ) ); - } - } while(0) ; - - /* now add this new found discovery node into tdls discovery list */ - tdlsDisResult->next = *disResultList ; - *disResultList = tdlsDisResult ; - - return eSIR_SUCCESS ; -} - -/* - * Process TDLS Teardown request frame from TDLS peer STA - */ -static tSirRetStatus limProcessTdlsTeardownFrame(tpAniSirGlobal pMac, - tANI_U8 *pBody, tANI_U32 frmLen ) -{ - tDot11fTDLSTeardown tdlsTeardown = {{0}} ; - tANI_U32 status = 0 ; - tLimTdlsLinkSetupPeer *setupPeer = NULL ; - tpPESession psessionEntry = NULL ; - tANI_U8 sessionId = 0 ; - - status = dot11fUnpackTDLSTeardown(pMac, pBody, frmLen, &tdlsTeardown) ; - - if ( DOT11F_FAILED( status ) ) - { - limLog(pMac, LOGE, FL("Failed to parse an TDLS discovery Response " - "frame (0x%08x, %d bytes):"),status, frmLen); - PELOG2(sirDumpBuf(pMac, SIR_DBG_MODULE_ID, LOG2, pBody, frmLen);) - return eSIR_FAILURE; - } - else if ( DOT11F_WARNED( status ) ) - { - limLog( pMac, LOGW, FL("There were warnings while unpacking a TDLS " - "discovery Response frame (0x%08x, %d bytes):"), - status, frmLen ); - PELOG2(sirDumpBuf(pMac, SIR_DBG_MODULE_ID, LOG2, pBody, frmLen);) - } - - /* - * find session entry using BSSID in link identifier, not using MAC - * header beacuse, there is cases in TDLS, there may be BSSID will not - * be present in header - */ - psessionEntry = peFindSessionByBssid(pMac, - &tdlsTeardown.LinkIdentifier.bssid[0], &sessionId) ; - if(NULL == psessionEntry) - { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("no Session entry for TDLS session (bssid " - MAC_ADDRESS_STR")"), - MAC_ADDR_ARRAY(tdlsTeardown.LinkIdentifier.bssid)); - - return eSIR_FAILURE; - } - - /* varify BSSID */ - status = vos_mem_compare( psessionEntry->bssId, - &tdlsTeardown.LinkIdentifier.bssid[0], - sizeof(tSirMacAddr)) ; - - - if(!status) - { - limLog( pMac, LOGE, FL("Teardown from other BSS -> something wrong. Check RXP filter")) ; - VOS_ASSERT(0) ; - return eSIR_FAILURE ; - } - - limTdlsFindLinkPeer(pMac, - &tdlsTeardown.LinkIdentifier.InitStaAddr[0], - &setupPeer) ; - - if(NULL == setupPeer) - { - limLog( pMac, LOGE, FL("Teardown from unknown peer. --> ignored") ); - - return eSIR_FAILURE ; - } - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, - ("teardown for peer "MAC_ADDRESS_STR), - MAC_ADDR_ARRAY((setupPeer)->peerMac)); - - switch(tdlsTeardown.Reason.code) - { - case eSIR_MAC_TDLS_TEARDOWN_UNSPEC_REASON: - { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, - ("teardown with unspecified reason")) ; - break ; - } - case eSIR_MAC_TDLS_TEARDOWN_PEER_UNREACHABLE: - { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, - (" Teardown from AP, TDLS peer unreachable")) ; - break ; - } - default: - { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, - (" unknown teardown")) ; - break ; - } - } - - /* change TDLS peer State */ - (setupPeer)->tdls_prev_link_state = (setupPeer)->tdls_link_state ; - (setupPeer)->tdls_link_state = TDLS_LINK_TEARDOWN_START_STATE ; - - do - { - tpDphHashNode pStaDs = NULL ; - - /* tdls_hklee: send message to HAL before it is deleted, cause */ - limTdlsLinkTeardown(pMac, (setupPeer)->peerMac) ; - - /* send del STA to remove context for this TDLS STA */ - pStaDs = limTdlsDelSta(pMac, (setupPeer)->peerMac, psessionEntry) ; - - /* now send indication to SME-->HDD->TL to remove STA from TL */ - - if(pStaDs) - { - limSendSmeTdlsDelPeerInd(pMac, psessionEntry->smeSessionId, - pStaDs, eSIR_SUCCESS) ; - - /* send Teardown Ind to SME */ - limSendSmeTdlsTeardownRsp(pMac, eSIR_SUCCESS, (setupPeer)->peerMac, - eWNI_SME_TDLS_TEARDOWN_IND) ; - /* remove node from setup list */ - limTdlsDelLinkPeer(pMac, (setupPeer)->peerMac) ; - } - - }while(0) ; - - return status ; -} - -/* - * Common processing of TDLS action frames recieved - */ -void limProcessTdlsFrame(tpAniSirGlobal pMac, tANI_U32 *pBd) -{ - tANI_U8 *pBody = WDA_GET_RX_MPDU_DATA(pBd); - tANI_U8 pOffset = ((0 == WDA_GET_RX_FT_DONE(pBd)) - ? (( sizeof( eth_890d_header ))) :(0)) ; - - tANI_U8 category = (pBody + pOffset + PAYLOAD_TYPE_TDLS_SIZE)[0] ; - tANI_U8 action = (pBody + pOffset + PAYLOAD_TYPE_TDLS_SIZE)[1] ; - tANI_U32 frameLen = WDA_GET_RX_PAYLOAD_LEN(pBd) ; - tANI_U8 *tdlsFrameBody = (pBody + pOffset + PAYLOAD_TYPE_TDLS_SIZE) ; - - if(category != SIR_MAC_ACTION_TDLS) - { - limLog( pMac, LOGE, FL("Invalid TDLS action frame=(%d). Ignored"), category ); - return ; - } - - frameLen -= (pOffset + PAYLOAD_TYPE_TDLS_SIZE) ; - LIM_LOG_TDLS(VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, ("Received TDLS action %d (%s)"), - action, limTraceTdlsActionString(action) )); - - switch(action) - { - - case SIR_MAC_TDLS_SETUP_REQ: - { - limProcessTdlsSetupReqFrame(pMac, tdlsFrameBody, frameLen) ; - break ; - } - case SIR_MAC_TDLS_SETUP_RSP: - { - limProcessTdlsSetupRspFrame(pMac, tdlsFrameBody, frameLen) ; - break ; - } - case SIR_MAC_TDLS_SETUP_CNF: - { - limProcessTdlsSetupCnfFrame(pMac, tdlsFrameBody, frameLen) ; - break ; - } - case SIR_MAC_TDLS_TEARDOWN: - { - limProcessTdlsTeardownFrame(pMac, tdlsFrameBody, frameLen) ; - break ; - } - case SIR_MAC_TDLS_DIS_REQ: - { - limProcessTdlsDisReqFrame(pMac, tdlsFrameBody, frameLen) ; - break ; - } - case SIR_MAC_TDLS_PEER_TRAFFIC_IND: - case SIR_MAC_TDLS_CH_SWITCH_REQ: - case SIR_MAC_TDLS_CH_SWITCH_RSP: - case SIR_MAC_TDLS_PEER_TRAFFIC_RSP: - default: - { - break ; - } - } - - return ; -} - -/* - * ADD sta for dis response fame sent on direct link - */ -static tSirRetStatus limTdlsDisAddSta(tpAniSirGlobal pMac, tSirMacAddr peerMac, - tSirTdlsPeerInfo *peerInfo, tpPESession psessionEntry) -{ - tpDphHashNode pStaDs = NULL ; - tSirRetStatus status = eSIR_SUCCESS ; - tANI_U16 aid = 0 ; - - if(NULL == peerInfo) - { - VOS_ASSERT(0) ; - return status ; - - } - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, - ("ADD STA peer MAC: "MAC_ADDRESS_STR), - MAC_ADDR_ARRAY(peerMac)); - - - if(NULL != dphLookupHashEntry(pMac, peerMac, - &aid, &psessionEntry->dph.dphHashTable)) - { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - (" there is hash entry for this client")) ; - status = eSIR_FAILURE ; - VOS_ASSERT(0) ; - return status ; - } - - aid = limAssignPeerIdx(pMac, psessionEntry) ; - - /* Set the aid in peerAIDBitmap as it has been assigned to TDLS peer */ - SET_PEER_AID_BITMAP(psessionEntry->peerAIDBitmap, aid); - - pStaDs = dphGetHashEntry(pMac, aid, &psessionEntry->dph.dphHashTable); - - if (pStaDs) - { - (void) limDelSta(pMac, pStaDs, false /*asynchronous*/, psessionEntry); - limDeleteDphHashEntry(pMac, pStaDs->staAddr, aid, psessionEntry); - } - pStaDs = dphAddHashEntry(pMac, peerMac, aid, - &psessionEntry->dph.dphHashTable) ; - - if(NULL == pStaDs) - { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - (" add hash entry failed")) ; - status = eSIR_FAILURE ; - VOS_ASSERT(0) ; - return status; - } - if(eSIR_SUCCESS == status) - { -#ifdef TDLS_RATE_DEBUG - tSirMacRateSet *suppRates = &peerInfo->tdlsPeerSuppRates ; - tSirMacRateSet *extRates = &peerInfo->tdlsPeerExtRates ; - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, - ("pSta DS [%p] "), pStaDs) ; - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, - ("peerInfo->tdlsPeerSuppRates = [%p]"), - (tANI_U8 *)&peerInfo->tdlsPeerSuppRates) ; - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, - ("peerInfo->tdlsPeerExtRates = [%p]"), - (tANI_U8 *)&peerInfo->tdlsPeerExtRates) ; - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, - ("peerInfo->tdlsPeerPropRates = [%p]"), - (tANI_U8 *)&pStaDs->mlmStaContext.propRateSet) ; - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, - ("peerInfo->mcs = [%p]"), - (tANI_U8 *)peerInfo->supportedMCSSet) ; - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, - ("num of supp rates = %02x"), suppRates->numRates) ; - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, - ("num of ext rates = %01x"), extRates->numRates) ; -#endif - - /* Populate matching rate set */ -#ifdef WLAN_FEATURE_11AC - if(eSIR_FAILURE == limPopulateMatchingRateSet(pMac, pStaDs, - &peerInfo->tdlsPeerSuppRates, - &peerInfo->tdlsPeerExtRates, - peerInfo->supportedMCSSet, - &pStaDs->mlmStaContext.propRateSet, - psessionEntry, NULL)) -#else - if(eSIR_FAILURE == limPopulateMatchingRateSet(pMac, pStaDs, - &peerInfo->tdlsPeerSuppRates, - &peerInfo->tdlsPeerExtRates, - peerInfo->supportedMCSSet, - &pStaDs->mlmStaContext.propRateSet, - psessionEntry)) -#endif - { - VOS_ASSERT(0) ; - } - - - pStaDs->mlmStaContext.capabilityInfo = peerInfo->capabilityInfo; - vos_mem_copy( pStaDs->staAddr, peerMac, sizeof(tSirMacAddr)) ; - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, - ("Add STA for Peer: "MAC_ADDRESS_STR), - MAC_ADDR_ARRAY(pStaDs->staAddr)); - - - pStaDs->staType = STA_ENTRY_TDLS_PEER ; - - status = limAddSta(pMac, pStaDs, false, psessionEntry); - - if(eSIR_SUCCESS != status) - { - /* should not fail */ - VOS_ASSERT(0) ; - } - } - - return status ; -} -#endif /* * Add STA for TDLS setup procedure */ @@ -4162,554 +2359,11 @@ static tpDphHashNode limTdlsDelSta(tpAniSirGlobal pMac, tSirMacAddr peerMac, pStaDs->staIndex) ; status = limDelSta(pMac, pStaDs, false, psessionEntry) ; -#ifdef FEATURE_WLAN_TDLS_INTERNAL - if(eSIR_SUCCESS == status) - { - limDeleteDphHashEntry(pMac, pStaDs->staAddr, peerIdx, psessionEntry) ; - limReleasePeerIdx(pMac, peerIdx, psessionEntry) ; - } - else - { - VOS_ASSERT(0) ; - } -#endif } return pStaDs ; } -#ifdef FEATURE_WLAN_TDLS_INTERNAL -/* -* Prepare link establish message for HAL, construct PTI template. -* -*/ -static tSirRetStatus limTdlsLinkEstablish(tpAniSirGlobal pMac, tSirMacAddr peerMac) -{ - tANI_U8 pFrame[64] ; - tDot11fTDLSPeerTrafficInd tdlsPtiTemplate ; - tANI_U32 status = 0 ; - tANI_U32 nPayload = 0 ; - tANI_U32 nBytes = 0 ; - tANI_U32 header_offset = 0 ; - tANI_U16 aid = 0 ; - tDphHashNode *pStaDs = NULL ; - tLimTdlsLinkSetupPeer *setupPeer = NULL ; - tpPESession psessionEntry = NULL ; - - - limTdlsFindLinkPeer(pMac, peerMac, &setupPeer) ; - if(NULL == setupPeer) { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("limTdlsLinkEstablish: cannot find peer mac " - "in tdls linksetup list: "MAC_ADDRESS_STR), - MAC_ADDR_ARRAY(peerMac)); - return eSIR_FAILURE; - } - - psessionEntry = peFindSessionBySessionId(pMac, - setupPeer->tdls_sessionId) ; - - if(NULL == psessionEntry) - { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("limTdlsLinkEstablish: sessionID %d is not found"), setupPeer->tdls_sessionId); - VOS_ASSERT(0) ; - return eHAL_STATUS_FAILURE; - } - - pStaDs = dphLookupHashEntry(pMac, peerMac, &aid, &psessionEntry->dph.dphHashTable) ; - if(pStaDs == NULL) { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("limTdlsLinkEstablish: cannot find peer mac " - "in hash table: "MAC_ADDRESS_STR), - MAC_ADDR_ARRAY(peerMac)); - return eSIR_FAILURE; - } - - vos_mem_set( ( tANI_U8* )&tdlsPtiTemplate, - sizeof( tDot11fTDLSPeerTrafficInd ), 0 ); - - /* - * setup Fixed fields, - */ - tdlsPtiTemplate.Category.category = SIR_MAC_ACTION_TDLS; - tdlsPtiTemplate.Action.action = SIR_MAC_TDLS_PEER_TRAFFIC_IND; - tdlsPtiTemplate.DialogToken.token = 0 ; /* filled by firmware at the time of transmission */ - /* CHECK_PTI_LINK_IDENTIFIER_INITIATOR_ADDRESS: initator address should be TDLS link setup's initiator address, - then below code makes such an way */ - PopulateDot11fLinkIden( pMac, psessionEntry, &tdlsPtiTemplate.LinkIdentifier, - peerMac, !setupPeer->tdls_bIsResponder) ; - - /* PUBufferStatus will be filled by firmware at the time of transmission */ - tdlsPtiTemplate.PUBufferStatus.present = 1; - - /* TODO: get ExtendedCapabilities IE */ - - /* - * now we pack it. First, how much space are we going to need? - */ - status = dot11fGetPackedTDLSPeerTrafficIndSize ( pMac, &tdlsPtiTemplate, &nPayload); - if ( DOT11F_FAILED( status ) ) - { - limLog( pMac, LOGP, FL("Failed to calculate the packed size for a PTI template (0x%08x)."), status ); - /* We'll fall back on the worst case scenario: */ - nPayload = sizeof( tdlsPtiTemplate ); - } - else if ( DOT11F_WARNED( status ) ) - { - limLog( pMac, LOGW, FL("There were warnings while calculating the packed size for a PTI template (0x%08x)."), status ); - } - - /* - * This frame is going out from PE as data frames with special ethertype - * 89-0d. - * 8 bytes of RFC 1042 header - */ - - nBytes = nPayload + sizeof( tSirMacMgmtHdr ) - + sizeof( eth_890d_header ) - + PAYLOAD_TYPE_TDLS_SIZE ; - - if(nBytes > 64) { - limLog( pMac, LOGE, FL("required memory for PTI frame is %ld, but reserved only 64."), nBytes); - nBytes = 64; - } - /* zero out the memory */ - vos_mem_set( pFrame, sizeof(pFrame), 0 ); - - /* fill out the buffer descriptor */ - - header_offset = limPrepareTdlsFrameHeader(pMac, pFrame, - LINK_IDEN_ADDR_OFFSET(tdlsPtiTemplate), TDLS_LINK_AP, !setupPeer->tdls_bIsResponder, psessionEntry) ; - - status = dot11fPackTDLSPeerTrafficInd ( pMac, &tdlsPtiTemplate, pFrame - + header_offset, nPayload, &nPayload ); - - if ( DOT11F_FAILED( status ) ) - { - limLog( pMac, LOGE, FL("Failed to pack a PTI template (0x%08x)."), - status ); - return eSIR_FAILURE; - } - else if ( DOT11F_WARNED( status ) ) - { - limLog( pMac, LOGW, FL("There were warnings while packing TDLS " - "Peer Traffic Indication (0x%08x)."), status ); - } - - LIM_LOG_TDLS(VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, ("bIsResponder=%d, header_offset=%ld, linkIdenOffset=%d, ptiBufStatusOffset=%d "), - setupPeer->tdls_bIsResponder, header_offset, PTI_LINK_IDEN_OFFSET, PTI_BUF_STATUS_OFFSET)); - - limSendTdlsLinkEstablish(pMac, setupPeer->tdls_bIsResponder, - header_offset+PTI_LINK_IDEN_OFFSET, header_offset+PTI_BUF_STATUS_OFFSET, - nBytes, pFrame, (tANI_U8 *)&setupPeer->tdlsPeerExtCaps); - - return eSIR_SUCCESS; -} - -/* -* Prepare link teardown message for HAL from peer_mac -* -*/ -static tSirRetStatus limTdlsLinkTeardown(tpAniSirGlobal pMac, tSirMacAddr peerMac) -{ - tDphHashNode *pStaDs = NULL ; - tANI_U16 aid = 0 ; - tLimTdlsLinkSetupPeer *setupPeer = NULL ; - tpPESession psessionEntry = NULL ; - - - limTdlsFindLinkPeer(pMac, peerMac, &setupPeer) ; - if(NULL == setupPeer) { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("limTdlsLinkTeardown: cannot find peer mac " - "in tdls linksetup list: " - MAC_ADDRESS_STR), MAC_ADDR_ARRAY(peerMac)); - return eSIR_FAILURE; - } - - psessionEntry = peFindSessionBySessionId(pMac, - setupPeer->tdls_sessionId) ; - - if(NULL == psessionEntry) - { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("limTdlsLinkTeardown: sessionID %d is not found"), setupPeer->tdls_sessionId); - VOS_ASSERT(0) ; - return eHAL_STATUS_FAILURE; - } - - - - pStaDs = dphLookupHashEntry(pMac, peerMac, &aid, &psessionEntry->dph.dphHashTable); - - if(pStaDs == NULL) { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("limTdlsLinkTeardown: cannot find peer mac " - "in hash table: " - MAC_ADDRESS_STR), MAC_ADDR_ARRAY(peerMac)); - return eSIR_FAILURE; - } - - limSendTdlsLinkTeardown(pMac, pStaDs->staIndex); - - return eSIR_SUCCESS; -} - -/* - * Prepare Discovery RSP message for SME, collect peerINfo for all the - * peers discovered and delete/clean discovery lists in PE. - */ - -static tSirTdlsDisRsp *tdlsPrepareTdlsDisRsp(tpAniSirGlobal pMac, - tSirTdlsDisRsp *disRsp, tANI_U8 disStaCount) -{ - tANI_U32 disMsgRspSize = sizeof(tSirTdlsDisRsp); - tANI_U8 status = eHAL_STATUS_SUCCESS ; - - /* - * allocate memory for tdls discovery response, allocated memory should - * be alloc_mem = tdlsStaCount * sizeof(peerinfo) - * + siezeof tSirTdlsDisRsp. - */ - disMsgRspSize += (disStaCount * sizeof(tSirTdlsPeerInfo)); - - /* now allocate memory */ - - disRsp = vos_mem_malloc(disMsgRspSize); - if ( NULL == disRsp ) - { - limLog(pMac, LOGP, FL("AllocateMemory failed for DIS RSP")); - return NULL ; - } - - if(disStaCount) - { - tLimDisResultList *tdlsDisRspList = pMac->lim.gLimTdlsDisResultList ; - tSirTdlsPeerInfo *peerInfo = &disRsp->tdlsDisPeerInfo[0] ; - - tLimDisResultList *currentNode = tdlsDisRspList ; - while(tdlsDisRspList != NULL) - { - - vos_mem_copy( (tANI_U8 *)peerInfo, - (tANI_U8 *) &tdlsDisRspList->tdlsDisPeerInfo, - sizeof(tSirTdlsPeerInfo)); - - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO, - ("Msg Sent to PE, peer MAC: "MAC_ADDRESS_STR), - MAC_ADDR_ARRAY(peerInfo->peerMac)); - disStaCount-- ; - peerInfo++ ; - currentNode = tdlsDisRspList ; - tdlsDisRspList = tdlsDisRspList->next ; - vos_mem_free(currentNode) ; - /* boundary condition check, may be fatal */ - if(((!disStaCount) && (tdlsDisRspList)) - || ((!tdlsDisRspList) && disStaCount)) - { - limLog(pMac, LOG1, FL("mismatch in dis sta count and " - "number of nodes in list")) ; - VOS_ASSERT(0) ; - return NULL ; - } - } /* end of while */ - - /* All discovery STA processed */ - pMac->lim.gLimTdlsDisResultList = NULL ; - - } /* end of if dis STA count */ - - return (disRsp) ; -} - -/* Send Teardown response back to PE */ - -void limSendSmeTdlsTeardownRsp(tpAniSirGlobal pMac, tSirResultCodes statusCode, - tSirMacAddr peerMac, tANI_U16 msgType) -{ - tSirMsgQ mmhMsg = {0} ; - tSirTdlsTeardownRsp *teardownRspMsg = NULL ; - tANI_U8 status = eHAL_STATUS_SUCCESS ; - - mmhMsg.type = msgType ; - - teardownRspMsg = vos_mem_malloc(sizeof(tSirTdlsTeardownRsp)); - if ( NULL == teardownRspMsg ) - { - VOS_ASSERT(0) ; - } - vos_mem_copy( teardownRspMsg->peerMac, (tANI_U8 *)peerMac, - sizeof(tSirMacAddr)) ; - teardownRspMsg->statusCode = statusCode ; - mmhMsg.bodyptr = teardownRspMsg ; - mmhMsg.bodyval = 0; - limSysProcessMmhMsgApi(pMac, &mmhMsg, ePROT); - - return ; - -} - -/* - * Send Link start RSP back to SME after link is setup or failed - */ -void limSendSmeTdlsLinkStartRsp(tpAniSirGlobal pMac, - tSirResultCodes statusCode, - tSirMacAddr peerMac, - tANI_U16 msgType) -{ - tSirMsgQ mmhMsg = {0} ; - tSirTdlsLinksetupRsp *setupRspMsg = NULL ; - tANI_U8 status = eHAL_STATUS_SUCCESS ; - - mmhMsg.type = msgType ; - - setupRspMsg = vos_mem_malloc(sizeof(tSirTdlsLinksetupRsp)); - if ( NULL == setupRspMsg ) - { - VOS_ASSERT(0) ; - } - - vos_mem_copy( setupRspMsg->peerMac, (tANI_U8 *)peerMac, - sizeof(tSirMacAddr)) ; - setupRspMsg->statusCode = statusCode ; - mmhMsg.bodyptr = setupRspMsg ; - mmhMsg.bodyval = 0; - limSysProcessMmhMsgApi(pMac, &mmhMsg, ePROT); - - return ; -} - -/* - * Send TDLS discovery RSP back to SME - */ -void limSendSmeTdlsDisRsp(tpAniSirGlobal pMac, tSirResultCodes statusCode, - tANI_U16 msgType) -{ - tSirMsgQ mmhMsg = {0} ; - tSirTdlsDisRsp *tdlsDisRsp = NULL ; - - mmhMsg.type = msgType ; - - if(eSIR_SME_SUCCESS == statusCode) - { - tANI_U8 tdlsStaCount = pMac->lim.gLimTdlsDisStaCount ; - - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("no of TDLS STA discovered: %d"), tdlsStaCount) ; - tdlsDisRsp = tdlsPrepareTdlsDisRsp(pMac, tdlsDisRsp, tdlsStaCount) ; - - if(tdlsDisRsp) - { - tdlsDisRsp->numDisSta = tdlsStaCount ; - } - else - { - limLog(pMac, LOGP, FL("fatal failure for TDLS DIS RSP")); - VOS_ASSERT(0) ; - return ; - } - /* all Discovery STA is processed */ - pMac->lim.gLimTdlsDisStaCount = 0 ; - } - else - { - tdlsDisRsp = tdlsPrepareTdlsDisRsp(pMac, tdlsDisRsp, 0) ; - } - - tdlsDisRsp->statusCode = statusCode ; - mmhMsg.bodyptr = tdlsDisRsp ; - mmhMsg.bodyval = 0; - limSysProcessMmhMsgApi(pMac, &mmhMsg, ePROT); - - return ; -} - -/* - * Once Link is setup with PEER, send Add STA ind to SME - */ -static eHalStatus limSendSmeTdlsAddPeerInd(tpAniSirGlobal pMac, - tANI_U8 sessionId, tDphHashNode *pStaDs, tANI_U8 status) -{ - tSirMsgQ mmhMsg = {0} ; - tSirTdlsPeerInd *peerInd = NULL ; - mmhMsg.type = eWNI_SME_ADD_TDLS_PEER_IND ; - - peerInd = vos_mem_malloc(sizeof(tSirTdlsPeerInd)); - if ( NULL == peerInd ) - { - PELOGE(limLog(pMac, LOGE, FL("Failed to allocate memory"));) - return eSIR_FAILURE; - } - - vos_mem_copy( peerInd->peerMac, - (tANI_U8 *) pStaDs->staAddr, sizeof(tSirMacAddr)); - peerInd->sessionId = sessionId; - peerInd->staId = pStaDs->staIndex ; - peerInd->ucastSig = pStaDs->ucUcastSig ; - peerInd->bcastSig = pStaDs->ucBcastSig ; - peerInd->length = sizeof(tSmeIbssPeerInd) ; - - mmhMsg.bodyptr = peerInd ; - mmhMsg.bodyval = 0; - limSysProcessMmhMsgApi(pMac, &mmhMsg, ePROT); - - return eSIR_SUCCESS ; - -} - -/* - * Once link is teardown, send Del Peer Ind to SME - */ -static eHalStatus limSendSmeTdlsDelPeerInd(tpAniSirGlobal pMac, - tANI_U8 sessionId, tDphHashNode *pStaDs, tANI_U8 status) -{ - tSirMsgQ mmhMsg = {0} ; - tSirTdlsPeerInd *peerInd = NULL ; - mmhMsg.type = eWNI_SME_DELETE_TDLS_PEER_IND ; - - peerInd = vos_mem_malloc(sizeof(tSirTdlsPeerInd)); - if ( NULL == peerInd ) - { - PELOGE(limLog(pMac, LOGE, FL("Failed to allocate memory"));) - return eSIR_FAILURE; - } - - vos_mem_copy( peerInd->peerMac, - (tANI_U8 *) pStaDs->staAddr, sizeof(tSirMacAddr)); - peerInd->sessionId = sessionId; - peerInd->staId = pStaDs->staIndex ; - peerInd->ucastSig = pStaDs->ucUcastSig ; - peerInd->bcastSig = pStaDs->ucBcastSig ; - peerInd->length = sizeof(tSmeIbssPeerInd) ; - - mmhMsg.bodyptr = peerInd ; - - mmhMsg.bodyval = 0; - limSysProcessMmhMsgApi(pMac, &mmhMsg, ePROT); - return eSIR_SUCCESS ; - -} - -/* - * Send Link setup Ind to SME, This is the case where, link setup is - * initiated by peer STA - */ -static eHalStatus limSendSmeTdlsLinkSetupInd(tpAniSirGlobal pMac, - tSirMacAddr peerMac, tANI_U8 status) -{ - tSirMsgQ mmhMsg = {0} ; - tSirTdlsLinkSetupInd *setupInd = NULL ; - - mmhMsg.type = eWNI_SME_TDLS_LINK_START_IND ; - setupInd = vos_mem_malloc(sizeof(tSirTdlsLinkSetupInd)); - if ( NULL == setupInd ) - { - PELOGE(limLog(pMac, LOGE, FL("Failed to allocate memory"));) - return eSIR_FAILURE; - } - - vos_mem_copy( setupInd->peerMac, - (tANI_U8 *) peerMac, sizeof(tSirMacAddr)); - setupInd->length = sizeof(tSirTdlsLinkSetupInd); - setupInd->statusCode = status ; - mmhMsg.bodyptr = setupInd ; - mmhMsg.bodyval = 0; - limSysProcessMmhMsgApi(pMac, &mmhMsg, ePROT); - - return eSIR_SUCCESS ; - -} - -/* - * Setup RSP timer handler - */ -void limTdlsLinkSetupRspTimerHandler(void *pMacGlobal, tANI_U32 timerId) -{ - - tANI_U32 statusCode; - tSirMsgQ msg; - tpAniSirGlobal pMac = (tpAniSirGlobal)pMacGlobal; - - /* Prepare and post message to LIM Message Queue */ - - msg.type = SIR_LIM_TDLS_LINK_SETUP_RSP_TIMEOUT; - msg.bodyptr = NULL ; - msg.bodyval = timerId ; - - if ((statusCode = limPostMsgApi(pMac, &msg)) != eSIR_SUCCESS) - limLog(pMac, LOGE, - FL("posting message %X to LIM failed, reason=%d"), - msg.type, statusCode); - return ; -} - -/* - * Link setup CNF timer - */ -void limTdlsLinkSetupCnfTimerHandler(void *pMacGlobal, tANI_U32 timerId) -{ - - tANI_U32 statusCode; - tSirMsgQ msg; - tpAniSirGlobal pMac = (tpAniSirGlobal)pMacGlobal; - - // Prepare and post message to LIM Message Queue - - msg.type = SIR_LIM_TDLS_LINK_SETUP_CNF_TIMEOUT; - msg.bodyptr = NULL ; - msg.bodyval = timerId ; - - if ((statusCode = limPostMsgApi(pMac, &msg)) != eSIR_SUCCESS) - limLog(pMac, LOGE, - FL("posting message %X to LIM failed, reason=%d"), - msg.type, statusCode); - return ; -} - -/* - * start TDLS timer - */ -void limStartTdlsTimer(tpAniSirGlobal pMac, tANI_U8 sessionId, TX_TIMER *timer, - tANI_U32 timerId, tANI_U16 timerType, tANI_U32 timerMsg) -{ - tANI_U32 cfgValue = (timerMsg == SIR_LIM_TDLS_LINK_SETUP_RSP_TIMEOUT) - ? WNI_CFG_TDLS_LINK_SETUP_RSP_TIMEOUT - : WNI_CFG_TDLS_LINK_SETUP_CNF_TIMEOUT ; - - void *timerFunc = (timerMsg == SIR_LIM_TDLS_LINK_SETUP_RSP_TIMEOUT) - ? (limTdlsLinkSetupRspTimerHandler) - : limTdlsLinkSetupCnfTimerHandler ; - - /* TODO: Read timer vals from CFG */ - - cfgValue = SYS_MS_TO_TICKS(cfgValue); - /* - * create TDLS discovery response wait timer and activate it - */ - if (tx_timer_create(timer, "TDLS link setup timers", timerFunc, - timerId, cfgValue, 0, TX_NO_ACTIVATE) != TX_SUCCESS) - { - limLog(pMac, LOGP, - FL("could not create TDLS discovery response wait timer")); - return; - } - - //assign appropriate sessionId to the timer object - timer->sessionId = sessionId; - - MTRACE(macTrace(pMac, TRACE_CODE_TIMER_ACTIVATE, 0, - eLIM_TDLS_DISCOVERY_RSP_WAIT)); - if (tx_timer_activate(timer) != TX_SUCCESS) - { - limLog(pMac, LOGP, FL("TDLS link setup timer activation failed!")); - return ; - } - - return ; - -} -#endif /* * Once Link is setup with PEER, send Add STA ind to SME @@ -4798,41 +2452,6 @@ eHalStatus limProcessTdlsAddStaRsp(tpAniSirGlobal pMac, void *msg, pStaDs->ucBcastSig = pAddStaParams->ucBcastSig; pStaDs->mlmStaContext.mlmState = eLIM_MLM_LINK_ESTABLISHED_STATE; pStaDs->valid = 1 ; -#ifdef FEATURE_WLAN_TDLS_INTERNAL - status = limSendSmeTdlsAddPeerInd(pMac, psessionEntry->smeSessionId, - pStaDs, eSIR_SUCCESS ) ; - if(eSIR_FAILURE == status) - { - VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR, - ("Peer IND msg to SME failed")) ; - vos_mem_free( pAddStaParams ); - return eSIR_FAILURE ; - } - - /* - * Now, there is two things a) ADD STA RSP for ADD STA request sent - * after recieving discovery request from Peer. - * now we have to send discovery response, if there is any pending - * discovery equest.. - */ - do - { - tSirTdlsPeerInfo *peerInfo = limTdlsFindDisPeer(pMac, - pAddStaParams->staMac) ; - - - if(peerInfo) - { - /* - * send TDLS discovery response frame on direct link, state machine - * is rolling.., once discovery response is get Acked, we will - * send response to SME based on TxComplete callback results - */ - limSendTdlsDisRspFrame(pMac, peerInfo->peerMac, peerInfo->dialog, psessionEntry) ; - peerInfo->tdlsPeerState = TDLS_DIS_RSP_SENT_WAIT_STATE ; - } - } while(0) ; -#endif add_sta_error: status = limSendSmeTdlsAddStaRsp(pMac, psessionEntry->smeSessionId, pAddStaParams->staMac, pAddStaParams->updateSta, pStaDs, status) ; @@ -4951,78 +2570,6 @@ void PopulateDot11fTdlsExtCapability(tpAniSirGlobal pMac, return ; } -#ifdef FEATURE_WLAN_TDLS_INTERNAL -/* - * Public Action frame common processing - * This Function will be moved/merged to appropriate place - * once other public action frames (particularly 802.11k) - * is in place - */ -void limProcessTdlsPublicActionFrame(tpAniSirGlobal pMac, tANI_U32 *pBd, - tpPESession psessionEntry) -{ - tANI_U32 frameLen = WDA_GET_RX_PAYLOAD_LEN(pBd) ; - tANI_U8 *pBody = WDA_GET_RX_MPDU_DATA(pBd) ; - tANI_S8 rssi = (tANI_S8)WDA_GET_RX_RSSI_DB(pBd) ; - - limProcessTdlsDisRspFrame(pMac, pBody, frameLen, rssi, psessionEntry) ; - return ; -} - -eHalStatus limTdlsPrepareSetupReqFrame(tpAniSirGlobal pMac, - tLimTdlsLinkSetupInfo *linkSetupInfo, - tANI_U8 dialog, tSirMacAddr peerMac, - tpPESession psessionEntry) -{ - tLimTdlsLinkSetupPeer *setupPeer = NULL ; - - /* - * we allocate the TDLS setup Peer Memory here, we will free'd this - * memory after teardown, if the link is successfully setup or - * free this memory if any timeout is happen in link setup procedure - */ - - setupPeer = vos_mem_malloc(sizeof( tLimTdlsLinkSetupPeer )); - if ( NULL == setupPeer ) - { - limLog( pMac, LOGP, - FL( "Unable to allocate memory during ADD_STA" )); - VOS_ASSERT(0) ; - return eSIR_MEM_ALLOC_FAILED; - } - setupPeer->dialog = dialog ; - setupPeer->tdls_prev_link_state = setupPeer->tdls_link_state ; - setupPeer->tdls_link_state = TDLS_LINK_SETUP_START_STATE ; - - /* TDLS_sessionize: remember sessionId for future */ - setupPeer->tdls_sessionId = psessionEntry->peSessionId; - setupPeer->tdls_bIsResponder = 1; - - /* - * we only populate peer MAC, so it can assit us to find the - * TDLS peer after response/or after response timeout - */ - vos_mem_copy(setupPeer->peerMac, peerMac, - sizeof(tSirMacAddr)) ; - /* format TDLS discovery request frame and transmit it */ - limSendTdlsLinkSetupReqFrame(pMac, peerMac, dialog, psessionEntry, NULL, 0) ; - - limStartTdlsTimer(pMac, psessionEntry->peSessionId, - &setupPeer->gLimTdlsLinkSetupRspTimeoutTimer, - (tANI_U32)setupPeer->peerMac, - WNI_CFG_TDLS_LINK_SETUP_RSP_TIMEOUT, - SIR_LIM_TDLS_LINK_SETUP_RSP_TIMEOUT) ; - /* update setup peer list */ - setupPeer->next = linkSetupInfo->tdlsLinkSetupList ; - linkSetupInfo->tdlsLinkSetupList = setupPeer ; - - /* in case of success, eWNI_SME_TDLS_LINK_START_RSP is sent back to - * SME later when TDLS setup cnf TX complete is successful. --> see - * limTdlsSetupCnfTxComplete() - */ - return eSIR_SUCCESS ; -} -#endif /* * Process Send Mgmt Request from SME and transmit to AP. diff --git a/CORE/MAC/src/pe/lim/limSendMessages.c b/CORE/MAC/src/pe/lim/limSendMessages.c index df4895de5c35..834d15f14af5 100644 --- a/CORE/MAC/src/pe/lim/limSendMessages.c +++ b/CORE/MAC/src/pe/lim/limSendMessages.c @@ -258,6 +258,7 @@ tSirRetStatus limSendSwitchChnlParams(tpAniSirGlobal pMac, vos_mem_copy( pChnlParams->bssId, pSessionEntry->bssId, sizeof(tSirMacAddr) ); pChnlParams->peSessionId = peSessionId; pChnlParams->vhtCapable = pSessionEntry->vhtCapability; + pChnlParams->dot11_mode = pSessionEntry->dot11mode; /*Set DFS flag for DFS channel*/ if (vos_nv_getChannelEnabledState(chnlNumber) == NV_CHANNEL_DFS) @@ -895,106 +896,6 @@ tSirRetStatus limSetUserPos(tpAniSirGlobal pMac, #endif -#ifdef FEATURE_WLAN_TDLS_INTERNAL -/** --------------------------------------------------------- -\fn limSendTdlsLinkEstablish -\brief LIM sends a message to HAL to set tdls direct link -\param tpAniSirGlobal pMac -\param -\return None - -----------------------------------------------------------*/ -tSirRetStatus limSendTdlsLinkEstablish(tpAniSirGlobal pMac, tANI_U8 bIsPeerResponder, tANI_U8 linkIdenOffset, - tANI_U8 ptiBufStatusOffset, tANI_U8 ptiFrameLen, tANI_U8 *ptiFrame, tANI_U8 *extCapability) -{ - tSirMsgQ msgQ; - tSirRetStatus retCode; - tpSirTdlsLinkEstablishInd pTdlsLinkEstablish = NULL; - - // Allocate memory. - pTdlsLinkEstablish = vos_mem_malloc(sizeof(tSirTdlsLinkEstablishInd)); - if ( NULL == pTdlsLinkEstablish ) - { - limLog( pMac, LOGP, - FL( "Unable to allocate memory while sending Tdls Link Establish " )); - - retCode = eSIR_SME_RESOURCES_UNAVAILABLE; - return retCode; - } - - vos_mem_set((tANI_U8 *) pTdlsLinkEstablish, sizeof(tSirTdlsLinkEstablishInd), 0); - - pTdlsLinkEstablish->bIsResponder = !!bIsPeerResponder; - pTdlsLinkEstablish->linkIdenOffset = linkIdenOffset; - pTdlsLinkEstablish->ptiBufStatusOffset = ptiBufStatusOffset; - pTdlsLinkEstablish->ptiTemplateLen = ptiFrameLen; - /* Copy ptiFrame template */ - vos_mem_copy(pTdlsLinkEstablish->ptiTemplateBuf, ptiFrame, ptiFrameLen); - /* Copy extended capabilities */ - vos_mem_copy((tANI_U8 *) pTdlsLinkEstablish->extCapability, extCapability, sizeof(pTdlsLinkEstablish->extCapability)); - - msgQ.type = SIR_HAL_TDLS_LINK_ESTABLISH; - msgQ.reserved = 0; - msgQ.bodyptr = pTdlsLinkEstablish; - msgQ.bodyval = 0; - - MTRACE(macTraceMsgTx(pMac, 0, msgQ.type)); - - retCode = (tANI_U32)wdaPostCtrlMsg(pMac, &msgQ); - if (retCode != eSIR_SUCCESS) - { - vos_mem_free(pTdlsLinkEstablish); - limLog(pMac, LOGP, FL("Posting tdls link establish %d failed, reason = %x "), retCode); - } - - return retCode; -} - -/** --------------------------------------------------------- -\fn limSendTdlsLinkTeardown -\brief LIM sends a message to HAL to indicate tdls direct link is teardowned -\param tpAniSirGlobal pMac -\param -\return None - -----------------------------------------------------------*/ -tSirRetStatus limSendTdlsLinkTeardown(tpAniSirGlobal pMac, tANI_U16 staId) -{ - tSirMsgQ msgQ; - tSirRetStatus retCode; - tpSirTdlsLinkTeardownInd pTdlsLinkTeardown = NULL; - - // Allocate memory. - pTdlsLinkTeardown = vos_mem_malloc(sizeof(tSirTdlsLinkTeardownInd)); - if ( NULL == pTdlsLinkTeardown ) - { - limLog( pMac, LOGP, - FL( "Unable to allocate memory while sending Tdls Link Teardown " )); - - retCode = eSIR_SME_RESOURCES_UNAVAILABLE; - return retCode; - } - - vos_mem_set((tANI_U8 *) pTdlsLinkTeardown, sizeof(tSirTdlsLinkTeardownInd), 0); - - pTdlsLinkTeardown->staId = staId; - - msgQ.type = SIR_HAL_TDLS_LINK_TEARDOWN; - msgQ.reserved = 0; - msgQ.bodyptr = pTdlsLinkTeardown; - msgQ.bodyval = 0; - - MTRACE(macTraceMsgTx(pMac, 0, msgQ.type)); - - retCode = (tANI_U32)wdaPostCtrlMsg(pMac, &msgQ); - if (retCode != eSIR_SUCCESS) - { - vos_mem_free(pTdlsLinkTeardown); - limLog(pMac, LOGP, FL("Posting tdls link teardown %d failed, reason = %x "), retCode); - } - - return retCode; -} - -#endif #ifdef WLAN_FEATURE_11W /** --------------------------------------------------------- diff --git a/CORE/MAC/src/pe/lim/limSendMessages.h b/CORE/MAC/src/pe/lim/limSendMessages.h index 3d0136c289c7..5258cae97bbd 100644 --- a/CORE/MAC/src/pe/lim/limSendMessages.h +++ b/CORE/MAC/src/pe/lim/limSendMessages.h @@ -101,11 +101,6 @@ void limSetActiveEdcaParams(tpAniSirGlobal pMac, tSirMacEdcaParamRecord *plocalE tSirRetStatus limSendBeaconFilterInfo(tpAniSirGlobal pMac, tpPESession psessionEntry); -#ifdef FEATURE_WLAN_TDLS_INTERNAL -tSirRetStatus limSendTdlsLinkEstablish(tpAniSirGlobal pMac, tANI_U8 bIsPeerResponder, tANI_U8 linkIdenOffset, \ - tANI_U8 ptiBufStatusOffset, tANI_U8 ptiFrameLen, tANI_U8 *ptiFrame, tANI_U8 *extCapability); -tSirRetStatus limSendTdlsLinkTeardown(tpAniSirGlobal pMac, tANI_U16 staId); -#endif #ifdef WLAN_FEATURE_11W tSirRetStatus limSendExcludeUnencryptInd(tpAniSirGlobal pMac, tANI_BOOLEAN excludeUnenc, diff --git a/CORE/MAC/src/pe/lim/limTimerUtils.c b/CORE/MAC/src/pe/lim/limTimerUtils.c index 0c6ac73f99c7..6918a391b861 100644 --- a/CORE/MAC/src/pe/lim/limTimerUtils.c +++ b/CORE/MAC/src/pe/lim/limTimerUtils.c @@ -455,39 +455,6 @@ limCreateTimers(tpAniSirGlobal pMac) FL("call to create background scan timer failed")); goto err_timer; } -#ifdef FEATURE_WLAN_TDLS_INTERNAL - /* - * create TDLS timers.. - * a) TDLS discovery response timer. - */ - - if (wlan_cfgGetInt(pMac, WNI_CFG_ASSOCIATION_FAILURE_TIMEOUT, - &cfgValue) != eSIR_SUCCESS) - { - /* - * Could not get discovery response Timeout value - * from CFG. Log error. - */ - limLog(pMac, LOGP, - FL("could not retrieve ReassocFailureTimeout value")); - } - cfgValue = SYS_MS_TO_TICKS(cfgValue); - - /* - * create TDLS discovery response wait timer and activate it later - */ - if (tx_timer_create(&pMac->lim.limTimers.gLimTdlsDisRspWaitTimer, - "TDLS discovery response WAIT", - limTimerHandler, - SIR_LIM_TDLS_DISCOVERY_RSP_WAIT, - cfgValue, 0, - TX_NO_ACTIVATE) != TX_SUCCESS) - { - limLog(pMac, LOGP, - FL("could not create TDLS discovery response wait timer")); - goto err_timer; - } -#endif } diff --git a/CORE/MAC/src/pe/lim/limTimerUtils.h b/CORE/MAC/src/pe/lim/limTimerUtils.h index 266a68fc5554..e7fca727cd00 100644 --- a/CORE/MAC/src/pe/lim/limTimerUtils.h +++ b/CORE/MAC/src/pe/lim/limTimerUtils.h @@ -73,11 +73,6 @@ enum #ifdef FEATURE_WLAN_ESE eLIM_TSM_TIMER, #endif -#ifdef FEATURE_WLAN_TDLS_INTERNAL - eLIM_TDLS_DISCOVERY_RSP_WAIT, - eLIM_TDLS_LINK_SETUP_RSP_TIMEOUT, - eLIM_TDLS_LINK_SETUP_CNF_TIMEOUT, -#endif eLIM_DISASSOC_ACK_TIMER, eLIM_DEAUTH_ACK_TIMER, eLIM_PERIODIC_JOIN_PROBE_REQ_TIMER, diff --git a/CORE/MAC/src/pe/lim/limTrace.c b/CORE/MAC/src/pe/lim/limTrace.c index 4104c92e84f5..5f1e1981d6fe 100644 --- a/CORE/MAC/src/pe/lim/limTrace.c +++ b/CORE/MAC/src/pe/lim/limTrace.c @@ -150,15 +150,15 @@ void limTraceDump(tpAniSirGlobal pMac, tpvosTraceRecord pRecord, tANI_U16 recInd switch (pRecord->code) { case TRACE_CODE_MLM_STATE: - limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session, + limLog(pMac, LOGE, "%04d %012llu S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session, "MLM State:", limTraceGetMlmStateString((tANI_U16)pRecord->data), pRecord->data ); break; case TRACE_CODE_SME_STATE: - limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session, + limLog(pMac, LOGE, "%04d %012llu S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session, "SME State:", limTraceGetSmeStateString((tANI_U16)pRecord->data), pRecord->data ); break; case TRACE_CODE_TX_MGMT: - limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session, + limLog(pMac, LOGE, "%04d %012llu S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session, "TX Mgmt:", frameSubtypeStr[pRecord->data], pRecord->data ); break; @@ -169,84 +169,84 @@ void limTraceDump(tpAniSirGlobal pMac, tpvosTraceRecord pRecord, tANI_U16 recInd } else { - limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(%d) SN: %d ", recIndex, pRecord->time, pRecord->session, + limLog(pMac, LOGE, "%04d %012llu S%d %-14s %-30s(%d) SN: %d ", recIndex, pRecord->time, pRecord->session, "RX Mgmt:", frameSubtypeStr[LIM_TRACE_GET_SUBTYPE(pRecord->data)], LIM_TRACE_GET_SUBTYPE(pRecord->data), LIM_TRACE_GET_SSN(pRecord->data) ); } break; case TRACE_CODE_RX_MGMT_DROP: - limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(%d) ", recIndex, pRecord->time, pRecord->session, + limLog(pMac, LOGE, "%04d %012llu S%d %-14s %-30s(%d) ", recIndex, pRecord->time, pRecord->session, "Drop RX Mgmt:", __limTraceGetMgmtDropReasonString((tANI_U16)pRecord->data), pRecord->data); break; case TRACE_CODE_RX_MGMT_TSF: - limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s0x%x(%d) ", recIndex, pRecord->time, pRecord->session, + limLog(pMac, LOGE, "%04d %012llu S%d %-14s %-30s0x%x(%d) ", recIndex, pRecord->time, pRecord->session, "RX Mgmt TSF:", " ", pRecord->data, pRecord->data ); break; case TRACE_CODE_TX_COMPLETE: - limLog(pMac, LOGE, "%04d %012u S%d %-14s %d " , recIndex, pRecord->time, pRecord->session, + limLog(pMac, LOGE, "%04d %012llu S%d %-14s %d " , recIndex, pRecord->time, pRecord->session, "TX Complete", pRecord->data ); break; case TRACE_CODE_TX_SME_MSG: - limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session, + limLog(pMac, LOGE, "%04d %012llu S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session, "TX SME Msg:", macTraceGetSmeMsgString((tANI_U16)pRecord->data), pRecord->data ); break; case TRACE_CODE_RX_SME_MSG: - limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session, + limLog(pMac, LOGE, "%04d %012llu S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session, LIM_TRACE_GET_DEFRD_OR_DROPPED(pRecord->data) ? "Def/Drp LIM Msg:": "RX Sme Msg:", macTraceGetSmeMsgString((tANI_U16)pRecord->data), pRecord->data ); break; case TRACE_CODE_TX_WDA_MSG: - limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session, + limLog(pMac, LOGE, "%04d %012llu S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session, "TX WDA Msg:", macTraceGetWdaMsgString((tANI_U16)pRecord->data), pRecord->data ); break; case TRACE_CODE_RX_WDA_MSG: - limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session, + limLog(pMac, LOGE, "%04d %012llu S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session, LIM_TRACE_GET_DEFRD_OR_DROPPED(pRecord->data) ? "Def/Drp LIM Msg:": "RX WDA Msg:", macTraceGetWdaMsgString((tANI_U16)pRecord->data), pRecord->data ); break; case TRACE_CODE_TX_LIM_MSG: - limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session, + limLog(pMac, LOGE, "%04d %012llu S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session, "TX LIM Msg:", macTraceGetLimMsgString((tANI_U16)pRecord->data), pRecord->data ); break; case TRACE_CODE_RX_LIM_MSG: - limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session, + limLog(pMac, LOGE, "%04d %012llu S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session, LIM_TRACE_GET_DEFRD_OR_DROPPED(pRecord->data) ? "Def/Drp LIM Msg:": "RX LIM Msg", macTraceGetLimMsgString((tANI_U16)pRecord->data), pRecord->data ); break; case TRACE_CODE_TX_CFG_MSG: - limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session, + limLog(pMac, LOGE, "%04d %012llu S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session, "TX CFG Msg:", macTraceGetCfgMsgString((tANI_U16)pRecord->data), pRecord->data ); break; case TRACE_CODE_RX_CFG_MSG: - limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session, + limLog(pMac, LOGE, "%04d %012llu S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session, LIM_TRACE_GET_DEFRD_OR_DROPPED(pRecord->data) ? "Def/Drp LIM Msg:": "RX CFG Msg:", macTraceGetCfgMsgString((tANI_U16)MAC_TRACE_GET_MSG_ID(pRecord->data)), pRecord->data ); break; case TRACE_CODE_TIMER_ACTIVATE: - limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session, + limLog(pMac, LOGE, "%04d %012llu S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session, "Timer Actvtd", __limTraceGetTimerString((tANI_U16)pRecord->data), pRecord->data ); break; case TRACE_CODE_TIMER_DEACTIVATE: - limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session, + limLog(pMac, LOGE, "%04d %012llu S%d %-14s %-30s(0x%x) ", recIndex, pRecord->time, pRecord->session, "Timer DeActvtd", __limTraceGetTimerString((tANI_U16)pRecord->data), pRecord->data ); break; case TRACE_CODE_INFO_LOG: - limLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x) \n", recIndex, pRecord->time, pRecord->session, + limLog(pMac, LOGE, "%04d %012llu S%d %-14s %-30s(0x%x) \n", recIndex, pRecord->time, pRecord->session, "INFORMATION_LOG", macTraceGetInfoLogString((tANI_U16)pRecord->data), pRecord->data ); break; default : - limLog(pMac, LOGE, "%04d %012u S%d %-14s(%d) (0x%x) ", recIndex, pRecord->time, pRecord->session, + limLog(pMac, LOGE, "%04d %012llu S%d %-14s(%d) (0x%x) ", recIndex, pRecord->time, pRecord->session, "Unknown Code", pRecord->code, pRecord->data ); break; } diff --git a/CORE/MAC/src/pe/lim/limTypes.h b/CORE/MAC/src/pe/lim/limTypes.h index 0816410ca0f1..b6a4d76e40f3 100644 --- a/CORE/MAC/src/pe/lim/limTypes.h +++ b/CORE/MAC/src/pe/lim/limTypes.h @@ -703,18 +703,6 @@ tSirRetStatus limSendRadioMeasureReportActionFrame(tpAniSirGlobal, tANI_U8, tANI void limProcessIappFrame(tpAniSirGlobal, tANI_U8 *,tpPESession); #endif -#ifdef FEATURE_WLAN_TDLS_INTERNAL -tSirRetStatus limSendTdlsDisReqFrame(tpAniSirGlobal pMac, - tSirMacAddr peer_mac, tANI_U8 dialog, tpPESession psessionEntry); -tSirRetStatus limSendTdlsLinkSetupReqFrame(tpAniSirGlobal pMac, - tSirMacAddr peerMac, tANI_U8 dialog, tpPESession psessionEntry, - tANI_U8* addIe, tANI_U16 len); - -eHalStatus limTdlsPrepareSetupReqFrame(tpAniSirGlobal pMac, - tLimTdlsLinkSetupInfo *linkSetupInfo, - tANI_U8 dialog, tSirMacAddr peerMac, - tpPESession psessionEntry); -#endif #ifdef FEATURE_WLAN_TDLS void limInitTdlsData(tpAniSirGlobal, tpPESession); tSirRetStatus limProcessSmeTdlsMgmtSendReq(tpAniSirGlobal pMac, @@ -1064,24 +1052,6 @@ void limSendP2PActionFrame(tpAniSirGlobal pMac, tpSirMsgQ pMsg); void limAbortRemainOnChan(tpAniSirGlobal pMac, tANI_U8 sessionId); tSirRetStatus __limProcessSmeNoAUpdate(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf); void limProcessRegdDefdSmeReqAfterNOAStart(tpAniSirGlobal pMac); -#ifdef FEATURE_WLAN_TDLS_INTERNAL -void limProcessTdlsFrame(tpAniSirGlobal, tANI_U32 *); -void limProcessTdlsPublicActionFrame(tpAniSirGlobal pMac, tANI_U32 *pBd, - tpPESession) ; -#ifdef FEATURE_WLAN_TDLS_NEGATIVE -#define LIM_TDLS_NEGATIVE_WRONG_BSSID_IN_DSCV_REQ 0x1 /* 5.1.4-5 */ -#define LIM_TDLS_NEGATIVE_WRONG_BSSID_IN_SETUP_REQ 0x2 /* 5.2.4-16 */ -#define LIM_TDLS_NEGATIVE_STATUS_37_IN_SETUP_CNF 0x4 /* 5.2.4-10 */ -#define LIM_TDLS_NEGATIVE_SEND_REQ_TO_SETUP_REQ 0x8 /* 5.2.4-20/32 */ -#define LIM_TDLS_NEGATIVE_RSP_TIMEOUT_TO_SETUP_REQ 0x10 /* 5.2.3.4 */ -#define LIM_TDLS_NEGATIVE_TREAT_TDLS_PROHIBIT_AP 0x20 /* 5.2.4-49 */ - /* following is not paticularily tested in WFA test plan, but will help to validate our TDLS behavior in-house */ -#define LIM_TDLS_NEGATIVE_WRONG_BSSID_IN_DSCV_RSP 0x40 -#define LIM_TDLS_NEGATIVE_WRONG_BSSID_IN_SETUP_RSP 0x80 - -void limTdlsSetNegativeBehavior(tpAniSirGlobal pMac, tANI_U8 value, tANI_BOOLEAN on); -#endif -#endif void limProcessDisassocAckTimeout(tpAniSirGlobal pMac); void limProcessDeauthAckTimeout(tpAniSirGlobal pMac); diff --git a/CORE/MAC/src/pe/lim/limUtils.h b/CORE/MAC/src/pe/lim/limUtils.h index 107ab9d70c6b..9ec2556ff79c 100644 --- a/CORE/MAC/src/pe/lim/limUtils.h +++ b/CORE/MAC/src/pe/lim/limUtils.h @@ -567,12 +567,6 @@ void peSetResumeChannel(tpAniSirGlobal pMac, tANI_U16 channel, ePhyChanBondState --------------------------------------------------------------------------*/ void peGetResumeChannel(tpAniSirGlobal pMac, tANI_U8* resumeChannel, ePhyChanBondState* resumePhyCbState); -#ifdef FEATURE_WLAN_TDLS_INTERNAL -tANI_U8 limTdlsFindLinkPeer(tpAniSirGlobal pMac, tSirMacAddr peerMac, tLimTdlsLinkSetupPeer **setupPeer); -void limTdlsDelLinkPeer(tpAniSirGlobal pMac, tSirMacAddr peerMac); -void limStartTdlsTimer(tpAniSirGlobal pMac, tANI_U8 sessionId, TX_TIMER *timer, tANI_U32 timerId, - tANI_U16 timerType, tANI_U32 timerMsg); -#endif void limGetShortSlotFromPhyMode(tpAniSirGlobal pMac, tpPESession psessionEntry, tANI_U32 phyMode, tANI_U8 *pShortSlotEnable); diff --git a/CORE/MAC/src/pe/pmm/pmmApi.c b/CORE/MAC/src/pe/pmm/pmmApi.c index 59faacfe941e..f19742704859 100644 --- a/CORE/MAC/src/pe/pmm/pmmApi.c +++ b/CORE/MAC/src/pe/pmm/pmmApi.c @@ -3155,7 +3155,10 @@ tSirRetStatus pmmOffloadEnterBmpsReqHandler(tpAniSirGlobal pMac, if (NULL == pEnablePsReqParams) { pmmLog(pMac, LOGE, - FL("Memory allocation failed for pEnablePsReqParams")); + FL("Memory allocation failed for pEnablePsReqParams")); + limSendSmeRsp(pMac, eWNI_PMC_ENTER_BMPS_RSP, eSIR_FAILURE, + psessionEntry->smeSessionId, + psessionEntry->transactionId); return eSIR_MEM_ALLOC_FAILED; } @@ -3187,6 +3190,9 @@ tSirRetStatus pmmOffloadEnterBmpsReqHandler(tpAniSirGlobal pMac, { pmmLog(pMac, LOGE, FL("Posting WDA_ENTER_BMPS_REQ failed")); vos_mem_free(pEnablePsReqParams); + limSendSmeRsp(pMac, eWNI_PMC_ENTER_BMPS_RSP, eSIR_FAILURE, + psessionEntry->smeSessionId, + psessionEntry->transactionId); return eSIR_FAILURE; } /* @@ -3296,6 +3302,9 @@ tSirRetStatus pmmOffloadExitBmpsReqHandler(tpAniSirGlobal pMac, if (NULL == pDisablePsReqParams) { pmmLog(pMac, LOGE, FL("Memory allocation failed for tDisablePsParams")); + limSendSmeRsp(pMac, eWNI_PMC_EXIT_BMPS_RSP, eSIR_FAILURE, + psessionEntry->smeSessionId, + psessionEntry->transactionId); return eSIR_MEM_ALLOC_FAILED; } @@ -3315,6 +3324,9 @@ tSirRetStatus pmmOffloadExitBmpsReqHandler(tpAniSirGlobal pMac, { pmmLog(pMac, LOGE, FL("Posting WDA_EXIT_BMPS_REQ failed")); vos_mem_free(pDisablePsReqParams); + limSendSmeRsp(pMac, eWNI_PMC_EXIT_BMPS_RSP, eSIR_FAILURE, + psessionEntry->smeSessionId, + psessionEntry->transactionId); return eSIR_FAILURE; } /* diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c index 611e4ee8defb..39c2767c185b 100644 --- a/CORE/SERVICES/WMA/wma.c +++ b/CORE/SERVICES/WMA/wma.c @@ -1220,18 +1220,18 @@ static void wma_remove_peer(tp_wma_handle wma, u_int8_t *bssid, #define PEER_ALL_TID_BITMASK 0xffffffff u_int32_t peer_tid_bitmap = PEER_ALL_TID_BITMASK; u_int8_t *peer_addr = bssid; - if (!wma->peer_count) + if (!wma->interfaces[vdev_id].peer_count) { WMA_LOGE("%s: Can't remove peer with peer_addr %pM vdevid %d peer_count %d", - __func__, bssid, vdev_id, wma->peer_count); + __func__, bssid, vdev_id, wma->interfaces[vdev_id].peer_count); return; } if (peer) ol_txrx_peer_detach(peer); - wma->peer_count--; + wma->interfaces[vdev_id].peer_count--; WMA_LOGE("%s: Removed peer with peer_addr %pM vdevid %d peer_count %d", - __func__, bssid, vdev_id, wma->peer_count); + __func__, bssid, vdev_id, wma->interfaces[vdev_id].peer_count); #ifdef WLAN_FEATURE_ROAM_OFFLOAD if (roam_synch_in_progress) return; @@ -5485,9 +5485,9 @@ static VOS_STATUS wma_create_peer(tp_wma_handle wma, ol_txrx_pdev_handle pdev, { ol_txrx_peer_handle peer; - if (++wma->peer_count > wma->wlan_resource_config.num_peers) { + if (++wma->interfaces[vdev_id].peer_count > wma->wlan_resource_config.num_peers) { WMA_LOGP("%s, the peer count exceeds the limit %d", - __func__, wma->peer_count - 1); + __func__, wma->interfaces[vdev_id].peer_count - 1); goto err; } peer = ol_txrx_peer_attach(pdev, vdev, peer_addr); @@ -5499,7 +5499,7 @@ static VOS_STATUS wma_create_peer(tp_wma_handle wma, ol_txrx_pdev_handle pdev, WMA_LOGE("%s: Created peer with peer_addr %pM vdev_id %d," "peer_count - %d",__func__, peer_addr, vdev_id, - wma->peer_count); + wma->interfaces[vdev_id].peer_count); return VOS_STATUS_SUCCESS; } #endif @@ -5510,7 +5510,7 @@ static VOS_STATUS wma_create_peer(tp_wma_handle wma, ol_txrx_pdev_handle pdev, goto err; } WMA_LOGE("%s: Created peer with peer_addr %pM vdev_id %d, peer_count - %d", - __func__, peer_addr, vdev_id, wma->peer_count); + __func__, peer_addr, vdev_id, wma->interfaces[vdev_id].peer_count); #ifdef QCA_IBSS_SUPPORT /* for each remote ibss peer, clear its keys */ @@ -5531,7 +5531,7 @@ static VOS_STATUS wma_create_peer(tp_wma_handle wma, ol_txrx_pdev_handle pdev, return VOS_STATUS_SUCCESS; err: - wma->peer_count--; + wma->interfaces[vdev_id].peer_count--; return VOS_STATUS_E_FAILURE; } @@ -8866,7 +8866,7 @@ VOS_STATUS wma_process_dhcp_ind(tp_wma_handle wma_handle, } static WLAN_PHY_MODE wma_chan_to_mode(u8 chan, ePhyChanBondState chan_offset, - u8 vht_capable) + u8 vht_capable, u8 dot11_mode) { WLAN_PHY_MODE phymode = MODE_UNKNOWN; @@ -8874,8 +8874,29 @@ static WLAN_PHY_MODE wma_chan_to_mode(u8 chan, ePhyChanBondState chan_offset, if ((chan >= WMA_11G_CHANNEL_BEGIN) && (chan <= WMA_11G_CHANNEL_END)) { switch (chan_offset) { case PHY_SINGLE_CHANNEL_CENTERED: - /* Configure MODE_11NG_HT20 for self vdev(for vht too) */ - phymode = vht_capable ? MODE_11AC_VHT20_2G :MODE_11NG_HT20; + /* In case of no channel bonding, use dot11_mode + * to set phy mode + */ + switch (dot11_mode) { + case WNI_CFG_DOT11_MODE_11A: + phymode = MODE_11A; + break; + case WNI_CFG_DOT11_MODE_11B: + phymode = MODE_11B; + break; + case WNI_CFG_DOT11_MODE_11G: + phymode = MODE_11G; + break; + case WNI_CFG_DOT11_MODE_11G_ONLY: + phymode = MODE_11GONLY; + break; + default: + /* Configure MODE_11NG_HT20 for + * self vdev(for vht too) + */ + phymode = MODE_11NG_HT20; + break; + } break; case PHY_DOUBLE_CHANNEL_LOW_PRIMARY: case PHY_DOUBLE_CHANNEL_HIGH_PRIMARY: @@ -8920,8 +8941,9 @@ static WLAN_PHY_MODE wma_chan_to_mode(u8 chan, ePhyChanBondState chan_offset, break; } } - WMA_LOGD("%s: phymode %d channel %d offset %d vht_capable %d", __func__, - phymode, chan, chan_offset, vht_capable); + WMA_LOGD("%s: phymode %d channel %d offset %d vht_capable %d " + "dot11_mode %d", __func__, phymode, chan, + chan_offset, vht_capable, dot11_mode); return phymode; } @@ -8978,7 +9000,7 @@ static VOS_STATUS wma_vdev_start(tp_wma_handle wma, /* Fill channel info */ chan->mhz = vos_chan_to_freq(req->chan); chanmode = wma_chan_to_mode(req->chan, req->chan_offset, - req->vht_capable); + req->vht_capable, req->dot11_mode); intr[cmd->vdev_id].chanmode = chanmode; /* save channel mode */ intr[cmd->vdev_id].ht_capable = req->ht_capable; @@ -9655,6 +9677,7 @@ static void wma_set_channel(tp_wma_handle wma, tpSwitchChannelParams params) req.chan = params->channelNumber; req.chan_offset = params->secondaryChannelOffset; req.vht_capable = params->vhtCapable; + req.dot11_mode = params->dot11_mode; #ifdef WLAN_FEATURE_VOWIFI req.max_txpow = params->maxTxPower; #else @@ -25995,12 +26018,13 @@ void wma_process_roam_synch_complete(WMA_HANDLE handle, u_int16_t len; len = sizeof(wmi_roam_synch_complete_fixed_param); - wma_handle->interfaces[synchcnf->sessionId].roam_synch_in_progress = VOS_FALSE; if (!wma_handle || !wma_handle->wmi_handle) { WMA_LOGE("%s: WMA is closed, can not issue roam synch cnf", __func__); return; } + wma_handle->interfaces[synchcnf->sessionId].roam_synch_in_progress = + VOS_FALSE; wmi_buf = wmi_buf_alloc(wma_handle->wmi_handle, len); if (!wmi_buf) { WMA_LOGE("%s: wmai_buf_alloc failed", __func__); diff --git a/CORE/SERVICES/WMA/wma.h b/CORE/SERVICES/WMA/wma.h index fbe7e53fda98..cd4e977c57f8 100644 --- a/CORE/SERVICES/WMA/wma.h +++ b/CORE/SERVICES/WMA/wma.h @@ -502,6 +502,7 @@ struct wma_txrx_node { #endif v_BOOL_t ps_enabled; u_int32_t dtim_policy; + u_int32_t peer_count; v_BOOL_t roam_synch_in_progress; }; @@ -619,7 +620,6 @@ typedef struct { u_int32_t scan_id; struct wma_txrx_node *interfaces; pdev_cli_config_t pdevconfig; - u_int32_t peer_count; struct list_head vdev_resp_queue; adf_os_spinlock_t vdev_respq_lock; adf_os_spinlock_t vdev_detach_lock; @@ -1280,6 +1280,7 @@ struct wma_vdev_start_req { u_int8_t vht_capable; u_int8_t ht_capable; int32_t dfs_pri_multiplier; + u_int8_t dot11_mode; }; struct wma_set_key_params { diff --git a/CORE/SME/inc/csrApi.h b/CORE/SME/inc/csrApi.h index 2aed57d778f9..c3c21a9b52fe 100644 --- a/CORE/SME/inc/csrApi.h +++ b/CORE/SME/inc/csrApi.h @@ -1511,25 +1511,6 @@ typedef struct tagCsrTdlsSendMgmt }tCsrTdlsSendMgmt; -#ifdef FEATURE_WLAN_TDLS_INTERNAL -typedef struct tagCsrTdlsDisRequest -{ - tSirMacAddr peerMac; - tANI_U8 disType; -}tCsrTdlsDisRequest; - -typedef struct tagCsrTdlsSetupRequest -{ - tSirMacAddr peerMac; - tANI_U8 linkIndex; -}tCsrTdlsSetupRequest; - -typedef struct tagCsrTdlsTeardownRequest -{ - tSirMacAddr peerMac; - tANI_U8 linkIndex; -}tCsrTdlsTeardownRequest ; -#endif #endif typedef void * tScanResultHandle; diff --git a/CORE/SME/inc/csrInternal.h b/CORE/SME/inc/csrInternal.h index 44036818851c..6fed9fb387f8 100644 --- a/CORE/SME/inc/csrInternal.h +++ b/CORE/SME/inc/csrInternal.h @@ -805,24 +805,6 @@ typedef struct tagCsrScanStruct csrScanCompleteCallback callback11dScanDone; }tCsrScanStruct; -#ifdef FEATURE_WLAN_TDLS_INTERNAL -/* - * struct to carry TDLS discovery info.. - */ -typedef struct sCsrTdlsContext -{ - tDblLinkList tdlsPotentialPeerList ; - tANI_U16 tdlsCommonFlag ; - tANI_U16 tdlsCommonState ; - tANI_U16 tdlsPeerCount ; -}tCsrTdlsCtxStruct; - -typedef struct sCsrTdlsPeerLinkInfo -{ - tListElem tdlsPeerStaLink ; - tSirTdlsPeerInfo tdlsDisPeerInfo ; -}tCsrTdlsPeerLinkinfo ; -#endif @@ -1436,15 +1418,9 @@ eHalStatus csrStop(tpAniSirGlobal pMac, tHalStopType stopType); eHalStatus csrReady(tpAniSirGlobal pMac); #ifdef FEATURE_WLAN_WAPI -eHalStatus csrRoamGetBKIDCache(tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_U32 *pNum, - tBkidCacheInfo *pBkidCache); - eHalStatus csrScanGetBKIDCandidateList(tpAniSirGlobal pMac, tANI_U32 sessionId, tBkidCandidateInfo *pBkidList, tANI_U32 *pNumItems ); -tANI_U32 csrRoamGetNumBKIDCache(tpAniSirGlobal pMac, tANI_U32 sessionId); -eHalStatus csrRoamSetBKIDCache( tpAniSirGlobal pMac, tANI_U32 sessionId, tBkidCacheInfo *pBKIDCache, - tANI_U32 numItems ); /* --------------------------------------------------------------------------- \fn csrRoamGetWapiReqIE \brief return the WAPI IE CSR passes to PE to JOIN request or START_BSS request diff --git a/CORE/SME/inc/pmcApi.h b/CORE/SME/inc/pmcApi.h index e60447ffef72..46ee179ceb1e 100644 --- a/CORE/SME/inc/pmcApi.h +++ b/CORE/SME/inc/pmcApi.h @@ -635,7 +635,8 @@ tANI_BOOLEAN pmcOffloadIsPowerSaveEnabled (tHalHandle hHal, tANI_U32 sessionId, tPmcPowerSavingMode psMode); eHalStatus PmcOffloadEnableDeferredStaModePowerSave(tHalHandle hHal, - tANI_U32 sessionId); + tANI_U32 sessionId, + tANI_BOOLEAN isReassoc); eHalStatus PmcOffloadDisableDeferredStaModePowerSave(tHalHandle hHal, tANI_U32 sessionId); diff --git a/CORE/SME/inc/smeInside.h b/CORE/SME/inc/smeInside.h index 319f032dfe72..dcd8f044dd52 100644 --- a/CORE/SME/inc/smeInside.h +++ b/CORE/SME/inc/smeInside.h @@ -152,23 +152,6 @@ typedef struct TdlsDelStaInfo { tSirMacAddr peerMac; } tTdlsDelStaCmdInfo; -#ifdef FEATURE_WLAN_TDLS_INTERNAL -typedef struct TdlsDisReqCmdinfo -{ - tSirMacAddr peerMac; - tANI_U8 tdlsDisType; -} tTdlsDisReqCmdinfo; - -typedef struct tdlsLinkSetupReqCmdinfo -{ - tSirMacAddr peerMac; -} tTdlsLinkSetupReqCmdinfo; - -typedef struct tdlsLinkTeardownCmdinfo -{ - tSirMacAddr peerMac; -} tTdlsLinkTeardownCmdinfo; -#endif /* * TDLS cmd info, CMD from SME to PE. */ @@ -177,11 +160,6 @@ typedef struct s_tdls_cmd tANI_U32 size; union { -#ifdef FEATURE_WLAN_TDLS_INTERNAL - tTdlsDisReqCmdinfo tdlsDisReqCmdInfo ; - tTdlsLinkSetupReqCmdinfo tdlsLinkSetupReqCmdInfo ; - tTdlsLinkTeardownCmdinfo tdlsLinkTeardownCmdInfo ; -#endif tTdlsLinkEstablishCmdInfo tdlsLinkEstablishCmdInfo; tTdlsSendMgmtCmdInfo tdlsSendMgmtCmdInfo; tTdlsAddStaCmdInfo tdlsAddStaCmdInfo; @@ -234,6 +212,7 @@ void purgeSmeSessionCmdList(tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_BOOLEAN smeCommandPending(tpAniSirGlobal pMac); tANI_BOOLEAN pmcProcessCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand ); tANI_BOOLEAN pmcOffloadProcessCommand(tpAniSirGlobal pMac,tSmeCmd *pCommand); +tANI_BOOLEAN pmcOffloadIsStaInPowerSave(tpAniSirGlobal pMac, tANI_U32 sessionId); //this function is used to abort a command where the normal processing of the command //is terminated without going through the normal path. it is here to take care of callbacks for @@ -311,14 +290,6 @@ eHalStatus csrTdlsProcessCmd(tpAniSirGlobal pMac,tSmeCmd *pCommand ); eHalStatus csrTdlsProcessLinkEstablish( tpAniSirGlobal pMac, tSmeCmd *cmd ); eHalStatus tdlsMsgProcessor(tpAniSirGlobal pMac,v_U16_t msg_type, void *pMsgBuf); -#ifdef FEATURE_WLAN_TDLS_INTERNAL -eHalStatus csrTdlsDiscoveryReq(tHalHandle hHal, tANI_U8 sessionId, - tCsrTdlsDisRequest *tdlsDisReq); -eHalStatus csrTdlsSetupReq(tHalHandle hHal, tANI_U8 sessionId, - tCsrTdlsSetupRequest *tdlsSetupReq); -eHalStatus csrTdlsTeardownReq(tHalHandle hHal, tANI_U8 sessionId, - tCsrTdlsTeardownRequest *teardown); -#endif #endif /* FEATURE_WLAN_TDLS */ #if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_ESE) || defined(FEATURE_WLAN_LFR) diff --git a/CORE/SME/inc/smeInternal.h b/CORE/SME/inc/smeInternal.h index 9c78bd354b9e..ce9772d8755d 100644 --- a/CORE/SME/inc/smeInternal.h +++ b/CORE/SME/inc/smeInternal.h @@ -76,13 +76,6 @@ typedef enum eSmeCommandType eSmeCommandTdlsAddPeer, eSmeCommandTdlsDelPeer, eSmeCommandTdlsLinkEstablish, -#ifdef FEATURE_WLAN_TDLS_INTERNAL - eSmeCommandTdlsDiscovery, - eSmeCommandTdlsLinkSetup, - eSmeCommandTdlsLinkTear, - eSmeCommandTdlsEnterUapsd, - eSmeCommandTdlsExitUapsd, -#endif #endif //PMC eSmePmcCommandMask = 0x20000, //To identify PMC commands diff --git a/CORE/SME/inc/sme_Api.h b/CORE/SME/inc/sme_Api.h index b7bc0127a5c3..ff60e304de3a 100644 --- a/CORE/SME/inc/sme_Api.h +++ b/CORE/SME/inc/sme_Api.h @@ -1864,48 +1864,6 @@ eHalStatus sme_RoamRegisterCallback(tHalHandle hHal, #ifdef FEATURE_WLAN_WAPI /* --------------------------------------------------------------------------- - \fn sme_RoamSetBKIDCache - \brief The SME API exposed to HDD to allow HDD to provde SME the BKID - candidate list. - \param hHal - Handle to the HAL. The HAL handle is returned by the HAL after - it is opened (by calling halOpen). - \param pBKIDCache - caller allocated buffer point to an array of tBkidCacheInfo - \param numItems - a variable that has the number of tBkidCacheInfo allocated - when retruning, this is the number of items put into pBKIDCache - \return eHalStatus - when fail, it usually means the buffer allocated is not - big enough and pNumItems has the number of tBkidCacheInfo. - ---------------------------------------------------------------------------*/ -eHalStatus sme_RoamSetBKIDCache( tHalHandle hHal, tANI_U32 sessionId, tBkidCacheInfo *pBKIDCache, - tANI_U32 numItems ); - -/* --------------------------------------------------------------------------- - \fn sme_RoamGetBKIDCache - \brief The SME API exposed to HDD to allow HDD to request SME to return its - BKID cache. - \param hHal - Handle to the HAL. The HAL handle is returned by the HAL after - it is opened (by calling halOpen). - \param pNum - caller allocated memory that has the space of the number of - tBkidCacheInfo as input. Upon returned, *pNum has the needed number of entries - in SME cache. - \param pBkidCache - Caller allocated memory that contains BKID cache, if any, - upon return - \return eHalStatus - when fail, it usually means the buffer allocated is not - big enough. - ---------------------------------------------------------------------------*/ -eHalStatus sme_RoamGetBKIDCache(tHalHandle hHal, tANI_U32 *pNum, - tBkidCacheInfo *pBkidCache); - -/* --------------------------------------------------------------------------- - \fn sme_RoamGetNumBKIDCache - \brief The SME API exposed to HDD to allow HDD to request SME to return the - number of BKID cache entries. - \param hHal - Handle to the HAL. The HAL handle is returned by the HAL after - it is opened (by calling halOpen). - \return tANI_U32 - the number of BKID cache entries. - ---------------------------------------------------------------------------*/ -tANI_U32 sme_RoamGetNumBKIDCache(tHalHandle hHal, tANI_U32 sessionId); - -/* --------------------------------------------------------------------------- \fn sme_ScanGetBKIDCandidateList \brief a wrapper function to return the BKID candidate list \param pBkidList - caller allocated buffer point to an array of @@ -3404,19 +3362,6 @@ void sme_SetTdlsPowerSaveProhibited(tHalHandle hHal, tANI_U32 sessionId, -------------------------------------------------------------------------*/ v_BOOL_t sme_IsPmcBmps(tHalHandle hHal); -#ifdef FEATURE_WLAN_TDLS_INTERNAL -typedef struct smeTdlsDisResult -{ - tSirMacAddr tdlsPeerMac; - v_S7_t tdlsPeerRssi; -} tSmeTdlsDisResult; - -VOS_STATUS sme_StartTdlsDiscoveryReq(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr peerMac); -v_U8_t sme_GetTdlsDiscoveryResult(tHalHandle hHal, - tSmeTdlsDisResult *disResult, v_U8_t listType); -VOS_STATUS sme_StartTdlsLinkSetupReq(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr peerMac); -VOS_STATUS sme_StartTdlsLinkTeardownReq(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr peerMac); -#endif /* FEATURE_WLAN_TDLS_INTERNAL */ eHalStatus sme_UpdateDfsSetting(tHalHandle hHal, tANI_U8 fUpdateEnableDFSChnlScan); /* @@ -3620,7 +3565,8 @@ eHalStatus sme_ConfigDisablePowerSave (tHalHandle hHal, tPmcPowerSavingMode psMo eHalStatus sme_PsOffloadEnablePowerSave (tHalHandle hHal, tANI_U32 sessionId); eHalStatus sme_PsOffloadDisablePowerSave (tHalHandle hHal, tANI_U32 sessionId); eHalStatus sme_PsOffloadEnableDeferredPowerSave (tHalHandle hHal, - tANI_U32 sessionId); + tANI_U32 sessionId, + tANI_BOOLEAN isReassoc); eHalStatus sme_PsOffloadDisableDeferredPowerSave (tHalHandle hHal, tANI_U32 sessionId); @@ -3832,6 +3778,15 @@ v_BOOL_t sme_GetDFSScanMode(tHalHandle hHal); -------------------------------------------------------------------------*/ tANI_BOOLEAN sme_staInMiddleOfRoaming(tHalHandle hHal, tANI_U8 sessionId); +/* --------------------------------------------------------------------------- + \fn sme_PsOffloadIsStaInPowerSave + \brief This function returns TRUE if STA is in power save + \param hHal - HAL handle for device + \param sessionId - Session Identifier + \- return TRUE or FALSE + -------------------------------------------------------------------------*/ +tANI_BOOLEAN sme_PsOffloadIsStaInPowerSave(tHalHandle hHal, tANI_U8 sessionId); + #ifdef FEATURE_WLAN_EXTSCAN /* --------------------------------------------------------------------------- \fn sme_GetValidChannelsByBand diff --git a/CORE/SME/src/ccm/ccmApi.c b/CORE/SME/src/ccm/ccmApi.c index c37605bdc7d8..7f6648a83a71 100644 --- a/CORE/SME/src/ccm/ccmApi.c +++ b/CORE/SME/src/ccm/ccmApi.c @@ -632,7 +632,14 @@ eHalStatus ccmCfgGetInt(tHalHandle hHal, tANI_U32 cfgId, tANI_U32 *pValue) { tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); eHalStatus status = eHAL_STATUS_SUCCESS ; - tCfgReq *req = pMac->ccm.comp[cfgId] ; + tCfgReq *req; + + if (cfgId >= CFG_PARAM_MAX_NUM) { + smsLog(pMac, LOGE, FL("Invalid cfg id %d"), cfgId); + return eHAL_STATUS_INVALID_PARAMETER; + } + + req = pMac->ccm.comp[cfgId] ; if (req && req->state == eCCM_REQ_DONE) { @@ -658,6 +665,12 @@ eHalStatus ccmCfgGetStr(tHalHandle hHal, tANI_U32 cfgId, tANI_U8 *pBuf, tANI_U32 return eHAL_STATUS_FAILURE; hHdd = halHandle2HddHandle(hHal); + + if (cfgId >= CFG_PARAM_MAX_NUM) { + smsLog(pMac, LOGE, FL("Invalid cfg id %d"), cfgId); + return eHAL_STATUS_INVALID_PARAMETER; + } + req = pMac->ccm.comp[cfgId] ; if (req && req->state == eCCM_REQ_DONE && (tANI_U32)req->length <= *pLength) diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c index 7da1867f2b94..582f5ffc553e 100644 --- a/CORE/SME/src/csr/csrApiRoam.c +++ b/CORE/SME/src/csr/csrApiRoam.c @@ -12386,72 +12386,6 @@ static void csrRoamUpdateConnectedProfileFromNewBss( tpAniSirGlobal pMac, tANI_U return; } -#ifdef FEATURE_WLAN_WAPI -eHalStatus csrRoamSetBKIDCache( tpAniSirGlobal pMac, tANI_U32 sessionId, tBkidCacheInfo *pBKIDCache, - tANI_U32 numItems ) -{ - eHalStatus status = eHAL_STATUS_INVALID_PARAMETER; - tCsrRoamSession *pSession; - if(!CSR_IS_SESSION_VALID( pMac, sessionId )) - { - smsLog(pMac, LOGE, FL(" Invalid session ID")); - return status; - } - smsLog(pMac, LOGW, "csrRoamSetBKIDCache called, numItems = %d", numItems); - pSession = CSR_GET_SESSION( pMac, sessionId ); - if(numItems <= CSR_MAX_BKID_ALLOWED) - { - status = eHAL_STATUS_SUCCESS; - //numItems may be 0 to clear the cache - pSession->NumBkidCache = (tANI_U16)numItems; - if(numItems && pBKIDCache) - { - vos_mem_copy(pSession->BkidCacheInfo, pBKIDCache, - sizeof(tBkidCacheInfo) * numItems); - status = eHAL_STATUS_SUCCESS; - } - } - return (status); -} -eHalStatus csrRoamGetBKIDCache(tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_U32 *pNum, - tBkidCacheInfo *pBkidCache) -{ - eHalStatus status = eHAL_STATUS_INVALID_PARAMETER; - tCsrRoamSession *pSession; - if(!CSR_IS_SESSION_VALID( pMac, sessionId )) - { - smsLog(pMac, LOGE, FL(" Invalid session ID")); - return status; - } - pSession = CSR_GET_SESSION( pMac, sessionId ); - if(pNum && pBkidCache) - { - if(pSession->NumBkidCache == 0) - { - *pNum = 0; - status = eHAL_STATUS_SUCCESS; - } - else if(*pNum >= pSession->NumBkidCache) - { - if(pSession->NumBkidCache > CSR_MAX_PMKID_ALLOWED) - { - smsLog(pMac, LOGE, FL("NumPmkidCache :%d is more than CSR_MAX_PMKID_ALLOWED, resetting to CSR_MAX_PMKID_ALLOWED"), - pSession->NumBkidCache); - pSession->NumBkidCache = CSR_MAX_PMKID_ALLOWED; - } - vos_mem_copy(pBkidCache, pSession->BkidCacheInfo, - sizeof(tBkidCacheInfo) * pSession->NumBkidCache); - *pNum = pSession->NumBkidCache; - status = eHAL_STATUS_SUCCESS; - } - } - return (status); -} -tANI_U32 csrRoamGetNumBKIDCache(tpAniSirGlobal pMac, tANI_U32 sessionId) -{ - return (pMac->roam.roamSession[sessionId].NumBkidCache); -} -#endif /* FEATURE_WLAN_WAPI */ #ifdef WLAN_FEATURE_ROAM_OFFLOAD eHalStatus csrRoamSetPSK_PMK (tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_U8 *pPSK_PMK) diff --git a/CORE/SME/src/csr/csrTdlsProcess.c b/CORE/SME/src/csr/csrTdlsProcess.c index 167ac7d6bea0..fe94a0a82b18 100644 --- a/CORE/SME/src/csr/csrTdlsProcess.c +++ b/CORE/SME/src/csr/csrTdlsProcess.c @@ -51,18 +51,6 @@ -#ifdef FEATURE_WLAN_TDLS_INTERNAL -/* - * initialize Discovery list - */ -eHalStatus csrTdlsInitPeerList(tpAniSirGlobal pMac ) -{ - tCsrTdlsCtxStruct *tdlsDisInfo = &pMac->tdlsCtx ; - csrLLOpen(pMac->hHdd, &tdlsDisInfo->tdlsPotentialPeerList) ; - - return eHAL_STATUS_SUCCESS ; -} -#endif /* * common routine to remove TDLS cmd from SME command list.. @@ -351,109 +339,6 @@ eHalStatus csrTdlsDelPeerSta(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr pee return status ; } -#ifdef FEATURE_WLAN_TDLS_INTERNAL -/* - * TDLS request API, called from HDD to enable TDLS discovery request - * in SME/CSR and send message to PE to trigger TDLS discovery procedure. - */ -eHalStatus csrTdlsDiscoveryReq(tHalHandle hHal, tANI_U8 sessionId, tCsrTdlsDisRequest *tdlsDisReq) -{ - tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - tSmeCmd *tdlsDisReqCmd ; - eHalStatus status = eHAL_STATUS_FAILURE ; - - if(tdlsDisReq) - { - tdlsDisReqCmd = csrGetCommandBuffer(pMac) ; - - if(tdlsDisReqCmd) - { - tTdlsDisReqCmdinfo *disReqCmdInfo = - &tdlsDisReqCmd->u.tdlsCmd.u.tdlsDisReqCmdInfo ; - - tdlsDisReqCmd->sessionId = sessionId; - - disReqCmdInfo->tdlsDisType = tdlsDisReq->disType ; - vos_mem_copy(disReqCmdInfo->peerMac, - tdlsDisReq->peerMac, sizeof(tSirMacAddr)) ; - tdlsDisReqCmd->command = eSmeCommandTdlsDiscovery ; - tdlsDisReqCmd->u.tdlsCmd.size = sizeof(tTdlsDisReqCmdinfo) ; - smePushCommand(pMac, tdlsDisReqCmd, FALSE) ; - status = eHAL_STATUS_SUCCESS ; - } - } - - return status ; -} - -/* - * TDLS request API, called from HDD to enable TDLS link setup request - * in SME/CSR and send message to PE to trigger TDLS link setup procedure. - */ -eHalStatus csrTdlsSetupReq(tHalHandle hHal, tANI_U8 sessionId, tCsrTdlsSetupRequest *tdlsSetupReq) -{ - tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - tSmeCmd *tdlsSetupReqCmd ; - eHalStatus status = eHAL_STATUS_FAILURE ; - - if(tdlsSetupReq) - { - tdlsSetupReqCmd = csrGetCommandBuffer(pMac) ; - - if(tdlsSetupReqCmd) - { - tTdlsLinkSetupReqCmdinfo *setupCmdInfo = - &tdlsSetupReqCmd->u.tdlsCmd.u.tdlsLinkSetupReqCmdInfo ; - - tdlsSetupReqCmd->sessionId = sessionId; - - vos_mem_copy(setupCmdInfo->peerMac, - tdlsSetupReq->peerMac, sizeof(tSirMacAddr)) ; - tdlsSetupReqCmd->command = eSmeCommandTdlsLinkSetup ; - tdlsSetupReqCmd->u.tdlsCmd.size = sizeof(tTdlsLinkSetupReqCmdinfo) ; - smePushCommand(pMac, tdlsSetupReqCmd, FALSE) ; - status = eHAL_STATUS_SUCCESS ; - } - } - - return status ; -} -/* - * TDLS request API, called from HDD to enable TDLS link teardown request - * in SME/CSR and send message to PE to trigger TDLS link teardown procedure. - */ -eHalStatus csrTdlsTeardownReq(tHalHandle hHal, tANI_U8 sessionId, - tCsrTdlsTeardownRequest *tdlsTeardownReq) -{ - tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - tSmeCmd *tdlsTeardownReqCmd ; - eHalStatus status = eHAL_STATUS_FAILURE ; - - if(tdlsTeardownReq) - { - tdlsTeardownReqCmd = csrGetCommandBuffer(pMac) ; - - if(tdlsTeardownReqCmd) - { - tTdlsLinkTeardownCmdinfo *teardownCmdInfo = - &tdlsTeardownReqCmd->u.tdlsCmd.u.tdlsLinkTeardownCmdInfo ; - - tdlsTeardownReqCmd->sessionId = sessionId; - - vos_mem_copy(teardownCmdInfo->peerMac, - tdlsTeardownReq->peerMac, sizeof(tSirMacAddr)) ; - tdlsTeardownReqCmd->command = eSmeCommandTdlsLinkTear ; - tdlsTeardownReqCmd->u.tdlsCmd.size = - sizeof(tTdlsLinkTeardownCmdinfo) ; - smePushCommand(pMac, tdlsTeardownReqCmd, FALSE) ; - status = eHAL_STATUS_SUCCESS ; - } - } - - return status ; -} - -#endif /* * TDLS messages sent to PE . @@ -683,9 +568,6 @@ eHalStatus csrTdlsProcessDelSta( tpAniSirGlobal pMac, tSmeCmd *cmd ) eHalStatus csrTdlsProcessCmd(tpAniSirGlobal pMac, tSmeCmd *cmd) { eSmeCommandType cmdType = cmd->command ; -#ifdef FEATURE_WLAN_TDLS_INTERNAL - tTdlsCmd tdlsCmd = cmd->u.tdlsCmd ; -#endif tANI_BOOLEAN status = eANI_BOOLEAN_TRUE; switch(cmdType) { @@ -725,122 +607,6 @@ eHalStatus csrTdlsProcessCmd(tpAniSirGlobal pMac, tSmeCmd *cmd) } } break; -#ifdef FEATURE_WLAN_TDLS_INTERNAL - case eSmeCommandTdlsDiscovery: - { - tTdlsDisReqCmdinfo *disReqCmdInfo = &tdlsCmd.u.tdlsDisReqCmdInfo ; - tSirTdlsDisReq *disReq = NULL ; - tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, cmd->sessionId ); - - disReq = vos_mem_malloc(sizeof(tSirTdlsDisReq)); - if ( NULL == disReq ) - status = eHAL_STATUS_FAILURE; - else - status = eHAL_STATUS_SUCCESS; - - if(!HAL_STATUS_SUCCESS( status ) ) - { - smsLog( pMac, LOGE, "dis Req alloc failed " ); - VOS_ASSERT(0) ; - break ; - } - disReq->sessionId = cmd->sessionId; - disReq->transactionId = 0; /* TODO ? */ - disReq->reqType = disReqCmdInfo->tdlsDisType ; - vos_mem_copy( disReq->bssid, pSession->pConnectBssDesc->bssId, - sizeof (tSirMacAddr)); - vos_mem_copy( disReq->peerMac, - disReqCmdInfo->peerMac, sizeof(tSirMacAddr)) ; - smsLog( pMac, LOGE, "sending TDLS discovery to PE " ); - status = tdlsSendMessage(pMac, eWNI_SME_TDLS_DISCOVERY_START_REQ, - (void *)disReq , sizeof(tSirTdlsDisReq)) ; - if(HAL_STATUS_SUCCESS( status ) ) - { - status = eANI_BOOLEAN_FALSE ; - } - /* TODO: Add error handling */ - - break ; - } - case eSmeCommandTdlsLinkSetup: - { - tTdlsLinkSetupReqCmdinfo *linkSetupReqCmdInfo = - &tdlsCmd.u.tdlsLinkSetupReqCmdInfo ; - tSirTdlsSetupReq *setupReq = NULL ; - tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, cmd->sessionId ); - - setupReq = vos_mem_malloc(sizeof(tSirTdlsSetupReq)); - if ( NULL == setupReq ) - status = eHAL_STATUS_FAILURE; - else - status = eHAL_STATUS_SUCCESS; - - - if(!HAL_STATUS_SUCCESS( status ) ) - { - smsLog( pMac, LOGE, "dis Req alloc failed " ); - VOS_ASSERT(0) ; - break ; - } - setupReq->sessionId = cmd->sessionId; - setupReq->transactionId = 0; /* TODO ? */ - - vos_mem_copy( setupReq->bssid, pSession->pConnectBssDesc->bssId, - sizeof (tSirMacAddr)); - vos_mem_copy( setupReq->peerMac, - linkSetupReqCmdInfo->peerMac, sizeof(tSirMacAddr)) ; - - VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, - ("sending TDLS link setup to PE ")); - status = tdlsSendMessage(pMac, eWNI_SME_TDLS_LINK_START_REQ, - (void *)setupReq , sizeof(tSirTdlsSetupReq) ) ; - - if(HAL_STATUS_SUCCESS( status ) ) - { - status = eANI_BOOLEAN_FALSE ; - } - /* TODO: Add error handling */ - break ; - } - case eSmeCommandTdlsLinkTear: - { - tTdlsLinkTeardownCmdinfo *linkTeardownCmdInfo = - &tdlsCmd.u.tdlsLinkTeardownCmdInfo ; - tSirTdlsTeardownReq *teardownReq = NULL ; - tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, cmd->sessionId ); - - teardownReq = vos_mem_malloc(sizeof(tSirTdlsTeardownReq)); - if ( NULL == teardownReq ) - status = eHAL_STATUS_FAILURE; - else - status = eHAL_STATUS_SUCCESS; - - if(!HAL_STATUS_SUCCESS( status ) ) - { - smsLog( pMac, LOGE, "teardown Req alloc failed " ); - VOS_ASSERT(0) ; - break ; - } - teardownReq->sessionId = cmd->sessionId; - teardownReq->transactionId = 0; /* TODO ? */ - - vos_mem_copy( teardownReq->bssid, pSession->pConnectBssDesc->bssId, - sizeof (tSirMacAddr)); - vos_mem_copy( &teardownReq->peerMac, - linkTeardownCmdInfo->peerMac, sizeof(tSirMacAddr)) ; - VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, - ("teardown request..")) ; - status = tdlsSendMessage(pMac, eWNI_SME_TDLS_TEARDOWN_REQ, - (void *)teardownReq , sizeof(tSirTdlsTeardownReq)) ; - - if(HAL_STATUS_SUCCESS( status ) ) - { - status = eANI_BOOLEAN_FALSE ; - } - /* TODO: Add error handling */ - break ; - } -#endif default: { /* TODO: Add defualt handling */ @@ -907,137 +673,6 @@ eHalStatus csrTdlsProcessLinkEstablish( tpAniSirGlobal pMac, tSmeCmd *cmd ) return status; } -#ifdef FEATURE_WLAN_TDLS_INTERNAL -/* - * Find specific TDLS peer (based on peer MAC address). - */ -tCsrTdlsPeerLinkinfo *findTdlsPeer(tpAniSirGlobal pMac, - tDblLinkList *peerList, tSirMacAddr peerMac) -{ - tListElem *pEntry = NULL ; - tCsrTdlsPeerLinkinfo *peerLinkInfo = NULL ; - tSirTdlsPeerInfo *peerInfo = NULL ; - - pEntry = csrLLPeekHead( peerList, LL_ACCESS_LOCK ); - while(pEntry) - { - peerLinkInfo = GET_BASE_ADDR( pEntry, tCsrTdlsPeerLinkinfo, - tdlsPeerStaLink) ; - peerInfo = &peerLinkInfo->tdlsDisPeerInfo ; - - if ( vos_mem_compare( (tANI_U8 *)peerInfo->peerMac, - (tANI_U8 *) peerMac, sizeof(tSirMacAddr)) ) - { - break ; - } - - pEntry = csrLLNext( peerList, pEntry, LL_ACCESS_LOCK) ; - } - - return ((pEntry) ? peerLinkInfo: NULL) ; -} -/* - * Delete TDLD peer info, called from TDLS teardown request. - */ -static eHalStatus tdlsDeleteTdlsPeerInfo(tpAniSirGlobal pMac, - tSirMacAddr peerMac) -{ - tCsrTdlsCtxStruct *disInfo = &pMac->tdlsCtx ; - tCsrTdlsPeerLinkinfo *peerInfo = - findTdlsPeer(pMac, &disInfo->tdlsPotentialPeerList, peerMac) ; - eHalStatus status = eHAL_STATUS_FAILURE ; - - if((csrLLRemoveEntry(&disInfo->tdlsPotentialPeerList, - &peerInfo->tdlsPeerStaLink, LL_ACCESS_NOLOCK))) - { - vos_mem_free((void *)peerInfo) ; - status = eHAL_STATUS_SUCCESS; - - } - - return status ; -} - -/* - * UPDATE TDLS peer state to TDLS LINK STATE, this will be called after - * link is successfully setup with TDLS Peer. - */ -static eHalStatus tdlsUpdateTdlsPeerState(tpAniSirGlobal pMac, - tSirMacAddr peerMac,tANI_U8 state ) -{ - tCsrTdlsCtxStruct *disInfo = &pMac->tdlsCtx ; - tCsrTdlsPeerLinkinfo *peerLinkInfo = - findTdlsPeer(pMac, &disInfo->tdlsPotentialPeerList, peerMac) ; - eHalStatus status = eHAL_STATUS_FAILURE ; - - if(peerLinkInfo) - { - tSirTdlsPeerInfo *peerInfo = &peerLinkInfo->tdlsDisPeerInfo ; - peerInfo->tdlsPeerState = state ; - status = eHAL_STATUS_SUCCESS ; - } - else - { - /* TODO: update this peer found in link setup in peer list */ - VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, - ("This TDLS client is not in discovery list ") ); - status = eHAL_STATUS_SUCCESS ; - } - - return status ; -} - -/* - * save TDLS peer info, this will be called after successfull completion - * of TDLS discovery procedure. - */ -static eHalStatus tdlsSaveTdlsPeerInfo(tpAniSirGlobal pMac, - tSirTdlsPeerInfo *disPeerInfo) -{ - tCsrTdlsPeerLinkinfo *peerInfo = NULL ; - tCsrTdlsCtxStruct *disInfo = &pMac->tdlsCtx ; - eHalStatus status = eHAL_STATUS_FAILURE ; - /* - * Ok, allocate memory for peer info here - * we allocate memory for each peer here and free his memory - * at the time the peer node is getting deleted, possible case is - * teardown - */ - peerInfo = vos_mem_malloc(sizeof(tCsrTdlsPeerLinkinfo)); - if ( NULL = peerInfo ) - status = eHAL_STATUS_FAILURE; - else - status = eHAL_STATUS_SUCCESS; - - /* - * go ahead and copy peerInfo and insert this node info discovery rsp - * database. - */ - if (HAL_STATUS_SUCCESS(status)) - { - vos_mem_set( &peerInfo->tdlsDisPeerInfo, - sizeof(tSirTdlsPeerInfo), 0); - vos_mem_copy( &peerInfo->tdlsDisPeerInfo, disPeerInfo, - sizeof(tSirTdlsPeerInfo)); - - /* - * update TDLS client count to indicate there is tdls client - * in tdls potential peer list. - */ - disInfo->tdlsPeerCount++ ; - - /* - * finally insert this tdls peer info into tdls potential peer list - */ - csrLLInsertTail( &disInfo->tdlsPotentialPeerList, - &peerInfo->tdlsPeerStaLink, LL_ACCESS_LOCK ); - } - - return status ; - -} - -#endif /* * TDLS Message processor, will be called after TDLS message recieved from * PE @@ -1142,152 +777,6 @@ eHalStatus tdlsMsgProcessor(tpAniSirGlobal pMac, v_U16_t msgType, csrTdlsRemoveSmeCmd(pMac, eSmeCommandTdlsLinkEstablish); break; } -#ifdef FEATURE_WLAN_TDLS_INTERNAL - case eWNI_SME_TDLS_DISCOVERY_START_RSP: - { - /* remove pending eSmeCommandTdlsDiscovery command */ - csrTdlsRemoveSmeCmd(pMac, eSmeCommandTdlsDiscovery) ; - } - /* fall through .. */ - case eWNI_SME_TDLS_DISCOVERY_START_IND: - { - tSirTdlsDisRsp *disRsp = (tSirTdlsDisRsp *)pMsgBuf ; - - if(eSIR_SME_SUCCESS == disRsp->statusCode) - { - tCsrTdlsCtxStruct *disInfo = &pMac->tdlsCtx ; - tANI_U16 disStaCount = disRsp->numDisSta ; - tCsrTdlsPeerLinkinfo *peerLinkInfo = NULL ; - tANI_U8 i = 0 ; - - VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, - ("DIS START RSP/IND recieved sta count = %d"), disStaCount) ; - for( ; i < disStaCount ; i++) - { - tSirTdlsPeerInfo *peerInfo = &disRsp->tdlsDisPeerInfo[i] ; - VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, - ("SME, peer MAC: "MAC_ADDRESS_STR), - MAC_ADDR_ARRAY(peerInfo->peerMac)); - - peerLinkInfo = findTdlsPeer(pMac, - &disInfo->tdlsPotentialPeerList, - peerInfo->peerMac) ; - - if(NULL == peerLinkInfo) - { - /* update discovery data base, if this is new entry */ - tdlsSaveTdlsPeerInfo(pMac, peerInfo) ; - } - else - { - /* update RSSI of existing peer */ - tSirTdlsPeerInfo *newPeerInfo = - &peerLinkInfo->tdlsDisPeerInfo ; - newPeerInfo->tdlsPeerRssi = peerInfo->tdlsPeerRssi ; - } - } - if(0 == i) - { - smsLog( pMac, LOGW, "there is no tdls client \ - discovered .." ) ; - } - } - else - { - smsLog( pMac, LOGW, "there is no tdls client discovered .." ); - } - /* Now free the memory for this message */ - break ; - } - case eWNI_SME_TDLS_LINK_START_RSP: - { - /* remove pending eSmeCommandTdlsLinkSetup command */ - csrTdlsRemoveSmeCmd(pMac, eSmeCommandTdlsLinkSetup) ; - } - /* fall through .. */ - case eWNI_SME_TDLS_LINK_START_IND: - { - tSirTdlsLinksetupRsp *linkSetupRsp = - (tSirTdlsLinksetupRsp *) pMsgBuf ; - - if(eSIR_SME_SUCCESS == linkSetupRsp->statusCode) - { - VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, - ("Link setup for Peer "MAC_ADDRESS_STR), - MAC_ADDR_ARRAY(linkSetupRsp->peerMac)); - - tdlsUpdateTdlsPeerState(pMac, linkSetupRsp->peerMac, - TDLS_LINK_SETUP_STATE) ; - } - else - { - smsLog( pMac, LOGW, "failure receieved in link setup .." ); - } - break ; - } - - case eWNI_SME_TDLS_TEARDOWN_RSP: - { - VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, - ("TEARDOWN RSP from PE ")) ; - /* remove pending eSmeCommandTdlsLinkTear command */ - csrTdlsRemoveSmeCmd(pMac, eSmeCommandTdlsLinkTear) ; - } - /* fall through .. */ - case eWNI_SME_TDLS_TEARDOWN_IND: - { - tSirTdlsTeardownRsp *linkTearRsp = - (tSirTdlsTeardownRsp *) pMsgBuf ; - if(eSIR_SME_SUCCESS == linkTearRsp->statusCode) - { - - VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, - ("Teardown peer MAC = "MAC_ADDRESS_STR), - MAC_ADDR_ARRAY(linkTearRsp->peerMac)); - tdlsDeleteTdlsPeerInfo(pMac, linkTearRsp->peerMac) ; - } - else - { - VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, - ("failure receieved in Teardown .." )); - } - break ; - } - case eWNI_SME_ADD_TDLS_PEER_IND: - { - tSirTdlsPeerInd *peerInd = (tSirTdlsPeerInd *) pMsgBuf ; - vos_mem_copy( &roamInfo.peerMac, peerInd->peerMac, - sizeof(tSirMacAddr)) ; - roamInfo.staId = peerInd->staId ; - roamInfo.ucastSig = peerInd->ucastSig ; - roamInfo.bcastSig = peerInd->bcastSig ; - /* - * register peer with TL, we have to go through HDD as this is - * the only way to register any STA with TL. - */ - csrRoamCallCallback(pMac, peerInd->sessionId, &roamInfo, 0, - eCSR_ROAM_TDLS_STATUS_UPDATE, - eCSR_ROAM_RESULT_ADD_TDLS_PEER); - break ; - - } - case eWNI_SME_DELETE_TDLS_PEER_IND: - { - tSirTdlsPeerInd *peerInd = (tSirTdlsPeerInd *) pMsgBuf ; - vos_mem_copy( &roamInfo.peerMac, peerInd->peerMac, - sizeof(tSirMacAddr)) ; - roamInfo.staId = peerInd->staId ; - /* - * register peer with TL, we have to go through HDD as this is - * the only way to register any STA with TL. - */ - csrRoamCallCallback(pMac, peerInd->sessionId, &roamInfo, 0, - eCSR_ROAM_TDLS_STATUS_UPDATE, - eCSR_ROAM_RESULT_DELETE_TDLS_PEER); - break ; - - } -#endif case eWNI_SME_TDLS_SHOULD_DISCOVER: { tSirTdlsEventNotify *tevent = (tSirTdlsEventNotify *) pMsgBuf; diff --git a/CORE/SME/src/pmc/pmcApi.c b/CORE/SME/src/pmc/pmcApi.c index e7a15c8c5895..50bc4c9e45aa 100644 --- a/CORE/SME/src/pmc/pmcApi.c +++ b/CORE/SME/src/pmc/pmcApi.c @@ -3917,6 +3917,31 @@ eHalStatus pmcOffloadStopUapsd(tHalHandle hHal, tANI_U32 sessionId) return status; } +tANI_BOOLEAN pmcOffloadIsStaInPowerSave(tpAniSirGlobal pMac, tANI_U32 sessionId) +{ + tpPsOffloadPerSessionInfo pmc; + tANI_BOOLEAN StainPS = TRUE; + + if(!CSR_IS_SESSION_VALID(pMac, sessionId)) + { + smsLog(pMac, LOGE, FL("Invalid SessionId %x"), sessionId); + return TRUE; + } + + /* Check whether the give session is Infra and in Connected State */ + if(!csrIsConnStateConnectedInfra(pMac, sessionId)) + { + smsLog(pMac, LOG1, FL("Sta not infra/connected state %d"), sessionId); + return TRUE; + } + else + { + pmc = &pMac->pmcOffloadInfo.pmc[sessionId]; + StainPS = (pmc->pmcState == BMPS) || (pmc->pmcState == UAPSD); + return StainPS; + } +} + tANI_BOOLEAN pmcOffloadProcessCommand(tpAniSirGlobal pMac, tSmeCmd *pCommand) { eHalStatus status = eHAL_STATUS_SUCCESS; @@ -4236,11 +4261,13 @@ tANI_BOOLEAN pmcOffloadIsPowerSaveEnabled (tHalHandle hHal, tANI_U32 sessionId, } eHalStatus PmcOffloadEnableDeferredStaModePowerSave(tHalHandle hHal, - tANI_U32 sessionId) + tANI_U32 sessionId, + tANI_BOOLEAN isReassoc) { tpAniSirGlobal pMac = PMAC_STRUCT(hHal); tpPsOffloadPerSessionInfo pmc = &pMac->pmcOffloadInfo.pmc[sessionId]; eHalStatus status = eHAL_STATUS_FAILURE; + tANI_U32 timer_value; if (!pMac->pmcOffloadInfo.staPsEnabled) { @@ -4249,8 +4276,16 @@ eHalStatus PmcOffloadEnableDeferredStaModePowerSave(tHalHandle hHal, return status; } + if(isReassoc) + timer_value = AUTO_PS_ENTRY_TIMER_DEFAULT_VALUE; + else + timer_value = AUTO_DEFERRED_PS_ENTRY_TIMER_DEFAULT_VALUE; + + pmcLog(pMac, LOG1, FL("Start AutoPsTimer for %d isReassoc:%d "), + timer_value, isReassoc); + status = pmcOffloadStartAutoStaPsTimer(pMac, sessionId, - AUTO_DEFERRED_PS_ENTRY_TIMER_DEFAULT_VALUE); + timer_value); if (eHAL_STATUS_SUCCESS == status) { smsLog(pMac, LOG2, diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c index ecd52436694e..011453c6be4e 100644 --- a/CORE/SME/src/sme_common/sme_Api.c +++ b/CORE/SME/src/sme_common/sme_Api.c @@ -1104,13 +1104,6 @@ sme_process_cmd: case eSmeCommandTdlsAddPeer: case eSmeCommandTdlsDelPeer: case eSmeCommandTdlsLinkEstablish: -#ifdef FEATURE_WLAN_TDLS_INTERNAL - case eSmeCommandTdlsDiscovery: - case eSmeCommandTdlsLinkSetup: - case eSmeCommandTdlsLinkTear: - case eSmeCommandTdlsEnterUapsd: - case eSmeCommandTdlsExitUapsd: -#endif { VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, "sending TDLS Command 0x%x to PE", pCommand->command); @@ -2538,16 +2531,6 @@ eHalStatus sme_ProcessMsg(tHalHandle hHal, vos_msg_t* pMsg) case eWNI_SME_TDLS_SHOULD_DISCOVER: case eWNI_SME_TDLS_SHOULD_TEARDOWN: case eWNI_SME_TDLS_PEER_DISCONNECTED: -#ifdef FEATURE_WLAN_TDLS_INTERNAL - case eWNI_SME_TDLS_DISCOVERY_START_RSP: - case eWNI_SME_TDLS_DISCOVERY_START_IND: - case eWNI_SME_TDLS_LINK_START_RSP: - case eWNI_SME_TDLS_LINK_START_IND: - case eWNI_SME_TDLS_TEARDOWN_RSP: - case eWNI_SME_TDLS_TEARDOWN_IND: - case eWNI_SME_ADD_TDLS_PEER_IND: - case eWNI_SME_DELETE_TDLS_PEER_IND: -#endif { if (pMsg->bodyptr) { @@ -6376,88 +6359,6 @@ VOS_STATUS sme_GetWcnssHardwareVersion(tHalHandle hHal, #ifdef FEATURE_WLAN_WAPI -/* --------------------------------------------------------------------------- - \fn sme_RoamSetBKIDCache - \brief The SME API exposed to HDD to allow HDD to provde SME the BKID - candidate list. - \param hHal - Handle to the HAL. The HAL handle is returned by the HAL after - it is opened (by calling halOpen). - \param pBKIDCache - caller allocated buffer point to an array of tBkidCacheInfo - \param numItems - a variable that has the number of tBkidCacheInfo allocated - when retruning, this is the number of items put into pBKIDCache - \return eHalStatus - when fail, it usually means the buffer allocated is not - big enough and pNumItems has the number of tBkidCacheInfo. - ---------------------------------------------------------------------------*/ -eHalStatus sme_RoamSetBKIDCache( tHalHandle hHal, tANI_U32 sessionId, tBkidCacheInfo *pBKIDCache, - tANI_U32 numItems ) -{ - eHalStatus status = eHAL_STATUS_FAILURE; - tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - - status = sme_AcquireGlobalLock( &pMac->sme ); - if ( HAL_STATUS_SUCCESS( status ) ) - { - status = csrRoamSetBKIDCache( pMac, sessionId, pBKIDCache, numItems ); - sme_ReleaseGlobalLock( &pMac->sme ); - } - - return (status); -} - -/* --------------------------------------------------------------------------- - \fn sme_RoamGetBKIDCache - \brief The SME API exposed to HDD to allow HDD to request SME to return its - BKID cache. - \param hHal - Handle to the HAL. The HAL handle is returned by the HAL after - it is opened (by calling halOpen). - \param pNum - caller allocated memory that has the space of the number of - tBkidCacheInfo as input. Upon returned, *pNum has the needed number of entries - in SME cache. - \param pBkidCache - Caller allocated memory that contains BKID cache, if any, - upon return - \return eHalStatus - when fail, it usually means the buffer allocated is not - big enough. - ---------------------------------------------------------------------------*/ -eHalStatus sme_RoamGetBKIDCache(tHalHandle hHal, tANI_U32 *pNum, - tBkidCacheInfo *pBkidCache) -{ - eHalStatus status = eHAL_STATUS_FAILURE; - tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - - status = sme_AcquireGlobalLock( &pMac->sme ); - if ( HAL_STATUS_SUCCESS( status ) ) - { - smsLog(pMac, LOGE, FL(" !!!!!!!!!!!!!!!!!!SessionId is hardcoded")); - status = csrRoamGetBKIDCache( pMac, 0, pNum, pBkidCache ); - sme_ReleaseGlobalLock( &pMac->sme ); - } - - return (status); -} - -/* --------------------------------------------------------------------------- - \fn sme_RoamGetNumBKIDCache - \brief The SME API exposed to HDD to allow HDD to request SME to return the - number of BKID cache entries. - \param hHal - Handle to the HAL. The HAL handle is returned by the HAL after - it is opened (by calling halOpen). - \return tANI_U32 - the number of BKID cache entries. - ---------------------------------------------------------------------------*/ -tANI_U32 sme_RoamGetNumBKIDCache(tHalHandle hHal, tANI_U32 sessionId) -{ - eHalStatus status = eHAL_STATUS_FAILURE; - tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - tANI_U32 numBkidCache = 0; - - status = sme_AcquireGlobalLock( &pMac->sme ); - if ( HAL_STATUS_SUCCESS( status ) ) - { - numBkidCache = csrRoamGetNumBKIDCache( pMac, sessionId ); - sme_ReleaseGlobalLock( &pMac->sme ); - } - - return (numBkidCache); -} /* --------------------------------------------------------------------------- \fn sme_ScanGetBKIDCandidateList @@ -11229,107 +11130,6 @@ v_BOOL_t sme_IsPmcBmps(tHalHandle hHal) return (BMPS == pmcGetPmcState(hHal)); } -#ifdef FEATURE_WLAN_TDLS_INTERNAL -/* - * SME API to start TDLS discovery Procedure - */ -VOS_STATUS sme_StartTdlsDiscoveryReq(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr peerMac) -{ - VOS_STATUS status = VOS_STATUS_SUCCESS; - tCsrTdlsDisRequest disReq = {{0}} ; - vos_mem_copy(disReq.peerMac, peerMac, sizeof(tSirMacAddr)) ; - status = csrTdlsDiscoveryReq(hHal, sessionId, &disReq) ; - - return status ; - -} - -/* - * Process TDLS discovery results - */ -v_U8_t sme_GetTdlsDiscoveryResult(tHalHandle hHal, - tSmeTdlsDisResult *disResult, v_U8_t listType) -{ - tCsrTdlsPeerLinkinfo *peerLinkInfo = NULL ; - tSirTdlsPeerInfo *peerInfo = NULL ; - tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); - tCsrTdlsCtxStruct *disInfo = &pMac->tdlsCtx ; - tDblLinkList *peerList = &disInfo->tdlsPotentialPeerList ; - tListElem *pEntry = NULL ; - v_U8_t peerCnt = 0 ; - - VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, - ("TDLS peer count = %d"),disInfo->tdlsPeerCount ) ; - pEntry = csrLLPeekHead( peerList, LL_ACCESS_LOCK ); - while(pEntry) - { - peerLinkInfo = GET_BASE_ADDR( pEntry, tCsrTdlsPeerLinkinfo, - tdlsPeerStaLink) ; - peerInfo = &peerLinkInfo->tdlsDisPeerInfo ; - - switch(listType) - { - case TDLS_SETUP_LIST: - { - if(TDLS_LINK_SETUP_STATE == peerInfo->tdlsPeerState) - { - vos_mem_copy(disResult[peerCnt].tdlsPeerMac, - peerInfo->peerMac, sizeof(tSirMacAddr)); - disResult[peerCnt].tdlsPeerRssi = peerInfo->tdlsPeerRssi ; - peerCnt++ ; - } - break ; - } - case TDLS_DIS_LIST: - { - vos_mem_copy(disResult[peerCnt].tdlsPeerMac, - peerInfo->peerMac, sizeof(tSirMacAddr)); - disResult[peerCnt].tdlsPeerRssi = peerInfo->tdlsPeerRssi ; - peerCnt++ ; - break ; - } - default: - { - VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, - ("unknown list type ")) ; - break ; - } - } - - pEntry = csrLLNext( peerList, pEntry, LL_ACCESS_LOCK) ; - } - - return peerCnt ; - -} - -/* - * SME API to start TDLS link setup Procedure. - */ -VOS_STATUS sme_StartTdlsLinkSetupReq(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr peerMac) -{ - VOS_STATUS status = VOS_STATUS_SUCCESS; - tCsrTdlsSetupRequest setupReq = {{0}} ; - vos_mem_copy(setupReq.peerMac, peerMac, sizeof(tSirMacAddr)) ; - status = csrTdlsSetupReq(hHal, sessionId, &setupReq) ; - return status ; - -} - -/* - * SME API to start TDLS link Teardown Procedure. - */ -VOS_STATUS sme_StartTdlsLinkTeardownReq(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr peerMac) -{ - VOS_STATUS status = VOS_STATUS_SUCCESS; - tCsrTdlsTeardownRequest teardownReq = {{0}} ; - vos_mem_copy(teardownReq.peerMac, peerMac, sizeof(tSirMacAddr)) ; - status = csrTdlsTeardownReq(hHal, sessionId, &teardownReq) ; - return status ; - -} - -#endif /* FEATURE_WLAN_TDLS */ eHalStatus sme_UpdateDfsSetting(tHalHandle hHal, tANI_U8 fUpdateEnableDFSChnlScan) { @@ -12394,7 +12194,8 @@ eHalStatus sme_PsOffloadDisablePowerSave (tHalHandle hHal, tANI_U32 sessionId) } eHalStatus sme_PsOffloadEnableDeferredPowerSave (tHalHandle hHal, - tANI_U32 sessionId) + tANI_U32 sessionId, + tANI_BOOLEAN isReassoc) { eHalStatus status = eHAL_STATUS_FAILURE; tpAniSirGlobal pMac = PMAC_STRUCT(hHal); @@ -12402,7 +12203,8 @@ eHalStatus sme_PsOffloadEnableDeferredPowerSave (tHalHandle hHal, status = sme_AcquireGlobalLock(&pMac->sme); if (HAL_STATUS_SUCCESS( status )) { - status = PmcOffloadEnableDeferredStaModePowerSave(hHal, sessionId); + status = PmcOffloadEnableDeferredStaModePowerSave(hHal, sessionId, + isReassoc); sme_ReleaseGlobalLock( &pMac->sme ); } return (status); @@ -13326,6 +13128,26 @@ tANI_BOOLEAN sme_staInMiddleOfRoaming(tHalHandle hHal, tANI_U8 sessionId) return ret; } +/* --------------------------------------------------------------------------- + \fn sme_PsOffloadIsStaInPowerSave + \brief This function returns TRUE if STA is in power save + \param hHal - HAL handle for device + \param sessionId - Session Identifier + \return TRUE or FALSE + -------------------------------------------------------------------------*/ +tANI_BOOLEAN sme_PsOffloadIsStaInPowerSave(tHalHandle hHal, tANI_U8 sessionId) +{ + tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + eHalStatus status = eHAL_STATUS_SUCCESS; + tANI_BOOLEAN ret = FALSE; + + if (eHAL_STATUS_SUCCESS == (status = sme_AcquireGlobalLock(&pMac->sme))) { + ret = pmcOffloadIsStaInPowerSave(pMac, sessionId); + sme_ReleaseGlobalLock(&pMac->sme); + } + return ret; +} + VOS_STATUS sme_UpdateDSCPtoUPMapping( tHalHandle hHal, sme_QosWmmUpType *dscpmapping, v_U8_t sessionId ) diff --git a/CORE/SME/src/sme_common/sme_Trace.c b/CORE/SME/src/sme_common/sme_Trace.c index b8751c0d0749..0295cbfc9468 100644 --- a/CORE/SME/src/sme_common/sme_Trace.c +++ b/CORE/SME/src/sme_common/sme_Trace.c @@ -187,13 +187,13 @@ static void smeTraceDump(tpAniSirGlobal pMac, tpvosTraceRecord pRecord, { if (TRACE_CODE_SME_COMMAND == pRecord->code) { - smsLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x)", recIndex, + smsLog(pMac, LOGE, "%04d %012llu S%d %-14s %-30s(0x%x)", recIndex, pRecord->time, pRecord->session, "SME COMMAND:", smeTraceGetCommandString(pRecord->data), pRecord->data ); } else { - smsLog(pMac, LOGE, "%04d %012u S%d %-14s %-30s(0x%x)", recIndex, + smsLog(pMac, LOGE, "%04d %012llu S%d %-14s %-30s(0x%x)", recIndex, pRecord->time, pRecord->session, "RX HDD MSG:", smeTraceGetRxMsgString(pRecord->code), pRecord->data ); } diff --git a/CORE/SVC/external/wlan_nlink_common.h b/CORE/SVC/external/wlan_nlink_common.h index ae7151e1c645..d3d38ecf6df9 100644 --- a/CORE/SVC/external/wlan_nlink_common.h +++ b/CORE/SVC/external/wlan_nlink_common.h @@ -132,6 +132,7 @@ struct wlan_status_data { uint8_t is_on; uint8_t vdev_id; uint8_t is_connected; + int8_t rssi; uint8_t ssid_len; uint8_t country_code[WLAN_SVC_COUNTRY_CODE_LEN]; uint32_t vdev_mode; diff --git a/CORE/SVC/src/ptt/wlan_ptt_sock_svc.c b/CORE/SVC/src/ptt/wlan_ptt_sock_svc.c index 3732d26fce90..5914c733e2cd 100644 --- a/CORE/SVC/src/ptt/wlan_ptt_sock_svc.c +++ b/CORE/SVC/src/ptt/wlan_ptt_sock_svc.c @@ -263,7 +263,8 @@ static void ptt_proc_quarky_msg(tAniNlHdr *wnl, tAniHdr *wmsg, int radio) ptt_sock_send_msg_to_app(wmsg, 0, ANI_NL_MSG_PUMAC, wnl->nlh.nlmsg_pid); break; case PTT_MSG_FTM_CMDS_TYPE: - wlan_hdd_process_ftm_cmd(pAdapterHandle,wnl); + PTT_TRACE(VOS_TRACE_LEVEL_ERROR, "%s: unsupported FTM msg cmd [0x%X], length [0x%X]\n", + __func__, ani_msg_type, be16_to_cpu(wmsg->length )); break; default: PTT_TRACE(VOS_TRACE_LEVEL_ERROR, "%s: Unknown ANI Msg [0x%X], length [0x%X]\n", diff --git a/CORE/SYS/legacy/src/system/src/sysEntryFunc.c b/CORE/SYS/legacy/src/system/src/sysEntryFunc.c index 5f46c879764e..ec3bd6f99a87 100644 --- a/CORE/SYS/legacy/src/system/src/sysEntryFunc.c +++ b/CORE/SYS/legacy/src/system/src/sysEntryFunc.c @@ -197,53 +197,6 @@ sysBbtProcessMessageCore(tpAniSirGlobal pMac, tpSirMsgQ pMsg, tANI_U32 type, } else if (type == SIR_MAC_DATA_FRAME) { -#ifdef FEATURE_WLAN_TDLS_INTERNAL - /* - * if we reached here, probably this frame can be TDLS frame. - */ - v_U16_t ethType = 0 ; - v_U8_t *mpduHdr = NULL ; - v_U8_t *ethTypeOffset = NULL ; - - /* - * Peek into payload and extract ethtype. - * In TDLS we can recieve TDLS frames with MAC HEADER (802.11) and also - * without MAC Header (Particularly TDLS action frames on direct link. - */ - mpduHdr = (v_U8_t *)WDA_GET_RX_MAC_HEADER(pBd) ; - -#define SIR_MAC_ETH_HDR_LEN (14) - if(0 != WDA_GET_RX_FT_DONE(pBd)) - { - ethTypeOffset = mpduHdr + SIR_MAC_ETH_HDR_LEN - sizeof(ethType) ; - } - else - { - ethTypeOffset = mpduHdr + WDA_GET_RX_MPDU_HEADER_LEN(pBd) - + RFC1042_HDR_LENGTH ; - } - - ethType = GET_BE16(ethTypeOffset) ; - if(ETH_TYPE_89_0d == ethType) - { - - VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, - ("TDLS Data Frame \n")) ; - /* Post the message to PE Queue */ - PELOGE(sysLog(pMac, LOGE, FL("posting to TDLS frame to lim\n"));) - - ret = (tSirRetStatus) limPostMsgApi(pMac, pMsg); - if (ret != eSIR_SUCCESS) - { - PELOGE(sysLog(pMac, LOGE, FL("posting to LIM2 failed, \ - ret %d\n"), ret);) - goto fail; - } - else - return eSIR_SUCCESS; - } - /* fall through if ethType != TDLS, which is error case */ -#endif #ifdef FEATURE_WLAN_ESE PELOGW(sysLog(pMac, LOGW, FL("IAPP Frame...\n"));); //Post the message to PE Queue diff --git a/CORE/TL/src/wlan_qct_tl.c b/CORE/TL/src/wlan_qct_tl.c index a1c62f176d59..fa47eabc5a14 100644 --- a/CORE/TL/src/wlan_qct_tl.c +++ b/CORE/TL/src/wlan_qct_tl.c @@ -345,25 +345,6 @@ WLANTL_GetEtherType v_U16_t * usEtherType ); -#ifdef FEATURE_WLAN_TDLS_INTERNAL -/* FIXME_MUST: during TDLS integration to main/latest, WLANTL_GetEtherType() conflicts. -But there is difference. existing WLANTL_GetEtherType() expects vosDataBuff->offset points to MPDU Header, -wherease TDLS expect vosDataBuff->offset should still points to RxBd. -So far, data frmae stripped RxBD and passed to data frame handler. -(RxBd should not be stripped in case TDLS, because it will be eventually routed to mgmt packet -handler, where RX BD should be preserved) -To avoid breaking existing functionality, for now, I temporarily rename to -WLANTL_GetEtherType_2(). Eventually this function should be removed and merged to WLANTL_GetEtherType() -*/ -static VOS_STATUS -WLANTL_GetEtherType_2 -( - v_U8_t * aucBDHeader, - vos_pkt_t * vosDataBuff, - v_U8_t ucMPDUHLen, - v_U16_t * usEtherType -); -#endif #ifdef FEATURE_WLAN_WAPI /*--------------------------------------------------------------------------- * Adding a global variable to be used when doing frame translation in TxAuth @@ -5476,10 +5457,6 @@ WLANTL_RxFrames static v_U8_t first_data_pkt_arrived; v_U32_t uDPUSig; v_U16_t usPktLen; -#ifdef FEATURE_WLAN_TDLS_INTERNAL - v_U8_t ucMPDUHLen = 0 ; - v_U16_t usEtherType = 0; -#endif v_BOOL_t bForwardIAPPwithLLC = VOS_FALSE; /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ @@ -5580,13 +5557,6 @@ WLANTL_RxFrames continue; } -#ifdef FEATURE_WLAN_TDLS_INTERNAL - if ( WLANTL_IS_DATA_FRAME(ucFrmType)) - { - ucMPDUHLen = (v_U8_t)WDA_GET_RX_MPDU_HEADER_LEN(pvBDHeader); - WLANTL_GetEtherType_2(pvBDHeader, vosTempBuff, ucMPDUHLen, &usEtherType) ; - } -#endif vos_pkt_get_packet_length(vosTempBuff, &usPktLen); /*--------------------------------------------------------------------- @@ -5594,9 +5564,6 @@ WLANTL_RxFrames ---------------------------------------------------------------------*/ if ( WLANTL_IS_MGMT_FRAME(ucFrmType) -#ifdef FEATURE_WLAN_TDLS_INTERNAL - || (WLANTL_IS_TDLS_FRAME(usEtherType)) -#endif ) { TLLOG2(VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO_HIGH, @@ -12147,83 +12114,6 @@ VOS_STATUS WLANTL_GetSoftAPStatistics(v_PVOID_t pAdapter, WLANTL_TRANSFER_STA_TY return vosStatus; } -#ifdef FEATURE_WLAN_TDLS_INTERNAL -/*========================================================================== - FUNCTION WLANTL_GetEtherType_2 - - DESCRIPTION Extract Ether type information from the BD - - DEPENDENCIES NONE - - PARAMETERS in aucBDHeader - BD header - in vosDataBuff - data buffer - in ucMPDUHLen - MPDU header length - out pUsEtherType - pointer to Ethertype - - RETURN VALUE VOS_STATUS_SUCCESS : if the EtherType is successfully extracted - VOS_STATUS_FAILURE : if the EtherType extraction failed and - the packet was dropped - - SIDE EFFECTS NONE - -============================================================================*/ -static VOS_STATUS WLANTL_GetEtherType_2 -( - v_U8_t * aucBDHeader, - vos_pkt_t * vosDataBuff, - v_U8_t ucMPDUHLen, - v_U16_t * pUsEtherType -) -{ - v_U8_t ucOffset; - v_U16_t usEtherType = *pUsEtherType; - v_SIZE_t usLLCSize = sizeof(usEtherType); - VOS_STATUS vosStatus = VOS_STATUS_SUCCESS; - //v_U8_t ucLLCHeader; - v_U8_t ucMPDUHOffset ; - /*------------------------------------------------------------------------ - Check if LLC is present - if not, TL is unable to determine type - ------------------------------------------------------------------------*/ - //ucMPDUHOffset = (v_U8_t)WLANHAL_RX_BD_GET_MPDU_H_OFFSET(aucBDHeader) ; - //ucLLCHeader = (v_U8_t)WLANHAL_RX_BD_GET_LLC(aucBDHeader); - ucMPDUHOffset = (v_U8_t)WDA_GET_RX_MPDU_HEADER_OFFSET(aucBDHeader); - - if ( VOS_TRUE == WDA_IS_RX_LLC_PRESENT(aucBDHeader) ) - { - ucOffset = ucMPDUHOffset + WLANTL_802_3_HEADER_LEN - sizeof(usEtherType); - } - else - { - ucOffset = WLANHAL_RX_BD_HEADER_SIZE + ucMPDUHLen - + WLANTL_LLC_PROTO_TYPE_OFFSET; - } - - /*------------------------------------------------------------------------ - Extract LLC type - ------------------------------------------------------------------------*/ - vosStatus = vos_pkt_extract_data( vosDataBuff, ucOffset, - (v_PVOID_t)&usEtherType, &usLLCSize); - - /* TODO: Do it in better way */ - if(vos_be16_to_cpu(usEtherType) == 0x890d) - { - VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_ERROR, - ("TDLS frame llc %x"), vos_be16_to_cpu(usEtherType)) ; - } - - VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO_HIGH, - "WLAN TL:Ether type retrieved before endianess conv: %d", - usEtherType); - - usEtherType = vos_be16_to_cpu(usEtherType); - *pUsEtherType = usEtherType; - - VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO_HIGH, - "WLAN TL:Ether type retrieved: %d", usEtherType); - - return vosStatus; -} -#endif /* FEATURE_WLAN_TDLS */ /*=============================================================================== FUNCTION WLANTL_IsReplayPacket diff --git a/CORE/VOSS/inc/vos_trace.h b/CORE/VOSS/inc/vos_trace.h index 27d85c4c79e8..c7bd2ddbaf64 100644 --- a/CORE/VOSS/inc/vos_trace.h +++ b/CORE/VOSS/inc/vos_trace.h @@ -110,7 +110,7 @@ typedef enum ------------------------------------------------------------------------*/ typedef struct svosTraceRecord { - v_U32_t time; + v_U64_t time; v_U8_t module; v_U8_t code; v_U8_t session; diff --git a/CORE/VOSS/src/vos_nvitem.c b/CORE/VOSS/src/vos_nvitem.c index a6d5752ff6d8..0575dcc64878 100644 --- a/CORE/VOSS/src/vos_nvitem.c +++ b/CORE/VOSS/src/vos_nvitem.c @@ -739,7 +739,10 @@ const sRegulatoryChannel * regChannels = nvDefaults.tables.regDomains[0].channel /*---------------------------------------------------------------------------- Function Definitions and Documentation * -------------------------------------------------------------------------*/ -VOS_STATUS wlan_write_to_efs (v_U8_t *pData, v_U16_t data_len); +VOS_STATUS wlan_write_to_efs (v_U8_t *pData, v_U16_t data_len) +{ + return VOS_STATUS_SUCCESS; +} /**------------------------------------------------------------------------ \brief vos_nv_init() - initialize the NV module The \a vos_nv_init() initializes the NV module. This read the binary diff --git a/CORE/VOSS/src/vos_trace.c b/CORE/VOSS/src/vos_trace.c index bef18b6ce9cf..3f8057ec64c9 100644 --- a/CORE/VOSS/src/vos_trace.c +++ b/CORE/VOSS/src/vos_trace.c @@ -61,7 +61,7 @@ #include <vos_trace.h> #include <aniGlobal.h> #include <wlan_logging_sock_svc.h> - +#include "adf_os_time.h" /*-------------------------------------------------------------------------- Preprocessor definitions and constants ------------------------------------------------------------------------*/ @@ -529,7 +529,7 @@ void vos_trace(v_U8_t module, v_U8_t code, v_U8_t session, v_U32_t data) rec->code = code; rec->session = session; rec->data = data; - rec->time = vos_timer_get_system_time(); + rec->time = adf_get_boottime(); rec->module = module; gvosTraceData.numSinceLastDump ++; spin_unlock_irqrestore(<raceLock, flags); diff --git a/CORE/WDA/inc/legacy/halMsgApi.h b/CORE/WDA/inc/legacy/halMsgApi.h index ffaaf68aa239..c692075e1675 100644 --- a/CORE/WDA/inc/legacy/halMsgApi.h +++ b/CORE/WDA/inc/legacy/halMsgApi.h @@ -534,6 +534,7 @@ typedef struct tANI_U8 reassocReq; // Set only during roaming reassociation tANI_U16 chainMask; tANI_U16 smpsMode; + tANI_U8 dot11_mode; } tAddBssParams, * tpAddBssParams; typedef struct @@ -1022,6 +1023,8 @@ typedef struct tANI_U8 isDfsChannel; tANI_U8 vhtCapable; + + tANI_U8 dot11_mode; }tSwitchChannelParams, *tpSwitchChannelParams; typedef struct CSAOffloadParams { |
