summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2017-03-27 23:34:55 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2017-03-27 23:34:55 -0700
commit056b4e6debcae13538586ad58aac344655554cbf (patch)
treec291f2e3a68e87e5228f5532d8d5db7d9a77d5c5
parent93287077c97ee3c5032d4f3defbbb520146de82c (diff)
parent0bfd84bba4a5e0579112c9ef6833a01b5085db52 (diff)
Merge "qcacld-2.0: Porting qcacld 2.0 to kernel v4.9.11" into wlan-cld2.driver.lnx.1.0-dev
-rw-r--r--CORE/HDD/inc/wlan_hdd_cfg80211.h33
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg80211.c78
-rw-r--r--CORE/HDD/src/wlan_hdd_softap_tx_rx.c13
-rw-r--r--CORE/HDD/src/wlan_hdd_tx_rx.c9
-rw-r--r--CORE/SERVICES/DFS/src/dfs_phyerr_tlv.c18
-rw-r--r--CORE/SME/src/csr/csrNeighborRoam.c20
-rw-r--r--CORE/UTILS/PKTLOG/linux_ac.c10
-rw-r--r--CORE/VOSS/src/vos_utils.c177
8 files changed, 340 insertions, 18 deletions
diff --git a/CORE/HDD/inc/wlan_hdd_cfg80211.h b/CORE/HDD/inc/wlan_hdd_cfg80211.h
index 0776c6d29a66..6d8cd10b1565 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg80211.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg80211.h
@@ -819,7 +819,9 @@ enum qca_wlan_vendor_attr_extscan_results
* number of blacklist bssid's that firmware can support.
*/
QCA_WLAN_VENDOR_ATTR_EXTSCAN_MAX_NUM_BLACKLISTED_BSSID,
-
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 7, 0))
+ QCA_WLAN_VENDOR_ATTR_EXTSCAN_PAD,
+#endif
/* keep last */
QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_AFTER_LAST,
QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_MAX =
@@ -1149,7 +1151,9 @@ enum qca_wlan_vendor_attr_ll_stats_results
QCA_WLAN_VENDOR_ATTR_LL_STATS_IFACE_PPDU_SUCC_CNT,
/* Unsigned 32bit value */
QCA_WLAN_VENDOR_ATTR_LL_STATS_IFACE_PPDU_FAIL_CNT,
-
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 7, 0))
+ QCA_WLAN_VENDOR_ATTR_LL_STATS_PAD,
+#endif
/* keep last */
QCA_WLAN_VENDOR_ATTR_LL_STATS_AFTER_LAST,
QCA_WLAN_VENDOR_ATTR_LL_STATS_MAX =
@@ -2207,6 +2211,9 @@ enum qca_wlan_vendor_attr_get_station_info {
QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_RX_STBC,
QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_CH_WIDTH,
QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_SGI_ENABLE,
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 7, 0))
+ QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_PAD,
+#endif
/* keep last */
QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_AFTER_LAST,
QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_MAX =
@@ -2488,6 +2495,28 @@ enum qca_wlan_vendor_attr_ll_stats_ext {
QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_LAST - 1,
};
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,7,0))
+/**
+ * enum ieee80211_band - supported frequency bands
+ *
+ * The bands are assigned this way because the supported
+ * bitrates differ in these bands.
+ *
+ * @IEEE80211_BAND_2GHZ: 2.4GHz ISM band
+ * @IEEE80211_BAND_5GHZ: around 5GHz band (4.9-5.7)
+ * @IEEE80211_BAND_60GHZ: around 60 GHz band (58.32 - 64.80 GHz)
+ * @IEEE80211_NUM_BANDS: number of defined bands
+ */
+enum ieee80211_band {
+ IEEE80211_BAND_2GHZ = NL80211_BAND_2GHZ,
+ IEEE80211_BAND_5GHZ = NL80211_BAND_5GHZ,
+ IEEE80211_BAND_60GHZ = NL80211_BAND_60GHZ,
+
+ /* keep last */
+ IEEE80211_NUM_BANDS
+};
+#endif
+
struct cfg80211_bss* wlan_hdd_cfg80211_update_bss_db( hdd_adapter_t *pAdapter,
tCsrRoamInfo *pRoamInfo
);
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index 1890ec5a0624..d2efd75c0841 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -5476,9 +5476,16 @@ static bool put_wifi_iface_stats(tpSirWifiIfaceStat pWifiIfaceStat,
nla_put_u32(vendor_event,
QCA_WLAN_VENDOR_ATTR_LL_STATS_IFACE_LEAKY_AP_GUARD_TIME,
pWifiIfaceStat->rx_leak_window) ||
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 7, 0))
+ nla_put_u64_64bit(vendor_event,
+ QCA_WLAN_VENDOR_ATTR_LL_STATS_IFACE_AVERAGE_TSF_OFFSET,
+ average_tsf_offset,
+ QCA_WLAN_VENDOR_ATTR_LL_STATS_PAD) ||
+#else
nla_put_u64(vendor_event,
QCA_WLAN_VENDOR_ATTR_LL_STATS_IFACE_AVERAGE_TSF_OFFSET,
average_tsf_offset) ||
+#endif
nla_put_u32(vendor_event,
QCA_WLAN_VENDOR_ATTR_LL_STATS_IFACE_RTS_SUCC_CNT,
pWifiIfaceStat->rts_succ_cnt) ||
@@ -12783,7 +12790,10 @@ static int wlan_hdd_cfg80211_sap_configuration_set(struct wiphy *wiphy,
QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_CH_WIDTH
#define REMOTE_SGI_ENABLE\
QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_SGI_ENABLE
-
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 7, 0))
+#define REMOTE_PAD\
+ QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_PAD
+#endif
/**
* hdd_get_peer_txrx_rate_cb() - get station's txrx rate callback
* @peer_info: pointer of peer information
@@ -13053,9 +13063,19 @@ static int hdd_get_station_remote(hdd_context_t *hdd_ctx,
if (nla_put_u32(skb, REMOTE_MAX_PHY_RATE, stainfo->max_phy_rate) ||
nla_put_u32(skb, REMOTE_TX_PACKETS, stainfo->tx_packets) ||
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 7, 0))
+ nla_put_u64_64bit(skb, REMOTE_TX_BYTES, stainfo->tx_bytes,
+ REMOTE_PAD) ||
+#else
nla_put_u64(skb, REMOTE_TX_BYTES, stainfo->tx_bytes) ||
+#endif
nla_put_u32(skb, REMOTE_RX_PACKETS, stainfo->rx_packets) ||
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 7, 0))
+ nla_put_u64_64bit(skb, REMOTE_RX_BYTES, stainfo->rx_bytes,
+ REMOTE_PAD) ||
+#else
nla_put_u64(skb, REMOTE_RX_BYTES, stainfo->rx_bytes) ||
+#endif
nla_put_u8(skb, REMOTE_WMM, stainfo->isQosEnabled) ||
nla_put_u8(skb, REMOTE_SUPPORTED_MODE, stainfo->mode)) {
hddLog(LOGE, FL("put fail"));
@@ -13233,7 +13253,9 @@ hdd_cfg80211_get_station_cmd(struct wiphy *wiphy,
#undef REMOTE_RX_STBC
#undef REMOTE_CH_WIDTH
#undef REMOTE_SGI_ENABLE
-
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 7, 0))
+#undef REMOTE_PAD
+#endif
static const struct
nla_policy qca_wlan_vendor_attr[QCA_WLAN_VENDOR_ATTR_MAX+1] = {
[QCA_WLAN_VENDOR_ATTR_ROAMING_POLICY] = {.type = NLA_U32},
@@ -20015,7 +20037,17 @@ static eHalStatus hdd_cfg80211_scan_done_callback(tHalHandle halHandle,
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0))
if (!iface_down)
#endif
+ {
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,8,0))
+ struct cfg80211_scan_info info = {
+ .aborted = aborted,
+ };
+
+ cfg80211_scan_done(req, &info);
+#else
cfg80211_scan_done(req, aborted);
+#endif
+ }
complete(&pScanInfo->abortscan_event_var);
@@ -20281,7 +20313,17 @@ static void wlan_hdd_cfg80211_scan_block_cb(struct work_struct *work)
hddLog(LOGE,
"%s:##In DFS Master mode. Scan aborted. Null result sent",
__func__);
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,8,0))
+ {
+ struct cfg80211_scan_info info = {
+ .aborted = true,
+ };
+
+ cfg80211_scan_done(request, &info);
+ }
+#else
cfg80211_scan_done(request, true);
+#endif
adapter->request = NULL;
}
}
@@ -28732,6 +28774,10 @@ wlan_hdd_cfg80211_extscan_get_capabilities_rsp(void *ctx,
QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_IE_LENGTH
#define PARAM_IE_DATA \
QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_IE_DATA
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 7, 0))
+#define PARAM_PAD \
+ QCA_WLAN_VENDOR_ATTR_EXTSCAN_PAD
+#endif
/** hdd_extscan_nl_fill_bss() - extscan nl fill bss
* @skb: socket buffer
@@ -28749,7 +28795,12 @@ static int hdd_extscan_nl_fill_bss(struct sk_buff *skb, tSirWifiScanResult *ap,
if (!nla_ap)
return -EINVAL;
- if (nla_put_u64(skb, PARAM_TIME_STAMP, ap->ts) ||
+ if (
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 7, 0))
+ nla_put_u64_64bit(skb, PARAM_TIME_STAMP, ap->ts, PARAM_PAD) ||
+#else
+ nla_put_u64(skb, PARAM_TIME_STAMP, ap->ts) ||
+#endif
nla_put(skb, PARAM_SSID, sizeof(ap->ssid), ap->ssid) ||
nla_put(skb, PARAM_BSSID, sizeof(ap->bssid), ap->bssid) ||
nla_put_u32(skb, PARAM_CHANNEL, ap->channel) ||
@@ -28788,7 +28839,9 @@ static int hdd_extscan_nl_fill_bss(struct sk_buff *skb, tSirWifiScanResult *ap,
#undef PARAM_CAPABILITY
#undef PARAM_IE_LENGTH
#undef PARAM_IE_DATA
-
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 7, 0))
+#undef PARAM_PAD
+#endif
/** wlan_hdd_cfg80211_extscan_cached_results_ind() - get cached results
* @ctx: hdd global context
@@ -29113,9 +29166,17 @@ wlan_hdd_cfg80211_extscan_hotlist_match_ind(void *ctx,
if (!ap)
goto fail;
- if (nla_put_u64(skb,
+ if (
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 7, 0))
+ nla_put_u64_64bit(skb,
+ QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_TIME_STAMP,
+ data->ap[i].ts,
+ QCA_WLAN_VENDOR_ATTR_EXTSCAN_PAD) ||
+#else
+ nla_put_u64(skb,
QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_TIME_STAMP,
data->ap[i].ts) ||
+#endif
nla_put(skb,
QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_SSID,
sizeof(data->ap[i].ssid),
@@ -29402,9 +29463,16 @@ wlan_hdd_cfg80211_extscan_full_scan_result_event(void *ctx,
if (nla_put_u32(skb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_REQUEST_ID,
pData->requestId) ||
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 7, 0))
+ nla_put_u64_64bit(skb,
+ QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_TIME_STAMP,
+ pData->ap.ts,
+ QCA_WLAN_VENDOR_ATTR_EXTSCAN_PAD) ||
+#else
nla_put_u64(skb,
QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_TIME_STAMP,
pData->ap.ts) ||
+#endif
nla_put(skb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_SSID,
sizeof(pData->ap.ssid),
pData->ap.ssid) ||
diff --git a/CORE/HDD/src/wlan_hdd_softap_tx_rx.c b/CORE/HDD/src/wlan_hdd_softap_tx_rx.c
index 2e86a870ebf4..71c6169c996e 100644
--- a/CORE/HDD/src/wlan_hdd_softap_tx_rx.c
+++ b/CORE/HDD/src/wlan_hdd_softap_tx_rx.c
@@ -469,8 +469,11 @@ drop_pkt:
is_update_ac_stats = TRUE;
goto drop_list;
}
-
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,7,0))
+ netif_trans_update(dev);
+#else
dev->trans_start = jiffies;
+#endif
return NETDEV_TX_OK;
drop_list:
@@ -522,11 +525,15 @@ static void __hdd_softap_tx_timeout(struct net_device *dev)
* case of disassociation it is ok to ignore this. But if associated, we have
* do possible recovery here.
*/
-
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,7,0))
+ VOS_TRACE(VOS_MODULE_ID_HDD_SAP_DATA, VOS_TRACE_LEVEL_ERROR,
+ "%s: Transmission timeout occurred jiffies %lu",
+ __func__, jiffies);
+#else
VOS_TRACE(VOS_MODULE_ID_HDD_SAP_DATA, VOS_TRACE_LEVEL_ERROR,
"%s: Transmission timeout occurred jiffies %lu trans_start %lu",
__func__, jiffies, dev->trans_start);
-
+#endif
for (i = 0; i < NUM_TX_QUEUES; i++) {
txq = netdev_get_tx_queue(dev, i);
VOS_TRACE(VOS_MODULE_ID_HDD_SAP_DATA,
diff --git a/CORE/HDD/src/wlan_hdd_tx_rx.c b/CORE/HDD/src/wlan_hdd_tx_rx.c
index 0107bb1f26b3..e421c0c7bd59 100644
--- a/CORE/HDD/src/wlan_hdd_tx_rx.c
+++ b/CORE/HDD/src/wlan_hdd_tx_rx.c
@@ -723,8 +723,11 @@ drop_pkt:
is_update_ac_stats = TRUE;
goto drop_list;
}
-
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,7,0))
+ netif_trans_update(dev);
+#else
dev->trans_start = jiffies;
+#endif
return NETDEV_TX_OK;
drop_list:
@@ -865,8 +868,12 @@ static void __hdd_tx_timeout(struct net_device *dev)
struct netdev_queue *txq;
int i = 0;
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,7,0))
+ hddLog(LOGE, FL("Transmission timeout occurred jiffies %lu"),jiffies);
+#else
hddLog(LOGE, FL("Transmission timeout occurred jiffies %lu trans_start %lu"),
jiffies, dev->trans_start);
+#endif
DPTRACE(adf_dp_trace(NULL, ADF_DP_TRACE_HDD_TX_TIMEOUT,
NULL, 0, ADF_TX));
/*
diff --git a/CORE/SERVICES/DFS/src/dfs_phyerr_tlv.c b/CORE/SERVICES/DFS/src/dfs_phyerr_tlv.c
index a637484dda71..a2e29b4e9aab 100644
--- a/CORE/SERVICES/DFS/src/dfs_phyerr_tlv.c
+++ b/CORE/SERVICES/DFS/src/dfs_phyerr_tlv.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2014 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2017 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -584,7 +584,19 @@ tlv_calc_event_freq_chirp(struct ath_dfs *dfs, struct rx_radar_status *rs,
total_bw = delta_peak * (bin_resolution / radar_fft_long_period) *
pulse_duration;
-
+#if(LINUX_VERSION_CODE >= KERNEL_VERSION(4,5,0))
+ DFS_DPRINTK(dfs, ATH_DEBUG_DFS_PHYERR | ATH_DEBUG_DFS_PHYERR_SUM,
+ "%s: delta_peak=%d, pulse_duration=%d, bin_resolution=%d.%dKHz, "
+ "radar_fft_long_period=%d, total_bw=%d.%dKHz",
+ __func__,
+ delta_peak,
+ pulse_duration,
+ bin_resolution / 1000,
+ bin_resolution % 1000,
+ radar_fft_long_period,
+ total_bw / 100,
+ abs(total_bw % 100));
+#else
DFS_DPRINTK(dfs, ATH_DEBUG_DFS_PHYERR | ATH_DEBUG_DFS_PHYERR_SUM,
"%s: delta_peak=%d, pulse_duration=%d, bin_resolution=%d.%dKHz, "
"radar_fft_long_period=%d, total_bw=%d.%ldKHz",
@@ -596,7 +608,7 @@ tlv_calc_event_freq_chirp(struct ath_dfs *dfs, struct rx_radar_status *rs,
radar_fft_long_period,
total_bw / 100,
abs(total_bw % 100));
-
+#endif
total_bw /= 100; /* back to KHz */
/* Grab the channel centre frequency in MHz */
diff --git a/CORE/SME/src/csr/csrNeighborRoam.c b/CORE/SME/src/csr/csrNeighborRoam.c
index a12129501e10..d21f67c213d9 100644
--- a/CORE/SME/src/csr/csrNeighborRoam.c
+++ b/CORE/SME/src/csr/csrNeighborRoam.c
@@ -2032,12 +2032,19 @@ csrNeighborRoamProcessScanResults(tpAniSirGlobal pMac,
pScanResultListSaved = pScanResultList;
while (NULL != (pScanResult = csrScanResultGetNext(pMac,
*pScanResultList))) {
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 5, 0))
+ VOS_TRACE (VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_DEBUG,
+ FL("Scan result: BSSID "MAC_ADDRESS_STR" (Rssi %d, Ch:%d)"),
+ MAC_ADDR_ARRAY(pScanResult->BssDescriptor.bssId),
+ abs(pScanResult->BssDescriptor.rssi),
+ pScanResult->BssDescriptor.channelId);
+#else
VOS_TRACE (VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_DEBUG,
FL("Scan result: BSSID "MAC_ADDRESS_STR" (Rssi %ld, Ch:%d)"),
MAC_ADDR_ARRAY(pScanResult->BssDescriptor.bssId),
abs(pScanResult->BssDescriptor.rssi),
pScanResult->BssDescriptor.channelId);
-
+#endif
if ((VOS_TRUE == vos_mem_compare(pScanResult->BssDescriptor.bssId,
pNeighborRoamInfo->currAPbssid, sizeof(tSirMacAddr))) ||
((eSME_ROAM_TRIGGER_SCAN == pNeighborRoamInfo->cfgRoamEn) &&
@@ -2293,6 +2300,16 @@ csrNeighborRoamProcessScanResults(tpAniSirGlobal pMac,
&& !csrRoamIsRoamOffloadScanEnabled(pMac)
#endif
) {
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 5, 0))
+ VOS_TRACE (VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO,
+ "%s: [INFOLOG] potential candidate to roam "
+ "immediately (diff=%d, expected=%d)",
+ __func__,
+ abs(abs(CurrAPRssi) -
+ abs(pScanResult->BssDescriptor.rssi)),
+ immediateRoamRssiDiff);
+ roamNow = eANI_BOOLEAN_TRUE;
+#else
VOS_TRACE (VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO,
"%s: [INFOLOG] potential candidate to roam "
"immediately (diff=%ld, expected=%d)",
@@ -2301,6 +2318,7 @@ csrNeighborRoamProcessScanResults(tpAniSirGlobal pMac,
abs(pScanResult->BssDescriptor.rssi)),
immediateRoamRssiDiff);
roamNow = eANI_BOOLEAN_TRUE;
+#endif
}
#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
/*
diff --git a/CORE/UTILS/PKTLOG/linux_ac.c b/CORE/UTILS/PKTLOG/linux_ac.c
index 70f5fc5cff7e..2fd0ed1e77f0 100644
--- a/CORE/UTILS/PKTLOG/linux_ac.c
+++ b/CORE/UTILS/PKTLOG/linux_ac.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2016 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2017 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -927,7 +927,11 @@ int pktlog_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
get_page(virt_to_page((void *)address));
vmf->page = virt_to_page((void *)address);
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,6,0)
+ return 0;
+#else
return VM_FAULT_MINOR;
+#endif
}
#else
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
@@ -959,8 +963,12 @@ struct page *pktlog_vmmap(struct vm_area_struct *vma, unsigned long addr,
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
if (type)
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,6,0)
+ *type = 0;
+#else
*type = VM_FAULT_MINOR;
#endif
+#endif
return virt_to_page((void *)vaddr);
}
diff --git a/CORE/VOSS/src/vos_utils.c b/CORE/VOSS/src/vos_utils.c
index d178b8b709e0..c46e31ac2443 100644
--- a/CORE/VOSS/src/vos_utils.c
+++ b/CORE/VOSS/src/vos_utils.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011-2016 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011-2017 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -62,7 +62,11 @@
#include <linux/err.h>
#include <linux/random.h>
+#if(LINUX_VERSION_CODE >= KERNEL_VERSION(4,8,0))
+#include <crypto/skcipher.h>
+#else
#include <linux/crypto.h>
+#endif
#include <linux/scatterlist.h>
#include <linux/completion.h>
#include <linux/ieee80211.h>
@@ -976,7 +980,7 @@ static void ecb_aes_complete(struct crypto_async_request *req, int err)
complete(&r->completion);
}
-
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,8,0))
/*--------------------------------------------------------------------------
\brief vos_encrypt_AES() - Generate AES Encrypted byte stream
@@ -1003,7 +1007,90 @@ static void ecb_aes_complete(struct crypto_async_request *req, int err)
( *** return value not considered yet )
--------------------------------------------------------------------------*/
+VOS_STATUS vos_encrypt_AES(v_U32_t cryptHandle, /* Handle */
+ v_U8_t *pPlainText, /* pointer to data stream */
+ v_U8_t *pCiphertext,
+ v_U8_t *pKey) /* pointer to authentication key */
+{
+ struct ecb_aes_result result;
+ struct crypto_skcipher *tfm;
+ struct skcipher_request *req;
+ int ret = 0;
+ char iv[IV_SIZE_AES_128];
+ struct scatterlist sg_in;
+ struct scatterlist sg_out;
+
+ init_completion(&result.completion);
+
+#if !defined(CONFIG_CNSS) && (defined(HIF_USB) || defined(HIF_SDIO))
+ tfm = crypto_alloc_skcipher( "cbc(aes)", 0, 0);
+#else
+ tfm = wcnss_wlan_crypto_alloc_ablkcipher( "cbc(aes)", 0, 0);
+#endif
+ if (IS_ERR(tfm)) {
+ VOS_TRACE(VOS_MODULE_ID_VOSS,VOS_TRACE_LEVEL_ERROR, "crypto_alloc_skcipher failed");
+ ret = PTR_ERR(tfm);
+ goto err_tfm;
+ }
+
+ req = skcipher_request_alloc(tfm, GFP_KERNEL);
+ if (!req) {
+ VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "Failed to allocate request for cbc(aes)");
+ ret = -ENOMEM;
+ goto err_req;
+ }
+
+ skcipher_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG,
+ ecb_aes_complete, &result);
+
+
+ crypto_skcipher_clear_flags(tfm, ~0);
+ ret = crypto_skcipher_setkey(tfm, pKey, AES_KEYSIZE_128);
+ if (ret) {
+ VOS_TRACE(VOS_MODULE_ID_VOSS,VOS_TRACE_LEVEL_ERROR, "crypto_skcipher_setkey failed");
+ goto err_setkey;
+ }
+
+ memset(iv, 0, IV_SIZE_AES_128);
+
+ sg_init_one(&sg_in, pPlainText, AES_BLOCK_SIZE);
+
+ sg_init_one(&sg_out, pCiphertext, AES_BLOCK_SIZE);
+
+ skcipher_request_set_crypt(req, &sg_in, &sg_out, AES_BLOCK_SIZE, iv);
+
+ ret = crypto_skcipher_encrypt(req);
+ if (ret == -EINPROGRESS || ret == -EBUSY) {
+ VOS_TRACE(VOS_MODULE_ID_VOSS,VOS_TRACE_LEVEL_ERROR, "crypto_skcipher_encrypt failed ret %d", ret);
+ wait_for_completion(&result.completion);
+ ret = result.err;
+ }
+
+
+// -------------------------------------
+err_setkey:
+#if !defined(CONFIG_CNSS) && (defined(HIF_USB) || defined(HIF_SDIO))
+ skcipher_request_free(req);
+#else
+ wcnss_wlan_ablkcipher_request_free(req);
+#endif
+err_req:
+#if !defined(CONFIG_CNSS) && (defined(HIF_USB) || defined(HIF_SDIO))
+ crypto_free_skcipher(tfm);
+#else
+ wcnss_wlan_crypto_free_ablkcipher(tfm);
+#endif
+err_tfm:
+ //return ret;
+ if (ret != 0) {
+ VOS_TRACE(VOS_MODULE_ID_VOSS,VOS_TRACE_LEVEL_ERROR,"%s() call failed", __func__);
+ return VOS_STATUS_E_FAULT;
+ }
+
+ return VOS_STATUS_SUCCESS;
+}
+#else //(LINUX_VERSION_CODE >= KERNEL_VERSION(4,8,0))
VOS_STATUS vos_encrypt_AES(v_U32_t cryptHandle, /* Handle */
v_U8_t *pPlainText, /* pointer to data stream */
v_U8_t *pCiphertext,
@@ -1083,7 +1170,9 @@ err_tfm:
return VOS_STATUS_SUCCESS;
}
+#endif //(LINUX_VERSION_CODE >= KERNEL_VERSION(4,8,0))
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,8,0))
/*--------------------------------------------------------------------------
\brief vos_decrypt_AES() - Decrypts an AES Encrypted byte stream
@@ -1110,7 +1199,90 @@ err_tfm:
( *** return value not considered yet )
--------------------------------------------------------------------------*/
+VOS_STATUS vos_decrypt_AES(v_U32_t cryptHandle, /* Handle */
+ v_U8_t *pText, /* pointer to data stream */
+ v_U8_t *pDecrypted,
+ v_U8_t *pKey) /* pointer to authentication key */
+{
+// VOS_STATUS uResult = VOS_STATUS_E_FAILURE;
+ struct ecb_aes_result result;
+ struct skcipher_request *req;
+ struct crypto_skcipher *tfm;
+ int ret = 0;
+ char iv[IV_SIZE_AES_128];
+ struct scatterlist sg_in;
+ struct scatterlist sg_out;
+
+ init_completion(&result.completion);
+
+#if !defined(CONFIG_CNSS) && (defined(HIF_USB) || defined(HIF_SDIO))
+ tfm = crypto_alloc_skcipher( "cbc(aes)", 0, 0);
+#else
+ tfm = wcnss_wlan_crypto_alloc_ablkcipher( "cbc(aes)", 0, 0);
+#endif
+ if (IS_ERR(tfm)) {
+ VOS_TRACE(VOS_MODULE_ID_VOSS,VOS_TRACE_LEVEL_ERROR, "crypto_alloc_skcipher failed");
+ ret = PTR_ERR(tfm);
+ goto err_tfm;
+ }
+
+ req = skcipher_request_alloc(tfm, GFP_KERNEL);
+ if (!req) {
+ VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, "Failed to allocate request for cbc(aes)");
+ ret = -ENOMEM;
+ goto err_req;
+ }
+
+ skcipher_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG,
+ ecb_aes_complete, &result);
+
+
+ crypto_skcipher_clear_flags(tfm, ~0);
+
+ ret = crypto_skcipher_setkey(tfm, pKey, AES_KEYSIZE_128);
+ if (ret) {
+ VOS_TRACE(VOS_MODULE_ID_VOSS,VOS_TRACE_LEVEL_ERROR, "crypto_cipher_setkey failed");
+ goto err_setkey;
+ }
+
+ memset(iv, 0, IV_SIZE_AES_128);
+
+ sg_init_one(&sg_in, pText, AES_BLOCK_SIZE);
+
+ sg_init_one(&sg_out, pDecrypted, AES_BLOCK_SIZE);
+
+ skcipher_request_set_crypt(req, &sg_in, &sg_out, AES_BLOCK_SIZE, iv);
+
+ ret = crypto_skcipher_decrypt(req);
+ skcipher_request_zero(req);
+ if (ret) {
+ VOS_TRACE(VOS_MODULE_ID_VOSS,VOS_TRACE_LEVEL_ERROR,"AES: failed to decrypt received packet");
+ }
+
+
+// -------------------------------------
+err_setkey:
+#if !defined(CONFIG_CNSS) && (defined(HIF_USB) || defined(HIF_SDIO))
+ skcipher_request_free(req);
+#else
+ wcnss_wlan_ablkcipher_request_free(req);
+#endif
+err_req:
+#if !defined(CONFIG_CNSS) && (defined(HIF_USB) || defined(HIF_SDIO))
+ crypto_free_skcipher(tfm);
+#else
+ wcnss_wlan_crypto_free_ablkcipher(tfm);
+#endif
+err_tfm:
+ //return ret;
+ if (ret != 0) {
+ VOS_TRACE(VOS_MODULE_ID_VOSS,VOS_TRACE_LEVEL_ERROR,"%s() call failed", __func__);
+ return VOS_STATUS_E_FAULT;
+ }
+ return VOS_STATUS_SUCCESS;
+}
+#else //LINUX_VERSION_CODE < KERNEL_VERSION(4,8,0)
VOS_STATUS vos_decrypt_AES(v_U32_t cryptHandle, /* Handle */
v_U8_t *pText, /* pointer to data stream */
v_U8_t *pDecrypted,
@@ -1191,6 +1363,7 @@ err_tfm:
return VOS_STATUS_SUCCESS;
}
+#endif //(LINUX_VERSION_CODE >= KERNEL_VERSION(4,8,0))
v_U32_t vos_chan_to_freq(v_U8_t chan)
{