diff options
| author | Naveen Rawat <nrawat@qca.qualcomm.com> | 2016-03-21 12:06:52 -0700 |
|---|---|---|
| committer | Anjaneedevi Kapparapu <akappa@codeaurora.org> | 2016-04-12 14:36:52 +0530 |
| commit | 25fa9216e44910a344a36ed75db89d70e61cf3cf (patch) | |
| tree | 3a4ecd02757ea9da07bb1482df47205038dfdc07 | |
| parent | b71604d7403a64db162e163608897c3ac346bc09 (diff) | |
qcacld-2.0: Fix __hdd_hard_start_xmit API for NAN Data Interface
Make changes in __hdd_hard_start_xmit API registered with OS to enable
data path for NAN Data Interface.
Change-Id: I1d54c79da127b1dac7ea8c8e0e855e043571ad77
CRs-Fixed: 962367
| -rw-r--r-- | CORE/HDD/inc/wlan_hdd_tx_rx.h | 19 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_assoc.c | 2 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_main.c | 2 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_nan_datapath.c | 15 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_nan_datapath.h | 4 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_tx_rx.c | 61 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/lim/limUtils.c | 2 |
7 files changed, 64 insertions, 41 deletions
diff --git a/CORE/HDD/inc/wlan_hdd_tx_rx.h b/CORE/HDD/inc/wlan_hdd_tx_rx.h index 927d17f430af..b4412b667b4a 100644 --- a/CORE/HDD/inc/wlan_hdd_tx_rx.h +++ b/CORE/HDD/inc/wlan_hdd_tx_rx.h @@ -176,15 +176,16 @@ extern VOS_STATUS hdd_rx_packet_cbk(v_VOID_t *vosContext, adf_nbuf_t rxBufChain, ===========================================================================*/ extern v_BOOL_t hdd_IsEAPOLPacket( vos_pkt_t *pVosPacket ); -/**============================================================================ - @brief hdd_Ibss_GetStaId() - Get the StationID using the Peer Mac address - @param pHddStaCtx : [in] pointer to HDD Station Context - pMacAddress [in] pointer to Peer Mac address - staID [out] pointer to Station Index - @return : VOS_STATUS_SUCCESS/VOS_STATUS_E_FAILURE - ===========================================================================*/ -VOS_STATUS hdd_Ibss_GetStaId(hdd_station_ctx_t *pHddStaCtx, - v_MACADDR_t *pMacAddress, v_U8_t *staId); + /** + * hdd_get_peer_sta_id() - Get the StationID using the Peer Mac address + * @sta_ctx: pointer to HDD Station Context + * @peer_mac_addr: pointer to Peer Mac address + * @sta_id: pointer to Station Index + * + * Returns: VOS_STATUS_SUCCESS on success, VOS_STATUS_E_FAILURE on error + */ +VOS_STATUS hdd_get_peer_sta_id(hdd_station_ctx_t *sta_ctx, + v_MACADDR_t *peer_mac_addr, uint8_t *sta_id); /**============================================================================ @brief hdd_flush_ibss_tx_queues() - diff --git a/CORE/HDD/src/wlan_hdd_assoc.c b/CORE/HDD/src/wlan_hdd_assoc.c index 8b7cc0e6e463..cd353d041df1 100644 --- a/CORE/HDD/src/wlan_hdd_assoc.c +++ b/CORE/HDD/src/wlan_hdd_assoc.c @@ -2553,7 +2553,7 @@ static eHalStatus hdd_RoamSetKeyCompleteHandler( hdd_adapter_t *pAdapter, tCsrRo } else { - vosStatus = hdd_Ibss_GetStaId(pHddStaCtx, + vosStatus = hdd_get_peer_sta_id(pHddStaCtx, (v_MACADDR_t*)pRoamInfo->peerMac, &staId); if ( VOS_STATUS_SUCCESS == vosStatus ) diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c index 38452eb4a504..95327fd9c74f 100644 --- a/CORE/HDD/src/wlan_hdd_main.c +++ b/CORE/HDD/src/wlan_hdd_main.c @@ -7134,7 +7134,7 @@ static int hdd_driver_command(hdd_adapter_t *pAdapter, } /* Get station index for the peer mac address and sanitize it */ - hdd_Ibss_GetStaId(pHddStaCtx, &peerMacAddr, &staIdx); + hdd_get_peer_sta_id(pHddStaCtx, &peerMacAddr, &staIdx); if (staIdx > HDD_MAX_NUM_IBSS_STA) { diff --git a/CORE/HDD/src/wlan_hdd_nan_datapath.c b/CORE/HDD/src/wlan_hdd_nan_datapath.c index f79d7632c77e..297d03d97217 100644 --- a/CORE/HDD/src/wlan_hdd_nan_datapath.c +++ b/CORE/HDD/src/wlan_hdd_nan_datapath.c @@ -453,7 +453,7 @@ static int hdd_ndp_initiator_req_handler(hdd_context_t *hdd_ctx, { hdd_adapter_t *adapter; char *iface_name; - struct ndp_initiator_req req; + struct ndp_initiator_req req = {0}; VOS_STATUS status; uint32_t ndp_qos_cfg; tHalHandle hal = hdd_ctx->hHal; @@ -704,6 +704,8 @@ static void hdd_ndp_iface_create_rsp_handler(hdd_adapter_t *adapter, hddLog(LOGE, FL("NDI interface successfully created")); ndp_ctx->ndp_create_transaction_id = 0; ndp_ctx->state = NAN_DATA_NDI_CREATED_STATE; + netif_carrier_on(adapter->dev); + netif_tx_start_all_queues(adapter->dev); } else { hddLog(LOGE, FL("NDI interface creation failed with reason %d"), @@ -752,6 +754,8 @@ static void hdd_ndp_iface_delete_rsp_handler(hdd_adapter_t *adapter, FL("NDI BSS stop failed with reason %d"), ndi_rsp->reason); + netif_carrier_off(adapter->dev); + netif_tx_stop_all_queues(adapter->dev); complete(&adapter->disconnect_comp_var); return; } @@ -946,6 +950,7 @@ static void hdd_ndp_new_peer_ind_handler(hdd_adapter_t *adapter, tCsrRoamInfo roam_info = {0}; struct nan_datapath_ctx *ndp_ctx = WLAN_HDD_GET_NDP_CTX_PTR(adapter); hdd_station_ctx_t *sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(adapter); + v_MACADDR_t bc_mac_addr = VOS_MAC_ADDR_BROADCAST_INITIALIZER; ENTER(); @@ -963,16 +968,20 @@ static void hdd_ndp_new_peer_ind_handler(hdd_adapter_t *adapter, /* this function is called for each new peer */ ndp_ctx->active_ndp_peers++; + hdd_roamRegisterSTA(adapter, &roam_info, new_peer_ind->sta_id, &new_peer_ind->peer_mac_addr, &tmp_bss_descp); hdd_ctx->sta_to_adapter[new_peer_ind->sta_id] = adapter; /* perform following steps for first new peer ind */ if (ndp_ctx->active_ndp_peers == 1) { + hdd_ctx->sta_to_adapter[NDP_BROADCAST_STAID] = adapter; + hdd_save_peer(sta_ctx, new_peer_ind->sta_id, &bc_mac_addr); + hdd_roamRegisterSTA(adapter, &roam_info, NDP_BROADCAST_STAID, + &bc_mac_addr, &tmp_bss_descp); hddLog(LOG1, FL("Set ctx connection state to connected")); sta_ctx->conn_info.connState = eConnectionState_NdiConnected; hdd_wmm_connect(adapter, &roam_info, eCSR_BSS_TYPE_NDI); - netif_carrier_on(adapter->dev); - netif_tx_start_all_queues(adapter->dev); + netif_tx_wake_all_queues(adapter->dev); } EXIT(); } diff --git a/CORE/HDD/src/wlan_hdd_nan_datapath.h b/CORE/HDD/src/wlan_hdd_nan_datapath.h index 5b19484103b5..3a36427f1236 100644 --- a/CORE/HDD/src/wlan_hdd_nan_datapath.h +++ b/CORE/HDD/src/wlan_hdd_nan_datapath.h @@ -40,6 +40,10 @@ struct wireless_dev; #define NDP_APP_INFO_LEN 255 #define NDP_QOS_INFO_LEN 255 + +#define HDD_MAX_NUM_NDP_STA (HDD_MAX_NUM_IBSS_STA) +#define NDP_BROADCAST_STAID (IBSS_BROADCAST_STAID) + #ifdef WLAN_FEATURE_NAN_DATAPATH #define WLAN_HDD_IS_NDI(adapter) ((adapter)->device_mode == WLAN_HDD_NDI) diff --git a/CORE/HDD/src/wlan_hdd_tx_rx.c b/CORE/HDD/src/wlan_hdd_tx_rx.c index afe94dc9c0d0..a7427f1f9cc5 100644 --- a/CORE/HDD/src/wlan_hdd_tx_rx.c +++ b/CORE/HDD/src/wlan_hdd_tx_rx.c @@ -66,6 +66,8 @@ #include <wlan_hdd_ipa.h> #endif +#include "wlan_hdd_nan_datapath.h" + /*--------------------------------------------------------------------------- Preprocessor definitions and constants -------------------------------------------------------------------------*/ @@ -482,8 +484,8 @@ int __hdd_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) v_MACADDR_t *pDestMacAddress = (v_MACADDR_t*)skb->data; if ( VOS_STATUS_SUCCESS != - hdd_Ibss_GetStaId(&pAdapter->sessionCtx.station, - pDestMacAddress, &STAId)) + hdd_get_peer_sta_id(&pAdapter->sessionCtx.station, + pDestMacAddress, &STAId)) { STAId = HDD_WLAN_INVALID_STA_ID; } @@ -502,9 +504,17 @@ int __hdd_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) "%s: Received Unicast frame with invalid staID", __func__); goto drop_pkt; } - } - else - { + } else if (WLAN_HDD_NDI == pAdapter->device_mode) { + v_MACADDR_t *pDestMacAddress = (v_MACADDR_t *)skb->data; + if (hdd_get_peer_sta_id(&pAdapter->sessionCtx.station, + pDestMacAddress, &STAId) + != VOS_STATUS_SUCCESS) { + VOS_TRACE(VOS_MODULE_ID_HDD_DATA, VOS_TRACE_LEVEL_WARN, + FL("Can't find peer: %pM, dropping packet"), + pDestMacAddress); + goto drop_pkt; + } + } else { if (WLAN_HDD_OCB != pAdapter->device_mode && eConnectionState_Associated != pHddStaCtx->conn_info.connState) { @@ -702,30 +712,29 @@ int hdd_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) return ret; } -/**============================================================================ - @brief hdd_Ibss_GetStaId() - Get the StationID using the Peer Mac address - - @param pHddStaCtx : [in] pointer to HDD Station Context - pMacAddress [in] pointer to Peer Mac address - staID [out] pointer to Station Index - @return : VOS_STATUS_SUCCESS/VOS_STATUS_E_FAILURE - ===========================================================================*/ - -VOS_STATUS hdd_Ibss_GetStaId(hdd_station_ctx_t *pHddStaCtx, v_MACADDR_t *pMacAddress, v_U8_t *staId) +/** + * hdd_get_peer_sta_id() - Get the StationID using the Peer Mac address + * @sta_ctx: pointer to HDD Station Context + * @peer_mac_addr: pointer to Peer Mac address + * @sta_id: pointer to Station Index + * + * Returns: VOS_STATUS_SUCCESS on success, VOS_STATUS_E_FAILURE on error + */ +VOS_STATUS hdd_get_peer_sta_id(hdd_station_ctx_t *sta_ctx, + v_MACADDR_t *peer_mac_addr, + uint8_t *sta_id) { - v_U8_t idx; + v_U8_t idx; - for (idx = 0; idx < HDD_MAX_NUM_IBSS_STA; idx++) - { - if (vos_mem_compare(&pHddStaCtx->conn_info.peerMacAddress[ idx ], - pMacAddress, sizeof(v_MACADDR_t))) - { - *staId = pHddStaCtx->conn_info.staId[idx]; - return VOS_STATUS_SUCCESS; - } - } + for (idx = 0; idx < HDD_MAX_NUM_IBSS_STA; idx++) { + if (vos_mem_compare(&sta_ctx->conn_info.peerMacAddress[idx], + peer_mac_addr, sizeof(v_MACADDR_t))) { + *sta_id = sta_ctx->conn_info.staId[idx]; + return VOS_STATUS_SUCCESS; + } + } - return VOS_STATUS_E_FAILURE; + return VOS_STATUS_E_FAILURE; } /** diff --git a/CORE/MAC/src/pe/lim/limUtils.c b/CORE/MAC/src/pe/lim/limUtils.c index 3aff9ff0476a..8239fda73990 100644 --- a/CORE/MAC/src/pe/lim/limUtils.c +++ b/CORE/MAC/src/pe/lim/limUtils.c @@ -6674,7 +6674,7 @@ tANI_U8 limGetCurrentOperatingChannel(tpAniSirGlobal pMac) * @mac_ctx: Pointer to Global MAC structure * @msg: msg from WMA * - * @Return: void + * @Return: None */ void limProcessAddStaRsp(tpAniSirGlobal mac_ctx, tpSirMsgQ msg) { |
