summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2019-02-05 23:49:45 -0800
committerLinux Build Service Account <lnxbuild@localhost>2019-02-05 23:49:45 -0800
commit456abd7e6906f9dcc3b5547cc7e8a09d83d489bf (patch)
tree9af571b6c43c9abba0913e5ee2d3f7da13355ade
parent6202d1d9d9ba3cfc464225087c65e2d079b6d689 (diff)
parente4646b07ba96d4110362310266f05f27d42bc360 (diff)
Merge e4646b07ba96d4110362310266f05f27d42bc360 on remote branch
Change-Id: Idf3005469e60b327910ddff4ded7e101b10c662a
-rw-r--r--CORE/CLD_TXRX/TXRX/ol_tx.c10
-rw-r--r--CORE/EPPING/src/epping_main.c5
-rw-r--r--CORE/HDD/inc/wlan_hdd_cfg.h10
-rw-r--r--CORE/HDD/inc/wlan_hdd_cfg80211.h43
-rw-r--r--CORE/HDD/inc/wlan_hdd_dp_utils.h7
-rw-r--r--CORE/HDD/inc/wlan_hdd_hostapd.h20
-rw-r--r--CORE/HDD/inc/wlan_hdd_main.h48
-rw-r--r--CORE/HDD/inc/wlan_hdd_p2p.h11
-rw-r--r--CORE/HDD/inc/wlan_hdd_tsf.h17
-rw-r--r--CORE/HDD/inc/wlan_hdd_wowl.h2
-rw-r--r--CORE/HDD/src/wlan_hdd_assoc.c44
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg.c7
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg80211.c432
-rw-r--r--CORE/HDD/src/wlan_hdd_debugfs_ocb.c6
-rw-r--r--CORE/HDD/src/wlan_hdd_early_suspend.c15
-rw-r--r--CORE/HDD/src/wlan_hdd_ftm.c15
-rw-r--r--CORE/HDD/src/wlan_hdd_hostapd.c71
-rw-r--r--CORE/HDD/src/wlan_hdd_ipa.c54
-rw-r--r--CORE/HDD/src/wlan_hdd_main.c175
-rw-r--r--CORE/HDD/src/wlan_hdd_nan_datapath.c4
-rw-r--r--CORE/HDD/src/wlan_hdd_ocb.c54
-rw-r--r--CORE/HDD/src/wlan_hdd_p2p.c80
-rw-r--r--CORE/HDD/src/wlan_hdd_softap_tx_rx.c30
-rw-r--r--CORE/HDD/src/wlan_hdd_tsf.c340
-rw-r--r--CORE/HDD/src/wlan_hdd_tx_rx.c38
-rw-r--r--CORE/HDD/src/wlan_hdd_wext.c8
-rw-r--r--CORE/MAC/inc/sirApi.h2
-rw-r--r--CORE/MAC/src/include/dot11f.h2
-rw-r--r--CORE/MAC/src/include/sirParams.h1
-rw-r--r--CORE/MAC/src/pe/lim/limScanResultUtils.c22
-rw-r--r--CORE/MAC/src/pe/lim/limSendMessages.c58
-rw-r--r--CORE/MAC/src/pe/lim/limSendMessages.h3
-rw-r--r--CORE/MAC/src/pe/sch/schBeaconProcess.c5
-rw-r--r--CORE/SAP/src/sapChSelect.c8
-rw-r--r--CORE/SERVICES/BMI/ol_fw.c22
-rw-r--r--CORE/SERVICES/COMMON/adf/adf_nbuf.c537
-rw-r--r--CORE/SERVICES/COMMON/adf/adf_nbuf.h91
-rw-r--r--CORE/SERVICES/COMMON/adf/adf_os_lock.h8
-rw-r--r--CORE/SERVICES/COMMON/adf/adf_trace.c28
-rw-r--r--CORE/SERVICES/COMMON/adf/linux/adf_os_dma_pvt.h18
-rw-r--r--CORE/SERVICES/COMMON/adf/linux/adf_os_lock_pvt.h70
-rw-r--r--CORE/SERVICES/COMMON/dbglog_id.h6
-rw-r--r--CORE/SERVICES/COMMON/hif.h2
-rw-r--r--CORE/SERVICES/COMMON/osdep_adf.h45
-rw-r--r--CORE/SERVICES/COMMON/wlan_module_ids.h1
-rw-r--r--CORE/SERVICES/HIF/PCIe/hif_pci.c43
-rw-r--r--CORE/SERVICES/HIF/PCIe/if_pci.c20
-rw-r--r--CORE/SERVICES/HIF/PCIe/if_pci.h4
-rw-r--r--CORE/SERVICES/HIF/USB/hif_usb.c10
-rw-r--r--CORE/SERVICES/HIF/USB/hif_usb_internal.h10
-rw-r--r--CORE/SERVICES/HIF/USB/if_usb.c2
-rw-r--r--CORE/SERVICES/HIF/USB/usbdrv.c40
-rw-r--r--CORE/SERVICES/HIF/sdio/hif_sdio_dev.c6
-rw-r--r--CORE/SERVICES/HIF/sdio/hif_sdio_internal.h6
-rw-r--r--CORE/SERVICES/HIF/sdio/hif_sdio_recv.c46
-rw-r--r--CORE/SERVICES/HIF/sdio/linux/if_ath_sdio.c2
-rw-r--r--CORE/SERVICES/HIF/sdio/linux/if_ath_sdio.h4
-rw-r--r--CORE/SERVICES/HIF/sdio/linux/native_sdio/include/hif_internal.h9
-rw-r--r--CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif.c60
-rw-r--r--CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif_scatter.c14
-rw-r--r--CORE/SERVICES/HTC/htc_send.c8
-rw-r--r--CORE/SERVICES/WMA/regdomain.h3
-rw-r--r--CORE/SERVICES/WMA/regdomain_common.h29
-rw-r--r--CORE/SERVICES/WMA/wma.c11
-rw-r--r--CORE/SME/src/sme_common/sme_Api.c5
-rw-r--r--CORE/SVC/external/wlan_nlink_common.h8
-rw-r--r--CORE/SVC/src/logging/wlan_logging_sock_svc.c94
-rw-r--r--CORE/SYS/legacy/src/utils/src/dot11f.c25
-rw-r--r--CORE/SYS/legacy/src/utils/src/macTrace.c1
-rw-r--r--CORE/UTILS/FWLOG/dbglog_host.c76
-rw-r--r--CORE/UTILS/PKTLOG/include/pktlog_ac.h8
-rw-r--r--CORE/UTILS/PKTLOG/include/pktlog_ac_api.h4
-rw-r--r--CORE/UTILS/PKTLOG/linux_ac.c42
-rw-r--r--CORE/UTILS/PKTLOG/pktlog_ac.c8
-rw-r--r--CORE/VOSS/inc/i_vos_list.h8
-rw-r--r--CORE/VOSS/inc/i_vos_timer.h5
-rw-r--r--CORE/VOSS/inc/vos_list.h49
-rw-r--r--CORE/VOSS/src/vos_api.c6
-rw-r--r--CORE/VOSS/src/vos_list.c115
-rw-r--r--CORE/VOSS/src/vos_memory.c29
-rw-r--r--CORE/VOSS/src/vos_mq.c26
-rw-r--r--CORE/VOSS/src/vos_nvitem.c33
-rw-r--r--CORE/VOSS/src/vos_packet.c14
-rw-r--r--CORE/VOSS/src/vos_sched.c111
-rw-r--r--CORE/VOSS/src/vos_sched.h17
-rw-r--r--CORE/VOSS/src/vos_timer.c66
-rw-r--r--CORE/VOSS/src/vos_trace.c21
-rw-r--r--CORE/WDA/inc/legacy/halMsgApi.h18
-rw-r--r--CORE/WDA/inc/wlan_qct_wda.h1
-rw-r--r--Kbuild11
90 files changed, 2462 insertions, 1141 deletions
diff --git a/CORE/CLD_TXRX/TXRX/ol_tx.c b/CORE/CLD_TXRX/TXRX/ol_tx.c
index 76392d92bc4f..baa2ad5dc967 100644
--- a/CORE/CLD_TXRX/TXRX/ol_tx.c
+++ b/CORE/CLD_TXRX/TXRX/ol_tx.c
@@ -436,6 +436,7 @@ ol_tx_ll(ol_txrx_vdev_handle vdev, adf_nbuf_t msdu_list)
while (msdu) {
adf_nbuf_t next;
struct ol_tx_desc_t *tx_desc;
+ struct ol_txrx_pdev_t *pdev = vdev->pdev;
a_status_t ret;
msdu_info.htt.info.ext_tid = adf_nbuf_get_tid(msdu);
@@ -452,7 +453,14 @@ ol_tx_ll(ol_txrx_vdev_handle vdev, adf_nbuf_t msdu_list)
}
}
- ol_tx_prepare_ll(tx_desc, vdev, msdu, &msdu_info);
+ msdu_info.htt.info.frame_type = pdev->htt_pkt_type;
+ tx_desc = ol_tx_desc_ll(pdev, vdev, msdu, &msdu_info);
+ if (adf_os_unlikely(! tx_desc)) {
+ TXRX_STATS_MSDU_LIST_INCR(
+ pdev, tx.dropped.host_reject, msdu);
+ adf_nbuf_unmap_single(pdev->osdev, msdu, ADF_OS_DMA_TO_DEVICE);
+ return msdu;
+ }
/*
* If debug display is enabled, show the meta-data being
diff --git a/CORE/EPPING/src/epping_main.c b/CORE/EPPING/src/epping_main.c
index 04c6f20e5f86..1a8be9140be0 100644
--- a/CORE/EPPING/src/epping_main.c
+++ b/CORE/EPPING/src/epping_main.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, 2016 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2014, 2016, 2018 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -171,6 +171,7 @@ int epping_driver_init(int con_mode, vos_wake_lock_t *g_wake_lock,
#ifdef MEMORY_DEBUG
adf_net_buf_debug_exit();
+ adf_nbuf_map_check_for_leaks();
vos_mem_exit();
#endif
#ifdef TIMER_MANAGER
@@ -189,6 +190,7 @@ error1:
}
#ifdef MEMORY_DEBUG
adf_net_buf_debug_exit();
+ adf_nbuf_map_check_for_leaks();
vos_mem_exit();
#endif
#ifdef TIMER_MANAGER
@@ -259,6 +261,7 @@ void epping_driver_exit(v_CONTEXT_t pVosContext)
vos_preClose( &pVosContext );
#ifdef MEMORY_DEBUG
adf_net_buf_debug_exit();
+ adf_nbuf_map_check_for_leaks();
vos_mem_exit();
#endif
#ifdef TIMER_MANAGER
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h
index e9961b2decaa..98f2f2be228a 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg.h
@@ -4153,6 +4153,13 @@ FG_BTC_BT_INTERVAL_PAGE_P2P_STA_DEFAULT
#define TSF_GPIO_PIN_INVALID (255)
#define CFG_SET_TSF_GPIO_PIN_DEFAULT (TSF_GPIO_PIN_INVALID)
+#ifdef WLAN_FEATURE_TSF
+/* GPIO pin to toogle when capture tsf in host side */
+#define CFG_SET_TSF_GPIO_PIN_HOST_NAME "gtsf_gpio_pin_host"
+#define CFG_SET_TSF_GPIO_PIN_HOST_MIN (0)
+#define CFG_SET_TSF_GPIO_PIN_HOST_MAX (254)
+#define CFG_SET_TSF_GPIO_PIN_HOST_DEFAULT (45)
+
#ifdef WLAN_FEATURE_TSF_PLUS
/* PTP options */
#define CFG_SET_TSF_PTP_OPT_NAME "gtsf_ptp_options"
@@ -4164,6 +4171,7 @@ FG_BTC_BT_INTERVAL_PAGE_P2P_STA_DEFAULT
#define CFG_SET_TSF_DBG_FS (0x8)
#define CFG_SET_TSF_PTP_OPT_DEFAULT (0xf)
#endif
+#endif
#define CFG_MULTICAST_HOST_FW_MSGS "gMulticastHostFwMsgs"
#define CFG_MULTICAST_HOST_FW_MSGS_MIN (0)
@@ -6257,7 +6265,7 @@ struct hdd_config {
uint8_t inform_bss_rssi_raw;
#ifdef WLAN_FEATURE_TSF
uint32_t tsf_gpio_pin;
-
+ uint32_t tsf_gpio_pin_host;
#ifdef WLAN_FEATURE_TSF_PLUS
uint8_t tsf_ptp_options;
#endif /* WLAN_FEATURE_TSF_PLUS */
diff --git a/CORE/HDD/inc/wlan_hdd_cfg80211.h b/CORE/HDD/inc/wlan_hdd_cfg80211.h
index 87c7684747c0..66ecc0af5c04 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg80211.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg80211.h
@@ -3085,4 +3085,47 @@ int wlan_hdd_disconnect(hdd_adapter_t *pAdapter, u16 reason);
#ifdef FEATURE_WLAN_DISABLE_CHANNEL_SWITCH
int wlan_hdd_send_avoid_freq_for_dnbs(hdd_context_t *hdd_ctx, uint8_t op_chan);
#endif
+
+#undef nla_parse
+#undef nla_parse_nested
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 12, 0)
+static inline int wlan_cfg80211_nla_parse(struct nlattr **tb,
+ int maxtype,
+ const struct nlattr *head,
+ int len,
+ const struct nla_policy *policy)
+{
+ return nla_parse(tb, maxtype, head, len, policy);
+}
+
+static inline int
+wlan_cfg80211_nla_parse_nested(struct nlattr *tb[],
+ int maxtype,
+ const struct nlattr *nla,
+ const struct nla_policy *policy)
+{
+ return nla_parse_nested(tb, maxtype, nla, policy);
+}
+#else
+static inline int wlan_cfg80211_nla_parse(struct nlattr **tb,
+ int maxtype,
+ const struct nlattr *head,
+ int len,
+ const struct nla_policy *policy)
+{
+ return nla_parse(tb, maxtype, head, len, policy, NULL);
+}
+
+static inline int
+wlan_cfg80211_nla_parse_nested(struct nlattr *tb[],
+ int maxtype,
+ const struct nlattr *nla,
+ const struct nla_policy *policy)
+{
+ return nla_parse_nested(tb, maxtype, nla, policy, NULL);
+}
+#endif
+#define nla_parse(...) (obsolete, use wlan_cfg80211_nla_parse)
+#define nla_parse_nested(...) (obsolete, use wlan_cfg80211_nla_parse_nested)
+
#endif
diff --git a/CORE/HDD/inc/wlan_hdd_dp_utils.h b/CORE/HDD/inc/wlan_hdd_dp_utils.h
index 0a044784daf7..83bade36427a 100644
--- a/CORE/HDD/inc/wlan_hdd_dp_utils.h
+++ b/CORE/HDD/inc/wlan_hdd_dp_utils.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013-2016 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2016 2018 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -49,6 +49,7 @@
#include <linux/spinlock.h>
#include <vos_trace.h>
#include <vos_list.h>
+#include <adf_os_lock.h>
/**-----------------------------------------------------------------------------
Preprocessor definitions and constants
@@ -64,7 +65,7 @@ typedef struct hdd_list_s
hdd_list_node_t anchor;
v_SIZE_t count;
v_SIZE_t max_size;
- spinlock_t lock;
+ adf_os_spinlock_t lock;
} hdd_list_t;
typedef struct
@@ -84,7 +85,7 @@ VOS_INLINE_FN v_VOID_t hdd_list_init( hdd_list_t *pList, v_SIZE_t max_size)
INIT_LIST_HEAD( &pList->anchor );
pList->count = 0;
pList->max_size = max_size;
- spin_lock_init(&pList->lock);
+ adf_os_spinlock_init(&pList->lock);
}
VOS_INLINE_FN v_VOID_t hdd_list_destroy( hdd_list_t *pList )
diff --git a/CORE/HDD/inc/wlan_hdd_hostapd.h b/CORE/HDD/inc/wlan_hdd_hostapd.h
index a45564def0d4..ea9a43683f36 100644
--- a/CORE/HDD/inc/wlan_hdd_hostapd.h
+++ b/CORE/HDD/inc/wlan_hdd_hostapd.h
@@ -151,9 +151,9 @@ static inline bool
hdd_is_sta_connection_pending(hdd_context_t *hdd_ctx)
{
bool status;
- spin_lock(&hdd_ctx->sta_update_info_lock);
+ adf_os_spin_lock(&hdd_ctx->sta_update_info_lock);
status = hdd_ctx->is_sta_connection_pending;
- spin_unlock(&hdd_ctx->sta_update_info_lock);
+ adf_os_spin_unlock(&hdd_ctx->sta_update_info_lock);
return status;
}
@@ -171,9 +171,9 @@ static inline void
hdd_change_sta_conn_pending_status(hdd_context_t *hdd_ctx,
bool value)
{
- spin_lock(&hdd_ctx->sta_update_info_lock);
+ adf_os_spin_lock(&hdd_ctx->sta_update_info_lock);
hdd_ctx->is_sta_connection_pending = value;
- spin_unlock(&hdd_ctx->sta_update_info_lock);
+ adf_os_spin_unlock(&hdd_ctx->sta_update_info_lock);
}
/**
@@ -189,10 +189,10 @@ static inline bool
hdd_is_sap_restart_required(hdd_context_t *hdd_ctx)
{
bool status = false;
- spin_lock(&hdd_ctx->sap_update_info_lock);
+ adf_os_spin_lock(&hdd_ctx->sap_update_info_lock);
if (!hdd_ctx->is_ch_avoid_in_progress)
status = hdd_ctx->is_sap_restart_required;
- spin_unlock(&hdd_ctx->sap_update_info_lock);
+ adf_os_spin_unlock(&hdd_ctx->sap_update_info_lock);
return status;
}
@@ -211,9 +211,9 @@ static inline void
hdd_change_sap_restart_required_status(hdd_context_t *hdd_ctx,
bool value)
{
- spin_lock(&hdd_ctx->sap_update_info_lock);
+ adf_os_spin_lock(&hdd_ctx->sap_update_info_lock);
hdd_ctx->is_sap_restart_required = value;
- spin_unlock(&hdd_ctx->sap_update_info_lock);
+ adf_os_spin_unlock(&hdd_ctx->sap_update_info_lock);
}
/**
@@ -230,9 +230,9 @@ static inline void
hdd_change_ch_avoidance_status(hdd_context_t *hdd_ctx,
bool value)
{
- spin_lock(&hdd_ctx->sap_update_info_lock);
+ adf_os_spin_lock(&hdd_ctx->sap_update_info_lock);
hdd_ctx->is_ch_avoid_in_progress = value;
- spin_unlock(&hdd_ctx->sap_update_info_lock);
+ adf_os_spin_unlock(&hdd_ctx->sap_update_info_lock);
hddLog(LOG1, FL("is_ch_avoid_in_progress %d"), value);
}
diff --git a/CORE/HDD/inc/wlan_hdd_main.h b/CORE/HDD/inc/wlan_hdd_main.h
index 63375984f4f3..d60734a149af 100644
--- a/CORE/HDD/inc/wlan_hdd_main.h
+++ b/CORE/HDD/inc/wlan_hdd_main.h
@@ -51,6 +51,10 @@
#include <wlan_hdd_wmm.h>
#include <wlan_hdd_cfg.h>
#include <linux/spinlock.h>
+#ifdef WLAN_FEATURE_TSF_PTP
+#include <linux/ptp_classify.h>
+#include <linux/ptp_clock_kernel.h>
+#endif
#include <wlan_hdd_ftm.h>
#ifdef FEATURE_WLAN_TDLS
#include "wlan_hdd_tdls.h"
@@ -343,7 +347,7 @@ struct linkspeedContext
unsigned int magic;
};
-extern spinlock_t hdd_context_lock;
+extern adf_os_spinlock_t hdd_context_lock;
#define STATS_CONTEXT_MAGIC 0x53544154 //STAT
#define PEER_INFO_CONTEXT_MAGIC 0x52535349 /* PEER_INFO */
@@ -1301,7 +1305,7 @@ struct hdd_adapter_s
*/
/** Multiple station supports */
/** Per-station structure */
- spinlock_t staInfo_lock; //To protect access to station Info
+ adf_os_spinlock_t staInfo_lock; //To protect access to station Info
hdd_station_info_t aStaInfo[WLAN_MAX_STA_COUNT];
//v_U8_t uNumActiveStation;
@@ -1335,7 +1339,7 @@ struct hdd_adapter_s
vos_timer_t host_capture_req_timer;
#ifdef WLAN_FEATURE_TSF_PLUS
/* spin lock for read/write timestamps */
- spinlock_t host_target_sync_lock;
+ adf_os_spinlock_t host_target_sync_lock;
vos_timer_t host_target_sync_timer;
uint64_t cur_host_time;
uint64_t last_host_time;
@@ -1431,7 +1435,7 @@ struct hdd_adapter_s
/* BITMAP indicating pause reason */
uint32_t pause_map;
- spinlock_t pause_map_lock;
+ adf_os_spinlock_t pause_map_lock;
adf_os_time_t start_time;
adf_os_time_t last_time;
@@ -1444,7 +1448,7 @@ struct hdd_adapter_s
struct hdd_netif_queue_stats queue_oper_stats[WLAN_REASON_TYPE_MAX];
/* random address management for management action frames */
- spinlock_t random_mac_lock;
+ adf_os_spinlock_t random_mac_lock;
struct action_frame_random_mac random_mac[MAX_RANDOM_MAC_ADDRS];
/*
* Store the restrict_offchannel count
@@ -1813,7 +1817,7 @@ struct hdd_context_s
#ifdef FEATURE_WLAN_THERMAL_SHUTDOWN
bool system_suspended;
volatile int thermal_suspend_state;
- spinlock_t thermal_suspend_lock;
+ adf_os_spinlock_t thermal_suspend_lock;
struct workqueue_struct *thermal_suspend_wq;
struct delayed_work thermal_suspend_work;
#endif
@@ -1834,7 +1838,7 @@ struct hdd_context_s
v_BOOL_t suspended;
bool prevent_suspend;
- spinlock_t filter_lock;
+ adf_os_spinlock_t filter_lock;
/* Lock to avoid race condition during start/stop bss */
struct mutex sap_lock;
@@ -1947,7 +1951,7 @@ struct hdd_context_s
/* Use below lock to protect access to isSchedScanUpdatePending
* since it will be accessed in two different contexts.
*/
- spinlock_t schedScan_lock;
+ adf_os_spinlock_t schedScan_lock;
// Flag keeps track of wiphy suspend/resume
v_BOOL_t isWiphySuspended;
@@ -1959,7 +1963,7 @@ struct hdd_context_s
/* DDR bus bandwidth compute timer */
vos_timer_t bus_bw_timer;
int cur_vote_level;
- spinlock_t bus_bw_lock;
+ adf_os_spinlock_t bus_bw_lock;
int cur_rx_level;
uint64_t prev_rx;
int cur_tx_level;
@@ -2006,8 +2010,8 @@ struct hdd_context_s
bool is_ch_avoid_in_progress;
bool is_sta_connection_pending;
- spinlock_t sap_update_info_lock;
- spinlock_t sta_update_info_lock;
+ adf_os_spinlock_t sap_update_info_lock;
+ adf_os_spinlock_t sta_update_info_lock;
v_U8_t dev_dfs_cac_status;
@@ -2021,7 +2025,7 @@ struct hdd_context_s
v_U8_t skip_acs_scan_status;
uint8_t *last_acs_channel_list;
uint8_t num_of_channels;
- spinlock_t acs_skip_lock;
+ adf_os_spinlock_t acs_skip_lock;
#endif
vos_wake_lock_t sap_dfs_wakelock;
@@ -2052,7 +2056,7 @@ struct hdd_context_s
* radar found indication and application triggered channel
* switch
*/
- spinlock_t dfs_lock;
+ adf_os_spinlock_t dfs_lock;
#ifdef FEATURE_WLAN_EXTSCAN
struct hdd_ext_scan_context ext_scan_context;
@@ -2138,6 +2142,10 @@ struct hdd_context_s
/* the context that is capturing tsf */
hdd_adapter_t *cap_tsf_context;
#endif
+#ifdef WLAN_FEATURE_TSF_PTP
+ struct ptp_clock_info ptp_cinfo;
+ struct ptp_clock *ptp_clock;
+#endif
/* flag to show whether moniotr mode is enabled */
bool is_mon_enable;
v_MACADDR_t hw_macaddr;
@@ -2149,7 +2157,7 @@ struct hdd_context_s
/* Lock to control access to dnbs avoid freq list */
struct mutex avoid_freq_lock;
#endif
- spinlock_t restrict_offchan_lock;
+ adf_os_spinlock_t restrict_offchan_lock;
bool restrict_offchan_flag;
};
@@ -2404,6 +2412,18 @@ int hdd_set_mas(hdd_adapter_t *hostapd_adapter, uint8_t filter_type);
uint8_t hdd_is_mcc_in_24G(hdd_context_t *hdd_ctx);
bool wlan_hdd_get_fw_state(hdd_adapter_t *adapter);
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 12, 0)
+static inline void hdd_dev_setup_destructor(struct net_device *dev)
+{
+ dev->destructor = free_netdev;
+}
+#else
+static inline void hdd_dev_setup_destructor(struct net_device *dev)
+{
+ dev->needs_free_netdev = true;
+}
+#endif /* KERNEL_VERSION(4, 12, 0) */
+
#ifdef WLAN_FEATURE_LINK_LAYER_STATS
static inline bool hdd_link_layer_stats_supported(void)
{
diff --git a/CORE/HDD/inc/wlan_hdd_p2p.h b/CORE/HDD/inc/wlan_hdd_p2p.h
index 55236875ff24..3cb3f57cea91 100644
--- a/CORE/HDD/inc/wlan_hdd_p2p.h
+++ b/CORE/HDD/inc/wlan_hdd_p2p.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2017 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2018 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -171,8 +171,13 @@ int wlan_hdd_mgmt_tx( struct wiphy *wiphy, struct net_device *dev,
const u8 *buf, size_t len, u64 *cookie );
#endif
-
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 0))
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0))
+struct wireless_dev *wlan_hdd_add_virtual_intf(struct wiphy *wiphy,
+ const char *name,
+ unsigned char name_assign_type,
+ enum nl80211_iftype type,
+ struct vif_params *params);
+#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 0))
struct wireless_dev *wlan_hdd_add_virtual_intf(struct wiphy *wiphy,
const char *name,
unsigned char name_assign_type,
diff --git a/CORE/HDD/inc/wlan_hdd_tsf.h b/CORE/HDD/inc/wlan_hdd_tsf.h
index 6cabf3b90245..a1a329b87fc4 100644
--- a/CORE/HDD/inc/wlan_hdd_tsf.h
+++ b/CORE/HDD/inc/wlan_hdd_tsf.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015,2017 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2015,2018 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -91,6 +91,15 @@ int hdd_capture_tsf(hdd_adapter_t *adapter, uint32_t *buf, int len);
* Return: Describe the execute result of this routine
*/
int hdd_indicate_tsf(hdd_adapter_t *adapter, uint32_t *buf, int len);
+
+/**
+ * wlan_get_ts_info() - return ts info to uplayer
+ * @dev: pointer to net_device
+ * @info: pointer to ethtool_ts_info
+ *
+ * Return: Describe the execute result of this routine
+ */
+int wlan_get_ts_info(struct net_device *dev, struct ethtool_ts_info *info);
#else
static inline void
wlan_hdd_tsf_init(hdd_context_t *hdd_ctx)
@@ -112,6 +121,12 @@ hdd_capture_tsf(hdd_adapter_t *adapter, uint32_t *buf, int len)
{
return -ENOTSUPP;
}
+
+static inline int
+wlan_get_ts_info(struct net_device *dev, struct ethtool_ts_info *info)
+{
+ return -ENOTSUPP;
+}
#endif
#if defined(WLAN_FEATURE_TSF_PLUS) && defined(WLAN_FEATURE_TSF)
diff --git a/CORE/HDD/inc/wlan_hdd_wowl.h b/CORE/HDD/inc/wlan_hdd_wowl.h
index 0e2433b29cd9..26aac5d4a623 100644
--- a/CORE/HDD/inc/wlan_hdd_wowl.h
+++ b/CORE/HDD/inc/wlan_hdd_wowl.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013-2018 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2014, 2018 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
diff --git a/CORE/HDD/src/wlan_hdd_assoc.c b/CORE/HDD/src/wlan_hdd_assoc.c
index af3563a39c40..58e2d704b84b 100644
--- a/CORE/HDD/src/wlan_hdd_assoc.c
+++ b/CORE/HDD/src/wlan_hdd_assoc.c
@@ -744,6 +744,22 @@ static void hdd_copy_ht_operation(hdd_station_ctx_t *hdd_sta_ctx,
roam_ht_ops->basicMCSSet[i];
}
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0)
+static void hdd_copy_vht_center_freq(struct ieee80211_vht_operation *ieee_ops,
+ tDot11fIEVHTOperation *roam_ops)
+{
+ ieee_ops->center_freq_seg0_idx = roam_ops->chanCenterFreqSeg1;
+ ieee_ops->center_freq_seg1_idx = roam_ops->chanCenterFreqSeg2;
+}
+#else
+static void hdd_copy_vht_center_freq(struct ieee80211_vht_operation *ieee_ops,
+ tDot11fIEVHTOperation *roam_ops)
+{
+ ieee_ops->center_freq_seg1_idx = roam_ops->chanCenterFreqSeg1;
+ ieee_ops->center_freq_seg2_idx = roam_ops->chanCenterFreqSeg2;
+}
+#endif /* KERNEL_VERSION(4, 12, 0) */
+
/**
* hdd_copy_vht_operation()- copy VHT operations element from roam info to
* hdd station context.
@@ -762,8 +778,7 @@ static void hdd_copy_vht_operation(hdd_station_ctx_t *hdd_sta_ctx,
adf_os_mem_zero(hdd_vht_ops, sizeof(struct ieee80211_vht_operation));
hdd_vht_ops->chan_width = roam_vht_ops->chanWidth;
- hdd_vht_ops->center_freq_seg1_idx = roam_vht_ops->chanCenterFreqSeg1;
- hdd_vht_ops->center_freq_seg2_idx = roam_vht_ops->chanCenterFreqSeg2;
+ hdd_copy_vht_center_freq(hdd_vht_ops, roam_vht_ops);
hdd_vht_ops->basic_mcs_set = roam_vht_ops->basicMCSSet;
}
@@ -1298,13 +1313,13 @@ static void hdd_SendAssociationEvent(struct net_device *dev,tCsrRoamInfo *pCsrRo
#ifdef FEATURE_BUS_BANDWIDTH
/* start timer in sta/p2p_cli */
- spin_lock_bh(&pHddCtx->bus_bw_lock);
+ adf_os_spin_lock_bh(&pHddCtx->bus_bw_lock);
pAdapter->prev_tx_packets = pAdapter->stats.tx_packets;
pAdapter->prev_rx_packets = pAdapter->stats.rx_packets;
tlshim_get_intra_bss_fwd_pkts_count(pAdapter->sessionId,
&pAdapter->prev_fwd_tx_packets, &pAdapter->prev_fwd_rx_packets);
pAdapter->prev_tx_bytes = pAdapter->stats.tx_bytes;
- spin_unlock_bh(&pHddCtx->bus_bw_lock);
+ adf_os_spin_unlock_bh(&pHddCtx->bus_bw_lock);
hdd_start_bus_bw_compute_timer(pAdapter);
#endif
if (pHddCtx->cfg_ini->mon_on_sta_enable &&
@@ -1363,13 +1378,13 @@ static void hdd_SendAssociationEvent(struct net_device *dev,tCsrRoamInfo *pCsrRo
#ifdef FEATURE_BUS_BANDWIDTH
/* stop timer in sta/p2p_cli */
- spin_lock_bh(&pHddCtx->bus_bw_lock);
+ adf_os_spin_lock_bh(&pHddCtx->bus_bw_lock);
pAdapter->prev_tx_packets = 0;
pAdapter->prev_rx_packets = 0;
pAdapter->prev_fwd_tx_packets = 0;
pAdapter->prev_fwd_rx_packets = 0;
pAdapter->prev_tx_bytes = 0;
- spin_unlock_bh(&pHddCtx->bus_bw_lock);
+ adf_os_spin_unlock_bh(&pHddCtx->bus_bw_lock);
hdd_stop_bus_bw_compute_timer(pAdapter);
#endif
if (pHddCtx->cfg_ini->mon_on_sta_enable &&
@@ -4572,8 +4587,8 @@ hdd_smeRoamCallback(void *pContext, tCsrRoamInfo *pRoamInfo, tANI_U32 roamId,
VOS_STATUS status = VOS_STATUS_SUCCESS;
hdd_context_t *pHddCtx = NULL;
struct cfg80211_bss *bss_status;
- tHalHandle hal = WLAN_HDD_GET_HAL_CTX(pAdapter);
- tpAniSirGlobal mac = PMAC_STRUCT(hal);
+ tHalHandle hal;
+ tpAniSirGlobal mac;
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH,
"CSR Callback: status= %d result= %d roamID=%d",
roamStatus, roamResult, roamId );
@@ -4958,9 +4973,16 @@ hdd_smeRoamCallback(void *pContext, tCsrRoamInfo *pRoamInfo, tANI_U32 roamId,
roamResult );
break;
case eCSR_ROAM_STA_CHANNEL_SWITCH:
- hdd_chan_change_notify(pAdapter, pAdapter->dev,
- pRoamInfo->chan_info.chan_id,
- mac->roam.configParam.phyMode);
+ {
+ pHddCtx = WLAN_HDD_GET_CTX(pAdapter);
+ if((pHddCtx) && (pHddCtx->hHal) && (pRoamInfo)) {
+ hal = pHddCtx->hHal;
+ mac = PMAC_STRUCT(hal);
+ hdd_chan_change_notify(pAdapter, pAdapter->dev,
+ pRoamInfo->chan_info.chan_id,
+ mac->roam.configParam.phyMode);
+ }
+ }
default:
break;
}
diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c
index ec651ed6804a..6fc2a9472f0f 100644
--- a/CORE/HDD/src/wlan_hdd_cfg.c
+++ b/CORE/HDD/src/wlan_hdd_cfg.c
@@ -4564,6 +4564,13 @@ REG_TABLE_ENTRY g_registry_table[] =
CFG_INFORM_BSS_RSSI_RAW_MIN,
CFG_INFORM_BSS_RSSI_RAW_MAX),
#ifdef WLAN_FEATURE_TSF
+ REG_VARIABLE(CFG_SET_TSF_GPIO_PIN_HOST_NAME, WLAN_PARAM_Integer,
+ hdd_config_t, tsf_gpio_pin_host,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_SET_TSF_GPIO_PIN_HOST_DEFAULT,
+ CFG_SET_TSF_GPIO_PIN_HOST_MIN,
+ CFG_SET_TSF_GPIO_PIN_HOST_MAX),
+
REG_VARIABLE(CFG_SET_TSF_GPIO_PIN_NAME, WLAN_PARAM_Integer,
hdd_config_t, tsf_gpio_pin,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index 173d9a17a350..8ce1070bb4c3 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -191,9 +191,13 @@
}
#ifdef WLAN_FEATURE_VOWIFI_11R
+#ifndef WLAN_AKM_SUITE_FT_8021X
#define WLAN_AKM_SUITE_FT_8021X 0x000FAC03
+#endif
+#ifndef WLAN_AKM_SUITE_FT_PSK
#define WLAN_AKM_SUITE_FT_PSK 0x000FAC04
#endif
+#endif
#define MAX_TXPOWER_SCALE 4
@@ -1909,9 +1913,9 @@ __wlan_hdd_cfg80211_set_scanning_mac_oui(struct wiphy *wiphy,
return -ENOTSUPP;
}
- if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_SET_SCANNING_MAC_OUI_MAX,
- data, data_len,
- NULL)) {
+ if (wlan_cfg80211_nla_parse(tb,
+ QCA_WLAN_VENDOR_ATTR_SET_SCANNING_MAC_OUI_MAX,
+ data, data_len, NULL)) {
hddLog(LOGE, FL("Invalid ATTR"));
return -EINVAL;
}
@@ -2027,7 +2031,7 @@ __wlan_hdd_cfg80211_get_concurrency_matrix(struct wiphy *wiphy,
if (0 != ret)
return ret;
- if (nla_parse(tb, MAX_CONCURRENT_MATRIX,
+ if (wlan_cfg80211_nla_parse(tb, MAX_CONCURRENT_MATRIX,
data, data_len, wlan_hdd_get_concurrency_matrix_policy)) {
hddLog(LOGE, FL("Invalid ATTR"));
return -EINVAL;
@@ -2179,7 +2183,7 @@ __wlan_hdd_cfg80211_set_ext_roam_params(struct wiphy *wiphy,
if (0 != ret)
return -EINVAL;
- if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_ROAMING_PARAM_MAX,
+ if (wlan_cfg80211_nla_parse(tb, QCA_WLAN_VENDOR_ATTR_ROAMING_PARAM_MAX,
data, data_len,
wlan_hdd_set_roam_param_policy)) {
hddLog(LOGE, FL("Invalid ATTR"));
@@ -2217,11 +2221,11 @@ __wlan_hdd_cfg80211_set_ext_roam_params(struct wiphy *wiphy,
nla_for_each_nested(curr_attr,
tb[QCA_WLAN_VENDOR_ATTR_ROAMING_PARAM_WHITE_LIST_SSID_LIST],
rem) {
- if (nla_parse(tb2,
+ if (wlan_cfg80211_nla_parse(tb2,
QCA_WLAN_VENDOR_ATTR_ROAM_SUBCMD_MAX,
nla_data(curr_attr), nla_len(curr_attr),
wlan_hdd_set_roam_param_policy)) {
- hddLog(LOGE, FL("nla_parse failed"));
+ hddLog(LOGE, FL("wlan_cfg80211_nla_parse failed"));
goto fail;
}
/* Parse and Fetch allowed SSID list*/
@@ -2381,11 +2385,11 @@ __wlan_hdd_cfg80211_set_ext_roam_params(struct wiphy *wiphy,
break;
}
- if (nla_parse(tb2,
+ if (wlan_cfg80211_nla_parse(tb2,
QCA_WLAN_VENDOR_ATTR_ROAMING_PARAM_MAX,
nla_data(curr_attr), nla_len(curr_attr),
wlan_hdd_set_roam_param_policy)) {
- hddLog(LOGE, FL("nla_parse failed"));
+ hddLog(LOGE, FL("wlan_cfg80211_nla_parse failed"));
goto fail;
}
/* Parse and fetch MAC address */
@@ -2443,11 +2447,11 @@ __wlan_hdd_cfg80211_set_ext_roam_params(struct wiphy *wiphy,
hddLog(LOGW, FL("Ignoring excess Blacklist BSSID"));
break;
}
- if (nla_parse(tb2,
+ if (wlan_cfg80211_nla_parse(tb2,
QCA_WLAN_VENDOR_ATTR_ROAMING_PARAM_MAX,
nla_data(curr_attr), nla_len(curr_attr),
wlan_hdd_set_roam_param_policy)) {
- hddLog(LOGE, FL("nla_parse failed"));
+ hddLog(LOGE, FL("wlan_cfg80211_nla_parse failed"));
goto fail;
}
/* Parse and fetch MAC address */
@@ -2902,7 +2906,8 @@ static int __wlan_hdd_cfg80211_extscan_get_capabilities(struct wiphy *wiphy,
hddLog(LOGE, FL("extscan not supported"));
return -ENOTSUPP;
}
- if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX,
+ if (wlan_cfg80211_nla_parse(tb,
+ QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX,
data, data_len,
wlan_hdd_extscan_config_policy)) {
hddLog(VOS_TRACE_LEVEL_ERROR, FL("Invalid ATTR"));
@@ -2928,11 +2933,11 @@ static int __wlan_hdd_cfg80211_extscan_get_capabilities(struct wiphy *wiphy,
pReqMsg->sessionId = pAdapter->sessionId;
hddLog(VOS_TRACE_LEVEL_INFO, FL("Session Id %d"), pReqMsg->sessionId);
- spin_lock(&hdd_context_lock);
+ adf_os_spin_lock(&hdd_context_lock);
context = &pHddCtx->ext_scan_context;
context->request_id = pReqMsg->requestId;
INIT_COMPLETION(context->response_event);
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
status = sme_ExtScanGetCapabilities(pHddCtx->hHal, pReqMsg);
@@ -3045,7 +3050,7 @@ static int __wlan_hdd_cfg80211_extscan_get_cached_results(struct wiphy *wiphy,
hddLog(LOGE, FL("extscan not supported"));
return -ENOTSUPP;
}
- if (nla_parse(tb, PARAM_MAX, data, data_len,
+ if (wlan_cfg80211_nla_parse(tb, PARAM_MAX, data, data_len,
wlan_hdd_extscan_config_policy)) {
hddLog(LOGE, FL("Invalid ATTR"));
return -EINVAL;
@@ -3075,12 +3080,12 @@ static int __wlan_hdd_cfg80211_extscan_get_cached_results(struct wiphy *wiphy,
hddLog(LOG1, FL("Req Id: %u Session Id: %d Flush: %d"),
pReqMsg->requestId, pReqMsg->sessionId, pReqMsg->flush);
- spin_lock(&hdd_context_lock);
+ adf_os_spin_lock(&hdd_context_lock);
context = &pHddCtx->ext_scan_context;
context->request_id = pReqMsg->requestId;
context->ignore_cached_results = false;
INIT_COMPLETION(context->response_event);
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
status = sme_getCachedResults(pHddCtx->hHal, pReqMsg);
if (!HAL_STATUS_SUCCESS(status)) {
@@ -3094,13 +3099,13 @@ static int __wlan_hdd_cfg80211_extscan_get_cached_results(struct wiphy *wiphy,
if (!rc) {
hddLog(LOGE, FL("Target response timed out"));
retval = -ETIMEDOUT;
- spin_lock(&hdd_context_lock);
+ adf_os_spin_lock(&hdd_context_lock);
context->ignore_cached_results = true;
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
} else {
- spin_lock(&hdd_context_lock);
+ adf_os_spin_lock(&hdd_context_lock);
retval = context->response_status;
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
}
return retval;
@@ -3180,7 +3185,8 @@ static int __wlan_hdd_cfg80211_extscan_set_bssid_hotlist(struct wiphy *wiphy,
if (0 != status)
return -EINVAL;
- if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX,
+ if (wlan_cfg80211_nla_parse(tb,
+ QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX,
data, data_len,
wlan_hdd_extscan_config_policy)) {
hddLog(VOS_TRACE_LEVEL_ERROR, FL("Invalid ATTR"));
@@ -3242,10 +3248,11 @@ static int __wlan_hdd_cfg80211_extscan_set_bssid_hotlist(struct wiphy *wiphy,
break;
}
- if (nla_parse(tb2, QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX,
+ if (wlan_cfg80211_nla_parse(tb2,
+ QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX,
nla_data(apTh), nla_len(apTh),
wlan_hdd_extscan_config_policy)) {
- hddLog(LOGE, FL("nla_parse failed"));
+ hddLog(LOGE, FL("wlan_cfg80211_nla_parse failed"));
goto fail;
}
@@ -3287,10 +3294,10 @@ static int __wlan_hdd_cfg80211_extscan_set_bssid_hotlist(struct wiphy *wiphy,
}
context = &pHddCtx->ext_scan_context;
- spin_lock(&hdd_context_lock);
+ adf_os_spin_lock(&hdd_context_lock);
INIT_COMPLETION(context->response_event);
context->request_id = request_id = pReqMsg->requestId;
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
status = sme_SetBssHotlist(pHddCtx->hHal, pReqMsg);
if (!HAL_STATUS_SUCCESS(status)) {
@@ -3306,12 +3313,12 @@ static int __wlan_hdd_cfg80211_extscan_set_bssid_hotlist(struct wiphy *wiphy,
hddLog(LOGE, FL("sme_SetBssHotlist timed out"));
retval = -ETIMEDOUT;
} else {
- spin_lock(&hdd_context_lock);
+ adf_os_spin_lock(&hdd_context_lock);
if (context->request_id == request_id)
retval = context->response_status;
else
retval = -EINVAL;
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
}
EXIT();
return retval;
@@ -3377,7 +3384,8 @@ static int __wlan_hdd_cfg80211_extscan_set_significant_change(
if (0 != retval)
return -EINVAL;
- if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX,
+ if (wlan_cfg80211_nla_parse(tb,
+ QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX,
data, data_len,
wlan_hdd_extscan_config_policy)) {
hddLog(LOGE, FL("Invalid ATTR"));
@@ -3459,11 +3467,11 @@ static int __wlan_hdd_cfg80211_extscan_set_significant_change(
break;
}
- if (nla_parse(tb2,
+ if (wlan_cfg80211_nla_parse(tb2,
QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX,
nla_data(apTh), nla_len(apTh),
wlan_hdd_extscan_config_policy)) {
- hddLog(LOGE, FL("nla_parse failed"));
+ hddLog(LOGE, FL("wlan_cfg80211_nla_parse failed"));
goto fail;
}
@@ -3505,10 +3513,10 @@ static int __wlan_hdd_cfg80211_extscan_set_significant_change(
}
context = &pHddCtx->ext_scan_context;
- spin_lock(&hdd_context_lock);
+ adf_os_spin_lock(&hdd_context_lock);
INIT_COMPLETION(context->response_event);
context->request_id = request_id = pReqMsg->requestId;
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
status = sme_SetSignificantChange(pHddCtx->hHal, pReqMsg);
if (!HAL_STATUS_SUCCESS(status)) {
@@ -3524,12 +3532,12 @@ static int __wlan_hdd_cfg80211_extscan_set_significant_change(
hddLog(LOGE, FL("sme_SetSignificantChange timed out"));
retval = -ETIMEDOUT;
} else {
- spin_lock(&hdd_context_lock);
+ adf_os_spin_lock(&hdd_context_lock);
if (context->request_id == request_id)
retval = context->response_status;
else
retval = -EINVAL;
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
}
EXIT();
return retval;
@@ -3590,7 +3598,8 @@ static int __wlan_hdd_cfg80211_extscan_get_valid_channels(struct wiphy *wiphy,
if (0 != retval)
return -EINVAL;
- if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX,
+ if (wlan_cfg80211_nla_parse(tb,
+ QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX,
data, data_len,
wlan_hdd_extscan_config_policy)) {
hddLog(LOGE, FL("Invalid ATTR"));
@@ -3840,11 +3849,11 @@ static int hdd_extscan_start_fill_bucket_channel_spec(
break;
}
- if (nla_parse(bucket,
+ if (wlan_cfg80211_nla_parse(bucket,
QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX,
nla_data(buckets), nla_len(buckets),
wlan_hdd_extscan_config_policy)) {
- hddLog(LOGE, FL("nla_parse failed"));
+ hddLog(LOGE, FL("wlan_cfg80211_nla_parse failed"));
return -EINVAL;
}
@@ -4063,11 +4072,11 @@ static int hdd_extscan_start_fill_bucket_channel_spec(
total_channels))
break;
- if (nla_parse(channel,
+ if (wlan_cfg80211_nla_parse(channel,
QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX,
nla_data(channels), nla_len(channels),
wlan_hdd_extscan_config_policy)) {
- hddLog(LOGE, FL("nla_parse failed"));
+ hddLog(LOGE, FL("wlan_cfg80211_nla_parse failed"));
return -EINVAL;
}
@@ -4281,7 +4290,7 @@ static int __wlan_hdd_cfg80211_extscan_start(struct wiphy *wiphy,
return -ENOTSUPP;
}
- if (nla_parse(tb, PARAM_MAX, data, data_len,
+ if (wlan_cfg80211_nla_parse(tb, PARAM_MAX, data, data_len,
wlan_hdd_extscan_config_policy)) {
hddLog(LOGE, FL("Invalid ATTR"));
return -EINVAL;
@@ -4372,11 +4381,11 @@ static int __wlan_hdd_cfg80211_extscan_start(struct wiphy *wiphy,
goto fail;
context = &pHddCtx->ext_scan_context;
- spin_lock(&hdd_context_lock);
+ adf_os_spin_lock(&hdd_context_lock);
INIT_COMPLETION(context->response_event);
context->request_id = request_id = pReqMsg->requestId;
context->buckets_scanned = 0;
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
status = sme_ExtScanStart(pHddCtx->hHal, pReqMsg);
if (!HAL_STATUS_SUCCESS(status)) {
@@ -4397,12 +4406,12 @@ static int __wlan_hdd_cfg80211_extscan_start(struct wiphy *wiphy,
hddLog(LOGE, FL("sme_ExtScanStart timed out"));
retval = -ETIMEDOUT;
} else {
- spin_lock(&hdd_context_lock);
+ adf_os_spin_lock(&hdd_context_lock);
if (context->request_id == request_id)
retval = context->response_status;
else
retval = -EINVAL;
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
}
EXIT();
return retval;
@@ -4495,7 +4504,7 @@ static int __wlan_hdd_cfg80211_extscan_stop(struct wiphy *wiphy,
hddLog(LOGE, FL("extscan not supported"));
return -ENOTSUPP;
}
- if (nla_parse(tb, PARAM_MAX, data, data_len,
+ if (wlan_cfg80211_nla_parse(tb, PARAM_MAX, data, data_len,
wlan_hdd_extscan_config_policy)) {
hddLog(LOGE, FL("Invalid ATTR"));
return -EINVAL;
@@ -4519,10 +4528,10 @@ static int __wlan_hdd_cfg80211_extscan_stop(struct wiphy *wiphy,
pReqMsg->requestId, pReqMsg->sessionId);
context = &pHddCtx->ext_scan_context;
- spin_lock(&hdd_context_lock);
+ adf_os_spin_lock(&hdd_context_lock);
INIT_COMPLETION(context->response_event);
context->request_id = request_id = pReqMsg->requestId;
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
status = sme_ExtScanStop(pHddCtx->hHal, pReqMsg);
if (!HAL_STATUS_SUCCESS(status)) {
@@ -4539,12 +4548,12 @@ static int __wlan_hdd_cfg80211_extscan_stop(struct wiphy *wiphy,
hddLog(LOGE, FL("sme_ExtScanStop timed out"));
retval = -ETIMEDOUT;
} else {
- spin_lock(&hdd_context_lock);
+ adf_os_spin_lock(&hdd_context_lock);
if (context->request_id == request_id)
retval = context->response_status;
else
retval = -EINVAL;
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
}
EXIT();
return retval;
@@ -4614,7 +4623,8 @@ static int __wlan_hdd_cfg80211_extscan_reset_bssid_hotlist(struct wiphy *wiphy,
hddLog(LOGE, FL("extscan not supported"));
return -ENOTSUPP;
}
- if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX,
+ if (wlan_cfg80211_nla_parse(tb,
+ QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX,
data, data_len,
wlan_hdd_extscan_config_policy)) {
hddLog(LOGE, FL("Invalid ATTR"));
@@ -4641,10 +4651,10 @@ static int __wlan_hdd_cfg80211_extscan_reset_bssid_hotlist(struct wiphy *wiphy,
pReqMsg->requestId, pReqMsg->sessionId);
context = &pHddCtx->ext_scan_context;
- spin_lock(&hdd_context_lock);
+ adf_os_spin_lock(&hdd_context_lock);
INIT_COMPLETION(context->response_event);
context->request_id = request_id = pReqMsg->requestId;
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
status = sme_ResetBssHotlist(pHddCtx->hHal, pReqMsg);
if (!HAL_STATUS_SUCCESS(status)) {
@@ -4659,12 +4669,12 @@ static int __wlan_hdd_cfg80211_extscan_reset_bssid_hotlist(struct wiphy *wiphy,
hddLog(LOGE, FL("sme_ResetBssHotlist timed out"));
retval = -ETIMEDOUT;
} else {
- spin_lock(&hdd_context_lock);
+ adf_os_spin_lock(&hdd_context_lock);
if (context->request_id == request_id)
retval = context->response_status;
else
retval = -EINVAL;
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
}
EXIT();
return retval;
@@ -4729,7 +4739,8 @@ static int __wlan_hdd_cfg80211_extscan_reset_significant_change(
hddLog(LOGE, FL("extscan not supported"));
return -ENOTSUPP;
}
- if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX,
+ if (wlan_cfg80211_nla_parse(tb,
+ QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX,
data, data_len,
wlan_hdd_extscan_config_policy)) {
hddLog(LOGE, FL("Invalid ATTR"));
@@ -4756,10 +4767,10 @@ static int __wlan_hdd_cfg80211_extscan_reset_significant_change(
pReqMsg->requestId, pReqMsg->sessionId);
context = &pHddCtx->ext_scan_context;
- spin_lock(&hdd_context_lock);
+ adf_os_spin_lock(&hdd_context_lock);
INIT_COMPLETION(context->response_event);
context->request_id = request_id = pReqMsg->requestId;
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
status = sme_ResetSignificantChange(pHddCtx->hHal, pReqMsg);
if (!HAL_STATUS_SUCCESS(status)) {
@@ -4775,12 +4786,12 @@ static int __wlan_hdd_cfg80211_extscan_reset_significant_change(
hddLog(LOGE, FL("sme_ResetSignificantChange timed out"));
retval = -ETIMEDOUT;
} else {
- spin_lock(&hdd_context_lock);
+ adf_os_spin_lock(&hdd_context_lock);
if (context->request_id == request_id)
retval = context->response_status;
else
retval = -EINVAL;
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
}
EXIT();
return retval;
@@ -4853,10 +4864,11 @@ static int hdd_extscan_epno_fill_network_list(
break;
}
- if (nla_parse(network, QCA_WLAN_VENDOR_ATTR_PNO_MAX,
+ if (wlan_cfg80211_nla_parse(network,
+ QCA_WLAN_VENDOR_ATTR_PNO_MAX,
nla_data(networks), nla_len(networks),
wlan_hdd_pno_config_policy)) {
- hddLog(LOGE, FL("nla_parse failed"));
+ hddLog(LOGE, FL("wlan_cfg80211_nla_parse failed"));
return -EINVAL;
}
@@ -4868,7 +4880,7 @@ static int hdd_extscan_epno_fill_network_list(
ssid_len = nla_len(
network[QCA_WLAN_VENDOR_ATTR_PNO_SET_LIST_PARAM_EPNO_NETWORK_SSID]);
- /* nla_parse will detect overflow but not underflow */
+ /* wlan_cfg80211_nla_parse will detect overflow but not underflow */
if (0 == ssid_len) {
hddLog(LOGE, FL("zero ssid length"));
return -EINVAL;
@@ -4948,7 +4960,7 @@ static int __wlan_hdd_cfg80211_set_epno_list(struct wiphy *wiphy,
return -EINVAL;
}
- if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_PNO_MAX,
+ if (wlan_cfg80211_nla_parse(tb, QCA_WLAN_VENDOR_ATTR_PNO_MAX,
data, data_len,
wlan_hdd_pno_config_policy)) {
hddLog(LOGE, FL("Invalid ATTR"));
@@ -5162,11 +5174,11 @@ static int hdd_extscan_passpoint_fill_network_list(
break;
}
- if (nla_parse(network,
+ if (wlan_cfg80211_nla_parse(network,
QCA_WLAN_VENDOR_ATTR_PNO_MAX,
nla_data(networks), nla_len(networks),
wlan_hdd_pno_config_policy)) {
- hddLog(LOGE, FL("nla_parse failed"));
+ hddLog(LOGE, FL("wlan_cfg80211_nla_parse failed"));
return -EINVAL;
}
@@ -5264,7 +5276,8 @@ static int __wlan_hdd_cfg80211_set_passpoint_list(struct wiphy *wiphy,
return -EINVAL;
}
- if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_PNO_MAX, data, data_len,
+ if (wlan_cfg80211_nla_parse(tb,
+ QCA_WLAN_VENDOR_ATTR_PNO_MAX, data, data_len,
wlan_hdd_pno_config_policy)) {
hddLog(LOGE, FL("Invalid ATTR"));
return -EINVAL;
@@ -5385,7 +5398,8 @@ static int __wlan_hdd_cfg80211_reset_passpoint_list(struct wiphy *wiphy,
return -EINVAL;
}
- if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_PNO_MAX, data, data_len,
+ if (wlan_cfg80211_nla_parse(tb,
+ QCA_WLAN_VENDOR_ATTR_PNO_MAX, data, data_len,
wlan_hdd_extscan_config_policy)) {
hddLog(LOGE, FL("Invalid ATTR"));
return -EINVAL;
@@ -6354,19 +6368,19 @@ static void wlan_hdd_cfg80211_link_layer_stats_callback(void *ctx, int indType,
linkLayerStatsResults->num_radio,
linkLayerStatsResults->results);
- spin_lock(&hdd_context_lock);
+ adf_os_spin_lock(&hdd_context_lock);
context = &pHddCtx->ll_stats_context;
/* validate response received from target */
if ((context->request_id != linkLayerStatsResults->rspId) ||
!(context->request_bitmap & linkLayerStatsResults->paramId)) {
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
hddLog(LOGE,
FL("Error : Request id %d response id %d request bitmap 0x%x response bitmap 0x%x"),
context->request_id, linkLayerStatsResults->rspId,
context->request_bitmap, linkLayerStatsResults->paramId);
return;
}
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
if (linkLayerStatsResults->paramId & WMI_LINK_STATS_RADIO )
{
@@ -6376,10 +6390,10 @@ static void wlan_hdd_cfg80211_link_layer_stats_callback(void *ctx, int indType,
linkLayerStatsResults->results,
linkLayerStatsResults->num_radio);
- spin_lock(&hdd_context_lock);
+ adf_os_spin_lock(&hdd_context_lock);
if (!linkLayerStatsResults->moreResultToFollow)
context->request_bitmap &= ~(WMI_LINK_STATS_RADIO);
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
}
else if (linkLayerStatsResults->paramId & WMI_LINK_STATS_IFACE )
@@ -6389,7 +6403,7 @@ static void wlan_hdd_cfg80211_link_layer_stats_callback(void *ctx, int indType,
linkLayerStatsResults->results,
linkLayerStatsResults->num_peers);
- spin_lock(&hdd_context_lock);
+ adf_os_spin_lock(&hdd_context_lock);
/* Firmware doesn't send peerstats event if no peers are
* connected. HDD should not wait for any peerstats in this case
* and return the status to middlewre after receiving iface
@@ -6398,7 +6412,7 @@ static void wlan_hdd_cfg80211_link_layer_stats_callback(void *ctx, int indType,
if (!linkLayerStatsResults->num_peers)
context->request_bitmap &= ~(WMI_LINK_STATS_ALL_PEER);
context->request_bitmap &= ~(WMI_LINK_STATS_IFACE);
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
}
else if (linkLayerStatsResults->paramId & WMI_LINK_STATS_ALL_PEER )
@@ -6408,10 +6422,10 @@ static void wlan_hdd_cfg80211_link_layer_stats_callback(void *ctx, int indType,
(tpSirWifiPeerStat)
linkLayerStatsResults->results);
- spin_lock(&hdd_context_lock);
+ adf_os_spin_lock(&hdd_context_lock);
if (!linkLayerStatsResults->moreResultToFollow)
context->request_bitmap &= ~(WMI_LINK_STATS_ALL_PEER);
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
}
else
@@ -6420,11 +6434,11 @@ static void wlan_hdd_cfg80211_link_layer_stats_callback(void *ctx, int indType,
FL("INVALID LL_STATS_NOTIFY RESPONSE ***********"));
}
- spin_lock(&hdd_context_lock);
+ adf_os_spin_lock(&hdd_context_lock);
/* complete response event if all requests bitmaps are cleared */
if (0 == context->request_bitmap)
complete(&context->response_event);
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
break;
}
@@ -6607,7 +6621,7 @@ static int __wlan_hdd_cfg80211_ll_stats_ext_set_param(struct wiphy *wiphy,
hddLog(VOS_TRACE_LEVEL_INFO_LOW,
FL("Get user layer settings for LL stat. Length is %d bytes"),
data_len);
- if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_MAX,
+ if (wlan_cfg80211_nla_parse(tb, QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_MAX,
(struct nlattr *)data, data_len,
qca_wlan_vendor_ll_ext_policy)) {
hddLog(VOS_TRACE_LEVEL_ERROR,
@@ -7597,7 +7611,8 @@ static int __wlan_hdd_cfg80211_ll_stats_set(struct wiphy *wiphy,
if (0 != status)
return -EINVAL;
- if (nla_parse(tb_vendor, QCA_WLAN_VENDOR_ATTR_LL_STATS_SET_MAX,
+ if (wlan_cfg80211_nla_parse(tb_vendor,
+ QCA_WLAN_VENDOR_ATTR_LL_STATS_SET_MAX,
(struct nlattr *)data,
data_len, qca_wlan_vendor_ll_set_policy))
{
@@ -7732,7 +7747,8 @@ static int __wlan_hdd_cfg80211_ll_stats_get(struct wiphy *wiphy,
return -EBUSY;
}
- if (nla_parse(tb_vendor, QCA_WLAN_VENDOR_ATTR_LL_STATS_GET_MAX,
+ if (wlan_cfg80211_nla_parse(tb_vendor,
+ QCA_WLAN_VENDOR_ATTR_LL_STATS_GET_MAX,
(struct nlattr *)data,
data_len, qca_wlan_vendor_ll_get_policy))
{
@@ -7763,12 +7779,12 @@ static int __wlan_hdd_cfg80211_ll_stats_get(struct wiphy *wiphy,
LinkLayerStatsGetReq.staId = pAdapter->sessionId;
- spin_lock(&hdd_context_lock);
+ adf_os_spin_lock(&hdd_context_lock);
context = &pHddCtx->ll_stats_context;
context->request_id = LinkLayerStatsGetReq.reqId;
context->request_bitmap = LinkLayerStatsGetReq.paramIdMask;
INIT_COMPLETION(context->response_event);
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
if (eHAL_STATUS_SUCCESS != sme_LLStatsGetReq(pHddCtx->hHal,
&LinkLayerStatsGetReq))
@@ -7857,7 +7873,8 @@ static int __wlan_hdd_cfg80211_ll_stats_clear(struct wiphy *wiphy,
return -EINVAL;
}
- if (nla_parse(tb_vendor, QCA_WLAN_VENDOR_ATTR_LL_STATS_CLR_MAX,
+ if (wlan_cfg80211_nla_parse(tb_vendor,
+ QCA_WLAN_VENDOR_ATTR_LL_STATS_CLR_MAX,
(struct nlattr *)data,
data_len, qca_wlan_vendor_ll_clr_policy))
{
@@ -8204,7 +8221,8 @@ __wlan_hdd_cfg80211_get_wifi_info(struct wiphy *wiphy,
if (0 != status)
return -EINVAL;
- if (nla_parse(tb_vendor, QCA_WLAN_VENDOR_ATTR_WIFI_INFO_GET_MAX, data,
+ if (wlan_cfg80211_nla_parse(tb_vendor,
+ QCA_WLAN_VENDOR_ATTR_WIFI_INFO_GET_MAX, data,
data_len, qca_wlan_vendor_get_wifi_info_policy)) {
hddLog(LOGE, FL("WIFI_INFO_GET NL CMD parsing failed"));
return -EINVAL;
@@ -8642,7 +8660,8 @@ __wlan_hdd_cfg80211_thermal_cmd(struct wiphy *wiphy,
if (wlan_hdd_validate_context(hdd_ctx))
return -EINVAL;
- if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_THERMAL_CMD_VALUE,
+ if (wlan_cfg80211_nla_parse(tb,
+ QCA_WLAN_VENDOR_ATTR_THERMAL_CMD_VALUE,
data, data_len,
qca_wlan_vendor_thermal_cmd_policy)) {
hddLog(LOGE, FL("Invalid ATTR"));
@@ -8788,7 +8807,8 @@ static int __wlan_hdd_cfg80211_exttdls_get_status(struct wiphy *wiphy,
if (pHddCtx->cfg_ini->fTDLSExternalControl == FALSE) {
return -ENOTSUPP;
}
- if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_TDLS_GET_STATUS_MAX,
+ if (wlan_cfg80211_nla_parse(tb,
+ QCA_WLAN_VENDOR_ATTR_TDLS_GET_STATUS_MAX,
data, data_len,
wlan_hdd_tdls_config_get_status_policy)) {
hddLog(VOS_TRACE_LEVEL_ERROR, FL("Invalid attribute"));
@@ -8975,7 +8995,7 @@ static int __wlan_hdd_cfg80211_exttdls_enable(struct wiphy *wiphy,
FL("TDLS External Control is not enabled"));
return -ENOTSUPP;
}
- if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_TDLS_ENABLE_MAX,
+ if (wlan_cfg80211_nla_parse(tb, QCA_WLAN_VENDOR_ATTR_TDLS_ENABLE_MAX,
data, data_len,
wlan_hdd_tdls_config_enable_policy)) {
hddLog(VOS_TRACE_LEVEL_ERROR, FL("Invalid ATTR"));
@@ -9091,7 +9111,7 @@ static int __wlan_hdd_cfg80211_exttdls_disable(struct wiphy *wiphy,
return -ENOTSUPP;
}
- if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_TDLS_DISABLE_MAX,
+ if (wlan_cfg80211_nla_parse(tb, QCA_WLAN_VENDOR_ATTR_TDLS_DISABLE_MAX,
data, data_len,
wlan_hdd_tdls_config_disable_policy)) {
hddLog(VOS_TRACE_LEVEL_ERROR, FL("Invalid ATTR"));
@@ -9277,7 +9297,7 @@ static int __wlan_hdd_cfg80211_disable_dfs_chan_scan(struct wiphy *wiphy,
if ((ret_val = wlan_hdd_validate_context(pHddCtx)))
return ret_val;
- if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_SET_NO_DFS_FLAG_MAX,
+ if (wlan_cfg80211_nla_parse(tb, QCA_WLAN_VENDOR_ATTR_SET_NO_DFS_FLAG_MAX,
data, data_len,
wlan_hdd_set_no_dfs_flag_config_policy)) {
hddLog(LOGE, FL("invalid attr"));
@@ -9854,13 +9874,13 @@ static int __wlan_hdd_cfg80211_do_acs(struct wiphy *wiphy,
}
#ifdef FEATURE_WLAN_DISABLE_CHANNEL_SWITCH
- spin_lock_bh(&hdd_ctx->restrict_offchan_lock);
+ adf_os_spin_lock_bh(&hdd_ctx->restrict_offchan_lock);
if(hdd_ctx->restrict_offchan_flag) {
hddLog(LOGE, FL("Channel switch is disabled, reject ACS"));
- spin_unlock_bh(&hdd_ctx->restrict_offchan_lock);
+ adf_os_spin_unlock_bh(&hdd_ctx->restrict_offchan_lock);
return -EPERM;
}
- spin_unlock_bh(&hdd_ctx->restrict_offchan_lock);
+ adf_os_spin_unlock_bh(&hdd_ctx->restrict_offchan_lock);
#endif
/* ***Note*** Donot set SME config related to ACS operation here because
* ACS operation is not synchronouse and ACS for Second AP may come when
@@ -9905,8 +9925,9 @@ static int __wlan_hdd_cfg80211_do_acs(struct wiphy *wiphy,
sap_config = &adapter->sessionCtx.ap.sapConfig;
vos_mem_zero(&sap_config->acs_cfg, sizeof(struct sap_acs_cfg));
- status = nla_parse(tb, QCA_WLAN_VENDOR_ATTR_ACS_MAX, data, data_len,
- wlan_hdd_cfg80211_do_acs_policy);
+ status = wlan_cfg80211_nla_parse(tb,
+ QCA_WLAN_VENDOR_ATTR_ACS_MAX, data, data_len,
+ wlan_hdd_cfg80211_do_acs_policy);
if (status) {
hddLog(VOS_TRACE_LEVEL_ERROR, FL("Invalid ATTR"));
goto out;
@@ -10514,9 +10535,9 @@ static int wlan_hdd_handle_restrict_offchan_config(hdd_adapter_t *adapter,
int chan;
adapter->restrict_offchannel_cnt++;
if (adapter->restrict_offchannel_cnt == 1) {
- spin_lock_bh(&hdd_ctx->restrict_offchan_lock);
+ adf_os_spin_lock_bh(&hdd_ctx->restrict_offchan_lock);
hdd_ctx->restrict_offchan_flag = true;
- spin_unlock_bh(&hdd_ctx->restrict_offchan_lock);
+ adf_os_spin_unlock_bh(&hdd_ctx->restrict_offchan_lock);
chan = hdd_get_operating_channel(hdd_ctx, dev_mode);
hddLog(LOGE, FL("chan is %d"), chan);
if (!chan ||
@@ -10529,9 +10550,9 @@ static int wlan_hdd_handle_restrict_offchan_config(hdd_adapter_t *adapter,
(adapter->restrict_offchannel_cnt > 0)) {
adapter->restrict_offchannel_cnt--;
if (adapter->restrict_offchannel_cnt == 0) {
- spin_lock_bh(&hdd_ctx->restrict_offchan_lock);
+ adf_os_spin_lock_bh(&hdd_ctx->restrict_offchan_lock);
hdd_ctx->restrict_offchan_flag = false;
- spin_unlock_bh(&hdd_ctx->restrict_offchan_lock);
+ adf_os_spin_unlock_bh(&hdd_ctx->restrict_offchan_lock);
if (wlan_hdd_send_avoid_freq_for_dnbs(hdd_ctx, 0)) {
hddLog(LOGE, FL("unable to clear avoid_freq"));
ret_val = -EINVAL;
@@ -10598,7 +10619,7 @@ static int __wlan_hdd_cfg80211_wifi_configuration_set(struct wiphy *wiphy,
if (ret_val)
return ret_val;
- if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_CONFIG_MAX,
+ if (wlan_cfg80211_nla_parse(tb, QCA_WLAN_VENDOR_ATTR_CONFIG_MAX,
data, data_len,
wlan_hdd_wifi_config_policy)) {
hddLog(LOGE, FL("invalid attr"));
@@ -11210,7 +11231,8 @@ __wlan_hdd_cfg80211_wifi_configuration_get(struct wiphy *wiphy,
if (0 != status)
return -EINVAL;
- if (nla_parse(tb_vendor, QCA_WLAN_VENDOR_ATTR_CONFIG_MAX, data,
+ if (wlan_cfg80211_nla_parse(tb_vendor,
+ QCA_WLAN_VENDOR_ATTR_CONFIG_MAX, data,
data_len, wlan_hdd_wifi_config_policy)) {
hddLog(LOGE, FL("WIFI_CFG_GET NL CMD parsing failed"));
return -EINVAL;
@@ -11441,7 +11463,8 @@ static int __wlan_hdd_cfg80211_wifi_logger_start(struct wiphy *wiphy,
if (0 != status)
return -EINVAL;
- if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_WIFI_LOGGER_START_MAX,
+ if (wlan_cfg80211_nla_parse(tb,
+ QCA_WLAN_VENDOR_ATTR_WIFI_LOGGER_START_MAX,
data, data_len,
qca_wlan_vendor_wifi_logger_start_policy)) {
hddLog(LOGE, FL("Invalid attribute"));
@@ -11542,7 +11565,8 @@ static int __wlan_hdd_cfg80211_get_link_properties(struct wiphy *wiphy,
if (0 != wlan_hdd_validate_context(hdd_ctx))
return -EINVAL;
- if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_MAX, data, data_len,
+ if (wlan_cfg80211_nla_parse(tb,
+ QCA_WLAN_VENDOR_ATTR_MAX, data, data_len,
qca_wlan_vendor_attr_policy)) {
hddLog(VOS_TRACE_LEVEL_ERROR, FL("Invalid attribute"));
return -EINVAL;
@@ -11767,7 +11791,8 @@ static int __wlan_hdd_cfg80211_wifi_logger_get_ring_data(struct wiphy *wiphy,
if (0 != status)
return -EINVAL;
- if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_WIFI_LOGGER_GET_RING_DATA_MAX,
+ if (wlan_cfg80211_nla_parse(tb,
+ QCA_WLAN_VENDOR_ATTR_WIFI_LOGGER_GET_RING_DATA_MAX,
data, data_len,
qca_wlan_vendor_wifi_logger_get_ring_data_policy)) {
hddLog(LOGE, FL("Invalid attribute"));
@@ -12174,7 +12199,7 @@ __wlan_hdd_cfg80211_offloaded_packets(struct wiphy *wiphy,
return -ENOTSUPP;
}
- if (nla_parse(tb, PARAM_MAX, data, data_len, policy)) {
+ if (wlan_cfg80211_nla_parse(tb, PARAM_MAX, data, data_len, policy)) {
hddLog(LOGE, FL("Invalid ATTR"));
return -EINVAL;
}
@@ -12284,7 +12309,7 @@ __wlan_hdd_cfg80211_monitor_rssi(struct wiphy *wiphy,
return -ENOTSUPP;
}
- if (nla_parse(tb, PARAM_MAX, data, data_len, policy)) {
+ if (wlan_cfg80211_nla_parse(tb, PARAM_MAX, data, data_len, policy)) {
hddLog(LOGE, FL("Invalid ATTR"));
return -EINVAL;
}
@@ -12541,10 +12566,10 @@ __wlan_hdd_cfg80211_set_ns_offload(struct wiphy *wiphy,
return -EINVAL;
}
- if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_ND_OFFLOAD_MAX,
+ if (wlan_cfg80211_nla_parse(tb, QCA_WLAN_VENDOR_ATTR_ND_OFFLOAD_MAX,
(struct nlattr *)data,
data_len, ns_offload_set_policy)) {
- hddLog(LOGE, FL("nla_parse failed"));
+ hddLog(LOGE, FL("wlan_cfg80211_nla_parse failed"));
return -EINVAL;
}
@@ -12619,7 +12644,8 @@ __wlan_hdd_cfg80211_setband(struct wiphy *wiphy,
if (ret)
return ret;
- if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_MAX, data, data_len, policy)) {
+ if (wlan_cfg80211_nla_parse(tb,
+ QCA_WLAN_VENDOR_ATTR_MAX, data, data_len, policy)) {
hddLog(LOGE, FL("Invalid ATTR"));
return -EINVAL;
}
@@ -12712,12 +12738,12 @@ void hdd_get_bpf_offload_cb(void *hdd_context,
hddLog(LOGE, FL("Data is null"));
return;
}
- spin_lock(&hdd_context_lock);
+ adf_os_spin_lock(&hdd_context_lock);
context = &bpf_context;
/* The caller presumably timed out so there is nothing we can do */
if (context->magic != BPF_CONTEXT_MAGIC) {
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
return;
}
@@ -12728,7 +12754,7 @@ void hdd_get_bpf_offload_cb(void *hdd_context,
context->capability_response = *data;
complete(&context->completion);
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
return;
}
@@ -12794,11 +12820,11 @@ static int hdd_get_bpf_offload(hdd_context_t *hdd_ctx)
ENTER();
- spin_lock(&hdd_context_lock);
+ adf_os_spin_lock(&hdd_context_lock);
context = &bpf_context;
context->magic = BPF_CONTEXT_MAGIC;
INIT_COMPLETION(context->completion);
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
hstatus = sme_get_bpf_offload_capabilities(hdd_ctx->hHal);
if (!HAL_STATUS_SUCCESS(hstatus)) {
@@ -12810,9 +12836,9 @@ static int hdd_get_bpf_offload(hdd_context_t *hdd_ctx)
msecs_to_jiffies(WLAN_WAIT_TIME_BPF));
if (!rc) {
hddLog(LOGE, FL("Target response timed out"));
- spin_lock(&hdd_context_lock);
+ adf_os_spin_lock(&hdd_context_lock);
context->magic = 0;
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
return -ETIMEDOUT;
}
@@ -12971,7 +12997,7 @@ __wlan_hdd_cfg80211_bpf_offload(struct wiphy *wiphy,
return -ENOTSUPP;
}
- if (nla_parse(tb, BPF_MAX, data, data_len,
+ if (wlan_cfg80211_nla_parse(tb, BPF_MAX, data, data_len,
wlan_hdd_bpf_offload_policy)) {
hddLog(LOGE, FL("Invalid ATTR"));
return -EINVAL;
@@ -13420,7 +13446,7 @@ __wlan_hdd_cfg80211_acs_dfs_mode(struct wiphy *wiphy,
if (0 != ret)
return -EINVAL;
- if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_ACS_DFS_MAX,
+ if (wlan_cfg80211_nla_parse(tb, QCA_WLAN_VENDOR_ATTR_ACS_DFS_MAX,
data, data_len,
wlan_hdd_set_acs_dfs_config_policy)) {
hddLog(LOGE, FL("invalid attr"));
@@ -13593,7 +13619,8 @@ __wlan_hdd_cfg80211_sta_roam_policy(struct wiphy *wiphy,
ret = wlan_hdd_validate_context(hdd_ctx);
if (0 != ret)
return -EINVAL;
- if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_STA_CONNECT_ROAM_POLICY_MAX,
+ if (wlan_cfg80211_nla_parse(tb,
+ QCA_WLAN_VENDOR_ATTR_STA_CONNECT_ROAM_POLICY_MAX,
data, data_len,
wlan_hdd_set_sta_roam_config_policy)) {
hddLog(LOGE, FL("invalid attr"));
@@ -13864,7 +13891,7 @@ __wlan_hdd_cfg80211_sap_configuration_set(struct wiphy *wiphy,
return -EINVAL;
}
- if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_SAP_CONFIG_MAX,
+ if (wlan_cfg80211_nla_parse(tb, QCA_WLAN_VENDOR_ATTR_SAP_CONFIG_MAX,
data, data_len,
wlan_hdd_sap_config_policy)) {
hddLog(LOGE, FL("invalid attr"));
@@ -14792,7 +14819,7 @@ __hdd_cfg80211_get_station_cmd(struct wiphy *wiphy,
if (0 != status)
goto out;
- status = nla_parse(tb, STATION_MAX, data, data_len,
+ status = wlan_cfg80211_nla_parse(tb, STATION_MAX, data, data_len,
hdd_get_station_policy);
if (status) {
hddLog(LOGE, FL("Invalid ATTR"));
@@ -14938,7 +14965,8 @@ static int __wlan_hdd_cfg80211_fast_roaming(struct wiphy *wiphy,
return -EINVAL;
}
- ret = nla_parse(tb, QCA_WLAN_VENDOR_ATTR_MAX, data, data_len,
+ ret = wlan_cfg80211_nla_parse(tb,
+ QCA_WLAN_VENDOR_ATTR_MAX, data, data_len,
qca_wlan_vendor_attr);
if (ret) {
hddLog(LOGE, FL("Invalid ATTR"));
@@ -15048,7 +15076,7 @@ static int __wlan_hdd_cfg80211_txpower_scale(struct wiphy *wiphy,
adapter = WLAN_HDD_GET_PRIV_PTR(dev);
- if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_TXPOWER_SCALE_MAX,
+ if (wlan_cfg80211_nla_parse(tb, QCA_WLAN_VENDOR_ATTR_TXPOWER_SCALE_MAX,
data, data_len, txpower_scale_policy)) {
hddLog(LOGE, "Invalid ATTR");
return -EINVAL;
@@ -15134,7 +15162,8 @@ static int __wlan_hdd_cfg80211_txpower_scale_decr_db(struct wiphy *wiphy,
adapter = WLAN_HDD_GET_PRIV_PTR(dev);
- if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_TXPOWER_SCALE_DECR_DB_MAX,
+ if (wlan_cfg80211_nla_parse(tb,
+ QCA_WLAN_VENDOR_ATTR_TXPOWER_SCALE_DECR_DB_MAX,
data, data_len, txpower_scale_decr_db_policy)) {
hddLog(LOGE, "Invalid ATTR");
return -EINVAL;
@@ -15258,7 +15287,8 @@ static int __wlan_hdd_cfg80211_get_chain_rssi(struct wiphy *wiphy,
return retval;
/* nla validation doesn't do exact lengths, do the validation later */
- retval = nla_parse(tb, QCA_WLAN_VENDOR_ATTR_MAX, data, data_len, NULL);
+ retval = wlan_cfg80211_nla_parse(tb,
+ QCA_WLAN_VENDOR_ATTR_MAX, data, data_len, NULL);
if (retval) {
hddLog(LOGE, FL("Invalid ATTR"));
return retval;
@@ -15279,11 +15309,11 @@ static int __wlan_hdd_cfg80211_get_chain_rssi(struct wiphy *wiphy,
memcpy(&req_msg.peer_macaddr,
nla_data(tb[QCA_WLAN_VENDOR_ATTR_MAC_ADDR]), mac_len);
- spin_lock(&hdd_context_lock);
+ adf_os_spin_lock(&hdd_context_lock);
context = &hdd_ctx->chain_rssi_context;
INIT_COMPLETION(context->response_event);
context->ignore_result = false;
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
status = sme_get_chain_rssi(hdd_ctx->hHal, &req_msg);
if (!HAL_STATUS_SUCCESS(status)) {
@@ -15296,9 +15326,9 @@ static int __wlan_hdd_cfg80211_get_chain_rssi(struct wiphy *wiphy,
msecs_to_jiffies(WLAN_WAIT_TIME_CHAIN_RSSI));
if (!rc) {
hddLog(LOGE, FL("Target response timed out"));
- spin_lock(&hdd_context_lock);
+ adf_os_spin_lock(&hdd_context_lock);
context->ignore_result = true;
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
return -ETIMEDOUT;
}
@@ -15376,7 +15406,8 @@ __wlan_hdd_cfg80211_peer_flush_pending(struct wiphy *wiphy,
hddLog(LOGE, FL("Command not allowed in FTM mode"));
return -EINVAL;
}
- if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_FLUSH_PENDING_MAX, data,
+ if (wlan_cfg80211_nla_parse(tb,
+ QCA_WLAN_VENDOR_ATTR_FLUSH_PENDING_MAX, data,
data_len, qca_wlan_vendor_peer_flush_pending_policy)) {
hddLog(LOGE, FL("Invalid attribute"));
return -EINVAL;
@@ -16111,6 +16142,23 @@ static void wlan_hdd_cfg80211_set_wiphy_fils_feature(struct wiphy *wiphy)
}
#endif
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 12, 0)
+static inline void
+hdd_wiphy_set_max_sched_scans(struct wiphy *wiphy, uint8_t max_scans)
+{
+ if (max_scans == 0)
+ wiphy->flags &= ~WIPHY_FLAG_SUPPORTS_SCHED_SCAN;
+ else
+ wiphy->flags |= WIPHY_FLAG_SUPPORTS_SCHED_SCAN;
+}
+#else
+static inline void
+hdd_wiphy_set_max_sched_scans(struct wiphy *wiphy, uint8_t max_scans)
+{
+ wiphy->max_sched_scan_reqs = max_scans;
+}
+#endif /* KERNEL_VERSION(4, 12, 0) */
+
/*
* FUNCTION: wlan_hdd_cfg80211_init
* This function is called by hdd_wlan_startup()
@@ -16189,8 +16237,7 @@ int wlan_hdd_cfg80211_init(struct device *dev,
#ifdef FEATURE_WLAN_SCAN_PNO
if (pCfg->configPNOScanSupport)
{
- wiphy->flags |= WIPHY_FLAG_SUPPORTS_SCHED_SCAN;
- wiphy->max_sched_scan_ssids = SIR_PNO_MAX_SUPP_NETWORKS;
+ hdd_wiphy_set_max_sched_scans(wiphy, 1);
wiphy->max_match_sets = SIR_PNO_MAX_SUPP_NETWORKS;
wiphy->max_sched_scan_ie_len = SIR_MAC_MAX_IE_LENGTH;
}
@@ -16515,7 +16562,7 @@ void wlan_hdd_cfg80211_update_wiphy_caps(struct wiphy *wiphy)
* control comes here. Here just we need to clear it if firmware doesn't
* have PNO support. */
if (!pCfg->PnoOffload) {
- wiphy->flags &= ~WIPHY_FLAG_SUPPORTS_SCHED_SCAN;
+ hdd_wiphy_set_max_sched_scans(wiphy, 0);
wiphy->max_sched_scan_ssids = 0;
wiphy->max_match_sets = 0;
wiphy->max_sched_scan_ie_len = 0;
@@ -20006,6 +20053,7 @@ done:
return 0;
}
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 12, 0)
/*
* FUNCTION: wlan_hdd_cfg80211_change_iface
* wrapper function to protect the actual implementation from SSR.
@@ -20024,6 +20072,22 @@ static int wlan_hdd_cfg80211_change_iface(struct wiphy *wiphy,
return ret;
}
+#else
+static int wlan_hdd_cfg80211_change_iface(struct wiphy *wiphy,
+ struct net_device *ndev,
+ enum nl80211_iftype type,
+ struct vif_params *params)
+{
+ int ret;
+
+ vos_ssr_protect(__func__);
+ ret = __wlan_hdd_cfg80211_change_iface(wiphy, ndev, type,
+ &params->flags, params);
+ vos_ssr_unprotect(__func__);
+
+ return ret;
+}
+#endif
#ifdef FEATURE_WLAN_TDLS
static int wlan_hdd_tdls_add_station(struct wiphy *wiphy,
@@ -22264,11 +22328,11 @@ static bool wlan_hdd_sap_skip_scan_check(hdd_context_t *hdd_ctx,
hdd_ctx->skip_acs_scan_status);
if (hdd_ctx->skip_acs_scan_status != eSAP_SKIP_ACS_SCAN)
return false;
- spin_lock(&hdd_ctx->acs_skip_lock);
+ adf_os_spin_lock(&hdd_ctx->acs_skip_lock);
if (hdd_ctx->last_acs_channel_list == NULL ||
hdd_ctx->num_of_channels == 0 ||
request->n_channels == 0) {
- spin_unlock(&hdd_ctx->acs_skip_lock);
+ adf_os_spin_unlock(&hdd_ctx->acs_skip_lock);
return false;
}
skip = true;
@@ -22288,7 +22352,7 @@ static bool wlan_hdd_sap_skip_scan_check(hdd_context_t *hdd_ctx,
break;
}
}
- spin_unlock(&hdd_ctx->acs_skip_lock);
+ adf_os_spin_unlock(&hdd_ctx->acs_skip_lock);
return skip;
}
#else
@@ -24779,10 +24843,6 @@ int wlan_hdd_disconnect( hdd_adapter_t *pAdapter, u16 reason )
ENTER();
- status = wlan_hdd_validate_context(pHddCtx);
- if (0 != status)
- return status;
-
prev_conn_state = pHddStaCtx->conn_info.connState;
/*stop tx queues*/
@@ -28361,6 +28421,20 @@ int wlan_hdd_scan_abort(hdd_adapter_t *pAdapter)
return 0;
}
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 12, 0)
+static inline void
+wlan_cfg80211_sched_scan_results(struct wiphy *wiphy, uint64_t reqid)
+{
+ cfg80211_sched_scan_results(wiphy);
+}
+#else
+static inline void
+wlan_cfg80211_sched_scan_results(struct wiphy *wiphy, uint64_t reqid)
+{
+ cfg80211_sched_scan_results(wiphy, reqid);
+}
+#endif
+
#ifdef FEATURE_WLAN_SCAN_PNO
void hdd_cfg80211_sched_scan_done_callback(void *callbackContext,
tSirPrefNetworkFoundInd *pPrefNetworkFoundInd)
@@ -28386,16 +28460,16 @@ void hdd_cfg80211_sched_scan_done_callback(void *callbackContext,
return ;
}
- spin_lock(&pHddCtx->schedScan_lock);
+ adf_os_spin_lock(&pHddCtx->schedScan_lock);
if (TRUE == pHddCtx->isWiphySuspended)
{
pHddCtx->isSchedScanUpdatePending = TRUE;
- spin_unlock(&pHddCtx->schedScan_lock);
+ adf_os_spin_unlock(&pHddCtx->schedScan_lock);
hddLog(VOS_TRACE_LEVEL_INFO,
"%s: Update cfg80211 scan database after it resume", __func__);
return ;
}
- spin_unlock(&pHddCtx->schedScan_lock);
+ adf_os_spin_unlock(&pHddCtx->schedScan_lock);
ret = wlan_hdd_cfg80211_update_bss(pHddCtx->wiphy, pAdapter);
@@ -28411,7 +28485,7 @@ void hdd_cfg80211_sched_scan_done_callback(void *callbackContext,
*/
hdd_prevent_suspend_timeout(1000, WIFI_POWER_EVENT_WAKELOCK_SCAN);
}
- cfg80211_sched_scan_results(pHddCtx->wiphy);
+ wlan_cfg80211_sched_scan_results(pHddCtx->wiphy, 0);
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,
"%s: cfg80211 scan result database updated", __func__);
}
@@ -28903,6 +28977,7 @@ static int __wlan_hdd_cfg80211_sched_scan_stop(struct wiphy *wiphy,
return ret;
}
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 12, 0)
/*
* FUNCTION: wlan_hdd_cfg80211_sched_scan_stop
* NL interface to disable PNO
@@ -28918,6 +28993,20 @@ static int wlan_hdd_cfg80211_sched_scan_stop(struct wiphy *wiphy,
return ret;
}
+#else
+int wlan_hdd_cfg80211_sched_scan_stop(struct wiphy *wiphy,
+ struct net_device *dev,
+ uint64_t reqid)
+{
+ int ret;
+
+ vos_ssr_protect(__func__);
+ ret = __wlan_hdd_cfg80211_sched_scan_stop(wiphy, dev);
+ vos_ssr_unprotect(__func__);
+
+ return ret;
+}
+#endif
#endif /*FEATURE_WLAN_SCAN_PNO*/
#ifdef FEATURE_WLAN_TDLS
@@ -30313,7 +30402,8 @@ static int __wlan_hdd_cfg80211_testmode(struct wiphy *wiphy,
ENTER();
- err = nla_parse(tb, WLAN_HDD_TM_ATTR_MAX, data, len, wlan_hdd_tm_policy);
+ err = wlan_cfg80211_nla_parse(tb,
+ WLAN_HDD_TM_ATTR_MAX, data, len, wlan_hdd_tm_policy);
if (err) {
hddLog(LOGE, FL("Testmode INV ATTR"));
return err;
@@ -30949,16 +31039,16 @@ int __wlan_hdd_cfg80211_resume_wlan(struct wiphy *wiphy, bool thermal)
MTRACE(vos_trace(VOS_MODULE_ID_HDD, TRACE_CODE_HDD_CFG80211_RESUME_WLAN,
NO_SESSION, pHddCtx->isWiphySuspended));
- spin_lock(&pHddCtx->schedScan_lock);
+ adf_os_spin_lock(&pHddCtx->schedScan_lock);
pHddCtx->isWiphySuspended = FALSE;
if (TRUE != pHddCtx->isSchedScanUpdatePending) {
- spin_unlock(&pHddCtx->schedScan_lock);
+ adf_os_spin_unlock(&pHddCtx->schedScan_lock);
hddLog(LOG1, FL("Return resume is not due to PNO indication"));
return 0;
}
/* Reset flag to avoid updating cfg80211 data old results again */
pHddCtx->isSchedScanUpdatePending = FALSE;
- spin_unlock(&pHddCtx->schedScan_lock);
+ adf_os_spin_unlock(&pHddCtx->schedScan_lock);
status = hdd_get_front_adapter (pHddCtx, &pAdapterNode);
@@ -30976,7 +31066,7 @@ int __wlan_hdd_cfg80211_resume_wlan(struct wiphy *wiphy, bool thermal)
*/
hdd_prevent_suspend_timeout(1000,
WIFI_POWER_EVENT_WAKELOCK_RESUME_WLAN);
- cfg80211_sched_scan_results(pHddCtx->wiphy);
+ wlan_cfg80211_sched_scan_results(pHddCtx->wiphy, 0);
}
hddLog(LOG1, FL("cfg80211 scan result database updated"));
@@ -31427,12 +31517,12 @@ wlan_hdd_cfg80211_extscan_get_capabilities_rsp(void *ctx,
hddLog(LOGE, FL("data is null"));
return;
}
- spin_lock(&hdd_context_lock);
+ adf_os_spin_lock(&hdd_context_lock);
context = &hdd_ctx->ext_scan_context;
/* validate response received from target*/
if (context->request_id != data->requestId) {
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
hddLog(LOGE,
FL("Target response id did not match: request_id %d resposne_id %d"),
context->request_id, data->requestId);
@@ -31442,7 +31532,7 @@ wlan_hdd_cfg80211_extscan_get_capabilities_rsp(void *ctx,
complete(&context->response_event);
}
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
return;
}
@@ -31571,10 +31661,10 @@ wlan_hdd_cfg80211_extscan_cached_results_ind(void *ctx,
hddLog(VOS_TRACE_LEVEL_ERROR, FL("data is null"));
return;
}
- spin_lock(&hdd_context_lock);
+ adf_os_spin_lock(&hdd_context_lock);
context = &pHddCtx->ext_scan_context;
ignore_cached_results = context->ignore_cached_results;
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
if (ignore_cached_results) {
hddLog(LOGE,
@@ -31755,10 +31845,10 @@ wlan_hdd_cfg80211_extscan_cached_results_ind(void *ctx,
cfg80211_vendor_cmd_reply(skb);
if (!data->more_data) {
- spin_lock(&hdd_context_lock);
+ adf_os_spin_lock(&hdd_context_lock);
context->response_status = 0;
complete(&context->response_event);
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
}
return;
@@ -31766,9 +31856,9 @@ fail:
if (skb)
kfree_skb(skb);
- spin_lock(&hdd_context_lock);
+ adf_os_spin_lock(&hdd_context_lock);
context->response_status = -EINVAL;
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
return;
}
@@ -31952,12 +32042,12 @@ wlan_hdd_cfg80211_extscan_generic_rsp
response->request_id, response->status);
context = &hdd_ctx->ext_scan_context;
- spin_lock(&hdd_context_lock);
+ adf_os_spin_lock(&hdd_context_lock);
if (context->request_id == response->request_id) {
context->response_status = response->status ? -EINVAL : 0;
complete(&context->response_event);
}
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
return;
}
@@ -32215,16 +32305,16 @@ wlan_hdd_cfg80211_extscan_full_scan_result_event(void *ctx,
goto nla_put_failure;
}
- spin_lock(&hdd_context_lock);
+ adf_os_spin_lock(&hdd_context_lock);
context = &pHddCtx->ext_scan_context;
if (nla_put_u32(skb,
QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_BUCKETS_SCANNED,
context->buckets_scanned)) {
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
hddLog(LOGE, FL("Failed to include buckets_scanned"));
goto nla_put_failure;
}
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
cfg80211_vendor_event(skb, flags);
return;
@@ -32444,19 +32534,19 @@ wlan_hdd_cfg80211_extscan_scan_progress_event(void *ctx,
data->requestId, data->scanEventType, data->status,
data->buckets_scanned);
- spin_lock(&hdd_context_lock);
+ adf_os_spin_lock(&hdd_context_lock);
context = &pHddCtx->ext_scan_context;
if (data->scanEventType == WIFI_EXTSCAN_CYCLE_COMPLETED_EVENT) {
context->buckets_scanned = 0;
data->scanEventType = WIFI_EXTSCAN_RESULTS_AVAILABLE;
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
} else if (data->scanEventType == WIFI_EXTSCAN_CYCLE_STARTED_EVENT) {
context->buckets_scanned = data->buckets_scanned;
/* No need to report to user space */
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
return;
} else {
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
}
skb = cfg80211_vendor_event_alloc(pHddCtx->wiphy,
@@ -32721,20 +32811,20 @@ void wlan_hdd_cfg80211_chainrssi_callback(void *ctx, void *pmsg)
if (wlan_hdd_validate_context(hdd_ctx))
return;
- spin_lock(&hdd_context_lock);
+ adf_os_spin_lock(&hdd_context_lock);
context = &hdd_ctx->chain_rssi_context;
ignore_result = context->ignore_result;
if (ignore_result) {
hddLog(LOGE, FL("Ignore the result received after timeout"));
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
return;
}
memcpy(&context->result, data, sizeof(*data));
complete(&context->response_event);
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
return;
}
diff --git a/CORE/HDD/src/wlan_hdd_debugfs_ocb.c b/CORE/HDD/src/wlan_hdd_debugfs_ocb.c
index 9ea98101e1a5..e01b82425ebf 100644
--- a/CORE/HDD/src/wlan_hdd_debugfs_ocb.c
+++ b/CORE/HDD/src/wlan_hdd_debugfs_ocb.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2017-2018 The Linux Foundation. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
@@ -253,7 +253,7 @@ static int __wlan_hdd_read_dsrc_chan_stats_debugfs(struct file *file,
ptr = chan_stats_buf + sizeof(uint32_t);
chan_stats = ctx->chan_stats;
- spin_lock(&ctx->chan_stats_lock);
+ adf_os_spin_lock(&ctx->chan_stats_lock);
/* Now only two channel stats supported */
for (i = 0; i < DSRC_MAX_CHAN_STATS_CNT; i++, chan_stats++) {
if (chan_stats->chan_freq == 0)
@@ -266,7 +266,7 @@ static int __wlan_hdd_read_dsrc_chan_stats_debugfs(struct file *file,
ptr += sizeof(*chan_stats);
chan_cnt++;
}
- spin_unlock(&ctx->chan_stats_lock);
+ adf_os_spin_unlock(&ctx->chan_stats_lock);
vos_mem_copy(chan_stats_buf, &chan_cnt, sizeof(uint32_t));
ret_cnt = sizeof(uint32_t) + chan_cnt * sizeof(*chan_stats);
diff --git a/CORE/HDD/src/wlan_hdd_early_suspend.c b/CORE/HDD/src/wlan_hdd_early_suspend.c
index b02a914774e7..52fc13cdc74f 100644
--- a/CORE/HDD/src/wlan_hdd_early_suspend.c
+++ b/CORE/HDD/src/wlan_hdd_early_suspend.c
@@ -1713,10 +1713,10 @@ static void hdd_PowerStateChangedCB
{
pHddCtx->hdd_ignore_dtim_enabled = TRUE;
}
- spin_lock(&pHddCtx->filter_lock);
+ adf_os_spin_lock(&pHddCtx->filter_lock);
if ((newState == BMPS) && pHddCtx->hdd_wlan_suspended)
{
- spin_unlock(&pHddCtx->filter_lock);
+ adf_os_spin_unlock(&pHddCtx->filter_lock);
if (VOS_FALSE == pHddCtx->sus_res_mcastbcast_filter_valid)
{
pHddCtx->sus_res_mcastbcast_filter =
@@ -1744,20 +1744,20 @@ static void hdd_PowerStateChangedCB
* resume request will be lost. So reconfigure the filters on detecting
* a change in the power state of the WCN chip.
*/
- spin_unlock(&pHddCtx->filter_lock);
+ adf_os_spin_unlock(&pHddCtx->filter_lock);
if (IMPS != newState)
{
- spin_lock(&pHddCtx->filter_lock);
+ adf_os_spin_lock(&pHddCtx->filter_lock);
if (FALSE == pHddCtx->hdd_wlan_suspended)
{
- spin_unlock(&pHddCtx->filter_lock);
+ adf_os_spin_unlock(&pHddCtx->filter_lock);
hddLog(VOS_TRACE_LEVEL_INFO,
"Not in IMPS/BMPS and suspended state");
hdd_conf_mcastbcast_filter(pHddCtx, FALSE);
}
else
{
- spin_unlock(&pHddCtx->filter_lock);
+ adf_os_spin_unlock(&pHddCtx->filter_lock);
}
}
}
@@ -1783,7 +1783,7 @@ void hdd_register_mcast_bcast_filter(hdd_context_t *pHddCtx)
return;
}
- spin_lock_init(&pHddCtx->filter_lock);
+ adf_os_spinlock_init(&pHddCtx->filter_lock);
if (WLAN_MAP_SUSPEND_TO_MCAST_BCAST_FILTER ==
pHddCtx->cfg_ini->nEnableSuspend)
{
@@ -2540,6 +2540,7 @@ err_vosclose:
#ifdef MEMORY_DEBUG
adf_net_buf_debug_exit();
+ adf_nbuf_map_check_for_leaks();
vos_mem_exit();
#endif
diff --git a/CORE/HDD/src/wlan_hdd_ftm.c b/CORE/HDD/src/wlan_hdd_ftm.c
index acf8c77c0dd6..2ddb807e6dec 100644
--- a/CORE/HDD/src/wlan_hdd_ftm.c
+++ b/CORE/HDD/src/wlan_hdd_ftm.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2017 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2018 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -71,6 +71,7 @@
#include "wlan_nv.h"
#include "wlan_qct_wda.h"
#include "cfgApi.h"
+#include <adf_os_lock.h>
#if defined(QCA_WIFI_FTM)
#include "bmi.h"
@@ -834,7 +835,7 @@ int wlan_hdd_ftm_close(hdd_context_t *pHddCtx)
}
#if defined(QCA_WIFI_FTM) && defined(LINUX_QCMBR)
- spin_lock_bh(&qcmbr_queue_lock);
+ adf_os_raw_spin_lock_bh(&qcmbr_queue_lock);
if (!list_empty(&qcmbr_queue_head)) {
qcmbr_queue_t *msg_buf, *tmp_buf;
list_for_each_entry_safe(msg_buf, tmp_buf, &qcmbr_queue_head, list) {
@@ -842,7 +843,7 @@ int wlan_hdd_ftm_close(hdd_context_t *pHddCtx)
kfree(msg_buf);
}
}
- spin_unlock_bh(&qcmbr_queue_lock);
+ adf_os_raw_spin_unlock_bh(&qcmbr_queue_lock);
#endif
return 0;
@@ -972,7 +973,7 @@ static int wlan_hdd_qcmbr_command(hdd_adapter_t *pAdapter, qcmbr_data_t *pqcmbr_
case ATH_XIOCTL_UNIFIED_UTF_RSP: {
pqcmbr_data->copy_to_user = 1;
- spin_lock_bh(&qcmbr_queue_lock);
+ adf_os_raw_spin_lock_bh(&qcmbr_queue_lock);
if (!list_empty(&qcmbr_queue_head)) {
qcmbr_buf = list_first_entry(&qcmbr_queue_head,
qcmbr_queue_t, list);
@@ -981,7 +982,7 @@ static int wlan_hdd_qcmbr_command(hdd_adapter_t *pAdapter, qcmbr_data_t *pqcmbr_
} else {
ret = -1;
}
- spin_unlock_bh(&qcmbr_queue_lock);
+ adf_os_raw_spin_unlock_bh(&qcmbr_queue_lock);
if (!ret) {
memcpy(pqcmbr_data->buf, qcmbr_buf->utf_buf,
@@ -1085,9 +1086,9 @@ static void WLANQCMBR_McProcessMsg(v_VOID_t *message)
qcmbr_buf = kzalloc(sizeof(qcmbr_queue_t), GFP_KERNEL);
if (qcmbr_buf != NULL) {
memcpy(qcmbr_buf->utf_buf, message, data_len);
- spin_lock_bh(&qcmbr_queue_lock);
+ adf_os_raw_spin_lock_bh(&qcmbr_queue_lock);
list_add_tail(&(qcmbr_buf->list), &qcmbr_queue_head);
- spin_unlock_bh(&qcmbr_queue_lock);
+ adf_os_raw_spin_unlock_bh(&qcmbr_queue_lock);
}
}
#endif /*LINUX_QCMBR*/
diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c
index 46d06c180468..0cbce7d64a48 100644
--- a/CORE/HDD/src/wlan_hdd_hostapd.c
+++ b/CORE/HDD/src/wlan_hdd_hostapd.c
@@ -60,6 +60,7 @@
#include <vos_api.h>
#include <vos_sched.h>
#include <linux/etherdevice.h>
+#include <linux/ethtool.h>
#include <wlan_hdd_includes.h>
#include <qc_sap_ioctl.h>
#include <wlan_hdd_hostapd.h>
@@ -397,7 +398,7 @@ bool hdd_hostapd_sub20_channelwidth_can_switch(
return false;
}
- spin_lock_bh(&adapter->staInfo_lock);
+ adf_os_spin_lock_bh(&adapter->staInfo_lock);
for (i = 0; i < WLAN_MAX_STA_COUNT; i++) {
sta = &adapter->aStaInfo[i];
if (sta->isUsed && (ap->uBCStaId != i)) {
@@ -406,7 +407,7 @@ bool hdd_hostapd_sub20_channelwidth_can_switch(
sta->sub20_dynamic_channelwidth;
}
}
- spin_unlock_bh(&adapter->staInfo_lock);
+ adf_os_spin_unlock_bh(&adapter->staInfo_lock);
if (sta_count != 1) {
hddLog(VOS_TRACE_LEVEL_ERROR,
@@ -459,7 +460,7 @@ bool hdd_hostapd_sub20_channelwidth_can_restore(
hddLog(LOGE, FL("sub20 none"));
return false;
}
- spin_lock_bh(&adapter->staInfo_lock);
+ adf_os_spin_lock_bh(&adapter->staInfo_lock);
for (i = 0; i < WLAN_MAX_STA_COUNT; i++) {
sta = &adapter->aStaInfo[i];
if (sta->isUsed && (ap->uBCStaId != i)) {
@@ -468,7 +469,7 @@ bool hdd_hostapd_sub20_channelwidth_can_restore(
sta->sub20_dynamic_channelwidth;
}
}
- spin_unlock_bh(&adapter->staInfo_lock);
+ adf_os_spin_unlock_bh(&adapter->staInfo_lock);
if (sta_count != 0) {
hddLog(VOS_TRACE_LEVEL_ERROR,
@@ -566,7 +567,7 @@ bool hdd_sub20_channelwidth_can_set(
return false;
}
- spin_lock_bh(&adapter->staInfo_lock);
+ adf_os_spin_lock_bh(&adapter->staInfo_lock);
for (i = 0; i < WLAN_MAX_STA_COUNT; i++) {
sta = &adapter->aStaInfo[i];
if (sta->isUsed && (ap->uBCStaId != i)) {
@@ -575,7 +576,7 @@ bool hdd_sub20_channelwidth_can_set(
sta->sub20_dynamic_channelwidth;
}
}
- spin_unlock_bh(&adapter->staInfo_lock);
+ adf_os_spin_unlock_bh(&adapter->staInfo_lock);
if (sta_count >= 1 && !(sta_s20_caps & sub20_channel_width)) {
hddLog(VOS_TRACE_LEVEL_ERROR,
"%d STAs connected with sub20 Channelwidth %d",
@@ -1903,7 +1904,7 @@ static VOS_STATUS hdd_handle_acs_scan_event(tpSap_Event sap_event,
}
comp_evt = &sap_event->sapevt.sap_acs_scan_comp;
hdd_ctx->skip_acs_scan_status = eSAP_SKIP_ACS_SCAN;
- spin_lock(&hdd_ctx->acs_skip_lock);
+ adf_os_spin_lock(&hdd_ctx->acs_skip_lock);
vos_mem_free(hdd_ctx->last_acs_channel_list);
hdd_ctx->last_acs_channel_list = NULL;
hdd_ctx->num_of_channels = 0;
@@ -1923,7 +1924,7 @@ static VOS_STATUS hdd_handle_acs_scan_event(tpSap_Event sap_event,
hdd_ctx->num_of_channels = comp_evt->num_of_channels;
}
}
- spin_unlock(&hdd_ctx->acs_skip_lock);
+ adf_os_spin_unlock(&hdd_ctx->acs_skip_lock);
/* Update ACS scan result to cfg80211. Then OBSS scan can reuse the
* scan result.
*/
@@ -2326,6 +2327,7 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa
pHddApCtx->operatingChannel);
pHostapdState->bssState = BSS_START;
+ hdd_start_tsf_sync(pHostapdAdapter);
/* Set default key index */
VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,
@@ -2375,9 +2377,9 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa
}
}
- spin_lock_bh(&pHddCtx->dfs_lock);
+ adf_os_spin_lock_bh(&pHddCtx->dfs_lock);
pHddCtx->dfs_radar_found = VOS_FALSE;
- spin_unlock_bh(&pHddCtx->dfs_lock);
+ adf_os_spin_unlock_bh(&pHddCtx->dfs_lock);
WLANSAP_Get_Dfs_Ignore_CAC(pHddCtx->hHal, &ignoreCAC);
if ((NV_CHANNEL_DFS !=
vos_nv_getChannelEnabledState(pHddApCtx->operatingChannel))
@@ -2709,7 +2711,7 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa
/* start timer in sap/p2p_go */
if (pHddApCtx->bApActive == VOS_FALSE)
{
- spin_lock_bh(&pHddCtx->bus_bw_lock);
+ adf_os_spin_lock_bh(&pHddCtx->bus_bw_lock);
pHostapdAdapter->prev_tx_packets = pHostapdAdapter->stats.tx_packets;
pHostapdAdapter->prev_rx_packets = pHostapdAdapter->stats.rx_packets;
tlshim_get_intra_bss_fwd_pkts_count(
@@ -2718,7 +2720,7 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa
&pHostapdAdapter->prev_fwd_rx_packets);
pHostapdAdapter->prev_tx_bytes =
pHostapdAdapter->stats.tx_bytes;
- spin_unlock_bh(&pHddCtx->bus_bw_lock);
+ adf_os_spin_unlock_bh(&pHddCtx->bus_bw_lock);
hdd_start_bus_bw_compute_timer(pHostapdAdapter);
}
#endif
@@ -2855,7 +2857,7 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa
hdd_softap_DeregisterSTA(pHostapdAdapter, staId);
pHddApCtx->bApActive = VOS_FALSE;
- spin_lock_bh( &pHostapdAdapter->staInfo_lock );
+ adf_os_spin_lock_bh( &pHostapdAdapter->staInfo_lock );
for (i = 0; i < WLAN_MAX_STA_COUNT; i++)
{
if (pHostapdAdapter->aStaInfo[i].isUsed && i != (WLAN_HDD_GET_AP_CTX_PTR(pHostapdAdapter))->uBCStaId)
@@ -2864,7 +2866,7 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa
break;
}
}
- spin_unlock_bh( &pHostapdAdapter->staInfo_lock );
+ adf_os_spin_unlock_bh( &pHostapdAdapter->staInfo_lock );
// Start AP inactivity timer if no stations associated with it
if ((0 != (WLAN_HDD_GET_CTX(pHostapdAdapter))->cfg_ini->nAPAutoShutOff))
@@ -2929,13 +2931,13 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa
/*stop timer in sap/p2p_go */
if (pHddApCtx->bApActive == FALSE)
{
- spin_lock_bh(&pHddCtx->bus_bw_lock);
+ adf_os_spin_lock_bh(&pHddCtx->bus_bw_lock);
pHostapdAdapter->prev_tx_packets = 0;
pHostapdAdapter->prev_rx_packets = 0;
pHostapdAdapter->prev_fwd_tx_packets = 0;
pHostapdAdapter->prev_fwd_rx_packets = 0;
pHostapdAdapter->prev_tx_bytes = 0;
- spin_unlock_bh(&pHddCtx->bus_bw_lock);
+ adf_os_spin_unlock_bh(&pHddCtx->bus_bw_lock);
hdd_stop_bus_bw_compute_timer(pHostapdAdapter);
}
#endif
@@ -3146,7 +3148,7 @@ stopbss :
/* Change the BSS state now since, as we are shutting things down,
* we don't want interfaces to become re-enabled */
pHostapdState->bssState = BSS_STOP;
-
+ hdd_stop_tsf_sync(pHostapdAdapter);
if (0 != (WLAN_HDD_GET_CTX(pHostapdAdapter))->cfg_ini->nAPAutoShutOff)
{
if (VOS_TIMER_STATE_RUNNING == pHddApCtx->hdd_ap_inactivity_timer.state)
@@ -3372,10 +3374,10 @@ int hdd_softap_set_channel_change(struct net_device *dev, int target_channel)
}
}
- spin_lock_bh(&pHddCtx->dfs_lock);
+ adf_os_spin_lock_bh(&pHddCtx->dfs_lock);
if (pHddCtx->dfs_radar_found == VOS_TRUE)
{
- spin_unlock_bh(&pHddCtx->dfs_lock);
+ adf_os_spin_unlock_bh(&pHddCtx->dfs_lock);
hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Channel switch in progress!!",
__func__);
ret = -EBUSY;
@@ -3392,7 +3394,7 @@ int hdd_softap_set_channel_change(struct net_device *dev, int target_channel)
*/
pHddCtx->dfs_radar_found = VOS_TRUE;
- spin_unlock_bh(&pHddCtx->dfs_lock);
+ adf_os_spin_unlock_bh(&pHddCtx->dfs_lock);
/*
* Post the Channel Change request to SAP.
*/
@@ -3415,9 +3417,9 @@ int hdd_softap_set_channel_change(struct net_device *dev, int target_channel)
* queues.
*/
- spin_lock_bh(&pHddCtx->dfs_lock);
+ adf_os_spin_lock_bh(&pHddCtx->dfs_lock);
pHddCtx->dfs_radar_found = VOS_FALSE;
- spin_unlock_bh(&pHddCtx->dfs_lock);
+ adf_os_spin_unlock_bh(&pHddCtx->dfs_lock);
ret = -EINVAL;
}
@@ -3492,9 +3494,9 @@ int hdd_softap_set_channel_sub20_chanwidth_change(struct net_device *dev,
return -EINVAL;
}
- spin_lock_bh(&hdd_ctx_ptr->dfs_lock);
+ adf_os_spin_lock_bh(&hdd_ctx_ptr->dfs_lock);
if (hdd_ctx_ptr->dfs_radar_found == VOS_TRUE) {
- spin_unlock_bh(&hdd_ctx_ptr->dfs_lock);
+ adf_os_spin_unlock_bh(&hdd_ctx_ptr->dfs_lock);
hddLog(LOGE,
FL("sub20 chan width switch in progress!!"));
return -EBUSY;
@@ -3509,7 +3511,7 @@ int hdd_softap_set_channel_sub20_chanwidth_change(struct net_device *dev,
* post eSAP_START_BSS_EVENT success event to HDD.
*/
hdd_ctx_ptr->dfs_radar_found = VOS_TRUE;
- spin_unlock_bh(&hdd_ctx_ptr->dfs_lock);
+ adf_os_spin_unlock_bh(&hdd_ctx_ptr->dfs_lock);
vos_ctx_ptr = WLAN_HDD_GET_SAP_CTX_PTR(hostapd_adapter);
status = WLANSAP_set_sub20_channelwidth_with_csa(vos_ctx_ptr,
@@ -3523,9 +3525,9 @@ int hdd_softap_set_channel_sub20_chanwidth_change(struct net_device *dev,
* radar found flag and also restart the netif
* queues.
*/
- spin_lock_bh(&hdd_ctx_ptr->dfs_lock);
+ adf_os_spin_lock_bh(&hdd_ctx_ptr->dfs_lock);
hdd_ctx_ptr->dfs_radar_found = VOS_FALSE;
- spin_unlock_bh(&hdd_ctx_ptr->dfs_lock);
+ adf_os_spin_unlock_bh(&hdd_ctx_ptr->dfs_lock);
ret = -EINVAL;
}
@@ -5293,7 +5295,7 @@ static __iw_softap_getassoc_stamacaddr(struct net_device *dev,
maclist_index = sizeof(maclist_index);
left = wrqu->data.length - maclist_index;
- spin_lock_bh(&pHostapdAdapter->staInfo_lock);
+ adf_os_spin_lock_bh(&pHostapdAdapter->staInfo_lock);
while ((cnt < WLAN_MAX_STA_COUNT) && (left >= VOS_MAC_ADDR_SIZE)) {
if ((pStaInfo[cnt].isUsed) &&
(!IS_BROADCAST_MAC(pStaInfo[cnt].macAddrSTA.bytes))) {
@@ -5304,7 +5306,7 @@ static __iw_softap_getassoc_stamacaddr(struct net_device *dev,
}
cnt++;
}
- spin_unlock_bh(&pHostapdAdapter->staInfo_lock);
+ adf_os_spin_unlock_bh(&pHostapdAdapter->staInfo_lock);
*((u32 *)buf) = maclist_index;
wrqu->data.length = maclist_index;
@@ -7692,6 +7694,10 @@ const struct iw_handler_def hostapd_handler_def = {
.get_wireless_stats = NULL,
};
+static const struct ethtool_ops wlan_hostapd_ethtool_ops = {
+ .get_ts_info = wlan_get_ts_info,
+};
+
struct net_device_ops net_ops_struct = {
.ndo_open = hdd_hostapd_open,
.ndo_stop = hdd_hostapd_stop,
@@ -7712,7 +7718,8 @@ static int hdd_set_hostapd(hdd_adapter_t *pAdapter)
void hdd_set_ap_ops( struct net_device *pWlanHostapdDev )
{
- pWlanHostapdDev->netdev_ops = &net_ops_struct;
+ pWlanHostapdDev->netdev_ops = &net_ops_struct;
+ pWlanHostapdDev->ethtool_ops = &wlan_hostapd_ethtool_ops;
}
VOS_STATUS hdd_init_ap_mode(hdd_adapter_t *pAdapter, bool reinit)
@@ -7947,7 +7954,7 @@ hdd_adapter_t* hdd_wlan_create_ap_dev(hdd_context_t *pHddCtx,
vos_mem_copy(pHostapdAdapter->macAddressCurrent.bytes, (void *)macAddr, sizeof(tSirMacAddr));
pHostapdAdapter->offloads_configured = FALSE;
- pWlanHostapdDev->destructor = free_netdev;
+ hdd_dev_setup_destructor(pWlanHostapdDev);
pWlanHostapdDev->ieee80211_ptr = &pHostapdAdapter->wdev ;
pHostapdAdapter->wdev.wiphy = pHddCtx->wiphy;
pHostapdAdapter->wdev.netdev = pWlanHostapdDev;
@@ -7967,7 +7974,7 @@ hdd_adapter_t* hdd_wlan_create_ap_dev(hdd_context_t *pHddCtx,
pWlanHostapdDev->features |= NETIF_F_RXCSUM;
SET_NETDEV_DEV(pWlanHostapdDev, pHddCtx->parent_dev);
- spin_lock_init(&pHostapdAdapter->pause_map_lock);
+ adf_os_spinlock_init(&pHostapdAdapter->pause_map_lock);
pHostapdAdapter->last_tx_jiffies = jiffies;
pHostapdAdapter->bug_report_count = 0;
pHostapdAdapter->start_time =
diff --git a/CORE/HDD/src/wlan_hdd_ipa.c b/CORE/HDD/src/wlan_hdd_ipa.c
index 61c5ad8d1da2..e3bf79a2c833 100644
--- a/CORE/HDD/src/wlan_hdd_ipa.c
+++ b/CORE/HDD/src/wlan_hdd_ipa.c
@@ -431,7 +431,7 @@ struct hdd_ipa_priv {
uint32_t pending_hw_desc_cnt;
uint32_t hw_desc_cnt;
- spinlock_t q_lock;
+ adf_os_spinlock_t q_lock;
uint32_t freeq_cnt;
struct list_head free_desc_head;
@@ -595,7 +595,7 @@ static struct ipa_tx_data_desc *hdd_ipa_alloc_data_desc(
{
struct ipa_tx_data_desc *desc = NULL;
- spin_lock_bh(&hdd_ipa->q_lock);
+ adf_os_spin_lock_bh(&hdd_ipa->q_lock);
/* Keep the descriptors for priority alloc which can be used for
* anchor nodes
@@ -615,7 +615,7 @@ static struct ipa_tx_data_desc *hdd_ipa_alloc_data_desc(
}
end:
- spin_unlock_bh(&hdd_ipa->q_lock);
+ adf_os_spin_unlock_bh(&hdd_ipa->q_lock);
return desc;
}
@@ -626,10 +626,10 @@ static void hdd_ipa_free_data_desc(struct hdd_ipa_priv *hdd_ipa,
desc->priv = NULL;
desc->pyld_buffer = NULL;
desc->pyld_len = 0;
- spin_lock_bh(&hdd_ipa->q_lock);
+ adf_os_spin_lock_bh(&hdd_ipa->q_lock);
list_add_tail(&desc->link, &hdd_ipa->free_desc_head);
hdd_ipa->freeq_cnt++;
- spin_unlock_bh(&hdd_ipa->q_lock);
+ adf_os_spin_unlock_bh(&hdd_ipa->q_lock);
}
static struct iphdr * hdd_ipa_get_ip_pkt(void *data, uint16_t *eth_type)
@@ -2531,12 +2531,12 @@ static int hdd_ipa_rm_try_release(struct hdd_ipa_priv *hdd_ipa)
return -EAGAIN;
#ifndef IPA_UC_STA_OFFLOAD
- spin_lock_bh(&hdd_ipa->q_lock);
+ adf_os_spin_lock_bh(&hdd_ipa->q_lock);
if (hdd_ipa->pending_hw_desc_cnt || hdd_ipa->pend_q_cnt) {
- spin_unlock_bh(&hdd_ipa->q_lock);
+ adf_os_spin_unlock_bh(&hdd_ipa->q_lock);
return -EAGAIN;
}
- spin_unlock_bh(&hdd_ipa->q_lock);
+ adf_os_spin_unlock_bh(&hdd_ipa->q_lock);
#endif
adf_os_spin_lock_bh(&hdd_ipa->pm_lock);
@@ -2612,11 +2612,11 @@ static void hdd_ipa_send_pkt_to_ipa(struct hdd_ipa_priv *hdd_ipa)
INIT_LIST_HEAD(&send_desc_head->link);
- spin_lock_bh(&hdd_ipa->q_lock);
+ adf_os_spin_lock_bh(&hdd_ipa->q_lock);
if (hdd_ipa->pending_hw_desc_cnt >= hdd_ipa->hw_desc_cnt) {
hdd_ipa->stats.num_rx_ipa_hw_maxed_out++;
- spin_unlock_bh(&hdd_ipa->q_lock);
+ adf_os_spin_unlock_bh(&hdd_ipa->q_lock);
hdd_ipa_free_data_desc(hdd_ipa, send_desc_head);
return;
}
@@ -2624,7 +2624,7 @@ static void hdd_ipa_send_pkt_to_ipa(struct hdd_ipa_priv *hdd_ipa)
pend_q_cnt = hdd_ipa->pend_q_cnt;
if (pend_q_cnt == 0) {
- spin_unlock_bh(&hdd_ipa->q_lock);
+ adf_os_spin_unlock_bh(&hdd_ipa->q_lock);
hdd_ipa_free_data_desc(hdd_ipa, send_desc_head);
return;
}
@@ -2658,7 +2658,7 @@ static void hdd_ipa_send_pkt_to_ipa(struct hdd_ipa_priv *hdd_ipa)
}
hdd_ipa->pending_hw_desc_cnt += cur_send_cnt;
- spin_unlock_bh(&hdd_ipa->q_lock);
+ adf_os_spin_unlock_bh(&hdd_ipa->q_lock);
if (ipa_tx_dp_mul(hdd_ipa->prod_client, send_desc_head) != 0) {
HDD_IPA_LOG(VOS_TRACE_LEVEL_ERROR,
@@ -2676,9 +2676,9 @@ static void hdd_ipa_send_pkt_to_ipa(struct hdd_ipa_priv *hdd_ipa)
ipa_tx_failed:
- spin_lock_bh(&hdd_ipa->q_lock);
+ adf_os_spin_lock_bh(&hdd_ipa->q_lock);
hdd_ipa->pending_hw_desc_cnt -= cur_send_cnt;
- spin_unlock_bh(&hdd_ipa->q_lock);
+ adf_os_spin_unlock_bh(&hdd_ipa->q_lock);
list_for_each_entry_safe(desc, tmp, &send_desc_head->link, link) {
list_del(&desc->link);
@@ -3127,10 +3127,10 @@ VOS_STATUS hdd_ipa_process_rxt(v_VOID_t *vosContext, adf_nbuf_t rx_buf_list,
send_desc->priv = buf;
send_desc->pyld_buffer = buf->data;
send_desc->pyld_len = buf->len;
- spin_lock_bh(&hdd_ipa->q_lock);
+ adf_os_spin_lock_bh(&hdd_ipa->q_lock);
list_add_tail(&send_desc->link, &hdd_ipa->pend_desc_head);
hdd_ipa->pend_q_cnt++;
- spin_unlock_bh(&hdd_ipa->q_lock);
+ adf_os_spin_unlock_bh(&hdd_ipa->q_lock);
cur_cnt++;
buf = next_buf;
}
@@ -3393,9 +3393,9 @@ static void hdd_ipa_w2i_cb(void *priv, enum ipa_dp_evt_type evt,
buf = done_desc->priv;
adf_nbuf_free(buf);
hdd_ipa_free_data_desc(hdd_ipa, done_desc);
- spin_lock_bh(&hdd_ipa->q_lock);
+ adf_os_spin_lock_bh(&hdd_ipa->q_lock);
hdd_ipa->pending_hw_desc_cnt--;
- spin_unlock_bh(&hdd_ipa->q_lock);
+ adf_os_spin_unlock_bh(&hdd_ipa->q_lock);
hdd_ipa->stats.num_rx_ipa_write_done++;
}
/* add anchor node also back to free list */
@@ -4752,24 +4752,24 @@ static void hdd_ipa_rx_pipe_desc_free(void)
max_desc_cnt = hdd_ipa->hw_desc_cnt * HDD_IPA_DESC_BUFFER_RATIO;
- spin_lock_bh(&hdd_ipa->q_lock);
+ adf_os_spin_lock_bh(&hdd_ipa->q_lock);
list_for_each_entry_safe(desc, tmp, &hdd_ipa->pend_desc_head, link) {
list_del(&desc->link);
adf_nbuf_free(desc->priv);
- spin_unlock_bh(&hdd_ipa->q_lock);
+ adf_os_spin_unlock_bh(&hdd_ipa->q_lock);
hdd_ipa_free_data_desc(hdd_ipa, desc);
- spin_lock_bh(&hdd_ipa->q_lock);
+ adf_os_spin_lock_bh(&hdd_ipa->q_lock);
}
list_for_each_entry_safe(desc, tmp, &hdd_ipa->free_desc_head, link) {
list_del(&desc->link);
- spin_unlock_bh(&hdd_ipa->q_lock);
+ adf_os_spin_unlock_bh(&hdd_ipa->q_lock);
adf_os_mem_free(desc);
- spin_lock_bh(&hdd_ipa->q_lock);
+ adf_os_spin_lock_bh(&hdd_ipa->q_lock);
i++;
}
- spin_unlock_bh(&hdd_ipa->q_lock);
+ adf_os_spin_unlock_bh(&hdd_ipa->q_lock);
if (i != max_desc_cnt)
HDD_IPA_LOG(VOS_TRACE_LEVEL_FATAL, "free desc leak: %u, %u", i,
@@ -4789,7 +4789,7 @@ static int hdd_ipa_rx_pipe_desc_alloc(void)
hdd_ipa->hdd_ctx->cfg_ini->IpaDescSize);
max_desc_cnt = hdd_ipa->hw_desc_cnt * HDD_IPA_DESC_BUFFER_RATIO;
- spin_lock_init(&hdd_ipa->q_lock);
+ adf_os_spinlock_init(&hdd_ipa->q_lock);
INIT_LIST_HEAD(&hdd_ipa->free_desc_head);
INIT_LIST_HEAD(&hdd_ipa->pend_desc_head);
@@ -4804,9 +4804,9 @@ static int hdd_ipa_rx_pipe_desc_alloc(void)
"Descriptor allocation failed");
goto fail;
}
- spin_lock_bh(&hdd_ipa->q_lock);
+ adf_os_spin_lock_bh(&hdd_ipa->q_lock);
list_add_tail(&tmp_desc->link, &hdd_ipa->free_desc_head);
- spin_unlock_bh(&hdd_ipa->q_lock);
+ adf_os_spin_unlock_bh(&hdd_ipa->q_lock);
}
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index b1b54f9e8a14..85cfccfc4e04 100644
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2018 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2019 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -93,6 +93,7 @@
#include <linux/ctype.h>
#include <linux/compat.h>
#include <linux/pm_qos.h>
+#include <linux/ethtool.h>
#ifdef MSM_PLATFORM
#ifdef CONFIG_CNSS
#include <soc/qcom/subsystem_restart.h>
@@ -196,8 +197,8 @@ static char fwpath_mode_local[BUF_LEN];
* spinlock for synchronizing asynchronous request/response
* (full description of use in wlan_hdd_main.h)
*/
-DEFINE_SPINLOCK(hdd_context_lock);
-
+//DEFINE_SPINLOCK(hdd_context_lock);
+adf_os_spinlock_t hdd_context_lock;
/*
* The rate at which the driver sends RESTART event to supplicant
* once the function 'vos_wlanRestart()' is called
@@ -1793,12 +1794,11 @@ static void hdd_set_thermal_level_cb(hdd_context_t *pHddCtx, u_int8_t level)
static bool
hdd_system_suspend_state(hdd_context_t *hdd_ctx)
{
- unsigned long flags;
bool s;
- spin_lock_irqsave(&hdd_ctx->thermal_suspend_lock, flags);
+ adf_os_spin_lock_irqsave(&hdd_ctx->thermal_suspend_lock);
s = hdd_ctx->system_suspended;
- spin_unlock_irqrestore(&hdd_ctx->thermal_suspend_lock, flags);
+ adf_os_spin_unlock_irqrestore(&hdd_ctx->thermal_suspend_lock);
return s;
}
@@ -1814,13 +1814,12 @@ hdd_system_suspend_state(hdd_context_t *hdd_ctx)
bool
hdd_system_suspend_state_set(hdd_context_t *hdd_ctx, bool state)
{
- unsigned long flags;
bool old;
- spin_lock_irqsave(&hdd_ctx->thermal_suspend_lock, flags);
+ adf_os_spin_lock_irqsave(&hdd_ctx->thermal_suspend_lock);
old = hdd_ctx->system_suspended;
hdd_ctx->system_suspended = state;
- spin_unlock_irqrestore(&hdd_ctx->thermal_suspend_lock, flags);
+ adf_os_spin_unlock_irqrestore(&hdd_ctx->thermal_suspend_lock);
return old;
}
@@ -1836,12 +1835,11 @@ hdd_system_suspend_state_set(hdd_context_t *hdd_ctx, bool state)
int
hdd_thermal_suspend_state(hdd_context_t *hdd_ctx)
{
- unsigned long flags;
int s;
- spin_lock_irqsave(&hdd_ctx->thermal_suspend_lock, flags);
+ adf_os_spin_lock_irqsave(&hdd_ctx->thermal_suspend_lock);
s = hdd_ctx->thermal_suspend_state;
- spin_unlock_irqrestore(&hdd_ctx->thermal_suspend_lock, flags);
+ adf_os_spin_unlock_irqrestore(&hdd_ctx->thermal_suspend_lock);
return s;
}
@@ -1849,11 +1847,10 @@ hdd_thermal_suspend_state(hdd_context_t *hdd_ctx)
static bool
hdd_thermal_suspend_transit(hdd_context_t *hdd_ctx, int target, int *old)
{
- unsigned long flags;
int s;
bool ret = false;
- spin_lock_irqsave(&hdd_ctx->thermal_suspend_lock, flags);
+ adf_os_spin_lock_irqsave(&hdd_ctx->thermal_suspend_lock);
s = hdd_ctx->thermal_suspend_state;
if (old)
@@ -1887,7 +1884,7 @@ hdd_thermal_suspend_transit(hdd_context_t *hdd_ctx, int target, int *old)
if (ret)
hdd_ctx->thermal_suspend_state = target;
- spin_unlock_irqrestore(&hdd_ctx->thermal_suspend_lock, flags);
+ adf_os_spin_unlock_irqrestore(&hdd_ctx->thermal_suspend_lock);
return ret;
}
@@ -7787,16 +7784,15 @@ mem_free:
length = scnprintf( extra, sizeof(extra), "%d %d", (int)txRate,
(int)pHddStaCtx->ibss_peer_info.peerInfoParams[0].rssi);
-
+ length = VOS_MIN(priv_data.total_len, length + 1);
/* Copy the data back into buffer */
- if (copy_to_user(priv_data.buf, &extra, length+ 1))
- {
+ if (copy_to_user(priv_data.buf, &extra, length)) {
VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
"%s: copy data to user buffer failed GETIBSSPEERINFO command",
__func__);
ret = -EFAULT;
goto exit;
- }
+ }
}
else
{
@@ -9558,18 +9554,18 @@ bool hdd_dfs_indicate_radar(void *context, void *param)
if (VOS_TRUE == hdd_radar_event->dfs_radar_status)
{
- spin_lock_bh(&pHddCtx->dfs_lock);
+ adf_os_spin_lock_bh(&pHddCtx->dfs_lock);
if (pHddCtx->dfs_radar_found)
{
/* Application already triggered channel switch
* on current channel, so return here
*/
- spin_unlock_bh(&pHddCtx->dfs_lock);
+ adf_os_spin_unlock_bh(&pHddCtx->dfs_lock);
return false;
}
pHddCtx->dfs_radar_found = VOS_TRUE;
- spin_unlock_bh(&pHddCtx->dfs_lock);
+ adf_os_spin_unlock_bh(&pHddCtx->dfs_lock);
status = hdd_get_front_adapter ( pHddCtx, &pAdapterNode );
while ( NULL != pAdapterNode && VOS_STATUS_SUCCESS == status )
@@ -10855,6 +10851,10 @@ static v_U16_t hdd_select_queue(struct net_device *dev,
return hdd_wmm_select_queue(dev, skb);
}
+static const struct ethtool_ops wlan_ethtool_ops = {
+ .get_ts_info = wlan_get_ts_info,
+};
+
static struct net_device_ops wlan_drv_ops = {
.ndo_open = hdd_open,
.ndo_stop = hdd_stop,
@@ -10893,6 +10893,7 @@ void hdd_set_station_ops( struct net_device *pWlanDev )
pWlanDev->netdev_ops = &wlan_mon_drv_ops;
else
pWlanDev->netdev_ops = &wlan_drv_ops;
+ pWlanDev->ethtool_ops = &wlan_ethtool_ops;
}
void hdd_set_monitor_ops(struct net_device *pwlan_dev)
@@ -11007,7 +11008,7 @@ hdd_adapter_runtime_suspend_denit(hdd_adapter_t *adapter) { }
*/
static void hdd_adapter_init_action_frame_random_mac(hdd_adapter_t *adapter)
{
- spin_lock_init(&adapter->random_mac_lock);
+ adf_os_spinlock_init(&adapter->random_mac_lock);
vos_mem_zero(adapter->random_mac, sizeof(adapter->random_mac));
}
@@ -11067,7 +11068,7 @@ static hdd_adapter_t* hdd_alloc_station_adapter(hdd_context_t *pHddCtx,
pWlanDev->features |= NETIF_F_RXCSUM;
hdd_set_station_ops( pAdapter->dev );
- pWlanDev->destructor = free_netdev;
+ hdd_dev_setup_destructor(pWlanDev);
pWlanDev->ieee80211_ptr = &pAdapter->wdev ;
pWlanDev->tx_queue_len = HDD_NETDEV_TX_QUEUE_LEN;
pAdapter->wdev.wiphy = pHddCtx->wiphy;
@@ -11076,7 +11077,7 @@ static hdd_adapter_t* hdd_alloc_station_adapter(hdd_context_t *pHddCtx,
SET_NETDEV_DEV(pWlanDev, pHddCtx->parent_dev);
hdd_wmm_init( pAdapter );
hdd_adapter_runtime_suspend_init(pAdapter);
- spin_lock_init(&pAdapter->pause_map_lock);
+ adf_os_spinlock_init(&pAdapter->pause_map_lock);
pAdapter->last_tx_jiffies = jiffies;
pAdapter->bug_report_count = 0;
pAdapter->start_time = pAdapter->last_time = vos_system_ticks();
@@ -11140,7 +11141,7 @@ static hdd_adapter_t *hdd_alloc_monitor_adapter(hdd_context_t *pHddCtx,
pwlan_dev->features |= NETIF_F_RXCSUM;
hdd_set_monitor_ops(pAdapter->dev);
- pwlan_dev->destructor = free_netdev;
+ hdd_dev_setup_destructor(pwlan_dev);
pwlan_dev->ieee80211_ptr = &pAdapter->wdev;
pwlan_dev->tx_queue_len = HDD_NETDEV_TX_QUEUE_LEN;
pAdapter->wdev.wiphy = pHddCtx->wiphy;
@@ -11149,7 +11150,7 @@ static hdd_adapter_t *hdd_alloc_monitor_adapter(hdd_context_t *pHddCtx,
SET_NETDEV_DEV(pwlan_dev, pHddCtx->parent_dev);
hdd_wmm_init(pAdapter);
hdd_adapter_runtime_suspend_init(pAdapter);
- spin_lock_init(&pAdapter->pause_map_lock);
+ adf_os_spinlock_init(&pAdapter->pause_map_lock);
pAdapter->last_tx_jiffies = jiffies;
pAdapter->bug_report_count = 0;
pAdapter->start_time = pAdapter->last_time = vos_system_ticks();
@@ -12615,39 +12616,43 @@ VOS_STATUS hdd_stop_adapter( hdd_context_t *pHddCtx, hdd_adapter_t *pAdapter,
* For NDI do not use pWextState from sta_ctx, if needed
* extract from ndi_ctx.
*/
- if (WLAN_HDD_NDI == pAdapter->device_mode)
- halStatus = sme_RoamDisconnect(pHddCtx->hHal,
+ if ((WLAN_HDD_NDI == pAdapter->device_mode) ||
+ (pWextState->roamProfile.BSSType == eCSR_BSS_TYPE_START_IBSS))
+ {
+ if (WLAN_HDD_NDI == pAdapter->device_mode)
+ halStatus = sme_RoamDisconnect(pHddCtx->hHal,
pAdapter->sessionId,
eCSR_DISCONNECT_REASON_NDI_DELETE);
- else if (pWextState->roamProfile.BSSType == eCSR_BSS_TYPE_START_IBSS)
- halStatus = sme_RoamDisconnect(pHddCtx->hHal,
+ else
+ halStatus = sme_RoamDisconnect(pHddCtx->hHal,
pAdapter->sessionId,
eCSR_DISCONNECT_REASON_IBSS_LEAVE);
- else
- halStatus = sme_RoamDisconnect(pHddCtx->hHal,
- pAdapter->sessionId,
- eCSR_DISCONNECT_REASON_UNSPECIFIED);
- //success implies disconnect command got queued up successfully
- if(halStatus == eHAL_STATUS_SUCCESS)
- {
- rc = wait_for_completion_timeout(
+ /* success implies disconnect command got queued up */
+ if (halStatus == eHAL_STATUS_SUCCESS)
+ {
+ rc = wait_for_completion_timeout(
&pAdapter->disconnect_comp_var,
msecs_to_jiffies(WLAN_WAIT_TIME_DISCONNECT));
- if (!rc) {
- hddLog(VOS_TRACE_LEVEL_ERROR,
- "%s: wait on disconnect_comp_var failed",
+ if (!rc) {
+ hddLog(VOS_TRACE_LEVEL_ERROR,
+ "%s: wait on disconnect_comp_var failed",
+ __func__);
+ }
+ }
+ else
+ {
+ hddLog(LOGE, "%s: failed to post disconnect event to SME",
__func__);
}
- }
- else
- {
- hddLog(LOGE, "%s: failed to post disconnect event to SME",
- __func__);
- }
- memset(&wrqu, '\0', sizeof(wrqu));
- wrqu.ap_addr.sa_family = ARPHRD_ETHER;
- memset(wrqu.ap_addr.sa_data,'\0',ETH_ALEN);
- wireless_send_event(pAdapter->dev, SIOCGIWAP, &wrqu, NULL);
+ }
+ else
+ {
+ wlan_hdd_disconnect(pAdapter, eCSR_DISCONNECT_REASON_DEAUTH);
+ }
+ memset(&wrqu, '\0', sizeof(wrqu));
+ wrqu.ap_addr.sa_family = ARPHRD_ETHER;
+ memset(wrqu.ap_addr.sa_data,'\0',ETH_ALEN);
+ wireless_send_event(pAdapter->dev, SIOCGIWAP, &wrqu, NULL);
}
if (pScanInfo != NULL && pScanInfo->mScanPending)
@@ -13312,7 +13317,6 @@ void hdd_connect_result(struct net_device *dev,
{
hdd_adapter_t *padapter = (hdd_adapter_t *) netdev_priv(dev);
struct cfg80211_bss *bss = NULL;
-
if (WLAN_STATUS_SUCCESS == status) {
struct ieee80211_channel *chan;
int freq;
@@ -13877,10 +13881,10 @@ VOS_STATUS hdd_get_front_adapter( hdd_context_t *pHddCtx,
hdd_adapter_list_node_t** ppAdapterNode)
{
VOS_STATUS status;
- spin_lock_bh(&pHddCtx->hddAdapters.lock);
+ adf_os_spin_lock_bh(&pHddCtx->hddAdapters.lock);
status = hdd_list_peek_front ( &pHddCtx->hddAdapters,
(hdd_list_node_t**) ppAdapterNode );
- spin_unlock_bh(&pHddCtx->hddAdapters.lock);
+ adf_os_spin_unlock_bh(&pHddCtx->hddAdapters.lock);
return status;
}
@@ -13889,12 +13893,12 @@ VOS_STATUS hdd_get_next_adapter( hdd_context_t *pHddCtx,
hdd_adapter_list_node_t** pNextAdapterNode)
{
VOS_STATUS status;
- spin_lock_bh(&pHddCtx->hddAdapters.lock);
+ adf_os_spin_lock_bh(&pHddCtx->hddAdapters.lock);
status = hdd_list_peek_next ( &pHddCtx->hddAdapters,
(hdd_list_node_t*) pAdapterNode,
(hdd_list_node_t**)pNextAdapterNode );
- spin_unlock_bh(&pHddCtx->hddAdapters.lock);
+ adf_os_spin_unlock_bh(&pHddCtx->hddAdapters.lock);
return status;
}
@@ -13902,10 +13906,10 @@ VOS_STATUS hdd_remove_adapter( hdd_context_t *pHddCtx,
hdd_adapter_list_node_t* pAdapterNode)
{
VOS_STATUS status;
- spin_lock_bh(&pHddCtx->hddAdapters.lock);
+ adf_os_spin_lock_bh(&pHddCtx->hddAdapters.lock);
status = hdd_list_remove_node ( &pHddCtx->hddAdapters,
&pAdapterNode->node );
- spin_unlock_bh(&pHddCtx->hddAdapters.lock);
+ adf_os_spin_unlock_bh(&pHddCtx->hddAdapters.lock);
return status;
}
@@ -13913,10 +13917,10 @@ VOS_STATUS hdd_remove_front_adapter( hdd_context_t *pHddCtx,
hdd_adapter_list_node_t** ppAdapterNode)
{
VOS_STATUS status;
- spin_lock_bh(&pHddCtx->hddAdapters.lock);
+ adf_os_spin_lock_bh(&pHddCtx->hddAdapters.lock);
status = hdd_list_remove_front( &pHddCtx->hddAdapters,
(hdd_list_node_t**) ppAdapterNode );
- spin_unlock_bh(&pHddCtx->hddAdapters.lock);
+ adf_os_spin_unlock_bh(&pHddCtx->hddAdapters.lock);
return status;
}
@@ -13924,10 +13928,10 @@ VOS_STATUS hdd_add_adapter_back( hdd_context_t *pHddCtx,
hdd_adapter_list_node_t* pAdapterNode)
{
VOS_STATUS status;
- spin_lock_bh(&pHddCtx->hddAdapters.lock);
+ adf_os_spin_lock_bh(&pHddCtx->hddAdapters.lock);
status = hdd_list_insert_back ( &pHddCtx->hddAdapters,
(hdd_list_node_t*) pAdapterNode );
- spin_unlock_bh(&pHddCtx->hddAdapters.lock);
+ adf_os_spin_unlock_bh(&pHddCtx->hddAdapters.lock);
return status;
}
@@ -13935,10 +13939,10 @@ VOS_STATUS hdd_add_adapter_front( hdd_context_t *pHddCtx,
hdd_adapter_list_node_t* pAdapterNode)
{
VOS_STATUS status;
- spin_lock_bh(&pHddCtx->hddAdapters.lock);
+ adf_os_spin_lock_bh(&pHddCtx->hddAdapters.lock);
status = hdd_list_insert_front ( &pHddCtx->hddAdapters,
(hdd_list_node_t*) pAdapterNode );
- spin_unlock_bh(&pHddCtx->hddAdapters.lock);
+ adf_os_spin_unlock_bh(&pHddCtx->hddAdapters.lock);
return status;
}
@@ -14251,12 +14255,12 @@ static void hdd_full_power_callback(void *callbackContext, eHalStatus status)
function and the caller since the caller could time out either
before or while this code is executing. we use a spinlock to
serialize these actions */
- spin_lock(&hdd_context_lock);
+ adf_os_spin_lock(&hdd_context_lock);
if (POWER_CONTEXT_MAGIC != pContext->magic)
{
/* the caller presumably timed out so there is nothing we can do */
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
hddLog(VOS_TRACE_LEVEL_WARN,
"%s: Invalid context, magic [%08x]",
__func__, pContext->magic);
@@ -14272,7 +14276,7 @@ static void hdd_full_power_callback(void *callbackContext, eHalStatus status)
complete(&pContext->completion);
/* serialization is complete */
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
}
static inline VOS_STATUS hdd_UnregisterWext_all_adapters(hdd_context_t *pHddCtx)
@@ -14682,11 +14686,11 @@ void hdd_wlan_exit(hdd_context_t *pHddCtx)
hddLog(VOS_TRACE_LEVEL_FATAL, "%s: deinit skip acs scan timer failed",
__func__);
- spin_lock(&pHddCtx->acs_skip_lock);
+ adf_os_spin_lock(&pHddCtx->acs_skip_lock);
vos_mem_free(pHddCtx->last_acs_channel_list);
pHddCtx->last_acs_channel_list = NULL;
pHddCtx->num_of_channels = 0;
- spin_unlock(&pHddCtx->acs_skip_lock);
+ adf_os_spin_unlock(&pHddCtx->acs_skip_lock);
#endif
@@ -14740,9 +14744,9 @@ void hdd_wlan_exit(hdd_context_t *pHddCtx)
serialize these activities by invalidating the magic while
holding a shared spinlock which will cause us to block if the
callback is currently executing */
- spin_lock(&hdd_context_lock);
+ adf_os_spin_lock(&hdd_context_lock);
powerContext.magic = 0;
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
}
else
{
@@ -14976,11 +14980,11 @@ void hdd_skip_acs_scan_timer_handler(void * data)
hddLog(LOG1, FL("ACS Scan result expired. Reset ACS scan skip"));
hdd_ctx->skip_acs_scan_status = eSAP_DO_NEW_ACS_SCAN;
- spin_lock(&hdd_ctx->acs_skip_lock);
+ adf_os_spin_lock(&hdd_ctx->acs_skip_lock);
vos_mem_free(hdd_ctx->last_acs_channel_list);
hdd_ctx->last_acs_channel_list = NULL;
hdd_ctx->num_of_channels = 0;
- spin_unlock(&hdd_ctx->acs_skip_lock);
+ adf_os_spin_unlock(&hdd_ctx->acs_skip_lock);
/* Get first SAP adapter to clear results */
ap_adapter = hdd_get_adapter(hdd_ctx, WLAN_HDD_SOFTAP);
@@ -15598,13 +15602,13 @@ static void hdd_bus_bw_compute_cbk(void *priv)
total_tx += pAdapter->stats.tx_packets;
- spin_lock_bh(&pHddCtx->bus_bw_lock);
+ adf_os_spin_lock_bh(&pHddCtx->bus_bw_lock);
pAdapter->prev_tx_packets = pAdapter->stats.tx_packets;
pAdapter->prev_tx_bytes = pAdapter->stats.tx_bytes;
pAdapter->prev_rx_packets = pAdapter->stats.rx_packets;
pAdapter->prev_fwd_tx_packets = fwd_tx_packets;
pAdapter->prev_fwd_rx_packets = fwd_rx_packets;
- spin_unlock_bh(&pHddCtx->bus_bw_lock);
+ adf_os_spin_unlock_bh(&pHddCtx->bus_bw_lock);
connected = TRUE;
}
@@ -16399,7 +16403,7 @@ static VOS_STATUS hdd_init_thermal_ctx(hdd_context_t *pHddCtx)
{
pHddCtx->system_suspended = false;
pHddCtx->thermal_suspend_state = HDD_WLAN_THERMAL_ACTIVE;
- spin_lock_init(&pHddCtx->thermal_suspend_lock);
+ adf_os_spinlock_init(&pHddCtx->thermal_suspend_lock);
INIT_DELAYED_WORK(&pHddCtx->thermal_suspend_work, hdd_thermal_suspend_work);
pHddCtx->thermal_suspend_wq = create_singlethread_workqueue("thermal_wq");
if (!pHddCtx->thermal_suspend_wq)
@@ -16611,7 +16615,7 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc)
init_completion(&pHddCtx->chain_rssi_context.response_event);
- spin_lock_init(&pHddCtx->schedScan_lock);
+ adf_os_spinlock_init(&pHddCtx->schedScan_lock);
hdd_list_init( &pHddCtx->hddAdapters, MAX_NUMBER_OF_ADAPTERS );
@@ -16629,13 +16633,13 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc)
}
#ifdef FEATURE_WLAN_DISABLE_CHANNEL_SWITCH
- spin_lock_init(&pHddCtx->restrict_offchan_lock);
+ adf_os_spinlock_init(&pHddCtx->restrict_offchan_lock);
mutex_init(&pHddCtx->avoid_freq_lock);
#endif
- spin_lock_init(&pHddCtx->dfs_lock);
- spin_lock_init(&pHddCtx->sap_update_info_lock);
- spin_lock_init(&pHddCtx->sta_update_info_lock);
+ adf_os_spinlock_init(&pHddCtx->dfs_lock);
+ adf_os_spinlock_init(&pHddCtx->sap_update_info_lock);
+ adf_os_spinlock_init(&pHddCtx->sta_update_info_lock);
hdd_init_offloaded_packets_ctx(pHddCtx);
// Load all config first as TL config is needed during vos_open
pHddCtx->cfg_ini = (hdd_config_t*) vos_mem_malloc(sizeof(hdd_config_t));
@@ -17435,7 +17439,7 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc)
hdd_skip_acs_scan_timer_handler, (void *)pHddCtx);
if (!VOS_IS_STATUS_SUCCESS(status))
hddLog(LOGE, FL("Failed to init ACS Skip timer\n"));
- spin_lock_init(&pHddCtx->acs_skip_lock);
+ adf_os_spinlock_init(&pHddCtx->acs_skip_lock);
#endif
#ifdef WLAN_FEATURE_NAN
@@ -17522,7 +17526,7 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc)
wlan_hdd_change_tdls_mode, (void *)pHddCtx);
#ifdef FEATURE_BUS_BANDWIDTH
- spin_lock_init(&pHddCtx->bus_bw_lock);
+ adf_os_spinlock_init(&pHddCtx->bus_bw_lock);
vos_timer_init(&pHddCtx->bus_bw_timer,
VOS_TIMER_TYPE_SW,
hdd_bus_bw_compute_cbk,
@@ -17868,6 +17872,7 @@ static inline void hdd_timer_exit(void)
static inline void hdd_mem_exit(void)
{
adf_net_buf_debug_exit();
+ adf_nbuf_map_check_for_leaks();
vos_mem_exit();
}
#else
@@ -17919,6 +17924,7 @@ static int hdd_driver_init( void)
start = adf_get_boottime();
+ adf_os_spinlock_init(&hdd_context_lock);
#ifdef WLAN_LOGGING_SOCK_SVC_ENABLE
wlan_logging_sock_init_svc();
#endif
@@ -18221,6 +18227,7 @@ static void hdd_driver_exit(void)
#endif
#ifdef MEMORY_DEBUG
adf_net_buf_debug_exit();
+ adf_nbuf_map_check_for_leaks();
vos_mem_exit();
#endif
diff --git a/CORE/HDD/src/wlan_hdd_nan_datapath.c b/CORE/HDD/src/wlan_hdd_nan_datapath.c
index feb1a2b64504..ffb9d9fe76fb 100644
--- a/CORE/HDD/src/wlan_hdd_nan_datapath.c
+++ b/CORE/HDD/src/wlan_hdd_nan_datapath.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2017 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2016-2018 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -1926,7 +1926,7 @@ static int __wlan_hdd_cfg80211_process_ndp_cmd(struct wiphy *wiphy,
hddLog(LOGE, FL("NAN datapath is not enabled"));
return -EPERM;
}
- if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_NDP_PARAMS_MAX,
+ if (wlan_cfg80211_nla_parse(tb, QCA_WLAN_VENDOR_ATTR_NDP_PARAMS_MAX,
data, data_len,
qca_wlan_vendor_ndp_policy)) {
hddLog(LOGE, FL("Invalid NDP vendor command attributes"));
diff --git a/CORE/HDD/src/wlan_hdd_ocb.c b/CORE/HDD/src/wlan_hdd_ocb.c
index 663e6cd8bcb0..46b61dff3050 100644
--- a/CORE/HDD/src/wlan_hdd_ocb.c
+++ b/CORE/HDD/src/wlan_hdd_ocb.c
@@ -988,7 +988,7 @@ static int __wlan_hdd_cfg80211_ocb_set_config(struct wiphy *wiphy,
}
/* Parse the netlink message */
- if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_OCB_SET_CONFIG_MAX,
+ if (wlan_cfg80211_nla_parse(tb, QCA_WLAN_VENDOR_ATTR_OCB_SET_CONFIG_MAX,
data,
data_len, qca_wlan_vendor_ocb_set_config_policy)) {
hddLog(LOGE, FL("Invalid ATTR"));
@@ -1226,7 +1226,8 @@ static int __wlan_hdd_cfg80211_ocb_set_utc_time(struct wiphy *wiphy,
}
/* Parse the netlink message */
- if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_OCB_SET_UTC_TIME_MAX,
+ if (wlan_cfg80211_nla_parse(tb,
+ QCA_WLAN_VENDOR_ATTR_OCB_SET_UTC_TIME_MAX,
data,
data_len, qca_wlan_vendor_ocb_set_utc_time_policy)) {
hddLog(LOGE, FL("Invalid ATTR"));
@@ -1350,7 +1351,8 @@ __wlan_hdd_cfg80211_ocb_start_timing_advert(struct wiphy *wiphy,
timing_advert->vdev_id = adapter->sessionId;
/* Parse the netlink message */
- if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_OCB_START_TIMING_ADVERT_MAX,
+ if (wlan_cfg80211_nla_parse(tb,
+ QCA_WLAN_VENDOR_ATTR_OCB_START_TIMING_ADVERT_MAX,
data,
data_len,
qca_wlan_vendor_ocb_start_timing_advert_policy)) {
@@ -1472,7 +1474,8 @@ __wlan_hdd_cfg80211_ocb_stop_timing_advert(struct wiphy *wiphy,
timing_advert->vdev_id = adapter->sessionId;
/* Parse the netlink message */
- if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_OCB_STOP_TIMING_ADVERT_MAX,
+ if (wlan_cfg80211_nla_parse(tb,
+ QCA_WLAN_VENDOR_ATTR_OCB_STOP_TIMING_ADVERT_MAX,
data,
data_len,
qca_wlan_vendor_ocb_stop_timing_advert_policy)) {
@@ -1835,7 +1838,7 @@ static int __wlan_hdd_cfg80211_dcc_get_stats(struct wiphy *wiphy,
}
/* Parse the netlink message */
- if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_DCC_GET_STATS_MAX,
+ if (wlan_cfg80211_nla_parse(tb, QCA_WLAN_VENDOR_ATTR_DCC_GET_STATS_MAX,
data,
data_len,
qca_wlan_vendor_dcc_get_stats)) {
@@ -2007,7 +2010,8 @@ static int __wlan_hdd_cfg80211_dcc_clear_stats(struct wiphy *wiphy,
}
/* Parse the netlink message */
- if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_DCC_CLEAR_STATS_MAX,
+ if (wlan_cfg80211_nla_parse(tb,
+ QCA_WLAN_VENDOR_ATTR_DCC_CLEAR_STATS_MAX,
data,
data_len,
qca_wlan_vendor_dcc_clear_stats)) {
@@ -2140,7 +2144,7 @@ static int __wlan_hdd_cfg80211_dcc_update_ndl(struct wiphy *wiphy,
}
/* Parse the netlink message */
- if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_DCC_UPDATE_NDL_MAX,
+ if (wlan_cfg80211_nla_parse(tb, QCA_WLAN_VENDOR_ATTR_DCC_UPDATE_NDL_MAX,
data,
data_len,
qca_wlan_vendor_dcc_update_ndl)) {
@@ -2325,10 +2329,10 @@ static void wlan_hdd_dsrc_update_radio_chan_stats(
* entry in driver. If possible, driver can post
* the recorders to application.
*/
- spin_lock(&ctx->chan_stats_lock);
+ adf_os_spin_lock(&ctx->chan_stats_lock);
ctx->chan_stats_num = 0;
vos_mem_zero(dest, 2 * sizeof(*dest));
- spin_unlock(&ctx->chan_stats_lock);
+ adf_os_spin_unlock(&ctx->chan_stats_lock);
hddLog(LOGE, FL("Old Chan Stats Data"));
return;
}
@@ -2337,15 +2341,15 @@ static void wlan_hdd_dsrc_update_radio_chan_stats(
/* Save the first channels statistics event in adapter. */
src = resp->chan_stats;
if (!ctx->chan_stats_num) {
- spin_lock(&ctx->chan_stats_lock);
+ adf_os_spin_lock(&ctx->chan_stats_lock);
vos_mem_copy(dest, src, resp->num_chans * sizeof(*src));
ctx->chan_stats_num = resp->num_chans;
- spin_unlock(&ctx->chan_stats_lock);
+ adf_os_spin_unlock(&ctx->chan_stats_lock);
return;
}
/* Merge new received channel statistics data to previous entry. */
- spin_lock(&ctx->chan_stats_lock);
+ adf_os_spin_lock(&ctx->chan_stats_lock);
for (i = 0; i < resp->num_chans; i++, src++) {
struct radio_chan_stats_info *dest_entry = NULL;
struct radio_chan_stats_info *empty_entry = NULL;
@@ -2372,7 +2376,7 @@ static void wlan_hdd_dsrc_update_radio_chan_stats(
vos_mem_copy(empty_entry, src, sizeof(*src));
continue;
} else {
- spin_unlock(&ctx->chan_stats_lock);
+ adf_os_spin_unlock(&ctx->chan_stats_lock);
hddLog(LOGE, FL("No entry found."));
return;
}
@@ -2404,7 +2408,7 @@ static void wlan_hdd_dsrc_update_radio_chan_stats(
dest->rx_succ_pkts += src->rx_succ_pkts;
dest->rx_fail_pkts += src->rx_fail_pkts;
}
- spin_unlock(&ctx->chan_stats_lock);
+ adf_os_spin_unlock(&ctx->chan_stats_lock);
return;
}
@@ -2446,9 +2450,9 @@ static void wlan_hdd_dsrc_radio_chan_stats_event_callback(void *context_ptr,
* 2. Firmware response to the request from Host APP.
* Need check whether current event is response for request.
*/
- spin_lock(&hdd_context_lock);
+ adf_os_spin_lock(&hdd_context_lock);
if ((ctx->magic != HDD_OCB_MAGIC) || (!ctx->cur_req)) {
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
return;
}
req = ctx->cur_req;
@@ -2457,27 +2461,27 @@ static void wlan_hdd_dsrc_radio_chan_stats_event_callback(void *context_ptr,
if ((resp->num_chans == 1) &&
(req->chan_freq == chan_stats->chan_freq)) {
complete(&ctx->completion_evt);
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
return;
}
break;
case WLAN_DSRC_REQUEST_ALL_RADIO_CHAN_STATS:
if (resp->num_chans != ctx->config_chans_num) {
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
return;
}
/* Check response channel is configured. */
for (i = 0; i < resp->num_chans; i++) {
if (chan_stats[i].chan_freq !=
ctx->config_chans_freq[i]) {
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
return;
}
}
complete(&ctx->completion_evt);
break;
}
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
return;
}
@@ -2510,7 +2514,7 @@ int wlan_hdd_dsrc_config_radio_chan_stats(hdd_adapter_t *adapter,
vos_mem_zero(chan_stats, DSRC_MAX_CHAN_STATS_CNT * sizeof(*chan_stats));
if (enable_chan_stats) {
- spin_lock_init(&ctx->chan_stats_lock);
+ adf_os_spinlock_init(&ctx->chan_stats_lock);
ret = sme_register_radio_chan_stats_cb(
((hdd_context_t *)adapter->pHddCtx)->hHal, (void *)ctx,
wlan_hdd_dsrc_radio_chan_stats_event_callback);
@@ -2545,18 +2549,18 @@ int wlan_hdd_dsrc_request_radio_chan_stats(hdd_adapter_t *adapter,
ctx = &adapter->dsrc_chan_stats;
init_completion(&ctx->completion_evt);
- spin_lock(&hdd_context_lock);
+ adf_os_spin_lock(&hdd_context_lock);
ctx->magic = HDD_OCB_MAGIC;
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
if (!wait_for_completion_timeout(&ctx->completion_evt,
msecs_to_jiffies(WLAN_WAIT_TIME_OCB_CMD))) {
hddLog(LOGE, FL("Wait for request completion timedout."));
ret = -ETIMEDOUT;
}
- spin_lock(&hdd_context_lock);
+ adf_os_spin_lock(&hdd_context_lock);
ctx->magic = 0;
- spin_unlock(&hdd_context_lock);
+ adf_os_spin_unlock(&hdd_context_lock);
return ret;
}
diff --git a/CORE/HDD/src/wlan_hdd_p2p.c b/CORE/HDD/src/wlan_hdd_p2p.c
index 74108517c20b..73d00dda50dd 100644
--- a/CORE/HDD/src/wlan_hdd_p2p.c
+++ b/CORE/HDD/src/wlan_hdd_p2p.c
@@ -292,16 +292,16 @@ bool hdd_check_random_mac(hdd_adapter_t *adapter, uint8_t *random_mac_addr)
{
uint32_t i = 0;
- spin_lock(&adapter->random_mac_lock);
+ adf_os_spin_lock(&adapter->random_mac_lock);
for (i = 0; i < MAX_RANDOM_MAC_ADDRS; i++) {
if ((adapter->random_mac[i].in_use) &&
(!memcmp(adapter->random_mac[i].addr, random_mac_addr,
VOS_MAC_ADDR_SIZE))) {
- spin_unlock(&adapter->random_mac_lock);
+ adf_os_spin_unlock(&adapter->random_mac_lock);
return true;
}
}
- spin_unlock(&adapter->random_mac_lock);
+ adf_os_spin_unlock(&adapter->random_mac_lock);
return false;
}
@@ -434,7 +434,7 @@ static int32_t hdd_set_action_frame_random_mac(hdd_adapter_t *adapter,
hddLog(LOG1, FL("mac_addr: " MAC_ADDRESS_STR " && cookie = %llu"),
MAC_ADDR_ARRAY(random_mac_addr), cookie);
- spin_lock(&adapter->random_mac_lock);
+ adf_os_spin_lock(&adapter->random_mac_lock);
for (i = 0; i < MAX_RANDOM_MAC_ADDRS; i++) {
if (adapter->random_mac[i].in_use) {
in_use_cnt++;
@@ -448,7 +448,7 @@ static int32_t hdd_set_action_frame_random_mac(hdd_adapter_t *adapter,
append_ret = append_action_frame_cookie(
&adapter->random_mac[i].cookie_list,
cookie);
- spin_unlock(&adapter->random_mac_lock);
+ adf_os_spin_unlock(&adapter->random_mac_lock);
if(append_ret == -ENOMEM) {
hddLog(LOGE, FL("No Sufficient memory for cookie"));
@@ -466,7 +466,7 @@ static int32_t hdd_set_action_frame_random_mac(hdd_adapter_t *adapter,
if ((in_use_cnt == MAX_RANDOM_MAC_ADDRS)
|| (i == MAX_RANDOM_MAC_ADDRS)) {
- spin_unlock(&adapter->random_mac_lock);
+ adf_os_spin_unlock(&adapter->random_mac_lock);
hddLog(LOGE, FL("Reached the limit of Max random addresses"));
return -EBUSY;
}
@@ -475,21 +475,21 @@ static int32_t hdd_set_action_frame_random_mac(hdd_adapter_t *adapter,
action_cookie = allocate_action_frame_cookie(&adapter->random_mac[i].cookie_list,
cookie);
if(!action_cookie) {
- spin_unlock(&adapter->random_mac_lock);
+ adf_os_spin_unlock(&adapter->random_mac_lock);
hddLog(LOGE, FL("No Sufficient memory for cookie"));
return -ENOMEM;
}
vos_mem_copy(adapter->random_mac[i].addr, random_mac_addr,
VOS_MAC_ADDR_SIZE);
adapter->random_mac[i].in_use = true;
- spin_unlock(&adapter->random_mac_lock);
+ adf_os_spin_unlock(&adapter->random_mac_lock);
/* Program random mac_addr */
if (!hdd_set_random_mac(adapter, adapter->random_mac[i].addr)) {
- spin_lock(&adapter->random_mac_lock);
+ adf_os_spin_lock(&adapter->random_mac_lock);
/* clear the cookie */
delete_action_frame_cookie(action_cookie);
adapter->random_mac[i].in_use = false;
- spin_unlock(&adapter->random_mac_lock);
+ adf_os_spin_unlock(&adapter->random_mac_lock);
hddLog(LOGE, FL("random mac filter set failed for: "
MAC_ADDRESS_STR),
MAC_ADDR_ARRAY(adapter->random_mac[i].addr));
@@ -527,7 +527,7 @@ static int32_t hdd_reset_action_frame_random_mac(hdd_adapter_t *adapter,
hddLog(LOG1, FL("mac_addr: " MAC_ADDRESS_STR " && cookie = %llu"),
MAC_ADDR_ARRAY(random_mac_addr), cookie);
- spin_lock(&adapter->random_mac_lock);
+ adf_os_spin_lock(&adapter->random_mac_lock);
for (i = 0; i < MAX_RANDOM_MAC_ADDRS; i++) {
if ((adapter->random_mac[i].in_use) &&
(!memcmp(adapter->random_mac[i].addr,
@@ -536,7 +536,7 @@ static int32_t hdd_reset_action_frame_random_mac(hdd_adapter_t *adapter,
}
if (i == MAX_RANDOM_MAC_ADDRS) {
- spin_unlock(&adapter->random_mac_lock);
+ adf_os_spin_unlock(&adapter->random_mac_lock);
hddLog(LOGE, FL("trying to delete cookie of random mac-addr"
" for which entry is not present"));
return -EINVAL;
@@ -546,7 +546,7 @@ static int32_t hdd_reset_action_frame_random_mac(hdd_adapter_t *adapter,
cookie);
if (!action_cookie) {
- spin_unlock(&adapter->random_mac_lock);
+ adf_os_spin_unlock(&adapter->random_mac_lock);
hddLog(LOG1, FL("No cookie matches"));
return 0;
}
@@ -554,7 +554,7 @@ static int32_t hdd_reset_action_frame_random_mac(hdd_adapter_t *adapter,
delete_action_frame_cookie(action_cookie);
if (list_empty(&adapter->random_mac[i].cookie_list)) {
adapter->random_mac[i].in_use = false;
- spin_unlock(&adapter->random_mac_lock);
+ adf_os_spin_unlock(&adapter->random_mac_lock);
hdd_clear_random_mac(adapter, random_mac_addr);
hddLog(LOG1, FL("Deleted random mac_addr:"
MAC_ADDRESS_STR),
@@ -562,7 +562,7 @@ static int32_t hdd_reset_action_frame_random_mac(hdd_adapter_t *adapter,
return 0;
}
- spin_unlock(&adapter->random_mac_lock);
+ adf_os_spin_unlock(&adapter->random_mac_lock);
return 0;
}
@@ -585,7 +585,7 @@ static int32_t hdd_delete_action_frame_cookie(hdd_adapter_t *adapter,
hddLog(LOG1, FL("Delete cookie = %llu"), cookie);
- spin_lock(&adapter->random_mac_lock);
+ adf_os_spin_lock(&adapter->random_mac_lock);
for (i = 0; i < MAX_RANDOM_MAC_ADDRS; i++) {
if (!adapter->random_mac[i].in_use)
continue;
@@ -600,18 +600,18 @@ static int32_t hdd_delete_action_frame_cookie(hdd_adapter_t *adapter,
if (list_empty(&adapter->random_mac[i].cookie_list)) {
adapter->random_mac[i].in_use = false;
- spin_unlock(&adapter->random_mac_lock);
+ adf_os_spin_unlock(&adapter->random_mac_lock);
hdd_clear_random_mac(adapter,
adapter->random_mac[i].addr);
hddLog(LOG1, FL("Deleted random addr "MAC_ADDRESS_STR),
MAC_ADDR_ARRAY(adapter->random_mac[i].addr));
return 0;
}
- spin_unlock(&adapter->random_mac_lock);
+ adf_os_spin_unlock(&adapter->random_mac_lock);
return 0;
}
- spin_unlock(&adapter->random_mac_lock);
+ adf_os_spin_unlock(&adapter->random_mac_lock);
hddLog(LOG1, FL("Invalid cookie"));
return -EINVAL;
}
@@ -632,7 +632,7 @@ static void hdd_delete_all_action_frame_cookies(hdd_adapter_t *adapter)
struct list_head *n;
struct list_head *temp;
- spin_lock(&adapter->random_mac_lock);
+ adf_os_spin_lock(&adapter->random_mac_lock);
for (i = 0; i < MAX_RANDOM_MAC_ADDRS; i++) {
@@ -650,14 +650,14 @@ static void hdd_delete_all_action_frame_cookies(hdd_adapter_t *adapter)
}
adapter->random_mac[i].in_use = false;
- spin_unlock(&adapter->random_mac_lock);
+ adf_os_spin_unlock(&adapter->random_mac_lock);
hdd_clear_random_mac(adapter, adapter->random_mac[i].addr);
hddLog(LOG1, FL("Deleted random addr " MAC_ADDRESS_STR),
MAC_ADDR_ARRAY(adapter->random_mac[i].addr));
- spin_lock(&adapter->random_mac_lock);
+ adf_os_spin_lock(&adapter->random_mac_lock);
}
- spin_unlock(&adapter->random_mac_lock);
+ adf_os_spin_unlock(&adapter->random_mac_lock);
}
static eHalStatus
@@ -1286,10 +1286,10 @@ static int wlan_hdd_roc_request_enqueue(hdd_adapter_t *adapter,
hdd_roc_req->pRemainChanCtx = remain_chan_ctx;
/* Enqueue this RoC request */
- spin_lock(&hdd_ctx->hdd_roc_req_q.lock);
+ adf_os_spin_lock(&hdd_ctx->hdd_roc_req_q.lock);
status = hdd_list_insert_back(&hdd_ctx->hdd_roc_req_q,
&hdd_roc_req->node);
- spin_unlock(&hdd_ctx->hdd_roc_req_q.lock);
+ adf_os_spin_unlock(&hdd_ctx->hdd_roc_req_q.lock);
if (VOS_STATUS_SUCCESS != status) {
hddLog(LOGP, FL("Not able to enqueue RoC Req context"));
@@ -1368,14 +1368,14 @@ void wlan_hdd_roc_request_dequeue(struct work_struct *work)
* that any pending roc in the queue will be scheduled
* on the current roc completion by scheduling the work queue.
*/
- spin_lock(&hdd_ctx->hdd_roc_req_q.lock);
+ adf_os_spin_lock(&hdd_ctx->hdd_roc_req_q.lock);
if (list_empty(&hdd_ctx->hdd_roc_req_q.anchor)) {
- spin_unlock(&hdd_ctx->hdd_roc_req_q.lock);
+ adf_os_spin_unlock(&hdd_ctx->hdd_roc_req_q.lock);
return;
}
status = hdd_list_remove_front(&hdd_ctx->hdd_roc_req_q,
(hdd_list_node_t **) &hdd_roc_req);
- spin_unlock(&hdd_ctx->hdd_roc_req_q.lock);
+ adf_os_spin_unlock(&hdd_ctx->hdd_roc_req_q.lock);
if (VOS_STATUS_SUCCESS != status) {
hddLog(LOG1, FL("unable to remove roc element from list"));
return;
@@ -1756,13 +1756,13 @@ int __wlan_hdd_cfg80211_cancel_remain_on_channel( struct wiphy *wiphy,
}
/* Remove RoC request inside queue */
- spin_lock(&pHddCtx->hdd_roc_req_q.lock);
+ adf_os_spin_lock(&pHddCtx->hdd_roc_req_q.lock);
list_for_each_safe(tmp, q, &pHddCtx->hdd_roc_req_q.anchor) {
curr_roc_req = list_entry(tmp, hdd_roc_req_t, node);
if ((uintptr_t)curr_roc_req->pRemainChanCtx == cookie) {
status = hdd_list_remove_node(&pHddCtx->hdd_roc_req_q,
(hdd_list_node_t*)curr_roc_req);
- spin_unlock(&pHddCtx->hdd_roc_req_q.lock);
+ adf_os_spin_unlock(&pHddCtx->hdd_roc_req_q.lock);
if (status == VOS_STATUS_SUCCESS) {
vos_mem_free(curr_roc_req->pRemainChanCtx);
vos_mem_free(curr_roc_req);
@@ -1770,7 +1770,7 @@ int __wlan_hdd_cfg80211_cancel_remain_on_channel( struct wiphy *wiphy,
return 0;
}
}
- spin_unlock(&pHddCtx->hdd_roc_req_q.lock);
+ adf_os_spin_unlock(&pHddCtx->hdd_roc_req_q.lock);
/* FIXME cancel currently running remain on chan.
* Need to check cookie and cancel accordingly
@@ -3008,7 +3008,23 @@ struct wireless_dev* __wlan_hdd_add_virtual_intf(
#endif
}
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 0))
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0)
+struct wireless_dev *wlan_hdd_add_virtual_intf(struct wiphy *wiphy,
+ const char *name,
+ unsigned char name_assign_type,
+ enum nl80211_iftype type,
+ struct vif_params *params)
+{
+ struct wireless_dev *wdev;
+
+ vos_ssr_protect(__func__);
+ wdev = __wlan_hdd_add_virtual_intf(wiphy, name, name_assign_type,
+ type, &params->flags, params);
+ vos_ssr_unprotect(__func__);
+
+ return wdev;
+}
+#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 0))
/**
* wlan_hdd_add_virtual_intf() - Add virtual interface wrapper
* @wiphy: wiphy pointer
diff --git a/CORE/HDD/src/wlan_hdd_softap_tx_rx.c b/CORE/HDD/src/wlan_hdd_softap_tx_rx.c
index 9a370a153561..e1e10f78e72f 100644
--- a/CORE/HDD/src/wlan_hdd_softap_tx_rx.c
+++ b/CORE/HDD/src/wlan_hdd_softap_tx_rx.c
@@ -82,7 +82,7 @@ static VOS_STATUS hdd_softap_flush_tx_queues( hdd_adapter_t *pAdapter )
skb_list_node_t *pktNode = NULL;
struct sk_buff *skb = NULL;
- spin_lock_bh( &pAdapter->staInfo_lock );
+ adf_os_spin_lock_bh( &pAdapter->staInfo_lock );
for (STAId = 0; STAId < WLAN_MAX_STA_COUNT; STAId++)
{
if (FALSE == pAdapter->aStaInfo[STAId].isUsed)
@@ -92,7 +92,7 @@ static VOS_STATUS hdd_softap_flush_tx_queues( hdd_adapter_t *pAdapter )
for (i = 0; i < NUM_TX_QUEUES; i ++)
{
- spin_lock_bh(&pAdapter->aStaInfo[STAId].wmm_tx_queue[i].lock);
+ adf_os_spin_lock_bh(&pAdapter->aStaInfo[STAId].wmm_tx_queue[i].lock);
while (true)
{
status = hdd_list_remove_front ( &pAdapter->aStaInfo[STAId].wmm_tx_queue[i], &anchor);
@@ -111,12 +111,12 @@ static VOS_STATUS hdd_softap_flush_tx_queues( hdd_adapter_t *pAdapter )
break;
}
pAdapter->aStaInfo[STAId].txSuspended[i] = VOS_FALSE;
- spin_unlock_bh(&pAdapter->aStaInfo[STAId].wmm_tx_queue[i].lock);
+ adf_os_spin_unlock_bh(&pAdapter->aStaInfo[STAId].wmm_tx_queue[i].lock);
}
pAdapter->aStaInfo[STAId].vosLowResource = VOS_FALSE;
}
- spin_unlock_bh( &pAdapter->staInfo_lock );
+ adf_os_spin_unlock_bh( &pAdapter->staInfo_lock );
return status;
}
@@ -628,7 +628,7 @@ VOS_STATUS hdd_softap_init_tx_rx( hdd_adapter_t *pAdapter )
pAdapter->aTxQueueLimit[WLANTL_AC_VI] = HDD_SOFTAP_TX_VI_QUEUE_MAX_LEN;
pAdapter->aTxQueueLimit[WLANTL_AC_VO] = HDD_SOFTAP_TX_VO_QUEUE_MAX_LEN;
- spin_lock_init( &pAdapter->staInfo_lock );
+ adf_os_spinlock_init( &pAdapter->staInfo_lock );
for (STAId = 0; STAId < WLAN_MAX_STA_COUNT; STAId++)
{
@@ -680,7 +680,7 @@ static void hdd_softap_flush_tx_queues_sta( hdd_adapter_t *pAdapter, v_U8_t STAI
for (i = 0; i < NUM_TX_QUEUES; i ++)
{
- spin_lock_bh(&pAdapter->aStaInfo[STAId].wmm_tx_queue[i].lock);
+ adf_os_spin_lock_bh(&pAdapter->aStaInfo[STAId].wmm_tx_queue[i].lock);
while (true)
{
if (VOS_STATUS_E_EMPTY !=
@@ -698,7 +698,7 @@ static void hdd_softap_flush_tx_queues_sta( hdd_adapter_t *pAdapter, v_U8_t STAI
//current list is empty
break;
}
- spin_unlock_bh(&pAdapter->aStaInfo[STAId].wmm_tx_queue[i].lock);
+ adf_os_spin_unlock_bh(&pAdapter->aStaInfo[STAId].wmm_tx_queue[i].lock);
}
return;
@@ -717,12 +717,12 @@ static void hdd_softap_flush_tx_queues_sta( hdd_adapter_t *pAdapter, v_U8_t STAI
VOS_STATUS hdd_softap_init_tx_rx_sta( hdd_adapter_t *pAdapter, v_U8_t STAId, v_MACADDR_t *pmacAddrSTA)
{
v_U8_t i = 0;
- spin_lock_bh( &pAdapter->staInfo_lock );
+ adf_os_spin_lock_bh( &pAdapter->staInfo_lock );
if (pAdapter->aStaInfo[STAId].isUsed)
{
VOS_TRACE( VOS_MODULE_ID_HDD_SAP_DATA, VOS_TRACE_LEVEL_ERROR,
"%s: Reinit station %d", __func__, STAId );
- spin_unlock_bh( &pAdapter->staInfo_lock );
+ adf_os_spin_unlock_bh( &pAdapter->staInfo_lock );
return VOS_STATUS_E_FAILURE;
}
@@ -736,7 +736,7 @@ VOS_STATUS hdd_softap_init_tx_rx_sta( hdd_adapter_t *pAdapter, v_U8_t STAId, v_M
pAdapter->aStaInfo[STAId].isDeauthInProgress = FALSE;
vos_copy_macaddr( &pAdapter->aStaInfo[STAId].macAddrSTA, pmacAddrSTA);
- spin_unlock_bh( &pAdapter->staInfo_lock );
+ adf_os_spin_unlock_bh( &pAdapter->staInfo_lock );
return VOS_STATUS_SUCCESS;
}
@@ -761,12 +761,12 @@ VOS_STATUS hdd_softap_deinit_tx_rx_sta ( hdd_adapter_t *pAdapter, v_U8_t STAId )
pHostapdState = WLAN_HDD_GET_HOSTAP_STATE_PTR(pAdapter);
- spin_lock_bh( &pAdapter->staInfo_lock );
+ adf_os_spin_lock_bh( &pAdapter->staInfo_lock );
if (FALSE == pAdapter->aStaInfo[STAId].isUsed)
{
VOS_TRACE( VOS_MODULE_ID_HDD_SAP_DATA, VOS_TRACE_LEVEL_ERROR,
"%s: Deinit station not inited %d", __func__, STAId );
- spin_unlock_bh( &pAdapter->staInfo_lock );
+ adf_os_spin_unlock_bh( &pAdapter->staInfo_lock );
return VOS_STATUS_E_FAILURE;
}
@@ -814,7 +814,7 @@ VOS_STATUS hdd_softap_deinit_tx_rx_sta ( hdd_adapter_t *pAdapter, v_U8_t STAId )
}
}
- spin_unlock_bh( &pAdapter->staInfo_lock );
+ adf_os_spin_unlock_bh( &pAdapter->staInfo_lock );
return status;
}
@@ -1009,7 +1009,7 @@ VOS_STATUS hdd_softap_DeregisterSTA( hdd_adapter_t *pAdapter, tANI_U8 staId )
}
if (pAdapter->aStaInfo[staId].isUsed) {
- spin_lock_bh( &pAdapter->staInfo_lock );
+ adf_os_spin_lock_bh( &pAdapter->staInfo_lock );
vos_mem_zero(&pAdapter->aStaInfo[staId], sizeof(hdd_station_info_t));
/* re-init spin lock, since netdev can still open adapter until
@@ -1020,7 +1020,7 @@ VOS_STATUS hdd_softap_DeregisterSTA( hdd_adapter_t *pAdapter, tANI_U8 staId )
hdd_list_init(&pAdapter->aStaInfo[staId].wmm_tx_queue[i],
HDD_TX_QUEUE_MAX_LEN);
}
- spin_unlock_bh( &pAdapter->staInfo_lock );
+ adf_os_spin_unlock_bh( &pAdapter->staInfo_lock );
}
pHddCtx->sta_to_adapter[staId] = NULL;
diff --git a/CORE/HDD/src/wlan_hdd_tsf.c b/CORE/HDD/src/wlan_hdd_tsf.c
index 8ce23b344f49..6ad7f14af2c6 100644
--- a/CORE/HDD/src/wlan_hdd_tsf.c
+++ b/CORE/HDD/src/wlan_hdd_tsf.c
@@ -33,7 +33,10 @@
#include "wlan_hdd_tsf.h"
#include "wma_api.h"
#include <linux/errqueue.h>
-
+#if defined(CONFIG_NON_QC_PLATFORM)
+#include <linux/gpio.h>
+int irq_tsf = -1;
+#endif
/**
* enum hdd_tsf_op_result - result of tsf operation
*
@@ -207,7 +210,6 @@ static enum hdd_tsf_op_result hdd_indicate_tsf_internal(
{
int ret;
hdd_context_t *hddctx;
-
if (adapter == NULL || buf == NULL) {
hddLog(VOS_TRACE_LEVEL_ERROR,
FL("invalid pointer"));
@@ -280,13 +282,21 @@ static enum hdd_tsf_op_result hdd_indicate_tsf_internal(
* to distinguish 32-bit overflow case, this inverval should:
* equal or less than (1/2 * OVERFLOW_INDICATOR32 us)
*/
+#if defined(CONFIG_NON_QC_PLATFORM)
+#define WLAN_HDD_CAPTURE_TSF_INTERVAL_SEC 2
+#else
#define WLAN_HDD_CAPTURE_TSF_INTERVAL_SEC 10
+#endif
#define WLAN_HDD_CAPTURE_TSF_INIT_INTERVAL_MS 100
#define OVERFLOW_INDICATOR32 (((int64_t)0x1) << 32)
#define MAX_UINT64 ((uint64_t)0xffffffffffffffff)
#define MASK_UINT32 0xffffffff
#define CAP_TSF_TIMER_FIX_SEC 1
+#if defined(CONFIG_NON_QC_PLATFORM)
+#define WLAN_HDD_CAPTURE_TSF_RESYNC_INTERVAL 1
+#else
#define WLAN_HDD_CAPTURE_TSF_RESYNC_INTERVAL 9
+#endif
/**
* TS_STATUS - timestamp status
@@ -345,12 +355,12 @@ enum hdd_tsf_op_result __hdd_stop_tsf_sync(hdd_adapter_t *adapter)
static inline void hdd_reset_timestamps(hdd_adapter_t *adapter)
{
- spin_lock_bh(&adapter->host_target_sync_lock);
+ adf_os_spin_lock_bh(&adapter->host_target_sync_lock);
adapter->cur_host_time = 0;
adapter->cur_target_time = 0;
adapter->last_host_time = 0;
adapter->last_target_time = 0;
- spin_unlock_bh(&adapter->host_target_sync_lock);
+ adf_os_spin_unlock_bh(&adapter->host_target_sync_lock);
}
/**
@@ -414,9 +424,13 @@ enum hdd_ts_status hdd_check_timestamp_status(
/* the deviation should be smaller than a threshold */
if (delta_ns > MAX_ALLOWED_DEVIATION_NS) {
hddLog(VOS_TRACE_LEVEL_ERROR,
- FL("Invalid timestamps - delta: %llu ns"), delta_ns);
+ FL("Invalid timestamps - delta: %llu ns"), delta_ns);
return HDD_TS_STATUS_INVALID;
+ } else {
+ hddLog(VOS_TRACE_LEVEL_DEBUG,
+ FL("valid timestamps - delta: %llu ns"), delta_ns);
}
+
return HDD_TS_STATUS_READY;
}
@@ -441,7 +455,7 @@ static void hdd_update_timestamp(hdd_adapter_t *adapter,
return;
}
- spin_lock_bh(&adapter->host_target_sync_lock);
+ adf_os_spin_lock_bh(&adapter->host_target_sync_lock);
if (target_time > 0)
adapter->cur_target_time = target_time;
@@ -494,7 +508,7 @@ static void hdd_update_timestamp(hdd_adapter_t *adapter,
interval = 0;
break;
}
- spin_unlock_bh(&adapter->host_target_sync_lock);
+ adf_os_spin_unlock_bh(&adapter->host_target_sync_lock);
if (interval > 0)
vos_timer_start(&adapter->host_target_sync_timer, interval);
@@ -570,7 +584,7 @@ static inline int32_t hdd_get_hosttime_from_targettime(
* (the tstamp-pair won't be changed)
*/
if (in_cap_state)
- spin_lock_bh(&adapter->host_target_sync_lock);
+ adf_os_spin_lock_bh(&adapter->host_target_sync_lock);
/* at present, target_time is only 32bit in fact */
delta32_target = (int64_t)((target_time & MASK_UINT32) -
@@ -593,7 +607,7 @@ static inline int32_t hdd_get_hosttime_from_targettime(
host_time);
if (in_cap_state)
- spin_unlock_bh(&adapter->host_target_sync_lock);
+ adf_os_spin_unlock_bh(&adapter->host_target_sync_lock);
return ret;
}
@@ -610,7 +624,7 @@ static inline int32_t hdd_get_targettime_from_hosttime(
in_cap_state = hdd_tsf_is_in_cap(adapter);
if (in_cap_state)
- spin_lock_bh(&adapter->host_target_sync_lock);
+ adf_os_spin_lock_bh(&adapter->host_target_sync_lock);
if (host_time < adapter->last_host_time)
ret = hdd_uint64_minus(adapter->last_target_time,
@@ -626,7 +640,7 @@ static inline int32_t hdd_get_targettime_from_hosttime(
target_time);
if (in_cap_state)
- spin_unlock_bh(&adapter->host_target_sync_lock);
+ adf_os_spin_unlock_bh(&adapter->host_target_sync_lock);
return ret;
}
@@ -641,10 +655,12 @@ static ssize_t __hdd_wlan_tsf_show(struct device *dev,
struct device_attribute *attr, char *buf)
{
hdd_station_ctx_t *hdd_sta_ctx;
+ hdd_ap_ctx_t *hdd_ap_ctx;
hdd_adapter_t *adapter;
hdd_context_t *hdd_ctx;
ssize_t size;
uint64_t host_time, target_time;
+ uint8_t *bssid;
struct net_device *net_dev = container_of(dev, struct net_device, dev);
@@ -656,22 +672,32 @@ static ssize_t __hdd_wlan_tsf_show(struct device *dev,
return scnprintf(buf, PAGE_SIZE,
"TSF sync is not initialized\n");
- hdd_sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(adapter);
- if (eConnectionState_Associated != hdd_sta_ctx->conn_info.connState)
- return scnprintf(buf, PAGE_SIZE, "NOT connected\n");
-
hdd_ctx = WLAN_HDD_GET_CTX(adapter);
if (!hdd_ctx)
return scnprintf(buf, PAGE_SIZE, "Invalid HDD context\n");
+ if (adapter->device_mode == WLAN_HDD_INFRA_STATION ||
+ adapter->device_mode == WLAN_HDD_P2P_CLIENT) {
+ hdd_sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(adapter);
+ if (eConnectionState_Associated !=
+ hdd_sta_ctx->conn_info.connState)
+ return scnprintf(buf, PAGE_SIZE, "NOT connected\n");
+ bssid = hdd_sta_ctx->conn_info.bssId;
+ } else if (adapter->device_mode == WLAN_HDD_SOFTAP ||
+ adapter->device_mode == WLAN_HDD_P2P_GO) {
+ hdd_ap_ctx = WLAN_HDD_GET_AP_CTX_PTR(adapter);
+ bssid = hdd_ap_ctx->sapConfig.self_macaddr.bytes;
+ } else {
+ return scnprintf(buf, PAGE_SIZE, "Invalid interface\n");
+ }
+
host_time = hdd_get_monotonic_host_time(hdd_ctx);
if (hdd_get_targettime_from_hosttime(adapter, host_time,
&target_time))
size = scnprintf(buf, PAGE_SIZE, "Invalid timestamp\n");
else
size = scnprintf(buf, PAGE_SIZE, "%s%llu %llu %pM\n",
- buf, target_time, host_time,
- hdd_sta_ctx->conn_info.bssId);
+ buf, target_time, host_time, bssid);
return size;
}
@@ -711,6 +737,10 @@ static irqreturn_t hdd_tsf_captured_irq_handler(int irq, void *arg)
if (!arg)
return IRQ_NONE;
+#if defined(CONFIG_NON_QC_PLATFORM)
+ if (irq != irq_tsf)
+ return IRQ_NONE;
+#endif
hdd_ctx = (hdd_context_t *)arg;
host_time = hdd_get_monotonic_host_time(hdd_ctx);
@@ -760,10 +790,10 @@ static void hdd_capture_req_timer_expired_handler(void *arg)
return;
}
- spin_lock_bh(&adapter->host_target_sync_lock);
+ adf_os_spin_lock_bh(&adapter->host_target_sync_lock);
adapter->cur_host_time = 0;
adapter->cur_target_time = 0;
- spin_unlock_bh(&adapter->host_target_sync_lock);
+ adf_os_spin_unlock_bh(&adapter->host_target_sync_lock);
ret = hdd_reset_tsf_gpio(adapter);
if (0 != ret)
@@ -812,7 +842,7 @@ static enum hdd_tsf_op_result hdd_tsf_sync_init(hdd_adapter_t *adapter)
return HDD_TSF_OP_SUCC;
}
- spin_lock_init(&adapter->host_target_sync_lock);
+ adf_os_spinlock_init(&adapter->host_target_sync_lock);
hdd_reset_timestamps(adapter);
@@ -1046,6 +1076,99 @@ static inline int __hdd_indicate_tsf(hdd_adapter_t *adapter,
return 0;
}
+#if defined(CONFIG_NON_QC_PLATFORM)
+/**
+ * wlan_hdd_tsf_plus_init() - tsf plus init
+ * @hdd_ctx: pointer to the hdd_contex.
+ *
+ * Return: Describe the execute result of this routine
+ */
+static inline
+enum hdd_tsf_op_result wlan_hdd_tsf_plus_init(hdd_context_t *hdd_ctx)
+{
+ int ret;
+
+ if (!HDD_TSF_IS_PTP_ENABLED(hdd_ctx)) {
+ hddLog(VOS_TRACE_LEVEL_ERROR,
+ FL("To enable TSF_PLUS, set gtsf_ptp_options in ini"));
+ goto fail;
+ }
+
+ if (hdd_ctx->cfg_ini->tsf_gpio_pin_host == TSF_GPIO_PIN_INVALID) {
+ hddLog(VOS_TRACE_LEVEL_ERROR,
+ FL("gpio host pin is invalid %d"),
+ hdd_ctx->cfg_ini->tsf_gpio_pin_host);
+ goto fail;
+ }
+
+ ret = gpio_request(hdd_ctx->cfg_ini->tsf_gpio_pin_host, "wlan_tsf");
+ if (ret) {
+ hddLog(VOS_TRACE_LEVEL_ERROR,
+ FL("%s: fail to request irq, gpio %d\n"), __func__,
+ hdd_ctx->cfg_ini->tsf_gpio_pin_host);
+ goto fail;
+ }
+
+ ret = gpio_direction_input(hdd_ctx->cfg_ini->tsf_gpio_pin_host);
+ if (ret) {
+ hddLog(VOS_TRACE_LEVEL_ERROR,
+ FL("Failed to set gpio dir %d\n"), ret);
+ goto fail_free_gpio;
+ }
+
+ irq_tsf = gpio_to_irq(hdd_ctx->cfg_ini->tsf_gpio_pin_host);
+ if (irq_tsf < 0) {
+ hddLog(VOS_TRACE_LEVEL_ERROR,
+ FL("%s: fail to get irq: %d\n"), __func__, irq_tsf);
+ goto fail_free_gpio;
+ }
+
+ ret = request_irq(irq_tsf, hdd_tsf_captured_irq_handler,
+ IRQF_SHARED | IRQF_TRIGGER_RISING, "wlan_tsf",
+ (void *)hdd_ctx);
+
+ if (ret) {
+ hddLog(VOS_TRACE_LEVEL_ERROR,
+ FL("Failed to register irq handler: %d"), ret);
+ goto fail_free_gpio;
+ }
+
+ if (HDD_TSF_IS_TX_SET(hdd_ctx))
+ ol_register_timestamp_callback(hdd_tx_timestamp);
+
+ return HDD_TSF_OP_SUCC;
+
+fail_free_gpio:
+ gpio_free(hdd_ctx->cfg_ini->tsf_gpio_pin_host);
+fail:
+ irq_tsf = -1;
+ return HDD_TSF_OP_FAIL;
+}
+
+/**
+ * wlan_hdd_tsf_plus_deinit() - tsf plus deinit
+ * @hdd_ctx: pointer to the hdd_contex.
+ *
+ * Return: Describe the execute result of this routine
+ */
+static inline
+enum hdd_tsf_op_result wlan_hdd_tsf_plus_deinit(hdd_context_t *hdd_ctx)
+{
+ if (!HDD_TSF_IS_PTP_ENABLED(hdd_ctx))
+ return HDD_TSF_OP_SUCC;
+
+ if (HDD_TSF_IS_TX_SET(hdd_ctx))
+ ol_deregister_timestamp_callback();
+
+ if (irq_tsf >= 0) {
+ free_irq(irq_tsf, (void *)hdd_ctx);
+ irq_tsf = -1;
+ gpio_free(hdd_ctx->cfg_ini->tsf_gpio_pin_host);
+ }
+
+ return HDD_TSF_OP_SUCC;
+}
+#else
static inline
enum hdd_tsf_op_result wlan_hdd_tsf_plus_init(hdd_context_t *hdd_ctx)
{
@@ -1056,7 +1179,6 @@ enum hdd_tsf_op_result wlan_hdd_tsf_plus_init(hdd_context_t *hdd_ctx)
FL("To enable TSF_PLUS, set gtsf_ptp_options in ini"));
return HDD_TSF_OP_FAIL;
}
-
ret = cnss_common_register_tsf_captured_handler(
hdd_ctx->parent_dev,
hdd_tsf_captured_irq_handler,
@@ -1066,7 +1188,6 @@ enum hdd_tsf_op_result wlan_hdd_tsf_plus_init(hdd_context_t *hdd_ctx)
FL("Failed to register irq handler: %d"), ret);
return HDD_TSF_OP_FAIL;
}
-
if (HDD_TSF_IS_TX_SET(hdd_ctx))
ol_register_timestamp_callback(hdd_tx_timestamp);
@@ -1096,6 +1217,7 @@ enum hdd_tsf_op_result wlan_hdd_tsf_plus_deinit(hdd_context_t *hdd_ctx)
return HDD_TSF_OP_SUCC;
}
+#endif
void hdd_tsf_notify_wlan_state_change(hdd_adapter_t *adapter,
eConnectionState old_state,
@@ -1191,6 +1313,176 @@ int hdd_indicate_tsf(hdd_adapter_t *adapter, uint32_t *buf, int len)
return __hdd_indicate_tsf(adapter, buf, len);
}
+#ifdef WLAN_FEATURE_TSF_PTP
+int wlan_get_ts_info(struct net_device *dev, struct ethtool_ts_info *info)
+
+{
+ hdd_adapter_t *adapter = netdev_priv(dev);
+ hdd_context_t *hdd_ctx;
+
+ hdd_ctx = WLAN_HDD_GET_CTX(adapter);
+ if (!hdd_ctx) {
+ hddLog(VOS_TRACE_LEVEL_ERROR, FL("invalid hdd context"));
+ return -EINVAL;
+ }
+
+ info->so_timestamping = SOF_TIMESTAMPING_TX_HARDWARE |
+ SOF_TIMESTAMPING_RX_HARDWARE |
+ SOF_TIMESTAMPING_RAW_HARDWARE;
+ if (hdd_ctx->ptp_clock)
+ info->phc_index = ptp_clock_index(hdd_ctx->ptp_clock);
+ else
+ info->phc_index = -1;
+
+ return 0;
+}
+
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 1, 0))
+/**
+ * wlan_ptp_gettime() - return fw ts info to uplayer
+ * @ptp: pointer to ptp_clock_info.
+ * @ts: pointer to timespec.
+ *
+ * Return: Describe the execute result of this routine
+ */
+static int wlan_ptp_gettime(struct ptp_clock_info *ptp, struct timespec *ts)
+{
+ uint64_t host_time, target_time = 0;
+ VosContextType *pVosContext = NULL;
+ hdd_context_t *pHddCtx = NULL;
+ hdd_adapter_t *adapter = NULL;
+
+ pVosContext = vos_get_global_context(VOS_MODULE_ID_HDD, NULL);
+ pHddCtx = (hdd_context_t *)vos_get_context(VOS_MODULE_ID_HDD,
+ pVosContext);
+ if (!pHddCtx) {
+ hddLog(VOS_TRACE_LEVEL_ERROR, FL("invalid hdd context"));
+ return -EINVAL;
+ }
+
+ adapter = hdd_get_adapter(pHddCtx, WLAN_HDD_P2P_GO);
+ if (!adapter) {
+ adapter = hdd_get_adapter(pHddCtx, WLAN_HDD_P2P_CLIENT);
+ if (!adapter) {
+ adapter = hdd_get_adapter(pHddCtx, WLAN_HDD_SOFTAP);
+ if (!adapter)
+ adapter = hdd_get_adapter(pHddCtx,
+ WLAN_HDD_INFRA_STATION);
+ }
+ }
+
+ host_time = hdd_get_monotonic_host_time(pHddCtx);
+ if (hdd_get_targettime_from_hosttime(adapter, host_time,
+ &target_time)) {
+ hddLog(VOS_TRACE_LEVEL_ERROR, FL("get invalid target timestamp"));
+ return -EINVAL;
+ } else {
+ *ts = ns_to_timespec(target_time * NSEC_PER_USEC);
+ }
+
+ return 0;
+}
+
+/**
+ * wlan_hdd_phc_init() - phc init
+ * @hdd_ctx: pointer to the hdd_contex.
+ *
+ * Return: NULL
+ */
+static void wlan_hdd_phc_init(hdd_context_t *hdd_ctx)
+{
+ hdd_ctx->ptp_cinfo.gettime = wlan_ptp_gettime;
+
+ hdd_ctx->ptp_clock = ptp_clock_register(&hdd_ctx->ptp_cinfo,
+ hdd_ctx->parent_dev);
+}
+
+/**
+ * wlan_hdd_phc_deinit() - phc deinit
+ * @hdd_ctx: pointer to the hdd_contex.
+ *
+ * Return: NULL
+ */
+static void wlan_hdd_phc_deinit(hdd_context_t *hdd_ctx)
+{
+ hdd_ctx->ptp_cinfo.gettime = NULL;
+
+ if (hdd_ctx->ptp_clock) {
+ ptp_clock_unregister(hdd_ctx->ptp_clock);
+ hdd_ctx->ptp_clock = NULL;
+ }
+}
+#else
+static int wlan_ptp_gettime(struct ptp_clock_info *ptp, struct timespec64 *ts)
+{
+ uint64_t host_time, target_time = 0;
+ VosContextType *pVosContext = NULL;
+ hdd_context_t *pHddCtx = NULL;
+ hdd_adapter_t *adapter = NULL;
+
+ pVosContext = vos_get_global_context(VOS_MODULE_ID_HDD, NULL);
+ pHddCtx = (hdd_context_t *)vos_get_context(VOS_MODULE_ID_HDD,
+ pVosContext);
+ if (!pHddCtx) {
+ hddLog(VOS_TRACE_LEVEL_ERROR, FL("invalid hdd context"));
+ return -EINVAL;
+ }
+
+ adapter = hdd_get_adapter(pHddCtx, WLAN_HDD_P2P_GO);
+ if (!adapter) {
+ adapter = hdd_get_adapter(pHddCtx, WLAN_HDD_P2P_CLIENT);
+ if (!adapter) {
+ adapter = hdd_get_adapter(pHddCtx, WLAN_HDD_SOFTAP);
+ if (!adapter)
+ adapter = hdd_get_adapter(pHddCtx,
+ WLAN_HDD_INFRA_STATION);
+ }
+ }
+
+ host_time = hdd_get_monotonic_host_time(pHddCtx);
+ if (hdd_get_targettime_from_hosttime(adapter, host_time,
+ &target_time)) {
+ hddLog(VOS_TRACE_LEVEL_ERROR, FL("get invalid target timestamp"));
+ return -EINVAL;
+ } else {
+ *ts = ns_to_timespec64(target_time * NSEC_PER_USEC);
+ }
+
+ return 0;
+}
+
+static void wlan_hdd_phc_init(hdd_context_t *hdd_ctx)
+{
+ hdd_ctx->ptp_cinfo.gettime64 = wlan_ptp_gettime;
+ hdd_ctx->ptp_clock = ptp_clock_register(&hdd_ctx->ptp_cinfo,
+ hdd_ctx->parent_dev);
+}
+
+static void wlan_hdd_phc_deinit(hdd_context_t *hdd_ctx)
+{
+ hdd_ctx->ptp_cinfo.gettime64 = NULL;
+
+ if (hdd_ctx->ptp_clock) {
+ ptp_clock_unregister(hdd_ctx->ptp_clock);
+ hdd_ctx->ptp_clock = NULL;
+ }
+}
+#endif
+#else
+int wlan_get_ts_info(struct net_device *dev, struct ethtool_ts_info *info)
+{
+ return -ENOTSUPP;
+}
+
+static void wlan_hdd_phc_init(hdd_context_t *hdd_ctx)
+{
+}
+
+static void wlan_hdd_phc_deinit(hdd_context_t *hdd_ctx)
+{
+}
+#endif
+
/**
* hdd_get_tsf_cb() - handle tsf callback
*
@@ -1210,7 +1502,6 @@ static int hdd_get_tsf_cb(void *pcb_cxt, struct stsf *ptsf)
hdd_adapter_t *adapter;
int status;
VOS_TIMER_STATE capture_req_timer_status;
-
if (pcb_cxt == NULL || ptsf == NULL) {
hddLog(VOS_TRACE_LEVEL_ERROR,
FL("HDD context is not valid"));
@@ -1298,6 +1589,8 @@ void wlan_hdd_tsf_init(hdd_context_t *hdd_ctx)
if (wlan_hdd_tsf_plus_init(hdd_ctx) != HDD_TSF_OP_SUCC)
goto fail;
+ wlan_hdd_phc_init(hdd_ctx);
+
return;
fail:
@@ -1325,6 +1618,7 @@ void wlan_hdd_tsf_deinit(hdd_context_t *hdd_ctx)
hal_status);
}
+ wlan_hdd_phc_deinit(hdd_ctx);
wlan_hdd_tsf_plus_deinit(hdd_ctx);
vos_status = hdd_get_front_adapter(hdd_ctx, &adapternode_ptr);
diff --git a/CORE/HDD/src/wlan_hdd_tx_rx.c b/CORE/HDD/src/wlan_hdd_tx_rx.c
index d803c5d9ee93..c720f42b0f9f 100644
--- a/CORE/HDD/src/wlan_hdd_tx_rx.c
+++ b/CORE/HDD/src/wlan_hdd_tx_rx.c
@@ -114,7 +114,7 @@ static VOS_STATUS hdd_flush_tx_queues( hdd_adapter_t *pAdapter )
while (++i != NUM_TX_QUEUES)
{
//Free up any packets in the Tx queue
- spin_lock_bh(&pAdapter->wmm_tx_queue[i].lock);
+ adf_os_spin_lock_bh(&pAdapter->wmm_tx_queue[i].lock);
while (true)
{
status = hdd_list_remove_front( &pAdapter->wmm_tx_queue[i], &anchor );
@@ -128,7 +128,7 @@ static VOS_STATUS hdd_flush_tx_queues( hdd_adapter_t *pAdapter )
}
break;
}
- spin_unlock_bh(&pAdapter->wmm_tx_queue[i].lock);
+ adf_os_spin_unlock_bh(&pAdapter->wmm_tx_queue[i].lock);
/* Back pressure is no longer in effect */
pAdapter->isTxSuspended[i] = VOS_FALSE;
}
@@ -165,11 +165,11 @@ void hdd_flush_ibss_tx_queues( hdd_adapter_t *pAdapter, v_U8_t STAId)
for (i = 0; i < NUM_TX_QUEUES; i++)
{
- spin_lock_bh(&pAdapter->wmm_tx_queue[i].lock);
+ adf_os_spin_lock_bh(&pAdapter->wmm_tx_queue[i].lock);
if ( list_empty( &pAdapter->wmm_tx_queue[i].anchor ) )
{
- spin_unlock_bh(&pAdapter->wmm_tx_queue[i].lock);
+ adf_os_spin_unlock_bh(&pAdapter->wmm_tx_queue[i].lock);
continue;
}
@@ -204,7 +204,7 @@ void hdd_flush_ibss_tx_queues( hdd_adapter_t *pAdapter, v_U8_t STAId)
pAdapter->isTxSuspended[i] = VOS_FALSE;
}
- spin_unlock_bh(&pAdapter->wmm_tx_queue[i].lock);
+ adf_os_spin_unlock_bh(&pAdapter->wmm_tx_queue[i].lock);
}
}
@@ -1726,38 +1726,38 @@ void wlan_hdd_netif_queue_control(hdd_adapter_t *adapter,
break;
case WLAN_STOP_ALL_NETIF_QUEUE:
- spin_lock_bh(&adapter->pause_map_lock);
+ adf_os_spin_lock_bh(&adapter->pause_map_lock);
if (!adapter->pause_map) {
netif_tx_stop_all_queues(adapter->dev);
wlan_hdd_update_txq_timestamp(adapter->dev);
wlan_hdd_update_unpause_time(adapter);
}
adapter->pause_map |= (1 << reason);
- spin_unlock_bh(&adapter->pause_map_lock);
+ adf_os_spin_unlock_bh(&adapter->pause_map_lock);
break;
case WLAN_START_ALL_NETIF_QUEUE:
- spin_lock_bh(&adapter->pause_map_lock);
+ adf_os_spin_lock_bh(&adapter->pause_map_lock);
adapter->pause_map &= ~(1 << reason);
if (!adapter->pause_map) {
netif_tx_start_all_queues(adapter->dev);
wlan_hdd_update_pause_time(adapter);
}
- spin_unlock_bh(&adapter->pause_map_lock);
+ adf_os_spin_unlock_bh(&adapter->pause_map_lock);
break;
case WLAN_WAKE_ALL_NETIF_QUEUE:
- spin_lock_bh(&adapter->pause_map_lock);
+ adf_os_spin_lock_bh(&adapter->pause_map_lock);
adapter->pause_map &= ~(1 << reason);
if (!adapter->pause_map) {
netif_tx_wake_all_queues(adapter->dev);
wlan_hdd_update_pause_time(adapter);
}
- spin_unlock_bh(&adapter->pause_map_lock);
+ adf_os_spin_unlock_bh(&adapter->pause_map_lock);
break;
case WLAN_STOP_ALL_NETIF_QUEUE_N_CARRIER:
- spin_lock_bh(&adapter->pause_map_lock);
+ adf_os_spin_lock_bh(&adapter->pause_map_lock);
if (!adapter->pause_map) {
netif_tx_stop_all_queues(adapter->dev);
wlan_hdd_update_txq_timestamp(adapter->dev);
@@ -1765,33 +1765,33 @@ void wlan_hdd_netif_queue_control(hdd_adapter_t *adapter,
}
adapter->pause_map |= (1 << reason);
netif_carrier_off(adapter->dev);
- spin_unlock_bh(&adapter->pause_map_lock);
+ adf_os_spin_unlock_bh(&adapter->pause_map_lock);
break;
case WLAN_START_ALL_NETIF_QUEUE_N_CARRIER:
- spin_lock_bh(&adapter->pause_map_lock);
+ adf_os_spin_lock_bh(&adapter->pause_map_lock);
netif_carrier_on(adapter->dev);
adapter->pause_map &= ~(1 << reason);
if (!adapter->pause_map) {
netif_tx_start_all_queues(adapter->dev);
wlan_hdd_update_pause_time(adapter);
}
- spin_unlock_bh(&adapter->pause_map_lock);
+ adf_os_spin_unlock_bh(&adapter->pause_map_lock);
break;
case WLAN_NETIF_TX_DISABLE:
- spin_lock_bh(&adapter->pause_map_lock);
+ adf_os_spin_lock_bh(&adapter->pause_map_lock);
if (!adapter->pause_map) {
netif_tx_disable(adapter->dev);
wlan_hdd_update_txq_timestamp(adapter->dev);
wlan_hdd_update_unpause_time(adapter);
}
adapter->pause_map |= (1 << reason);
- spin_unlock_bh(&adapter->pause_map_lock);
+ adf_os_spin_unlock_bh(&adapter->pause_map_lock);
break;
case WLAN_NETIF_TX_DISABLE_N_CARRIER:
- spin_lock_bh(&adapter->pause_map_lock);
+ adf_os_spin_lock_bh(&adapter->pause_map_lock);
if (!adapter->pause_map) {
netif_tx_disable(adapter->dev);
wlan_hdd_update_txq_timestamp(adapter->dev);
@@ -1799,7 +1799,7 @@ void wlan_hdd_netif_queue_control(hdd_adapter_t *adapter,
}
adapter->pause_map |= (1 << reason);
netif_carrier_off(adapter->dev);
- spin_unlock_bh(&adapter->pause_map_lock);
+ adf_os_spin_unlock_bh(&adapter->pause_map_lock);
break;
default:
diff --git a/CORE/HDD/src/wlan_hdd_wext.c b/CORE/HDD/src/wlan_hdd_wext.c
index 8625675680b6..d65b2bc7bd73 100644
--- a/CORE/HDD/src/wlan_hdd_wext.c
+++ b/CORE/HDD/src/wlan_hdd_wext.c
@@ -8746,11 +8746,11 @@ void hdd_wmm_tx_snapshot(hdd_adapter_t *pAdapter)
int i = 0, j = 0;
for ( i=0; i< NUM_TX_QUEUES; i++)
{
- spin_lock_bh(&pAdapter->wmm_tx_queue[i].lock);
+ adf_os_spin_lock_bh(&pAdapter->wmm_tx_queue[i].lock);
hddLog(LOGE, "HDD WMM TxQueue Info For AC: %d Count: %d PrevAdress:%pK, NextAddress:%pK",
i, pAdapter->wmm_tx_queue[i].count,
pAdapter->wmm_tx_queue[i].anchor.prev, pAdapter->wmm_tx_queue[i].anchor.next);
- spin_unlock_bh(&pAdapter->wmm_tx_queue[i].lock);
+ adf_os_spin_unlock_bh(&pAdapter->wmm_tx_queue[i].lock);
}
for(i =0; i<WLAN_MAX_STA_COUNT; i++)
@@ -8760,12 +8760,12 @@ void hdd_wmm_tx_snapshot(hdd_adapter_t *pAdapter)
hddLog(LOGE, "******STAIndex: %d*********", i);
for ( j=0; j< NUM_TX_QUEUES; j++)
{
- spin_lock_bh(&pAdapter->aStaInfo[i].wmm_tx_queue[j].lock);
+ adf_os_spin_lock_bh(&pAdapter->aStaInfo[i].wmm_tx_queue[j].lock);
hddLog(LOGE, "HDD TxQueue Info For AC: %d Count: %d PrevAdress:%pK, NextAddress:%pK",
j, pAdapter->aStaInfo[i].wmm_tx_queue[j].count,
pAdapter->aStaInfo[i].wmm_tx_queue[j].anchor.prev,
pAdapter->aStaInfo[i].wmm_tx_queue[j].anchor.next);
- spin_unlock_bh(&pAdapter->aStaInfo[i].wmm_tx_queue[j].lock);
+ adf_os_spin_unlock_bh(&pAdapter->aStaInfo[i].wmm_tx_queue[j].lock);
}
}
}
diff --git a/CORE/MAC/inc/sirApi.h b/CORE/MAC/inc/sirApi.h
index d95f0490da78..a023876cdf7f 100644
--- a/CORE/MAC/inc/sirApi.h
+++ b/CORE/MAC/inc/sirApi.h
@@ -7528,7 +7528,7 @@ struct dsrc_radio_chan_stats_ctxt {
struct completion completion_evt;
uint32_t config_chans_num;
uint32_t config_chans_freq[DSRC_MAX_CHAN_STATS_CNT];
- spinlock_t chan_stats_lock;
+ adf_os_spinlock_t chan_stats_lock;
uint32_t chan_stats_num;
struct radio_chan_stats_info chan_stats[DSRC_MAX_CHAN_STATS_CNT];
};
diff --git a/CORE/MAC/src/include/dot11f.h b/CORE/MAC/src/include/dot11f.h
index c2d5592d5f28..e6be54c2a589 100644
--- a/CORE/MAC/src/include/dot11f.h
+++ b/CORE/MAC/src/include/dot11f.h
@@ -32,7 +32,7 @@
* \brief Structures, function prototypes & definitions
* for working with 802.11 Frames
* This file was automatically generated by 'framesc'
- * Fri Aug 31 18:54:55 2018 from the following file(s):
+ * Mon Dec 3 16:47:12 2018 from the following file(s):
*
* dot11f.frms
*
diff --git a/CORE/MAC/src/include/sirParams.h b/CORE/MAC/src/include/sirParams.h
index 911a9acbff03..2778b57d32fc 100644
--- a/CORE/MAC/src/include/sirParams.h
+++ b/CORE/MAC/src/include/sirParams.h
@@ -287,7 +287,6 @@ typedef struct sSirMbMsgP2p
#define SIR_HAL_UPDATE_STARATEINFO_RSP (SIR_HAL_ITC_MSG_TYPES_BEGIN + 46)
#define SIR_HAL_UPDATE_BEACON_IND (SIR_HAL_ITC_MSG_TYPES_BEGIN + 47)
-#define SIR_HAL_UPDATE_CF_IND (SIR_HAL_ITC_MSG_TYPES_BEGIN + 48)
#define SIR_HAL_CHNL_SWITCH_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 49)
#define SIR_HAL_ADD_TS_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 50)
#define SIR_HAL_DEL_TS_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 51)
diff --git a/CORE/MAC/src/pe/lim/limScanResultUtils.c b/CORE/MAC/src/pe/lim/limScanResultUtils.c
index 267a396b3038..f8d162f767d7 100644
--- a/CORE/MAC/src/pe/lim/limScanResultUtils.c
+++ b/CORE/MAC/src/pe/lim/limScanResultUtils.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011-2018 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011-2019 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -227,17 +227,21 @@ lim_check_and_change_cc(tpAniSirGlobal mac_ptr,
timer_status = VOS_TIMER_STATE_UNUSED;
else {
do {
- timer_status =
- vos_timer_getCurrentState(&(session_ptr->reg_update_pwr_timer));
- count++;
- if (count > 255) {
- limLog(mac_ptr, LOGE, FL("pwr timer busy!"));
- return;
- }
- } while(timer_status != VOS_TIMER_STATE_UNUSED);
+ timer_status =
+ vos_timer_getCurrentState(&(session_ptr->reg_update_pwr_timer));
+ count++;
+ if (count > 255) {
+ limLog(mac_ptr, LOGE, FL("pwr timer busy!"));
+ return;
+ }
+ } while (timer_status != VOS_TIMER_STATE_UNUSED);
}
pwr_timer_data = vos_mem_malloc(sizeof(*pwr_timer_data));
+ if (pwr_timer_data == NULL) {
+ limLog(mac_ptr, LOGE, FL("Mem alloc failed"));
+ return;
+ }
pwr_timer_data->session_ptr = session_ptr;
pwr_timer_data->mac_ptr = mac_ptr;
vos_timer_init(&(session_ptr->reg_update_pwr_timer), VOS_TIMER_TYPE_SW,
diff --git a/CORE/MAC/src/pe/lim/limSendMessages.c b/CORE/MAC/src/pe/lim/limSendMessages.c
index f2eee7bfc33e..c1dc90b20ea8 100644
--- a/CORE/MAC/src/pe/lim/limSendMessages.c
+++ b/CORE/MAC/src/pe/lim/limSendMessages.c
@@ -72,64 +72,6 @@ static tBeaconFilterIe beaconFilterTable[] = {
};
/**
- * limSendCFParams()
- *
- *FUNCTION:
- * This function is called to send CFP Parameters to WDA, when they are changed.
- *
- *LOGIC:
- *
- *ASSUMPTIONS:
- * NA
- *
- *NOTE:
- * NA
- *
- * @param pMac pointer to Global Mac structure.
- * @param bssIdx Bss Index of the BSS to which STA is associated.
- * @param cfpCount CFP Count, if that is changed.
- * @param cfpPeriod CFP Period if that is changed.
- *
- * @return success if message send is ok, else false.
- */
-tSirRetStatus limSendCFParams(tpAniSirGlobal pMac, tANI_U8 bssIdx, tANI_U8 cfpCount, tANI_U8 cfpPeriod)
-{
- tpUpdateCFParams pCFParams = NULL;
- tSirRetStatus retCode = eSIR_SUCCESS;
- tSirMsgQ msgQ;
-
- pCFParams = vos_mem_malloc(sizeof( tUpdateCFParams ));
- if ( NULL == pCFParams )
- {
- limLog( pMac, LOGP,
- FL( "Unable to allocate memory during Update CF Params" ));
- retCode = eSIR_MEM_ALLOC_FAILED;
- goto returnFailure;
- }
- vos_mem_set( (tANI_U8 *) pCFParams, sizeof(tUpdateCFParams), 0);
- pCFParams->cfpCount = cfpCount;
- pCFParams->cfpPeriod = cfpPeriod;
- pCFParams->bssIdx = bssIdx;
-
- msgQ.type = WDA_UPDATE_CF_IND;
- msgQ.reserved = 0;
- msgQ.bodyptr = pCFParams;
- msgQ.bodyval = 0;
- limLog( pMac, LOG3,
- FL( "Sending WDA_UPDATE_CF_IND..." ));
- MTRACE(macTraceMsgTx(pMac, NO_SESSION, msgQ.type));
- if( eSIR_SUCCESS != (retCode = wdaPostCtrlMsg( pMac, &msgQ )))
- {
- vos_mem_free(pCFParams);
- limLog( pMac, LOGP,
- FL("Posting WDA_UPDATE_CF_IND to WDA failed, reason=%X"),
- retCode );
- }
-returnFailure:
- return retCode;
-}
-
-/**
* limSendBeaconParams()
*
*FUNCTION:
diff --git a/CORE/MAC/src/pe/lim/limSendMessages.h b/CORE/MAC/src/pe/lim/limSendMessages.h
index dda834668646..d377d717e294 100644
--- a/CORE/MAC/src/pe/lim/limSendMessages.h
+++ b/CORE/MAC/src/pe/lim/limSendMessages.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011-2014 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011-2014 2018 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -43,7 +43,6 @@
#include "limTypes.h"
#include "halMsgApi.h"
#include "sirParams.h"
-tSirRetStatus limSendCFParams(tpAniSirGlobal pMac, tANI_U8 bssIdx, tANI_U8 cfpCount, tANI_U8 cfpPeriod);
tSirRetStatus limSendBeaconParams(tpAniSirGlobal pMac,
tpUpdateBeaconParams pUpdatedBcnParams,
tpPESession psessionEntry );
diff --git a/CORE/MAC/src/pe/sch/schBeaconProcess.c b/CORE/MAC/src/pe/sch/schBeaconProcess.c
index 10e9920adf08..0454495f180c 100644
--- a/CORE/MAC/src/pe/sch/schBeaconProcess.c
+++ b/CORE/MAC/src/pe/sch/schBeaconProcess.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2017 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2018 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -423,10 +423,7 @@ static void __schBeaconProcessForSession( tpAniSirGlobal pMac,
}
if (pBeacon->cfPresent)
- {
cfgSetInt(pMac, WNI_CFG_CFP_PERIOD, pBeacon->cfParamSet.cfpPeriod);
- limSendCFParams(pMac, bssIdx, pBeacon->cfParamSet.cfpCount, pBeacon->cfParamSet.cfpPeriod);
- }
if (pBeacon->timPresent)
{
diff --git a/CORE/SAP/src/sapChSelect.c b/CORE/SAP/src/sapChSelect.c
index 6db07799b0f7..1711e62fcb17 100644
--- a/CORE/SAP/src/sapChSelect.c
+++ b/CORE/SAP/src/sapChSelect.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2017 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2019 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -429,6 +429,7 @@ sap_process_avoid_ie(tHalHandle hal,
void sapUpdateUnsafeChannelList(ptSapContext pSapCtx)
{
v_U16_t i, j;
+ uint16_t unsafe_channel_count;
v_PVOID_t pvosGCtx = vos_get_global_context(VOS_MODULE_ID_SAP, NULL);
struct hdd_context_s *hdd_ctxt;
@@ -449,6 +450,9 @@ void sapUpdateUnsafeChannelList(ptSapContext pSapCtx)
return ;
}
+ unsafe_channel_count = VOS_MIN((uint16_t)hdd_ctxt->unsafe_channel_count,
+ (uint16_t)NUM_20MHZ_RF_CHANNELS);
+
/* Flush, default set all channel safe */
for (i = 0; i < NUM_20MHZ_RF_CHANNELS; i++)
{
@@ -469,7 +473,7 @@ void sapUpdateUnsafeChannelList(ptSapContext pSapCtx)
}
#endif
- for (i = 0; i < hdd_ctxt->unsafe_channel_count; i++)
+ for (i = 0; i < unsafe_channel_count; i++)
{
for (j = 0; j < NUM_20MHZ_RF_CHANNELS; j++)
{
diff --git a/CORE/SERVICES/BMI/ol_fw.c b/CORE/SERVICES/BMI/ol_fw.c
index d10fa978cc5e..4289a7e041ca 100644
--- a/CORE/SERVICES/BMI/ol_fw.c
+++ b/CORE/SERVICES/BMI/ol_fw.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013-2018 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2019 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -890,10 +890,10 @@ defined(CONFIG_NON_QC_PLATFORM_PCI)
&& (chip_id == AR6320_REV1_1_VERSION
|| chip_id == AR6320_REV1_3_VERSION
|| chip_id == AR6320_REV2_1_VERSION)) {
-
+ bin_off = sizeof(SIGN_HEADER_T);
status = BMISignStreamStart(scn->hif_hdl, address,
(u_int8_t *)fw_entry->data,
- sizeof(SIGN_HEADER_T), scn);
+ bin_off, scn);
if (status != EOK) {
AR_DEBUG_PRINTF(ATH_DEBUG_ERR,
("%s: unable to start sign stream\n",
@@ -902,9 +902,15 @@ defined(CONFIG_NON_QC_PLATFORM_PCI)
goto end;
}
- bin_off = sizeof(SIGN_HEADER_T);
- bin_len = sign_header->rampatch_len
- - sizeof(SIGN_HEADER_T);
+ bin_len = sign_header->rampatch_len - bin_off;
+ if (bin_len <= 0 ||
+ bin_len > fw_entry_size - bin_off) {
+ AR_DEBUG_PRINTF(ATH_DEBUG_ERR,
+ ("%s: Invalid sign header\n",
+ __func__));
+ status = A_ERROR;
+ goto end;
+ }
} else {
bin_sign = FALSE;
bin_off = 0;
@@ -937,7 +943,7 @@ defined(CONFIG_NON_QC_PLATFORM_PCI)
bin_len = sign_header->total_len
- sign_header->rampatch_len;
- if (bin_len > 0) {
+ if (bin_len > 0 && bin_len <= fw_entry_size - bin_off) {
status = BMISignStreamStart(scn->hif_hdl, 0,
(u_int8_t *)fw_entry->data + bin_off,
bin_len, scn);
@@ -2868,6 +2874,8 @@ int ol_target_coredump(void *inst, void *memoryBlock, u_int32_t blockLength)
char *fw_ram_seg_name[] = {"DRAM ", "AXI ", "REG ", "IRAM1 ", "IRAM2 "};
#endif
+ vos_mem_set(result, 0, sizeof(result));
+
if (scn->fastfwdump_host && scn->fastfwdump_fw) {
if(scn->pdev_txrx_handle) {
ol_tx_queue_flush(scn->pdev_txrx_handle);
diff --git a/CORE/SERVICES/COMMON/adf/adf_nbuf.c b/CORE/SERVICES/COMMON/adf/adf_nbuf.c
index 9b1ee4c00314..03a4b71db205 100644
--- a/CORE/SERVICES/COMMON/adf/adf_nbuf.c
+++ b/CORE/SERVICES/COMMON/adf/adf_nbuf.c
@@ -26,6 +26,7 @@
*/
+#include <linux/hashtable.h>
#include <linux/kernel.h>
#include <linux/version.h>
#include <linux/skbuff.h>
@@ -37,6 +38,9 @@
#include <net/ieee80211_radiotap.h>
#include "adf_trace.h"
#include "vos_trace.h"
+#include <vos_api.h>
+#include <adf_os_atomic.h>
+#include <adf_os_time.h>
#ifdef CONFIG_WCNSS_MEM_PRE_ALLOC
#include <net/cnss_prealloc.h>
@@ -358,6 +362,485 @@ __adf_nbuf_dmamap_destroy(adf_os_device_t osdev, __adf_os_dma_map_t dmap)
kfree(dmap);
}
+#ifdef NBUF_MAP_UNMAP_DEBUG
+
+/**
+ * DEFINE_ADF_FLEX_MEM_POOL() - define a new flex mem pool with one segment
+ * @name: the name of the pool variable
+ * @size_of_item: size of the items the pool will allocate
+ * @rm_limit: min number of segments to keep during reduction
+ */
+#define DEFINE_ADF_FLEX_MEM_POOL(name, size_of_item, rm_limit) \
+ struct adf_flex_mem_pool name; \
+ uint8_t __ ## name ## _head_bytes[ADF_FM_BITMAP_BITS * (size_of_item)];\
+ struct adf_flex_mem_segment __ ## name ## _head = { \
+ .node = VOS_LIST_NODE_INIT_SINGLE( \
+ VOS_LIST_ANCHOR(name.seg_list)), \
+ .bytes = __ ## name ## _head_bytes, \
+ }; \
+ struct adf_flex_mem_pool name = { \
+ .reduction_limit = (rm_limit), \
+ .item_size = (size_of_item), \
+ }
+
+/**
+ * adf_flex_mem_pool - a pool of memory segments
+ * @seg_list: the list containing the memory segments
+ * @lock: spinlock for protecting internal data structures
+ * @reduction_limit: the minimum number of segments to keep during reduction
+ * @item_size: the size of the items the pool will allocate
+ */
+struct adf_flex_mem_pool {
+ vos_list_t seg_list;
+ adf_os_spinlock_t lock;
+ uint16_t reduction_limit;
+ uint16_t item_size;
+};
+
+/**
+ * adf_flex_mem_segment - a memory pool segment
+ * @node: the list node for membership in the memory pool
+ * @dynamic: true if this segment was dynamically allocated
+ * @used_bitmap: bitmap for tracking which items in the segment are in use
+ * @bytes: raw memory for allocating items from
+ */
+struct adf_flex_mem_segment {
+ vos_list_node_t node;
+ bool dynamic;
+ uint32_t used_bitmap;
+ uint8_t *bytes;
+};
+#define ADF_NBUF_HISTORY_SIZE 4096
+
+static adf_os_atomic_t adf_nbuf_history_index;
+static struct adf_nbuf_event adf_nbuf_history[ADF_NBUF_HISTORY_SIZE];
+
+static int32_t adf_nbuf_circular_index_next(adf_os_atomic_t *index, int size)
+{
+ int32_t next = adf_os_atomic_inc_return(index);
+
+ if (next == size)
+ adf_os_atomic_sub(size, index);
+
+ return next % size;
+}
+
+void
+adf_nbuf_history_add(adf_nbuf_t nbuf, const char *file, uint32_t line,
+ enum adf_nbuf_event_type type)
+{
+ int32_t idx = adf_nbuf_circular_index_next(&adf_nbuf_history_index,
+ ADF_NBUF_HISTORY_SIZE);
+ struct adf_nbuf_event *event = &adf_nbuf_history[idx];
+
+ event->nbuf = nbuf;
+ strlcpy(event->file, kbasename(file), ADF_MEM_FILE_NAME_SIZE);
+ event->line = line;
+ event->type = type;
+ event->timestamp = adf_os_ticks();
+}
+
+DEFINE_ADF_FLEX_MEM_POOL(adf_nbuf_map_pool,
+ sizeof(struct adf_nbuf_map_metadata), 0);
+#define ADF_NBUF_MAP_HT_BITS 10 /* 1024 buckets */
+static DECLARE_HASHTABLE(adf_nbuf_map_ht, ADF_NBUF_MAP_HT_BITS);
+static adf_os_spinlock_t adf_nbuf_map_lock;
+
+static void __adf_flex_mem_release(struct adf_flex_mem_pool *pool)
+{
+ struct adf_flex_mem_segment *seg;
+ struct adf_flex_mem_segment *next;
+
+ list_for_each_entry_safe(seg, next, &(pool->seg_list.anchor), node) {
+ if (!seg->dynamic)
+ continue;
+
+ if (seg->used_bitmap != 0)
+ continue;
+
+ vos_list_remove_node_no_mutex(&pool->seg_list, &seg->node);
+ vos_mem_free(seg);
+ }
+}
+
+void adf_flex_mem_release(struct adf_flex_mem_pool *pool)
+{
+ VOS_BUG(pool);
+ if (!pool)
+ return;
+
+ adf_os_spin_lock_bh(&pool->lock);
+ __adf_flex_mem_release(pool);
+ adf_os_spin_unlock_bh(&pool->lock);
+}
+
+void adf_flex_mem_deinit(struct adf_flex_mem_pool *pool)
+{
+ v_SIZE_t pSize = 0;
+ adf_flex_mem_release(pool);
+ if (vos_list_size_no_mutex(&pool->seg_list, &pSize) ==
+ VOS_STATUS_SUCCESS)
+ VOS_BUG(!pSize);
+ else
+ adf_print("%s seg list get ailed",__func__);
+
+ adf_os_spinlock_destroy(&pool->lock);
+}
+
+static struct adf_flex_mem_segment *
+adf_flex_mem_seg_alloc(struct adf_flex_mem_pool *pool)
+{
+ struct adf_flex_mem_segment *seg;
+ size_t total_size = sizeof(struct adf_flex_mem_segment) +
+ pool->item_size * ADF_FM_BITMAP_BITS;
+
+ seg = vos_mem_malloc(total_size);
+ if (!seg)
+ return NULL;
+
+ seg->dynamic = true;
+ seg->bytes = (uint8_t *)(seg + 1);
+ seg->used_bitmap = 0;
+ vos_list_insert_back_no_mutex(&pool->seg_list, &seg->node);
+
+ return seg;
+}
+
+void adf_flex_mem_init(struct adf_flex_mem_pool *pool)
+{
+ int i;
+
+ adf_os_spinlock_init(&pool->lock);
+ vos_list_init(&pool->seg_list);
+ for (i = 0; i < pool->reduction_limit; i++)
+ adf_flex_mem_seg_alloc(pool);
+}
+
+static void *__adf_flex_mem_alloc(struct adf_flex_mem_pool *pool)
+{
+ struct adf_flex_mem_segment *seg;
+
+ list_for_each_entry(seg, &(pool->seg_list.anchor), node) {
+ int index;
+ void *ptr;
+
+ index = adf_ffz(seg->used_bitmap);
+ if (index < 0)
+ continue;
+
+ VOS_BUG(index < ADF_FM_BITMAP_BITS);
+
+ seg->used_bitmap ^= (ADF_FM_BITMAP)1 << index;
+ ptr = &seg->bytes[index * pool->item_size];
+ vos_mem_zero(ptr, pool->item_size);
+
+ return ptr;
+ }
+
+ seg = adf_flex_mem_seg_alloc(pool);
+ if (!seg)
+ return NULL;
+
+ seg->used_bitmap = 1;
+
+ return seg->bytes;
+}
+
+void *adf_flex_mem_alloc(struct adf_flex_mem_pool *pool)
+{
+ void *ptr;
+
+ VOS_BUG(pool);
+ if (!pool)
+ return NULL;
+
+ adf_os_spin_lock_bh(&pool->lock);
+ ptr = __adf_flex_mem_alloc(pool);
+ adf_os_spin_unlock_bh(&pool->lock);
+
+ return ptr;
+}
+
+static void adf_flex_mem_seg_free(struct adf_flex_mem_pool *pool,
+ struct adf_flex_mem_segment *seg)
+{
+ v_SIZE_t pSize = 0;
+ if (!seg->dynamic)
+ return;
+
+ if (vos_list_size_no_mutex(&pool->seg_list, &pSize) ==
+ VOS_STATUS_SUCCESS) {
+ if (pSize <= pool->reduction_limit)
+ return;
+ } else {
+ adf_print("%s seg list size get failed", __func__);
+ }
+
+ vos_list_remove_node_no_mutex(&pool->seg_list, &seg->node);
+ vos_mem_free(seg);
+}
+
+static void __adf_flex_mem_free(struct adf_flex_mem_pool *pool, void *ptr)
+{
+ struct adf_flex_mem_segment *seg;
+ void *low_addr;
+ void *high_addr;
+ unsigned long index;
+
+ list_for_each_entry(seg, &(pool->seg_list.anchor), node) {
+ low_addr = seg->bytes;
+ high_addr = low_addr + pool->item_size * ADF_FM_BITMAP_BITS;
+
+ if (ptr < low_addr || ptr > high_addr)
+ continue;
+
+ index = (ptr - low_addr) / pool->item_size;
+ VOS_BUG(index < ADF_FM_BITMAP_BITS);
+
+ seg->used_bitmap ^= (ADF_FM_BITMAP)1 << index;
+ if (!seg->used_bitmap)
+ adf_flex_mem_seg_free(pool, seg);
+
+ return;
+ }
+
+ adf_print("Failed to find pointer in segment pool");
+}
+
+void adf_flex_mem_free(struct adf_flex_mem_pool *pool, void *ptr)
+{
+ VOS_BUG(pool);
+ if (!pool)
+ return;
+
+ VOS_BUG(ptr);
+ if (!ptr)
+ return;
+
+ adf_os_spin_lock_bh(&pool->lock);
+ __adf_flex_mem_free(pool, ptr);
+ adf_os_spin_unlock_bh(&pool->lock);
+}
+
+static void adf_nbuf_map_tracking_init(void)
+{
+ adf_flex_mem_init(&adf_nbuf_map_pool);
+ hash_init(adf_nbuf_map_ht);
+ adf_os_spinlock_init(&adf_nbuf_map_lock);
+}
+
+void adf_nbuf_map_check_for_leaks(void)
+{
+ struct adf_nbuf_map_metadata *meta;
+ int bucket;
+ uint32_t count = 0;
+ bool is_empty;
+
+ adf_flex_mem_release(&adf_nbuf_map_pool);
+ adf_os_spin_lock_irqsave(&adf_nbuf_map_lock);
+ is_empty = hash_empty(adf_nbuf_map_ht);
+ adf_os_spin_unlock_irqrestore(&adf_nbuf_map_lock);
+
+ if (is_empty)
+ return;
+
+ adf_print("Nbuf map without unmap events detected!");
+ adf_print("------------------------------------------------------------");
+
+ /* Hold the lock for the entire iteration for safe list/meta access. We
+ * are explicitly preferring the chance to watchdog on the print, over
+ * the posibility of invalid list/memory access. Since we are going to
+ * panic anyway, the worst case is loading up the crash dump to find out
+ * what was in the hash table.
+ */
+ adf_os_spin_lock_irqsave(&adf_nbuf_map_lock);
+ hash_for_each(adf_nbuf_map_ht, bucket, meta, node) {
+ count++;
+ adf_print("0x%pk @ %s:%u",
+ meta->nbuf, meta->file, meta->line);
+ }
+ adf_os_spin_unlock_irqrestore(&adf_nbuf_map_lock);
+
+ adf_print("%u fatal nbuf map without unmap events detected!", count);
+}
+
+static void adf_nbuf_map_tracking_deinit(void)
+{
+ adf_nbuf_map_check_for_leaks();
+ adf_os_spinlock_destroy(&adf_nbuf_map_lock);
+ adf_flex_mem_deinit(&adf_nbuf_map_pool);
+}
+
+static struct adf_nbuf_map_metadata *adf_nbuf_meta_get(adf_nbuf_t nbuf)
+{
+ struct adf_nbuf_map_metadata *meta;
+
+ hash_for_each_possible(adf_nbuf_map_ht, meta, node, (size_t)nbuf) {
+ if (meta->nbuf == nbuf)
+ return meta;
+ }
+
+ return NULL;
+}
+
+static a_status_t
+adf_nbuf_track_map(adf_nbuf_t nbuf, const char *file, uint32_t line)
+{
+ struct adf_nbuf_map_metadata *meta;
+
+ VOS_BUG(nbuf);
+ if (!nbuf) {
+ adf_print("Cannot map null nbuf");
+ return A_STATUS_EINVAL;
+ }
+
+ adf_os_spin_lock_irqsave(&adf_nbuf_map_lock);
+ meta = adf_nbuf_meta_get(nbuf);
+ adf_os_spin_unlock_irqrestore(&adf_nbuf_map_lock);
+ if (meta) {
+ adf_print(
+ "Double nbuf map detected @ %s:%u; last map from %s:%u",
+ kbasename(file), line, meta->file, meta->line);
+ VOS_BUG(0);
+ return A_STATUS_EINVAL;
+ }
+
+ meta = adf_flex_mem_alloc(&adf_nbuf_map_pool);
+ if (!meta) {
+ adf_print("Failed to allocate nbuf map tracking metadata");
+ return A_STATUS_ENOMEM;
+ }
+
+ meta->nbuf = nbuf;
+ strlcpy(meta->file, kbasename(file), ADF_MEM_FILE_NAME_SIZE);
+ meta->line = line;
+
+ adf_os_spin_lock_irqsave(&adf_nbuf_map_lock);
+ hash_add(adf_nbuf_map_ht, &meta->node, (size_t)nbuf);
+ adf_os_spin_unlock_irqrestore(&adf_nbuf_map_lock);
+
+ adf_nbuf_history_add(nbuf, file, line, ADF_NBUF_MAP);
+
+ return A_STATUS_OK;
+}
+
+static void
+adf_nbuf_untrack_map(adf_nbuf_t nbuf, const char *file, uint32_t line)
+{
+ struct adf_nbuf_map_metadata *meta;
+
+ VOS_BUG(nbuf);
+ if (!nbuf) {
+ adf_print("Cannot unmap null nbuf");
+ return;
+ }
+
+ adf_os_spin_lock_irqsave(&adf_nbuf_map_lock);
+ meta = adf_nbuf_meta_get(nbuf);
+
+ if (!meta) {
+ adf_print(
+ "Double nbuf unmap or unmap without map detected @ %s:%u",
+ kbasename(file), line);
+ adf_os_spin_unlock_irqrestore(&adf_nbuf_map_lock);
+ VOS_BUG(0);
+ return;
+ }
+
+ hash_del(&meta->node);
+ adf_os_spin_unlock_irqrestore(&adf_nbuf_map_lock);
+
+ adf_flex_mem_free(&adf_nbuf_map_pool, meta);
+
+ adf_nbuf_history_add(nbuf, file, line, ADF_NBUF_UNMAP);
+}
+
+a_status_t adf_nbuf_map_debug(adf_os_device_t osdev,
+ adf_nbuf_t buf,
+ adf_os_dma_dir_t dir,
+ const char *file,
+ uint32_t line)
+{
+ a_status_t status;
+
+ status = adf_nbuf_track_map(buf, file, line);
+ if (status)
+ return status;
+
+ status = __adf_nbuf_map(osdev, buf, dir);
+ if (status)
+ adf_nbuf_untrack_map(buf, file, line);
+
+ return status;
+}
+
+void adf_nbuf_unmap_debug(adf_os_device_t osdev,
+ adf_nbuf_t buf,
+ adf_os_dma_dir_t dir,
+ const char *file,
+ uint32_t line)
+{
+ adf_nbuf_untrack_map(buf, file, line);
+ __adf_nbuf_unmap_single(osdev, buf, dir);
+}
+
+a_status_t adf_nbuf_map_single_debug(adf_os_device_t osdev,
+ adf_nbuf_t buf,
+ adf_os_dma_dir_t dir,
+ const char *file,
+ uint32_t line)
+{
+ a_status_t status;
+
+ status = adf_nbuf_track_map(buf, file, line);
+ if (status)
+ return status;
+
+ status = __adf_nbuf_map_single(osdev, buf, dir);
+ if (status)
+ adf_nbuf_untrack_map(buf, file, line);
+
+ return status;
+}
+
+void adf_nbuf_unmap_single_debug(adf_os_device_t osdev,
+ adf_nbuf_t buf,
+ adf_os_dma_dir_t dir,
+ const char *file,
+ uint32_t line)
+{
+ adf_nbuf_untrack_map(buf, file, line);
+ __adf_nbuf_unmap_single(osdev, buf, dir);
+}
+
+static void adf_nbuf_panic_on_free_if_mapped(adf_nbuf_t nbuf, uint8_t *file,
+ uint32_t line)
+{
+ struct adf_nbuf_map_metadata *meta;
+
+ adf_os_spin_lock_irqsave(&adf_nbuf_map_lock);
+ meta = adf_nbuf_meta_get(nbuf);
+ if (meta)
+ adf_print(
+ "Nbuf freed @ %s:%u while mapped from %s:%u",
+ kbasename(file), line, meta->file, meta->line);
+ adf_os_spin_unlock_irqrestore(&adf_nbuf_map_lock);
+}
+#else
+static inline void adf_nbuf_map_tracking_init(void)
+{
+}
+
+static inline void adf_nbuf_map_tracking_deinit(void)
+{
+}
+
+static inline void adf_nbuf_panic_on_free_if_mapped(adf_nbuf_t nbuf,
+ uint8_t *file,
+ uint32_t line)
+{
+}
+#endif
/**
* @brief get the dma map of the nbuf
*
@@ -1222,13 +1705,13 @@ struct adf_nbuf_track_t {
size_t size;
};
-static spinlock_t g_adf_net_buf_track_lock[ADF_NET_BUF_TRACK_MAX_SIZE];
+static adf_os_spinlock_t g_adf_net_buf_track_lock[ADF_NET_BUF_TRACK_MAX_SIZE];
typedef struct adf_nbuf_track_t ADF_NBUF_TRACK;
static ADF_NBUF_TRACK *gp_adf_net_buf_track_tbl[ADF_NET_BUF_TRACK_MAX_SIZE];
static struct kmem_cache *nbuf_tracking_cache;
static ADF_NBUF_TRACK *adf_net_buf_track_free_list;
-static spinlock_t adf_net_buf_track_free_list_lock;
+static adf_os_spinlock_t adf_net_buf_track_free_list_lock;
static uint32_t adf_net_buf_track_free_list_count;
static uint32_t adf_net_buf_track_used_list_count;
static uint32_t adf_net_buf_track_max_used;
@@ -1282,10 +1765,9 @@ static inline void adf_update_max_free(void)
static ADF_NBUF_TRACK *adf_nbuf_track_alloc(void)
{
int flags = GFP_KERNEL;
- unsigned long irq_flag;
ADF_NBUF_TRACK *new_node = NULL;
- spin_lock_irqsave(&adf_net_buf_track_free_list_lock, irq_flag);
+ adf_os_spin_lock_irqsave(&adf_net_buf_track_free_list_lock);
adf_net_buf_track_used_list_count++;
if (adf_net_buf_track_free_list != NULL) {
new_node = adf_net_buf_track_free_list;
@@ -1294,7 +1776,7 @@ static ADF_NBUF_TRACK *adf_nbuf_track_alloc(void)
adf_net_buf_track_free_list_count--;
}
adf_update_max_used();
- spin_unlock_irqrestore(&adf_net_buf_track_free_list_lock, irq_flag);
+ adf_os_spin_unlock_irqrestore(&adf_net_buf_track_free_list_lock);
if (new_node != NULL)
return new_node;
@@ -1320,8 +1802,6 @@ static ADF_NBUF_TRACK *adf_nbuf_track_alloc(void)
*/
static void adf_nbuf_track_free(ADF_NBUF_TRACK *node)
{
- unsigned long irq_flag;
-
if (!node)
return;
@@ -1333,7 +1813,7 @@ static void adf_nbuf_track_free(ADF_NBUF_TRACK *node)
* traffic occurs.
*/
- spin_lock_irqsave(&adf_net_buf_track_free_list_lock, irq_flag);
+ adf_os_spin_lock_irqsave(&adf_net_buf_track_free_list_lock);
adf_net_buf_track_used_list_count--;
if (adf_net_buf_track_free_list_count > FREEQ_POOLSIZE &&
@@ -1346,7 +1826,7 @@ static void adf_nbuf_track_free(ADF_NBUF_TRACK *node)
adf_net_buf_track_free_list_count++;
}
adf_update_max_free();
- spin_unlock_irqrestore(&adf_net_buf_track_free_list_lock, irq_flag);
+ adf_os_spin_unlock_irqrestore(&adf_net_buf_track_free_list_lock);
}
/**
@@ -1392,7 +1872,7 @@ static void adf_nbuf_track_prefill(void)
*/
static void adf_nbuf_track_memory_manager_create(void)
{
- spin_lock_init(&adf_net_buf_track_free_list_lock);
+ adf_os_spinlock_init(&adf_net_buf_track_free_list_lock);
nbuf_tracking_cache = kmem_cache_create("adf_nbuf_tracking_cache",
sizeof(ADF_NBUF_TRACK),
0, 0, NULL);
@@ -1412,7 +1892,6 @@ static void adf_nbuf_track_memory_manager_create(void)
static void adf_nbuf_track_memory_manager_destroy(void)
{
ADF_NBUF_TRACK *node, *tmp;
- unsigned long irq_flag;
adf_print("%s: %d residual freelist size",
__func__, adf_net_buf_track_free_list_count);
@@ -1426,7 +1905,7 @@ static void adf_nbuf_track_memory_manager_destroy(void)
adf_print("%s: %d max buffers allocated observed",
__func__, adf_net_buf_track_max_allocated);
- spin_lock_irqsave(&adf_net_buf_track_free_list_lock, irq_flag);
+ adf_os_spin_lock_irqsave(&adf_net_buf_track_free_list_lock);
node = adf_net_buf_track_free_list;
while (node) {
@@ -1451,10 +1930,21 @@ static void adf_nbuf_track_memory_manager_destroy(void)
adf_net_buf_track_max_free = 0;
adf_net_buf_track_max_allocated = 0;
- spin_unlock_irqrestore(&adf_net_buf_track_free_list_lock, irq_flag);
+ adf_os_spin_unlock_irqrestore(&adf_net_buf_track_free_list_lock);
kmem_cache_destroy(nbuf_tracking_cache);
}
+void adf_nbuf_free_debug(adf_nbuf_t net_buf, uint8_t *file, uint32_t line)
+{
+ /* Remove SKB from internal ADF tracking table */
+ adf_nbuf_panic_on_free_if_mapped(net_buf, file, line);
+ if (adf_os_likely(net_buf))
+ adf_net_buf_debug_delete_node(net_buf);
+
+ adf_nbuf_history_add(net_buf, file, line, ADF_NBUF_FREE);
+ __adf_nbuf_free(net_buf);
+}
+
/**
* adf_net_buf_debug_init() - initialize network buffer debug functionality
*
@@ -1470,11 +1960,14 @@ void adf_net_buf_debug_init(void)
{
uint32_t i;
+ adf_os_atomic_set(&adf_nbuf_history_index, -1);
+
+ adf_nbuf_map_tracking_init();
adf_nbuf_track_memory_manager_create();
for (i = 0; i < ADF_NET_BUF_TRACK_MAX_SIZE; i++) {
gp_adf_net_buf_track_tbl[i] = NULL;
- spin_lock_init(&g_adf_net_buf_track_lock[i]);
+ adf_os_spinlock_init(&g_adf_net_buf_track_lock[i]);
}
return;
@@ -1492,12 +1985,11 @@ void adf_net_buf_debug_init(void)
void adf_net_buf_debug_exit(void)
{
uint32_t i;
- unsigned long irq_flag;
ADF_NBUF_TRACK *p_node;
ADF_NBUF_TRACK *p_prev;
for (i = 0; i < ADF_NET_BUF_TRACK_MAX_SIZE; i++) {
- spin_lock_irqsave(&g_adf_net_buf_track_lock[i], irq_flag);
+ adf_os_spin_lock_irqsave(&g_adf_net_buf_track_lock[i]);
p_node = gp_adf_net_buf_track_tbl[i];
while (p_node) {
p_prev = p_node;
@@ -1507,10 +1999,11 @@ void adf_net_buf_debug_exit(void)
p_prev->size);
adf_nbuf_track_free(p_prev);
}
- spin_unlock_irqrestore(&g_adf_net_buf_track_lock[i], irq_flag);
+ adf_os_spin_unlock_irqrestore(&g_adf_net_buf_track_lock[i]);
}
adf_nbuf_track_memory_manager_destroy();
+ adf_nbuf_map_tracking_deinit();
return;
}
@@ -1563,14 +2056,13 @@ void adf_net_buf_debug_add_node(adf_nbuf_t net_buf, size_t size,
uint8_t *file_name, uint32_t line_num)
{
uint32_t i;
- unsigned long irq_flag;
ADF_NBUF_TRACK *p_node;
ADF_NBUF_TRACK *new_node;
new_node = adf_nbuf_track_alloc();
i = adf_net_buf_debug_hash(net_buf);
- spin_lock_irqsave(&g_adf_net_buf_track_lock[i], irq_flag);
+ adf_os_spin_lock_irqsave(&g_adf_net_buf_track_lock[i]);
p_node = adf_net_buf_debug_look_up(net_buf);
@@ -1599,7 +2091,7 @@ void adf_net_buf_debug_add_node(adf_nbuf_t net_buf, size_t size,
}
done:
- spin_unlock_irqrestore(&g_adf_net_buf_track_lock[i], irq_flag);
+ adf_os_spin_unlock_irqrestore(&g_adf_net_buf_track_lock[i]);
return;
}
@@ -1615,11 +2107,10 @@ void adf_net_buf_debug_delete_node(adf_nbuf_t net_buf)
bool found = false;
ADF_NBUF_TRACK *p_head;
ADF_NBUF_TRACK *p_node;
- unsigned long irq_flag;
ADF_NBUF_TRACK *p_prev;
i = adf_net_buf_debug_hash(net_buf);
- spin_lock_irqsave(&g_adf_net_buf_track_lock[i], irq_flag);
+ adf_os_spin_lock_irqsave(&g_adf_net_buf_track_lock[i]);
p_head = gp_adf_net_buf_track_tbl[i];
@@ -1647,7 +2138,7 @@ void adf_net_buf_debug_delete_node(adf_nbuf_t net_buf)
}
done:
- spin_unlock_irqrestore(&g_adf_net_buf_track_lock[i], irq_flag);
+ adf_os_spin_unlock_irqrestore(&g_adf_net_buf_track_lock[i]);
if (!found) {
adf_print("Unallocated buffer ! Double free of net_buf %pK ?",
diff --git a/CORE/SERVICES/COMMON/adf/adf_nbuf.h b/CORE/SERVICES/COMMON/adf/adf_nbuf.h
index 0bf5a009f33a..53e349c782a7 100644
--- a/CORE/SERVICES/COMMON/adf/adf_nbuf.h
+++ b/CORE/SERVICES/COMMON/adf/adf_nbuf.h
@@ -387,6 +387,78 @@ adf_nbuf_dmamap_set_cb(adf_os_dma_map_t dmap, adf_os_dma_map_cb_t cb,
__adf_nbuf_dmamap_set_cb(dmap, cb, arg);
}
+#ifdef NBUF_MAP_UNMAP_DEBUG
+#define ADF_MEM_FILE_NAME_SIZE 48
+enum adf_nbuf_event_type {
+ ADF_NBUF_ALLOC,
+ ADF_NBUF_ALLOC_FAILURE,
+ ADF_NBUF_FREE,
+ ADF_NBUF_MAP,
+ ADF_NBUF_UNMAP,
+};
+
+struct adf_nbuf_event {
+ adf_nbuf_t nbuf;
+ char file[ADF_MEM_FILE_NAME_SIZE];
+ uint32_t line;
+ enum adf_nbuf_event_type type;
+ uint64_t timestamp;
+};
+
+struct adf_nbuf_map_metadata {
+ struct hlist_node node;
+ adf_nbuf_t nbuf;
+ char file[ADF_MEM_FILE_NAME_SIZE];
+ uint32_t line;
+};
+
+#define ADF_FM_BITMAP uint32_t
+#define ADF_FM_BITMAP_BITS (sizeof(ADF_FM_BITMAP) * 8)
+
+#define adf_ffz(mask) (~(mask) == 0 ? -1 : ffz(mask))
+void
+adf_nbuf_history_add(adf_nbuf_t nbuf, const char *file, uint32_t line,
+ enum adf_nbuf_event_type type);
+
+void adf_nbuf_map_check_for_leaks(void);
+
+a_status_t adf_nbuf_map_debug(adf_os_device_t osdev,
+ adf_nbuf_t buf,
+ adf_os_dma_dir_t dir,
+ const char *file,
+ uint32_t line);
+
+#define adf_nbuf_map(osdev, buf, dir) \
+ adf_nbuf_map_debug(osdev, buf, dir, __FILE__, __LINE__)
+void adf_nbuf_unmap_debug(adf_os_device_t osdev,
+ adf_nbuf_t buf,
+ adf_os_dma_dir_t dir,
+ const char *file,
+ uint32_t line);
+
+#define adf_nbuf_unmap(osdev, buf, dir) \
+ adf_nbuf_unmap_debug(osdev, buf, dir, __FILE__, __LINE__)
+
+a_status_t adf_nbuf_map_single_debug(adf_os_device_t osdev,
+ adf_nbuf_t buf,
+ adf_os_dma_dir_t dir,
+ const char *file,
+ uint32_t line);
+
+#define adf_nbuf_map_single(osdev, buf, dir) \
+ adf_nbuf_map_single_debug(osdev, buf, dir, __FILE__, __LINE__)
+
+void adf_nbuf_unmap_single_debug(adf_os_device_t osdev,
+ adf_nbuf_t buf,
+ adf_os_dma_dir_t dir,
+ const char *file,
+ uint32_t line);
+
+#define adf_nbuf_unmap_single(osdev, buf, dir) \
+ adf_nbuf_unmap_single_debug(osdev, buf, dir, __FILE__, __LINE__)
+
+#else
+static inline void adf_nbuf_map_check_for_leaks(void) {}
/**
* @brief Map a buffer to local bus address space
*
@@ -447,6 +519,7 @@ adf_nbuf_unmap_single(
__adf_nbuf_unmap_single(osdev, buf, dir);
#endif
}
+#endif
static inline int
adf_nbuf_get_num_frags(adf_nbuf_t buf)
@@ -530,21 +603,19 @@ adf_nbuf_alloc_debug(adf_os_device_t osdev, adf_os_size_t size, int reserve,
net_buf = __adf_nbuf_alloc(osdev, size, reserve, align, prio);
/* Store SKB in internal ADF tracking table */
- if (adf_os_likely(net_buf))
+ if (adf_os_likely(net_buf)) {
adf_net_buf_debug_add_node(net_buf, size, file_name, line_num);
-
+ adf_nbuf_history_add(net_buf, file_name, line_num, ADF_NBUF_ALLOC);
+ } else {
+ adf_nbuf_history_add(net_buf, file_name, line_num, ADF_NBUF_ALLOC_FAILURE);
+ }
return net_buf;
}
-static inline void adf_nbuf_free(adf_nbuf_t net_buf)
-{
- /* Remove SKB from internal ADF tracking table */
- if (adf_os_likely(net_buf))
- adf_net_buf_debug_delete_node(net_buf);
-
- __adf_nbuf_free(net_buf);
-}
+void adf_nbuf_free_debug(adf_nbuf_t nbuf, uint8_t *file, uint32_t line);
+#define adf_nbuf_free(d) \
+ adf_nbuf_free_debug(d, __FILE__, __LINE__)
#else
static inline void adf_net_buf_debug_release_skb(adf_nbuf_t net_buf)
diff --git a/CORE/SERVICES/COMMON/adf/adf_os_lock.h b/CORE/SERVICES/COMMON/adf/adf_os_lock.h
index 545e62cb3379..819285bd548a 100644
--- a/CORE/SERVICES/COMMON/adf/adf_os_lock.h
+++ b/CORE/SERVICES/COMMON/adf/adf_os_lock.h
@@ -126,6 +126,14 @@ adf_os_spinlock_destroy(adf_os_spinlock_t *lock)
__adf_os_spinlock_destroy(lock);
}
+#define adf_os_raw_spin_lock(_lock) __adf_os_raw_spin_lock(_lock)
+#define adf_os_raw_spin_unlock(_lock) __adf_os_raw_spin_unlock(_lock)
+#define adf_os_raw_spin_lock_bh(_lock) __adf_os_raw_spin_lock_bh(_lock)
+#define adf_os_raw_spin_unlock_bh(_lock) __adf_os_raw_spin_unlock_bh(_lock)
+#define adf_os_raw_spin_lock_irqsave( _lock, flag) __adf_os_raw_spin_lock_irqsave(_lock, flag)
+#define adf_os_raw_spin_unlock_irqrestore( _lock, flag) \
+ __adf_os_raw_spin_unlock_irqrestore(_lock, flag)
+
#define adf_os_spin_lock( _lock) __adf_os_spin_lock(_lock)
#define adf_os_spin_unlock( _lock ) __adf_os_spin_unlock(_lock)
#define adf_os_spin_lock_irqsave( _lock) __adf_os_spin_lock_irqsave(_lock)
diff --git a/CORE/SERVICES/COMMON/adf/adf_trace.c b/CORE/SERVICES/COMMON/adf/adf_trace.c
index 4a7b30aea52c..fbe623564aee 100644
--- a/CORE/SERVICES/COMMON/adf/adf_trace.c
+++ b/CORE/SERVICES/COMMON/adf/adf_trace.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2017 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2016-2018 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -46,7 +46,7 @@
#include "vos_timer.h"
/* Static and Global variables */
-static spinlock_t l_dp_trace_lock;
+static adf_os_spinlock_t l_dp_trace_lock;
static struct adf_dp_trace_record_s
g_adf_dp_trace_tbl[MAX_ADF_DP_TRACE_RECORDS];
@@ -72,7 +72,7 @@ void adf_dp_trace_init(void)
{
uint8_t i;
- spin_lock_init(&l_dp_trace_lock);
+ adf_os_spinlock_init(&l_dp_trace_lock);
g_adf_dp_trace_data.head = INVALID_ADF_DP_TRACE_ADDR;
g_adf_dp_trace_data.tail = INVALID_ADF_DP_TRACE_ADDR;
g_adf_dp_trace_data.num = 0;
@@ -114,11 +114,11 @@ void adf_dp_trace_init(void)
void adf_dp_trace_set_value(uint8_t proto_bitmap, uint8_t no_of_record,
uint8_t verbosity)
{
- spin_lock_bh(&l_dp_trace_lock);
+ adf_os_spin_lock_bh(&l_dp_trace_lock);
g_adf_dp_trace_data.proto_bitmap = proto_bitmap;
g_adf_dp_trace_data.no_of_record = no_of_record;
g_adf_dp_trace_data.verbosity = verbosity;
- spin_unlock_bh(&l_dp_trace_lock);
+ adf_os_spin_unlock_bh(&l_dp_trace_lock);
}
/**
@@ -173,7 +173,7 @@ void adf_dp_trace_set_track(adf_nbuf_t nbuf, enum adf_proto_dir dir)
{
uint32_t count = 0;
- spin_lock_bh(&l_dp_trace_lock);
+ adf_os_spin_lock_bh(&l_dp_trace_lock);
if (ADF_TX == dir)
count = ++g_adf_dp_trace_data.tx_count;
else if (ADF_RX == dir)
@@ -186,7 +186,7 @@ void adf_dp_trace_set_track(adf_nbuf_t nbuf, enum adf_proto_dir dir)
else if (ADF_RX == dir)
ADF_NBUF_CB_RX_DP_TRACE(nbuf) = 1;
}
- spin_unlock_bh(&l_dp_trace_lock);
+ adf_os_spin_unlock_bh(&l_dp_trace_lock);
}
#define DPTRACE_PRINT(args...) \
@@ -415,7 +415,7 @@ void adf_dp_add_record(enum ADF_DP_TRACE_ID code,
struct adf_dp_trace_record_s *rec = NULL;
int index;
- spin_lock_bh(&l_dp_trace_lock);
+ adf_os_spin_lock_bh(&l_dp_trace_lock);
g_adf_dp_trace_data.num++;
@@ -456,7 +456,7 @@ void adf_dp_add_record(enum ADF_DP_TRACE_ID code,
vos_get_time_of_the_day_in_hr_min_sec_usec(rec->time,
sizeof(rec->time));
rec->pid = (in_interrupt() ? 0 : current->pid);
- spin_unlock_bh(&l_dp_trace_lock);
+ adf_os_spin_unlock_bh(&l_dp_trace_lock);
if ((g_adf_dp_trace_data.live_mode || print == true) &&
(rec->code < ADF_DP_TRACE_MAX))
@@ -874,7 +874,7 @@ void adf_dp_trace_dump_all(uint32_t count)
/* aquire the lock so that only one thread at a time can read
* the ring buffer
*/
- spin_lock_bh(&l_dp_trace_lock);
+ adf_os_spin_lock_bh(&l_dp_trace_lock);
if (g_adf_dp_trace_data.head != INVALID_ADF_DP_TRACE_ADDR) {
i = g_adf_dp_trace_data.head;
@@ -891,7 +891,7 @@ void adf_dp_trace_dump_all(uint32_t count)
}
pRecord = g_adf_dp_trace_tbl[i];
- spin_unlock_bh(&l_dp_trace_lock);
+ adf_os_spin_unlock_bh(&l_dp_trace_lock);
for (;; ) {
adf_dp_trace_cb_table[pRecord.
code] (&pRecord, (uint16_t)i);
@@ -899,14 +899,14 @@ void adf_dp_trace_dump_all(uint32_t count)
break;
i += 1;
- spin_lock_bh(&l_dp_trace_lock);
+ adf_os_spin_lock_bh(&l_dp_trace_lock);
if (MAX_ADF_DP_TRACE_RECORDS == i)
i = 0;
pRecord = g_adf_dp_trace_tbl[i];
- spin_unlock_bh(&l_dp_trace_lock);
+ adf_os_spin_unlock_bh(&l_dp_trace_lock);
}
} else {
- spin_unlock_bh(&l_dp_trace_lock);
+ adf_os_spin_unlock_bh(&l_dp_trace_lock);
}
}
diff --git a/CORE/SERVICES/COMMON/adf/linux/adf_os_dma_pvt.h b/CORE/SERVICES/COMMON/adf/linux/adf_os_dma_pvt.h
index d0e9e6322ed4..6a5bcda733c9 100644
--- a/CORE/SERVICES/COMMON/adf/linux/adf_os_dma_pvt.h
+++ b/CORE/SERVICES/COMMON/adf/linux/adf_os_dma_pvt.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013 2018 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -42,6 +42,13 @@
#include <adf_os_types.h>
#include <adf_os_util.h>
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0)
+#define __adf_os_dma_alloc_noncoherent(dev, size, daddr, flag, attr) dma_alloc_attrs(dev, size, daddr, flag, attr)
+#define __adf_os_dma_free_noncoherent(dev, size, vddr, daddr, attr) dma_free_attrs(dev, size, vddr, daddr, attr)
+#else
+#define __adf_os_dma_alloc_noncoherent(dev, size, daddr, flag, attr) dma_alloc_noncoherent(dev, size, daddr, flag)
+#define __adf_os_dma_free_noncoherent(dev, size, vddr, daddr, attr) dma_free_noncoherent(dev, size, vddr, daddr)
+#endif
/**
* XXX:error handling
*
@@ -74,8 +81,9 @@ __adf_os_dmamem_alloc(adf_os_device_t osdev,
vaddr = dma_alloc_coherent(osdev->dev, size, &lmap->seg[0].daddr,
GFP_ATOMIC);
else
- vaddr = dma_alloc_noncoherent(osdev->dev, size, &lmap->seg[0].daddr,
- GFP_ATOMIC);
+ vaddr = __adf_os_dma_alloc_noncoherent(osdev->dev, size,
+ &lmap->seg[0].daddr,
+ GFP_ATOMIC, DMA_ATTR_NON_CONSISTENT);
adf_os_assert(vaddr);
@@ -100,7 +108,9 @@ __adf_os_dmamem_free(adf_os_device_t osdev, __adf_os_size_t size,
if(coherent)
dma_free_coherent(osdev->dev, size, vaddr, dmap->seg[0].daddr);
else
- dma_free_noncoherent(osdev->dev, size, vaddr, dmap->seg[0].daddr);
+ __adf_os_dma_free_noncoherent(osdev->dev, size, vaddr,
+ dmap->seg[0].daddr,
+ DMA_ATTR_NON_CONSISTENT);
kfree(dmap);
}
diff --git a/CORE/SERVICES/COMMON/adf/linux/adf_os_lock_pvt.h b/CORE/SERVICES/COMMON/adf/linux/adf_os_lock_pvt.h
index 123e248e6a7b..326502a7fabc 100644
--- a/CORE/SERVICES/COMMON/adf/linux/adf_os_lock_pvt.h
+++ b/CORE/SERVICES/COMMON/adf/linux/adf_os_lock_pvt.h
@@ -102,31 +102,14 @@ __adf_os_spinlock_init(__adf_os_spinlock_t *lock)
return A_STATUS_OK;
}
-#define __adf_os_spinlock_destroy(lock)
-/**
- * @brief Acquire a Spinlock (SMP) & disable Preemption (Preemptive)
- *
- * @param lock (Lock object)
- * @param flags (Current IRQ mask)
- */
-static inline void
-__adf_os_spin_lock(__adf_os_spinlock_t *lock)
-{
- spin_lock(&lock->spinlock);
-}
-
-/**
- * @brief Unlock the spinlock and enables the Preemption
- *
- * @param lock
- * @param flags
- */
-static inline void
-__adf_os_spin_unlock(__adf_os_spinlock_t *lock)
-{
- spin_unlock(&lock->spinlock);
-}
+#define __adf_os_raw_spin_lock(_lock) spin_lock(_lock)
+#define __adf_os_raw_spin_unlock(_lock) spin_unlock(_lock)
+#define __adf_os_raw_spin_lock_bh(_lock) spin_lock_bh(_lock)
+#define __adf_os_raw_spin_unlock_bh(_lock) spin_unlock_bh(_lock)
+#define __adf_os_raw_spin_lock_irqsave(_lock, flag) spin_lock_irqsave(_lock, flag)
+#define __adf_os_raw_spin_unlock_irqrestore(_lock, flag) spin_unlock_irqrestore(_lock, flag)
+#define __adf_os_spinlock_destroy(lock)
/**
* @brief Acquire a Spinlock (SMP) & disable Preemption (Preemptive)
* Disable IRQs
@@ -182,6 +165,45 @@ __adf_os_spin_unlock_bh(__adf_os_spinlock_t *lock)
spin_unlock(&lock->spinlock);
}
+/**
+ * @brief Acquire a Spinlock (SMP) & disable Preemption (Preemptive)
+ *
+ * @param lock (Lock object)
+ * @param flags (Current IRQ mask)
+ */
+#ifdef CONFIG_SMP
+static inline void
+__adf_os_spin_lock(__adf_os_spinlock_t *lock)
+{
+ __adf_os_spin_lock_bh(lock);
+}
+
+static inline void
+__adf_os_spin_unlock(__adf_os_spinlock_t *lock)
+{
+ __adf_os_spin_unlock_bh(lock);
+}
+
+#else
+static inline void
+__adf_os_spin_lock(__adf_os_spinlock_t *lock)
+{
+ spin_lock(&lock->spinlock);
+}
+
+/**
+ * @brief Unlock the spinlock and enables the Preemption
+ *
+ * @param lock
+ * @param flags
+ */
+static inline void
+__adf_os_spin_unlock(__adf_os_spinlock_t *lock)
+{
+ spin_unlock(&lock->spinlock);
+}
+#endif
+
static inline a_bool_t
__adf_os_spinlock_irq_exec(adf_os_handle_t hdl,
__adf_os_spinlock_t *lock,
diff --git a/CORE/SERVICES/COMMON/dbglog_id.h b/CORE/SERVICES/COMMON/dbglog_id.h
index bd48e61b94de..26a1d9a5629e 100644
--- a/CORE/SERVICES/COMMON/dbglog_id.h
+++ b/CORE/SERVICES/COMMON/dbglog_id.h
@@ -2074,6 +2074,12 @@ typedef enum {
#define WLAN_MODULE_QBOOST_DBGID_WLAN_PEER_NOT_FOUND 1
#define WLAN_MODULE_QBOOST_DEFINITION_END 2
+/* HPCS DBGID */
+#define HPCS_PULSE_START 0
+#define HPCS_PULSE_LF_TIMER 1
+#define HPCS_PULSE_HF_TIMER 2
+#define HPCS_PULSE_POWER_SAVE 3
+
#ifdef __cplusplus
}
#endif
diff --git a/CORE/SERVICES/COMMON/hif.h b/CORE/SERVICES/COMMON/hif.h
index c3fd162d67a8..df15748cd251 100644
--- a/CORE/SERVICES/COMMON/hif.h
+++ b/CORE/SERVICES/COMMON/hif.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013-2018 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2016, 2018 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
diff --git a/CORE/SERVICES/COMMON/osdep_adf.h b/CORE/SERVICES/COMMON/osdep_adf.h
index 4e2ff99eb516..2ae84e03b382 100644
--- a/CORE/SERVICES/COMMON/osdep_adf.h
+++ b/CORE/SERVICES/COMMON/osdep_adf.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013-2014, 2017 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2014, 2017-2018 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -65,6 +65,7 @@
#include "if_upperproto.h"
#include "ah_osdep.h"
+#include <adf_os_lock.h>
#ifdef AR9100
#include <ar9100.h>
@@ -277,6 +278,7 @@ typedef rwlock_t usb_readwrite_lock_t;
#ifdef CONFIG_SMP
/* Undo the one provided by the kernel to debug spin locks */
+#if 0
#undef spin_lock
#undef spin_unlock
#undef spin_trylock
@@ -297,6 +299,7 @@ spin_unlock_bh(x);\
} while (0)
#define spin_trylock(x) spin_trylock_bh(x)
+#endif
#define OS_SUPPORT_ASYNC_Q 1 /* support for handling asyn function calls */
@@ -465,7 +468,7 @@ typedef struct {
os_tasklet_routine_t routine;
atomic_t queued;
void *data;
- spinlock_t lock;
+ adf_os_spinlock_t lock;
} os_task_t;
typedef struct _os_schedule_routing_mesg {
@@ -492,8 +495,8 @@ typedef struct {
u_int8_t *mesg_queue_buf;
STAILQ_HEAD(, _os_mesg_t) mesg_head; /* queued mesg buffers */
STAILQ_HEAD(, _os_mesg_t) mesg_free_head; /* free mesg buffers */
- spinlock_t lock;
- spinlock_t ev_handler_lock;
+ adf_os_spinlock_t lock;
+ adf_os_spinlock_t ev_handler_lock;
#ifdef USE_SOFTINTR
void *_task;
#else
@@ -686,7 +689,7 @@ os_mesgq_handler(void *timer_arg)
/*
* Request access to message queue to retrieve message for processing
*/
- spin_lock(&(queue->lock));
+ adf_os_spin_lock(&(queue->lock));
mesg = STAILQ_FIRST(&queue->mesg_head);
while(mesg) {
@@ -699,19 +702,19 @@ os_mesgq_handler(void *timer_arg)
/*
* Release access to message queue before processing message
*/
- spin_unlock(&(queue->lock));
+ adf_os_spin_unlock(&(queue->lock));
/*
* Ensure just one message can be processes at a time.
*/
- spin_lock(&(queue->ev_handler_lock));
+ adf_os_spin_lock(&(queue->ev_handler_lock));
queue->handler(queue->ctx,mesg->mesg_type,mesg->mesg_len, msg);
- spin_unlock(&(queue->ev_handler_lock));
+ adf_os_spin_unlock(&(queue->ev_handler_lock));
/*
* Request access to message queue to retrieve next message
*/
- spin_lock(&(queue->lock));
+ adf_os_spin_lock(&(queue->lock));
queue->num_queued--;
STAILQ_INSERT_TAIL(&queue->mesg_free_head,mesg, mesg_next);
mesg = STAILQ_FIRST(&queue->mesg_head);
@@ -720,7 +723,7 @@ os_mesgq_handler(void *timer_arg)
/*
* Release message queue
*/
- spin_unlock(&(queue->lock));
+ adf_os_spin_unlock(&(queue->lock));
}
/*
@@ -748,8 +751,8 @@ static INLINE int OS_MESGQ_INIT(osdev_t devhandle, os_mesg_queue_t *queue,
queue->dev_handle = devhandle;
STAILQ_INIT(&queue->mesg_head);
STAILQ_INIT(&queue->mesg_free_head);
- spin_lock_init(&(queue->lock));
- spin_lock_init(&(queue->ev_handler_lock));
+ adf_os_spinlock_init(&(queue->lock));
+ adf_os_spinlock_init(&(queue->ev_handler_lock));
mesg = (os_mesg_t *)queue->mesg_queue_buf;
for (i=0;i<max_queued;++i) {
STAILQ_INSERT_TAIL(&queue->mesg_free_head,mesg,mesg_next);
@@ -785,7 +788,7 @@ static INLINE int OS_MESGQ_SEND(os_mesg_queue_t *queue,u_int16_t type, u_int16_t
{
os_mesg_t *mesg;
- spin_lock(&(queue->lock));
+ adf_os_spin_lock(&(queue->lock));
if (queue->is_synchronous ) {
queue->handler(queue->ctx,type,len, msg);
} else {
@@ -801,7 +804,7 @@ static INLINE int OS_MESGQ_SEND(os_mesg_queue_t *queue,u_int16_t type, u_int16_t
STAILQ_INSERT_TAIL(&queue->mesg_head, mesg, mesg_next);
queue->num_queued++;
} else {
- spin_unlock(&(queue->lock));
+ adf_os_spin_unlock(&(queue->lock));
printk("No more message queue buffers !!! \n");
return -ENOMEM;
}
@@ -814,7 +817,7 @@ static INLINE int OS_MESGQ_SEND(os_mesg_queue_t *queue,u_int16_t type, u_int16_t
#endif
}
}
- spin_unlock(&(queue->lock));
+ adf_os_spin_unlock(&(queue->lock));
return 0;
}
@@ -842,7 +845,7 @@ static INLINE void OS_MESGQ_DRAIN(os_mesg_queue_t *queue, os_mesg_handler_t msg_
os_mesg_t *mesg = NULL;
void *msg;
- spin_lock(&(queue->lock));
+ adf_os_spin_lock(&(queue->lock));
#ifndef USE_SOFTINTR
OS_CANCEL_TIMER(&queue->_timer);
#endif
@@ -862,7 +865,7 @@ static INLINE void OS_MESGQ_DRAIN(os_mesg_queue_t *queue, os_mesg_handler_t msg_
mesg = STAILQ_FIRST(&queue->mesg_head);
};
STAILQ_INIT(&queue->mesg_head);
- spin_unlock(&(queue->lock));
+ adf_os_spin_unlock(&(queue->lock));
}
@@ -874,7 +877,7 @@ static INLINE void OS_MESGQ_DRAIN(os_mesg_queue_t *queue, os_mesg_handler_t msg_
static INLINE void OS_MESGQ_DESTROY(os_mesg_queue_t *queue)
{
- spin_lock(&(queue->lock));
+ adf_os_spin_lock(&(queue->lock));
#ifdef USE_SOFTINTR
softintr_disestablish(queue->_task);
#else
@@ -887,9 +890,9 @@ static INLINE void OS_MESGQ_DESTROY(os_mesg_queue_t *queue)
#ifndef USE_SOFTINTR
OS_FREE_TIMER(&queue->_timer);
#endif
- spin_unlock(&(queue->lock));
- spin_lock_destroy(&(queue->lock));
- spin_lock_destroy(&(queue->ev_handler_lock));
+ adf_os_spin_unlock(&(queue->lock));
+ adf_os_spinlock_destroy(&(queue->lock));
+ adf_os_spinlock_destroy(&(queue->ev_handler_lock));
}
diff --git a/CORE/SERVICES/COMMON/wlan_module_ids.h b/CORE/SERVICES/COMMON/wlan_module_ids.h
index 19ea4294d220..9953a3e4bb62 100644
--- a/CORE/SERVICES/COMMON/wlan_module_ids.h
+++ b/CORE/SERVICES/COMMON/wlan_module_ids.h
@@ -112,6 +112,7 @@ typedef enum {
WLAN_MODULE_STA_TWT, /* 0x4d */
WLAN_MODULE_AP_TWT, /* 0x4e */
WLAN_MODULE_UL_OFDMA, /* 0x4f */
+ WLAN_MODULE_HPCS_PULSE, /* 0x50 */
WLAN_MODULE_ID_MAX,
WLAN_MODULE_ID_INVALID = WLAN_MODULE_ID_MAX,
diff --git a/CORE/SERVICES/HIF/PCIe/hif_pci.c b/CORE/SERVICES/HIF/PCIe/hif_pci.c
index 280976459e56..0511191e3175 100644
--- a/CORE/SERVICES/HIF/PCIe/hif_pci.c
+++ b/CORE/SERVICES/HIF/PCIe/hif_pci.c
@@ -91,7 +91,7 @@ ATH_DEBUG_INSTANTIATE_MODULE_VAR(hif,
#ifdef CONFIG_ATH_PCIE_ACCESS_DEBUG
-spinlock_t pcie_access_log_lock;
+adf_os_spinlock_t pcie_access_log_lock;
unsigned int pcie_access_log_seqnum = 0;
HIF_ACCESS_LOG pcie_access_log[PCIE_ACCESS_LOG_NUM];
static void HIFTargetDumpAccessLog(void);
@@ -255,14 +255,14 @@ WAR_PCI_WRITE32(char *addr, u32 offset, u32 value)
if (hif_pci_war1) {
unsigned long irq_flags;
- spin_lock_irqsave(&pciwar_lock, irq_flags);
+ adf_os_raw_spin_lock_irqsave(&pciwar_lock, irq_flags);
(void)ioread32((void __iomem *)(addr+offset+4)); /* 3rd read prior to write */
(void)ioread32((void __iomem *)(addr+offset+4)); /* 2nd read prior to write */
(void)ioread32((void __iomem *)(addr+offset+4)); /* 1st read prior to write */
iowrite32((u32)(value), (void __iomem *)(addr+offset));
- spin_unlock_irqrestore(&pciwar_lock, irq_flags);
+ adf_os_raw_spin_unlock_irqrestore(&pciwar_lock, irq_flags);
} else {
iowrite32((u32)(value), (void __iomem *)(addr+offset));
}
@@ -619,7 +619,7 @@ HIFPostInit(HIF_DEVICE *hif_device, void *unused, MSG_BASED_HIF_CALLBACKS *callb
AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("+%s\n",__FUNCTION__));
#ifdef CONFIG_ATH_PCIE_ACCESS_DEBUG
- spin_lock_init(&pcie_access_log_lock);
+ adf_os_spinlock_init(&pcie_access_log_lock);
#endif
/* Save callbacks for later installation */
A_MEMCPY(&hif_state->msg_callbacks_pending, callbacks, sizeof(hif_state->msg_callbacks_pending));
@@ -2979,16 +2979,15 @@ HIFTargetReadChecked(A_target_id_t targid, A_UINT32 offset)
value = A_PCI_READ32(addr);
{
- unsigned long irq_flags;
int idx = pcie_access_log_seqnum % PCIE_ACCESS_LOG_NUM;
- spin_lock_irqsave(&pcie_access_log_lock, irq_flags);
+ adf_os_spin_lock_irqsave(&pcie_access_log_lock);
pcie_access_log[idx].seqnum = pcie_access_log_seqnum;
pcie_access_log[idx].is_write = FALSE;
pcie_access_log[idx].addr = addr;
pcie_access_log[idx].value = value;
pcie_access_log_seqnum++;
- spin_unlock_irqrestore(&pcie_access_log_lock, irq_flags);
+ adf_os_spin_unlock_irqrestore(&pcie_access_log_lock);
}
return value;
@@ -3007,16 +3006,15 @@ HIFTargetWriteChecked(A_target_id_t targid, A_UINT32 offset, A_UINT32 value)
A_PCI_WRITE32(addr, value);
{
- unsigned long irq_flags;
int idx = pcie_access_log_seqnum % PCIE_ACCESS_LOG_NUM;
- spin_lock_irqsave(&pcie_access_log_lock, irq_flags);
+ adf_os_spin_lock_irqsave(&pcie_access_log_lock);
pcie_access_log[idx].seqnum = pcie_access_log_seqnum;
pcie_access_log[idx].is_write = TRUE;
pcie_access_log[idx].addr = addr;
pcie_access_log[idx].value = value;
pcie_access_log_seqnum++;
- spin_unlock_irqrestore(&pcie_access_log_lock, irq_flags);
+ adf_os_spin_unlock_irqrestore(&pcie_access_log_lock);
}
}
@@ -3031,9 +3029,8 @@ void
HIFTargetDumpAccessLog(void)
{
int idx, len, start_idx, cur_idx;
- unsigned long irq_flags;
- spin_lock_irqsave(&pcie_access_log_lock, irq_flags);
+ adf_os_spin_lock_irqsave(&pcie_access_log_lock);
if (pcie_access_log_seqnum > PCIE_ACCESS_LOG_NUM)
{
len = PCIE_ACCESS_LOG_NUM;
@@ -3057,7 +3054,7 @@ HIFTargetDumpAccessLog(void)
}
pcie_access_log_seqnum = 0;
- spin_unlock_irqrestore(&pcie_access_log_lock, irq_flags);
+ adf_os_spin_unlock_irqrestore(&pcie_access_log_lock);
}
#endif
@@ -3379,7 +3376,7 @@ void hif_pci_runtime_pm_timeout_fn(unsigned long data)
unsigned long timer_expires;
struct hif_pm_runtime_context *context, *temp;
- spin_lock_bh(&hif_sc->runtime_lock);
+ adf_os_spin_lock_bh(&hif_sc->runtime_lock);
timer_expires = hif_sc->runtime_timer_expires;
@@ -3407,7 +3404,7 @@ void hif_pci_runtime_pm_timeout_fn(unsigned long data)
}
}
- spin_unlock_bh(&hif_sc->runtime_lock);
+ adf_os_spin_unlock_bh(&hif_sc->runtime_lock);
}
int hif_pm_runtime_prevent_suspend(void *ol_sc, void *data)
@@ -3425,10 +3422,10 @@ int hif_pm_runtime_prevent_suspend(void *ol_sc, void *data)
if (in_irq())
WARN_ON(1);
- spin_lock_bh(&hif_sc->runtime_lock);
+ adf_os_spin_lock_bh(&hif_sc->runtime_lock);
context->timeout = 0;
__hif_pm_runtime_prevent_suspend(hif_sc, context);
- spin_unlock_bh(&hif_sc->runtime_lock);
+ adf_os_spin_unlock_bh(&hif_sc->runtime_lock);
return 0;
}
@@ -3448,7 +3445,7 @@ int hif_pm_runtime_allow_suspend(void *ol_sc, void *data)
if (in_irq())
WARN_ON(1);
- spin_lock_bh(&hif_sc->runtime_lock);
+ adf_os_spin_lock_bh(&hif_sc->runtime_lock);
__hif_pm_runtime_allow_suspend(hif_sc, context);
@@ -3464,7 +3461,7 @@ int hif_pm_runtime_allow_suspend(void *ol_sc, void *data)
hif_sc->runtime_timer_expires = 0;
}
- spin_unlock_bh(&hif_sc->runtime_lock);
+ adf_os_spin_unlock_bh(&hif_sc->runtime_lock);
return 0;
}
@@ -3528,7 +3525,7 @@ int hif_pm_runtime_prevent_suspend_timeout(void *ol_sc, void *data,
expires = jiffies + msecs_to_jiffies(delay);
expires += !expires;
- spin_lock_bh(&hif_sc->runtime_lock);
+ adf_os_spin_lock_bh(&hif_sc->runtime_lock);
context->timeout = delay;
ret = __hif_pm_runtime_prevent_suspend(hif_sc, context);
@@ -3542,7 +3539,7 @@ int hif_pm_runtime_prevent_suspend_timeout(void *ol_sc, void *data,
hif_sc->runtime_timer_expires = expires;
}
- spin_unlock_bh(&hif_sc->runtime_lock);
+ adf_os_spin_unlock_bh(&hif_sc->runtime_lock);
VOS_TRACE(VOS_MODULE_ID_HIF, VOS_TRACE_LEVEL_INFO,
"%s: pm_state: %d delay: %dms ret: %d\n", __func__,
@@ -3606,9 +3603,9 @@ void hif_runtime_pm_prevent_suspend_deinit(void *data)
* Ensure to delete the context list entry and reduce the usage count
* before freeing the context if context is active.
*/
- spin_lock_bh(&sc->runtime_lock);
+ adf_os_spin_lock_bh(&sc->runtime_lock);
__hif_pm_runtime_allow_suspend(sc, context);
- spin_unlock_bh(&sc->runtime_lock);
+ adf_os_spin_unlock_bh(&sc->runtime_lock);
adf_os_mem_free(context);
}
diff --git a/CORE/SERVICES/HIF/PCIe/if_pci.c b/CORE/SERVICES/HIF/PCIe/if_pci.c
index 470c7244f8df..9a937b60eda8 100644
--- a/CORE/SERVICES/HIF/PCIe/if_pci.c
+++ b/CORE/SERVICES/HIF/PCIe/if_pci.c
@@ -943,9 +943,9 @@ static int hif_pci_autopm_debugfs_show(struct seq_file *s, void *data)
msecs_age / 1000, msecs_age % 1000);
}
- spin_lock_bh(&sc->runtime_lock);
+ adf_os_spin_lock_bh(&sc->runtime_lock);
if (list_empty(&sc->prevent_suspend_list)) {
- spin_unlock_bh(&sc->runtime_lock);
+ adf_os_spin_unlock_bh(&sc->runtime_lock);
return 0;
}
@@ -957,7 +957,7 @@ static int hif_pci_autopm_debugfs_show(struct seq_file *s, void *data)
seq_puts(s, " ");
}
seq_puts(s, "\n");
- spin_unlock_bh(&sc->runtime_lock);
+ adf_os_spin_unlock_bh(&sc->runtime_lock);
return 0;
#undef HIF_PCI_AUTOPM_STATS
@@ -1431,7 +1431,7 @@ static inline void hif_pci_pm_debugfs(struct hif_pci_softc *sc, bool init)
static void hif_pci_pm_runtime_pre_init(struct hif_pci_softc *sc)
{
- spin_lock_init(&sc->runtime_lock);
+ adf_os_spinlock_init(&sc->runtime_lock);
setup_timer(&sc->runtime_timer, hif_pci_runtime_pm_timeout_fn,
(unsigned long)sc);
@@ -1514,13 +1514,13 @@ static void hif_pci_pm_runtime_post_exit(struct hif_pci_softc *sc)
else
return;
- spin_lock_bh(&sc->runtime_lock);
+ adf_os_spin_lock_bh(&sc->runtime_lock);
list_for_each_entry_safe(ctx, tmp, &sc->prevent_suspend_list, list) {
- spin_unlock_bh(&sc->runtime_lock);
+ adf_os_spin_unlock_bh(&sc->runtime_lock);
hif_runtime_pm_prevent_suspend_deinit(ctx);
- spin_lock_bh(&sc->runtime_lock);
+ adf_os_spin_lock_bh(&sc->runtime_lock);
}
- spin_unlock_bh(&sc->runtime_lock);
+ adf_os_spin_unlock_bh(&sc->runtime_lock);
/*
* This is totally a preventive measure to ensure Runtime PM
* isn't disabled for life time.
@@ -1549,11 +1549,11 @@ static void hif_pci_pm_runtime_ssr_post_exit(struct hif_pci_softc *sc)
{
struct hif_pm_runtime_context *ctx, *tmp;
- spin_lock_bh(&sc->runtime_lock);
+ adf_os_spin_lock_bh(&sc->runtime_lock);
list_for_each_entry_safe(ctx, tmp, &sc->prevent_suspend_list, list) {
hif_pm_ssr_runtime_allow_suspend(sc, ctx);
}
- spin_unlock_bh(&sc->runtime_lock);
+ adf_os_spin_unlock_bh(&sc->runtime_lock);
}
#else
diff --git a/CORE/SERVICES/HIF/PCIe/if_pci.h b/CORE/SERVICES/HIF/PCIe/if_pci.h
index 0abd26a6adff..4ab0749b832e 100644
--- a/CORE/SERVICES/HIF/PCIe/if_pci.h
+++ b/CORE/SERVICES/HIF/PCIe/if_pci.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013-2016 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2016 2018 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -125,7 +125,7 @@ struct hif_pci_softc {
uint32_t prevent_suspend_cnt;
struct hif_pci_pm_stats pm_stats;
struct work_struct pm_work;
- struct spinlock runtime_lock;
+ adf_os_spinlock_t runtime_lock;
struct timer_list runtime_timer;
struct list_head prevent_suspend_list;
unsigned long runtime_timer_expires;
diff --git a/CORE/SERVICES/HIF/USB/hif_usb.c b/CORE/SERVICES/HIF/USB/hif_usb.c
index c7eecb700518..0fad77b8955a 100644
--- a/CORE/SERVICES/HIF/USB/hif_usb.c
+++ b/CORE/SERVICES/HIF/USB/hif_usb.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013-2017 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2018 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -479,10 +479,10 @@ static HIF_DEVICE_USB *usb_hif_create(struct usb_interface *interface)
adf_os_mem_zero(device, sizeof(*device));
usb_set_intfdata(interface, device);
- spin_lock_init(&(device->cs_lock));
- spin_lock_init(&(device->rx_lock));
- spin_lock_init(&(device->tx_lock));
- spin_lock_init(&(device->rx_prestart_lock));
+ adf_os_spinlock_init(&(device->cs_lock));
+ adf_os_spinlock_init(&(device->rx_lock));
+ adf_os_spinlock_init(&(device->tx_lock));
+ adf_os_spinlock_init(&(device->rx_prestart_lock));
device->udev = dev;
device->interface = interface;
diff --git a/CORE/SERVICES/HIF/USB/hif_usb_internal.h b/CORE/SERVICES/HIF/USB/hif_usb_internal.h
index cfe8613bb682..807329be69bd 100644
--- a/CORE/SERVICES/HIF/USB/hif_usb_internal.h
+++ b/CORE/SERVICES/HIF/USB/hif_usb_internal.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013-2016 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2016 2018 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -114,10 +114,10 @@ typedef struct _HIF_USB_PIPE {
} HIF_USB_PIPE;
typedef struct _HIF_DEVICE_USB {
- spinlock_t cs_lock;
- spinlock_t tx_lock;
- spinlock_t rx_lock;
- spinlock_t rx_prestart_lock;
+ adf_os_spinlock_t cs_lock;
+ adf_os_spinlock_t tx_lock;
+ adf_os_spinlock_t rx_lock;
+ adf_os_spinlock_t rx_prestart_lock;
MSG_BASED_HIF_CALLBACKS htcCallbacks;
struct usb_device *udev;
struct usb_interface *interface;
diff --git a/CORE/SERVICES/HIF/USB/if_usb.c b/CORE/SERVICES/HIF/USB/if_usb.c
index 0d4fdfccdaaa..2aadfc2ea2db 100644
--- a/CORE/SERVICES/HIF/USB/if_usb.c
+++ b/CORE/SERVICES/HIF/USB/if_usb.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013-2018 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2016, 2018 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
diff --git a/CORE/SERVICES/HIF/USB/usbdrv.c b/CORE/SERVICES/HIF/USB/usbdrv.c
index e5011302e40b..86e38656fbf2 100644
--- a/CORE/SERVICES/HIF/USB/usbdrv.c
+++ b/CORE/SERVICES/HIF/USB/usbdrv.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013-2017 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2018 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -60,27 +60,24 @@ static void usb_hif_cleanup_recv_urb(HIF_URB_CONTEXT *urb_context);
static void usb_hif_free_urb_to_pipe(HIF_USB_PIPE *pipe,
HIF_URB_CONTEXT *urb_context)
{
- unsigned long flags;
-
- spin_lock_irqsave(&pipe->device->cs_lock, flags);
+ adf_os_spin_lock_irqsave(&pipe->device->cs_lock);
pipe->urb_cnt++;
DL_ListAdd(&pipe->urb_list_head, &urb_context->link);
- spin_unlock_irqrestore(&pipe->device->cs_lock, flags);
+ adf_os_spin_unlock_irqrestore(&pipe->device->cs_lock);
}
HIF_URB_CONTEXT *usb_hif_alloc_urb_from_pipe(HIF_USB_PIPE *pipe)
{
HIF_URB_CONTEXT *urb_context = NULL;
DL_LIST *item;
- unsigned long flags;
- spin_lock_irqsave(&pipe->device->cs_lock, flags);
+ adf_os_spin_lock_irqsave(&pipe->device->cs_lock);
item = DL_ListRemoveItemFromHead(&pipe->urb_list_head);
if (item != NULL) {
urb_context = A_CONTAINING_STRUCT(item, HIF_URB_CONTEXT, link);
pipe->urb_cnt--;
}
- spin_unlock_irqrestore(&pipe->device->cs_lock, flags);
+ adf_os_spin_unlock_irqrestore(&pipe->device->cs_lock);
return urb_context;
}
@@ -89,13 +86,12 @@ static HIF_URB_CONTEXT *usb_hif_dequeue_pending_transfer(HIF_USB_PIPE *pipe)
{
HIF_URB_CONTEXT *urb_context = NULL;
DL_LIST *item;
- unsigned long flags;
- spin_lock_irqsave(&pipe->device->cs_lock, flags);
+ adf_os_spin_lock_irqsave(&pipe->device->cs_lock);
item = DL_ListRemoveItemFromHead(&pipe->urb_pending_list);
if (item != NULL)
urb_context = A_CONTAINING_STRUCT(item, HIF_URB_CONTEXT, link);
- spin_unlock_irqrestore(&pipe->device->cs_lock, flags);
+ adf_os_spin_unlock_irqrestore(&pipe->device->cs_lock);
return urb_context;
}
@@ -103,20 +99,16 @@ static HIF_URB_CONTEXT *usb_hif_dequeue_pending_transfer(HIF_USB_PIPE *pipe)
void usb_hif_enqueue_pending_transfer(HIF_USB_PIPE *pipe,
HIF_URB_CONTEXT *urb_context)
{
- unsigned long flags;
-
- spin_lock_irqsave(&pipe->device->cs_lock, flags);
+ adf_os_spin_lock_irqsave(&pipe->device->cs_lock);
DL_ListInsertTail(&pipe->urb_pending_list, &urb_context->link);
- spin_unlock_irqrestore(&pipe->device->cs_lock, flags);
+ adf_os_spin_unlock_irqrestore(&pipe->device->cs_lock);
}
void usb_hif_remove_pending_transfer(HIF_URB_CONTEXT *urb_context)
{
- unsigned long flags;
-
- spin_lock_irqsave(&urb_context->pipe->device->cs_lock, flags);
+ adf_os_spin_lock_irqsave(&urb_context->pipe->device->cs_lock);
DL_ListRemove(&urb_context->link);
- spin_unlock_irqrestore(&urb_context->pipe->device->cs_lock, flags);
+ adf_os_spin_unlock_irqrestore(&urb_context->pipe->device->cs_lock);
}
static A_STATUS usb_hif_alloc_pipe_resources(HIF_USB_PIPE *pipe, int urb_cnt)
@@ -439,7 +431,6 @@ static void usb_hif_usb_recv_prestart_complete(struct urb *urb)
A_STATUS status = A_OK;
adf_nbuf_t buf = NULL;
HIF_USB_PIPE *pipe = urb_context->pipe;
- unsigned long flags;
AR_DEBUG_PRINTF(USB_HIF_DEBUG_BULK_IN, (
"+%s: recv pipe: %d, stat:%d,len:%d urb:0x%pK\n",
@@ -502,11 +493,11 @@ static void usb_hif_usb_recv_prestart_complete(struct urb *urb)
usb_hif_cleanup_recv_urb(urb_context);
/* Prestart URBs runs out and now start working receive pipe. */
- spin_lock_irqsave(&pipe->device->rx_prestart_lock, flags);
+ adf_os_spin_lock_irqsave(&pipe->device->rx_prestart_lock);
if (--pipe->urb_prestart_cnt == 0) {
usb_hif_start_recv_pipes(pipe->device);
}
- spin_unlock_irqrestore(&pipe->device->rx_prestart_lock, flags);
+ adf_os_spin_unlock_irqrestore(&pipe->device->rx_prestart_lock);
AR_DEBUG_PRINTF(USB_HIF_DEBUG_BULK_IN, ("-%s\n", __func__));
}
@@ -761,11 +752,10 @@ static void usb_hif_post_recv_prestart_transfers(HIF_USB_PIPE *recv_pipe,
a_uint32_t len;
struct urb *urb;
int i, usb_status, buffer_length = HIF_USB_RX_BUFFER_SIZE;
- unsigned long flags;
AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("+%s\n", __func__));
- spin_lock_irqsave(&recv_pipe->device->rx_prestart_lock, flags);
+ adf_os_spin_lock_irqsave(&recv_pipe->device->rx_prestart_lock);
for (i = 0; i < prestart_urb; i++) {
urb_context = usb_hif_alloc_urb_from_pipe(recv_pipe);
if (NULL == urb_context)
@@ -812,7 +802,7 @@ static void usb_hif_post_recv_prestart_transfers(HIF_USB_PIPE *recv_pipe,
recv_pipe->urb_prestart_cnt++;
}
- spin_unlock_irqrestore(&recv_pipe->device->rx_prestart_lock, flags);
+ adf_os_spin_unlock_irqrestore(&recv_pipe->device->rx_prestart_lock);
AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("-%s\n", __func__));
}
diff --git a/CORE/SERVICES/HIF/sdio/hif_sdio_dev.c b/CORE/SERVICES/HIF/sdio/hif_sdio_dev.c
index 8d215633d80d..4fb73c08dd66 100644
--- a/CORE/SERVICES/HIF/sdio/hif_sdio_dev.c
+++ b/CORE/SERVICES/HIF/sdio/hif_sdio_dev.c
@@ -176,8 +176,8 @@ HTC_PACKET *HIFDevAllocRxBuffer(HIF_SDIO_DEVICE *pDev, size_t length)
*/
static inline void rx_completion_sem_init(HIF_SDIO_DEVICE *pDev)
{
- spin_lock_init(&pDev->pRecvTask->rx_bundle_lock);
- spin_lock_init(&pDev->pRecvTask->rx_sync_completion_lock);
+ adf_os_spinlock_init(&pDev->pRecvTask->rx_bundle_lock);
+ adf_os_spinlock_init(&pDev->pRecvTask->rx_sync_completion_lock);
sema_init(&pDev->pRecvTask->sem_rx_completion, 0);
}
extern int rx_completion_task(void *param);
@@ -273,7 +273,7 @@ HIF_SDIO_DEVICE* HIFDevCreate(HIF_DEVICE *hif_device,
INIT_HTC_PACKET_QUEUE(&pDev->pRecvTask->rxBundleQueue);
INIT_HTC_PACKET_QUEUE(&pDev->pRecvTask->rxSyncCompletionQueue);
hif_start_rx_completion_thread(pDev);
- spin_lock_init(&pDev->pRecvTask->rx_alloc_lock);
+ adf_os_spinlock_init(&pDev->pRecvTask->rx_alloc_lock);
INIT_HTC_PACKET_QUEUE(&pDev->pRecvTask->rxAllocQueue);
#endif
diff --git a/CORE/SERVICES/HIF/sdio/hif_sdio_internal.h b/CORE/SERVICES/HIF/sdio/hif_sdio_internal.h
index 842d9e8f2e91..6046e1fd8b8e 100644
--- a/CORE/SERVICES/HIF/sdio/hif_sdio_internal.h
+++ b/CORE/SERVICES/HIF/sdio/hif_sdio_internal.h
@@ -123,11 +123,11 @@ struct hif_recv_task {
struct semaphore sem_rx_completion;
int rx_completion_shutdown;
struct completion rx_completion_exit;
- spinlock_t rx_bundle_lock;
- spinlock_t rx_sync_completion_lock;
+ adf_os_spinlock_t rx_bundle_lock;
+ adf_os_spinlock_t rx_sync_completion_lock;
HTC_PACKET_QUEUE rxBundleQueue;
HTC_PACKET_QUEUE rxSyncCompletionQueue;
- spinlock_t rx_alloc_lock;
+ adf_os_spinlock_t rx_alloc_lock;
HTC_PACKET_QUEUE rxAllocQueue;
};
#endif
diff --git a/CORE/SERVICES/HIF/sdio/hif_sdio_recv.c b/CORE/SERVICES/HIF/sdio/hif_sdio_recv.c
index 0cf998fe5c18..fe3ba3338303 100644
--- a/CORE/SERVICES/HIF/sdio/hif_sdio_recv.c
+++ b/CORE/SERVICES/HIF/sdio/hif_sdio_recv.c
@@ -125,9 +125,6 @@ static A_STATUS HIFDevAllocAndPrepareRxPackets(HIF_SDIO_DEVICE *pDev,
int numMessages;
int fullLength;
A_BOOL noRecycle;
-#ifdef HIF_RX_THREAD
- unsigned long flags;
-#endif
HTC_TARGET *target = NULL;
target = (HTC_TARGET *)pDev->pTarget;
/* lock RX while we assemble the packet buffers */
@@ -186,7 +183,7 @@ static A_STATUS HIFDevAllocAndPrepareRxPackets(HIF_SDIO_DEVICE *pDev,
/* get packet buffers for each message, if there was a bundle detected in the header,
* use pHdr as a template to fetch all packets in the bundle */
#ifdef HIF_RX_THREAD
- spin_lock_irqsave(&pDev->pRecvTask->rx_alloc_lock, flags);
+ adf_os_spin_lock_irqsave(&pDev->pRecvTask->rx_alloc_lock);
#endif
for (j = 0; j < numMessages; j++) {
@@ -275,7 +272,7 @@ static A_STATUS HIFDevAllocAndPrepareRxPackets(HIF_SDIO_DEVICE *pDev,
pPacket->Completion = NULL;
}
#ifdef HIF_RX_THREAD
- spin_unlock_irqrestore(&pDev->pRecvTask->rx_alloc_lock, flags);
+ adf_os_spin_unlock_irqrestore(&pDev->pRecvTask->rx_alloc_lock);
#endif
if (A_FAILED(status)) {
@@ -863,7 +860,6 @@ int rx_completion_task(void *param)
{
HIF_SDIO_DEVICE *device;
HTC_PACKET *pPacket = NULL;
- unsigned long flags;
HTC_PACKET *pPacketRxBundle;
A_UINT32 paddedLength;
unsigned char *pBundleBuffer = NULL;
@@ -897,9 +893,9 @@ int rx_completion_task(void *param)
}
//process single packet
- spin_lock_irqsave(&device->pRecvTask->rx_bundle_lock, flags);
+ adf_os_spin_lock_irqsave(&device->pRecvTask->rx_bundle_lock);
if(HTC_QUEUE_EMPTY(&device->pRecvTask->rxBundleQueue)) {
- spin_lock_irqsave(&device->pRecvTask->rx_sync_completion_lock, flags);
+ adf_os_spin_lock_irqsave(&device->pRecvTask->rx_sync_completion_lock);
while(!HTC_QUEUE_EMPTY(&device->pRecvTask->rxSyncCompletionQueue)) {
pPacket = HTC_PACKET_DEQUEUE(&device->pRecvTask->rxSyncCompletionQueue);
if(pPacket == NULL) {
@@ -911,7 +907,7 @@ int rx_completion_task(void *param)
break;
}
}
- spin_unlock_irqrestore(&device->pRecvTask->rx_sync_completion_lock, flags);
+ adf_os_spin_unlock_irqrestore(&device->pRecvTask->rx_sync_completion_lock);
}
else {
//1. Dequeue from bundle buffer queue, scatter data to sync completion queue
@@ -924,20 +920,20 @@ int rx_completion_task(void *param)
AR_DEBUG_PRINTF(ATH_DEBUG_WARN, ("Packets in bundle buffer is < 1"));
break;
}
- spin_lock_irqsave(&device->pRecvTask->rx_sync_completion_lock, flags);
+ adf_os_spin_lock_irqsave(&device->pRecvTask->rx_sync_completion_lock);
if(HTC_PACKET_QUEUE_DEPTH(&device->pRecvTask->rxSyncCompletionQueue) < pPacketRxBundle->BundlePktnum) {
// corner case: the sync queue depth is not enough for processing this bundle pkt, push it back
HTC_PACKET_ENQUEUE_TO_HEAD(&device->pRecvTask->rxBundleQueue, pPacketRxBundle);
- spin_unlock_irqrestore(&device->pRecvTask->rx_sync_completion_lock, flags);
+ adf_os_spin_unlock_irqrestore(&device->pRecvTask->rx_sync_completion_lock);
break;
}
- spin_unlock_irqrestore(&device->pRecvTask->rx_sync_completion_lock, flags);
+ adf_os_spin_unlock_irqrestore(&device->pRecvTask->rx_sync_completion_lock);
pBundleBuffer = pPacketRxBundle->pBuffer;
pBuffer = pBundleBuffer;
if(pPacketRxBundle == NULL)
break;
- spin_lock_irqsave(&device->pRecvTask->rx_sync_completion_lock, flags);
+ adf_os_spin_lock_irqsave(&device->pRecvTask->rx_sync_completion_lock);
//if the next pkt is single, dequeue it and process it, until the bundle pkts
while(TRUE) {
nextIsSingle = 0;
@@ -1011,13 +1007,13 @@ int rx_completion_task(void *param)
else
break;
}
- spin_unlock_irqrestore(&device->pRecvTask->rx_sync_completion_lock, flags);
+ adf_os_spin_unlock_irqrestore(&device->pRecvTask->rx_sync_completion_lock);
FreeHTCBundleRxPacket(target, pPacketRxBundle);
}
}
- spin_unlock_irqrestore(&device->pRecvTask->rx_bundle_lock, flags);
+ adf_os_spin_unlock_irqrestore(&device->pRecvTask->rx_bundle_lock);
//alloc skb for next bundle
- spin_lock_irqsave(&device->pRecvTask->rx_alloc_lock, flags);
+ adf_os_spin_lock_irqsave(&device->pRecvTask->rx_alloc_lock);
while(HTC_PACKET_QUEUE_DEPTH(&device->pRecvTask->rxAllocQueue) < 64) {
pPacket = HIFDevAllocRxBuffer(device, 2048);
if(pPacket == NULL) {
@@ -1026,7 +1022,7 @@ int rx_completion_task(void *param)
}
HTC_PACKET_ENQUEUE(&device->pRecvTask->rxAllocQueue, pPacket);
}
- spin_unlock_irqrestore(&device->pRecvTask->rx_alloc_lock, flags);
+ adf_os_spin_unlock_irqrestore(&device->pRecvTask->rx_alloc_lock);
}
complete_and_exit(&device->pRecvTask->rx_completion_exit, 0);
return 0;
@@ -1052,7 +1048,6 @@ static A_STATUS HIFDevIssueRecvPacketBundle(HIF_SDIO_DEVICE *pDev,
HTC_TARGET *target = NULL;
A_UINT32 paddedLength;
#ifdef HIF_RX_THREAD
- unsigned long flags;
#else
unsigned char *pBuffer = NULL;
A_UINT16 curPayloadLen = 0;
@@ -1145,14 +1140,14 @@ static A_STATUS HIFDevIssueRecvPacketBundle(HIF_SDIO_DEVICE *pDev,
pNumLookAheads, lookAhead_part2);
*pNumPacketsFetched = i;
pPacketRxBundle->BundlePktnum = i;
- spin_lock_irqsave(&pDev->pRecvTask->rx_bundle_lock, flags);
+ adf_os_spin_lock_irqsave(&pDev->pRecvTask->rx_bundle_lock);
HTC_PACKET_ENQUEUE(&pDev->pRecvTask->rxBundleQueue, pPacketRxBundle);
- spin_unlock_irqrestore(&pDev->pRecvTask->rx_bundle_lock, flags);
+ adf_os_spin_unlock_irqrestore(&pDev->pRecvTask->rx_bundle_lock);
- spin_lock_irqsave(&pDev->pRecvTask->rx_sync_completion_lock, flags);
+ adf_os_spin_lock_irqsave(&pDev->pRecvTask->rx_sync_completion_lock);
HTC_PACKET_QUEUE_TRANSFER_TO_TAIL(&pDev->pRecvTask->rxSyncCompletionQueue,
pSyncCompletionQueue);
- spin_unlock_irqrestore(&pDev->pRecvTask->rx_sync_completion_lock, flags);
+ adf_os_spin_unlock_irqrestore(&pDev->pRecvTask->rx_sync_completion_lock);
#else
*pNumPacketsFetched = i;
pBuffer = pBundleBuffer;
@@ -1198,9 +1193,6 @@ A_STATUS HIFDevRecvMessagePendingHandler(HIF_SDIO_DEVICE *pDev,
A_BOOL partialBundle;
HTC_ENDPOINT_ID id;
int totalFetched = 0;
-#ifdef HIF_RX_THREAD
- unsigned long flags;
-#endif
HTC_TARGET *target = NULL;
@@ -1365,9 +1357,9 @@ A_STATUS HIFDevRecvMessagePendingHandler(HIF_SDIO_DEVICE *pDev,
HIFDevPreprocessTrailer(pDev, pPacket, lookAheads,
&NumLookAheads, lookAhead_part2);
pPacket->BundlePktnum = 1;
- spin_lock_irqsave(&pDev->pRecvTask->rx_sync_completion_lock, flags);
+ adf_os_spin_lock_irqsave(&pDev->pRecvTask->rx_sync_completion_lock);
HTC_PACKET_ENQUEUE(&pDev->pRecvTask->rxSyncCompletionQueue, pPacket);
- spin_unlock_irqrestore(&pDev->pRecvTask->rx_sync_completion_lock, flags);
+ adf_os_spin_unlock_irqrestore(&pDev->pRecvTask->rx_sync_completion_lock);
#else
HTC_PACKET_ENQUEUE(&syncCompletedPktsQueue, pPacket);
#endif
diff --git a/CORE/SERVICES/HIF/sdio/linux/if_ath_sdio.c b/CORE/SERVICES/HIF/sdio/linux/if_ath_sdio.c
index c8f74c84cd3b..12c5fd47dbb3 100644
--- a/CORE/SERVICES/HIF/sdio/linux/if_ath_sdio.c
+++ b/CORE/SERVICES/HIF/sdio/linux/if_ath_sdio.c
@@ -159,7 +159,7 @@ ath_hif_sdio_probe(void *context, void *hif_handle)
sc->aps_osdev.device = os_dev_info.pOSDevice;
sc->aps_osdev.bc.bc_bustype = HAL_BUS_TYPE_SDIO;
- spin_lock_init(&sc->target_lock);
+ adf_os_spinlock_init(&sc->target_lock);
{
/*
diff --git a/CORE/SERVICES/HIF/sdio/linux/if_ath_sdio.h b/CORE/SERVICES/HIF/sdio/linux/if_ath_sdio.h
index 391658b5091f..198d40c2c907 100644
--- a/CORE/SERVICES/HIF/sdio/linux/if_ath_sdio.h
+++ b/CORE/SERVICES/HIF/sdio/linux/if_ath_sdio.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013-2014 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2014 2018 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -68,7 +68,7 @@ struct ath_hif_sdio_softc {
* Guard changes to Target HW state and to software
* structures that track hardware state.
*/
- spinlock_t target_lock;
+ adf_os_spinlock_t target_lock;
void *hif_handle;
struct targetdef_s *targetdef;
struct hostdef_s *hostdef;
diff --git a/CORE/SERVICES/HIF/sdio/linux/native_sdio/include/hif_internal.h b/CORE/SERVICES/HIF/sdio/linux/native_sdio/include/hif_internal.h
index 4b67e17049c6..9d3ae4f07093 100644
--- a/CORE/SERVICES/HIF/sdio/linux/native_sdio/include/hif_internal.h
+++ b/CORE/SERVICES/HIF/sdio/linux/native_sdio/include/hif_internal.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013-2014, 2016-2017 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2014, 2016-2018 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -33,6 +33,7 @@
#include "a_osapi.h"
#include "adf_os_timer.h"
#include "adf_os_atomic.h"
+#include <adf_os_lock.h>
#include "hif.h"
#include "hif_sdio_common.h"
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
@@ -93,7 +94,7 @@ typedef enum {
struct hif_device {
struct sdio_func *func;
- spinlock_t asynclock;
+ adf_os_spinlock_t asynclock;
struct task_struct* async_task; /* task to handle async commands */
struct semaphore sem_async; /* wake up for async task */
int async_shutdown; /* stop the async task */
@@ -105,11 +106,11 @@ struct hif_device {
struct semaphore sem_tx_completion;
int tx_completion_shutdown;
struct completion tx_completion_exit;
- spinlock_t tx_completion_lock;
+ adf_os_spinlock_t tx_completion_lock;
BUS_REQUEST *tx_completion_req;
BUS_REQUEST **last_tx_completion;
#endif
- spinlock_t lock;
+ adf_os_spinlock_t lock;
BUS_REQUEST *s_busRequestFreeQueue; /* free list */
BUS_REQUEST busRequest[BUS_REQUEST_MAX_NUM]; /* available bus requests */
void *claimedContext;
diff --git a/CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif.c b/CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif.c
index 656234fa6c6c..894f20b6b44a 100644
--- a/CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif.c
+++ b/CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif.c
@@ -50,13 +50,12 @@
#define BUS_REQ_RECORD_SIZE 100
u_int32_t g_bus_req_buf_idx = 0;
-spinlock_t g_bus_request_record_lock;
+adf_os_spinlock_t g_bus_request_record_lock;
struct bus_request_record bus_request_record_buf[BUS_REQ_RECORD_SIZE];
#define BUS_REQUEST_RECORD(r, a, l) { \
- unsigned long flag; \
- spin_lock_irqsave(&g_bus_request_record_lock, flag); \
+ adf_os_spin_lock_irqsave(&g_bus_request_record_lock); \
if (g_bus_req_buf_idx == BUS_REQ_RECORD_SIZE) \
g_bus_req_buf_idx = 0; \
bus_request_record_buf[g_bus_req_buf_idx].request = r; \
@@ -64,7 +63,7 @@ struct bus_request_record bus_request_record_buf[BUS_REQ_RECORD_SIZE];
bus_request_record_buf[g_bus_req_buf_idx].len = l; \
bus_request_record_buf[g_bus_req_buf_idx].time = adf_get_boottime(); \
g_bus_req_buf_idx++; \
- spin_unlock_irqrestore(&g_bus_request_record_lock, flag); \
+ adf_os_spin_unlock_irqrestore(&g_bus_request_record_lock); \
}
#if HIF_USE_DMA_BOUNCE_BUFFER
@@ -602,11 +601,10 @@ __HIFReadWrite(HIF_DEVICE *device,
void AddToAsyncList(HIF_DEVICE *device, BUS_REQUEST *busrequest)
{
- unsigned long flags;
BUS_REQUEST *async;
BUS_REQUEST *active;
- spin_lock_irqsave(&device->asynclock, flags);
+ adf_os_spin_lock_irqsave(&device->asynclock);
active = device->asyncreq;
if (active == NULL) {
device->asyncreq = busrequest;
@@ -620,7 +618,7 @@ void AddToAsyncList(HIF_DEVICE *device, BUS_REQUEST *busrequest)
active->inusenext = busrequest;
busrequest->inusenext = NULL;
}
- spin_unlock_irqrestore(&device->asynclock, flags);
+ adf_os_spin_unlock_irqrestore(&device->asynclock);
}
A_STATUS
@@ -758,13 +756,11 @@ static inline void _hif_free_bus_request(HIF_DEVICE *device,
static void add_to_tx_completion_list(HIF_DEVICE *device,
BUS_REQUEST *tx_comple)
{
- unsigned long flags;
-
- spin_lock_irqsave(&device->tx_completion_lock, flags);
+ adf_os_spin_lock_irqsave(&device->tx_completion_lock);
tx_comple->inusenext = NULL;
*device->last_tx_completion = tx_comple;
device->last_tx_completion = &tx_comple->inusenext;
- spin_unlock_irqrestore(&device->tx_completion_lock, flags);
+ adf_os_spin_unlock_irqrestore(&device->tx_completion_lock);
}
/**
@@ -777,15 +773,14 @@ static void add_to_tx_completion_list(HIF_DEVICE *device,
*/
static void tx_clean_completion_list(HIF_DEVICE *device)
{
- unsigned long flags;
BUS_REQUEST *comple;
BUS_REQUEST *request;
- spin_lock_irqsave(&device->tx_completion_lock, flags);
+ adf_os_spin_lock_irqsave(&device->tx_completion_lock);
request = device->tx_completion_req;
device->tx_completion_req = NULL;
device->last_tx_completion = &device->tx_completion_req;
- spin_unlock_irqrestore(&device->tx_completion_lock, flags);
+ adf_os_spin_unlock_irqrestore(&device->tx_completion_lock);
while (request != NULL) {
comple = request->inusenext;
@@ -851,7 +846,7 @@ static int tx_completion_task(void *param)
*/
static inline void tx_completion_sem_init(HIF_DEVICE *device)
{
- spin_lock_init(&device->tx_completion_lock);
+ adf_os_spinlock_init(&device->tx_completion_lock);
sema_init(&device->sem_tx_completion, 0);
}
@@ -994,7 +989,6 @@ static int async_task(void *param)
HIF_DEVICE *device;
BUS_REQUEST *request;
A_STATUS status;
- unsigned long flags;
set_user_nice(current, -3);
device = (HIF_DEVICE *)param;
@@ -1021,7 +1015,7 @@ static int async_task(void *param)
#endif
/* we want to hold the host over multiple cmds if possible, but holding the host blocks card interrupts */
sdio_claim_host(device->func);
- spin_lock_irqsave(&device->asynclock, flags);
+ adf_os_spin_lock_irqsave(&device->asynclock);
/* pull the request to work on */
while (device->asyncreq != NULL) {
request = device->asyncreq;
@@ -1030,7 +1024,7 @@ static int async_task(void *param)
} else {
device->asyncreq = NULL;
}
- spin_unlock_irqrestore(&device->asynclock, flags);
+ adf_os_spin_unlock_irqrestore(&device->asynclock);
AR_DEBUG_PRINTF(ATH_DEBUG_TRACE, ("AR6000: async_task processing req: 0x%lX\n", (unsigned long)request));
#ifdef HIF_MBOX_SLEEP_WAR
/* write request pending for mailbox(1-3),
@@ -1064,9 +1058,9 @@ static int async_task(void *param)
up(&request->sem_req);
}
}
- spin_lock_irqsave(&device->asynclock, flags);
+ adf_os_spin_lock_irqsave(&device->asynclock);
}
- spin_unlock_irqrestore(&device->asynclock, flags);
+ adf_os_spin_unlock_irqrestore(&device->asynclock);
sdio_release_host(device->func);
}
@@ -1821,8 +1815,8 @@ TODO: MMC SDIO3.0 Setting should also be modified in ReInit() function when Powe
sdio_release_host(func);
}
- spin_lock_init(&device->asynclock);
- spin_lock_init(&g_bus_request_record_lock);
+ adf_os_spinlock_init(&device->asynclock);
+ adf_os_spinlock_init(&g_bus_request_record_lock);
DL_LIST_INIT(&device->ScatterReqHead);
@@ -1947,31 +1941,29 @@ void HIFMaskInterrupt(HIF_DEVICE *device)
void hif_release_bus_requests(HIF_DEVICE *device)
{
BUS_REQUEST *bus_req;
- unsigned long flag;
AR_DEBUG_PRINTF(ATH_DEBUG_TRACE,
("AR6000: Release busrequest queue\n"));
- spin_lock_irqsave(&device->lock, flag);
+ adf_os_spin_lock_irqsave(&device->lock);
while ((bus_req = device->s_busRequestFreeQueue) != NULL) {
device->s_busRequestFreeQueue = bus_req->next;
- spin_unlock_irqrestore(&device->lock, flag);
+ adf_os_spin_unlock_irqrestore(&device->lock);
A_FREE(bus_req);
- spin_lock_irqsave(&device->lock, flag);
+ adf_os_spin_lock_irqsave(&device->lock);
}
- spin_unlock_irqrestore(&device->lock, flag);
+ adf_os_spin_unlock_irqrestore(&device->lock);
}
BUS_REQUEST *hifAllocateBusRequest(HIF_DEVICE *device)
{
BUS_REQUEST *busrequest;
- unsigned long flag;
/* Acquire lock */
- spin_lock_irqsave(&device->lock, flag);
+ adf_os_spin_lock_irqsave(&device->lock);
/* Remove first in list */
if((busrequest = device->s_busRequestFreeQueue) != NULL)
@@ -1979,7 +1971,7 @@ BUS_REQUEST *hifAllocateBusRequest(HIF_DEVICE *device)
device->s_busRequestFreeQueue = busrequest->next;
}
/* Release lock */
- spin_unlock_irqrestore(&device->lock, flag);
+ adf_os_spin_unlock_irqrestore(&device->lock);
if (adf_os_unlikely(!busrequest) && dynamic_busreq) {
AR_DEBUG_PRINTF(ATH_DEBUG_ERROR,
@@ -1997,13 +1989,11 @@ BUS_REQUEST *hifAllocateBusRequest(HIF_DEVICE *device)
void
hifFreeBusRequest(HIF_DEVICE *device, BUS_REQUEST *busrequest)
{
- unsigned long flag;
-
if (busrequest == NULL)
return;
//AR_DEBUG_PRINTF(ATH_DEBUG_TRACE, ("AR6000: hifFreeBusRequest: 0x%pK\n", busrequest));
/* Acquire lock */
- spin_lock_irqsave(&device->lock, flag);
+ adf_os_spin_lock_irqsave(&device->lock);
/* Insert first in list */
@@ -2012,7 +2002,7 @@ hifFreeBusRequest(HIF_DEVICE *device, BUS_REQUEST *busrequest)
device->s_busRequestFreeQueue = busrequest;
/* Release lock */
- spin_unlock_irqrestore(&device->lock, flag);
+ adf_os_spin_unlock_irqrestore(&device->lock);
}
static A_STATUS hifDisableFunc(HIF_DEVICE *device, struct sdio_func *func)
@@ -2642,7 +2632,7 @@ addHifDevice(struct sdio_func *func)
hifdevice->func = func;
hifdevice->powerConfig = HIF_DEVICE_POWER_UP;
hifdevice->DeviceState = HIF_DEVICE_STATE_ON;
- spin_lock_init(&hifdevice->lock);
+ adf_os_spinlock_init(&hifdevice->lock);
if (dynamic_busreq) {
for (count = 0; count < BUS_REQUEST_MAX_NUM; count++) {
diff --git a/CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif_scatter.c b/CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif_scatter.c
index 978a8b6972f2..e9b3c0c3daba 100644
--- a/CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif_scatter.c
+++ b/CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif_scatter.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013-2014 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2014 2018 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -33,6 +33,7 @@
#include <linux/kthread.h>
#include "hif_internal.h"
#include <adf_os_mem.h>
+#include <adf_os_lock.h>
#define ATH_MODULE_NAME hif
#include "a_debug.h"
@@ -54,26 +55,23 @@
static void FreeScatterReq(HIF_DEVICE *device, HIF_SCATTER_REQ *pReq)
{
- unsigned long flag;
-
- spin_lock_irqsave(&device->lock, flag);
+ adf_os_spin_lock_irqsave(&device->lock);
DL_ListInsertTail(&device->ScatterReqHead, &pReq->ListLink);
- spin_unlock_irqrestore(&device->lock, flag);
+ adf_os_spin_unlock_irqrestore(&device->lock);
}
static HIF_SCATTER_REQ *AllocScatterReq(HIF_DEVICE *device)
{
DL_LIST *pItem;
- unsigned long flag;
- spin_lock_irqsave(&device->lock, flag);
+ adf_os_spin_lock_irqsave(&device->lock);
pItem = DL_ListRemoveItemFromHead(&device->ScatterReqHead);
- spin_unlock_irqrestore(&device->lock, flag);
+ adf_os_spin_unlock_irqrestore(&device->lock);
if (pItem != NULL) {
return A_CONTAINING_STRUCT(pItem, HIF_SCATTER_REQ, ListLink);
diff --git a/CORE/SERVICES/HTC/htc_send.c b/CORE/SERVICES/HTC/htc_send.c
index d231ce509bc1..d3855a4f8fc1 100644
--- a/CORE/SERVICES/HTC/htc_send.c
+++ b/CORE/SERVICES/HTC/htc_send.c
@@ -685,10 +685,12 @@ static A_STATUS HTCIssuePackets(HTC_TARGET *target,
target->CE_send_cnt--;
pEndpoint->ul_outstanding_cnt--;
HTC_PACKET_REMOVE(&pEndpoint->TxLookupQueue,pPacket);
- /* reclaim credits */
- pEndpoint->TxCredits += pPacket->PktInfo.AsTx.CreditsUsed;
- /* put it back into the callers queue */
+ /* put it back into the callers queue */
HTC_PACKET_ENQUEUE_TO_HEAD(pPktQueue,pPacket);
+ /* reclaim credits */
+ HTC_PACKET_QUEUE_ITERATE_ALLOW_REMOVE(pPktQueue, pPacket) {
+ pEndpoint->TxCredits += pPacket->PktInfo.AsTx.CreditsUsed;
+ } HTC_PACKET_QUEUE_ITERATE_END;
UNLOCK_HTC_TX(target);
break;
}
diff --git a/CORE/SERVICES/WMA/regdomain.h b/CORE/SERVICES/WMA/regdomain.h
index c8b113dede81..13358f2915b5 100644
--- a/CORE/SERVICES/WMA/regdomain.h
+++ b/CORE/SERVICES/WMA/regdomain.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2014-2018 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011, 2014-2019 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -1001,6 +1001,7 @@ enum CountryCode {
CTRY_MONACO = 492, /* Principality of Monaco */
CTRY_MONGOLIA = 496,
CTRY_MOROCCO = 504, /* Morocco */
+ CTRY_MYANMAR = 104, /* Myanmar*/
CTRY_NAMIBIA = 516,
CTRY_NEPAL = 524, /* Nepal */
CTRY_NETHERLANDS = 528, /* Netherlands */
diff --git a/CORE/SERVICES/WMA/regdomain_common.h b/CORE/SERVICES/WMA/regdomain_common.h
index 1dddcd6777ff..955284e267f6 100644
--- a/CORE/SERVICES/WMA/regdomain_common.h
+++ b/CORE/SERVICES/WMA/regdomain_common.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2014-2016 2018 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011, 2014-2016 2018-2019 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -128,6 +128,7 @@ enum EnumRd {
ETSI9_WORLD = 0x3E, /* Ukraine */
ETSI13_WORLD = 0x27,
ETSI14_WORLD = 0x29,
+ ETSI15_WORLD = 0x31,
ETSI_RESERVED = 0x33, /* Reserved (Do not used) */
MKK1_MKKA = 0x40, /* Japan (JP1) */
@@ -163,6 +164,7 @@ enum EnumRd {
APL17_ETSID = 0xE0,
APL14_WORLD = 0x57,
APL15_WORLD = 0x59,
+ APL19_ETSIC = 0x71,
APL20_WORLD = 0xE5,
APL23_WORLD = 0xE3,
@@ -275,6 +277,7 @@ enum EnumRd {
APL14 = 0x1180,
APL15 = 0x1190,
APL17 = 0x1210,
+ APL19 = 0x1240,
APL20 = 0x1250,
APL23 = 0x1280,
@@ -292,6 +295,7 @@ enum EnumRd {
ETSID = 0x0F30,
ETSI13 = 0x0E39,
ETSI14 = 0x0E40,
+ ETSI15 = 0x0E41,
FCC1 = 0x0110, /* US & others */
FCC2 = 0x0120, /* Canada, Australia & New Zealand */
@@ -412,6 +416,7 @@ static const REG_DMN_PAIR_MAPPING ahCmnRegDomainPairs[] = {
{APL12_WORLD, APL12, WORLD, NO_REQ, NO_REQ, PSCAN_DEFER, 0 },
{APL14_WORLD, APL14, WORLD, NO_REQ, NO_REQ, PSCAN_DEFER, 0 },
{APL15_WORLD, APL15, WORLD, NO_REQ, NO_REQ, PSCAN_DEFER, 0 },
+ {APL19_ETSIC, APL19, ETSIC, NO_REQ, NO_REQ, PSCAN_DEFER, 0 },
{APL20_WORLD, APL20, WORLD, NO_REQ, NO_REQ, PSCAN_DEFER, 0 },
{APL23_WORLD, APL23, WORLD, NO_REQ, NO_REQ, PSCAN_DEFER, 0 },
{APL17_ETSID, APL17, ETSID, NO_REQ, NO_REQ, PSCAN_DEFER, 0 },
@@ -587,7 +592,7 @@ static const COUNTRY_CODE_TO_ENUM_RD ahCmnAllCountries[] = {
{CTRY_HONG_KONG, FCC3_WORLD, "HK", "HONG KONG", YES, YES, YES, YES, YES, YES, YES, YES, 7000 },
{CTRY_HUNGARY, ETSI13_WORLD, "HU", "HUNGARY", YES, YES, YES, YES, YES, YES, YES, YES, 7000 },
{CTRY_ICELAND, ETSI13_WORLD, "IS", "ICELAND", YES, YES, YES, YES, YES, YES, YES, YES, 7000 },
- {CTRY_INDIA, APL15_WORLD, "IN", "INDIA", YES, YES, YES, YES, YES, YES, YES, YES, 7000 },
+ {CTRY_INDIA, APL19_ETSIC, "IN", "INDIA", YES, YES, YES, YES, YES, YES, YES, YES, 7000 },
{CTRY_INDONESIA, APL2_ETSIC, "ID", "INDONESIA", YES, YES, YES, YES, YES, YES, NO, NO, 7000 },
{CTRY_IRAQ, ETSI1_WORLD, "IQ", "IRAQ", YES, YES, YES, YES, YES, YES, YES, YES, 7000 },
{CTRY_IRELAND, ETSI13_WORLD, "IE", "IRELAND", YES, YES, YES, YES, YES, YES, YES, YES, 7000 },
@@ -624,6 +629,7 @@ static const COUNTRY_CODE_TO_ENUM_RD ahCmnAllCountries[] = {
{CTRY_MONGOLIA, FCC3_WORLD, "MN", "MONGOLIA", YES, YES, YES, YES, YES, YES, YES, YES, 7000 },
{CTRY_MONTENEGRO, ETSI13_WORLD, "ME", "MONTENEGRO", YES, NO, YES, YES, YES, YES, YES, YES, 7000 },
{CTRY_MOROCCO, ETSI3_WORLD, "MA", "MOROCCO", YES, YES, YES, YES, YES, YES, YES, YES, 7000 },
+ {CTRY_MYANMAR, APL1_WORLD, "MM", "MYANMAR", YES, YES, YES, YES, YES, YES, YES, YES, 7000 },
{CTRY_NAMIBIA, APL20_WORLD, "NA", "NAMIBIA", YES, YES, YES, YES, YES, YES, YES, YES, 7000 },
{CTRY_NEPAL, APL23_WORLD, "NP", "NEPAL", YES, YES, YES, YES, YES, YES, YES, YES, 7000 },
{CTRY_NETHERLANDS, ETSI13_WORLD, "NL", "NETHERLANDS", YES, YES, YES, YES, YES, YES, YES, YES, 7000 },
@@ -656,7 +662,7 @@ static const COUNTRY_CODE_TO_ENUM_RD ahCmnAllCountries[] = {
{CTRY_SAINT_PIERRE_AND_MIQUELON, ETSI13_WORLD, "PM", "SAINT PIERRE AND MIQUELON", YES, YES, YES, YES, YES, YES, YES, YES, 7000 },
{CTRY_SAINT_VINCENT_AND_THE_GRENADIENS, ETSI13_WORLD, "VC", "VINCENT AND THE GRENADIENS", YES, YES, YES, YES, YES, YES, YES, YES, 7000 },
{CTRY_SAMOA, ETSI1_WORLD, "WS", "SAMOA", YES, YES, YES, YES, YES, YES, YES, NO, 7000 },
- {CTRY_SAUDI_ARABIA, ETSI1_WORLD, "SA", "SAUDI ARABIA", YES, YES, YES, YES, YES, YES, YES, YES, 7000 },
+ {CTRY_SAUDI_ARABIA, ETSI15_WORLD, "SA", "SAUDI ARABIA", YES, YES, YES, YES, YES, YES, YES, YES, 7000 },
{CTRY_SENEGAL, FCC13_WORLD, "SN", "SENEGAL", YES, YES, YES, YES, YES, YES, YES, YES, 7000 },
{CTRY_SERBIA, ETSI13_WORLD, "RS", "REPUBLIC OF SERBIA", YES, YES, YES, YES, YES, YES, YES, YES, 7000 },
{CTRY_SINGAPORE, FCC3_WORLD, "SG", "SINGAPORE", YES, YES, YES, YES, YES, YES, YES, YES, 7000 },
@@ -1348,6 +1354,14 @@ static const REG_DOMAIN ahCmnRegDomains[] = {
BMZERO,
BMZERO
},
+ {APL19, FCC, DFS_ETSI, PSCAN_ETSI, NO_REQ,
+ BMNOTZERO,
+ BMNOTZERO,
+ BMNOTZERO,
+ BMZERO,
+ BMZERO,
+ BMZERO
+ },
{APL20, ETSI, DFS_ETSI, PSCAN_ETSI, NO_REQ,
BMNOTZERO,
@@ -1457,6 +1471,15 @@ static const REG_DOMAIN ahCmnRegDomains[] = {
BMZERO
},
+ {ETSI15, ETSI, DFS_ETSI, PSCAN_ETSI, NO_REQ,
+ BMNOTZERO,
+ BMNOTZERO,
+ BMNOTZERO,
+ BMZERO,
+ BMZERO,
+ BMZERO
+ },
+
{FCC1, FCC, NO_DFS, NO_PSCAN, NO_REQ,
BM(F2_5180_5240, F4_5260_5320, F5_5745_5825, -1, -1, -1, -1, -1, -1, -1, -1, -1),
BM(T6_5210_5210, T2_5250_5290, T6_5760_5800, -1, -1, -1, -1, -1, -1, -1, -1, -1),
diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c
index f7f65c490225..06bad7751882 100644
--- a/CORE/SERVICES/WMA/wma.c
+++ b/CORE/SERVICES/WMA/wma.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013-2018 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2019 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -24731,6 +24731,11 @@ static int wma_wow_wakeup_host_event(void *handle, u_int8_t *event,
vos_event_set(&wma->wma_resume_event);
if (param_buf->wow_packet_buffer) {
+ if (param_buf->num_wow_packet_buffer <= 4) {
+ WMA_LOGE("Invalid wow packet buffer from firmware %u",
+ param_buf->num_wow_packet_buffer);
+ return -EINVAL;
+ }
wow_buf_pkt_len = *(uint32_t *)param_buf->wow_packet_buffer;
if (wow_buf_pkt_len > (param_buf->num_wow_packet_buffer - 4)) {
WMA_LOGE("Invalid wow buf pkt len from firmware, wow_buf_pkt_len: %u, num_wow_packet_buffer: %u",
@@ -27917,6 +27922,10 @@ static int wma_set_base_macaddr_indicate(tp_wma_handle wma_handle,
WMA_LOGD("Base MAC Addr: "MAC_ADDRESS_STR,
MAC_ADDR_ARRAY((*customAddr)));
+ /* update the mac addr, because wlan_mac.bin changes it */
+ vos_mem_copy(wma_handle->myaddr, customAddr, sizeof(tSirMacAddr));
+ vos_mem_copy(wma_handle->hwaddr, customAddr, sizeof(tSirMacAddr));
+
return 0;
}
diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c
index 2afe8131717c..f83b9fa285af 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2018 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2019 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -2344,6 +2344,9 @@ eHalStatus sme_handle_update_pwr_ind(tHalHandle hal_ptr, uint32_t pesession_id)
peFindSessionBySessionId(mac_ptr, pesession_id);
tPowerdBm regMax = 0,maxTxPower = 0;
+ if (pesession_ptr == NULL)
+ return eHAL_STATUS_FAILURE;
+
regMax =
cfgGetRegulatoryMaxTransmitPower(mac_ptr,
pesession_ptr->currentOperChannel);
diff --git a/CORE/SVC/external/wlan_nlink_common.h b/CORE/SVC/external/wlan_nlink_common.h
index fdec9d2fb8ba..d1248b0f4ae4 100644
--- a/CORE/SVC/external/wlan_nlink_common.h
+++ b/CORE/SVC/external/wlan_nlink_common.h
@@ -106,6 +106,14 @@
*/
#define WLAN_SVC_SSR_FAIL_IND 0x110
+/*
+ * DO NOT USE, reserved for customization,
+ * in order for customers to report customized status,
+ * range required is from 0x900 - 0x90F.
+ */
+#define WLAN_SVC_USER_CUSTOMIZED_1_IND 0x900
+#define WLAN_SVC_USER_CUSTOMIZED_16_IND 0x90F
+
#define WLAN_SVC_MAX_SSID_LEN 32
#define WLAN_SVC_MAX_BSSID_LEN 6
#define WLAN_SVC_MAX_STR_LEN 16
diff --git a/CORE/SVC/src/logging/wlan_logging_sock_svc.c b/CORE/SVC/src/logging/wlan_logging_sock_svc.c
index ff1fca24b368..51a9a0812c0a 100644
--- a/CORE/SVC/src/logging/wlan_logging_sock_svc.c
+++ b/CORE/SVC/src/logging/wlan_logging_sock_svc.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014-2017 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2014-2018 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -142,7 +142,7 @@ struct wlan_logging {
/* Number of buffers to be used for logging */
int num_buf;
/* Lock to synchronize access to shared logging resource */
- spinlock_t spin_lock;
+ adf_os_spinlock_t spin_lock;
/* Holds the free node which can be used for filling logs */
struct list_head free_list;
/* Holds the filled nodes which needs to be indicated to APP */
@@ -170,7 +170,7 @@ struct wlan_logging {
struct list_head pkt_stat_filled_list;
struct pkt_stats_msg *pkt_stats_pcur_node;
unsigned int pkt_stat_drop_cnt;
- spinlock_t pkt_stats_lock;
+ adf_os_spinlock_t pkt_stats_lock;
unsigned int pkt_stats_msg_idx;
};
@@ -282,7 +282,6 @@ int wlan_log_to_user(VOS_TRACE_LEVEL log_level, char *to_be_sent, int length)
int total_log_len;
unsigned int *pfilled_length;
bool wake_up_thread = false;
- unsigned long flags;
struct timeval tv;
struct rtc_time tm;
unsigned long local_time;
@@ -323,10 +322,10 @@ int wlan_log_to_user(VOS_TRACE_LEVEL log_level, char *to_be_sent, int length)
/* 1+1 indicate '\n'+'\0' */
total_log_len = length + tlen + 1 + 1;
- spin_lock_irqsave(&gwlan_logging.spin_lock, flags);
+ adf_os_spin_lock_irqsave(&gwlan_logging.spin_lock);
// wlan logging svc resources are not yet initialized
if (!gwlan_logging.pcur_node) {
- spin_unlock_irqrestore(&gwlan_logging.spin_lock, flags);
+ adf_os_spin_unlock_irqrestore(&gwlan_logging.spin_lock);
return -EIO;
}
@@ -367,7 +366,7 @@ int wlan_log_to_user(VOS_TRACE_LEVEL log_level, char *to_be_sent, int length)
ptr[*pfilled_length] = '\n';
*pfilled_length += 1;
- spin_unlock_irqrestore(&gwlan_logging.spin_lock, flags);
+ adf_os_spin_unlock_irqrestore(&gwlan_logging.spin_lock);
/* Wakeup logger thread */
if ((true == wake_up_thread)) {
@@ -503,7 +502,6 @@ int pktlog_send_per_pkt_stats_to_user(void)
{
int ret = -1;
struct pkt_stats_msg *pstats_msg;
- unsigned long flags;
struct sk_buff *skb_new = NULL;
static int rate_limit;
bool free_old_skb = false;
@@ -522,12 +520,12 @@ int pktlog_send_per_pkt_stats_to_user(void)
break;
}
- spin_lock_irqsave(&gwlan_logging.pkt_stats_lock, flags);
+ adf_os_spin_lock_irqsave(&gwlan_logging.pkt_stats_lock);
pstats_msg = (struct pkt_stats_msg *)
(gwlan_logging.pkt_stat_filled_list.next);
list_del_init(gwlan_logging.pkt_stat_filled_list.next);
- spin_unlock_irqrestore(&gwlan_logging.pkt_stats_lock, flags);
+ adf_os_spin_unlock_irqrestore(&gwlan_logging.pkt_stats_lock);
ret = pkt_stats_fill_headers(pstats_msg->skb);
if (ret < 0) {
@@ -552,11 +550,11 @@ err:
if (free_old_skb)
dev_kfree_skb(pstats_msg->skb);
- spin_lock_irqsave(&gwlan_logging.pkt_stats_lock, flags);
+ adf_os_spin_lock_irqsave(&gwlan_logging.pkt_stats_lock);
pstats_msg->skb = skb_new;
list_add_tail(&pstats_msg->node,
&gwlan_logging.pkt_stat_free_list);
- spin_unlock_irqrestore(&gwlan_logging.pkt_stats_lock, flags);
+ adf_os_spin_unlock_irqrestore(&gwlan_logging.pkt_stats_lock);
ret = 0;
}
@@ -574,7 +572,6 @@ static int send_filled_buffers_to_user(void)
struct sk_buff *skb = NULL;
struct nlmsghdr *nlh;
static int nlmsg_seq;
- unsigned long flags;
static int rate_limit;
while (!list_empty(&gwlan_logging.filled_list)
@@ -593,12 +590,12 @@ static int send_filled_buffers_to_user(void)
}
rate_limit = 0;
- spin_lock_irqsave(&gwlan_logging.spin_lock, flags);
+ adf_os_spin_lock_irqsave(&gwlan_logging.spin_lock);
plog_msg = (struct log_msg *)
(gwlan_logging.filled_list.next);
list_del_init(gwlan_logging.filled_list.next);
- spin_unlock_irqrestore(&gwlan_logging.spin_lock, flags);
+ adf_os_spin_unlock_irqrestore(&gwlan_logging.spin_lock);
/* 4 extra bytes for the radio idx */
payload_len = plog_msg->filled_length +
sizeof(wnl->radio) + sizeof(tAniHdr);
@@ -608,11 +605,10 @@ static int send_filled_buffers_to_user(void)
ANI_NL_MSG_LOG, payload_len,
NLM_F_REQUEST);
if (NULL == nlh) {
- spin_lock_irqsave(&gwlan_logging.spin_lock, flags);
+ adf_os_spin_lock_irqsave(&gwlan_logging.spin_lock);
list_add_tail(&plog_msg->node,
&gwlan_logging.free_list);
- spin_unlock_irqrestore(&gwlan_logging.spin_lock,
- flags);
+ adf_os_spin_unlock_irqrestore(&gwlan_logging.spin_lock);
pr_err("%s: drop_count = %u\n", __func__,
++gwlan_logging.drop_count);
pr_err("%s: nlmsg_put() failed for msg size[%d]\n",
@@ -629,10 +625,10 @@ static int send_filled_buffers_to_user(void)
plog_msg->filled_length +
sizeof(tAniHdr));
- spin_lock_irqsave(&gwlan_logging.spin_lock, flags);
+ adf_os_spin_lock_irqsave(&gwlan_logging.spin_lock);
list_add_tail(&plog_msg->node,
&gwlan_logging.free_list);
- spin_unlock_irqrestore(&gwlan_logging.spin_lock, flags);
+ adf_os_spin_unlock_irqrestore(&gwlan_logging.spin_lock);
ret = nl_srv_bcast_host_logs(skb);
/* print every 64th drop count */
@@ -709,7 +705,6 @@ static int wlan_logging_thread(void *Arg)
{
int ret_wait_status = 0;
int ret = 0;
- unsigned long flags;
set_user_nice(current, -2);
@@ -771,11 +766,9 @@ static int wlan_logging_thread(void *Arg)
} else {
gwlan_logging.is_flush_complete = true;
/* Flush all current host logs*/
- spin_lock_irqsave(&gwlan_logging.spin_lock,
- flags);
+ adf_os_spin_lock_irqsave(&gwlan_logging.spin_lock);
wlan_queue_logmsg_for_app();
- spin_unlock_irqrestore(&gwlan_logging.spin_lock,
- flags);
+ adf_os_spin_unlock_irqrestore(&gwlan_logging.spin_lock);
set_bit(HOST_LOG_DRIVER_MSG,
&gwlan_logging.eventFlag);
set_bit(HOST_LOG_PER_PKT_STATS,
@@ -798,7 +791,6 @@ static int wlan_logging_thread(void *Arg)
int wlan_logging_sock_activate_svc(int log_fe_to_console, int num_buf)
{
int i, j, pkt_stats_size;
- unsigned long irq_flag;
gplog_msg = (struct log_msg *) vmalloc(
num_buf * sizeof(struct log_msg));
@@ -812,7 +804,7 @@ int wlan_logging_sock_activate_svc(int log_fe_to_console, int num_buf)
gwlan_logging.log_fe_to_console = !!log_fe_to_console;
gwlan_logging.num_buf = num_buf;
- spin_lock_irqsave(&gwlan_logging.spin_lock, irq_flag);
+ adf_os_spin_lock_irqsave(&gwlan_logging.spin_lock);
INIT_LIST_HEAD(&gwlan_logging.free_list);
INIT_LIST_HEAD(&gwlan_logging.filled_list);
@@ -823,7 +815,7 @@ int wlan_logging_sock_activate_svc(int log_fe_to_console, int num_buf)
gwlan_logging.pcur_node = (struct log_msg *)
(gwlan_logging.free_list.next);
list_del_init(gwlan_logging.free_list.next);
- spin_unlock_irqrestore(&gwlan_logging.spin_lock, irq_flag);
+ adf_os_spin_unlock_irqrestore(&gwlan_logging.spin_lock);
/* Initialize the pktStats data structure here */
pkt_stats_size = sizeof(struct pkt_stats_msg);
@@ -836,11 +828,11 @@ int wlan_logging_sock_activate_svc(int log_fe_to_console, int num_buf)
vos_mem_zero(gpkt_stats_buffers,
MAX_PKTSTATS_BUFF * pkt_stats_size);
- spin_lock_irqsave(&gwlan_logging.pkt_stats_lock, irq_flag);
+ adf_os_spin_lock_irqsave(&gwlan_logging.pkt_stats_lock);
gwlan_logging.pkt_stats_msg_idx = 0;
INIT_LIST_HEAD(&gwlan_logging.pkt_stat_free_list);
INIT_LIST_HEAD(&gwlan_logging.pkt_stat_filled_list);
- spin_unlock_irqrestore(&gwlan_logging.pkt_stats_lock, irq_flag);
+ adf_os_spin_unlock_irqrestore(&gwlan_logging.pkt_stats_lock);
for (i = 0; i < MAX_PKTSTATS_BUFF; i++) {
@@ -853,16 +845,16 @@ int wlan_logging_sock_activate_svc(int log_fe_to_console, int num_buf)
}
goto err2;
}
- spin_lock_irqsave(&gwlan_logging.pkt_stats_lock, irq_flag);
+ adf_os_spin_lock_irqsave(&gwlan_logging.pkt_stats_lock);
list_add(&gpkt_stats_buffers[i].node,
&gwlan_logging.pkt_stat_free_list);
- spin_unlock_irqrestore(&gwlan_logging.pkt_stats_lock, irq_flag);
+ adf_os_spin_unlock_irqrestore(&gwlan_logging.pkt_stats_lock);
}
- spin_lock_irqsave(&gwlan_logging.pkt_stats_lock, irq_flag);
+ adf_os_spin_lock_irqsave(&gwlan_logging.pkt_stats_lock);
gwlan_logging.pkt_stats_pcur_node = (struct pkt_stats_msg *)
(gwlan_logging.pkt_stat_free_list.next);
list_del_init(gwlan_logging.pkt_stat_free_list.next);
- spin_unlock_irqrestore(&gwlan_logging.pkt_stats_lock, irq_flag);
+ adf_os_spin_unlock_irqrestore(&gwlan_logging.pkt_stats_lock);
/* Pkt Stats intialization done */
init_waitqueue_head(&gwlan_logging.wait_queue);
@@ -890,15 +882,15 @@ err3:
dev_kfree_skb(gpkt_stats_buffers[i].skb);
}
err2:
- spin_lock_irqsave(&gwlan_logging.pkt_stats_lock, irq_flag);
+ adf_os_spin_lock_irqsave(&gwlan_logging.pkt_stats_lock);
gwlan_logging.pkt_stats_pcur_node = NULL;
- spin_unlock_irqrestore(&gwlan_logging.pkt_stats_lock, irq_flag);
+ adf_os_spin_unlock_irqrestore(&gwlan_logging.pkt_stats_lock);
vfree(gpkt_stats_buffers);
gpkt_stats_buffers = NULL;
err1:
- spin_lock_irqsave(&gwlan_logging.spin_lock, irq_flag);
+ adf_os_spin_lock_irqsave(&gwlan_logging.spin_lock);
gwlan_logging.pcur_node = NULL;
- spin_unlock_irqrestore(&gwlan_logging.spin_lock, irq_flag);
+ adf_os_spin_unlock_irqrestore(&gwlan_logging.spin_lock);
vfree(gplog_msg);
gplog_msg = NULL;
return -ENOMEM;
@@ -906,7 +898,6 @@ err1:
int wlan_logging_sock_deactivate_svc(void)
{
- unsigned long irq_flag;
int i = 0;
if (!gplog_msg)
return 0;
@@ -924,13 +915,13 @@ int wlan_logging_sock_deactivate_svc(void)
wake_up_interruptible(&gwlan_logging.wait_queue);
wait_for_completion(&gwlan_logging.shutdown_comp);
- spin_lock_irqsave(&gwlan_logging.spin_lock, irq_flag);
+ adf_os_spin_lock_irqsave(&gwlan_logging.spin_lock);
gwlan_logging.pcur_node = NULL;
- spin_unlock_irqrestore(&gwlan_logging.spin_lock, irq_flag);
+ adf_os_spin_unlock_irqrestore(&gwlan_logging.spin_lock);
vfree(gplog_msg);
gplog_msg = NULL;
- spin_lock_irqsave(&gwlan_logging.pkt_stats_lock, irq_flag);
+ adf_os_spin_lock_irqsave(&gwlan_logging.pkt_stats_lock);
gwlan_logging.pkt_stats_pcur_node = NULL;
gwlan_logging.pkt_stats_msg_idx = 0;
gwlan_logging.pkt_stat_drop_cnt = 0;
@@ -938,7 +929,7 @@ int wlan_logging_sock_deactivate_svc(void)
if (gpkt_stats_buffers[i].skb)
dev_kfree_skb(gpkt_stats_buffers[i].skb);
}
- spin_unlock_irqrestore(&gwlan_logging.pkt_stats_lock, irq_flag);
+ adf_os_spin_unlock_irqrestore(&gwlan_logging.pkt_stats_lock);
vfree(gpkt_stats_buffers);
gpkt_stats_buffers = NULL;
@@ -948,8 +939,8 @@ int wlan_logging_sock_deactivate_svc(void)
int wlan_logging_sock_init_svc(void)
{
- spin_lock_init(&gwlan_logging.spin_lock);
- spin_lock_init(&gwlan_logging.pkt_stats_lock);
+ adf_os_spinlock_init(&gwlan_logging.spin_lock);
+ adf_os_spinlock_init(&gwlan_logging.pkt_stats_lock);
gwlan_logging.pcur_node = NULL;
gwlan_logging.pkt_stats_pcur_node = NULL;
return 0;
@@ -1074,7 +1065,6 @@ void wlan_pkt_stats_to_logger_thread(void *pl_hdr, void *pkt_dump, void *data)
struct packet_dump *pkt_stats_dump;
int total_stats_len = 0;
bool wake_up_thread = false;
- unsigned long flags;
struct sk_buff *ptr;
int hdr_size;
@@ -1089,10 +1079,10 @@ void wlan_pkt_stats_to_logger_thread(void *pl_hdr, void *pkt_dump, void *data)
total_stats_len = sizeof(struct ath_pktlog_hdr) +
pktlog_hdr->size;
- spin_lock_irqsave(&gwlan_logging.pkt_stats_lock, flags);
+ adf_os_spin_lock_irqsave(&gwlan_logging.pkt_stats_lock);
if (!gwlan_logging.pkt_stats_pcur_node) {
- spin_unlock_irqrestore(&gwlan_logging.pkt_stats_lock, flags);
+ adf_os_spin_unlock_irqrestore(&gwlan_logging.pkt_stats_lock);
return;
}
@@ -1130,7 +1120,7 @@ void wlan_pkt_stats_to_logger_thread(void *pl_hdr, void *pkt_dump, void *data)
wlan_get_pkt_stats_free_node();
}
- spin_unlock_irqrestore(&gwlan_logging.pkt_stats_lock, flags);
+ adf_os_spin_unlock_irqrestore(&gwlan_logging.pkt_stats_lock);
/* Wakeup logger thread */
if (true == wake_up_thread) {
@@ -1384,14 +1374,12 @@ void wlan_register_txrx_packetdump(void)
*/
void wlan_flush_host_logs_for_fatal(void)
{
- unsigned long flags;
-
if (vos_is_log_report_in_progress()) {
pr_info("%s:flush all host logs Setting HOST_LOG_POST_MASK\n",
__func__);
- spin_lock_irqsave(&gwlan_logging.spin_lock, flags);
+ adf_os_spin_lock_irqsave(&gwlan_logging.spin_lock);
wlan_queue_logmsg_for_app();
- spin_unlock_irqrestore(&gwlan_logging.spin_lock, flags);
+ adf_os_spin_unlock_irqrestore(&gwlan_logging.spin_lock);
set_bit(HOST_LOG_DRIVER_MSG, &gwlan_logging.eventFlag);
wake_up_interruptible(&gwlan_logging.wait_queue);
}
diff --git a/CORE/SYS/legacy/src/utils/src/dot11f.c b/CORE/SYS/legacy/src/utils/src/dot11f.c
index 37f8a7f5d52c..f721294c861d 100644
--- a/CORE/SYS/legacy/src/utils/src/dot11f.c
+++ b/CORE/SYS/legacy/src/utils/src/dot11f.c
@@ -30,7 +30,7 @@
* \brief Structures, functions & definitions for
* working with 802.11 Frames
* This file was automatically generated by 'framesc'
- * Fri Aug 31 18:54:55 2018 from the following file(s):
+ * Mon Dec 3 16:47:12 2018 from the following file(s):
*
* dot11f.frms
*
@@ -22126,16 +22126,13 @@ static tANI_U32 UnpackCore(tpAniSirGlobal pCtx,
if (pIe)
{
- if ((nBufRemaining < pIe->minSize - pIe->noui - 2U) ||
- (len < pIe->minSize - pIe->noui - 2U))
+ if ((nBufRemaining < pIe->minSize - pIe->noui - 2U))
{
- FRAMES_LOG4(pCtx, FRLOGW, FRFL("The IE %s must "
+ FRAMES_LOG3(pCtx, FRLOGW, FRFL("The IE %s must "
"be at least %d bytes in size, but "
"there are only %d bytes remaining in "
- "this frame or the IE reports a size "
- "of %d bytes.\n"),
- pIe->name, pIe->minSize, nBufRemaining,
- (len + pIe->noui + 2U));
+ "this frame.\n"),
+ pIe->name, pIe->minSize, nBufRemaining);
FRAMES_DUMP(pCtx, FRLOG1, pBuf, nBuf);
status |= DOT11F_INCOMPLETE_IE;
FRAMES_DBG_BREAK();
@@ -22143,6 +22140,14 @@ static tANI_U32 UnpackCore(tpAniSirGlobal pCtx,
}
else
{
+ if (len < pIe->minSize - pIe->noui - 2U) {
+ FRAMES_LOG3(pCtx, FRLOGW, FRFL("The IE %s must "
+ "be at least %d bytes in size, but "
+ "there are only %d bytes in the IE\n"),
+ pIe->name, pIe->minSize, (len + pIe->noui + 2U));
+ goto skip_ie;
+ }
+
if (len > pIe->maxSize - pIe->noui - 2U){
FRAMES_LOG1(pCtx, FRLOGW, FRFL("The IE %s reports "
"an unexpectedly large size; it is presumably "
@@ -22155,7 +22160,7 @@ static tANI_U32 UnpackCore(tpAniSirGlobal pCtx,
countOffset = ( (0 != pIe->arraybound) * ( *(tANI_U16* )(pFrm + pIe->countOffset)));
if (0 != pIe->arraybound && countOffset >= pIe->arraybound) {
status |= DOT11F_DUPLICATE_IE;
- goto skip_dup_ie;
+ goto skip_ie;
}
switch (pIe->sig)
{
@@ -22629,7 +22634,7 @@ static tANI_U32 UnpackCore(tpAniSirGlobal pCtx,
status |= DOT11F_UNKNOWN_IES;
}
-skip_dup_ie:
+skip_ie:
pBufRemaining += len;
if (len > nBufRemaining)
diff --git a/CORE/SYS/legacy/src/utils/src/macTrace.c b/CORE/SYS/legacy/src/utils/src/macTrace.c
index a4aef9779aaf..e4cf1cd09f0f 100644
--- a/CORE/SYS/legacy/src/utils/src/macTrace.c
+++ b/CORE/SYS/legacy/src/utils/src/macTrace.c
@@ -666,7 +666,6 @@ tANI_U8* macTraceGetWdaMsgString(tANI_U16 wdaMsg)
CASE_RETURN_STRING(WDA_UPDATE_STARATEINFO_RSP);
CASE_RETURN_STRING(WDA_UPDATE_BEACON_IND);
- CASE_RETURN_STRING(WDA_UPDATE_CF_IND);
CASE_RETURN_STRING(WDA_CHNL_SWITCH_REQ);
CASE_RETURN_STRING(WDA_ADD_TS_REQ);
CASE_RETURN_STRING(WDA_DEL_TS_REQ);
diff --git a/CORE/UTILS/FWLOG/dbglog_host.c b/CORE/UTILS/FWLOG/dbglog_host.c
index f6a410924203..842c4aab66cc 100644
--- a/CORE/UTILS/FWLOG/dbglog_host.c
+++ b/CORE/UTILS/FWLOG/dbglog_host.c
@@ -190,6 +190,8 @@ const char *dbglog_get_module_str(A_UINT32 module_id)
return "NAN20";
case WLAN_MODULE_QBOOST:
return "QBOOST";
+ case WLAN_MODULE_HPCS_PULSE:
+ return "HPCS";
default:
return "UNKNOWN";
}
@@ -1628,6 +1630,68 @@ char * DBG_MSG_ARR[WLAN_MODULE_ID_MAX][MAX_DBG_MSGS] =
DBG_STRING(WLAN_MODULE_QBOOST_DBGID_WLAN_PEER_NOT_FOUND),
DBG_STRING(WLAN_MODULE_QBOOST_DEFINITION_END),
},
+ {
+ /* WLAN_MODULE_P2P_LISTEN_OFFLOAD */
+ ""
+ },
+ {
+ /* WLAN_MODULE_HALPHY */
+ ""
+ },
+ {
+ /* WAL_MODULE_ENQ */
+ ""
+ },
+ {
+ /* WLAN_MODULE_GNSS */
+ ""
+ },
+ {
+ /* WLAN_MODULE_WAL_MEM */
+ ""
+ },
+ {
+ /* WLAN_MODULE_SCHED_ALGO */
+ ""
+ },
+ {
+ /* WLAN_MODULE_TX */
+ ""
+ },
+ {
+ /* WLAN_MODULE_RX */
+ ""
+ },
+ {
+ /* WLAN_MODULE_WLM */
+ ""
+ },
+ {
+ /* WLAN_MODULE_RU_ALLOCATOR */
+ ""
+ },
+ {
+ /* WLAN_MODULE_11K_OFFLOAD */
+ ""
+ },
+ {
+ /* WLAN_MODULE_STA_TWT */
+ ""
+ },
+ {
+ /* WLAN_MODULE_AP_TWT */
+ ""
+ },
+ {
+ /* WLAN_MODULE_UL_OFDMA */
+ ""
+ },
+ {
+ DBG_STRING(HPCS_PULSE_START),
+ DBG_STRING(HPCS_PULSE_LF_TIMER),
+ DBG_STRING(HPCS_PULSE_HF_TIMER),
+ DBG_STRING(HPCS_PULSE_POWER_SAVE),
+ },
};
@@ -1977,7 +2041,7 @@ dbglog_debugfs_raw_data(wmi_unified_t wmi_handle, const u_int8_t *buf, A_UINT32
/* Need to pad each record to fixed length ATH6KL_FWLOG_PAYLOAD_SIZE */
memset(slot->payload + length, 0, ATH6KL_FWLOG_PAYLOAD_SIZE - length);
- spin_lock(&fwlog->fwlog_queue.lock);
+ adf_os_raw_spin_lock(&fwlog->fwlog_queue.lock);
__skb_queue_tail(&fwlog->fwlog_queue, skb);
@@ -1990,7 +2054,7 @@ dbglog_debugfs_raw_data(wmi_unified_t wmi_handle, const u_int8_t *buf, A_UINT32
kfree_skb(skb);
}
- spin_unlock(&fwlog->fwlog_queue.lock);
+ adf_os_raw_spin_unlock(&fwlog->fwlog_queue.lock);
return TRUE;
}
@@ -4298,13 +4362,13 @@ static ssize_t dbglog_block_read(struct file *file,
if (!buf)
return -ENOMEM;
- spin_lock_bh(&fwlog->fwlog_queue.lock);
+ adf_os_raw_spin_lock_bh(&fwlog->fwlog_queue.lock);
if (skb_queue_len(&fwlog->fwlog_queue) == 0) {
/* we must init under queue lock */
init_completion(&fwlog->fwlog_completion);
- spin_unlock_bh(&fwlog->fwlog_queue.lock);
+ adf_os_raw_spin_unlock_bh(&fwlog->fwlog_queue.lock);
ret = wait_for_completion_interruptible(
&fwlog->fwlog_completion);
@@ -4313,7 +4377,7 @@ static ssize_t dbglog_block_read(struct file *file,
return ret;
}
- spin_lock_bh(&fwlog->fwlog_queue.lock);
+ adf_os_raw_spin_lock_bh(&fwlog->fwlog_queue.lock);
}
while ((skb = __skb_dequeue(&fwlog->fwlog_queue))) {
@@ -4329,7 +4393,7 @@ static ssize_t dbglog_block_read(struct file *file,
kfree_skb(skb);
}
- spin_unlock_bh(&fwlog->fwlog_queue.lock);
+ adf_os_raw_spin_unlock_bh(&fwlog->fwlog_queue.lock);
/* FIXME: what to do if len == 0? */
not_copied = copy_to_user(user_buf, buf, len);
diff --git a/CORE/UTILS/PKTLOG/include/pktlog_ac.h b/CORE/UTILS/PKTLOG/include/pktlog_ac.h
index 4e3d34a2f19a..a64a56dbb524 100644
--- a/CORE/UTILS/PKTLOG/include/pktlog_ac.h
+++ b/CORE/UTILS/PKTLOG/include/pktlog_ac.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2013, 2016 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2013, 2016, 2018 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -40,10 +40,10 @@
#define NO_REG_FUNCS 4
/* Locking interface for pktlog */
-#define PKTLOG_LOCK_INIT(_pl_info) spin_lock_init(&(_pl_info)->log_lock)
+#define PKTLOG_LOCK_INIT(_pl_info) adf_os_spinlock_init(&(_pl_info)->log_lock)
#define PKTLOG_LOCK_DESTROY(_pl_info)
-#define PKTLOG_LOCK(_pl_info) spin_lock(&(_pl_info)->log_lock)
-#define PKTLOG_UNLOCK(_pl_info) spin_unlock(&(_pl_info)->log_lock)
+#define PKTLOG_LOCK(_pl_info) adf_os_spin_lock(&(_pl_info)->log_lock)
+#define PKTLOG_UNLOCK(_pl_info) adf_os_spin_unlock(&(_pl_info)->log_lock)
#define PKTLOG_MODE_SYSTEM 1
#define PKTLOG_MODE_ADAPTER 2
diff --git a/CORE/UTILS/PKTLOG/include/pktlog_ac_api.h b/CORE/UTILS/PKTLOG/include/pktlog_ac_api.h
index 5fdc83c575b5..55afc1e6037e 100644
--- a/CORE/UTILS/PKTLOG/include/pktlog_ac_api.h
+++ b/CORE/UTILS/PKTLOG/include/pktlog_ac_api.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2017 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2018 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -71,7 +71,7 @@ struct ath_pktlog_info {
/* Size of buffer in bytes */
int32_t buf_size;
- spinlock_t log_lock;
+ adf_os_spinlock_t log_lock;
struct mutex pktlog_mutex;
/* Threshold of TCP SACK packets for triggered stop */
int sack_thr;
diff --git a/CORE/UTILS/PKTLOG/linux_ac.c b/CORE/UTILS/PKTLOG/linux_ac.c
index ed6db1766188..0560288ac888 100644
--- a/CORE/UTILS/PKTLOG/linux_ac.c
+++ b/CORE/UTILS/PKTLOG/linux_ac.c
@@ -136,13 +136,13 @@ int pktlog_alloc_buf(struct ol_softc *scn)
page_cnt = (sizeof(*(pl_info->buf)) + pl_info->buf_size) / PAGE_SIZE;
- spin_lock_bh(&pl_info->log_lock);
+ adf_os_spin_lock_bh(&pl_info->log_lock);
if(pl_info->buf != NULL) {
printk("Buffer is already in use\n");
- spin_unlock_bh(&pl_info->log_lock);
+ adf_os_spin_unlock_bh(&pl_info->log_lock);
return -EINVAL;
}
- spin_unlock_bh(&pl_info->log_lock);
+ adf_os_spin_unlock_bh(&pl_info->log_lock);
if ((buffer = vmalloc((page_cnt + 2) * PAGE_SIZE)) == NULL) {
printk(PKTLOG_TAG
@@ -167,12 +167,12 @@ int pktlog_alloc_buf(struct ol_softc *scn)
SetPageReserved(vpg);
}
- spin_lock_bh(&pl_info->log_lock);
+ adf_os_spin_lock_bh(&pl_info->log_lock);
if(pl_info->buf != NULL)
pktlog_release_buf(scn);
pl_info->buf = buffer;
- spin_unlock_bh(&pl_info->log_lock);
+ adf_os_spin_unlock_bh(&pl_info->log_lock);
return 0;
}
@@ -574,10 +574,10 @@ static void pktlog_detach(struct ol_softc *scn)
remove_proc_entry(WLANDEV_BASENAME, g_pktlog_pde);
pktlog_sysctl_unregister(pl_dev);
- spin_lock_bh(&pl_info->log_lock);
+ adf_os_spin_lock_bh(&pl_info->log_lock);
if (pl_info->buf)
pktlog_release_buf(scn);
- spin_unlock_bh(&pl_info->log_lock);
+ adf_os_spin_unlock_bh(&pl_info->log_lock);
pktlog_cleanup(pl_info);
if (pl_dev) {
@@ -630,14 +630,14 @@ pktlog_read_proc_entry(char *buf, size_t nbytes, loff_t *ppos,
int fold_offset, ppos_data, cur_rd_offset, cur_wr_offset;
struct ath_pktlog_buf *log_buf;
- spin_lock_bh(&pl_info->log_lock);
+ adf_os_spin_lock_bh(&pl_info->log_lock);
log_buf = pl_info->buf;
*read_complete = false;
if (log_buf == NULL) {
*read_complete = true;
- spin_unlock_bh(&pl_info->log_lock);
+ adf_os_spin_unlock_bh(&pl_info->log_lock);
return 0;
}
@@ -754,7 +754,7 @@ rd_done:
*read_complete = true;
}
}
- spin_unlock_bh(&pl_info->log_lock);
+ adf_os_spin_unlock_bh(&pl_info->log_lock);
return ret_val;
}
@@ -776,11 +776,11 @@ __pktlog_read(struct file *file, char *buf, size_t nbytes, loff_t *ppos)
#endif
struct ath_pktlog_buf *log_buf;
- spin_lock_bh(&pl_info->log_lock);
+ adf_os_spin_lock_bh(&pl_info->log_lock);
log_buf = pl_info->buf;
if (log_buf == NULL) {
- spin_unlock_bh(&pl_info->log_lock);
+ adf_os_spin_unlock_bh(&pl_info->log_lock);
return 0;
}
@@ -797,13 +797,13 @@ __pktlog_read(struct file *file, char *buf, size_t nbytes, loff_t *ppos)
if (*ppos < bufhdr_size) {
count = MIN((bufhdr_size - *ppos), rem_len);
- spin_unlock_bh(&pl_info->log_lock);
+ adf_os_spin_unlock_bh(&pl_info->log_lock);
if (copy_to_user(buf, ((char *)&log_buf->bufhdr) + *ppos,
count))
return -EFAULT;
rem_len -= count;
ret_val += count;
- spin_lock_bh(&pl_info->log_lock);
+ adf_os_spin_lock_bh(&pl_info->log_lock);
}
start_offset = log_buf->rd_offset;
@@ -845,25 +845,25 @@ __pktlog_read(struct file *file, char *buf, size_t nbytes, loff_t *ppos)
goto rd_done;
count = MIN(rem_len, (end_offset - ppos_data + 1));
- spin_unlock_bh(&pl_info->log_lock);
+ adf_os_spin_unlock_bh(&pl_info->log_lock);
if (copy_to_user(buf + ret_val,
log_buf->log_data + ppos_data,
count))
return -EFAULT;
ret_val += count;
rem_len -= count;
- spin_lock_bh(&pl_info->log_lock);
+ adf_os_spin_lock_bh(&pl_info->log_lock);
} else {
if (ppos_data <= fold_offset) {
count = MIN(rem_len, (fold_offset - ppos_data + 1));
- spin_unlock_bh(&pl_info->log_lock);
+ adf_os_spin_unlock_bh(&pl_info->log_lock);
if (copy_to_user(buf + ret_val,
log_buf->log_data + ppos_data,
count))
return -EFAULT;
ret_val += count;
rem_len -= count;
- spin_lock_bh(&pl_info->log_lock);
+ adf_os_spin_lock_bh(&pl_info->log_lock);
}
if (rem_len == 0)
@@ -875,14 +875,14 @@ __pktlog_read(struct file *file, char *buf, size_t nbytes, loff_t *ppos)
if (ppos_data <= end_offset) {
count = MIN(rem_len, (end_offset - ppos_data + 1));
- spin_unlock_bh(&pl_info->log_lock);
+ adf_os_spin_unlock_bh(&pl_info->log_lock);
if (copy_to_user(buf + ret_val,
log_buf->log_data + ppos_data,
count))
return -EFAULT;
ret_val += count;
rem_len -= count;
- spin_lock_bh(&pl_info->log_lock);
+ adf_os_spin_lock_bh(&pl_info->log_lock);
}
}
@@ -893,7 +893,7 @@ rd_done:
}
*ppos += ret_val;
- spin_unlock_bh(&pl_info->log_lock);
+ adf_os_spin_unlock_bh(&pl_info->log_lock);
return ret_val;
}
diff --git a/CORE/UTILS/PKTLOG/pktlog_ac.c b/CORE/UTILS/PKTLOG/pktlog_ac.c
index 9141a2ba85ae..2f2ba4e1b4eb 100644
--- a/CORE/UTILS/PKTLOG/pktlog_ac.c
+++ b/CORE/UTILS/PKTLOG/pktlog_ac.c
@@ -351,7 +351,7 @@ __pktlog_enable(struct ol_softc *scn, int32_t log_state)
}
}
- spin_lock_bh(&pl_info->log_lock);
+ adf_os_spin_lock_bh(&pl_info->log_lock);
pl_info->buf->bufhdr.version = CUR_PKTLOG_VER;
pl_info->buf->bufhdr.magic_num = PKTLOG_MAGIC_NUM;
pl_info->buf->wr_offset = 0;
@@ -360,7 +360,7 @@ __pktlog_enable(struct ol_softc *scn, int32_t log_state)
pl_info->buf->bytes_written = 0;
pl_info->buf->msg_index = 1;
pl_info->buf->offset = PKTLOG_READ_OFFSET;
- spin_unlock_bh(&pl_info->log_lock);
+ adf_os_spin_unlock_bh(&pl_info->log_lock);
pl_info->start_time_thruput = OS_GET_TIMESTAMP();
pl_info->start_time_per = pl_info->start_time_thruput;
@@ -450,13 +450,13 @@ __pktlog_setsize(struct ol_softc *scn, int32_t size)
return -EINVAL;
}
- spin_lock_bh(&pl_info->log_lock);
+ adf_os_spin_lock_bh(&pl_info->log_lock);
if (pl_info->buf != NULL)
pktlog_release_buf(scn);
if (size != 0)
pl_info->buf_size = size;
- spin_unlock_bh(&pl_info->log_lock);
+ adf_os_spin_unlock_bh(&pl_info->log_lock);
return 0;
}
diff --git a/CORE/VOSS/inc/i_vos_list.h b/CORE/VOSS/inc/i_vos_list.h
index 119531c78c3a..0e23e82805d9 100644
--- a/CORE/VOSS/inc/i_vos_list.h
+++ b/CORE/VOSS/inc/i_vos_list.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2014, 2018 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -73,4 +73,10 @@ typedef struct list_head vos_list_node_t;
}
#endif /* __cplusplus */
+#define __VOS_LIST_NODE_INIT(prev_node, next_node) \
+ { .prev = &(prev_node), .next = &(next_node), }
+#define __VOS_LIST_NODE_INIT_SINGLE(node) \
+ __VOS_LIST_NODE_INIT(node, node)
+#define __VOS_LIST_ANCHOR(list) ((list).anchor)
+
#endif // __I_VOS_LIST_H
diff --git a/CORE/VOSS/inc/i_vos_timer.h b/CORE/VOSS/inc/i_vos_timer.h
index f96efc2d2672..af63928deaa5 100644
--- a/CORE/VOSS/inc/i_vos_timer.h
+++ b/CORE/VOSS/inc/i_vos_timer.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2014 2018 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -46,6 +46,7 @@
#include <linux/timer.h>
#include <linux/time.h>
#include <linux/jiffies.h>
+#include <adf_os_lock.h>
/*--------------------------------------------------------------------------
Preprocessor definitions and constants
@@ -63,7 +64,7 @@ typedef struct vos_timer_platform_s
struct timer_list Timer;
int threadID;
v_U32_t cookie;
- spinlock_t spinlock;
+ adf_os_spinlock_t spinlock;
} vos_timer_platform_t;
diff --git a/CORE/VOSS/inc/vos_list.h b/CORE/VOSS/inc/vos_list.h
index 98893c8adfd3..1bd3d81c658c 100644
--- a/CORE/VOSS/inc/vos_list.h
+++ b/CORE/VOSS/inc/vos_list.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2014, 2018 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -252,6 +252,21 @@ VOS_STATUS vos_list_insert_front( vos_list_t *pList, vos_list_node_t *pNode );
--------------------------------------------------------------------------*/
VOS_STATUS vos_list_insert_back( vos_list_t *pList, vos_list_node_t *pNode );
+/**
+ * vos_list_insert_back_no_mutex() - insert node at back of a linked list
+ * @pList: Pointer to list object where the node will be inserted.
+ * @pNode: Pointer to the list node to be inserted into the list.
+ *
+ * Return VOS_STATUS_SUCCESS - list node was successfully inserted onto
+ * the back of the list.
+ * VOS_STATUS_E_INVAL - The value specified by pList is not a valid,
+ * initialized list object.
+ * VOS_STATUS_E_FAULT - pList is an invalid pointer or pNode is an
+ * invalid pointer.
+ */
+VOS_STATUS vos_list_insert_back_no_mutex(vos_list_t *pList,
+ vos_list_node_t *pNode);
+
/**---------------------------------------------------------------------------
\brief vos_list_insert_back_size() - insert node at back of a linked list and
@@ -368,6 +383,20 @@ VOS_STATUS vos_list_remove_back( vos_list_t *pList, vos_list_node_t **ppNode );
--------------------------------------------------------------------------*/
VOS_STATUS vos_list_size( vos_list_t *pList, v_SIZE_t *pSize );
+/**
+ * vos_list_size_no_mutex() - return the size of of a linked list
+ * @pList: Pointer to list object where the node will be inserted.
+ * @pNode: Pointer to the list node to be inserted into the list.
+ *
+ * Return VOS_STATUS_SUCCESS - list node was successfully inserted onto
+ * the back of the list.
+ * VOS_STATUS_E_INVAL - The value specified by pList is not a valid,
+ * initialized list object.
+ * VOS_STATUS_E_FAULT - pList is an invalid pointer or pNode is an
+ * invalid pointer.
+ */
+VOS_STATUS vos_list_size_no_mutex( vos_list_t *pList, v_SIZE_t *pSize );
+
/**---------------------------------------------------------------------------
\brief vos_list_peek_front() - peek at the node at front of a linked list
@@ -579,6 +608,24 @@ VOS_STATUS vos_list_insert_after( vos_list_t *pList, vos_list_node_t *pNodeToIns
--------------------------------------------------------------------------*/
VOS_STATUS vos_list_remove_node( vos_list_t *pList, vos_list_node_t *pNodeToRemove );
+/**
+ * vos_list_remove_node_no_mutex() - API will remove a specified node from the
+ * properly initialized vOS List object.
+ * @pList: Pointer to list object where the node will be inserted.
+ * @pNode: Pointer to the list node to be inserted into the list.
+ *
+ * Return VOS_STATUS_SUCCESS - list node was successfully inserted onto
+ * the back of the list.
+ * VOS_STATUS_E_INVAL - The value specified by pList is not a valid,
+ * initialized list object.
+ * VOS_STATUS_E_FAULT - pList is an invalid pointer or pNode is an
+ * invalid pointer.
+ */
+VOS_STATUS vos_list_remove_node_no_mutex(vos_list_t *pList,
+ vos_list_node_t *pNodeToRemove);
+
+#define VOS_LIST_NODE_INIT_SINGLE(node) __VOS_LIST_NODE_INIT_SINGLE(node)
+#define VOS_LIST_ANCHOR(list) __VOS_LIST_ANCHOR(list)
#endif // __VOS_LIST_H
diff --git a/CORE/VOSS/src/vos_api.c b/CORE/VOSS/src/vos_api.c
index 393b7699b887..825cfd88d815 100644
--- a/CORE/VOSS/src/vos_api.c
+++ b/CORE/VOSS/src/vos_api.c
@@ -3515,18 +3515,18 @@ bool vos_is_chan_ok_for_dnbs(uint8_t channel)
return false;
}
- spin_lock_bh(&pHddCtx->restrict_offchan_lock);
+ adf_os_spin_lock_bh(&pHddCtx->restrict_offchan_lock);
if (pHddCtx->restrict_offchan_flag) {
VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO,
"%s: flag is set", __func__);
wlansap_channel_compare(gpVosContext->pMACContext, channel, &equal);
- spin_unlock_bh(&pHddCtx->restrict_offchan_lock);
+ adf_os_spin_unlock_bh(&pHddCtx->restrict_offchan_lock);
return equal;
}
else
VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO,
"%s: flag is not set", __func__);
- spin_unlock_bh(&pHddCtx->restrict_offchan_lock);
+ adf_os_spin_unlock_bh(&pHddCtx->restrict_offchan_lock);
return true;
}
#endif
diff --git a/CORE/VOSS/src/vos_list.c b/CORE/VOSS/src/vos_list.c
index 2ce881343bed..31a4cca3b371 100644
--- a/CORE/VOSS/src/vos_list.c
+++ b/CORE/VOSS/src/vos_list.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014-2015 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2014-2015 2018 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -194,6 +194,31 @@ VOS_STATUS vos_list_insert_back( vos_list_t *pList, vos_list_node_t *pNode )
return VOS_STATUS_SUCCESS;
}
+VOS_STATUS vos_list_insert_back_no_mutex(vos_list_t *pList,
+ vos_list_node_t *pNode)
+{
+ if ( ( pList == NULL) || ( pNode == NULL) )
+ {
+ VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
+ "%s: NULL pointer passed in", __func__);
+ return VOS_STATUS_E_FAULT;
+ }
+
+ if ( pList->cookie != VOS_LIST_COOKIE )
+ {
+ VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
+ "%s: list not initialized", __func__);
+ VOS_ASSERT(0);
+ return VOS_STATUS_E_INVAL;
+ }
+
+ list_add_tail( pNode, &pList->anchor );
+
+ pList->count++;
+
+ return VOS_STATUS_SUCCESS;
+}
+
VOS_STATUS vos_list_insert_back_size( vos_list_t *pList, vos_list_node_t *pNode, v_SIZE_t *pSize )
{
@@ -364,6 +389,28 @@ VOS_STATUS vos_list_size( vos_list_t *pList, v_SIZE_t *pSize )
return VOS_STATUS_SUCCESS;
}
+VOS_STATUS vos_list_size_no_mutex( vos_list_t *pList, v_SIZE_t *pSize )
+{
+ if ( ( pList ==NULL) || ( pSize == NULL) )
+ {
+ VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
+ "%s: NULL pointer passed in", __func__);
+ return VOS_STATUS_E_FAULT;
+ }
+
+ if ( pList->cookie != VOS_LIST_COOKIE )
+ {
+ VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
+ "%s: list not initialized", __func__);
+ VOS_ASSERT(0);
+ return VOS_STATUS_E_INVAL;
+ }
+
+ *pSize = pList->count;
+
+ return VOS_STATUS_SUCCESS;
+}
+
/*----------------------------------------------------------------------------
@@ -583,8 +630,10 @@ VOS_STATUS vos_list_peek_next( vos_list_t *pList, vos_list_node_t *pNode,
break;
}
}
- if (found == 0)
+ if (found == 0) {
+ mutex_unlock(&pList->lock);
return VOS_STATUS_E_INVAL;
+ }
listptr = pNode->next;
if (listptr == &pList->anchor)
@@ -678,8 +727,10 @@ VOS_STATUS vos_list_peek_prev( vos_list_t *pList, vos_list_node_t *pNode,
break;
}
}
- if (found == 0)
+ if (found == 0) {
+ mutex_unlock(&pList->lock);
return VOS_STATUS_E_INVAL;
+ }
listptr = pNode->prev;
@@ -769,8 +820,10 @@ VOS_STATUS vos_list_insert_before( vos_list_t *pList, vos_list_node_t *pNodeToIn
break;
}
}
- if (found == 0)
+ if (found == 0) {
+ mutex_unlock(&pList->lock);
return VOS_STATUS_E_INVAL;
+ }
list_add(pNodeToInsert, pNode);
pList->count++;
@@ -853,8 +906,10 @@ VOS_STATUS vos_list_insert_after( vos_list_t *pList, vos_list_node_t *pNodeToIns
break;
}
}
- if (found == 0)
+ if (found == 0) {
+ mutex_unlock(&pList->lock);
return VOS_STATUS_E_INVAL;
+ }
list_add_tail(pNodeToInsert, pNode);
pList->count++;
@@ -934,8 +989,10 @@ VOS_STATUS vos_list_remove_node( vos_list_t *pList, vos_list_node_t *pNodeToRemo
break;
}
}
- if (found == 0)
+ if (found == 0) {
+ mutex_unlock(&pList->lock);
return VOS_STATUS_E_INVAL;
+ }
list_del(pNodeToRemove);
pList->count--;
@@ -943,3 +1000,49 @@ VOS_STATUS vos_list_remove_node( vos_list_t *pList, vos_list_node_t *pNodeToRemo
return VOS_STATUS_SUCCESS;
}
+
+VOS_STATUS vos_list_remove_node_no_mutex(vos_list_t *pList,
+ vos_list_node_t *pNodeToRemove)
+{
+ int found = 0;
+ vos_list_node_t *tmp;
+
+ if ( ( pList == NULL ) || ( pNodeToRemove == NULL) )
+ {
+ VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
+ "%s: NULL pointer passed in", __func__);
+ return VOS_STATUS_E_FAULT;
+ }
+
+ if ( pList->cookie != VOS_LIST_COOKIE )
+ {
+ VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
+ "%s: list not initialized", __func__);
+ VOS_ASSERT(0);
+ return VOS_STATUS_E_INVAL;
+ }
+
+ if ( list_empty(&pList->anchor) )
+ {
+ VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
+ "%s: list empty", __func__);
+ return VOS_STATUS_E_EMPTY;
+ }
+
+ // verify that pNodeToRemove is indeed part of list pList
+ list_for_each(tmp, &pList->anchor)
+ {
+ if (tmp == pNodeToRemove)
+ {
+ found = 1;
+ break;
+ }
+ }
+ if (found == 0)
+ return VOS_STATUS_E_INVAL;
+
+ list_del(pNodeToRemove);
+ pList->count--;
+
+ return VOS_STATUS_SUCCESS;
+}
diff --git a/CORE/VOSS/src/vos_memory.c b/CORE/VOSS/src/vos_memory.c
index 4a3ce77cf510..e58ef1ef2c84 100644
--- a/CORE/VOSS/src/vos_memory.c
+++ b/CORE/VOSS/src/vos_memory.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2017 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2018 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -233,7 +233,7 @@ void vos_mem_trace_dump(int level)
VOS_STATUS vosStatus;
struct s_vos_mem_struct *memStruct;
- spin_lock(&vosMemList.lock);
+ adf_os_spin_lock(&vosMemList.lock);
hdd_list_peek_front(&vosMemList, &pNodeNext);
do {
if (pNodeNext == NULL)
@@ -251,7 +251,7 @@ void vos_mem_trace_dump(int level)
pNodeNext = NULL;
} while ((vosStatus = hdd_list_peek_next(&vosMemList,
pNode, &pNodeNext)) == VOS_STATUS_SUCCESS);
- spin_unlock(&vosMemList.lock);
+ adf_os_spin_unlock(&vosMemList.lock);
VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL,
"vos_mem [total active] count %d size %d", i, totalUsed);
@@ -332,9 +332,9 @@ void vos_mem_clean()
do
{
- spin_lock(&vosMemList.lock);
+ adf_os_spin_lock(&vosMemList.lock);
vosStatus = hdd_list_remove_front(&vosMemList, &pNode);
- spin_unlock(&vosMemList.lock);
+ adf_os_spin_unlock(&vosMemList.lock);
if(VOS_STATUS_SUCCESS == vosStatus)
{
memStruct = (struct s_vos_mem_struct*)pNode;
@@ -396,7 +396,6 @@ v_VOID_t *vos_mem_malloc_debug(v_SIZE_t size, const char *fileName,
v_VOID_t* memPtr = NULL;
v_SIZE_t new_size;
int flags = GFP_KERNEL;
- unsigned long IrqFlags;
unsigned long time_before_kmalloc;
@@ -452,10 +451,10 @@ v_VOID_t *vos_mem_malloc_debug(v_SIZE_t size, const char *fileName,
vos_mem_copy(&memStruct->header[0], &WLAN_MEM_HEADER[0], sizeof(WLAN_MEM_HEADER));
vos_mem_copy( (v_U8_t*)(memStruct + 1) + size, &WLAN_MEM_TAIL[0], sizeof(WLAN_MEM_TAIL));
- spin_lock_irqsave(&vosMemList.lock, IrqFlags);
+ adf_os_spin_lock_irqsave(&vosMemList.lock);
vosStatus = hdd_list_insert_front(&vosMemList, &memStruct->pNode);
alloc_trace_usage(fileName, lineNum, size);
- spin_unlock_irqrestore(&vosMemList.lock, IrqFlags);
+ adf_os_spin_unlock_irqrestore(&vosMemList.lock);
if(VOS_STATUS_SUCCESS != vosStatus)
{
VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
@@ -470,8 +469,6 @@ v_VOID_t *vos_mem_malloc_debug(v_SIZE_t size, const char *fileName,
v_VOID_t vos_mem_free( v_VOID_t *ptr )
{
- unsigned long IrqFlags;
-
if (ptr != NULL)
{
VOS_STATUS vosStatus;
@@ -482,11 +479,11 @@ v_VOID_t vos_mem_free( v_VOID_t *ptr )
return;
#endif
- spin_lock_irqsave(&vosMemList.lock, IrqFlags);
+ adf_os_spin_lock_irqsave(&vosMemList.lock);
vosStatus = hdd_list_remove_node(&vosMemList, &memStruct->pNode);
free_trace_usage(memStruct->fileName, memStruct->lineNum,
memStruct->size);
- spin_unlock_irqrestore(&vosMemList.lock, IrqFlags);
+ adf_os_spin_unlock_irqrestore(&vosMemList.lock);
if(VOS_STATUS_SUCCESS == vosStatus)
{
@@ -726,10 +723,10 @@ v_VOID_t * vos_mem_dma_malloc_debug( v_SIZE_t size, char* fileName, v_U32_t line
vos_mem_copy(&memStruct->header[0], &WLAN_MEM_HEADER[0], sizeof(WLAN_MEM_HEADER));
vos_mem_copy( (v_U8_t*)(memStruct + 1) + size, &WLAN_MEM_TAIL[0], sizeof(WLAN_MEM_TAIL));
- spin_lock(&vosMemList.lock);
+ adf_os_spin_lock(&vosMemList.lock);
vosStatus = hdd_list_insert_front(&vosMemList, &memStruct->pNode);
alloc_trace_usage(fileName, lineNum, size);
- spin_unlock(&vosMemList.lock);
+ adf_os_spin_unlock(&vosMemList.lock);
if(VOS_STATUS_SUCCESS != vosStatus)
{
VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
@@ -749,11 +746,11 @@ v_VOID_t vos_mem_dma_free( v_VOID_t *ptr )
VOS_STATUS vosStatus;
struct s_vos_mem_struct* memStruct = ((struct s_vos_mem_struct*)ptr) - 1;
- spin_lock(&vosMemList.lock);
+ adf_os_spin_lock(&vosMemList.lock);
vosStatus = hdd_list_remove_node(&vosMemList, &memStruct->pNode);
free_trace_usage(memStruct->fileName, memStruct->lineNum,
memStruct->size);
- spin_unlock(&vosMemList.lock);
+ adf_os_spin_unlock(&vosMemList.lock);
if(VOS_STATUS_SUCCESS == vosStatus)
{
diff --git a/CORE/VOSS/src/vos_mq.c b/CORE/VOSS/src/vos_mq.c
index 81c43598594e..78358597aa5f 100644
--- a/CORE/VOSS/src/vos_mq.c
+++ b/CORE/VOSS/src/vos_mq.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, 2016 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2014, 2016, 2018 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -86,7 +86,7 @@ __inline VOS_STATUS vos_mq_init(pVosMqType pMq)
/*
** Now initialize the lock
*/
- spin_lock_init(&pMq->mqLock);
+ adf_os_spinlock_init(&pMq->mqLock);
/*
** Now initialize the List data structure
@@ -143,8 +143,6 @@ __inline void vos_mq_deinit(pVosMqType pMq)
---------------------------------------------------------------------------*/
__inline void vos_mq_put(pVosMqType pMq, pVosMsgWrapper pMsgWrapper)
{
- unsigned long flags;
-
/*
** Some quick sanity check
*/
@@ -154,11 +152,11 @@ __inline void vos_mq_put(pVosMqType pMq, pVosMsgWrapper pMsgWrapper)
return ;
}
- spin_lock_irqsave(&pMq->mqLock, flags);
+ adf_os_spin_lock_irqsave(&pMq->mqLock);
list_add_tail(&pMsgWrapper->msgNode, &pMq->mqList);
- spin_unlock_irqrestore(&pMq->mqLock, flags);
+ adf_os_spin_unlock_irqrestore(&pMq->mqLock);
} /* vos_mq_put() */
@@ -173,17 +171,15 @@ __inline void vos_mq_put(pVosMqType pMq, pVosMsgWrapper pMsgWrapper)
*/
void vos_mq_put_front(pVosMqType mq, pVosMsgWrapper msg_wrapper)
{
- unsigned long flags;
-
if ((mq == NULL) || (msg_wrapper == NULL)) {
VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
"%s: NULL pointer passed", __func__);
return;
}
- spin_lock_irqsave(&mq->mqLock, flags);
+ adf_os_spin_lock_irqsave(&mq->mqLock);
list_add(&msg_wrapper->msgNode, &mq->mqList);
- spin_unlock_irqrestore(&mq->mqLock, flags);
+ adf_os_spin_unlock_irqrestore(&mq->mqLock);
}
/*---------------------------------------------------------------------------
@@ -208,7 +204,6 @@ __inline pVosMsgWrapper vos_mq_get(pVosMqType pMq)
** Some quick sanity check
*/
struct list_head * listptr;
- unsigned long flags;
if (pMq == NULL) {
VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
@@ -216,7 +211,7 @@ __inline pVosMsgWrapper vos_mq_get(pVosMqType pMq)
return NULL;
}
- spin_lock_irqsave(&pMq->mqLock, flags);
+ adf_os_spin_lock_irqsave(&pMq->mqLock);
if( list_empty(&pMq->mqList) )
{
@@ -230,7 +225,7 @@ __inline pVosMsgWrapper vos_mq_get(pVosMqType pMq)
list_del(pMq->mqList.next);
}
- spin_unlock_irqrestore(&pMq->mqLock, flags);
+ adf_os_spin_unlock_irqrestore(&pMq->mqLock);
return pMsgWrapper;
@@ -253,7 +248,6 @@ __inline pVosMsgWrapper vos_mq_get(pVosMqType pMq)
__inline v_BOOL_t vos_is_mq_empty(pVosMqType pMq)
{
v_BOOL_t state = VOS_FALSE;
- unsigned long flags;
/*
** Some quick sanity check
@@ -265,9 +259,9 @@ __inline v_BOOL_t vos_is_mq_empty(pVosMqType pMq)
return VOS_STATUS_E_FAILURE;
}
- spin_lock_irqsave(&pMq->mqLock, flags);
+ adf_os_spin_lock_irqsave(&pMq->mqLock);
state = list_empty(&pMq->mqList)?VOS_TRUE:VOS_FALSE;
- spin_unlock_irqrestore(&pMq->mqLock, flags);
+ adf_os_spin_unlock_irqrestore(&pMq->mqLock);
return state;
diff --git a/CORE/VOSS/src/vos_nvitem.c b/CORE/VOSS/src/vos_nvitem.c
index e4e2a73c6697..a3a325ef28a4 100644
--- a/CORE/VOSS/src/vos_nvitem.c
+++ b/CORE/VOSS/src/vos_nvitem.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2018 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2019 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -292,7 +292,7 @@ chan_to_ht_40_index_map chan_to_ht_40_index[NUM_20MHZ_RF_CHANNELS] =
static CountryInfoTable_t countryInfoTable =
{
/* the first entry in the table is always the world domain */
- 141,
+ 142,
{
{REGDOMAIN_WORLD, {'0', '0'}}, // WORLD DOMAIN
{REGDOMAIN_FCC, {'A', 'D'}}, // ANDORRA
@@ -375,6 +375,7 @@ static CountryInfoTable_t countryInfoTable =
{REGDOMAIN_ETSI, {'M', 'A'}}, //MOROCCO
{REGDOMAIN_ETSI, {'M', 'C'}}, //MONACO
{REGDOMAIN_ETSI, {'M', 'K'}}, //MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF
+ {REGDOMAIN_ETSI, {'M', 'M'}}, //MYANMAR
{REGDOMAIN_FCC, {'M','N'}}, //MONGOLIA
{REGDOMAIN_FCC, {'M', 'O'}}, //MACAO
{REGDOMAIN_FCC, {'M', 'P'}}, //NORTHERN MARIANA ISLANDS
@@ -2148,13 +2149,27 @@ static int create_linux_regulatory_entry(struct wiphy *wiphy,
}
}
} else {
- /* Enable is only last flag we support */
- pnvEFSTable->halnv.tables.regDomains[temp_reg_domain].
- channels[k].enabled = NV_CHANNEL_ENABLE;
-
- /* max_power is in dBm */
- pnvEFSTable->halnv.tables.regDomains[temp_reg_domain].channels[k].pwrLimit =
- (tANI_S8) ((wiphy->bands[i]->channels[j].max_power));
+ /* there are 14 channel in hdd_channels_2_4_GHZ,
+ * there are 24/25 hdd_channels_5_GHZ,
+ * there are 2 channel in hdd_etsi_srd_chan
+ * the last element of wiphy->bands[i]->channels[j]
+ * is channel 173, and the index is 39/40.*/
+ if((!pHddCtx->cfg_ini->dot11p_mode) && (k > RF_CHAN_169)) {
+ pnvEFSTable->halnv.tables.regDomains[temp_reg_domain].
+ channels[RF_CHAN_173].enabled = NV_CHANNEL_ENABLE;
+ pnvEFSTable->halnv.tables.regDomains[temp_reg_domain].
+ channels[RF_CHAN_173].pwrLimit =
+ (tANI_S8) ((wiphy->bands[i]->channels[j].max_power));
+ } else {
+ /* Enable is only last flag we support */
+ pnvEFSTable->halnv.tables.regDomains[temp_reg_domain].
+ channels[k].enabled = NV_CHANNEL_ENABLE;
+
+ /* max_power is in dBm */
+ pnvEFSTable->halnv.tables.regDomains[temp_reg_domain].
+ channels[k].pwrLimit =
+ (tANI_S8) ((wiphy->bands[i]->channels[j].max_power));
+ }
/* Disable the center channel if neither HT40+ nor HT40- is allowed
*/
diff --git a/CORE/VOSS/src/vos_packet.c b/CORE/VOSS/src/vos_packet.c
index db8e10dc3977..f2fed19b59f6 100644
--- a/CORE/VOSS/src/vos_packet.c
+++ b/CORE/VOSS/src/vos_packet.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2014, 2016 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2014, 2016, 2018 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -75,7 +75,7 @@ typedef struct
vos_pkt_proto_trace_t *trace_buffer = NULL;
unsigned int trace_buffer_order = 0;
unsigned int trace_dump_order = 0;
-spinlock_t trace_buffer_lock;
+adf_os_spinlock_t trace_buffer_lock;
#endif /* QCA_PKT_PROTO_TRACE */
/**
@@ -342,11 +342,11 @@ void vos_pkt_trace_buf_update
return;
}
- spin_lock_bh(&trace_buffer_lock);
+ adf_os_spin_lock_bh(&trace_buffer_lock);
slot = trace_buffer_order % VOS_PKT_TRAC_MAX_TRACE_BUF;
trace_buffer[slot].order = trace_buffer_order;
trace_buffer_order++;
- spin_unlock_bh(&trace_buffer_lock);
+ adf_os_spin_unlock_bh(&trace_buffer_lock);
do_gettimeofday(&tv);
trace_buffer[slot].event_sec_time = tv.tv_sec;
trace_buffer[slot].event_msec_time = tv.tv_usec;
@@ -436,7 +436,7 @@ void vos_pkt_proto_trace_init
)
{
/* Init spin lock to protect global memory */
- spin_lock_init(&trace_buffer_lock);
+ adf_os_spinlock_init(&trace_buffer_lock);
trace_buffer_order = 0;
trace_buffer = vos_mem_malloc(
VOS_PKT_TRAC_MAX_TRACE_BUF * sizeof(vos_pkt_proto_trace_t));
@@ -462,10 +462,10 @@ void vos_pkt_proto_trace_close
{
VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
"%s %d", __func__, __LINE__);
- spin_lock_bh(&trace_buffer_lock);
+ adf_os_spin_lock_bh(&trace_buffer_lock);
vos_mem_free(trace_buffer);
trace_buffer = NULL;
- spin_unlock_bh(&trace_buffer_lock);
+ adf_os_spin_unlock_bh(&trace_buffer_lock);
return;
}
diff --git a/CORE/VOSS/src/vos_sched.c b/CORE/VOSS/src/vos_sched.c
index a190ed3f3833..dc89f52626b4 100644
--- a/CORE/VOSS/src/vos_sched.c
+++ b/CORE/VOSS/src/vos_sched.c
@@ -88,7 +88,7 @@ struct ssr_protect {
uint32_t pid;
};
-static spinlock_t ssr_protect_lock;
+static adf_os_spinlock_t ssr_protect_lock;
static struct ssr_protect ssr_protect_log[MAX_SSR_PROTECT_LOG];
/*---------------------------------------------------------------------------
@@ -535,9 +535,9 @@ vos_sched_open
init_completion(&pSchedContext->McShutdown);
init_completion(&pSchedContext->ResumeMcEvent);
- spin_lock_init(&pSchedContext->McThreadLock);
+ adf_os_spinlock_init(&pSchedContext->McThreadLock);
#ifdef QCA_CONFIG_SMP
- spin_lock_init(&pSchedContext->TlshimRxThreadLock);
+ adf_os_spinlock_init(&pSchedContext->TlshimRxThreadLock);
#endif
init_waitqueue_head(&pSchedContext->mcWaitQueue);
@@ -550,17 +550,17 @@ vos_sched_open
init_completion(&pSchedContext->ResumeTlshimRxEvent);
init_completion(&pSchedContext->TlshimRxShutdown);
pSchedContext->tlshimRxEvtFlg = 0;
- spin_lock_init(&pSchedContext->TlshimRxQLock);
- spin_lock_init(&pSchedContext->VosTlshimPktFreeQLock);
+ adf_os_spinlock_init(&pSchedContext->TlshimRxQLock);
+ adf_os_spinlock_init(&pSchedContext->VosTlshimPktFreeQLock);
INIT_LIST_HEAD(&pSchedContext->tlshimRxQueue);
- spin_lock_bh(&pSchedContext->VosTlshimPktFreeQLock);
+ adf_os_spin_lock_bh(&pSchedContext->VosTlshimPktFreeQLock);
INIT_LIST_HEAD(&pSchedContext->VosTlshimPktFreeQ);
if (vos_alloc_tlshim_pkt_freeq(pSchedContext) != VOS_STATUS_SUCCESS)
{
- spin_unlock_bh(&pSchedContext->VosTlshimPktFreeQLock);
+ adf_os_spin_unlock_bh(&pSchedContext->VosTlshimPktFreeQLock);
return VOS_STATUS_E_FAILURE;
}
- spin_unlock_bh(&pSchedContext->VosTlshimPktFreeQLock);
+ adf_os_spin_unlock_bh(&pSchedContext->VosTlshimPktFreeQLock);
#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0))
register_hotcpu_notifier(&vos_cpu_hotplug_notifier);
pSchedContext->cpuHotPlugNotifier = &vos_cpu_hotplug_notifier;
@@ -691,8 +691,8 @@ VOS_STATUS vos_watchdog_open
pWdContext->wdEventFlag = 0;
// Initialize the lock
- spin_lock_init(&pWdContext->wdLock);
- spin_lock_init(&pWdContext->thread_stuck_lock);
+ adf_os_spinlock_init(&pWdContext->wdLock);
+ adf_os_spinlock_init(&pWdContext->thread_stuck_lock);
//Create the Watchdog thread
pWdContext->WdThread = kthread_create(VosWDThread, pWdContext,"VosWDThread");
@@ -955,13 +955,13 @@ VosMCThread
if(test_bit(MC_SUSPEND_EVENT, &pSchedContext->mcEventFlag))
{
clear_bit(MC_SUSPEND_EVENT, &pSchedContext->mcEventFlag);
- spin_lock(&pSchedContext->McThreadLock);
+ adf_os_spin_lock(&pSchedContext->McThreadLock);
INIT_COMPLETION(pSchedContext->ResumeMcEvent);
/* Mc Thread Suspended */
complete(&pHddCtx->mc_sus_event_var);
- spin_unlock(&pSchedContext->McThreadLock);
+ adf_os_spin_unlock(&pSchedContext->McThreadLock);
/* Wait foe Resume Indication */
wait_for_completion_interruptible(&pSchedContext->ResumeMcEvent);
@@ -998,14 +998,11 @@ v_BOOL_t isWDresetInProgress(void)
*/
static void vos_wd_detect_thread_stuck(void)
{
- unsigned long flags;
-
- spin_lock_irqsave(&gpVosWatchdogContext->thread_stuck_lock, flags);
+ adf_os_spin_lock_irqsave(&gpVosWatchdogContext->thread_stuck_lock);
if (gpVosWatchdogContext->mc_thread_stuck_count ==
THREAD_STUCK_THRESHOLD) {
- spin_unlock_irqrestore(&gpVosWatchdogContext->thread_stuck_lock,
- flags);
+ adf_os_spin_unlock_irqrestore(&gpVosWatchdogContext->thread_stuck_lock);
hddLog(LOGE, FL("MC Thread Stuck!!!"));
vos_dump_stack(gpVosSchedContext->McThread);
@@ -1013,8 +1010,7 @@ static void vos_wd_detect_thread_stuck(void)
WLAN_LOG_INDICATOR_HOST_ONLY,
WLAN_LOG_REASON_THREAD_STUCK,
DUMP_VOS_TRACE);
- spin_lock_irqsave(&gpVosWatchdogContext->thread_stuck_lock,
- flags);
+ adf_os_spin_lock_irqsave(&gpVosWatchdogContext->thread_stuck_lock);
}
/* Increment the thread stuck count for all threads */
@@ -1022,12 +1018,10 @@ static void vos_wd_detect_thread_stuck(void)
if (gpVosWatchdogContext->mc_thread_stuck_count <=
THREAD_STUCK_THRESHOLD) {
- spin_unlock_irqrestore(&gpVosWatchdogContext->thread_stuck_lock,
- flags);
+ adf_os_spin_unlock_irqrestore(&gpVosWatchdogContext->thread_stuck_lock);
vos_probe_threads();
} else
- spin_unlock_irqrestore(&gpVosWatchdogContext->thread_stuck_lock,
- flags);
+ adf_os_spin_unlock_irqrestore(&gpVosWatchdogContext->thread_stuck_lock);
/* Restart the timer */
if (VOS_STATUS_SUCCESS !=
@@ -1094,13 +1088,11 @@ void vos_thread_stuck_timer_init(pVosWatchdogContext wd_ctx)
*/
void vos_wd_reset_thread_stuck_count(int thread_id)
{
- unsigned long flags;
-
- spin_lock_irqsave(&gpVosWatchdogContext->thread_stuck_lock, flags);
+ adf_os_spin_lock_irqsave(&gpVosWatchdogContext->thread_stuck_lock);
if (vos_sched_is_mc_thread(thread_id))
gpVosWatchdogContext->mc_thread_stuck_count = 0;
- spin_unlock_irqrestore(&gpVosWatchdogContext->thread_stuck_lock, flags);
+ adf_os_spin_unlock_irqrestore(&gpVosWatchdogContext->thread_stuck_lock);
}
/*---------------------------------------------------------------------------
@@ -1296,16 +1288,16 @@ void vos_free_tlshim_pkt_freeq(pVosSchedContext pSchedContext)
{
struct VosTlshimPkt *pkt;
- spin_lock_bh(&pSchedContext->VosTlshimPktFreeQLock);
+ adf_os_spin_lock_bh(&pSchedContext->VosTlshimPktFreeQLock);
while (!list_empty(&pSchedContext->VosTlshimPktFreeQ)) {
pkt = list_entry((&pSchedContext->VosTlshimPktFreeQ)->next,
typeof(*pkt), list);
list_del(&pkt->list);
- spin_unlock_bh(&pSchedContext->VosTlshimPktFreeQLock);
+ adf_os_spin_unlock_bh(&pSchedContext->VosTlshimPktFreeQLock);
vos_mem_free(pkt);
- spin_lock_bh(&pSchedContext->VosTlshimPktFreeQLock);
+ adf_os_spin_lock_bh(&pSchedContext->VosTlshimPktFreeQLock);
}
- spin_unlock_bh(&pSchedContext->VosTlshimPktFreeQLock);
+ adf_os_spin_unlock_bh(&pSchedContext->VosTlshimPktFreeQLock);
}
@@ -1360,9 +1352,9 @@ void vos_free_tlshim_pkt(pVosSchedContext pSchedContext,
struct VosTlshimPkt *pkt)
{
memset(pkt, 0, sizeof(*pkt));
- spin_lock_bh(&pSchedContext->VosTlshimPktFreeQLock);
+ adf_os_spin_lock_bh(&pSchedContext->VosTlshimPktFreeQLock);
list_add_tail(&pkt->list, &pSchedContext->VosTlshimPktFreeQ);
- spin_unlock_bh(&pSchedContext->VosTlshimPktFreeQLock);
+ adf_os_spin_unlock_bh(&pSchedContext->VosTlshimPktFreeQLock);
}
/*---------------------------------------------------------------------------
@@ -1378,15 +1370,15 @@ struct VosTlshimPkt *vos_alloc_tlshim_pkt(pVosSchedContext pSchedContext)
{
struct VosTlshimPkt *pkt;
- spin_lock_bh(&pSchedContext->VosTlshimPktFreeQLock);
+ adf_os_spin_lock_bh(&pSchedContext->VosTlshimPktFreeQLock);
if (list_empty(&pSchedContext->VosTlshimPktFreeQ)) {
- spin_unlock_bh(&pSchedContext->VosTlshimPktFreeQLock);
+ adf_os_spin_unlock_bh(&pSchedContext->VosTlshimPktFreeQLock);
return NULL;
}
pkt = list_first_entry(&pSchedContext->VosTlshimPktFreeQ,
struct VosTlshimPkt, list);
list_del(&pkt->list);
- spin_unlock_bh(&pSchedContext->VosTlshimPktFreeQLock);
+ adf_os_spin_unlock_bh(&pSchedContext->VosTlshimPktFreeQLock);
return pkt;
}
@@ -1403,9 +1395,9 @@ struct VosTlshimPkt *vos_alloc_tlshim_pkt(pVosSchedContext pSchedContext)
void vos_indicate_rxpkt(pVosSchedContext pSchedContext,
struct VosTlshimPkt *pkt)
{
- spin_lock_bh(&pSchedContext->TlshimRxQLock);
+ adf_os_spin_lock_bh(&pSchedContext->TlshimRxQLock);
list_add_tail(&pkt->list, &pSchedContext->tlshimRxQueue);
- spin_unlock_bh(&pSchedContext->TlshimRxQLock);
+ adf_os_spin_unlock_bh(&pSchedContext->TlshimRxQLock);
set_bit(RX_POST_EVENT, &pSchedContext->tlshimRxEvtFlg);
wake_up_interruptible(&pSchedContext->tlshimRxWaitQueue);
}
@@ -1427,16 +1419,16 @@ void vos_drop_rxpkt_by_staid(pVosSchedContext pSchedContext, u_int16_t staId)
adf_nbuf_t buf, next_buf;
INIT_LIST_HEAD(&local_list);
- spin_lock_bh(&pSchedContext->TlshimRxQLock);
+ adf_os_spin_lock_bh(&pSchedContext->TlshimRxQLock);
if (list_empty(&pSchedContext->tlshimRxQueue)) {
- spin_unlock_bh(&pSchedContext->TlshimRxQLock);
+ adf_os_spin_unlock_bh(&pSchedContext->TlshimRxQLock);
return;
}
list_for_each_entry_safe(pkt, tmp, &pSchedContext->tlshimRxQueue, list) {
if (pkt->staId == staId || staId == WLAN_MAX_STA_COUNT)
list_move_tail(&pkt->list, &local_list);
}
- spin_unlock_bh(&pSchedContext->TlshimRxQLock);
+ adf_os_spin_unlock_bh(&pSchedContext->TlshimRxQLock);
list_for_each_entry_safe(pkt, tmp, &local_list, list) {
list_del(&pkt->list);
@@ -1464,18 +1456,18 @@ static void vos_rx_from_queue(pVosSchedContext pSchedContext)
struct VosTlshimPkt *pkt;
u_int16_t sta_id;
- spin_lock_bh(&pSchedContext->TlshimRxQLock);
+ adf_os_spin_lock_bh(&pSchedContext->TlshimRxQLock);
while (!list_empty(&pSchedContext->tlshimRxQueue)) {
pkt = list_first_entry(&pSchedContext->tlshimRxQueue,
struct VosTlshimPkt, list);
list_del(&pkt->list);
- spin_unlock_bh(&pSchedContext->TlshimRxQLock);
+ adf_os_spin_unlock_bh(&pSchedContext->TlshimRxQLock);
sta_id = pkt->staId;
pkt->callback(pkt->context, pkt->Rxpkt, sta_id);
vos_free_tlshim_pkt(pSchedContext, pkt);
- spin_lock_bh(&pSchedContext->TlshimRxQLock);
+ adf_os_spin_lock_bh(&pSchedContext->TlshimRxQLock);
}
- spin_unlock_bh(&pSchedContext->TlshimRxQLock);
+ adf_os_spin_unlock_bh(&pSchedContext->TlshimRxQLock);
}
/*---------------------------------------------------------------------------
@@ -1549,10 +1541,10 @@ static int VosTlshimRxThread(void *arg)
&pSchedContext->tlshimRxEvtFlg)) {
clear_bit(RX_SUSPEND_EVENT,
&pSchedContext->tlshimRxEvtFlg);
- spin_lock(&pSchedContext->TlshimRxThreadLock);
+ adf_os_spin_lock(&pSchedContext->TlshimRxThreadLock);
INIT_COMPLETION(pSchedContext->ResumeTlshimRxEvent);
complete(&pSchedContext->SuspndTlshimRxEvent);
- spin_unlock(&pSchedContext->TlshimRxThreadLock);
+ adf_os_spin_unlock(&pSchedContext->TlshimRxThreadLock);
wait_for_completion_interruptible(
&pSchedContext->ResumeTlshimRxEvent);
}
@@ -1930,7 +1922,7 @@ VOS_STATUS vos_watchdog_wlan_shutdown(void)
}
/* Take the lock here */
- spin_lock(&gpVosWatchdogContext->wdLock);
+ adf_os_spin_lock(&gpVosWatchdogContext->wdLock);
/* reuse the existing 'reset in progress' */
if (gpVosWatchdogContext->resetInProgress)
@@ -1939,7 +1931,7 @@ VOS_STATUS vos_watchdog_wlan_shutdown(void)
"%s: Shutdown already in Progress. Ignoring signaling Watchdog",
__func__);
/* Release the lock here */
- spin_unlock(&gpVosWatchdogContext->wdLock);
+ adf_os_spin_unlock(&gpVosWatchdogContext->wdLock);
return VOS_STATUS_E_FAILURE;
}
/* reuse the existing 'logp in progress', eventhough it is not
@@ -1950,7 +1942,7 @@ VOS_STATUS vos_watchdog_wlan_shutdown(void)
"%s: shutdown/re-init already in Progress. Ignoring signaling Watchdog",
__func__);
/* Release the lock here */
- spin_unlock(&gpVosWatchdogContext->wdLock);
+ adf_os_spin_unlock(&gpVosWatchdogContext->wdLock);
return VOS_STATUS_E_FAILURE;
}
@@ -1960,7 +1952,7 @@ VOS_STATUS vos_watchdog_wlan_shutdown(void)
pHddCtx->isLogpInProgress = TRUE;
/* Release the lock here */
- spin_unlock(&gpVosWatchdogContext->wdLock);
+ adf_os_spin_unlock(&gpVosWatchdogContext->wdLock);
if ((pHddCtx->isLoadInProgress) ||
(pHddCtx->isUnloadInProgress))
@@ -2028,7 +2020,7 @@ void vos_ssr_protect_init(void)
{
int i = 0;
- spin_lock_init(&ssr_protect_lock);
+ adf_os_spinlock_init(&ssr_protect_lock);
while (i < MAX_SSR_PROTECT_LOG) {
ssr_protect_log[i].func = NULL;
@@ -2048,9 +2040,8 @@ void vos_ssr_protect_init(void)
static void vos_print_external_threads(void)
{
int i = 0;
- unsigned long irq_flags;
- spin_lock_irqsave(&ssr_protect_lock, irq_flags);
+ adf_os_spin_lock_irqsave(&ssr_protect_lock);
while (i < MAX_SSR_PROTECT_LOG) {
if (!ssr_protect_log[i].free) {
@@ -2061,7 +2052,7 @@ static void vos_print_external_threads(void)
i++;
}
- spin_unlock_irqrestore(&ssr_protect_lock, irq_flags);
+ adf_os_spin_unlock_irqrestore(&ssr_protect_lock);
}
@@ -2146,11 +2137,10 @@ void vos_ssr_protect(const char *caller_func)
int count;
int i = 0;
bool status = false;
- unsigned long irq_flags;
count = atomic_inc_return(&ssr_protect_entry_count);
- spin_lock_irqsave(&ssr_protect_lock, irq_flags);
+ adf_os_spin_lock_irqsave(&ssr_protect_lock);
while (i < MAX_SSR_PROTECT_LOG) {
if (ssr_protect_log[i].free) {
@@ -2163,7 +2153,7 @@ void vos_ssr_protect(const char *caller_func)
i++;
}
- spin_unlock_irqrestore(&ssr_protect_lock, irq_flags);
+ adf_os_spin_unlock_irqrestore(&ssr_protect_lock);
if (!status)
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
@@ -2185,11 +2175,10 @@ void vos_ssr_unprotect(const char *caller_func)
int count;
int i = 0;
bool status = false;
- unsigned long irq_flags;
count = atomic_dec_return(&ssr_protect_entry_count);
- spin_lock_irqsave(&ssr_protect_lock, irq_flags);
+ adf_os_spin_lock_irqsave(&ssr_protect_lock);
while (i < MAX_SSR_PROTECT_LOG) {
if (!ssr_protect_log[i].free) {
@@ -2205,7 +2194,7 @@ void vos_ssr_unprotect(const char *caller_func)
i++;
}
- spin_unlock_irqrestore(&ssr_protect_lock, irq_flags);
+ adf_os_spin_unlock_irqrestore(&ssr_protect_lock);
if (!status)
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
diff --git a/CORE/VOSS/src/vos_sched.h b/CORE/VOSS/src/vos_sched.h
index 474bf24b2595..c1139eb9eb94 100644
--- a/CORE/VOSS/src/vos_sched.h
+++ b/CORE/VOSS/src/vos_sched.h
@@ -72,6 +72,7 @@
#include <adf_os_types.h>
#include <vos_lock.h>
#include <vos_timer.h>
+#include <adf_os_lock.h>
#define TX_POST_EVENT 0x000
#define TX_SUSPEND_EVENT 0x001
@@ -119,7 +120,7 @@ typedef void (*vos_tlshim_cb) (void *context, void *rxpkt, u_int16_t staid);
typedef struct _VosMqType
{
/* Lock use to synchronize access to this message queue */
- spinlock_t mqLock;
+ adf_os_spinlock_t mqLock;
/* List of vOS Messages waiting on this queue */
struct list_head mqList;
@@ -196,9 +197,9 @@ typedef struct _VosSchedContext
struct completion ResumeMcEvent;
/* lock to make sure that McThread and TxThread Suspend/resume mechanism is in sync*/
- spinlock_t McThreadLock;
+ adf_os_spinlock_t McThreadLock;
#ifdef QCA_CONFIG_SMP
- spinlock_t TlshimRxThreadLock;
+ adf_os_spinlock_t TlshimRxThreadLock;
/* Tlshim Rx thread handle */
struct task_struct *TlshimRxThread;
@@ -224,13 +225,13 @@ typedef struct _VosSchedContext
struct list_head tlshimRxQueue;
/* Spinlock to synchronize between tasklet and thread */
- spinlock_t TlshimRxQLock;
+ adf_os_spinlock_t TlshimRxQLock;
/* Rx queue length */
unsigned int TlshimRxQlen;
/* Lock to synchronize free buffer queue access */
- spinlock_t VosTlshimPktFreeQLock;
+ adf_os_spinlock_t VosTlshimPktFreeQLock;
/* Free message queue for Tlshim Rx processing */
struct list_head VosTlshimPktFreeQ;
@@ -282,13 +283,13 @@ typedef struct _VosWatchdogContext
v_BOOL_t resetInProgress;
/* Lock for preventing multiple reset being triggered simultaneously */
- spinlock_t wdLock;
+ adf_os_spinlock_t wdLock;
/* Timer to detect thread stuck issue */
vos_timer_t thread_stuck_timer;
/* Count to determine thread stuck */
unsigned int mc_thread_stuck_count;
/* lock to synchronize access to the thread stuck counts */
- spinlock_t thread_stuck_lock;
+ adf_os_spinlock_t thread_stuck_lock;
} VosWatchdogContext, *pVosWatchdogContext;
@@ -416,7 +417,7 @@ typedef struct _VosContextType
struct vos_wdthread_timer_work wdthread_timer_work;
struct list_head wdthread_timer_work_list;
struct work_struct wdthread_work;
- spinlock_t wdthread_work_lock;
+ adf_os_spinlock_t wdthread_work_lock;
bool is_closed;
} VosContextType, *pVosContextType;
diff --git a/CORE/VOSS/src/vos_timer.c b/CORE/VOSS/src/vos_timer.c
index f17539abcb55..42654ce65dbd 100644
--- a/CORE/VOSS/src/vos_timer.c
+++ b/CORE/VOSS/src/vos_timer.c
@@ -117,7 +117,6 @@ static void vos_linux_timer_callback (unsigned long data)
vos_timer_t *timer = ( vos_timer_t *)data;
vos_msg_t msg;
VOS_STATUS vStatus;
- unsigned long flags;
vos_timer_callback_t callback=NULL;
v_PVOID_t userData=NULL;
@@ -136,7 +135,7 @@ static void vos_linux_timer_callback (unsigned long data)
}
threadId = timer->platformInfo.threadID;
- spin_lock_irqsave( &timer->platformInfo.spinlock,flags );
+ adf_os_spin_lock_irqsave( &timer->platformInfo.spinlock);
switch ( timer->state )
{
@@ -172,7 +171,7 @@ static void vos_linux_timer_callback (unsigned long data)
break;
}
- spin_unlock_irqrestore( &timer->platformInfo.spinlock,flags );
+ adf_os_spin_unlock_irqrestore( &timer->platformInfo.spinlock);
if ( VOS_STATUS_SUCCESS != vStatus )
{
@@ -209,10 +208,10 @@ static void vos_linux_timer_callback (unsigned long data)
}
wdthread_timer_work->callback = callback;
wdthread_timer_work->userdata = userData;
- spin_lock(&vos_global_context->wdthread_work_lock);
+ adf_os_spin_lock(&vos_global_context->wdthread_work_lock);
list_add(&wdthread_timer_work->node,
&vos_global_context->wdthread_timer_work_list);
- spin_unlock(&vos_global_context->wdthread_work_lock);
+ adf_os_spin_unlock(&vos_global_context->wdthread_work_lock);
schedule_work(&vos_global_context->wdthread_work);
return;
@@ -302,7 +301,6 @@ void vos_timer_manager_init()
static void vos_timer_clean()
{
v_SIZE_t listSize;
- unsigned long flags;
hdd_list_size(&vosTimerList, &listSize);
@@ -318,9 +316,9 @@ static void vos_timer_clean()
do
{
- spin_lock_irqsave(&vosTimerList.lock, flags);
+ adf_os_spin_lock_irqsave(&vosTimerList.lock);
vosStatus = hdd_list_remove_front(&vosTimerList, &pNode);
- spin_unlock_irqrestore(&vosTimerList.lock, flags);
+ adf_os_spin_unlock_irqrestore(&vosTimerList.lock);
if (VOS_STATUS_SUCCESS == vosStatus)
{
ptimerNode = (timer_node_t*)pNode;
@@ -405,7 +403,6 @@ VOS_STATUS vos_timer_init_debug( vos_timer_t *timer, VOS_TIMER_TYPE timerType,
char* fileName, v_U32_t lineNum )
{
VOS_STATUS vosStatus;
- unsigned long flags;
// Check for invalid pointer
if ((timer == NULL) || (callback == NULL))
{
@@ -431,9 +428,9 @@ VOS_STATUS vos_timer_init_debug( vos_timer_t *timer, VOS_TIMER_TYPE timerType,
timer->ptimerNode->lineNum = lineNum;
timer->ptimerNode->vosTimer = timer;
- spin_lock_irqsave(&vosTimerList.lock, flags);
+ adf_os_spin_lock_irqsave(&vosTimerList.lock);
vosStatus = hdd_list_insert_front(&vosTimerList, &timer->ptimerNode->pNode);
- spin_unlock_irqrestore(&vosTimerList.lock, flags);
+ adf_os_spin_unlock_irqrestore(&vosTimerList.lock);
if(VOS_STATUS_SUCCESS != vosStatus)
{
VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
@@ -442,7 +439,7 @@ VOS_STATUS vos_timer_init_debug( vos_timer_t *timer, VOS_TIMER_TYPE timerType,
// set the various members of the timer structure
// with arguments passed or with default values
- spin_lock_init(&timer->platformInfo.spinlock);
+ adf_os_spinlock_init(&timer->platformInfo.spinlock);
if (VOS_TIMER_TYPE_SW == timerType)
init_timer_deferrable(&(timer->platformInfo.Timer));
else
@@ -473,7 +470,7 @@ VOS_STATUS vos_timer_init( vos_timer_t *timer, VOS_TIMER_TYPE timerType,
// set the various members of the timer structure
// with arguments passed or with default values
- spin_lock_init(&timer->platformInfo.spinlock);
+ adf_os_spinlock_init(&timer->platformInfo.spinlock);
if (VOS_TIMER_TYPE_SW == timerType)
init_timer_deferrable(&(timer->platformInfo.Timer));
else
@@ -528,7 +525,6 @@ VOS_STATUS vos_timer_init( vos_timer_t *timer, VOS_TIMER_TYPE timerType,
VOS_STATUS vos_timer_destroy ( vos_timer_t *timer )
{
VOS_STATUS vStatus=VOS_STATUS_SUCCESS;
- unsigned long flags;
// Check for invalid pointer
if ( NULL == timer )
@@ -548,9 +544,9 @@ VOS_STATUS vos_timer_destroy ( vos_timer_t *timer )
return VOS_STATUS_E_INVAL;
}
- spin_lock_irqsave(&vosTimerList.lock, flags);
+ adf_os_spin_lock_irqsave(&vosTimerList.lock);
vStatus = hdd_list_remove_node(&vosTimerList, &timer->ptimerNode->pNode);
- spin_unlock_irqrestore(&vosTimerList.lock, flags);
+ adf_os_spin_unlock_irqrestore(&vosTimerList.lock);
if(vStatus != VOS_STATUS_SUCCESS)
{
VOS_ASSERT(0);
@@ -559,7 +555,7 @@ VOS_STATUS vos_timer_destroy ( vos_timer_t *timer )
vos_mem_free(timer->ptimerNode);
- spin_lock_irqsave( &timer->platformInfo.spinlock,flags );
+ adf_os_spin_lock_irqsave( &timer->platformInfo.spinlock);
switch ( timer->state )
{
@@ -586,11 +582,11 @@ VOS_STATUS vos_timer_destroy ( vos_timer_t *timer )
{
timer->platformInfo.cookie = LINUX_INVALID_TIMER_COOKIE;
timer->state = VOS_TIMER_STATE_UNUSED;
- spin_unlock_irqrestore( &timer->platformInfo.spinlock,flags );
+ adf_os_spin_unlock_irqrestore( &timer->platformInfo.spinlock);
return vStatus;
}
- spin_unlock_irqrestore( &timer->platformInfo.spinlock,flags );
+ adf_os_spin_unlock_irqrestore( &timer->platformInfo.spinlock);
VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
@@ -604,7 +600,6 @@ VOS_STATUS vos_timer_destroy ( vos_timer_t *timer )
VOS_STATUS vos_timer_destroy ( vos_timer_t *timer )
{
VOS_STATUS vStatus=VOS_STATUS_SUCCESS;
- unsigned long flags;
// Check for invalid pointer
if ( NULL == timer )
@@ -623,7 +618,7 @@ VOS_STATUS vos_timer_destroy ( vos_timer_t *timer )
VOS_ASSERT(0);
return VOS_STATUS_E_INVAL;
}
- spin_lock_irqsave( &timer->platformInfo.spinlock,flags );
+ adf_os_spin_lock_irqsave( &timer->platformInfo.spinlock);
switch ( timer->state )
{
@@ -650,11 +645,11 @@ VOS_STATUS vos_timer_destroy ( vos_timer_t *timer )
{
timer->platformInfo.cookie = LINUX_INVALID_TIMER_COOKIE;
timer->state = VOS_TIMER_STATE_UNUSED;
- spin_unlock_irqrestore( &timer->platformInfo.spinlock,flags );
+ adf_os_spin_unlock_irqrestore( &timer->platformInfo.spinlock);
return vStatus;
}
- spin_unlock_irqrestore( &timer->platformInfo.spinlock,flags );
+ adf_os_spin_unlock_irqrestore( &timer->platformInfo.spinlock);
VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
"%s: Cannot destroy timer in state = %d",__func__, timer->state);
@@ -694,7 +689,6 @@ VOS_STATUS vos_timer_destroy ( vos_timer_t *timer )
-------------------------------------------------------------------------*/
VOS_STATUS vos_timer_start( vos_timer_t *timer, v_U32_t expirationTime )
{
- unsigned long flags;
VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO_HIGH,
"Timer Addr inside voss_start : 0x%pK ", timer );
@@ -728,12 +722,12 @@ VOS_STATUS vos_timer_start( vos_timer_t *timer, v_U32_t expirationTime )
}
// make sure the remainer of the logic isn't interrupted
- spin_lock_irqsave( &timer->platformInfo.spinlock,flags );
+ adf_os_spin_lock_irqsave( &timer->platformInfo.spinlock);
// Ensure if the timer can be started
if ( VOS_TIMER_STATE_STOPPED != timer->state )
{
- spin_unlock_irqrestore( &timer->platformInfo.spinlock,flags );
+ adf_os_spin_unlock_irqrestore( &timer->platformInfo.spinlock);
VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO_HIGH,
"%s: Cannot start timer in state = %d ",__func__, timer->state);
return VOS_STATUS_E_ALREADY;
@@ -758,7 +752,7 @@ VOS_STATUS vos_timer_start( vos_timer_t *timer, v_U32_t expirationTime )
}
}
- spin_unlock_irqrestore( &timer->platformInfo.spinlock,flags );
+ adf_os_spin_unlock_irqrestore( &timer->platformInfo.spinlock);
return VOS_STATUS_SUCCESS;
}
@@ -786,8 +780,6 @@ VOS_STATUS vos_timer_start( vos_timer_t *timer, v_U32_t expirationTime )
------------------------------------------------------------------------*/
VOS_STATUS vos_timer_stop ( vos_timer_t *timer )
{
- unsigned long flags;
-
VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO_HIGH,
"%s: Timer Addr inside voss_stop : 0x%pK",__func__,timer );
@@ -810,11 +802,11 @@ VOS_STATUS vos_timer_stop ( vos_timer_t *timer )
}
// Ensure the timer state is correct
- spin_lock_irqsave( &timer->platformInfo.spinlock,flags );
+ adf_os_spin_lock_irqsave( &timer->platformInfo.spinlock);
if ( VOS_TIMER_STATE_RUNNING != timer->state )
{
- spin_unlock_irqrestore( &timer->platformInfo.spinlock,flags );
+ adf_os_spin_unlock_irqrestore( &timer->platformInfo.spinlock);
VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO_HIGH,
"%s: Cannot stop timer in state = %d",
__func__, timer->state);
@@ -825,7 +817,7 @@ VOS_STATUS vos_timer_stop ( vos_timer_t *timer )
del_timer(&(timer->platformInfo.Timer));
- spin_unlock_irqrestore( &timer->platformInfo.spinlock,flags );
+ adf_os_spin_unlock_irqrestore( &timer->platformInfo.spinlock);
tryAllowingSleep( timer->type );
@@ -929,7 +921,7 @@ void vos_wdthread_init_timer_work(void *callbackptr)
return;
}
- spin_lock_init(&context->wdthread_work_lock);
+ adf_os_spinlock_init(&context->wdthread_work_lock);
INIT_LIST_HEAD(&context->wdthread_timer_work_list);
vos_init_work(&context->wdthread_work, callbackptr);
}
@@ -977,21 +969,21 @@ static void __vos_process_wd_timer(void)
vos_global_context = (pVosContextType)vos_context;
- spin_lock(&vos_global_context->wdthread_work_lock);
+ adf_os_spin_lock(&vos_global_context->wdthread_work_lock);
list_for_each_safe(pos, next,
&vos_global_context->wdthread_timer_work_list) {
wdthread_timer_work = list_entry(pos,
struct vos_wdthread_timer_work,
node);
list_del(pos);
- spin_unlock(&vos_global_context->wdthread_work_lock);
+ adf_os_spin_unlock(&vos_global_context->wdthread_work_lock);
if (NULL != wdthread_timer_work->callback)
wdthread_timer_work->callback(
wdthread_timer_work->userdata);
vos_mem_free(wdthread_timer_work);
- spin_lock(&vos_global_context->wdthread_work_lock);
+ adf_os_spin_lock(&vos_global_context->wdthread_work_lock);
}
- spin_unlock(&vos_global_context->wdthread_work_lock);
+ adf_os_spin_unlock(&vos_global_context->wdthread_work_lock);
return;
}
diff --git a/CORE/VOSS/src/vos_trace.c b/CORE/VOSS/src/vos_trace.c
index b25ef46a6d2f..fec44079a090 100644
--- a/CORE/VOSS/src/vos_trace.c
+++ b/CORE/VOSS/src/vos_trace.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2014, 2016-2017 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2014, 2016-2018 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -120,7 +120,7 @@ moduleTraceInfo gVosTraceInfo[ VOS_MODULE_ID_MAX ] =
/*-------------------------------------------------------------------------
Static and Global variables
------------------------------------------------------------------------*/
-static spinlock_t ltraceLock;
+static adf_os_spinlock_t ltraceLock;
static tvosTraceRecord gvosTraceTbl[MAX_VOS_TRACE_RECORDS];
// Global vosTraceData
@@ -498,7 +498,6 @@ void vos_register_debugcb_init(void)
void vos_trace(v_U8_t module, v_U8_t code, v_U16_t session, v_U32_t data)
{
tpvosTraceRecord rec = NULL;
- unsigned long flags;
char time[20];
if (!gvosTraceData.enable)
@@ -514,7 +513,7 @@ void vos_trace(v_U8_t module, v_U8_t code, v_U16_t session, v_U32_t data)
vos_get_time_of_the_day_in_hr_min_sec_usec(time, sizeof(time));
/* Aquire the lock so that only one thread at a time can fill the ring buffer */
- spin_lock_irqsave(&ltraceLock, flags);
+ adf_os_spin_lock_irqsave(&ltraceLock);
gvosTraceData.num++;
@@ -558,7 +557,7 @@ void vos_trace(v_U8_t module, v_U8_t code, v_U16_t session, v_U32_t data)
rec->module = module;
rec->pid = (in_interrupt() ? 0 : current->pid);
gvosTraceData.numSinceLastDump ++;
- spin_unlock_irqrestore(&ltraceLock, flags);
+ adf_os_spin_unlock_irqrestore(&ltraceLock);
}
@@ -570,7 +569,7 @@ void vos_trace(v_U8_t module, v_U8_t code, v_U16_t session, v_U32_t data)
----------------------------------------------------------------------------*/
VOS_STATUS vos_trace_spin_lock_init()
{
- spin_lock_init(&ltraceLock);
+ adf_os_spinlock_init(&ltraceLock);
return VOS_STATUS_SUCCESS;
}
@@ -628,7 +627,7 @@ void vosTraceDumpAll(void *pMac, v_U8_t code, v_U8_t session,
gvosTraceData.num, gvosTraceData.head, gvosTraceData.tail);
/* Aquire the lock so that only one thread at a time can read the ring buffer */
- spin_lock(&ltraceLock);
+ adf_os_spin_lock(&ltraceLock);
if (gvosTraceData.head != INVALID_VOS_TRACE_ADDR)
{
@@ -656,7 +655,7 @@ void vosTraceDumpAll(void *pMac, v_U8_t code, v_U8_t session,
we might re-visit and use this member to track how many latest
messages got added while we were dumping from ring buffer */
gvosTraceData.numSinceLastDump = 0;
- spin_unlock(&ltraceLock);
+ adf_os_spin_unlock(&ltraceLock);
for (;;)
{
if ((code == 0 || (code == pRecord.code)) &&
@@ -681,7 +680,7 @@ void vosTraceDumpAll(void *pMac, v_U8_t code, v_U8_t session,
}
i += 1;
- spin_lock(&ltraceLock);
+ adf_os_spin_lock(&ltraceLock);
if (MAX_VOS_TRACE_RECORDS == i)
{
i = 0;
@@ -691,12 +690,12 @@ void vosTraceDumpAll(void *pMac, v_U8_t code, v_U8_t session,
{
pRecord = gvosTraceTbl[i];
}
- spin_unlock(&ltraceLock);
+ adf_os_spin_unlock(&ltraceLock);
}
}
else
{
- spin_unlock(&ltraceLock);
+ adf_os_spin_unlock(&ltraceLock);
}
}
diff --git a/CORE/WDA/inc/legacy/halMsgApi.h b/CORE/WDA/inc/legacy/halMsgApi.h
index d0da39367bd2..930ae2fedf9c 100644
--- a/CORE/WDA/inc/legacy/halMsgApi.h
+++ b/CORE/WDA/inc/legacy/halMsgApi.h
@@ -960,24 +960,6 @@ typedef struct
#endif
-//HAL MSG: SIR_HAL_UPDATE_CF_IND
-typedef struct
-{
-
- tANI_U8 bssIdx;
-
- /*
- * cfpCount indicates how many DTIMs (including the current frame) appear before the next CFP start.
- * A CFPCount of 0 indicates that the current DTIM marks the start of the CFP.
- */
- tANI_U8 cfpCount;
-
- /* cfpPeriod indicates the number of DTIM intervals between the start of CFPs. */
- tANI_U8 cfpPeriod;
-
-}tUpdateCFParams, *tpUpdateCFParams;
-
-
//HAL MSG: SIR_HAL_UPDATE_DTIM_IND
//This message not required, as Softmac is supposed to read these values from the beacon.
diff --git a/CORE/WDA/inc/wlan_qct_wda.h b/CORE/WDA/inc/wlan_qct_wda.h
index 6798d16263f8..b56d1acb71e8 100644
--- a/CORE/WDA/inc/wlan_qct_wda.h
+++ b/CORE/WDA/inc/wlan_qct_wda.h
@@ -638,7 +638,6 @@ tSirRetStatus uMacPostCtrlMsg(void* pSirGlobal, tSirMbMsg* pMb);
#define WDA_UPDATE_STARATEINFO_RSP SIR_HAL_UPDATE_STARATEINFO_RSP
#define WDA_UPDATE_BEACON_IND SIR_HAL_UPDATE_BEACON_IND
-#define WDA_UPDATE_CF_IND SIR_HAL_UPDATE_CF_IND
#define WDA_CHNL_SWITCH_REQ SIR_HAL_CHNL_SWITCH_REQ
#define WDA_ADD_TS_REQ SIR_HAL_ADD_TS_REQ
#define WDA_DEL_TS_REQ SIR_HAL_DEL_TS_REQ
diff --git a/Kbuild b/Kbuild
index 2d7da1cbc89a..e919a4d887a7 100644
--- a/Kbuild
+++ b/Kbuild
@@ -477,6 +477,11 @@ ifeq ($(CONFIG_QCOM_TDLS),y)
HDD_OBJS += $(HDD_SRC_DIR)/wlan_hdd_tdls.o
endif
+ifeq ($(CONFIG_NETWORK_PHY_TIMESTAMPING), y)
+CONFIG_WLAN_SYNC_TSF_PLUS := y
+CONFIG_WLAN_SYNC_TSF_PTP := y
+endif
+
ifeq ($(CONFIG_WLAN_SYNC_TSF_PLUS), y)
CONFIG_WLAN_SYNC_TSF := y
endif
@@ -1205,6 +1210,7 @@ endif
ifeq ($(CONFIG_SLUB_DEBUG_ON),y)
CDEFINES += -DTIMER_MANAGER
CDEFINES += -DMEMORY_DEBUG
+CDEFINES += -DNBUF_MAP_UNMAP_DEBUG
endif
ifeq ($(HAVE_CFG80211),1)
@@ -1617,6 +1623,10 @@ ifeq ($(CONFIG_WLAN_SYNC_TSF_PLUS), y)
CDEFINES += -DWLAN_FEATURE_TSF_PLUS
endif
+ifeq ($(CONFIG_WLAN_SYNC_TSF_PTP), y)
+CDEFINES += -DWLAN_FEATURE_TSF_PTP
+endif
+
# Enable target dump for non-qualcomm platform
ifeq ($(CONFIG_NON_QC_PLATFORM), y)
CDEFINES += -DCONFIG_NON_QC_PLATFORM
@@ -1688,7 +1698,6 @@ ifeq ($(CONFIG_WLAN_OFFLOAD_PACKETS),y)
CDEFINES += -DWLAN_FEATURE_OFFLOAD_PACKETS
endif
-
ifeq ($(CONFIG_WLAN_UDP_RESPONSE_OFFLOAD),y)
CDEFINES += -DWLAN_FEATURE_UDP_RESPONSE_OFFLOAD
endif