diff options
| author | Yuanyuan Liu <yuanliu@codeaurora.org> | 2016-04-06 17:41:37 -0700 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-05-23 11:46:06 -0700 |
| commit | 1373850b01fec89b8e12976d3e0523fa6f951dae (patch) | |
| tree | 79a2c2a0a92350fb95959b5cc9a2462a5bbd720c | |
| parent | 0e0aa93d3227224f133c3e02d3906b9946f572ab (diff) | |
qcacld-3.0: HDD: Use PLD APIs (Part 2)
Replace CNSS/ICNSS APIs with PLD APIs for PCIE/SNOC.
SDIO/USB changes need to be done separately by adding
SDIO/USB support in PLD
Change-Id: I0d2446e57922254369b7e7ca69d900006f7a7e28
CRs-Fixed: 1000113
| -rw-r--r-- | core/hdd/inc/wlan_hdd_main.h | 6 | ||||
| -rw-r--r-- | core/hdd/src/wlan_hdd_driver_ops.c | 67 | ||||
| -rw-r--r-- | core/hdd/src/wlan_hdd_hostapd.c | 54 | ||||
| -rw-r--r-- | core/hdd/src/wlan_hdd_main.c | 71 | ||||
| -rw-r--r-- | core/hdd/src/wlan_hdd_power.c | 9 |
5 files changed, 67 insertions, 140 deletions
diff --git a/core/hdd/inc/wlan_hdd_main.h b/core/hdd/inc/wlan_hdd_main.h index 5d5e66fa440c..61e69ea4db00 100644 --- a/core/hdd/inc/wlan_hdd_main.h +++ b/core/hdd/inc/wlan_hdd_main.h @@ -335,13 +335,13 @@ extern spinlock_t hdd_context_lock; * @interval_tx: # of tx packets received in the last 100ms interval * @total_rx: # of total rx packets received on interface * @total_tx: # of total tx packets received on interface - * @next_vote_level: cnss_bus_width_type voting level (high or low) + * @next_vote_level: pld_bus_width_type voting level (high or low) * determined on the basis of total tx and rx packets * received in the last 100ms interval - * @next_rx_level: cnss_bus_width_type voting level (high or low) + * @next_rx_level: pld_bus_width_type voting level (high or low) * determined on the basis of rx packets received in the * last 100ms interval - * @next_tx_level: cnss_bus_width_type voting level (high or low) + * @next_tx_level: pld_bus_width_type voting level (high or low) * determined on the basis of tx packets received in the * last 100ms interval * diff --git a/core/hdd/src/wlan_hdd_driver_ops.c b/core/hdd/src/wlan_hdd_driver_ops.c index 0bccd0c76559..11f23f2c0cf9 100644 --- a/core/hdd/src/wlan_hdd_driver_ops.c +++ b/core/hdd/src/wlan_hdd_driver_ops.c @@ -30,13 +30,6 @@ #include <linux/platform_device.h> #include <linux/pci.h> -#ifdef HIF_PCI -#ifdef CONFIG_CNSS -#include <net/cnss.h> -#endif /* CONFIG_CNSS */ -#else -#include <soc/qcom/icnss.h> -#endif /* HIF_PCI */ #include "cds_api.h" #include "qdf_status.h" #include "qdf_lock.h" @@ -71,25 +64,16 @@ * The delay incurred for resuming from IDLE/SA PS is huge during driver load. * So prevent APPS IDLE/SA PS durint driver load for reducing interrupt latency. */ -#ifdef CONFIG_CNSS -static inline void hdd_request_pm_qos(int val) -{ - cnss_request_pm_qos(val); -} -static inline void hdd_remove_pm_qos(void) -{ - cnss_remove_pm_qos(); -} -#else -static inline void hdd_request_pm_qos(int val) +static inline void hdd_request_pm_qos(struct device *dev, int val) { + pld_request_pm_qos(dev, val); } -static inline void hdd_remove_pm_qos(void) +static inline void hdd_remove_pm_qos(struct device *dev) { + pld_remove_pm_qos(dev); } -#endif /** * hdd_set_recovery_in_progress() - API to set recovery in progress @@ -346,7 +330,7 @@ static int wlan_hdd_probe(struct device *dev, void *bdev, const hif_bus_id *bid, * The Fix is to not allow Krait to enter Idle Power Save during driver * load. */ - hdd_request_pm_qos(DISABLE_KRAIT_IDLE_PS_VAL); + hdd_request_pm_qos(dev, DISABLE_KRAIT_IDLE_PS_VAL); if (reinit) { cds_set_recovery_in_progress(true); @@ -399,7 +383,7 @@ static int wlan_hdd_probe(struct device *dev, void *bdev, const hif_bus_id *bid, } hdd_allow_suspend(WIFI_POWER_EVENT_WAKELOCK_DRIVER_INIT); - hdd_remove_pm_qos(); + hdd_remove_pm_qos(dev); return 0; @@ -415,19 +399,14 @@ err_hdd_deinit: hdd_deinit(); out: hdd_allow_suspend(WIFI_POWER_EVENT_WAKELOCK_DRIVER_INIT); - hdd_remove_pm_qos(); + hdd_remove_pm_qos(dev); return ret; } -#ifdef CONFIG_CNSS -static inline void hdd_cnss_driver_unloading(void) +static inline void hdd_pld_driver_unloading(struct device *dev) { - cnss_set_driver_status(CNSS_LOAD_UNLOAD); + pld_set_driver_status(dev, PLD_LOAD_UNLOAD); } -#else -static inline void hdd_cnss_driver_unloading(void) { } -#endif - /** * wlan_hdd_remove() - wlan_hdd_remove @@ -437,7 +416,7 @@ static inline void hdd_cnss_driver_unloading(void) { } * * Return: void */ -static void wlan_hdd_remove(void) +static void wlan_hdd_remove(struct device *dev) { void *hif_ctx; @@ -456,7 +435,7 @@ static void wlan_hdd_remove(void) if (!cds_wait_for_external_threads_completion(__func__)) hdd_err("External threads are still active attempting driver unload anyway"); - hdd_cnss_driver_unloading(); + hdd_pld_driver_unloading(dev); hif_ctx = cds_get_context(QDF_MODULE_ID_HIF); @@ -492,7 +471,7 @@ static void wlan_hdd_shutdown(void) hdd_err("Load/unload in progress, ignore SSR shutdown"); return; } - /* this is for cases, where shutdown invoked from CNSS */ + /* this is for cases, where shutdown invoked from platform */ cds_set_recovery_in_progress(true); if (!cds_wait_for_external_threads_completion(__func__)) @@ -680,7 +659,7 @@ static int wlan_hdd_bus_resume(void) * * Return: 0 or errno */ -static int __wlan_hdd_runtime_suspend(void) +static int __wlan_hdd_runtime_suspend(struct device *dev) { void *hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD); void *hif_ctx = cds_get_context(QDF_MODULE_ID_HIF); @@ -711,7 +690,7 @@ static int __wlan_hdd_runtime_suspend(void) if (status) goto resume_wma; - status = cnss_auto_suspend(); + status = pld_auto_suspend(dev); if (status) goto resume_hif; @@ -740,12 +719,12 @@ process_failure: * * Return: 0 or errno */ -static int wlan_hdd_runtime_suspend(void) +static int wlan_hdd_runtime_suspend(struct device *dev) { int ret; cds_ssr_protect(__func__); - ret = __wlan_hdd_runtime_suspend(); + ret = __wlan_hdd_runtime_suspend(dev); cds_ssr_unprotect(__func__); return ret; @@ -759,14 +738,14 @@ static int wlan_hdd_runtime_suspend(void) * * Return: success since failure is a bug */ -static int __wlan_hdd_runtime_resume(void) +static int __wlan_hdd_runtime_resume(struct device *dev) { void *hif_ctx = cds_get_context(QDF_MODULE_ID_HIF); void *htc_ctx = cds_get_context(QDF_MODULE_ID_HTC); void *txrx_pdev = cds_get_context(QDF_MODULE_ID_TXRX); hif_pre_runtime_resume(hif_ctx); - QDF_BUG(!cnss_auto_resume()); + QDF_BUG(!pld_auto_resume(dev)); QDF_BUG(!hif_runtime_resume(hif_ctx)); QDF_BUG(!wma_runtime_resume()); QDF_BUG(!htc_runtime_resume(htc_ctx)); @@ -783,12 +762,12 @@ static int __wlan_hdd_runtime_resume(void) * * Return: success since failure is a bug */ -static int wlan_hdd_runtime_resume(void) +static int wlan_hdd_runtime_resume(struct device *dev) { int ret; cds_ssr_protect(__func__); - ret = __wlan_hdd_runtime_resume(); + ret = __wlan_hdd_runtime_resume(dev); cds_ssr_unprotect(__func__); return ret; @@ -830,7 +809,7 @@ static int wlan_hdd_pld_probe(struct device *dev, static void wlan_hdd_pld_remove(struct device *dev, enum pld_bus_type bus_type) { - wlan_hdd_remove(); + wlan_hdd_remove(dev); } /** @@ -939,7 +918,7 @@ static void wlan_hdd_pld_notify_handler(struct device *dev, static int wlan_hdd_pld_runtime_suspend(struct device *dev, enum pld_bus_type bus_type) { - return wlan_hdd_runtime_suspend(); + return wlan_hdd_runtime_suspend(dev); } /** @@ -952,7 +931,7 @@ static int wlan_hdd_pld_runtime_suspend(struct device *dev, static int wlan_hdd_pld_runtime_resume(struct device *dev, enum pld_bus_type bus_type) { - return wlan_hdd_runtime_resume(); + return wlan_hdd_runtime_resume(dev); } #endif diff --git a/core/hdd/src/wlan_hdd_hostapd.c b/core/hdd/src/wlan_hdd_hostapd.c index bf4133562d48..085c965ce5f8 100644 --- a/core/hdd/src/wlan_hdd_hostapd.c +++ b/core/hdd/src/wlan_hdd_hostapd.c @@ -62,9 +62,7 @@ #include "wni_cfg.h" #include "wlan_hdd_misc.h" #include <cds_utils.h> -#if defined CONFIG_CNSS -#include <net/cnss.h> -#endif +#include "pld_common.h" #include "wma.h" #ifdef DEBUG @@ -899,9 +897,7 @@ QDF_STATUS hdd_hostapd_sap_event_cb(tpSap_Event pSapEvent, uint8_t cc_len = WLAN_SVC_COUNTRY_CODE_LEN; hdd_adapter_t *con_sap_adapter; QDF_STATUS status = QDF_STATUS_SUCCESS; -#if defined CONFIG_CNSS int ret = 0; -#endif dev = (struct net_device *)usrDataForCallback; if (!dev) { @@ -1771,47 +1767,37 @@ QDF_STATUS hdd_hostapd_sap_event_cb(tpSap_Event pSapEvent, case eSAP_DFS_NOL_GET: hddLog(LOG1, FL("Received eSAP_DFS_NOL_GET event")); -#if defined CONFIG_CNSS - /* get the dfs nol from cnss */ - ret = - cnss_wlan_get_dfs_nol(pSapEvent->sapevt.sapDfsNolInfo. - pDfsList, - pSapEvent->sapevt.sapDfsNolInfo. - sDfsList); + + /* get the dfs nol from PLD */ + ret = pld_wlan_get_dfs_nol(pHddCtx->parent_dev, + pSapEvent->sapevt.sapDfsNolInfo. + pDfsList, + pSapEvent->sapevt.sapDfsNolInfo. + sDfsList); if (ret > 0) { - hddLog(LOG2, - FL("Get %d bytes of dfs nol from cnss"), ret); + hdd_info("Get %d bytes of dfs nol from PLD", ret); return QDF_STATUS_SUCCESS; } else { - hddLog(LOG2, - FL("No dfs nol entry in CNSS, ret: %d"), ret); + hdd_info("No dfs nol entry in PLD, ret: %d", ret); return QDF_STATUS_E_FAULT; } -#else - return QDF_STATUS_E_FAILURE; -#endif case eSAP_DFS_NOL_SET: hddLog(LOG1, FL("Received eSAP_DFS_NOL_SET event")); -#if defined CONFIG_CNSS - /* set the dfs nol to cnss */ - ret = - cnss_wlan_set_dfs_nol(pSapEvent->sapevt.sapDfsNolInfo. - pDfsList, - pSapEvent->sapevt.sapDfsNolInfo. - sDfsList); + + /* set the dfs nol to PLD */ + ret = pld_wlan_set_dfs_nol(pHddCtx->parent_dev, + pSapEvent->sapevt.sapDfsNolInfo. + pDfsList, + pSapEvent->sapevt.sapDfsNolInfo. + sDfsList); if (ret) { - hddLog(LOG2, - FL("Failed to set dfs nol - ret: %d"), - ret); + hdd_info("Failed to set dfs nol - ret: %d", ret); } else { - hddLog(LOG2, FL(" Set %d bytes dfs nol to cnss"), - pSapEvent->sapevt.sapDfsNolInfo.sDfsList); + hdd_info(" Set %d bytes dfs nol to PLD", + pSapEvent->sapevt.sapDfsNolInfo.sDfsList); } -#else - return QDF_STATUS_E_FAILURE; -#endif return QDF_STATUS_SUCCESS; case eSAP_ACS_CHANNEL_SELECTED: hddLog(LOG1, FL("ACS Completed for wlan%d"), diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index 4525c5cfa501..6f6d799a650d 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -74,10 +74,8 @@ #include <linux/ctype.h> #include <linux/compat.h> #ifdef MSM_PLATFORM -#ifdef CONFIG_CNSS #include <soc/qcom/subsystem_restart.h> #endif -#endif #include <wlan_hdd_hostapd.h> #include <wlan_hdd_softap_tx_rx.h> #include "cfg_api.h" @@ -85,9 +83,6 @@ #include "wma_types.h" #include "wlan_hdd_tdls.h" #ifdef FEATURE_WLAN_CH_AVOID -#ifdef CONFIG_CNSS -#include <net/cnss.h> -#endif #include "cds_regdomain.h" #include "cdp_txrx_flow_ctrl_v2.h" #endif /* FEATURE_WLAN_CH_AVOID */ @@ -105,7 +100,6 @@ #include "cds_concurrency.h" #include "wlan_hdd_tsf.h" #include "wlan_hdd_green_ap.h" -#include "platform_icnss.h" #include "bmi.h" #include <wlan_hdd_regulatory.h> @@ -2115,23 +2109,6 @@ static QDF_STATUS hdd_sme_close_session_callback(void *pContext) clear_bit(SME_SESSION_OPENED, &adapter->event_flags); -#if !defined (CONFIG_CNSS) && \ - !defined (WLAN_OPEN_SOURCE) - /* - * need to make sure all of our scheduled work has completed. - * This callback is called from MC thread context, so it is safe to - * to call below flush workqueue API from here. - * - * Even though this is called from MC thread context, if there is a faulty - * work item in the system, that can hang this call forever. So flushing - * this global work queue is not safe; and now we make sure that - * individual work queues are stopped correctly. But the cancel work queue - * is a GPL only API, so the proprietary version of the driver would still - * rely on the global work queue flush. - */ - flush_scheduled_work(); -#endif - /* * We can be blocked while waiting for scheduled work to be * flushed, and the adapter structure can potentially be freed, in @@ -4584,7 +4561,7 @@ static int hdd_wiphy_init(hdd_context_t *hdd_ctx) } /** - * hdd_cnss_request_bus_bandwidth() - Function to control bus bandwidth + * hdd_pld_request_bus_bandwidth() - Function to control bus bandwidth * @hdd_ctx - handle to hdd context * @tx_packets - transmit packet count * @rx_packets - receive packet count @@ -4595,26 +4572,25 @@ static int hdd_wiphy_init(hdd_context_t *hdd_ctx) * Returns: None */ #ifdef MSM_PLATFORM -void hdd_cnss_request_bus_bandwidth(hdd_context_t *hdd_ctx, +void hdd_pld_request_bus_bandwidth(hdd_context_t *hdd_ctx, const uint64_t tx_packets, const uint64_t rx_packets) { -#ifdef CONFIG_CNSS uint64_t total = tx_packets + rx_packets; uint64_t temp_rx = 0; uint64_t temp_tx = 0; - enum cnss_bus_width_type next_vote_level = CNSS_BUS_WIDTH_NONE; + enum pld_bus_width_type next_vote_level = PLD_BUS_WIDTH_NONE; enum wlan_tp_level next_rx_level = WLAN_SVC_TP_NONE; enum wlan_tp_level next_tx_level = WLAN_SVC_TP_NONE; if (total > hdd_ctx->config->busBandwidthHighThreshold) - next_vote_level = CNSS_BUS_WIDTH_HIGH; + next_vote_level = PLD_BUS_WIDTH_HIGH; else if (total > hdd_ctx->config->busBandwidthMediumThreshold) - next_vote_level = CNSS_BUS_WIDTH_MEDIUM; + next_vote_level = PLD_BUS_WIDTH_MEDIUM; else if (total > hdd_ctx->config->busBandwidthLowThreshold) - next_vote_level = CNSS_BUS_WIDTH_LOW; + next_vote_level = PLD_BUS_WIDTH_LOW; else - next_vote_level = CNSS_BUS_WIDTH_NONE; + next_vote_level = PLD_BUS_WIDTH_NONE; hdd_ctx->hdd_txrx_hist[hdd_ctx->hdd_txrx_hist_idx].next_vote_level = next_vote_level; @@ -4623,7 +4599,7 @@ void hdd_cnss_request_bus_bandwidth(hdd_context_t *hdd_ctx, hdd_debug("trigger level %d, tx_packets: %lld, rx_packets: %lld", next_vote_level, tx_packets, rx_packets); hdd_ctx->cur_vote_level = next_vote_level; - cnss_request_bus_bandwidth(next_vote_level); + pld_request_bus_bandwidth(hdd_ctx->parent_dev, next_vote_level); } /* fine-tuning parameters for RX Flows */ @@ -4674,7 +4650,6 @@ void hdd_cnss_request_bus_bandwidth(hdd_context_t *hdd_ctx, next_tx_level; hdd_ctx->hdd_txrx_hist_idx++; hdd_ctx->hdd_txrx_hist_idx &= NUM_TX_RX_HISTOGRAM_MASK; -#endif } #define HDD_BW_GET_DIFF(_x, _y) (unsigned long)((ULONG_MAX - (_y)) + (_x) + 1) @@ -4745,7 +4720,7 @@ static void hdd_bus_bw_compute_cbk(void *priv) return; } - hdd_cnss_request_bus_bandwidth(hdd_ctx, tx_packets, rx_packets); + hdd_pld_request_bus_bandwidth(hdd_ctx, tx_packets, rx_packets); hdd_ipa_set_perf_level(hdd_ctx, tx_packets, rx_packets); hdd_ipa_uc_stat_request(adapter, 2); @@ -5026,7 +5001,7 @@ static void hdd_enable_fastpath(struct hdd_config *hdd_cfg, } #endif -#if defined(FEATURE_WLAN_CH_AVOID) && defined(CONFIG_CNSS) +#if defined(FEATURE_WLAN_CH_AVOID) /** * hdd_set_thermal_level_cb() - set thermal level callback function * @context: hdd context pointer @@ -5244,7 +5219,8 @@ static void hdd_ch_avoid_cb(void *hdd_context, void *indi_param) FL("number of unsafe channels is %d "), hdd_ctxt->unsafe_channel_count); - if (cnss_set_wlan_unsafe_channel(hdd_ctxt->unsafe_channel_list, + if (pld_set_wlan_unsafe_channel(hdd_ctxt->parent_dev, + hdd_ctxt->unsafe_channel_list, hdd_ctxt->unsafe_channel_count)) { hdd_err("Failed to set unsafe channel"); @@ -5322,7 +5298,7 @@ static void hdd_ch_avoid_cb(void *hdd_context, void *indi_param) * @hdd_ctx: HDD global context * * Initialize the channel avoidance logic by retrieving the unsafe - * channel list from the CNSS platform driver and plumbing the data + * channel list from the platform driver and plumbing the data * down to the lower layers. Then subscribe to subsequent channel * avoidance events. * @@ -5333,7 +5309,8 @@ static void hdd_init_channel_avoidance(hdd_context_t *hdd_ctx) uint16_t unsafe_channel_count; int index; - cnss_get_wlan_unsafe_channel(hdd_ctx->unsafe_channel_list, + pld_get_wlan_unsafe_channel(hdd_ctx->parent_dev, + hdd_ctx->unsafe_channel_list, &(hdd_ctx->unsafe_channel_count), sizeof(uint16_t) * NUM_CHANNELS); @@ -5359,7 +5336,7 @@ static void hdd_init_channel_avoidance(hdd_context_t *hdd_ctx) static void hdd_set_thermal_level_cb(void *context, u_int8_t level) { } -#endif /* defined(FEATURE_WLAN_CH_AVOID) && defined(CONFIG_CNSS) */ +#endif /* defined(FEATURE_WLAN_CH_AVOID) */ /** * hdd_indicate_mgmt_frame() - Wrapper to indicate management frame to @@ -5665,7 +5642,8 @@ hdd_context_t *hdd_context_create(struct device *dev, void *hif_sc) hdd_ctx->target_type = tgt_info->target_type; - icnss_set_fw_debug_mode(hdd_ctx->config->enable_fw_log); + pld_set_fw_debug_mode(hdd_ctx->parent_dev, + hdd_ctx->config->enable_fw_log); hdd_enable_fastpath(hdd_ctx->config, hif_sc); @@ -6775,19 +6753,6 @@ void wlan_hdd_send_version_pkg(uint32_t fw_version, { int ret = 0; struct wlan_version_data data; -#ifdef CONFIG_CNSS - struct cnss_platform_cap cap; - - ret = cnss_get_platform_cap(&cap); - if (ret) { - hddLog(QDF_TRACE_LEVEL_ERROR, - FL("platform capability info from CNSS not available")); - return; - } - - if (!(cap.cap_flag & CNSS_HAS_UART_ACCESS)) - return; -#endif if (QDF_GLOBAL_FTM_MODE == hdd_get_conparam()) return; diff --git a/core/hdd/src/wlan_hdd_power.c b/core/hdd/src/wlan_hdd_power.c index 762d3262315f..35130a829621 100644 --- a/core/hdd/src/wlan_hdd_power.c +++ b/core/hdd/src/wlan_hdd_power.c @@ -71,6 +71,7 @@ #include "sme_power_save_api.h" #include "cds_concurrency.h" #include "cdp_txrx_flow_ctrl_v2.h" +#include "pld_common.h" /* Preprocessor definitions and constants */ #define HDD_SSR_BRING_UP_TIME 30000 @@ -1794,9 +1795,7 @@ static int __wlan_hdd_cfg80211_resume_wlan(struct wiphy *wiphy) result = wlan_hdd_validate_context(pHddCtx); if (0 != result) return result; -#ifdef CONFIG_CNSS - cnss_request_bus_bandwidth(CNSS_BUS_WIDTH_MEDIUM); -#endif + pld_request_bus_bandwidth(pHddCtx->parent_dev, PLD_BUS_WIDTH_MEDIUM); /* Resume MC thread */ if (pHddCtx->isMcThreadSuspended) { @@ -2065,9 +2064,7 @@ static int __wlan_hdd_cfg80211_suspend_wlan(struct wiphy *wiphy, NO_SESSION, pHddCtx->isWiphySuspended)); pHddCtx->isWiphySuspended = true; -#ifdef CONFIG_CNSS - cnss_request_bus_bandwidth(CNSS_BUS_WIDTH_NONE); -#endif + pld_request_bus_bandwidth(pHddCtx->parent_dev, PLD_BUS_WIDTH_NONE); EXIT(); return 0; |
