diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2017-03-27 23:34:55 -0700 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2017-03-27 23:34:55 -0700 |
| commit | 056b4e6debcae13538586ad58aac344655554cbf (patch) | |
| tree | c291f2e3a68e87e5228f5532d8d5db7d9a77d5c5 | |
| parent | 93287077c97ee3c5032d4f3defbbb520146de82c (diff) | |
| parent | 0bfd84bba4a5e0579112c9ef6833a01b5085db52 (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.h | 33 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_cfg80211.c | 78 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_softap_tx_rx.c | 13 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_tx_rx.c | 9 | ||||
| -rw-r--r-- | CORE/SERVICES/DFS/src/dfs_phyerr_tlv.c | 18 | ||||
| -rw-r--r-- | CORE/SME/src/csr/csrNeighborRoam.c | 20 | ||||
| -rw-r--r-- | CORE/UTILS/PKTLOG/linux_ac.c | 10 | ||||
| -rw-r--r-- | CORE/VOSS/src/vos_utils.c | 177 |
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) { |
