From 9b09703f7986d7bad8a17bdbb989e5c5cf340f49 Mon Sep 17 00:00:00 2001 From: Leo Chang Date: Fri, 28 Oct 2016 11:03:17 -0700 Subject: [PATCH] qcacld-3.0: cds: change legacy data path api to cdp api Remove legacy apis call from out side of data path. Replace legacy apis to cdp apis. cds module. Change-Id: I3f26b69711f494bad7fbaf07c5b8961125f13e65 CRs-fixed: 1075736 --- core/cds/inc/cds_ieee80211_common.h | 51 +---------- core/cds/inc/cds_sched.h | 3 +- core/cds/src/cds_api.c | 137 ++++++++++++++++++++++------ core/cds/src/cds_concurrency.c | 16 ++-- 4 files changed, 123 insertions(+), 84 deletions(-) diff --git a/core/cds/inc/cds_ieee80211_common.h b/core/cds/inc/cds_ieee80211_common.h index 9b8faf7575c6..7039a01c0fb4 100644 --- a/core/cds/inc/cds_ieee80211_common.h +++ b/core/cds/inc/cds_ieee80211_common.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011,2014-2015 The Linux Foundation. All rights reserved. + * Copyright (c) 2011,2014-2016 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -29,6 +29,7 @@ #include "osdep.h" #endif /* EXTERNAL_USE_ONLY */ #include "cds_ieee80211_common_i.h" +#include "cdp_txrx_mob_def.h" #ifndef CDS_COMMON_IEEE80211_H_ #define CDS_COMMON_IEEE80211_H_ @@ -37,9 +38,6 @@ * 802.11 protocol definitions. */ -/* is 802.11 address multicast/broadcast? */ -#define IEEE80211_IS_MULTICAST(_a) (*(_a) & 0x01) - #define IEEE80211_IS_IPV4_MULTICAST(_a) (*(_a) == 0x01) #define IEEE80211_IS_IPV6_MULTICAST(_a) \ @@ -738,51 +736,6 @@ struct ieee80211_dls_response { uint8_t src_addr[IEEE80211_ADDR_LEN]; } __packed; -/* BA actions */ -#define IEEE80211_ACTION_BA_ADDBA_REQUEST 0 /* ADDBA request */ -#define IEEE80211_ACTION_BA_ADDBA_RESPONSE 1 /* ADDBA response */ -#define IEEE80211_ACTION_BA_DELBA 2 /* DELBA */ - -struct ieee80211_ba_parameterset { -#if _BYTE_ORDER == _BIG_ENDIAN - uint16_t buffersize : 10, /* B6-15 buffer size */ - tid : 4, /* B2-5 TID */ - bapolicy : 1, /* B1 block ack policy */ - amsdusupported : 1; /* B0 amsdu supported */ -#else - uint16_t amsdusupported : 1, /* B0 amsdu supported */ - bapolicy : 1, /* B1 block ack policy */ - tid : 4, /* B2-5 TID */ - buffersize : 10; /* B6-15 buffer size */ -#endif -} __packed; - -#define IEEE80211_BA_POLICY_DELAYED 0 -#define IEEE80211_BA_POLICY_IMMEDIATE 1 -#define IEEE80211_BA_AMSDU_SUPPORTED 1 - -struct ieee80211_ba_seqctrl { -#if _BYTE_ORDER == _BIG_ENDIAN - uint16_t startseqnum : 12, /* B4-15 starting sequence number */ - fragnum : 4; /* B0-3 fragment number */ -#else - uint16_t fragnum : 4, /* B0-3 fragment number */ - startseqnum : 12; /* B4-15 starting sequence number */ -#endif -} __packed; - -struct ieee80211_delba_parameterset { -#if _BYTE_ORDER == _BIG_ENDIAN - uint16_t tid : 4, /* B12-15 tid */ - initiator : 1, /* B11 initiator */ - reserved0 : 11; /* B0-10 reserved */ -#else - uint16_t reserved0 : 11, /* B0-10 reserved */ - initiator : 1, /* B11 initiator */ - tid : 4; /* B12-15 tid */ -#endif -} __packed; - /* BA - ADDBA request */ struct ieee80211_action_ba_addbarequest { struct ieee80211_action rq_header; diff --git a/core/cds/inc/cds_sched.h b/core/cds/inc/cds_sched.h index 0fcb95f2db23..8ed224fd5b8b 100644 --- a/core/cds/inc/cds_sched.h +++ b/core/cds/inc/cds_sched.h @@ -285,6 +285,7 @@ typedef struct _cds_context_type { qdf_device_t qdf_ctx; void *pdev_txrx_ctx; + void *dp_soc; /* Configuration handle used to get system configuration */ void *cfg_ctx; @@ -310,7 +311,7 @@ typedef struct _cds_context_type { void (*sme_get_nss_for_vdev)(void*, enum tQDF_ADAPTER_MODE, uint8_t *, uint8_t *); - void (*ol_txrx_update_mac_id)(uint8_t , uint8_t); + void (*cdp_update_mac_id)(void *soc, uint8_t , uint8_t); /* This list is not sessionized. This mandatory channel list would be * as per OEMs preference as per the regulatory/other considerations. diff --git a/core/cds/src/cds_api.c b/core/cds/src/cds_api.c index 6cdcbf65cb9f..c9e4ba20019b 100644 --- a/core/cds/src/cds_api.c +++ b/core/cds/src/cds_api.c @@ -57,9 +57,12 @@ #include "cds_utils.h" #include "wlan_logging_sock_svc.h" #include "wma.h" -#include "ol_txrx.h" #include "pktlog_ac.h" #include "wlan_hdd_ipa.h" + +#include +#include +#include /* Preprocessor Definitions and Constants */ /* Maximum number of cds message queue get wrapper failures to cause panic */ @@ -75,6 +78,13 @@ static atomic_t cds_wrapper_empty_count; static uint8_t cds_multicast_logging; +static struct ol_if_ops dp_ol_if_ops = { + .peer_set_default_routing = wma_peer_set_default_routing, + .peer_rx_reorder_queue_setup = wma_peer_rx_reorder_queue_setup, + .peer_rx_reorder_queue_remove = wma_peer_rx_reorder_queue_remove, + /* TODO: Add any other control path calls required to OL_IF/WMA layer */ +}; + void cds_sys_probe_thread_cback(void *pUserData); /** @@ -158,6 +168,52 @@ void cds_tdls_tx_rx_mgmt_event(uint8_t event_id, uint8_t tx_rx, } #endif +/** + * cds_cdp_cfg_attach() - attach data path config module + * @cds_cfg: generic platform level config instance + * + * Return: none + */ +static void cds_cdp_cfg_attach(struct cds_config_info *cds_cfg) +{ + struct txrx_pdev_cfg_param_t cdp_cfg = {0}; + void *soc = cds_get_context(QDF_MODULE_ID_SOC); + + gp_cds_context->cfg_ctx = cdp_cfg_attach(soc, gp_cds_context->qdf_ctx, + (void *)(&cdp_cfg)); + if (!gp_cds_context->cfg_ctx) { + WMA_LOGP("%s: failed to init cfg handle", __func__); + return; + } + + cdp_cfg.is_uc_offload_enabled = cds_cfg->uc_offload_enabled; + cdp_cfg.uc_tx_buffer_count = cds_cfg->uc_txbuf_count; + cdp_cfg.uc_tx_buffer_size = cds_cfg->uc_txbuf_size; + cdp_cfg.uc_rx_indication_ring_count = cds_cfg->uc_rxind_ringcount; + cdp_cfg.uc_tx_partition_base = cds_cfg->uc_tx_partition_base; + cdp_cfg.enable_rxthread = cds_cfg->enable_rxthread; + cdp_cfg.ip_tcp_udp_checksum_offload = + cds_cfg->ip_tcp_udp_checksum_offload; + cdp_cfg.ce_classify_enabled = cds_cfg->ce_classify_enabled; + + /* Configure Receive flow steering */ + cdp_cfg_set_flow_steering(soc, &gp_cds_context->cfg_ctx, + cds_cfg->flow_steering_enabled); + + cdp_cfg_set_flow_control_parameters(soc, &gp_cds_context->cfg_ctx, + (void *)cds_cfg); + + /* adjust the cfg_ctx default value based on setting */ + cdp_cfg_set_rx_fwd_disabled(soc, gp_cds_context->cfg_ctx, + (uint8_t) cds_cfg->ap_disable_intrabss_fwd); + + /* + * adjust the packet log enable default value + * based on CFG INI setting + */ + cdp_cfg_set_packet_log_enabled(soc, gp_cds_context->cfg_ctx, + (uint8_t)cds_is_packet_log_enabled()); +} /** * cds_open() - open the CDS Module @@ -346,6 +402,19 @@ QDF_STATUS cds_open(void) bmi_target_ready(scn, gp_cds_context->cfg_ctx); /* Now proceed to open the MAC */ + if (TARGET_TYPE_QCA8074 == pHddCtx->target_type) + gp_cds_context->dp_soc = cdp_soc_attach(LITHIUM_DP, + gp_cds_context->pHIFContext, scn, + gp_cds_context->htc_ctx, gp_cds_context->qdf_ctx, + &dp_ol_if_ops); + else + gp_cds_context->dp_soc = cdp_soc_attach(MOB_DRV_LEGACY_DP, + gp_cds_context->pHIFContext, scn, + gp_cds_context->htc_ctx, gp_cds_context->qdf_ctx, + &dp_ol_if_ops); + + cds_cdp_cfg_attach(cds_cfg); + /* UMA is supported in hardware for performing the * frame translation 802.11 <-> 802.3 */ @@ -372,11 +441,11 @@ QDF_STATUS cds_open(void) QDF_ASSERT(0); goto err_mac_close; } - gp_cds_context->pdev_txrx_ctx = - ol_txrx_pdev_attach(gp_cds_context->cfg_ctx, - gp_cds_context->htc_ctx, - gp_cds_context->qdf_ctx); + cdp_pdev_attach(cds_get_context(QDF_MODULE_ID_SOC), + gp_cds_context->cfg_ctx, + gp_cds_context->htc_ctx, + gp_cds_context->qdf_ctx, 0); if (!gp_cds_context->pdev_txrx_ctx) { /* Critical Error ... Cannot proceed further */ QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_FATAL, @@ -385,8 +454,7 @@ QDF_STATUS cds_open(void) goto err_sme_close; } - gp_cds_context->ol_txrx_update_mac_id = ol_txrx_update_mac_id; - + gp_cds_context->cdp_update_mac_id = cdp_update_mac_id; QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_INFO_HIGH, "%s: CDS successfully Opened", __func__); @@ -439,8 +507,9 @@ QDF_STATUS cds_pre_enable(v_CONTEXT_t cds_context) QDF_STATUS qdf_status = QDF_STATUS_SUCCESS; p_cds_contextType p_cds_context = (p_cds_contextType) cds_context; void *scn; - QDF_TRACE(QDF_MODULE_ID_SYS, QDF_TRACE_LEVEL_INFO, "cds prestart"); + void *soc = cds_get_context(QDF_MODULE_ID_SOC); + QDF_TRACE(QDF_MODULE_ID_SYS, QDF_TRACE_LEVEL_INFO, "cds prestart"); if (gp_cds_context != p_cds_context) { QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR, "%s: Context mismatch", __func__); @@ -471,10 +540,9 @@ QDF_STATUS cds_pre_enable(v_CONTEXT_t cds_context) /* call Packetlog connect service */ if (QDF_GLOBAL_FTM_MODE != cds_get_conparam() && - QDF_GLOBAL_EPPING_MODE != cds_get_conparam()) { - htt_pkt_log_init(gp_cds_context->pdev_txrx_ctx, scn); - pktlog_htc_attach(); - } + QDF_GLOBAL_EPPING_MODE != cds_get_conparam()) + cdp_pkt_log_con_service(soc, + gp_cds_context->pdev_txrx_ctx, scn); /* Reset wma wait event */ qdf_event_reset(&gp_cds_context->wmaCompleteEvent); @@ -533,7 +601,7 @@ QDF_STATUS cds_pre_enable(v_CONTEXT_t cds_context) return QDF_STATUS_E_FAILURE; } - if (ol_txrx_pdev_post_attach(gp_cds_context->pdev_txrx_ctx)) { + if (cdp_pdev_post_attach(soc, gp_cds_context->pdev_txrx_ctx)) { QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_FATAL, "Failed to attach pdev"); htc_stop(gp_cds_context->htc_ctx); @@ -618,11 +686,17 @@ QDF_STATUS cds_enable(v_CONTEXT_t cds_context) QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_INFO, "%s: SME correctly started", __func__); - if (ol_txrx_pdev_attach_target - (p_cds_context->pdev_txrx_ctx)) { - QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_FATAL, - "%s: Failed attach target", __func__); - goto err_sme_stop; + if (cdp_soc_attach_target(cds_get_context(QDF_MODULE_ID_SOC))) { + QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_FATAL, + "%s: Failed to attach soc target", __func__); + goto err_sme_stop; + } + + if (cdp_pdev_attach_target(cds_get_context(QDF_MODULE_ID_SOC), + cds_get_context(QDF_MODULE_ID_TXRX))) { + QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_FATAL, + "%s: Failed to attach pdev target", __func__); + goto err_soc_target_detach; } QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_INFO, @@ -632,6 +706,9 @@ QDF_STATUS cds_enable(v_CONTEXT_t cds_context) return QDF_STATUS_SUCCESS; +err_soc_target_detach: + /* NOOP */ + err_sme_stop: sme_stop(p_cds_context->pMACContext, HAL_STOP_TYPE_SYS_RESET); @@ -795,7 +872,8 @@ QDF_STATUS cds_close(v_CONTEXT_t cds_context) gp_cds_context->htc_ctx = NULL; } - ol_txrx_pdev_detach(gp_cds_context->pdev_txrx_ctx, 1); + cdp_pdev_detach(cds_get_context(QDF_MODULE_ID_SOC), + gp_cds_context->pdev_txrx_ctx, 1); cds_free_context(cds_context, QDF_MODULE_ID_TXRX, gp_cds_context->pdev_txrx_ctx); @@ -862,18 +940,17 @@ QDF_STATUS cds_close(v_CONTEXT_t cds_context) void cds_flush_cache_rx_queue(void) { uint8_t sta_id; - struct ol_txrx_peer_t *peer; - struct ol_txrx_pdev_t *pdev; - - pdev = cds_get_context(QDF_MODULE_ID_TXRX); - if (!pdev) - return; + void *peer; + void *pdev = cds_get_context(QDF_MODULE_ID_TXRX); for (sta_id = 0; sta_id < WLAN_MAX_STA_COUNT; sta_id++) { - peer = ol_txrx_peer_find_by_local_id(pdev, sta_id); + peer = cdp_peer_find_by_local_id( + cds_get_context(QDF_MODULE_ID_SOC), + pdev, sta_id); if (!peer) continue; - ol_txrx_flush_rx_frames(peer, 1); + cdp_flush_rx_frames(cds_get_context(QDF_MODULE_ID_SOC), + peer, 1); } return; } @@ -967,6 +1044,12 @@ void *cds_get_context(QDF_MODULE_ID moduleId) break; } + case QDF_MODULE_ID_SOC: + { + pModContext = gp_cds_context->dp_soc; + break; + } + default: { QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR, diff --git a/core/cds/src/cds_concurrency.c b/core/cds/src/cds_concurrency.c index 254d782ccfa4..cc1c2115f280 100644 --- a/core/cds/src/cds_concurrency.c +++ b/core/cds/src/cds_concurrency.c @@ -2153,8 +2153,9 @@ static void cds_update_conc_list(uint32_t conn_index, conc_connection_list[conn_index].in_use = in_use; cds_dump_connection_status_info(); - if (cds_ctx->ol_txrx_update_mac_id) - cds_ctx->ol_txrx_update_mac_id(vdev_id, mac); + if (cds_ctx->cdp_update_mac_id) + cds_ctx->cdp_update_mac_id(cds_get_context(QDF_MODULE_ID_SOC), + vdev_id, mac); } @@ -3092,6 +3093,7 @@ void cds_dump_concurrency_info(void) hdd_adapter_t *preAdapterContext = NULL; hdd_adapter_t *adapter2_4 = NULL; hdd_adapter_t *adapter5 = NULL; + void *soc = cds_get_context(QDF_MODULE_ID_SOC); #endif /* QCA_LL_LEGACY_TX_FLOW_CONTROL */ hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD); @@ -3190,7 +3192,7 @@ void cds_dump_concurrency_info(void) } adapter->tx_flow_high_watermark_offset = hdd_ctx->config->TxFlowHighWaterMarkOffset; - ol_txrx_ll_set_tx_pause_q_depth( + cdp_fc_ll_set_tx_pause_q_depth(soc, adapter->sessionId, hdd_ctx->config->TxFlowMaxQueueDepth); cds_info("MODE %d,CH %d,LWM %d,HWM %d,TXQDEP %d", @@ -3215,7 +3217,7 @@ void cds_dump_concurrency_info(void) adapter->tx_flow_low_watermark = 0; adapter-> tx_flow_high_watermark_offset = 0; - ol_txrx_ll_set_tx_pause_q_depth( + cdp_fc_ll_set_tx_pause_q_depth(soc, adapter->sessionId, hdd_ctx->config-> TxHbwFlowMaxQueueDepth); @@ -3241,7 +3243,7 @@ void cds_dump_concurrency_info(void) tx_flow_low_watermark = 0; preAdapterContext-> tx_flow_high_watermark_offset = 0; - ol_txrx_ll_set_tx_pause_q_depth( + cdp_fc_ll_set_tx_pause_q_depth(soc, preAdapterContext->sessionId, hdd_ctx->config-> TxHbwFlowMaxQueueDepth); @@ -3291,7 +3293,7 @@ void cds_dump_concurrency_info(void) tx_flow_high_watermark_offset = hdd_ctx->config-> TxHbwFlowHighWaterMarkOffset; - ol_txrx_ll_set_tx_pause_q_depth( + cdp_fc_ll_set_tx_pause_q_depth(soc, adapter5->sessionId, hdd_ctx->config-> TxHbwFlowMaxQueueDepth); @@ -3319,7 +3321,7 @@ void cds_dump_concurrency_info(void) tx_flow_high_watermark_offset = hdd_ctx->config-> TxLbwFlowHighWaterMarkOffset; - ol_txrx_ll_set_tx_pause_q_depth( + cdp_fc_ll_set_tx_pause_q_depth(soc, adapter2_4->sessionId, hdd_ctx->config-> TxLbwFlowMaxQueueDepth);