summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNaveen Rawat <nrawat@qca.qualcomm.com>2016-03-21 12:06:52 -0700
committerAnjaneedevi Kapparapu <akappa@codeaurora.org>2016-04-12 14:36:52 +0530
commit25fa9216e44910a344a36ed75db89d70e61cf3cf (patch)
tree3a4ecd02757ea9da07bb1482df47205038dfdc07
parentb71604d7403a64db162e163608897c3ac346bc09 (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.h19
-rw-r--r--CORE/HDD/src/wlan_hdd_assoc.c2
-rw-r--r--CORE/HDD/src/wlan_hdd_main.c2
-rw-r--r--CORE/HDD/src/wlan_hdd_nan_datapath.c15
-rw-r--r--CORE/HDD/src/wlan_hdd_nan_datapath.h4
-rw-r--r--CORE/HDD/src/wlan_hdd_tx_rx.c61
-rw-r--r--CORE/MAC/src/pe/lim/limUtils.c2
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)
{