diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2016-10-11 11:31:13 -0600 |
|---|---|---|
| committer | Linux Build Service Account <lnxbuild@localhost> | 2016-10-11 11:31:13 -0600 |
| commit | f62c9c5ddd1fe2f7525eb7ef6c217098bdf90bd0 (patch) | |
| tree | b86ff849662ffb8cad05de9a546e5e765475d453 | |
| parent | 2faa71f675656e1d93d790452d9d3d49e5044a73 (diff) | |
| parent | 6485e1a40755d0ce5f429dd68c14ce98829a99e2 (diff) | |
Promotion of wlan-cld3.driver.lnx.1.1-00105.
CRs Change ID Subject
--------------------------------------------------------------------------------------------------------------
1074146 I218c19c84b6c7f0f62a94b211201281939838438 qcacld-3.0: Fill regulatory info before wiphy init
1026420 Ibe24828690ace91338ade10fd00c49fc4acdbd81 qcacld-3.0: Consider ACS override params only if ACS is
688141 Ifaeb43ba3ef6e851e3e5e0462dfd28ebb4dc29b3 Release 5.1.0.29S
1062308 I75a66601c33b4e93fcac674415f38d5a8184c8f3 qcacld-3.0: Fix status code during disassociation
1073581 If114167f66d13a3660f9b92b72706bfc2e782b50 qcacld-3.0: Update BW for interface when moving to singl
688141 I7d4d89b51ab0e2e0b0b258c41fa14699cdfcb982 Release 5.1.0.29R
688141 Idb4a6f647a160cf9d76a98f1ff59a0542598eb08 Release 5.1.0.29O
1072651 I5d037f47729b612d6754e64f46b627998ec026f8 qcacld-3.0: Move a cds log to appropriate log level
1073739 I0aafea43631d0ab8d3a99d8e913392f6090cd124 qcacld-3.0: Remove obsolete hdd_conn_get_connected_bss_t
924814 I08dbcb3ce1895aa2108924d7a672e5d9be514e3d qcacld-3.0: Add support for 2.4G VHT Interop in SAP
1073739 I774d16df363d069eae1616807ce6f80da4800bb4 qcacld-3.0: Remove obsolete wlan_hdd_mib.h
688141 I290bcc4977b1c9267c4885750a1707386605be18 Release 5.1.0.29P
1073739 Ib8981750475bd27818a0c7e4e386396869d90e69 qcacld-3.0: Avoid eMib_dot11DesiredBssType in cfg80211
1073593 Ie5adea45b2dac099e797a1e25536cc959f3d5525 qcacld-3.0: In FTM mode, don't update config param, max
688141 I5a16e164585382540061d911a7afc90d62b06cbf Release 5.1.0.29M
932264 If76d8ef454633d9a02dd6057b5d6ca3e9e639ea4 qcacld-3.0: Add support for legacy off channel notificat
1070005 I5e4d97523cb7fd018767d5d2fda841f03b2406f6 qcacld-3.0: Update hw_mode_list as per WMI_SERVICE_READY
990161 Ia5811bf7cf7081989fde5c8cdcca84b42120b90c qcacld-3.0: Set Tx/Rx aggregation size
1035768 I3226438b908a96f1b1bd3c2968a0c20eef81a799 qcacld-3.0: Populate correct supported rates from hostap
688141 Icdfe0c05382e946e76f3e34bc7a5542aba5f4da8 Release 5.1.0.29K
937586 Iabe36591e6aae45cb837f0f434ccafd743f3b746 qcacld-3.0: Fix HDD logging API in wlan_hdd_assoc
964146 Idffd0979bd9bdefa1225d2ea6a24180d81000f48 qcacld-3.0: Avoid race condition when vdev is deleted
1073739 I66f85fb8275ae2885012ebf8710187b2b886dfb0 qcacld-3.0: Cleanup strange behavior in __iw_set_mode()
1073739 I0180eb70487dd664c1cb85eee9a4d53eb7cb14a9 qcacld-3.0: Cleanup strange behaviors in __iw_set_essid(
1073808 Ie2a3e41d446261cd32729b8eb8f12e23134a8828 qcacld-3.0: Do NULL check on adapter->dev in hdd_lro_flu
688141 I3faed7c8d2e5e2c6b331ea79a8ac3e988c542579 Release 5.1.0.29Q
1073739 Iabfc4642a500587abd1f10d4fbc3f9e88f627a83 qcacld-3.0: Remove obsolete connDot11DesiredBssType
955357 Ifbb102e440d7df20defa1a397964cb9b55082bf9 qcacld-3.0: Dump driver information
1072423 I8cc1e955fbaca631ee7fd76b0c907d1e68c836bf qcacld-3.0: Power offload unit test framework enhancemen
688141 Id70f535bab06f14d17eb8e774475010768a57481 Release 5.1.0.29L
688141 I593a4500492dfb1d713fe604cbb892b6a2b3af3a Release 5.1.0.29N
Change-Id: I70cbf51d7a49ac8025483dc99c11dbd83a06d71c
CRs-Fixed: 1073581, 1062308, 1026420, 924814, 937586, 990161, 1072651, 1073593, 688141, 955357, 1035768, 932264, 1072423, 964146, 1073808, 1073739, 1070005, 1074146
58 files changed, 2198 insertions, 1069 deletions
diff --git a/core/cds/src/cds_api.c b/core/cds/src/cds_api.c index bcc146f1e1d4..43a8ea336611 100644 --- a/core/cds/src/cds_api.c +++ b/core/cds/src/cds_api.c @@ -101,6 +101,7 @@ v_CONTEXT_t cds_init(void) #if defined(TRACE_RECORD) qdf_trace_init(); #endif + qdf_register_debugcb_init(); cds_ssr_protect_init(); @@ -323,7 +324,13 @@ QDF_STATUS cds_open(void) * and keeps correct limit in cds_cfg.max_station. So, make sure * config entry pHddCtx->config->maxNumberOfPeers has adjusted value */ - pHddCtx->config->maxNumberOfPeers = cds_cfg->max_station; + /* In FTM mode cds_cfg->max_stations will be zero. On updating same + * into hdd context config entry, leads to pe_open() to fail, if + * con_mode change happens from FTM mode to any other mode. + */ + if (DRIVER_TYPE_PRODUCTION == cds_cfg->driver_type) + pHddCtx->config->maxNumberOfPeers = cds_cfg->max_station; + HTCHandle = cds_get_context(QDF_MODULE_ID_HTC); if (!HTCHandle) { QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_FATAL, diff --git a/core/cds/src/cds_concurrency.c b/core/cds/src/cds_concurrency.c index 946dc819b45a..25155c2c18d5 100644 --- a/core/cds/src/cds_concurrency.c +++ b/core/cds/src/cds_concurrency.c @@ -4364,6 +4364,8 @@ QDF_STATUS cds_decr_connection_count(uint32_t vdev_id) conc_connection_list[next_conn_index].mac; conc_connection_list[conn_index].chan = conc_connection_list[next_conn_index].chan; + conc_connection_list[conn_index].bw = + conc_connection_list[next_conn_index].bw; conc_connection_list[conn_index].chain_mask = conc_connection_list[next_conn_index].chain_mask; conc_connection_list[conn_index].original_nss = @@ -4644,7 +4646,7 @@ QDF_STATUS cds_get_channel_list(enum cds_pcl_type pcl, if (CDS_NONE == pcl) { /* msg */ - cds_err("pcl is 0"); + cds_info("pcl is 0"); return QDF_STATUS_SUCCESS; } /* get the channel list for current domain */ diff --git a/core/hdd/inc/wlan_hdd_assoc.h b/core/hdd/inc/wlan_hdd_assoc.h index 549b68d5deef..f49cb125ed54 100644 --- a/core/hdd/inc/wlan_hdd_assoc.h +++ b/core/hdd/inc/wlan_hdd_assoc.h @@ -34,7 +34,6 @@ */ /* Include files */ -#include <wlan_hdd_mib.h> #include <sme_api.h> #include <wlan_defs.h> #include "ol_txrx_ctrl_api.h" @@ -149,10 +148,6 @@ struct hdd_conn_flag { /** * typedef connection_info_t - structure to store connection information * @connState: connection state of the NIC - * @connDot11DesiredBssType: BSS type of the current connection. - * Comes from the MIB at the time the connect request is issued - * in combination with the BssDescription from the - * associated entity * @bssId: BSSID * @SSID: SSID Info * @staId: Station ID @@ -182,7 +177,6 @@ struct hdd_conn_flag { */ typedef struct connection_info_s { eConnectionState connState; - eMib_dot11DesiredBssType connDot11DesiredBssType; struct qdf_mac_addr bssId; tCsrSSIDInfo SSID; uint8_t staId[MAX_PEERS]; @@ -261,17 +255,6 @@ QDF_STATUS hdd_sme_roam_callback(void *pContext, tCsrRoamInfo *pRoamInfo, eCsrRoamResult roamResult); /** - * hdd_conn_get_connected_bss_type() - get current bss type - * @pHddStaCtx: pointer to global HDD Station context - * @pConnectedBssType: pointer to connected bss type - * - * Return: false if any errors encountered, true otherwise - */ -bool -hdd_conn_get_connected_bss_type(hdd_station_ctx_t *pHddStaCtx, - eMib_dot11DesiredBssType *pConnectedBssType); - -/** * hdd_set_genie_to_csr() - set genie to csr * @pAdapter: pointer to adapter * @RSNAuthType: pointer to auth type diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h index 9cfeeb3cf36a..7bbc547e51c0 100644 --- a/core/hdd/inc/wlan_hdd_cfg.h +++ b/core/hdd/inc/wlan_hdd_cfg.h @@ -1974,6 +1974,16 @@ typedef enum { #define CFG_ENABLE_VHT_FOR_24GHZ_MAX (1) #define CFG_ENABLE_VHT_FOR_24GHZ_DEFAULT (0) +/* + * Parameter to control VHT support based on vendor ie in 2.4 GHz band + * This parameter will enable SAP to read VHT capability in vendor ie in Assoc + * Req and send VHT caps in Resp to establish connection in VHT Mode. + */ +#define CFG_ENABLE_VENDOR_VHT_FOR_24GHZ_NAME "gEnableVendorVhtFor24GHzBand" +#define CFG_ENABLE_VENDOR_VHT_FOR_24GHZ_MIN (0) +#define CFG_ENABLE_VENDOR_VHT_FOR_24GHZ_MAX (1) +#define CFG_ENABLE_VENDOR_VHT_FOR_24GHZ_DEFAULT (1) + #define CFG_MAX_MEDIUM_TIME "gMaxMediumTime" #define CFG_MAX_MEDIUM_TIME_STAMIN WNI_CFG_MAX_MEDIUM_TIME_STAMIN #define CFG_MAX_MEDIUM_TIME_STAMAX WNI_CFG_MAX_MEDIUM_TIME_STAMAX @@ -2823,6 +2833,24 @@ typedef enum { #define CFG_SELF_GEN_FRM_PWR_DEFAULT (0) /* + * gTxAggregationSize gives an option to configure Tx aggregation size + * in no of MPDUs. This can be useful in debugging throughput issues + */ +#define CFG_TX_AGGREGATION_SIZE "gTxAggregationSize" +#define CFG_TX_AGGREGATION_SIZE_MIN (0) +#define CFG_TX_AGGREGATION_SIZE_MAX (64) +#define CFG_TX_AGGREGATION_SIZE_DEFAULT (64) + +/* + * gRxAggregationSize gives an option to configure Rx aggregation size + * in no of MPDUs. This can be useful in debugging throughput issues + */ +#define CFG_RX_AGGREGATION_SIZE "gRxAggregationSize" +#define CFG_RX_AGGREGATION_SIZE_MIN (1) +#define CFG_RX_AGGREGATION_SIZE_MAX (64) +#define CFG_RX_AGGREGATION_SIZE_DEFAULT (64) + +/* * fine timing measurement capability information * * <----- fine_time_meas_cap (in bits) -----> @@ -2917,6 +2945,16 @@ enum dot11p_mode { #define CFG_EXTSCAN_ACTIVE_MIN_CHANNEL_TIME_DEFAULT (20) #endif +/* When gEnable_go_cts2self_for_sta is + * enabled then if a legacy client connects to P2P GO, + * Host will send a WMI VDEV command to FW to stop using NOA for P2P GO + * and start using CTS2SELF. + */ +#define CFG_ENABLE_GO_CTS2SELF_FOR_STA "gEnable_go_cts2self_for_sta" +#define CFG_ENABLE_GO_CTS2SELF_FOR_STA_DEFAULT (0) +#define CFG_ENABLE_GO_CTS2SELF_FOR_STA_MIN (0) +#define CFG_ENABLE_GO_CTS2SELF_FOR_STA_MAX (1) + #define CFG_CE_CLASSIFY_ENABLE_NAME "gCEClassifyEnable" #define CFG_CE_CLASSIFY_ENABLE_MIN (0) #define CFG_CE_CLASSIFY_ENABLE_MAX (1) @@ -3861,6 +3899,7 @@ struct hdd_config { bool enableSSR; uint32_t cfgMaxMediumTime; bool enableVhtFor24GHzBand; + bool enable_sap_vendor_vht; /* Flag indicating whether legacy fast roam during concurrency is enabled in cfg.ini or not */ bool bFastRoamInConIniFeatureEnabled; bool fEnableAdaptRxDrain; @@ -4152,6 +4191,9 @@ struct hdd_config { /* parameter for indicating sifs burst duration to fw */ uint8_t sifs_burst_duration; bool goptimize_chan_avoid_event; + bool enable_go_cts2self_for_sta; + uint32_t tx_aggregation_size; + uint32_t rx_aggregation_size; }; #define VAR_OFFSET(_Struct, _Var) (offsetof(_Struct, _Var)) diff --git a/core/hdd/inc/wlan_hdd_driver_ops.h b/core/hdd/inc/wlan_hdd_driver_ops.h index 3ea44449b55c..f919e8decf1c 100644 --- a/core/hdd/inc/wlan_hdd_driver_ops.h +++ b/core/hdd/inc/wlan_hdd_driver_ops.h @@ -38,7 +38,9 @@ int wlan_hdd_register_driver(void); void wlan_hdd_unregister_driver(void); int wlan_hdd_bus_suspend(pm_message_t state); +int wlan_hdd_bus_suspend_noirq(void); int wlan_hdd_bus_resume(void); +int wlan_hdd_bus_resume_noirq(void); void hdd_hif_close(void *hif_ctx); int hdd_hif_open(struct device *dev, void *bdev, const hif_bus_id *bid, enum qdf_bus_type bus_type, bool reinit); diff --git a/core/hdd/inc/wlan_hdd_includes.h b/core/hdd/inc/wlan_hdd_includes.h index cb2e63e85830..4eead672404f 100644 --- a/core/hdd/inc/wlan_hdd_includes.h +++ b/core/hdd/inc/wlan_hdd_includes.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014 The Linux Foundation. All rights reserved. + * Copyright (c) 2014, 2016 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -54,7 +54,6 @@ #include <cds_api.h> #include <sme_api.h> #include "wlan_hdd_assoc.h" -#include "wlan_hdd_mib.h" #include "wlan_hdd_wext.h" #include "wlan_hdd_main.h" #include "wlan_hdd_tx_rx.h" diff --git a/core/hdd/inc/wlan_hdd_main.h b/core/hdd/inc/wlan_hdd_main.h index 577f1f9d84e0..6f263d2b1b64 100644 --- a/core/hdd/inc/wlan_hdd_main.h +++ b/core/hdd/inc/wlan_hdd_main.h @@ -905,8 +905,6 @@ struct hdd_adapter_s { hdd_stats_t hdd_stats; /** linkspeed statistics */ tSirLinkSpeedInfo ls_stats; - /**Mib information*/ - sHddMib_t hdd_mib; uint8_t sessionId; @@ -1471,6 +1469,8 @@ struct hdd_context_s { bool memdump_in_progress; bool memdump_init_done; #endif /* WLAN_FEATURE_MEMDUMP */ + uint16_t driver_dump_size; + uint8_t *driver_dump_mem; bool connection_in_progress; qdf_spinlock_t connection_status_lock; diff --git a/core/hdd/inc/wlan_hdd_memdump.h b/core/hdd/inc/wlan_hdd_memdump.h index 529f4c772380..5e670fe72785 100644 --- a/core/hdd/inc/wlan_hdd_memdump.h +++ b/core/hdd/inc/wlan_hdd_memdump.h @@ -37,6 +37,10 @@ #include "wlan_hdd_main.h" +/* Assigned size of driver memory dump is 4096 bytes */ +#define DRIVER_MEM_DUMP_SIZE 4096 + + #ifdef WLAN_FEATURE_MEMDUMP /** * enum qca_wlan_vendor_attr_memory_dump - values for memory dump attributes @@ -72,6 +76,10 @@ int wlan_hdd_cfg80211_get_fw_mem_dump(struct wiphy *wiphy, struct wireless_dev *wdev, const void *data, int data_len); void wlan_hdd_cfg80211_fw_mem_dump_cb(void *ctx, struct fw_dump_rsp *dump_rsp); + +int hdd_driver_memdump_init(void); +void hdd_driver_memdump_deinit(void); + #else static inline int memdump_init(void) { @@ -95,6 +103,16 @@ static inline void wlan_hdd_cfg80211_fw_mem_dump_cb(void *ctx, *dump_rsp) { } + +static inline int hdd_driver_memdump_init(void) +{ + return -ENOTSUPP; +} + +static inline void hdd_driver_memdump_deinit(void) +{ +} + #endif #endif /* if !defined(WLAN_HDD_MEMDUMP_H)*/ diff --git a/core/hdd/inc/wlan_hdd_mib.h b/core/hdd/inc/wlan_hdd_mib.h deleted file mode 100644 index 6d9482d7708e..000000000000 --- a/core/hdd/inc/wlan_hdd_mib.h +++ /dev/null @@ -1,190 +0,0 @@ -/* - * Copyright (c) 2013-2016 The Linux Foundation. All rights reserved. - * - * Previously licensed under the ISC license by Qualcomm Atheros, Inc. - * - * - * Permission to use, copy, modify, and/or distribute this software for - * any purpose with or without fee is hereby granted, provided that the - * above copyright notice and this permission notice appear in all - * copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL - * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE - * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -/* - * This file was originally distributed by Qualcomm Atheros, Inc. - * under proprietary terms before Copyright ownership was assigned - * to the Linux Foundation. - */ - -#if !defined(WLAN_HDD_MIB_h__) -#define WLAN_HDD_MIB_h__ - -#include <qdf_types.h> - -typedef enum { - eMib_dot11DesiredBssType_infrastructure = 1, - eMib_dot11DesiredBssType_independent = 2, - eMib_dot11DesiredBssType_infra_ap = 3, - eMib_dot11DesiredBssType_any = 4 -} eMib_dot11DesiredBssType; - -/** This is the maximum number of BSSIDs supported in the - dot11DesiredBssidList. All the code operates off of - this maximum BSSID list count. */ -#define MIB_DOT11_DESIRED_BSSID_LIST_MAX_COUNT 1 - -typedef struct { - uint32_t cEntries; - - struct qdf_mac_addr BSSIDs[MIB_DOT11_DESIRED_BSSID_LIST_MAX_COUNT]; - -} sMib_dot11DesiredBssidList; - -/** This is the maximum number of SSIDs supported in the - dot11DesiredSsidList. All the code operates off of - this maximum SSID list count. */ - -#define MIB_DOT11_DESIRED_SSID_LIST_MAX_COUNT 1 - -#define MIB_DOT11_SSID_MAX_LENGTH 32 - -typedef struct { - uint32_t ssidLength; - uint8_t ssid[MIB_DOT11_SSID_MAX_LENGTH]; - -} sDot11Ssid; - -typedef struct { - uint32_t cEntries; - - sDot11Ssid SSIDs[MIB_DOT11_DESIRED_SSID_LIST_MAX_COUNT]; - -} sMib_dot11DesiredSsidList; - -typedef enum { - /* these are bitmasks.... */ - eMib_dot11AutoConfigEnabled_None = 0U, - eMib_dot11AutoConfigEnabled_Phy = 0x00000001U, - eMib_dot11AutoConfigEnabled_Mac = 0x00000002U -} eMib_dot11AutoConfigEnabled; - -#define MIB_DOT11_SUPPORTED_PHY_TYPES_MAX_COUNT 3 - -typedef enum tagMib_dot11PhyType { - eMib_dot11PhyType_11b, - eMib_dot11PhyType_11a, - eMib_dot11PhyType_11g, - eMib_dot11PhyType_all -} eMib_dot11PhyType; - -typedef struct tagMib_dot11SupportedPhyTypes { - uint32_t cEntries; - eMib_dot11PhyType phyTypes[MIB_DOT11_SUPPORTED_PHY_TYPES_MAX_COUNT]; -} sMib_dot11SupportedPhyTypes; - -typedef enum { - eMib_DevicePowerState_D0, - eMib_DevicePowerState_D1, - eMib_DevicePowerState_D2, - eMib_DevicePowerState_D3 -} eMib_DevicePowerState; - -typedef enum { - eMib_dot11NICPowerState_OFF = false, - eMib_dot11NICPowerState_ON = true -} eMib_dot11NICPowerState; - -typedef enum { - eMib_dot11HardwarePHYState_OFF = false, - eMib_dot11HardwarePHYState_ON = true -} eMib_dot11HardwarePHYState; - -typedef enum { - eMib_dot11PowerSavingLevel_None, - eMib_dot11PowerSavingLevel_MaxPS, - eMib_dot11PowerSavingLevel_FastPS, - eMib_dot11PowerSavingLevel_MaximumLevel -} eMib_dot11PowerSavingLevel; - -#define MIB_DOT11_MAC_EXCLUSION_LIST_MAX_COUNT 4 -typedef struct { - uint32_t cEntries; - - struct qdf_mac_addr macAddrs[MIB_DOT11_MAC_EXCLUSION_LIST_MAX_COUNT]; - -} sMib_dot11MacExcludeList; - -#define MIB_DOT11_PRIVACY_EXEMPT_LIST_MAX_COUNT 32 - -typedef enum { - eMib_dot11ExemptionAction_Always, - eMib_dot11ExemptionAction_OnKeyMapUnavailable -} eMib_dot11ExemptAction; - -typedef enum { - eMib_dot11ExemptPacket_Unicast, - eMib_dot11ExemptPacket_Multicast, - eMib_dot11ExemptPacket_Both -} eMib_dot11ExemptPacket; - -typedef struct { - uint16_t uEtherType; - eMib_dot11ExemptAction exemptAction; - eMib_dot11ExemptPacket exemptPacket; - -} sMib_dot11PrivacyExemption; - -typedef struct { - uint32_t cEntries; - - sMib_dot11PrivacyExemption - privacyExemptList[MIB_DOT11_PRIVACY_EXEMPT_LIST_MAX_COUNT]; - -} sMib_dot11PrivacyExemptionList; - -typedef struct sHddMib_s { - eMib_dot11DesiredBssType mibDot11DesiredBssType; - - sMib_dot11DesiredBssidList mibDot11DesiredBssidList; - - sMib_dot11DesiredSsidList mibDot11DesiredSsidList; - - eMib_dot11AutoConfigEnabled mibDot11AutoConfigEnabled; - - /* the device power state for the device (the D-state... you know D0, D1, D2, etc. */ - eMib_DevicePowerState mibDevicePowerState; - - /* dot11NICPowerState is really the on/off state of the PHY. This can be */ - /* mamipulated through OIDs like a software control for radio on/off. */ - eMib_dot11NICPowerState mibDot11NICPowerState; - - /* Hardware PHY state is the on/off state of the hardware PHY. */ - eMib_dot11HardwarePHYState mibDot11HardwarePHYState; - - /* dot11 Power Saving level is the 802.11 power saving level/state for the 802.11 */ - /* NIC. Typically this is mapped to 802.11 BMPS in some fashion. We are not going */ - /* to disappoint; the Libra NIC maps these to different BMPS settings. */ - eMib_dot11PowerSavingLevel mibDot11PowerSavingLevel; - - sMib_dot11MacExcludeList mibDot11MacExcludeList; - - sMib_dot11PrivacyExemptionList mibDot11PrivacyExemptionList; - - sMib_dot11SupportedPhyTypes mibDot11SupportedPhyTypes; - eMib_dot11PhyType mibDot11CurrentPhyType; - - bool dot11IbssJoinOnly; - bool HiddenNetworkEnabled; - -} sHddMib_t; - -#endif diff --git a/core/hdd/inc/wlan_hdd_power.h b/core/hdd/inc/wlan_hdd_power.h index e173d4f517db..61f4d6d490c9 100644 --- a/core/hdd/inc/wlan_hdd_power.h +++ b/core/hdd/inc/wlan_hdd_power.h @@ -200,4 +200,26 @@ void hdd_wlan_suspend_resume_event(uint8_t state) {} #endif /* FEATURE_WLAN_DIAG_SUPPORT */ +/* + * Unit-test suspend/resume is a testing feature that allows putting firmware + * into WoW suspend irrespective of Apps suspend status. It emulates the chain + * of events that occur durring normal system-level suspend/resume, such as + * initiating all of the suspend/resume stages in the correct order, and + * enabling/disabling appropriate copy engine irqs. + */ +#ifdef WLAN_SUSPEND_RESUME_TEST +int hdd_wlan_fake_apps_resume(struct wiphy *wiphy); +int hdd_wlan_fake_apps_suspend(struct wiphy *wiphy); +#else +static inline int hdd_wlan_fake_apps_resume(struct wiphy *wiphy) +{ + return 0; +} + +static inline int hdd_wlan_fake_apps_suspend(struct wiphy *wiphy) +{ + return 0; +} +#endif /* WLAN_SUSPEND_RESUME_TEST */ + #endif /* __WLAN_HDD_POWER_H */ diff --git a/core/hdd/src/wlan_hdd_assoc.c b/core/hdd/src/wlan_hdd_assoc.c index 312349735478..e008534fb224 100644 --- a/core/hdd/src/wlan_hdd_assoc.c +++ b/core/hdd/src/wlan_hdd_assoc.c @@ -32,6 +32,9 @@ * */ +/* denote that this file does not allow legacy hddLog */ +#define HDD_DISALLOW_LEGACY_HDDLOG 1 + #include "wlan_hdd_includes.h" #include <ani_global.h> #include "dot11f.h" @@ -142,9 +145,8 @@ hdd_conn_set_authenticated(hdd_adapter_t *pAdapter, uint8_t authState) hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); /* save the new connection state */ - hddLog(LOG1, - FL("Authenticated state Changed from oldState:%d to State:%d"), - pHddStaCtx->conn_info.uIsAuthenticated, authState); + hdd_notice("Authenticated state Changed from oldState:%d to State:%d", + pHddStaCtx->conn_info.uIsAuthenticated, authState); pHddStaCtx->conn_info.uIsAuthenticated = authState; /* Check is pending ROC request or not when auth state changed */ @@ -275,61 +277,6 @@ hdd_conn_get_connected_cipher_algo(hdd_station_ctx_t *pHddStaCtx, } /** - * hdd_conn_get_connected_bss_type() - get current bss type - * @pHddStaCtx: pointer to global HDD Station context - * @pConnectedBssType: pointer to connected bss type - * - * Return: false if any errors encountered, true otherwise - */ -inline bool -hdd_conn_get_connected_bss_type(hdd_station_ctx_t *pHddStaCtx, - eMib_dot11DesiredBssType *pConnectedBssType) -{ - bool fConnected = false; - - fConnected = hdd_conn_get_connection_state(pHddStaCtx, NULL); - - if (pConnectedBssType) { - *pConnectedBssType = - pHddStaCtx->conn_info.connDot11DesiredBssType; - } - - return fConnected; -} - -/** - * hdd_conn_save_connected_bss_type() - set connected bss type - * @pHddStaCtx: pointer to global HDD Station context - * @csr_roamBssType: bss type - * - * Return: none - */ -static inline void -hdd_conn_save_connected_bss_type(hdd_station_ctx_t *pHddStaCtx, - eCsrRoamBssType csr_roamBssType) -{ - switch (csr_roamBssType) { - case eCSR_BSS_TYPE_INFRASTRUCTURE: - pHddStaCtx->conn_info.connDot11DesiredBssType = - eMib_dot11DesiredBssType_infrastructure; - break; - - case eCSR_BSS_TYPE_IBSS: - case eCSR_BSS_TYPE_START_IBSS: - pHddStaCtx->conn_info.connDot11DesiredBssType = - eMib_dot11DesiredBssType_independent; - break; - - /** We will never set the BssType to 'any' when attempting a connection - so CSR should never send this back to us.*/ - case eCSR_BSS_TYPE_ANY: - default: - QDF_ASSERT(0); - break; - } -} - -/** * hdd_remove_beacon_filter() - remove beacon filter * @adapter: Pointer to the hdd adapter * @@ -941,8 +888,6 @@ hdd_conn_save_connect_info(hdd_adapter_t *pAdapter, tCsrRoamInfo *pRoamInfo, } hdd_save_bss_info(pAdapter, pRoamInfo); } - /* save the connected BssType */ - hdd_conn_save_connected_bss_type(pHddStaCtx, eBssType); } /** @@ -972,9 +917,8 @@ hdd_send_ft_assoc_response(struct net_device *dev, u8 *pFTAssocRsp = NULL; if (pCsrRoamInfo->nAssocRspLength == 0) { - hddLog(LOGE, - FL("pCsrRoamInfo->nAssocRspLength=%d"), - (int)pCsrRoamInfo->nAssocRspLength); + hdd_err("pCsrRoamInfo->nAssocRspLength=%d", + (int)pCsrRoamInfo->nAssocRspLength); return; } @@ -982,18 +926,19 @@ hdd_send_ft_assoc_response(struct net_device *dev, (u8 *) (pCsrRoamInfo->pbFrames + pCsrRoamInfo->nBeaconLength + pCsrRoamInfo->nAssocReqLength); if (pFTAssocRsp == NULL) { - hddLog(LOGE, FL("AssocReq or AssocRsp is NULL")); + hdd_err("AssocReq or AssocRsp is NULL"); return; } /* pFTAssocRsp needs to point to the IEs */ pFTAssocRsp += FT_ASSOC_RSP_IES_OFFSET; - hddLog(LOG1, FL("AssocRsp is now at %02x%02x"), - (unsigned int)pFTAssocRsp[0], (unsigned int)pFTAssocRsp[1]); + hdd_notice("AssocRsp is now at %02x%02x", + (unsigned int)pFTAssocRsp[0], + (unsigned int)pFTAssocRsp[1]); /* We need to send the IEs to the supplicant. */ buff = kmalloc(IW_GENERIC_IE_MAX, GFP_ATOMIC); if (buff == NULL) { - hddLog(LOGE, FL("kmalloc unable to allocate memory")); + hdd_err("kmalloc unable to allocate memory"); return; } /* Send the Assoc Resp, the supplicant needs this for initial Auth. */ @@ -1042,20 +987,19 @@ static void hdd_send_ft_event(hdd_adapter_t *pAdapter) sme_get_rici_es(pHddCtx->hHal, pAdapter->sessionId, (u8 *) ricIe, DOT11F_IE_RICDESCRIPTOR_MAX_LEN, &ric_ies_length); if (ric_ies_length == 0) { - hddLog(LOGW, - FL("RIC IEs is of length 0 not sending RIC Information for now")); + hdd_warn("RIC IEs is of length 0 not sending RIC Information for now"); } ftEvent.ric_ies = ricIe; ftEvent.ric_ies_len = ric_ies_length; - hddLog(LOG1, FL("RIC IEs is of length %d"), (int)ric_ies_length); + hdd_notice("RIC IEs is of length %d", (int)ric_ies_length); sme_get_ft_pre_auth_response(pHddCtx->hHal, pAdapter->sessionId, (u8 *) ftIe, DOT11F_IE_FTINFO_MAX_LEN, &auth_resp_len); if (auth_resp_len == 0) { - hddLog(LOGE, FL("AuthRsp FTIES is of length 0")); + hdd_err("AuthRsp FTIES is of length 0"); return; } @@ -1066,9 +1010,9 @@ static void hdd_send_ft_event(hdd_adapter_t *pAdapter) ftEvent.ies = (u8 *) (ftIe + QDF_MAC_ADDR_SIZE); ftEvent.ies_len = auth_resp_len - QDF_MAC_ADDR_SIZE; - hddLog(LOG1, FL("ftEvent.ies_len %zu"), ftEvent.ies_len); - hddLog(LOG1, FL("ftEvent.ric_ies_len %zu"), ftEvent.ric_ies_len); - hddLog(LOG1, FL("ftEvent.target_ap %2x-%2x-%2x-%2x-%2x-%2x"), + hdd_notice("ftEvent.ies_len %zu", ftEvent.ies_len); + hdd_notice("ftEvent.ric_ies_len %zu", ftEvent.ric_ies_len); + hdd_notice("ftEvent.target_ap %2x-%2x-%2x-%2x-%2x-%2x", ftEvent.target_ap[0], ftEvent.target_ap[1], ftEvent.target_ap[2], ftEvent.target_ap[3], ftEvent.target_ap[4], ftEvent.target_ap[5]); @@ -1079,7 +1023,7 @@ static void hdd_send_ft_event(hdd_adapter_t *pAdapter) /* We need to send the IEs to the supplicant */ buff = kmalloc(IW_CUSTOM_MAX, GFP_ATOMIC); if (buff == NULL) { - hddLog(LOGE, FL("kmalloc unable to allocate memory")); + hdd_err("kmalloc unable to allocate memory"); return; } qdf_mem_zero(buff, IW_CUSTOM_MAX); @@ -1090,8 +1034,7 @@ static void hdd_send_ft_event(hdd_adapter_t *pAdapter) (u8 *) &(buff[str_len]), (IW_CUSTOM_MAX - str_len), &ric_ies_length); if (ric_ies_length == 0) { - hddLog(LOGW, - FL("RIC IEs is of length 0 not sending RIC Information for now")); + hdd_warn("RIC IEs is of length 0 not sending RIC Information for now"); } else { wrqu.data.length = str_len + ric_ies_length; wireless_send_event(pAdapter->dev, IWEVCUSTOM, &wrqu, buff); @@ -1106,7 +1049,7 @@ static void hdd_send_ft_event(hdd_adapter_t *pAdapter) if (auth_resp_len == 0) { kfree(buff); - hddLog(LOGE, FL("AuthRsp FTIES is of length 0")); + hdd_err("AuthRsp FTIES is of length 0"); return; } @@ -1139,15 +1082,15 @@ hdd_send_new_ap_channel_info(struct net_device *dev, hdd_adapter_t *pAdapter, tSirBssDescription *descriptor = pCsrRoamInfo->pBssDesc; if (descriptor == NULL) { - hddLog(LOGE, FL("pCsrRoamInfo->pBssDesc(%p)"), descriptor); + hdd_err("pCsrRoamInfo->pBssDesc(%p)", descriptor); return; } /* * Send the Channel event, the supplicant needs this to generate * the Adjacent AP report. */ - hddLog(LOGW, FL("Sending up an SIOCGIWFREQ, channelId(%d)"), - descriptor->channelId); + hdd_warn("Sending up an SIOCGIWFREQ, channelId(%d)", + descriptor->channelId); memset(&wrqu, '\0', sizeof(wrqu)); wrqu.freq.m = descriptor->channelId; wrqu.freq.e = 0; @@ -1177,24 +1120,25 @@ hdd_send_update_beacon_ies_event(hdd_adapter_t *pAdapter, memset(&wrqu, '\0', sizeof(wrqu)); if (0 == pCsrRoamInfo->nBeaconLength) { - hddLog(LOGW, FL("pCsrRoamInfo->nBeaconFrameLength = 0")); + hdd_warn("pCsrRoamInfo->nBeaconFrameLength = 0"); return; } pBeaconIes = (u8 *) (pCsrRoamInfo->pbFrames + BEACON_FRAME_IES_OFFSET); if (pBeaconIes == NULL) { - hddLog(LOGW, FL("Beacon IEs is NULL")); + hdd_warn("Beacon IEs is NULL"); return; } /* pBeaconIes needs to point to the IEs */ - hddLog(LOG1, FL("Beacon IEs is now at %02x%02x"), - (unsigned int)pBeaconIes[0], (unsigned int)pBeaconIes[1]); - hddLog(LOG1, FL("Beacon IEs length = %d"), - pCsrRoamInfo->nBeaconLength - BEACON_FRAME_IES_OFFSET); + hdd_notice("Beacon IEs is now at %02x%02x", + (unsigned int)pBeaconIes[0], + (unsigned int)pBeaconIes[1]); + hdd_notice("Beacon IEs length = %d", + pCsrRoamInfo->nBeaconLength - BEACON_FRAME_IES_OFFSET); /* We need to send the IEs to the supplicant. */ buff = kmalloc(IW_CUSTOM_MAX, GFP_ATOMIC); if (buff == NULL) { - hddLog(LOGE, FL("kmalloc unable to allocate memory")); + hdd_err("kmalloc unable to allocate memory"); return; } qdf_mem_zero(buff, IW_CUSTOM_MAX); @@ -1222,8 +1166,8 @@ hdd_send_update_beacon_ies_event(hdd_adapter_t *pAdapter, else buff[strLen] = 0; /* last chunk */ - hddLog(LOG1, FL("Beacon IEs length to supplicant = %d"), - currentLen); + hdd_notice("Beacon IEs length to supplicant = %d", + currentLen); wireless_send_event(pAdapter->dev, IWEVCUSTOM, &wrqu, buff); } while (totalIeLen > 0); @@ -1261,13 +1205,13 @@ static void hdd_send_association_event(struct net_device *dev, if (NULL != pCsrRoamInfo) if (pCsrRoamInfo->roamSynchInProgress) /* change logging before release */ - hddLog(LOG4, "LFR3:hdd_send_association_event"); + hdd_info("LFR3:hdd_send_association_event"); #endif if (eConnectionState_Associated == pHddStaCtx->conn_info.connState) { tSirSmeChanInfo chan_info; if (!pCsrRoamInfo) { - hddLog(LOGE, FL("STA in associated state but pCsrRoamInfo is null")); + hdd_err("STA in associated state but pCsrRoamInfo is null"); return; } @@ -1283,14 +1227,12 @@ static void hdd_send_association_event(struct net_device *dev, P2P_CLIENT_CONNECTING_STATE_1) { global_p2p_connection_status = P2P_CLIENT_CONNECTED_STATE_1; - hddLog(LOGE, - "[P2P State] Changing state from Connecting state to Connected State for 8-way Handshake"); + hdd_err("[P2P State] Changing state from Connecting state to Connected State for 8-way Handshake"); } else if (global_p2p_connection_status == P2P_CLIENT_CONNECTING_STATE_2) { global_p2p_connection_status = P2P_CLIENT_COMPLETED_STATE; - hddLog(LOGE, - "[P2P State] Changing state from Connecting state to P2P Client Connection Completed"); + hdd_err("[P2P State] Changing state from Connecting state to P2P Client Connection Completed"); } } #endif @@ -1468,8 +1410,6 @@ static void hdd_conn_remove_connect_info(hdd_station_ctx_t *pHddStaCtx) qdf_mem_zero(&pHddStaCtx->conn_info.Keys, sizeof(tCsrKeys)); qdf_mem_zero(&pHddStaCtx->ibss_enc_key, sizeof(tCsrRoamSetKey)); - /* Set not-connected state */ - pHddStaCtx->conn_info.connDot11DesiredBssType = eCSR_BSS_TYPE_ANY; pHddStaCtx->conn_info.proxyARPService = 0; qdf_mem_zero(&pHddStaCtx->conn_info.SSID, sizeof(tCsrSSIDInfo)); @@ -1497,8 +1437,7 @@ QDF_STATUS hdd_roam_deregister_sta(hdd_adapter_t *pAdapter, uint8_t staId) qdf_status = ol_txrx_clear_peer(staId); if (!QDF_IS_STATUS_SUCCESS(qdf_status)) { - hddLog(LOGE, - FL("ol_txrx_clear_peer() failed for staID %d. Status(%d) [0x%08X]"), + hdd_err("ol_txrx_clear_peer() failed for staID %d. Status(%d) [0x%08X]", staId, qdf_status, qdf_status); } return qdf_status; @@ -1579,11 +1518,11 @@ static QDF_STATUS hdd_dis_connect_handler(hdd_adapter_t *pAdapter, bool sendDisconInd = true; if (dev == NULL) { - hddLog(LOGE, FL("net_dev is released return")); + hdd_err("net_dev is released return"); return QDF_STATUS_E_FAILURE; } /* notify apps that we can't pass traffic anymore */ - hddLog(LOG1, FL("Disabling queues")); + hdd_notice("Disabling queues"); wlan_hdd_netif_queue_control(pAdapter, WLAN_NETIF_TX_DISABLE_N_CARRIER, WLAN_CONTROL_PATH); @@ -1609,8 +1548,7 @@ static QDF_STATUS hdd_dis_connect_handler(hdd_adapter_t *pAdapter, pHddStaCtx->conn_info.connState) || (eConnectionState_NotConnected == pHddStaCtx->conn_info.connState)) { - hddLog(LOG1, - FL("HDD has initiated a disconnect, no need to send disconnect indication to kernel")); + hdd_notice("HDD has initiated a disconnect, no need to send disconnect indication to kernel"); sendDisconInd = false; } @@ -1665,14 +1603,12 @@ static QDF_STATUS hdd_dis_connect_handler(hdd_adapter_t *pAdapter, P2P_CLIENT_CONNECTED_STATE_1) { global_p2p_connection_status = P2P_CLIENT_DISCONNECTED_STATE; - hddLog(LOGE, - "[P2P State] 8 way Handshake completed and moved to disconnected state"); + hdd_err("[P2P State] 8 way Handshake completed and moved to disconnected state"); } else if (global_p2p_connection_status == P2P_CLIENT_COMPLETED_STATE) { global_p2p_connection_status = P2P_NOT_ACTIVE; - hddLog(LOGE, - "[P2P State] P2P Client is removed and moved to inactive state"); + hdd_err("[P2P State] P2P Client is removed and moved to inactive state"); } } #endif @@ -1700,11 +1636,10 @@ static QDF_STATUS hdd_dis_connect_handler(hdd_adapter_t *pAdapter, if (0 == pHddStaCtx->conn_info.staId[i]) continue; sta_id = pHddStaCtx->conn_info.staId[i]; - hddLog(LOG1, FL("Deregister StaID %d"), sta_id); + hdd_info("Deregister StaID %d", sta_id); vstatus = hdd_roam_deregister_sta(pAdapter, sta_id); if (!QDF_IS_STATUS_SUCCESS(vstatus)) { - hddLog(LOGE, - FL("hdd_roamDeregisterSTA() failed to for staID %d. Status= %d [0x%x]"), + hdd_err("hdd_roamDeregisterSTA() failed to for staID %d. Status= %d [0x%x]", sta_id, status, status); status = QDF_STATUS_E_FAILURE; } @@ -1733,8 +1668,7 @@ static QDF_STATUS hdd_dis_connect_handler(hdd_adapter_t *pAdapter, */ vstatus = hdd_roam_deregister_sta(pAdapter, sta_id); if (!QDF_IS_STATUS_SUCCESS(vstatus)) { - hddLog(LOGE, - FL("hdd_roam_deregister_sta() failed to for staID %d. Status= %d [0x%x]"), + hdd_err("hdd_roam_deregister_sta() failed to for staID %d. Status= %d [0x%x]", sta_id, status, status); status = QDF_STATUS_E_FAILURE; } @@ -1782,8 +1716,7 @@ void hdd_set_peer_authorized_event(uint32_t vdev_id) adapter = hdd_get_adapter_by_vdev(hdd_ctx, vdev_id); if (adapter == NULL) { - hddLog(LOGE, - "%s: Invalid vdev_id", __func__); + hdd_err("Invalid vdev_id"); } complete(&adapter->sta_authorized_event); } @@ -1812,7 +1745,7 @@ QDF_STATUS hdd_change_peer_state(hdd_adapter_t *pAdapter, } if (sta_id >= WLAN_MAX_STA_COUNT) { - hddLog(LOGE, "Invalid sta id :%d", sta_id); + hdd_err("Invalid sta id :%d", sta_id); return QDF_STATUS_E_INVAL; } @@ -1822,13 +1755,13 @@ QDF_STATUS hdd_change_peer_state(hdd_adapter_t *pAdapter, peer_mac_addr = ol_txrx_peer_get_peer_mac_addr(peer); if (peer_mac_addr == NULL) { - hddLog(LOGE, "peer mac addr is NULL"); + hdd_err("peer mac addr is NULL"); return QDF_STATUS_E_FAULT; } err = ol_txrx_peer_state_update(pdev, peer_mac_addr, sta_state); if (err != QDF_STATUS_SUCCESS) { - hddLog(LOGE, "peer state update failed"); + hdd_err("peer state update failed"); return QDF_STATUS_E_FAULT; } #ifdef WLAN_FEATURE_ROAM_OFFLOAD @@ -1846,7 +1779,7 @@ QDF_STATUS hdd_change_peer_state(hdd_adapter_t *pAdapter, hdd_set_peer_authorized_event, pAdapter->sessionId); if (err != QDF_STATUS_SUCCESS) { - hddLog(LOGE, "Failed to set the peer state to authorized"); + hdd_err("Failed to set the peer state to authorized"); return QDF_STATUS_E_FAULT; } @@ -1861,8 +1794,7 @@ QDF_STATUS hdd_change_peer_state(hdd_adapter_t *pAdapter, &pAdapter->sta_authorized_event, msecs_to_jiffies(HDD_PEER_AUTHORIZE_WAIT)); if (!rc) { - hddLog(LOG1, "%s: timeout waiting for sta_authorized_event", - __func__); + hdd_notice("timeout waiting for sta_authorized_event"); } vdev = ol_txrx_get_vdev_for_peer(peer); ol_txrx_vdev_unpause(vdev, @@ -1907,8 +1839,8 @@ QDF_STATUS hdd_roam_register_sta(hdd_adapter_t *pAdapter, staDesc.is_qos_enabled = 0; #ifdef FEATURE_WLAN_WAPI - hddLog(LOG1, FL("WAPI STA Registered: %d"), - pAdapter->wapi_info.fIsWapiSta); + hdd_notice("WAPI STA Registered: %d", + pAdapter->wapi_info.fIsWapiSta); if (pAdapter->wapi_info.fIsWapiSta) staDesc.is_wapi_supported = 1; else @@ -1926,9 +1858,8 @@ QDF_STATUS hdd_roam_register_sta(hdd_adapter_t *pAdapter, qdf_status = ol_txrx_register_peer(&staDesc); if (!QDF_IS_STATUS_SUCCESS(qdf_status)) { - hddLog(LOGW, - "ol_txrx_register_peer() failed to register. Status=%d [0x%08X]", - qdf_status, qdf_status); + hdd_warn("ol_txrx_register_peer() failed to register. Status=%d [0x%08X]", + qdf_status, qdf_status); return qdf_status; } @@ -1949,8 +1880,7 @@ QDF_STATUS hdd_roam_register_sta(hdd_adapter_t *pAdapter, hdd_conn_set_authenticated(pAdapter, true); } else { - hddLog(LOG3, - "ULA auth StaId= %d. Changing TL state to CONNECTED at Join time", + hdd_info("ULA auth StaId= %d. Changing TL state to CONNECTED at Join time", pHddStaCtx->conn_info.staId[0]); qdf_status = hdd_change_peer_state(pAdapter, staDesc.sta_id, @@ -1995,7 +1925,7 @@ static void hdd_send_re_assoc_event(struct net_device *dev, tHalHandle hal_handle = WLAN_HDD_GET_HAL_CTX(pAdapter); if (!rspRsnIe) { - hddLog(LOGE, FL("Unable to allocate RSN IE")); + hdd_err("Unable to allocate RSN IE"); goto done; } @@ -2004,12 +1934,12 @@ static void hdd_send_re_assoc_event(struct net_device *dev, goto done; } if (pCsrRoamInfo == NULL) { - hddLog(LOGE, FL("Invalid CSR roam info")); + hdd_err("Invalid CSR roam info"); goto done; } if (pCsrRoamInfo->nAssocRspLength == 0) { - hddLog(LOGE, FL("Invalid assoc response length")); + hdd_err("Invalid assoc response length"); goto done; } @@ -2021,8 +1951,8 @@ static void hdd_send_re_assoc_event(struct net_device *dev, /* pFTAssocRsp needs to point to the IEs */ pFTAssocRsp += FT_ASSOC_RSP_IES_OFFSET; - hddLog(LOG1, FL("AssocRsp is now at %02x%02x"), - (unsigned int)pFTAssocRsp[0], (unsigned int)pFTAssocRsp[1]); + hdd_info("AssocRsp is now at %02x%02x", + (unsigned int)pFTAssocRsp[0], (unsigned int)pFTAssocRsp[1]); /* * Active session count is decremented upon disconnection, but during @@ -2058,7 +1988,7 @@ static void hdd_send_re_assoc_event(struct net_device *dev, #endif if (bss == NULL) - hddLog(LOGE, FL("Get BSS returned NULL")); + hdd_err("Get BSS returned NULL"); buf_ptr = buf_ssid_ie; *buf_ptr = SIR_MAC_SSID_EID; buf_ptr++; @@ -2146,9 +2076,8 @@ static int hdd_change_sta_state_authenticated(hdd_adapter_t *adapter, AUTO_PS_ENTRY_TIMER_DEFAULT_VALUE : AUTO_DEFERRED_PS_ENTRY_TIMER_DEFAULT_VALUE; - hddLog(LOG1, - "Changing TL state to AUTHENTICATED for StaId= %d", - hddstactx->conn_info.staId[0]); + hdd_info("Changing TL state to AUTHENTICATED for StaId= %d", + hddstactx->conn_info.staId[0]); /* Connections that do not need Upper layer authentication, * transition TL to 'Authenticated' state after the keys are set @@ -2195,7 +2124,7 @@ static QDF_STATUS hdd_roam_set_key_complete_handler(hdd_adapter_t *pAdapter, ENTER(); if (NULL == pRoamInfo) { - hddLog(LOG2, FL("pRoamInfo is NULL")); + hdd_info("pRoamInfo is NULL"); return QDF_STATUS_E_FAILURE; } /* @@ -2204,7 +2133,7 @@ static QDF_STATUS hdd_roam_set_key_complete_handler(hdd_adapter_t *pAdapter, * (those that do not require upper layer authentication) we can put TL * directly into 'authenticated' state. */ - hddLog(LOG2, "Set Key completion roamStatus =%d roamResult=%d " + hdd_info("Set Key completion roamStatus =%d roamResult=%d " MAC_ADDRESS_STR, roamStatus, roamResult, MAC_ADDR_ARRAY(pRoamInfo->peerMac.bytes)); @@ -2223,8 +2152,7 @@ static QDF_STATUS hdd_roam_set_key_complete_handler(hdd_adapter_t *pAdapter, &pRoamInfo->peerMac, &staId); if (QDF_STATUS_SUCCESS == qdf_status) { - hddLog(LOG2, - "WLAN TL STA Ptk Installed for STAID=%d", + hdd_info("WLAN TL STA Ptk Installed for STAID=%d", staId); pHddStaCtx->roam_info.roamingState = HDD_ROAM_STATE_NONE; @@ -2329,7 +2257,7 @@ void hdd_perform_roam_set_key_complete(hdd_adapter_t *pAdapter) pHddStaCtx->roam_info.roamStatus, eCSR_ROAM_RESULT_AUTHENTICATED); if (qdf_ret_status != QDF_STATUS_SUCCESS) - hddLog(LOGE, FL("Set Key complete failure")); + hdd_err("Set Key complete failure"); pHddStaCtx->roam_info.deferKeyComplete = false; } @@ -2379,13 +2307,13 @@ static QDF_STATUS hdd_association_completion_handler(hdd_adapter_t *pAdapter, pHddStaCtx->conn_info.connState)) && ((eCSR_ROAM_RESULT_ASSOCIATED == roamResult) || (eCSR_ROAM_ASSOCIATION_FAILURE == roamStatus))) { - hddLog(LOG1, FL("Disconnect from HDD in progress")); + hdd_info("Disconnect from HDD in progress"); hddDisconInProgress = true; } if (eCSR_ROAM_RESULT_ASSOCIATED == roamResult) { if (NULL == pRoamInfo) { - hddLog(LOGE, FL("pRoamInfo is NULL")); + hdd_err("pRoamInfo is NULL"); return QDF_STATUS_E_FAILURE; } if (!hddDisconInProgress) { @@ -2464,8 +2392,7 @@ static QDF_STATUS hdd_association_completion_handler(hdd_adapter_t *pAdapter, if ((WLAN_MAX_STA_COUNT + 3) > pRoamInfo->staId) pHddCtx->sta_to_adapter[pRoamInfo->staId] = pAdapter; else - hddLog(LOGE, "%s: Wrong Staid: %d", __func__, - pRoamInfo->staId); + hdd_err("Wrong Staid: %d", pRoamInfo->staId); pHddCtx->sta_to_adapter[pRoamInfo->staId] = pAdapter; @@ -2543,15 +2470,14 @@ static QDF_STATUS hdd_association_completion_handler(hdd_adapter_t *pAdapter, * pFTAssocRsp needs to point to the IEs */ pFTAssocRsp += FT_ASSOC_RSP_IES_OFFSET; - hddLog(LOG1, - FL("AssocRsp is now at %02x%02x"), - (unsigned int)pFTAssocRsp[0], - (unsigned int)pFTAssocRsp[1]); + hdd_info("AssocRsp is now at %02x%02x", + (unsigned int)pFTAssocRsp[0], + (unsigned int)pFTAssocRsp[1]); assocRsplen = pRoamInfo->nAssocRspLength - FT_ASSOC_RSP_IES_OFFSET; } else { - hddLog(LOGE, FL("AssocRsp is NULL")); + hdd_err("AssocRsp is NULL"); assocRsplen = 0; } @@ -2566,12 +2492,11 @@ static QDF_STATUS hdd_association_completion_handler(hdd_adapter_t *pAdapter, */ pFTAssocReq += FT_ASSOC_REQ_IES_OFFSET; - hddLog(LOG1, - FL("pFTAssocReq is now at %02x%02x"), - (unsigned int) - pFTAssocReq[0], - (unsigned int) - pFTAssocReq[1]); + hdd_info("pFTAssocReq is now at %02x%02x", + (unsigned int) + pFTAssocReq[0], + (unsigned int) + pFTAssocReq[1]); assocReqlen = pRoamInfo->nAssocReqLength - FT_ASSOC_REQ_IES_OFFSET; @@ -2584,7 +2509,7 @@ static QDF_STATUS hdd_association_completion_handler(hdd_adapter_t *pAdapter, pRoamInfo->nAssocReqLength; } } else { - hddLog(LOGE, FL("AssocReq is NULL")); + hdd_err("AssocReq is NULL"); assocReqlen = 0; } @@ -2607,18 +2532,17 @@ static QDF_STATUS hdd_association_completion_handler(hdd_adapter_t *pAdapter, cds_decr_session_set_pcl (pAdapter->device_mode, pAdapter->sessionId); - hddLog(LOG1, - FL("ft_carrier_on is %d, sending roamed indication"), - ft_carrier_on); + hdd_info("ft_carrier_on is %d, sending roamed indication", + ft_carrier_on); chan = ieee80211_get_channel (pAdapter->wdev.wiphy, (int)pRoamInfo->pBssDesc-> channelId); - hddLog(LOG1, - "assocReqlen %d assocRsplen %d", - assocReqlen, - assocRsplen); + hdd_info( + "assocReqlen %d assocRsplen %d", + assocReqlen, + assocRsplen); hdd_notice( "Reassoc Req IE dump"); @@ -2672,9 +2596,8 @@ static QDF_STATUS hdd_association_completion_handler(hdd_adapter_t *pAdapter, deferKeyComplete = true; } } else if (!hddDisconInProgress) { - hddLog(LOG1, - FL("ft_carrier_on is %d, sending connect indication"), - ft_carrier_on); + hdd_info("ft_carrier_on is %d, sending connect indication", + ft_carrier_on); hdd_connect_result(dev, pRoamInfo-> bssid.bytes, @@ -2711,13 +2634,12 @@ static QDF_STATUS hdd_association_completion_handler(hdd_adapter_t *pAdapter, reqRsnIe, reqRsnLength); else { - hddLog(LOG1, - FL("sending connect indication to nl80211:for bssid " - MAC_ADDRESS_STR - " result:%d and Status:%d"), - MAC_ADDR_ARRAY - (pRoamInfo->bssid.bytes), - roamResult, roamStatus); + hdd_info("sending connect indication to nl80211:for bssid " + MAC_ADDRESS_STR + " result:%d and Status:%d", + MAC_ADDR_ARRAY + (pRoamInfo->bssid.bytes), + roamResult, roamStatus); /* inform connect result to nl80211 */ hdd_connect_result(dev, @@ -2752,7 +2674,7 @@ static QDF_STATUS hdd_association_completion_handler(hdd_adapter_t *pAdapter, * hdd_roam_register_sta will flush any cached * data frames immediately. */ - hddLog(LOG1, FL("Enabling queues")); + hdd_info("Enabling queues"); wlan_hdd_netif_queue_control(pAdapter, WLAN_WAKE_ALL_NETIF_QUEUE, WLAN_CONTROL_PATH); @@ -2796,9 +2718,8 @@ static QDF_STATUS hdd_association_completion_handler(hdd_adapter_t *pAdapter, ); hdd_conn_set_authenticated(pAdapter, false); } else { - hddLog(LOG2, - FL("staId: %d Changing TL state to AUTHENTICATED"), - pHddStaCtx->conn_info.staId[0]); + hdd_info("staId: %d Changing TL state to AUTHENTICATED", + pHddStaCtx->conn_info.staId[0]); qdf_status = hdd_change_peer_state(pAdapter, pHddStaCtx->conn_info.staId[0], @@ -2824,9 +2745,9 @@ static QDF_STATUS hdd_association_completion_handler(hdd_adapter_t *pAdapter, /* Start the tx queues */ #ifdef WLAN_FEATURE_ROAM_OFFLOAD if (pRoamInfo->roamSynchInProgress) - hddLog(LOG3, "LFR3:netif_tx_wake_all_queues"); + hdd_info("LFR3:netif_tx_wake_all_queues"); #endif - hddLog(LOG1, FL("Enabling queues")); + hdd_info("Enabling queues"); wlan_hdd_netif_queue_control(pAdapter, WLAN_WAKE_ALL_NETIF_QUEUE, WLAN_CONTROL_PATH); @@ -2837,8 +2758,7 @@ static QDF_STATUS hdd_association_completion_handler(hdd_adapter_t *pAdapter, #endif if (!QDF_IS_STATUS_SUCCESS(qdf_status)) { - hddLog(LOGE, - "STA register with TL failed. status(=%d) [%08X]", + hdd_err("STA register with TL failed. status(=%d) [%08X]", qdf_status, qdf_status); } #ifdef WLAN_FEATURE_11W @@ -2886,21 +2806,19 @@ static QDF_STATUS hdd_association_completion_handler(hdd_adapter_t *pAdapter, if (eCSR_ROAM_ASSOCIATION_FAILURE == roamStatus && !hddDisconInProgress) { if (pRoamInfo) { - hddLog(LOGE, - FL("send connect failure to nl80211: for bssid " - MAC_ADDRESS_STR - " result:%d and Status:%d reasoncode %d"), - MAC_ADDR_ARRAY(pRoamInfo->bssid.bytes), - roamResult, roamStatus, - pRoamInfo->reasonCode); + hdd_err("send connect failure to nl80211: for bssid " + MAC_ADDRESS_STR + " result:%d and Status:%d reasoncode %d", + MAC_ADDR_ARRAY(pRoamInfo->bssid.bytes), + roamResult, roamStatus, + pRoamInfo->reasonCode); pHddStaCtx->conn_info.assoc_status_code = pRoamInfo->statusCode; } else - hddLog(LOGE, - FL("connect failed: for bssid " + hdd_err("connect failed: for bssid " MAC_ADDRESS_STR - " result:%d and Status:%d "), + " result:%d and Status:%d ", MAC_ADDR_ARRAY(pWextState->req_bssId.bytes), roamResult, roamStatus); @@ -2990,7 +2908,7 @@ static QDF_STATUS hdd_association_completion_handler(hdd_adapter_t *pAdapter, } hdd_wmm_init(pAdapter); - hddLog(LOG1, FL("Disabling queues")); + hdd_info("Disabling queues"); wlan_hdd_netif_queue_control(pAdapter, WLAN_NETIF_TX_DISABLE_N_CARRIER, WLAN_CONTROL_PATH); @@ -3030,8 +2948,9 @@ static void hdd_roam_ibss_indication_handler(hdd_adapter_t *pAdapter, eRoamCmdStatus roamStatus, eCsrRoamResult roamResult) { - hddLog(LOG1, "%s: id %d, status %d, result %d", - pAdapter->dev->name, roamId, roamStatus, roamResult); + hdd_info("%s: id %d, status %d, result %d", + pAdapter->dev->name, roamId, + roamStatus, roamResult); switch (roamResult) { /* both IBSS Started and IBSS Join should come in here. */ @@ -3078,21 +2997,20 @@ static void hdd_roam_ibss_indication_handler(hdd_adapter_t *pAdapter, unsigned int freq; #endif /* we created the IBSS, notify supplicant */ - hddLog(LOG1, - FL("%s: created ibss " MAC_ADDRESS_STR), - pAdapter->dev->name, - MAC_ADDR_ARRAY(pRoamInfo->pBssDesc->bssId)); + hdd_info("%s: created ibss " MAC_ADDRESS_STR, + pAdapter->dev->name, + MAC_ADDR_ARRAY( + pRoamInfo->pBssDesc->bssId)); /* we must first give cfg80211 the BSS information */ bss = wlan_hdd_cfg80211_update_bss_db(pAdapter, pRoamInfo); if (NULL == bss) { - hddLog(LOGE, - FL("%s: unable to create IBSS entry"), - pAdapter->dev->name); + hdd_err("%s: unable to create IBSS entry", + pAdapter->dev->name); return; } - hddLog(LOG1, FL("Enabling queues")); + hdd_info("Enabling queues"); wlan_hdd_netif_queue_control(pAdapter, WLAN_START_ALL_NETIF_QUEUE_N_CARRIER, WLAN_CONTROL_PATH); @@ -3114,9 +3032,9 @@ static void hdd_roam_ibss_indication_handler(hdd_adapter_t *pAdapter, bss->bssid, chan, GFP_KERNEL); else - hddLog(LOGE, FL("%s: chanId: %d, can't find channel"), - pAdapter->dev->name, - (int)pRoamInfo->pBssDesc->channelId); + hdd_err("%s: chanId: %d, can't find channel", + pAdapter->dev->name, + (int)pRoamInfo->pBssDesc->channelId); #else cfg80211_ibss_joined(pAdapter->dev, bss->bssid, GFP_KERNEL); @@ -3137,14 +3055,13 @@ static void hdd_roam_ibss_indication_handler(hdd_adapter_t *pAdapter, case eCSR_ROAM_RESULT_IBSS_START_FAILED: { - hddLog(LOGE, - FL("%s: unable to create IBSS"), pAdapter->dev->name); + hdd_err("%s: unable to create IBSS", pAdapter->dev->name); break; } default: - hddLog(LOGE, FL("%s: unexpected result %d"), - pAdapter->dev->name, (int)roamResult); + hdd_err("%s: unexpected result %d", + pAdapter->dev->name, (int)roamResult); break; } @@ -3169,8 +3086,8 @@ bool hdd_save_peer(hdd_station_ctx_t *sta_ctx, uint8_t sta_id, for (idx = 0; idx < SIR_MAX_NUM_STA_IN_IBSS; idx++) { if (0 == sta_ctx->conn_info.staId[idx]) { - hddLog(LOG1, FL("adding peer: %pM, sta_id: %d, at idx: %d"), - peer_mac_addr, sta_id, idx); + hdd_info("adding peer: %pM, sta_id: %d, at idx: %d", + peer_mac_addr, sta_id, idx); sta_ctx->conn_info.staId[idx] = sta_id; qdf_copy_macaddr( &sta_ctx->conn_info.peerMacAddress[idx], @@ -3250,7 +3167,7 @@ static bool roam_remove_ibss_station(hdd_adapter_t *pAdapter, uint8_t staId) /* Last peer departed, set the IBSS state appropriately */ pHddStaCtx->conn_info.connState = eConnectionState_IbssDisconnected; - hddLog(LOGE, "Last IBSS Peer Departed!!!"); + hdd_err("Last IBSS Peer Departed!!!"); } /* Find next active staId, to have a valid sta trigger for TL. */ if (fSuccess == true) { @@ -3299,8 +3216,7 @@ static QDF_STATUS roam_ibss_connect_handler(hdd_adapter_t *pAdapter, /* add bss_id to cfg80211 data base */ bss = wlan_hdd_cfg80211_update_bss_db(pAdapter, pRoamInfo); if (NULL == bss) { - hddLog(LOGE, - FL("%s: unable to create IBSS entry"), + hdd_err("%s: unable to create IBSS entry", pAdapter->dev->name); return QDF_STATUS_E_FAILURE; } @@ -3342,8 +3258,8 @@ hdd_roam_mic_error_indication_handler(hdd_adapter_t *pAdapter, memcpy(msg.src_addr.sa_data, pRoamInfo->u.pMICFailureInfo->taMacAddr, sizeof(pRoamInfo->u.pMICFailureInfo->taMacAddr)); - hddLog(LOG1, "MIC MAC " MAC_ADDRESS_STR, - MAC_ADDR_ARRAY(msg.src_addr.sa_data)); + hdd_info("MIC MAC " MAC_ADDRESS_STR, + MAC_ADDR_ARRAY(msg.src_addr.sa_data)); if (pRoamInfo->u.pMICFailureInfo->multicast == eSIR_TRUE) msg.flags = IW_MICFAILURE_GROUP; @@ -3412,7 +3328,7 @@ roam_roam_connect_status_update_handler(hdd_adapter_t *pAdapter, (WLAN_HDD_GET_STATION_CTX_PTR(pAdapter), pRoamInfo->staId, &pRoamInfo->peerMac)) { - hddLog(LOGW, "Max reached: Can't register new IBSS peer"); + hdd_warn("Max reached: Can't register new IBSS peer"); break; } @@ -3425,8 +3341,7 @@ roam_roam_connect_status_update_handler(hdd_adapter_t *pAdapter, &pRoamInfo->peerMac, pRoamInfo->pBssDesc); if (!QDF_IS_STATUS_SUCCESS(qdf_status)) { - hddLog(LOGE, - "Cannot register STA with TL for IBSS. Failed with qdf_status = %d [%08X]", + hdd_err("Cannot register STA with TL for IBSS. Failed with qdf_status = %d [%08X]", qdf_status, qdf_status); } pHddStaCtx->ibss_sta_generation++; @@ -3451,8 +3366,8 @@ roam_roam_connect_status_update_handler(hdd_adapter_t *pAdapter, qdf_copy_macaddr(&pHddStaCtx->ibss_enc_key.peerMac, &pRoamInfo->peerMac); - hddLog(LOG2, "New peer joined set PTK encType=%d", - pHddStaCtx->ibss_enc_key.encType); + hdd_info("New peer joined set PTK encType=%d", + pHddStaCtx->ibss_enc_key.encType); qdf_status = sme_roam_set_key(WLAN_HDD_GET_HAL_CTX @@ -3462,13 +3377,12 @@ roam_roam_connect_status_update_handler(hdd_adapter_t *pAdapter, &roamId); if (QDF_STATUS_SUCCESS != qdf_status) { - hddLog(LOGE, - FL("sme_roam_set_key failed, status=%d"), - qdf_status); + hdd_err("sme_roam_set_key failed, status=%d", + qdf_status); return QDF_STATUS_E_FAILURE; } } - hddLog(LOG1, FL("Enabling queues")); + hdd_info("Enabling queues"); wlan_hdd_netif_queue_control(pAdapter, WLAN_START_ALL_NETIF_QUEUE_N_CARRIER, WLAN_CONTROL_PATH); @@ -3488,8 +3402,7 @@ roam_roam_connect_status_update_handler(hdd_adapter_t *pAdapter, WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); if (!roam_remove_ibss_station(pAdapter, pRoamInfo->staId)) - hddLog(LOGW, - "IBSS peer departed by cannot find peer in our registration table with TL"); + hdd_warn("IBSS peer departed by cannot find peer in our registration table with TL"); hdd_err("IBSS Peer Departed from SME " "with peerMac " MAC_ADDRESS_STR " BSSID: " @@ -3510,10 +3423,9 @@ roam_roam_connect_status_update_handler(hdd_adapter_t *pAdapter, } case eCSR_ROAM_RESULT_IBSS_INACTIVE: { - hddLog(LOG3, - "Received eCSR_ROAM_RESULT_IBSS_INACTIVE from SME"); + hdd_info("Received eCSR_ROAM_RESULT_IBSS_INACTIVE from SME"); /* Stop only when we are inactive */ - hddLog(LOG1, FL("Disabling queues")); + hdd_info("Disabling queues"); wlan_hdd_netif_queue_control(pAdapter, WLAN_NETIF_TX_DISABLE_N_CARRIER, WLAN_CONTROL_PATH); @@ -3574,7 +3486,7 @@ QDF_STATUS hdd_roam_register_tdlssta(hdd_adapter_t *pAdapter, /* Register the Station with TL... */ qdf_status = ol_txrx_register_peer(&staDesc); if (!QDF_IS_STATUS_SUCCESS(qdf_status)) { - hddLog(LOGE, FL("ol_txrx_register_peer() failed to register. Status=%d [0x%08X]"), + hdd_err("ol_txrx_register_peer() failed to register. Status=%d [0x%08X]", qdf_status, qdf_status); return qdf_status; } @@ -3595,8 +3507,8 @@ static QDF_STATUS hdd_roam_deregister_tdlssta(hdd_adapter_t *pAdapter, QDF_STATUS qdf_status; qdf_status = ol_txrx_clear_peer(staId); if (!QDF_IS_STATUS_SUCCESS(qdf_status)) { - hddLog(LOGW, FL("ol_txrx_clear_peer() failed for staID %d. Status=%d [0x%08X]"), - staId, qdf_status, qdf_status); + hdd_warn("ol_txrx_clear_peer() failed for staID %d. Status=%d [0x%08X]", + staId, qdf_status, qdf_status); } return qdf_status; } @@ -3688,8 +3600,7 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter, hddTdlsPeer_t *curr_peer; uint32_t reason; - hddLog(LOG2, - ("hdd_tdlsStatusUpdate: %s staIdx %d " MAC_ADDRESS_STR), + hdd_info("hdd_tdlsStatusUpdate: %s staIdx %d " MAC_ADDRESS_STR, roamResult == eCSR_ROAM_RESULT_ADD_TDLS_PEER ? "ADD_TDLS_PEER" : roamResult == @@ -3712,9 +3623,8 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter, MAC_ADDR_ARRAY(pRoamInfo->peerMac.bytes)); if (!pHddTdlsCtx) { - hddLog(LOG1, - FL("TDLS ctx is null, ignore roamResult (%d)"), - roamResult); + hdd_info("TDLS ctx is null, ignore roamResult (%d)", + roamResult); return status; } @@ -3722,7 +3632,7 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter, case eCSR_ROAM_RESULT_ADD_TDLS_PEER: { if (eSIR_SME_SUCCESS != pRoamInfo->statusCode) { - hddLog(LOGE, FL("Add Sta failed. status code(=%d)"), + hdd_err("Add Sta failed. status code(=%d)", pRoamInfo->statusCode); } else { /* @@ -3741,10 +3651,9 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter, pHddCtx->tdlsConnInfo[staIdx]. staId = pRoamInfo->staId; - hddLog(LOGW, - ("TDLS: STA IDX at %d is %d " + hdd_warn("TDLS: STA IDX at %d is %d " "of mac " - MAC_ADDRESS_STR), + MAC_ADDRESS_STR, staIdx, pHddCtx-> tdlsConnInfo[staIdx]. @@ -3769,8 +3678,7 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter, peerMac.bytes, pRoamInfo-> staId)) { - hddLog(LOGE, - "wlan_hdd_tdls_set_sta_id() failed"); + hdd_err("wlan_hdd_tdls_set_sta_id() failed"); return QDF_STATUS_E_FAILURE; } @@ -3789,8 +3697,7 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter, ucastSig); } else { status = QDF_STATUS_E_FAILURE; - hddLog(LOGE, - FL("no available slot in conn_info. staId %d cannot be stored"), + hdd_err("no available slot in conn_info. staId %d cannot be stored", pRoamInfo->staId); } pAdapter->tdlsAddStaStatus = status; @@ -3801,8 +3708,7 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter, case eCSR_ROAM_RESULT_UPDATE_TDLS_PEER: { if (eSIR_SME_SUCCESS != pRoamInfo->statusCode) { - hddLog(LOGE, - FL("Add Sta failed. status code(=%d)"), + hdd_err("Add Sta failed. status code(=%d)", pRoamInfo->statusCode); } /* store the ucast signature which will be used later when @@ -3815,8 +3721,7 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter, case eCSR_ROAM_RESULT_LINK_ESTABLISH_REQ_RSP: { if (eSIR_SME_SUCCESS != pRoamInfo->statusCode) { - hddLog(LOGE, - FL("Link Establish Request failed. status(=%d)"), + hdd_err("Link Establish Request failed. status(=%d)", pRoamInfo->statusCode); } complete(&pAdapter->tdls_link_establish_req_comp); @@ -3830,9 +3735,8 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter, pRoamInfo->sessionId) && pRoamInfo->staId == pHddCtx->tdlsConnInfo[staIdx].staId) { - hddLog(LOGW, - ("HDD: del STA IDX = %x"), - pRoamInfo->staId); + hdd_warn("HDD: del STA IDX = %x", + pRoamInfo->staId); curr_peer = wlan_hdd_tdls_find_peer(pAdapter, @@ -3876,8 +3780,7 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter, break; case eCSR_ROAM_RESULT_TEARDOWN_TDLS_PEER_IND: { - hddLog(LOGE, - FL("Sending teardown to supplicant with reason code %u"), + hdd_err("Sending teardown to supplicant with reason code %u", pRoamInfo->reasonCode); curr_peer = @@ -3898,16 +3801,15 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter, if ((pHddCtx->tdlsConnInfo[staIdx].sessionId == pRoamInfo->sessionId) && pHddCtx->tdlsConnInfo[staIdx].staId) { - hddLog(LOGW, - ("hdd_tdlsStatusUpdate: staIdx %d " - MAC_ADDRESS_STR), - pHddCtx->tdlsConnInfo[staIdx]. - staId, - MAC_ADDR_ARRAY(pHddCtx-> - tdlsConnInfo - [staIdx]. - peerMac. - bytes)); + hdd_warn("hdd_tdlsStatusUpdate: staIdx %d " + MAC_ADDRESS_STR, + pHddCtx->tdlsConnInfo[staIdx]. + staId, + MAC_ADDR_ARRAY(pHddCtx-> + tdlsConnInfo + [staIdx]. + peerMac. + bytes)); wlan_hdd_tdls_reset_peer(pAdapter, pHddCtx-> tdlsConnInfo @@ -3933,12 +3835,11 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter, smeTdlsPeerStateParams.peerState = eSME_TDLS_PEER_STATE_TEARDOWN; - hddLog(LOG1, - FL("calling sme_update_tdls_peer_state for staIdx %d " - MAC_ADDRESS_STR), - pHddCtx->tdlsConnInfo[staIdx]. - staId, - MAC_ADDR_ARRAY(pHddCtx-> + hdd_info("calling sme_update_tdls_peer_state for staIdx %d " + MAC_ADDRESS_STR, + pHddCtx->tdlsConnInfo[staIdx]. + staId, + MAC_ADDR_ARRAY(pHddCtx-> tdlsConnInfo [staIdx]. peerMac. @@ -3948,13 +3849,12 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter, pHddCtx->hHal, &smeTdlsPeerStateParams); if (QDF_STATUS_SUCCESS != status) { - hddLog(LOGE, - FL("sme_update_tdls_peer_state failed for " - MAC_ADDRESS_STR), - MAC_ADDR_ARRAY - (pHddCtx-> - tdlsConnInfo[staIdx]. - peerMac.bytes)); + hdd_err("sme_update_tdls_peer_state failed for " + MAC_ADDRESS_STR, + MAC_ADDR_ARRAY + (pHddCtx-> + tdlsConnInfo[staIdx]. + peerMac.bytes)); } wlan_hdd_tdls_decrement_peer_count (pAdapter); @@ -3992,13 +3892,12 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter, pRoamInfo->peerMac.bytes, true); if (!curr_peer) { - hddLog(LOGE, FL("curr_peer is null")); + hdd_err("curr_peer is null"); status = QDF_STATUS_E_FAILURE; } else { if (eTDLS_LINK_CONNECTED == curr_peer->link_status) { - hddLog(LOGE, - FL("TDLS link status is connected, ignore SHOULD_DISCOVER")); + hdd_err("TDLS link status is connected, ignore SHOULD_DISCOVER"); } else { /* * If external control is enabled then initiate @@ -4009,15 +3908,11 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter, fTDLSExternalControl && (false == curr_peer->isForcedPeer)) { - hddLog(LOG2, - FL - ("TDLS ExternalControl enabled but curr_peer is not forced, ignore SHOULD_DISCOVER")); + hdd_info("TDLS ExternalControl enabled but curr_peer is not forced, ignore SHOULD_DISCOVER"); status = QDF_STATUS_SUCCESS; break; } else { - hddLog(LOG2, - FL - ("initiate TDLS setup on SHOULD_DISCOVER, fTDLSExternalControl: %d, curr_peer->isForcedPeer: %d, reason: %d"), + hdd_info("initiate TDLS setup on SHOULD_DISCOVER, fTDLSExternalControl: %d, curr_peer->isForcedPeer: %d, reason: %d", pHddCtx->config-> fTDLSExternalControl, curr_peer->isForcedPeer, @@ -4037,20 +3932,18 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter, wlan_hdd_tdls_find_peer(pAdapter, pRoamInfo->peerMac.bytes, true); if (!curr_peer) { - hddLog(LOGE, FL("curr_peer is null")); + hdd_err("curr_peer is null"); status = QDF_STATUS_E_FAILURE; } else { if (eTDLS_LINK_CONNECTED == curr_peer->link_status) { - hddLog(LOGE, - FL - ("Received SHOULD_TEARDOWN for peer " - MAC_ADDRESS_STR - " staId: %d, reason: %d"), - MAC_ADDR_ARRAY(pRoamInfo-> - peerMac.bytes), - pRoamInfo->staId, - pRoamInfo->reasonCode); + hdd_err("Received SHOULD_TEARDOWN for peer " + MAC_ADDRESS_STR + " staId: %d, reason: %d", + MAC_ADDR_ARRAY(pRoamInfo-> + peerMac.bytes), + pRoamInfo->staId, + pRoamInfo->reasonCode); if (pRoamInfo->reasonCode == eWNI_TDLS_TEARDOWN_REASON_RSSI || @@ -4073,10 +3966,8 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter, eTDLS_TEARDOWN_BSS_DISCONNECT, curr_peer->peerMac); } else { - hddLog(LOGE, - FL - ("TDLS link is not connected, ignore SHOULD_TEARDOWN, reason: %d"), - pRoamInfo->reasonCode); + hdd_err("TDLS link is not connected, ignore SHOULD_TEARDOWN, reason: %d", + pRoamInfo->reasonCode); } status = QDF_STATUS_SUCCESS; } @@ -4089,19 +3980,17 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter, wlan_hdd_tdls_find_peer(pAdapter, pRoamInfo->peerMac.bytes, true); if (!curr_peer) { - hddLog(LOGE, FL("curr_peer is null")); + hdd_err("curr_peer is null"); status = QDF_STATUS_E_FAILURE; } else { if (eTDLS_LINK_CONNECTED == curr_peer->link_status) { - hddLog(LOGE, - FL - ("Received SHOULD_PEER_DISCONNECTED for peer " - MAC_ADDRESS_STR - " staId: %d, reason: %d"), - MAC_ADDR_ARRAY(pRoamInfo->peerMac.bytes), - pRoamInfo->staId, - pRoamInfo->reasonCode); + hdd_err("Received SHOULD_PEER_DISCONNECTED for peer " + MAC_ADDRESS_STR + " staId: %d, reason: %d", + MAC_ADDR_ARRAY(pRoamInfo->peerMac.bytes), + pRoamInfo->staId, + pRoamInfo->reasonCode); if (pRoamInfo->reasonCode == eWNI_TDLS_TEARDOWN_REASON_RSSI || @@ -4124,10 +4013,8 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter, eTDLS_TEARDOWN_BSS_DISCONNECT, curr_peer->peerMac); } else { - hddLog(LOGE, - FL - ("TDLS link is not connected, ignore SHOULD_PEER_DISCONNECTED, reason: %d"), - pRoamInfo->reasonCode); + hdd_err("TDLS link is not connected, ignore SHOULD_PEER_DISCONNECTED, reason: %d", + pRoamInfo->reasonCode); } status = QDF_STATUS_SUCCESS; } @@ -4169,32 +4056,32 @@ hdd_indicate_unprot_mgmt_frame(hdd_adapter_t *pAdapter, uint32_t nFrameLength, uint8_t type = 0; uint8_t subType = 0; - hddLog(LOG1, FL("Frame Type = %d Frame Length = %d"), - frameType, nFrameLength); + hdd_info("Frame Type = %d Frame Length = %d", + frameType, nFrameLength); /* Sanity Checks */ if (NULL == pAdapter) { - hddLog(LOGE, FL("pAdapter is NULL")); + hdd_err("pAdapter is NULL"); return; } if (NULL == pAdapter->dev) { - hddLog(LOGE, FL("pAdapter->dev is NULL")); + hdd_err("pAdapter->dev is NULL"); return; } if (WLAN_HDD_ADAPTER_MAGIC != pAdapter->magic) { - hddLog(LOGE, FL("pAdapter has invalid magic")); + hdd_err("pAdapter has invalid magic"); return; } if (!nFrameLength) { - hddLog(LOGE, FL("Frame Length is Invalid ZERO")); + hdd_err("Frame Length is Invalid ZERO"); return; } if (NULL == pbFrames) { - hddLog(LOGE, FL("pbFrames is NULL")); + hdd_err("pbFrames is NULL"); return; } @@ -4222,8 +4109,8 @@ hdd_indicate_unprot_mgmt_frame(hdd_adapter_t *pAdapter, uint32_t nFrameLength, #endif pAdapter->hdd_stats.hddPmfStats.numUnprotDeauthRx++; } else { - hddLog(LOGE, FL("Frame type %d and subtype %d are not valid"), - type, subType); + hdd_err("Frame type %d and subtype %d are not valid", + type, subType); return; } } @@ -4257,8 +4144,8 @@ hdd_indicate_tsm_ie(hdd_adapter_t *pAdapter, uint8_t tid, memset(&wrqu, '\0', sizeof(wrqu)); memset(buf, '\0', sizeof(buf)); - hddLog(LOG1, "TSM Ind tid(%d) state(%d) MeasInt(%d)", - tid, state, measInterval); + hdd_info("TSM Ind tid(%d) state(%d) MeasInt(%d)", + tid, state, measInterval); nBytes = snprintf(buf, IW_CUSTOM_MAX, "TSMIE=%d:%d:%d", tid, state, @@ -4296,10 +4183,9 @@ hdd_indicate_cckm_pre_auth(hdd_adapter_t *pAdapter, tCsrRoamInfo *pRoamInfo) memset(buf, '\0', sizeof(buf)); /* Timestamp0 is lower 32 bits and Timestamp1 is upper 32 bits */ - hddLog(LOG1, - "CCXPREAUTHNOTIFY=" MAC_ADDRESS_STR " %d:%d", - MAC_ADDR_ARRAY(pRoamInfo->bssid.bytes), - pRoamInfo->timestamp[0], pRoamInfo->timestamp[1]); + hdd_info("CCXPREAUTHNOTIFY=" MAC_ADDRESS_STR " %d:%d", + MAC_ADDR_ARRAY(pRoamInfo->bssid.bytes), + pRoamInfo->timestamp[0], pRoamInfo->timestamp[1]); nBytes = snprintf(pos, freeBytes, "CCXPREAUTHNOTIFY="); pos += nBytes; @@ -4342,7 +4228,7 @@ hdd_indicate_ese_adj_ap_rep_ind(hdd_adapter_t *pAdapter, memset(&wrqu, '\0', sizeof(wrqu)); memset(buf, '\0', sizeof(buf)); - hddLog(LOG1, "CCXADJAPREP=%u", pRoamInfo->tsmRoamDelay); + hdd_info("CCXADJAPREP=%u", pRoamInfo->tsmRoamDelay); nBytes = snprintf(buf, IW_CUSTOM_MAX, "CCXADJAPREP=%u", @@ -4380,8 +4266,8 @@ hdd_indicate_ese_bcn_report_no_results(const hdd_adapter_t *pAdapter, memset(&wrqu, '\0', sizeof(wrqu)); memset(buf, '\0', sizeof(buf)); - hddLog(LOG1, FL("CCXBCNREP=%d %d %d"), measurementToken, - flag, numBss); + hdd_info("CCXBCNREP=%d %d %d", measurementToken, + flag, numBss); nBytes = snprintf(pos, freeBytes, "CCXBCNREP=%d %d %d", measurementToken, @@ -4439,8 +4325,7 @@ hdd_indicate_ese_bcn_report_ind(const hdd_adapter_t *pAdapter, if ((pRoamInfo->pEseBcnReportRsp->flag >> 1) && (!pRoamInfo->pEseBcnReportRsp->numBss)) { - hddLog(LOG1, - "Measurement Done but no scan results"); + hdd_info("Measurement Done but no scan results"); /* If the measurement is none and no scan results found, indicate the supplicant about measurement done */ hdd_indicate_ese_bcn_report_no_results( @@ -4470,18 +4355,17 @@ hdd_indicate_ese_bcn_report_ind(const hdd_adapter_t *pAdapter, } tot_bcn_ieLen += len; sendBss++; - hddLog(LOG1, "i(%d) sizeof bcnReportFields(%d) IeLength(%d) Length of Ie(%d) totLen(%d)", - i, bcnRepFieldSize, 1, - pRoamInfo->pEseBcnReportRsp-> - bcnRepBssInfo[i].ieLen, tot_bcn_ieLen); + hdd_info("i(%d) sizeof bcnReportFields(%d) IeLength(%d) Length of Ie(%d) totLen(%d)", + i, bcnRepFieldSize, 1, + pRoamInfo->pEseBcnReportRsp-> + bcnRepBssInfo[i].ieLen, tot_bcn_ieLen); } - hddLog(LOG1, "Sending %d BSS Info", - sendBss); - hddLog(LOG1, "CCXBCNREP=%d %d %d %d", - pRoamInfo->pEseBcnReportRsp->measurementToken, - pRoamInfo->pEseBcnReportRsp->flag, sendBss, - tot_bcn_ieLen); + hdd_info("Sending %d BSS Info", sendBss); + hdd_info("CCXBCNREP=%d %d %d %d", + pRoamInfo->pEseBcnReportRsp->measurementToken, + pRoamInfo->pEseBcnReportRsp->flag, sendBss, + tot_bcn_ieLen); nBytes = snprintf(pos, freeBytes, "CCXBCNREP=%d %d %d ", pRoamInfo->pEseBcnReportRsp-> @@ -4498,8 +4382,7 @@ hdd_indicate_ese_bcn_report_ind(const hdd_adapter_t *pAdapter, freeBytes -= sizeof(tot_bcn_ieLen); for (i = 0; i < sendBss; i++) { - hddLog(LOG1, - "ChanNum(%d) Spare(%d) MeasDuration(%d)" + hdd_info("ChanNum(%d) Spare(%d) MeasDuration(%d)" " PhyType(%d) RecvSigPower(%d) ParentTSF(%u)" " TargetTSF[0](%u) TargetTSF[1](%u) BeaconInterval(%u)" " CapabilityInfo(%d) BSSID(%02X:%02X:%02X:%02X:%02X:%02X)", @@ -4657,13 +4540,12 @@ hdd_sme_roam_callback(void *pContext, tCsrRoamInfo *pRoamInfo, uint32_t roamId, struct hdd_chan_change_params chan_change; struct cfg80211_bss *bss_status; - hddLog(LOG2, - "CSR Callback: status= %d result= %d roamID=%d", - roamStatus, roamResult, roamId); + hdd_info("CSR Callback: status= %d result= %d roamID=%d", + roamStatus, roamResult, roamId); /* Sanity check */ if ((NULL == pAdapter) || (WLAN_HDD_ADAPTER_MAGIC != pAdapter->magic)) { - hddLog(LOGP, "invalid adapter or adapter has invalid magic"); + hdd_alert("invalid adapter or adapter has invalid magic"); return QDF_STATUS_E_FAILURE; } @@ -4687,10 +4569,8 @@ hdd_sme_roam_callback(void *pContext, tCsrRoamInfo *pRoamInfo, uint32_t roamId, * interface down. */ case eCSR_ROAM_FT_REASSOC_FAILED: - hddLog(LOGE, - FL - ("Reassoc Failed with roamStatus: %d roamResult: %d SessionID: %d"), - roamStatus, roamResult, pAdapter->sessionId); + hdd_err("Reassoc Failed with roamStatus: %d roamResult: %d SessionID: %d", + roamStatus, roamResult, pAdapter->sessionId); qdf_ret_status = hdd_dis_connect_handler(pAdapter, pRoamInfo, roamId, roamStatus, roamResult); @@ -4705,9 +4585,8 @@ hdd_sme_roam_callback(void *pContext, tCsrRoamInfo *pRoamInfo, uint32_t roamId, } pHddStaCtx->ft_carrier_on = false; pHddStaCtx->hdd_ReassocScenario = false; - hddLog(LOG1, - FL("hdd_ReassocScenario set to: %d, ReAssoc Failed, session: %d"), - pHddStaCtx->hdd_ReassocScenario, pAdapter->sessionId); + hdd_info("hdd_ReassocScenario set to: %d, ReAssoc Failed, session: %d", + pHddStaCtx->hdd_ReassocScenario, pAdapter->sessionId); break; case eCSR_ROAM_FT_START: @@ -4720,7 +4599,7 @@ hdd_sme_roam_callback(void *pContext, tCsrRoamInfo *pRoamInfo, uint32_t roamId, * doing disassoc at this time. This saves 30-60 msec * after reassoc. */ - hddLog(LOG1, FL("Disabling queues")); + hdd_info("Disabling queues"); wlan_hdd_netif_queue_control(pAdapter, WLAN_NETIF_TX_DISABLE, WLAN_CONTROL_PATH); @@ -4730,13 +4609,12 @@ hdd_sme_roam_callback(void *pContext, tCsrRoamInfo *pRoamInfo, uint32_t roamId, qdf_ret_status = QDF_STATUS_E_FAILURE; pHddStaCtx->ft_carrier_on = true; pHddStaCtx->hdd_ReassocScenario = true; - hddLog(LOG1, - FL("hdd_ReassocScenario set to: %d, due to eCSR_ROAM_FT_START, session: %d"), - pHddStaCtx->hdd_ReassocScenario, pAdapter->sessionId); + hdd_info("hdd_ReassocScenario set to: %d, due to eCSR_ROAM_FT_START, session: %d", + pHddStaCtx->hdd_ReassocScenario, pAdapter->sessionId); break; case eCSR_ROAM_SHOULD_ROAM: /* notify apps that we can't pass traffic anymore */ - hddLog(LOG1, FL("Disabling queues")); + hdd_info("Disabling queues"); wlan_hdd_netif_queue_control(pAdapter, WLAN_NETIF_TX_DISABLE, WLAN_CONTROL_PATH); @@ -4748,8 +4626,8 @@ hdd_sme_roam_callback(void *pContext, tCsrRoamInfo *pRoamInfo, uint32_t roamId, break; case eCSR_ROAM_LOSTLINK: if (roamResult == eCSR_ROAM_RESULT_LOSTLINK) { - hddLog(LOG2, "Roaming started due to connection lost"); - hddLog(LOG1, FL("Disabling queues")); + hdd_info("Roaming started due to connection lost"); + hdd_info("Disabling queues"); wlan_hdd_netif_queue_control(pAdapter, WLAN_NETIF_TX_DISABLE_N_CARRIER, WLAN_CONTROL_PATH); @@ -4757,7 +4635,7 @@ hdd_sme_roam_callback(void *pContext, tCsrRoamInfo *pRoamInfo, uint32_t roamId, } case eCSR_ROAM_DISASSOCIATED: { - hddLog(LOG1, "****eCSR_ROAM_DISASSOCIATED****"); + hdd_info("****eCSR_ROAM_DISASSOCIATED****"); qdf_ret_status = hdd_dis_connect_handler(pAdapter, pRoamInfo, roamId, roamStatus, roamResult); @@ -4775,13 +4653,10 @@ hdd_sme_roam_callback(void *pContext, tCsrRoamInfo *pRoamInfo, uint32_t roamId, false; } - hddLog(LOG1, - "offload: disassociation happening, restoring configuredMcastBcastFilter"); - hddLog(LOG1, - "McastBcastFilter = %d", - pHddCtx->configuredMcastBcastFilter); - hddLog(LOG1, - "offload: already called mcastbcast filter"); + hdd_info("offload: disassociation happening, restoring configuredMcastBcastFilter"); + hdd_info("McastBcastFilter = %d", + pHddCtx->configuredMcastBcastFilter); + hdd_info("offload: already called mcastbcast filter"); (WLAN_HDD_GET_CTX(pAdapter))-> hdd_mcastbcast_filter_set = false; } @@ -4792,13 +4667,13 @@ hdd_sme_roam_callback(void *pContext, tCsrRoamInfo *pRoamInfo, uint32_t roamId, } break; case eCSR_ROAM_IBSS_LEAVE: - hddLog(LOG1, "****eCSR_ROAM_IBSS_LEAVE****"); + hdd_info("****eCSR_ROAM_IBSS_LEAVE****"); qdf_ret_status = hdd_dis_connect_handler(pAdapter, pRoamInfo, roamId, roamStatus, roamResult); break; case eCSR_ROAM_ASSOCIATION_COMPLETION: - hddLog(LOG1, "****eCSR_ROAM_ASSOCIATION_COMPLETION****"); + hdd_info("****eCSR_ROAM_ASSOCIATION_COMPLETION****"); /* * To Do - address probable memory leak with WEP encryption upon * successful association. @@ -4857,8 +4732,7 @@ hdd_sme_roam_callback(void *pContext, tCsrRoamInfo *pRoamInfo, uint32_t roamId, roamResult); if (eCSR_ROAM_RESULT_AUTHENTICATED == roamResult) { pHddStaCtx->hdd_ReassocScenario = false; - hddLog(LOG1, - FL("hdd_ReassocScenario set to: %d, set key complete, session: %d"), + hdd_info("hdd_ReassocScenario set to: %d, set key complete, session: %d", pHddStaCtx->hdd_ReassocScenario, pAdapter->sessionId); } @@ -5101,7 +4975,7 @@ eCsrAuthType hdd_translate_wpa_to_csr_auth_type(uint8_t auth_suite[4]) { auth_type = eCSR_AUTH_TYPE_UNKNOWN; } - hddLog(LOG1, FL("auth_type: %d"), auth_type); + hdd_info("auth_type: %d", auth_type); return auth_type; } @@ -5130,7 +5004,7 @@ hdd_translate_rsn_to_csr_encryption_type(uint8_t cipher_suite[4]) else cipher_type = eCSR_ENCRYPT_TYPE_FAILED; - hddLog(LOG1, FL("cipher_type: %d"), cipher_type); + hdd_info("cipher_type: %d", cipher_type); return cipher_type; } @@ -5159,7 +5033,7 @@ hdd_translate_wpa_to_csr_encryption_type(uint8_t cipher_suite[4]) else cipher_type = eCSR_ENCRYPT_TYPE_FAILED; - hddLog(LOG1, FL("cipher_type: %d"), cipher_type); + hdd_info("cipher_type: %d", cipher_type); return cipher_type; } @@ -5205,8 +5079,8 @@ static int32_t hdd_process_genie(hdd_adapter_t *pAdapter, /* Validity checks */ if ((gen_ie_len < DOT11F_IE_RSN_MIN_LEN) || (gen_ie_len > DOT11F_IE_RSN_MAX_LEN)) { - hddLog(LOGE, FL("Invalid DOT11F RSN IE length :%d"), - gen_ie_len); + hdd_err("Invalid DOT11F RSN IE length :%d", + gen_ie_len); return -EINVAL; } /* Skip past the EID byte and length byte */ @@ -5216,10 +5090,10 @@ static int32_t hdd_process_genie(hdd_adapter_t *pAdapter, dot11f_unpack_ie_rsn((tpAniSirGlobal) halHandle, pRsnIe, RSNIeLen, &dot11RSNIE); /* Copy out the encryption and authentication types */ - hddLog(LOG1, FL("pairwise cipher suite count: %d"), - dot11RSNIE.pwise_cipher_suite_count); - hddLog(LOG1, FL("authentication suite count: %d"), - dot11RSNIE.akm_suite_count); + hdd_info("pairwise cipher suite count: %d", + dot11RSNIE.pwise_cipher_suite_count); + hdd_info("authentication suite count: %d", + dot11RSNIE.akm_suite_count); /*Here we have followed the apple base code, but probably I suspect we can do something different */ /* dot11RSNIE.akm_suite_count */ @@ -5242,7 +5116,7 @@ static int32_t hdd_process_genie(hdd_adapter_t *pAdapter, /* Set the PMKSA ID Cache for this interface */ for (i = 0; i < dot11RSNIE.pmkid_count; i++) { if (is_zero_ether_addr(bssid)) { - hddLog(LOGE, FL("MAC address is all zeroes")); + hdd_err("MAC address is all zeroes"); break; } updatePMKCache = true; @@ -5261,9 +5135,8 @@ static int32_t hdd_process_genie(hdd_adapter_t *pAdapter, * Calling csr_roam_set_pmkid_cache to configure the * PMKIDs into the cache. */ - hddLog(LOG1, - FL("Calling sme_roam_set_pmkid_cache with cache entry %d."), - i); + hdd_info("Calling sme_roam_set_pmkid_cache with cache entry %d.", + i); /* Finally set the PMKSA ID Cache in CSR */ result = sme_roam_set_pmkid_cache(halHandle, @@ -5276,8 +5149,8 @@ static int32_t hdd_process_genie(hdd_adapter_t *pAdapter, /* Validity checks */ if ((gen_ie_len < DOT11F_IE_WPA_MIN_LEN) || (gen_ie_len > DOT11F_IE_WPA_MAX_LEN)) { - hddLog(LOGE, FL("Invalid DOT11F WPA IE length :%d"), - gen_ie_len); + hdd_err("Invalid DOT11F WPA IE length :%d", + gen_ie_len); return -EINVAL; } /* Skip past the EID and length byte - and four byte WiFi OUI */ @@ -5287,10 +5160,10 @@ static int32_t hdd_process_genie(hdd_adapter_t *pAdapter, dot11f_unpack_ie_wpa((tpAniSirGlobal) halHandle, pRsnIe, RSNIeLen, &dot11WPAIE); /* Copy out the encryption and authentication types */ - hddLog(LOG1, FL("WPA unicast cipher suite count: %d"), - dot11WPAIE.unicast_cipher_count); - hddLog(LOG1, FL("WPA authentication suite count: %d"), - dot11WPAIE.auth_suite_count); + hdd_info("WPA unicast cipher suite count: %d", + dot11WPAIE.unicast_cipher_count); + hdd_info("WPA authentication suite count: %d", + dot11WPAIE.auth_suite_count); /* dot11WPAIE.auth_suite_count */ /* Just translate the FIRST one */ *pAuthType = @@ -5305,7 +5178,7 @@ static int32_t hdd_process_genie(hdd_adapter_t *pAdapter, hdd_translate_wpa_to_csr_encryption_type( dot11WPAIE.multicast_cipher); } else { - hddLog(LOGW, FL("gen_ie[0]: %d"), gen_ie[0]); + hdd_warn("gen_ie[0]: %d", gen_ie[0]); return -EINVAL; } return 0; @@ -5378,14 +5251,13 @@ int hdd_set_genie_to_csr(hdd_adapter_t *pAdapter, eCsrAuthType *RSNAuthType) = mcRSNEncryptType; } #ifdef WLAN_FEATURE_11W - hddLog(LOG1, FL("RSNMfpRequired = %d, RSNMfpCapable = %d"), - RSNMfpRequired, RSNMfpCapable); + hdd_info("RSNMfpRequired = %d, RSNMfpCapable = %d", + RSNMfpRequired, RSNMfpCapable); pWextState->roamProfile.MFPRequired = RSNMfpRequired; pWextState->roamProfile.MFPCapable = RSNMfpCapable; #endif - hddLog(LOG1, - FL("CSR AuthType = %d, EncryptionType = %d mcEncryptionType = %d"), - *RSNAuthType, RSNEncryptType, mcRSNEncryptType); + hdd_info("CSR AuthType = %d, EncryptionType = %d mcEncryptionType = %d", + *RSNAuthType, RSNEncryptType, mcRSNEncryptType); } return 0; } @@ -5404,8 +5276,8 @@ int hdd_set_csr_auth_type(hdd_adapter_t *pAdapter, eCsrAuthType RSNAuthType) hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); pRoamProfile->AuthType.numEntries = 1; - hddLog(LOG1, FL("pHddStaCtx->conn_info.authType = %d"), - pHddStaCtx->conn_info.authType); + hdd_info("pHddStaCtx->conn_info.authType = %d", + pHddStaCtx->conn_info.authType); switch (pHddStaCtx->conn_info.authType) { case eCSR_AUTH_TYPE_OPEN_SYSTEM: @@ -5423,13 +5295,11 @@ int hdd_set_csr_auth_type(hdd_adapter_t *pAdapter, eCsrAuthType RSNAuthType) if ((RSNAuthType == eCSR_AUTH_TYPE_CCKM_WPA) && ((pWextState->authKeyMgmt & IW_AUTH_KEY_MGMT_802_1X) == IW_AUTH_KEY_MGMT_802_1X)) { - hddLog(LOG1, - FL("set authType to CCKM WPA. AKM also 802.1X.")); + hdd_info("set authType to CCKM WPA. AKM also 802.1X."); pRoamProfile->AuthType.authType[0] = eCSR_AUTH_TYPE_CCKM_WPA; } else if (RSNAuthType == eCSR_AUTH_TYPE_CCKM_WPA) { - hddLog(LOG1, - FL("Last chance to set authType to CCKM WPA.")); + hdd_info("Last chance to set authType to CCKM WPA."); pRoamProfile->AuthType.authType[0] = eCSR_AUTH_TYPE_CCKM_WPA; } else @@ -5454,13 +5324,11 @@ int hdd_set_csr_auth_type(hdd_adapter_t *pAdapter, eCsrAuthType RSNAuthType) if ((RSNAuthType == eCSR_AUTH_TYPE_CCKM_RSN) && ((pWextState->authKeyMgmt & IW_AUTH_KEY_MGMT_802_1X) == IW_AUTH_KEY_MGMT_802_1X)) { - hddLog(LOG1, - FL("set authType to CCKM RSN. AKM also 802.1X.")); + hdd_info("set authType to CCKM RSN. AKM also 802.1X."); pRoamProfile->AuthType.authType[0] = eCSR_AUTH_TYPE_CCKM_RSN; } else if (RSNAuthType == eCSR_AUTH_TYPE_CCKM_RSN) { - hddLog(LOG1, - FL("Last chance to set authType to CCKM RSN.")); + hdd_info("Last chance to set authType to CCKM RSN."); pRoamProfile->AuthType.authType[0] = eCSR_AUTH_TYPE_CCKM_RSN; } else @@ -5516,14 +5384,14 @@ int hdd_set_csr_auth_type(hdd_adapter_t *pAdapter, eCsrAuthType RSNAuthType) default: #ifdef FEATURE_WLAN_ESE - hddLog(LOG1, FL("In default, unknown auth type.")); + hdd_info("In default, unknown auth type."); #endif /* FEATURE_WLAN_ESE */ pRoamProfile->AuthType.authType[0] = eCSR_AUTH_TYPE_UNKNOWN; break; } - hddLog(LOG1, FL("Set roam Authtype to %d"), - pWextState->roamProfile.AuthType.authType[0]); + hdd_info("Set roam Authtype to %d", + pWextState->roamProfile.AuthType.authType[0]); return 0; } @@ -5550,7 +5418,6 @@ static int __iw_set_essid(struct net_device *dev, hdd_context_t *hdd_ctx; uint32_t roamId; tCsrRoamProfile *pRoamProfile; - eMib_dot11DesiredBssType connectedBssType; eCsrAuthType RSNAuthType; tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter); hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); @@ -5564,26 +5431,26 @@ static int __iw_set_essid(struct net_device *dev, return ret; if (pAdapter->device_mode != QDF_STA_MODE && - pAdapter->device_mode != QDF_P2P_CLIENT_MODE) { - hddLog(LOGW, FL("device mode %s(%d) is not allowed"), - hdd_device_mode_to_string(pAdapter->device_mode), - pAdapter->device_mode); + pAdapter->device_mode != QDF_IBSS_MODE && + pAdapter->device_mode != QDF_P2P_CLIENT_MODE) { + hdd_warn("device mode %s(%d) is not allowed", + hdd_device_mode_to_string(pAdapter->device_mode), + pAdapter->device_mode); return -EINVAL; } pWextState = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter); if (pWextState->mTKIPCounterMeasures == TKIP_COUNTER_MEASURE_STARTED) { - hddLog(LOG2, FL("Counter measure is in progress")); + hdd_info("Counter measure is in progress"); return -EBUSY; } if (SIR_MAC_MAX_SSID_LENGTH < wrqu->essid.length) return -EINVAL; pRoamProfile = &pWextState->roamProfile; - if (hdd_conn_get_connected_bss_type(pHddStaCtx, &connectedBssType) || - (eMib_dot11DesiredBssType_independent == - pHddStaCtx->conn_info.connDot11DesiredBssType)) { + if (hdd_conn_is_connected(pHddStaCtx) || + (pAdapter->device_mode == QDF_IBSS_MODE)) { QDF_STATUS qdf_status; /* Need to issue a disconnect to CSR. */ @@ -5597,7 +5464,7 @@ static int __iw_set_essid(struct net_device *dev, msecs_to_jiffies (WLAN_WAIT_TIME_DISCONNECT)); if (!rc) - hddLog(LOGE, FL("Disconnect event timed out")); + hdd_err("Disconnect event timed out"); } } @@ -5634,13 +5501,13 @@ static int __iw_set_essid(struct net_device *dev, hdd_set_csr_auth_type(pAdapter, RSNAuthType); } #ifdef FEATURE_WLAN_WAPI - hddLog(LOG1, FL("Setting WAPI AUTH Type and Encryption Mode values")); + hdd_notice("Setting WAPI AUTH Type and Encryption Mode values"); if (pAdapter->wapi_info.nWapiMode) { switch (pAdapter->wapi_info.wapiAuthMode) { case WAPI_AUTH_MODE_PSK: { - hddLog(LOG1, FL("WAPI AUTH TYPE: PSK: %d"), - pAdapter->wapi_info.wapiAuthMode); + hdd_notice("WAPI AUTH TYPE: PSK: %d", + pAdapter->wapi_info.wapiAuthMode); pRoamProfile->AuthType.numEntries = 1; pRoamProfile->AuthType.authType[0] = eCSR_AUTH_TYPE_WAPI_WAI_PSK; @@ -5648,8 +5515,8 @@ static int __iw_set_essid(struct net_device *dev, } case WAPI_AUTH_MODE_CERT: { - hddLog(LOG1, FL("WAPI AUTH TYPE: CERT: %d"), - pAdapter->wapi_info.wapiAuthMode); + hdd_notice("WAPI AUTH TYPE: CERT: %d", + pAdapter->wapi_info.wapiAuthMode); pRoamProfile->AuthType.numEntries = 1; pRoamProfile->AuthType.authType[0] = eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE; @@ -5658,7 +5525,7 @@ static int __iw_set_essid(struct net_device *dev, } /* End of switch */ if (pAdapter->wapi_info.wapiAuthMode == WAPI_AUTH_MODE_PSK || pAdapter->wapi_info.wapiAuthMode == WAPI_AUTH_MODE_CERT) { - hddLog(LOG1, FL("WAPI PAIRWISE/GROUP ENCRYPTION: WPI")); + hdd_notice("WAPI PAIRWISE/GROUP ENCRYPTION: WPI"); pRoamProfile->EncryptionType.numEntries = 1; pRoamProfile->EncryptionType.encryptionType[0] = eCSR_ENCRYPT_TYPE_WPI; @@ -5908,8 +5775,8 @@ static int __iw_set_auth(struct net_device *dev, struct iw_request_info *info, ucEncryptionType = eCSR_ENCRYPT_TYPE_WEP104_STATICKEY; } else { - hddLog(LOGW, FL("value %d UNKNOWN IW_AUTH_CIPHER"), - wrqu->param.value); + hdd_warn("value %d UNKNOWN IW_AUTH_CIPHER", + wrqu->param.value); return -EINVAL; } @@ -5953,7 +5820,7 @@ static int __iw_set_auth(struct net_device *dev, struct iw_request_info *info, eCSR_ENCRYPT_TYPE_WEP104_STATICKEY; } } else { - hddLog(LOGW, FL("value %d UNKNOWN IW_AUTH_CIPHER"), + hdd_warn("value %d UNKNOWN IW_AUTH_CIPHER", wrqu->param.value); return -EINVAL; } @@ -5991,7 +5858,7 @@ static int __iw_set_auth(struct net_device *dev, struct iw_request_info *info, #define IW_AUTH_KEY_MGMT_CCKM 8 /* Should be in linux/wireless.h */ /*Check for CCKM AKM type */ if (wrqu->param.value & IW_AUTH_KEY_MGMT_CCKM) { - hddLog(LOG1, FL("CCKM AKM Set %d"), wrqu->param.value); + hdd_info("CCKM AKM Set %d", wrqu->param.value); /* Set the CCKM bit in authKeyMgmt */ /* * Right now, this breaks all ref to authKeyMgmt because @@ -6035,14 +5902,12 @@ static int __iw_set_auth(struct net_device *dev, struct iw_request_info *info, case IW_AUTH_TKIP_COUNTERMEASURES: { if (wrqu->param.value) { - hddLog(LOG2, - "Counter Measure started %d", + hdd_info("Counter Measure started %d", wrqu->param.value); pWextState->mTKIPCounterMeasures = TKIP_COUNTER_MEASURE_STARTED; } else { - hddLog(LOG2, - "Counter Measure stopped=%d", + hdd_info("Counter Measure stopped=%d", wrqu->param.value); pWextState->mTKIPCounterMeasures = TKIP_COUNTER_MEASURE_STOPED; @@ -6057,8 +5922,8 @@ static int __iw_set_auth(struct net_device *dev, struct iw_request_info *info, default: - hddLog(LOGW, FL("called with unsupported auth type %d"), - wrqu->param.flags & IW_AUTH_INDEX); + hdd_warn("called with unsupported auth type %d", + wrqu->param.flags & IW_AUTH_INDEX); break; } @@ -6134,14 +5999,14 @@ static int __iw_get_auth(struct net_device *dev, struct iw_request_info *info, wrqu->param.value = IW_AUTH_ALG_SHARED_KEY; break; case eCSR_AUTH_TYPE_UNKNOWN: - hddLog(LOG1, FL("called with unknown auth type")); + hdd_info("called with unknown auth type"); wrqu->param.value = IW_AUTH_ALG_OPEN_SYSTEM; break; case eCSR_AUTH_TYPE_AUTOSWITCH: wrqu->param.value = IW_AUTH_ALG_OPEN_SYSTEM; break; case eCSR_AUTH_TYPE_WPA_PSK: - hddLog(LOG1, FL("called with WPA PSK auth type")); + hdd_info("called with WPA PSK auth type"); wrqu->param.value = IW_AUTH_ALG_OPEN_SYSTEM; return -EIO; @@ -6151,11 +6016,11 @@ static int __iw_get_auth(struct net_device *dev, struct iw_request_info *info, case eCSR_AUTH_TYPE_RSN_PSK_SHA256: case eCSR_AUTH_TYPE_RSN_8021X_SHA256: #endif - hddLog(LOG1, FL("called with RSN PSK auth type")); + hdd_info("called with RSN PSK auth type"); wrqu->param.value = IW_AUTH_ALG_OPEN_SYSTEM; return -EIO; default: - hddLog(LOGE, FL("called with unknown auth type")); + hdd_err("called with unknown auth type"); wrqu->param.value = IW_AUTH_ALG_OPEN_SYSTEM; return -EIO; } @@ -6179,8 +6044,8 @@ static int __iw_get_auth(struct net_device *dev, struct iw_request_info *info, wrqu->param.value = IW_AUTH_CIPHER_CCMP; break; default: - hddLog(LOG1, FL("called with unknown auth type %d"), - pRoamProfile->negotiatedUCEncryptionType); + hdd_notice("called with unknown auth type %d", + pRoamProfile->negotiatedUCEncryptionType); return -EIO; } } @@ -6205,14 +6070,14 @@ static int __iw_get_auth(struct net_device *dev, struct iw_request_info *info, wrqu->param.value = IW_AUTH_CIPHER_CCMP; break; default: - hddLog(LOG1, FL("called with unknown auth type %d"), - pRoamProfile->negotiatedMCEncryptionType); + hdd_info("called with unknown auth type %d", + pRoamProfile->negotiatedMCEncryptionType); return -EIO; } } - hddLog(LOG1, FL("called with auth type %d"), - pRoamProfile->AuthType.authType[0]); + hdd_info("called with auth type %d", + pRoamProfile->AuthType.authType[0]); EXIT(); return 0; } @@ -6272,7 +6137,7 @@ static int __iw_set_ap_address(struct net_device *dev, return ret; pMacAddress = (uint8_t *) wrqu->ap_addr.sa_data; - hddLog(LOG1, FL(" " MAC_ADDRESS_STR), MAC_ADDR_ARRAY(pMacAddress)); + hdd_info(" " MAC_ADDRESS_STR, MAC_ADDR_ARRAY(pMacAddress)); qdf_mem_copy(pHddStaCtx->conn_info.bssId.bytes, pMacAddress, sizeof(struct qdf_mac_addr)); EXIT(); diff --git a/core/hdd/src/wlan_hdd_cfg.c b/core/hdd/src/wlan_hdd_cfg.c index 4a21c6cbf385..27b227ec7751 100644 --- a/core/hdd/src/wlan_hdd_cfg.c +++ b/core/hdd/src/wlan_hdd_cfg.c @@ -2468,6 +2468,14 @@ REG_TABLE_ENTRY g_registry_table[] = { CFG_ENABLE_VHT_FOR_24GHZ_MIN, CFG_ENABLE_VHT_FOR_24GHZ_MAX), + + REG_VARIABLE(CFG_ENABLE_VENDOR_VHT_FOR_24GHZ_NAME, WLAN_PARAM_Integer, + struct hdd_config, enable_sap_vendor_vht, + VAR_FLAGS_OPTIONAL, + CFG_ENABLE_VENDOR_VHT_FOR_24GHZ_DEFAULT, + CFG_ENABLE_VENDOR_VHT_FOR_24GHZ_MIN, + CFG_ENABLE_VENDOR_VHT_FOR_24GHZ_MAX), + REG_DYNAMIC_VARIABLE(CFG_ENABLE_FAST_ROAM_IN_CONCURRENCY, WLAN_PARAM_Integer, struct hdd_config, bFastRoamInConIniFeatureEnabled, @@ -3734,6 +3742,14 @@ REG_TABLE_ENTRY g_registry_table[] = { CFG_ENABLE_EDCA_INI_MIN, CFG_ENABLE_EDCA_INI_MAX), + REG_VARIABLE(CFG_ENABLE_GO_CTS2SELF_FOR_STA, WLAN_PARAM_Integer, + struct hdd_config, enable_go_cts2self_for_sta, + VAR_FLAGS_OPTIONAL | + VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_ENABLE_GO_CTS2SELF_FOR_STA_DEFAULT, + CFG_ENABLE_GO_CTS2SELF_FOR_STA_MIN, + CFG_ENABLE_GO_CTS2SELF_FOR_STA_MAX), + REG_VARIABLE(CFG_EDCA_VO_CWMIN_VALUE_NAME, WLAN_PARAM_Integer, struct hdd_config, edca_vo_cwmin, VAR_FLAGS_OPTIONAL | @@ -3977,6 +3993,20 @@ REG_TABLE_ENTRY g_registry_table[] = { CFG_OPTIMIZE_CA_EVENT_DEFAULT, CFG_OPTIMIZE_CA_EVENT_DISABLE, CFG_OPTIMIZE_CA_EVENT_ENABLE), + + REG_VARIABLE(CFG_TX_AGGREGATION_SIZE, WLAN_PARAM_Integer, + struct hdd_config, tx_aggregation_size, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_TX_AGGREGATION_SIZE_DEFAULT, + CFG_TX_AGGREGATION_SIZE_MIN, + CFG_TX_AGGREGATION_SIZE_MAX), + + REG_VARIABLE(CFG_RX_AGGREGATION_SIZE, WLAN_PARAM_Integer, + struct hdd_config, rx_aggregation_size, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_RX_AGGREGATION_SIZE_DEFAULT, + CFG_RX_AGGREGATION_SIZE_MIN, + CFG_RX_AGGREGATION_SIZE_MAX), }; /** @@ -5546,6 +5576,9 @@ void hdd_cfg_print(hdd_context_t *pHddCtx) CFG_IGNORE_PEER_HT_MODE_NAME, pHddCtx->config->ignore_peer_ht_opmode); hdd_info("Name = [%s] Value = [%u]", + CFG_ENABLE_VENDOR_VHT_FOR_24GHZ_NAME, + pHddCtx->config->enable_sap_vendor_vht); + hdd_info("Name = [%s] Value = [%u]", CFG_ENABLE_FATAL_EVENT_TRIGGER, pHddCtx->config->enable_fatal_event); hdd_info("Name = [%s] Value = [%u]", @@ -5646,6 +5679,9 @@ void hdd_cfg_print(hdd_context_t *pHddCtx) hdd_info("Name = [%s] Value = [%d]", CFG_FILTER_MULTICAST_REPLAY_NAME, pHddCtx->config->multicast_replay_filter); + hdd_info("Name = [%s] Value = [%u]", + CFG_ENABLE_GO_CTS2SELF_FOR_STA, + pHddCtx->config->enable_go_cts2self_for_sta); } @@ -6893,6 +6929,8 @@ QDF_STATUS hdd_set_sme_config(hdd_context_t *pHddCtx) pConfig->enable_txbf_sap_mode; smeConfig->csrConfig.enable2x2 = pConfig->enable2x2; smeConfig->csrConfig.enableVhtFor24GHz = pConfig->enableVhtFor24GHzBand; + smeConfig->csrConfig.vendor_vht_sap = + pConfig->enable_sap_vendor_vht; smeConfig->csrConfig.enableMuBformee = pConfig->enableMuBformee; smeConfig->csrConfig.enableVhtpAid = pConfig->enableVhtpAid; smeConfig->csrConfig.enableVhtGid = pConfig->enableVhtGid; @@ -7143,6 +7181,11 @@ QDF_STATUS hdd_set_sme_config(hdd_context_t *pHddCtx) CSR_STA_ROAM_POLICY_DFS_ENABLED; smeConfig->csrConfig.sta_roam_policy_params.skip_unsafe_channels = 0; + smeConfig->csrConfig.tx_aggregation_size = + pHddCtx->config->tx_aggregation_size; + smeConfig->csrConfig.rx_aggregation_size = + pHddCtx->config->rx_aggregation_size; + status = sme_update_config(pHddCtx->hHal, smeConfig); if (!QDF_IS_STATUS_SUCCESS(status)) { hddLog(LOGE, "sme_update_config() return failure %d", diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index 1da11ee297d6..1d40f77e2804 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/core/hdd/src/wlan_hdd_cfg80211.c @@ -3870,6 +3870,8 @@ wlan_hdd_wifi_config_policy[QCA_WLAN_VENDOR_ATTR_CONFIG_MAX + 1] = { [QCA_WLAN_VENDOR_ATTR_CONFIG_STATS_AVG_FACTOR] = {.type = NLA_U16 }, [QCA_WLAN_VENDOR_ATTR_CONFIG_GUARD_TIME] = {.type = NLA_U32 }, [QCA_WLAN_VENDOR_ATTR_CONFIG_CHANNEL_AVOIDANCE_IND] = {.type = NLA_U8 }, + [QCA_WLAN_VENDOR_ATTR_CONFIG_TX_MPDU_AGGREGATION] = {.type = NLA_U8 }, + [QCA_WLAN_VENDOR_ATTR_CONFIG_RX_MPDU_AGGREGATION] = {.type = NLA_U8 }, }; /** @@ -3938,6 +3940,8 @@ __wlan_hdd_cfg80211_wifi_configuration_set(struct wiphy *wiphy, bool vendor_ie_present = false, access_policy_present = false; uint16_t scan_ie_len = 0; uint8_t *scan_ie; + struct sir_set_tx_rx_aggregation_size request; + QDF_STATUS qdf_status; ENTER_DEV(dev); @@ -4096,6 +4100,44 @@ __wlan_hdd_cfg80211_wifi_configuration_set(struct wiphy *wiphy, } else ret_val = -EPERM; } + + if (tb[QCA_WLAN_VENDOR_ATTR_CONFIG_TX_MPDU_AGGREGATION] || + tb[QCA_WLAN_VENDOR_ATTR_CONFIG_RX_MPDU_AGGREGATION]) { + /* if one is specified, both must be specified */ + if (!tb[QCA_WLAN_VENDOR_ATTR_CONFIG_TX_MPDU_AGGREGATION] || + !tb[QCA_WLAN_VENDOR_ATTR_CONFIG_RX_MPDU_AGGREGATION]) { + hdd_err("Both TX and RX MPDU Aggregation required"); + return -EINVAL; + } + + request.tx_aggregation_size = nla_get_u8( + tb[QCA_WLAN_VENDOR_ATTR_CONFIG_TX_MPDU_AGGREGATION]); + request.rx_aggregation_size = nla_get_u8( + tb[QCA_WLAN_VENDOR_ATTR_CONFIG_RX_MPDU_AGGREGATION]); + request.vdev_id = adapter->sessionId; + + if (request.tx_aggregation_size >= + CFG_TX_AGGREGATION_SIZE_MIN && + request.tx_aggregation_size <= + CFG_TX_AGGREGATION_SIZE_MAX && + request.rx_aggregation_size >= + CFG_RX_AGGREGATION_SIZE_MIN && + request.rx_aggregation_size <= + CFG_RX_AGGREGATION_SIZE_MAX) { + qdf_status = wma_set_tx_rx_aggregation_size(&request); + if (qdf_status != QDF_STATUS_SUCCESS) { + hdd_err("failed to set aggr sizes err %d", + qdf_status); + ret_val = -EPERM; + } + } else { + hdd_err("TX %d RX %d MPDU aggr size not in range", + request.tx_aggregation_size, + request.rx_aggregation_size); + ret_val = -EINVAL; + } + } + return ret_val; } @@ -12079,14 +12121,11 @@ static int wlan_hdd_try_disconnect(hdd_adapter_t *pAdapter) { unsigned long rc; hdd_station_ctx_t *pHddStaCtx; - eMib_dot11DesiredBssType connectedBssType; int status, result = 0; pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); - hdd_conn_get_connected_bss_type(pHddStaCtx, &connectedBssType); - - if ((eMib_dot11DesiredBssType_independent == connectedBssType) || + if ((QDF_IBSS_MODE == pAdapter->device_mode) || (eConnectionState_Associated == pHddStaCtx->conn_info.connState) || (eConnectionState_Connecting == pHddStaCtx->conn_info.connState) || (eConnectionState_IbssConnected == pHddStaCtx->conn_info.connState)) { diff --git a/core/hdd/src/wlan_hdd_cfg80211.h b/core/hdd/src/wlan_hdd_cfg80211.h index 80dbc428c50b..37fa4e6ab79a 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.h +++ b/core/hdd/src/wlan_hdd_cfg80211.h @@ -2319,6 +2319,10 @@ enum qca_access_policy { * @QCA_WLAN_VENDOR_ATTR_CONFIG_STATS_AVG_FACTOR: stats avg. factor * @QCA_WLAN_VENDOR_ATTR_CONFIG_GUARD_TIME: guard time * @QCA_WLAN_VENDOR_ATTR_CONFIG_FINE_TIME_MEASUREMENT: fine time measurement + * @QCA_WLAN_VENDOR_ATTR_CONFIG_TX_MPDU_AGGREGATION: + * Tx aggregation size (8-bit unsigned value) + * @QCA_WLAN_VENDOR_ATTR_CONFIG_RX_MPDU_AGGREGATION: + * Rx aggregation size (8-bit unsigned value) * @QCA_WLAN_VENDOR_ATTR_CONFIG_SCAN_DEFAULT_IES: Update the default scan IEs * @QCA_WLAN_VENDOR_ATTR_CONFIG_GENERIC_COMMAND: * Unsigned 32-bit value attribute for generic commands @@ -2349,6 +2353,10 @@ enum qca_wlan_vendor_config { QCA_WLAN_VENDOR_ATTR_CONFIG_FINE_TIME_MEASUREMENT, QCA_WLAN_VENDOR_ATTR_CONFIG_PENALIZE_AFTER_NCONS_BEACON_MISS, QCA_WLAN_VENDOR_ATTR_CONFIG_CHANNEL_AVOIDANCE_IND, + + QCA_WLAN_VENDOR_ATTR_CONFIG_TX_MPDU_AGGREGATION, + QCA_WLAN_VENDOR_ATTR_CONFIG_RX_MPDU_AGGREGATION, + /* Attribute used to set scan default IEs to the driver. * * These IEs can be used by scan operations that will be initiated by diff --git a/core/hdd/src/wlan_hdd_hostapd.c b/core/hdd/src/wlan_hdd_hostapd.c index 3f20e4e160af..5ca394f7fcb3 100644 --- a/core/hdd/src/wlan_hdd_hostapd.c +++ b/core/hdd/src/wlan_hdd_hostapd.c @@ -6942,10 +6942,21 @@ int wlan_hdd_cfg80211_start_bss(hdd_adapter_t *pHostapdAdapter, pConfig->enOverLapCh = iniConfig->gEnableOverLapCh; pConfig->dtim_period = pBeacon->dtim_period; - if (pHddCtx->acs_policy.acs_channel) - pConfig->channel = pHddCtx->acs_policy.acs_channel; - mode = pHddCtx->acs_policy.acs_dfs_mode; - pConfig->acs_dfs_mode = wlan_hdd_get_dfs_mode(mode); + hdd_info("acs_mode %d", pConfig->acs_cfg.acs_mode); + + if (pConfig->acs_cfg.acs_mode == true) { + hdd_info("acs_channel %d, acs_dfs_mode %d", + pHddCtx->acs_policy.acs_channel, + pHddCtx->acs_policy.acs_dfs_mode); + + if (pHddCtx->acs_policy.acs_channel) + pConfig->channel = pHddCtx->acs_policy.acs_channel; + mode = pHddCtx->acs_policy.acs_dfs_mode; + pConfig->acs_dfs_mode = wlan_hdd_get_dfs_mode(mode); + } + + hdd_info("pConfig->channel %d, pConfig->acs_dfs_mode %d", + pConfig->channel, pConfig->acs_dfs_mode); hdd_info("****pConfig->dtim_period=%d***", pConfig->dtim_period); @@ -7250,6 +7261,40 @@ int wlan_hdd_cfg80211_start_bss(hdd_adapter_t *pHostapdAdapter, acl_entry++; } } + if (!pHddCtx->config->force_sap_acs) { + pIe = wlan_hdd_cfg80211_get_ie_ptr( + &pMgmt_frame->u.beacon.variable[0], + pBeacon->head_len, WLAN_EID_SUPP_RATES); + + if (pIe != NULL) { + pIe++; + pConfig->supported_rates.numRates = pIe[0]; + pIe++; + for (i = 0; + i < pConfig->supported_rates.numRates; i++) { + if (pIe[i]) { + pConfig->supported_rates.rate[i] = pIe[i]; + hdd_info("Configured Supported rate is %2x", + pConfig->supported_rates.rate[i]); + } + } + } + pIe = wlan_hdd_cfg80211_get_ie_ptr(pBeacon->tail, + pBeacon->tail_len, + WLAN_EID_EXT_SUPP_RATES); + if (pIe != NULL) { + pIe++; + pConfig->extended_rates.numRates = pIe[0]; + pIe++; + for (i = 0; i < pConfig->extended_rates.numRates; i++) { + if (pIe[i]) { + pConfig->extended_rates.rate[i] = pIe[i]; + hdd_info("Configured ext Supported rate is %2x", + pConfig->extended_rates.rate[i]); + } + } + } + } wlan_hdd_set_sap_hwmode(pHostapdAdapter); qdf_mem_zero(&sme_config, sizeof(tSmeConfigParams)); diff --git a/core/hdd/src/wlan_hdd_lro.c b/core/hdd/src/wlan_hdd_lro.c index 857d2c154a7a..35902f28fee5 100644 --- a/core/hdd/src/wlan_hdd_lro.c +++ b/core/hdd/src/wlan_hdd_lro.c @@ -461,7 +461,9 @@ void hdd_lro_flush(void *data) while (NULL != adapter_node && QDF_STATUS_SUCCESS == status) { adapter = adapter_node->pAdapter; hdd_lro = &adapter->lro_info; - if (adapter->dev->features & NETIF_F_LRO) { + if (adapter->dev == NULL) { + hdd_err("vdev interface going down"); + } else if (adapter->dev->features & NETIF_F_LRO) { qdf_spin_lock_bh(&hdd_lro->lro_mgr_arr_access_lock); for (i = 0; i < hdd_lro->lro_mgr->max_desc; i++) { if (hdd_lro->lro_mgr->lro_arr[i].active) { diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index 82be6b96f3f3..fda3035e02ab 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -4795,6 +4795,7 @@ void __hdd_wlan_exit(void) hdd_ipa_uc_force_pipe_shutdown(hdd_ctx); memdump_deinit(); + hdd_driver_memdump_deinit(); /* Do all the cleanup before deregistering the driver */ hdd_wlan_exit(hdd_ctx); @@ -7724,6 +7725,79 @@ static void hdd_iface_change_callback(void *priv) } /** + * hdd_state_info_dump() - prints state information of hdd layer + * @buf: buffer pointer + * @size: size of buffer to be filled + * + * This function is used to dump state information of hdd layer + * + * Return: None + */ +static void hdd_state_info_dump(char **buf_ptr, uint16_t *size) +{ + hdd_context_t *hdd_ctx; + hdd_adapter_list_node_t *adapter_node = NULL, *next = NULL; + QDF_STATUS status; + hdd_station_ctx_t *hdd_sta_ctx; + hdd_adapter_t *adapter; + uint16_t len = 0; + char *buf = *buf_ptr; + + hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD); + if (!hdd_ctx) { + hdd_err("Failed to get hdd context "); + return; + } + + hdd_notice("size of buffer: %d", *size); + + len += scnprintf(buf + len, *size - len, + "\n isWiphySuspended %d", hdd_ctx->isWiphySuspended); + len += scnprintf(buf + len, *size - len, + "\n isMcThreadSuspended %d", + hdd_ctx->isMcThreadSuspended); + + status = hdd_get_front_adapter(hdd_ctx, &adapter_node); + + while (NULL != adapter_node && QDF_STATUS_SUCCESS == status) { + adapter = adapter_node->pAdapter; + if (adapter->dev) + len += scnprintf(buf + len, *size - len, + "\n device name: %s", adapter->dev->name); + len += scnprintf(buf + len, *size - len, + "\n device_mode: %d", adapter->device_mode); + switch (adapter->device_mode) { + case QDF_STA_MODE: + case QDF_P2P_CLIENT_MODE: + hdd_sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(adapter); + len += scnprintf(buf + len, *size - len, + "\n connState: %d", + hdd_sta_ctx->conn_info.connState); + break; + + default: + break; + } + status = hdd_get_next_adapter(hdd_ctx, adapter_node, &next); + adapter_node = next; + } + + *size -= len; + *buf_ptr += len; +} + +/** + * hdd_register_debug_callback() - registration function for hdd layer + * to print hdd state information + * + * Return: None + */ +static void hdd_register_debug_callback(void) +{ + qdf_register_debug_callback(QDF_MODULE_ID_HDD, &hdd_state_info_dump); +} + +/** * hdd_wlan_startup() - HDD init function * @dev: Pointer to the underlying device * @@ -7817,6 +7891,8 @@ int hdd_wlan_startup(struct device *dev) hdd_release_rtnl_lock(); rtnl_held = false; + if (hdd_ctx->config->enable_go_cts2self_for_sta) + sme_set_cts2self_for_p2p_go(hdd_ctx->hHal); #ifdef FEATURE_WLAN_AP_AP_ACS_OPTIMIZE status = qdf_mc_timer_init(&hdd_ctx->skip_acs_scan_timer, QDF_TIMER_TYPE_SW, @@ -7852,6 +7928,7 @@ int hdd_wlan_startup(struct device *dev) memdump_init(); hdd_encrypt_decrypt_init(hdd_ctx); + hdd_driver_memdump_init(); if (hdd_ctx->config->fIsImpsEnabled) hdd_set_idle_ps_config(hdd_ctx, true); @@ -8802,6 +8879,7 @@ int hdd_init(void) } hdd_trace_init(); + hdd_register_debug_callback(); err_out: return ret; diff --git a/core/hdd/src/wlan_hdd_memdump.c b/core/hdd/src/wlan_hdd_memdump.c index 1afe3fd7569c..195d066018b2 100644 --- a/core/hdd/src/wlan_hdd_memdump.c +++ b/core/hdd/src/wlan_hdd_memdump.c @@ -630,3 +630,237 @@ void memdump_deinit(void) if (!QDF_IS_STATUS_SUCCESS(qdf_status)) hdd_err("Failed to deallocate timer"); } + +#ifdef MULTI_IF_NAME +#define PROCFS_DRIVER_DUMP_DIR "debugdriver" MULTI_IF_NAME +#else +#define PROCFS_DRIVER_DUMP_DIR "debugdriver" +#endif +#define PROCFS_DRIVER_DUMP_NAME "driverdump" +#define PROCFS_DRIVER_DUMP_PERM 0444 + +static struct proc_dir_entry *proc_file_driver, *proc_dir_driver; + +/** + * hdd_driver_mem_cleanup() - Frees memory allocated for + * driver dump + * + * This function unallocates driver dump memory. + * + * Return: None + */ +static void hdd_driver_mem_cleanup(void) +{ + hdd_context_t *hdd_ctx; + + hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD); + if (!hdd_ctx) { + hdd_err("Invalid HDD context"); + return; + } + + if (hdd_ctx->driver_dump_mem) { + qdf_mem_free(hdd_ctx->driver_dump_mem); + hdd_ctx->driver_dump_mem = NULL; + } +} + + +/** + * hdd_driver_memdump_read() - perform read operation in driver + * memory dump proc file + * @file - handle for the proc file. + * @buf - pointer to user space buffer. + * @count - number of bytes to be read. + * @pos - offset in the from buffer. + * + * This function performs read operation for the driver memory dump proc file. + * + * Return: number of bytes read on success, error code otherwise. + */ +static ssize_t hdd_driver_memdump_read(struct file *file, char __user *buf, + size_t count, loff_t *pos) +{ + int status; + QDF_STATUS qdf_status; + hdd_context_t *hdd_ctx; + size_t no_of_bytes_read = 0; + + hdd_ctx = memdump_get_file_data(file); + + hdd_notice("Read req for size:%zu pos:%llu", count, *pos); + status = wlan_hdd_validate_context(hdd_ctx); + if (status != 0) + return -EINVAL; + + if (*pos < 0) { + hdd_err("Invalid start offset for memdump read"); + return -EINVAL; + } else if (!count || (hdd_ctx->driver_dump_size && + (*pos >= hdd_ctx->driver_dump_size))) { + hdd_err("No more data to copy"); + return 0; + } else if ((*pos == 0) || (hdd_ctx->driver_dump_mem == NULL)) { + /* + * Allocate memory for Driver memory dump. + */ + if (!hdd_ctx->driver_dump_mem) { + hdd_ctx->driver_dump_mem = + qdf_mem_malloc(DRIVER_MEM_DUMP_SIZE); + if (!hdd_ctx->driver_dump_mem) { + hdd_err("qdf_mem_malloc failed"); + return -ENOMEM; + } + } + + qdf_status = qdf_state_info_dump_all(hdd_ctx->driver_dump_mem, + DRIVER_MEM_DUMP_SIZE, + &hdd_ctx->driver_dump_size); + /* + * If qdf_status is QDF_STATUS_E_NOMEM, then memory allocated is + * insufficient to dump driver information. This print can give + * information to allocate more memory if more information from + * each layer is added in future. + */ + if (qdf_status != QDF_STATUS_SUCCESS) + hdd_err("Error in dump driver information, status %d", + qdf_status); + hdd_notice("driver_dump_size: %d", + hdd_ctx->driver_dump_size); + } + + if (count > hdd_ctx->driver_dump_size - *pos) + no_of_bytes_read = hdd_ctx->driver_dump_size - *pos; + else + no_of_bytes_read = count; + + if (copy_to_user(buf, hdd_ctx->driver_dump_mem + *pos, + no_of_bytes_read)) { + hdd_err("copy to user space failed"); + return -EFAULT; + } + + /* offset(pos) should be updated here based on the copy done */ + *pos += no_of_bytes_read; + + /* Entire driver memory dump copy completed */ + if (*pos >= hdd_ctx->driver_dump_size) + hdd_driver_mem_cleanup(); + + return no_of_bytes_read; +} + + +/** + * struct driver_dump_fops - file operations for driver dump feature + * @read - read function for driver dump operation. + * + * This structure initialize the file operation handle for memory + * dump feature + */ +static const struct file_operations driver_dump_fops = { +read: hdd_driver_memdump_read +}; + +/** + * hdd_driver_memdump_procfs_init() - Initialize procfs for driver memory dump + * + * This function create file under proc file system to be used later for + * processing driver memory dump + * + * Return: 0 on success, error code otherwise. + */ +static int hdd_driver_memdump_procfs_init(void) +{ + hdd_context_t *hdd_ctx; + + hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD); + if (!hdd_ctx) { + hdd_err("Invalid HDD context"); + return -EINVAL; + } + + proc_dir_driver = proc_mkdir(PROCFS_DRIVER_DUMP_DIR, NULL); + if (proc_dir_driver == NULL) { + pr_debug("Error: Could not initialize /proc/%s\n", + PROCFS_DRIVER_DUMP_DIR); + return -ENOMEM; + } + + proc_file_driver = proc_create_data(PROCFS_DRIVER_DUMP_NAME, + PROCFS_DRIVER_DUMP_PERM, proc_dir_driver, + &driver_dump_fops, hdd_ctx); + if (proc_file_driver == NULL) { + remove_proc_entry(PROCFS_DRIVER_DUMP_NAME, proc_dir_driver); + pr_debug("Error: Could not initialize /proc/%s\n", + PROCFS_DRIVER_DUMP_NAME); + return -ENOMEM; + } + + pr_debug("/proc/%s/%s created\n", PROCFS_DRIVER_DUMP_DIR, + PROCFS_DRIVER_DUMP_NAME); + return 0; +} + +/** + * hdd_driver_memdump_procfs_remove() - Remove file/dir under procfs + * for driver memory dump + * + * This function removes file/dir under proc file system that was + * processing driver memory dump + * + * Return: None + */ +static void hdd_driver_memdump_procfs_remove(void) +{ + remove_proc_entry(PROCFS_DRIVER_DUMP_NAME, proc_dir_driver); + pr_debug("/proc/%s/%s removed\n", PROCFS_DRIVER_DUMP_DIR, + PROCFS_DRIVER_DUMP_NAME); + remove_proc_entry(PROCFS_DRIVER_DUMP_DIR, NULL); + pr_debug("/proc/%s removed\n", PROCFS_DRIVER_DUMP_DIR); +} + +/** + * hdd_driver_memdump_init() - Intialization function for driver + * memory dump feature + * + * This function creates proc file for driver memdump feature + * + * Return - 0 on success, error otherwise + */ +int hdd_driver_memdump_init(void) +{ + int status; + + if (hdd_get_conparam() == QDF_GLOBAL_FTM_MODE) { + hdd_err("Not initializing memdump in FTM mode"); + return -EINVAL; + } + + status = hdd_driver_memdump_procfs_init(); + if (status) { + hdd_err("Failed to create proc file"); + return status; + } + + return 0; +} + +/** + * hdd_driver_memdump_deinit() - De initialize driver memdump feature + * + * This function removes proc file created for driver memdump feature. + * + * Return: None + */ +void hdd_driver_memdump_deinit(void) +{ + if (hdd_get_conparam() == QDF_GLOBAL_FTM_MODE) { + hdd_err("Not deinitializing memdump in FTM mode"); + return; + } + + hdd_driver_memdump_procfs_remove(); + + hdd_driver_mem_cleanup(); +} diff --git a/core/hdd/src/wlan_hdd_power.c b/core/hdd/src/wlan_hdd_power.c index 7e82be6f9ae7..26e5f6641987 100644 --- a/core/hdd/src/wlan_hdd_power.c +++ b/core/hdd/src/wlan_hdd_power.c @@ -74,6 +74,7 @@ #include "cds_concurrency.h" #include "cdp_txrx_flow_ctrl_v2.h" #include "pld_common.h" +#include "wlan_hdd_driver_ops.h" /* Preprocessor definitions and constants */ #define HDD_SSR_BRING_UP_TIME 30000 @@ -2349,3 +2350,159 @@ int hdd_set_qpower_config(hdd_context_t *hddctx, hdd_adapter_t *adapter, } return 0; } + +#ifdef WLAN_SUSPEND_RESUME_TEST +/* + * On Rome/iHelium there are 12 CE irqs and #2 is the wake irq. This may not be + * a valid assumption on future platforms. + */ +#define CE_IRQ_COUNT 12 +#define CE_WAKE_IRQ 2 +static struct wiphy *g_wiphy; + +#define HDD_FA_SUSPENDED_BIT (0) +static unsigned long fake_apps_state; + +static int __hdd_wlan_fake_apps_resume(struct wiphy *wiphy); + +/** + * hdd_wlan_fake_apps_resume_irq_callback() - Irq callback function for resuming + * from unit-test initiated suspend from irq wakeup signal + * @val: interrupt val + * + * Resume wlan after getting very 1st CE interrupt from target + * + * Return: none + */ +static void hdd_wlan_fake_apps_resume_irq_callback(uint32_t val) +{ + hdd_info("Trigger unit-test resume WLAN; val: 0x%x", val); + + QDF_BUG(g_wiphy); + __hdd_wlan_fake_apps_resume(g_wiphy); + g_wiphy = NULL; +} + +/** + * hdd_wlan_fake_apps_suspend() - Initiate a unit-test triggered suspend + * @wiphy: wiphy struct from a validated hdd context + * + * Return: Zero on success, suspend related non-zero error code on failure + */ +int hdd_wlan_fake_apps_suspend(struct wiphy *wiphy) +{ + qdf_device_t qdf_dev = cds_get_context(QDF_MODULE_ID_QDF_DEVICE); + struct hif_opaque_softc *hif_ctx = cds_get_context(QDF_MODULE_ID_HIF); + pm_message_t state; + int i, resume_err, suspend_err; + + hdd_info("Unit-test suspend WLAN"); + if (test_and_set_bit(HDD_FA_SUSPENDED_BIT, &fake_apps_state)) { + hdd_info("Already unit-test suspended; Nothing to do"); + return 0; + } + + suspend_err = wlan_hdd_cfg80211_suspend_wlan(wiphy, NULL); + if (suspend_err) + goto resume_done; + + state.event = PM_EVENT_SUSPEND; + suspend_err = wlan_hdd_bus_suspend(state); + if (suspend_err) + goto cfg80211_resume; + + /* simulate kernel disabling irqs */ + for (i = 0; i < CE_IRQ_COUNT; i++) + pld_disable_irq(qdf_dev->dev, i); + + suspend_err = wlan_hdd_bus_suspend_noirq(); + if (suspend_err) + goto enable_irqs_and_bus_resume; + + /* re-enable wake irq */ + pld_enable_irq(qdf_dev->dev, CE_WAKE_IRQ); + + /* pass wiphy to callback via global variable */ + g_wiphy = wiphy; + hif_fake_apps_suspend(hif_ctx, hdd_wlan_fake_apps_resume_irq_callback); + + return 0; + +enable_irqs_and_bus_resume: + /* re-enable irqs */ + for (i = 0; i < CE_IRQ_COUNT; i++) + pld_enable_irq(qdf_dev->dev, i); + + resume_err = wlan_hdd_bus_resume(); + QDF_BUG(resume_err == 0); + +cfg80211_resume: + resume_err = wlan_hdd_cfg80211_resume_wlan(wiphy); + QDF_BUG(resume_err == 0); + +resume_done: + clear_bit(HDD_FA_SUSPENDED_BIT, &fake_apps_state); + hdd_err("Unit-test suspend failed: %d", suspend_err); + return suspend_err; +} + +/** + * hdd_wlan_fake_apps_resume() - Resume from unit-test triggered suspend + * @wiphy: wiphy struct from a validated hdd context + * + * Return: Zero on success, calls QDF_BUG() on failure + */ +int hdd_wlan_fake_apps_resume(struct wiphy *wiphy) +{ + struct hif_opaque_softc *hif_ctx = cds_get_context(QDF_MODULE_ID_HIF); + int err; + + hif_fake_apps_resume(hif_ctx); + err = __hdd_wlan_fake_apps_resume(wiphy); + if (err) { + hif_fake_apps_suspend(hif_ctx, + hdd_wlan_fake_apps_resume_irq_callback); + return err; + } + + return 0; +} + +/** + * __hdd_wlan_fake_apps_resume() - The core logic for + * hdd_wlan_fake_apps_resume() skipping the call to hif_fake_apps_resume(), + * which is only need for non-irq resume + * @wiphy: wiphy struct from a validated hdd context + * + * Return: Zero on success, calls QDF_BUG() on failure + */ +static int __hdd_wlan_fake_apps_resume(struct wiphy *wiphy) +{ + qdf_device_t qdf_dev = cds_get_context(QDF_MODULE_ID_QDF_DEVICE); + int i, resume_err; + + hdd_info("Unit-test resume WLAN"); + if (!test_and_clear_bit(HDD_FA_SUSPENDED_BIT, &fake_apps_state)) { + hdd_info("Not unit-test suspended; Nothing to do"); + return 0; + } + + /* disable wake irq */ + pld_disable_irq(qdf_dev->dev, CE_WAKE_IRQ); + + resume_err = wlan_hdd_bus_resume_noirq(); + QDF_BUG(resume_err == 0); + + /* simulate kernel enable irqs */ + for (i = 0; i < CE_IRQ_COUNT; i++) + pld_enable_irq(qdf_dev->dev, i); + + resume_err = wlan_hdd_bus_resume(); + QDF_BUG(resume_err == 0); + + resume_err = wlan_hdd_cfg80211_resume_wlan(wiphy); + QDF_BUG(resume_err == 0); + + return 0; +} +#endif diff --git a/core/hdd/src/wlan_hdd_regulatory.c b/core/hdd/src/wlan_hdd_regulatory.c index 69218fba8a9e..bda6e48d4b6d 100644 --- a/core/hdd/src/wlan_hdd_regulatory.c +++ b/core/hdd/src/wlan_hdd_regulatory.c @@ -488,18 +488,18 @@ int hdd_regulatory_init(hdd_context_t *hdd_ctx, struct wiphy *wiphy) reg_info = &hdd_ctx->reg; - hdd_regulatory_wiphy_init(hdd_ctx, reg_info, wiphy); - - hdd_process_regulatory_data(hdd_ctx, wiphy, true); - - reg_info->cc_src = SOURCE_DRIVER; - ret_val = cds_fill_some_regulatory_info(reg_info); if (ret_val) { hdd_err("incorrect BDF regulatory data"); return ret_val; } + hdd_regulatory_wiphy_init(hdd_ctx, reg_info, wiphy); + + hdd_process_regulatory_data(hdd_ctx, wiphy, true); + + reg_info->cc_src = SOURCE_DRIVER; + cds_put_default_country(reg_info->alpha2); init_completion(&hdd_ctx->reg_init); diff --git a/core/hdd/src/wlan_hdd_wext.c b/core/hdd/src/wlan_hdd_wext.c index 7074de2d6bd2..397bdcd2d019 100644 --- a/core/hdd/src/wlan_hdd_wext.c +++ b/core/hdd/src/wlan_hdd_wext.c @@ -92,6 +92,7 @@ #ifdef WLAN_SUSPEND_RESUME_TEST #include "wlan_hdd_driver_ops.h" #include "hif.h" +#include "pld_common.h" #endif #define HDD_FINISH_ULA_TIME_OUT 800 @@ -439,10 +440,9 @@ static const hdd_freq_chan_map_t freq_chan_map[] = { #define WE_ENABLE_FW_PROFILE 4 #define WE_SET_FW_PROFILE_HIST_INTVL 5 -#ifdef WLAN_SUSPEND_RESUME_TEST +/* Private sub-ioctl for initiating WoW suspend without Apps suspend */ #define WE_SET_WLAN_SUSPEND 6 #define WE_SET_WLAN_RESUME 7 -#endif /* (SIOCIWFIRSTPRIV + 29) is currently unused */ @@ -2037,7 +2037,6 @@ static int __iw_set_mode(struct net_device *dev, hdd_context_t *hdd_ctx; tCsrRoamProfile *pRoamProfile; eCsrRoamBssType LastBSSType; - eMib_dot11DesiredBssType connectedBssType; struct hdd_config *pConfig; struct wireless_dev *wdev; int ret; @@ -2085,8 +2084,8 @@ static int __iw_set_mode(struct net_device *dev, /* the BSS mode changed. We need to issue disconnect * if connected or in IBSS disconnect state */ - if (hdd_conn_get_connected_bss_type - (WLAN_HDD_GET_STATION_CTX_PTR(pAdapter), &connectedBssType) + if (hdd_conn_is_connected + (WLAN_HDD_GET_STATION_CTX_PTR(pAdapter)) || (eCSR_BSS_TYPE_START_IBSS == LastBSSType)) { QDF_STATUS qdf_status; /* need to issue a disconnect to CSR. */ @@ -9783,25 +9782,6 @@ static int wlan_hdd_set_mon_chan(hdd_adapter_t *adapter, uint32_t chan, return qdf_status_to_os_return(status); } -#ifdef WLAN_SUSPEND_RESUME_TEST -static void *g_wiphy; - -/** - * hdd_wlan_trigger_resume() - resume wlan - * @val: interrupt val - * - * Resume wlan after getting very 1st CE interrupt from target - * - * Return: none - */ -static void hdd_wlan_trigger_resume(uint32_t val) -{ - hdd_err("Resume WLAN val 0x%x", val); - wlan_hdd_bus_resume(); - wlan_hdd_cfg80211_resume_wlan(g_wiphy); -} -#endif - static int __iw_set_two_ints_getnone(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra) @@ -9811,10 +9791,6 @@ static int __iw_set_two_ints_getnone(struct net_device *dev, int sub_cmd = value[0]; int ret; hdd_context_t *hdd_ctx = WLAN_HDD_GET_CTX(pAdapter); -#ifdef WLAN_SUSPEND_RESUME_TEST - pm_message_t state; -#endif - ENTER_DEV(dev); @@ -9878,21 +9854,12 @@ static int __iw_set_two_ints_getnone(struct net_device *dev, case WE_SET_MON_MODE_CHAN: ret = wlan_hdd_set_mon_chan(pAdapter, value[1], value[2]); break; -#ifdef WLAN_SUSPEND_RESUME_TEST case WE_SET_WLAN_SUSPEND: - hdd_err("Suspend WLAN"); - g_wiphy = hdd_ctx->wiphy; - state.event = PM_EVENT_SUSPEND; - ret = wlan_hdd_cfg80211_suspend_wlan(hdd_ctx->wiphy, NULL); - wlan_hdd_bus_suspend(state); - hif_fake_apps_suspend(hdd_wlan_trigger_resume); + ret = hdd_wlan_fake_apps_suspend(hdd_ctx->wiphy); break; case WE_SET_WLAN_RESUME: - hdd_err("Resume WLAN"); - wlan_hdd_bus_resume(); - ret = wlan_hdd_cfg80211_resume_wlan(hdd_ctx->wiphy); + ret = hdd_wlan_fake_apps_resume(hdd_ctx->wiphy); break; -#endif default: hdd_err("Invalid IOCTL command %d", sub_cmd); break; diff --git a/core/mac/inc/qwlan_version.h b/core/mac/inc/qwlan_version.h index 7e897c074a79..d4785941ed5e 100644 --- a/core/mac/inc/qwlan_version.h +++ b/core/mac/inc/qwlan_version.h @@ -41,9 +41,9 @@ #define QWLAN_VERSION_MAJOR 5 #define QWLAN_VERSION_MINOR 1 #define QWLAN_VERSION_PATCH 0 -#define QWLAN_VERSION_EXTRA "J" +#define QWLAN_VERSION_EXTRA "S" #define QWLAN_VERSION_BUILD 29 -#define QWLAN_VERSIONSTR "5.1.0.29J" +#define QWLAN_VERSIONSTR "5.1.0.29S" #endif /* QWLAN_VERSION_H */ diff --git a/core/mac/inc/sir_api.h b/core/mac/inc/sir_api.h index 362275c14bd3..58d0cd20635c 100644 --- a/core/mac/inc/sir_api.h +++ b/core/mac/inc/sir_api.h @@ -695,6 +695,7 @@ typedef struct sSirSmeStartBssReq { bool obssEnabled; uint8_t sap_dot11mc; uint8_t beacon_tx_rate; + bool vendor_vht_sap; } tSirSmeStartBssReq, *tpSirSmeStartBssReq; @@ -6451,6 +6452,18 @@ struct sme_ndp_peer_ind { #endif /* WLAN_FEATURE_NAN_DATAPATH */ /** + * struct sir_set_tx_rx_aggregation_size - sets tx rx aggregation size + * @vdev_id: vdev id of the session + * @tx_aggregation_size: Tx aggregation size + * @rx_aggregation_size: Rx aggregation size + */ +struct sir_set_tx_rx_aggregation_size { + uint8_t vdev_id; + uint32_t tx_aggregation_size; + uint32_t rx_aggregation_size; +}; + +/** * struct sir_p2p_lo_start - p2p listen offload start * @vdev_id: vdev identifier * @ctl_flags: control flag diff --git a/core/mac/src/cfg/cfgUtil/dot11f.frms b/core/mac/src/cfg/cfgUtil/dot11f.frms index 80509932738c..01568e477771 100644 --- a/core/mac/src/cfg/cfgUtil/dot11f.frms +++ b/core/mac/src/cfg/cfgUtil/dot11f.frms @@ -2894,7 +2894,7 @@ MULTIIE P2PDisAssoc ( EID_VENDOR_SPECIFIC ) OUI( 0x50, 0x6F, 0x9A, 0x09 ) MANDATORYTLV MinorReasonCode; } -IE vendor2_ie (EID_VENDOR_SPECIFIC) OUI (0x00, 0x90, 0x4c) +IE vendor_vht_ie (EID_VENDOR_SPECIFIC) OUI (0x00, 0x90, 0x4c) { type, 1; sub_type, 1; @@ -2957,7 +2957,7 @@ FRAME Beacon // C.f. Sec. 7.2.3.1 OPTIE WiderBWChanSwitchAnn; OPTIE OBSSScanParameters; OPTIE Vendor1IE; - OPTIE vendor2_ie; + OPTIE vendor_vht_ie; OPTIE Vendor3IE; OPTIE hs20vendor_ie; OPTIE ChannelSwitchWrapper; @@ -3046,7 +3046,7 @@ FRAME Beacon2 OPTIE WiderBWChanSwitchAnn; OPTIE OBSSScanParameters; OPTIE Vendor1IE; - OPTIE vendor2_ie; + OPTIE vendor_vht_ie; OPTIE Vendor3IE; OPTIE hs20vendor_ie; OPTIE ChannelSwitchWrapper; @@ -3111,7 +3111,7 @@ FRAME BeaconIEs OPTIE WiderBWChanSwitchAnn; OPTIE OBSSScanParameters; OPTIE Vendor1IE; - OPTIE vendor2_ie; + OPTIE vendor_vht_ie; OPTIE Vendor3IE; OPTIE hs20vendor_ie; OPTIE ChannelSwitchWrapper; @@ -3153,7 +3153,7 @@ FRAME AssocRequest // 7.2.3.4 OPTIE ExtCap; OPTIE OperatingMode; OPTIE QosMapSet; - OPTIE vendor2_ie; + OPTIE vendor_vht_ie; OPTIE hs20vendor_ie; } // End frame AssocRequest. @@ -3188,7 +3188,7 @@ FRAME AssocResponse // 7.2.3.5 OPTIE ExtCap; OPTIE OBSSScanParameters; OPTIE QosMapSet; - OPTIE vendor2_ie; + OPTIE vendor_vht_ie; } // End frame AssocResponse. FRAME ReAssocRequest // 7.2.3.6 @@ -3225,7 +3225,7 @@ FRAME ReAssocRequest // 7.2.3.6 OPTIE ExtCap; OPTIE OperatingMode; OPTIE QosMapSet; - OPTIE vendor2_ie; + OPTIE vendor_vht_ie; OPTIE hs20vendor_ie; } // End frame ReAssocRequest. @@ -3261,7 +3261,7 @@ FRAME ReAssocResponse // 7.2.3.7 OPTIE ExtCap; OPTIE OBSSScanParameters; OPTIE QosMapSet; - OPTIE vendor2_ie; + OPTIE vendor_vht_ie; } // End frame ReAssocResponse. FRAME ProbeRequest // 7.2.3.8 @@ -3328,7 +3328,7 @@ FRAME ProbeResponse // 7.2.3.9 OPTIE ExtCap; OPTIE OBSSScanParameters; OPTIE Vendor1IE; - OPTIE vendor2_ie; + OPTIE vendor_vht_ie; OPTIE Vendor3IE; OPTIE hs20vendor_ie; OPTIE ChannelSwitchWrapper; diff --git a/core/mac/src/include/dot11f.h b/core/mac/src/include/dot11f.h index 006fd880785d..7d52f2508ba6 100644 --- a/core/mac/src/include/dot11f.h +++ b/core/mac/src/include/dot11f.h @@ -35,7 +35,7 @@ * * * This file was automatically generated by 'framesc' - * Mon Sep 19 14:42:34 2016 from the following file(s): + * Mon Oct 3 12:40:25 2016 from the following file(s): * * dot11f.frms * @@ -7612,40 +7612,40 @@ uint32_t dot11f_get_packed_ie_sec_chan_offset_ele( #endif /* C++ */ /* EID 221 (0xdd) {OUI 0x00, 0x90, 0x4c} */ -typedef struct sDot11fIEvendor2_ie { +typedef struct sDot11fIEvendor_vht_ie { uint8_t present; uint8_t type; uint8_t sub_type; tDot11fIEVHTCaps VHTCaps; tDot11fIEVHTOperation VHTOperation; -} tDot11fIEvendor2_ie; +} tDot11fIEvendor_vht_ie; -#define DOT11F_EID_VENDOR2_IE (221) +#define DOT11F_EID_VENDOR_VHT_IE (221) /* N.B. These #defines do *not* include the EID & length */ -#define DOT11F_IE_VENDOR2_IE_MIN_LEN (5) +#define DOT11F_IE_VENDOR_VHT_IE_MIN_LEN (5) -#define DOT11F_IE_VENDOR2_IE_MAX_LEN (26) +#define DOT11F_IE_VENDOR_VHT_IE_MAX_LEN (26) #ifdef __cplusplus extern "C" { #endif /* C++ */ -uint32_t dot11f_unpack_ie_vendor2_ie( +uint32_t dot11f_unpack_ie_vendor_vht_ie( tpAniSirGlobal, uint8_t *, uint8_t, - tDot11fIEvendor2_ie*); + tDot11fIEvendor_vht_ie*); -uint32_t dot11f_pack_ie_vendor2_ie( +uint32_t dot11f_pack_ie_vendor_vht_ie( tpAniSirGlobal, - tDot11fIEvendor2_ie *, + tDot11fIEvendor_vht_ie *, uint8_t *, uint32_t, uint32_t*); -uint32_t dot11f_get_packed_ie_vendor2_ie( +uint32_t dot11f_get_packed_ie_vendor_vht_ie( tpAniSirGlobal, - tDot11fIEvendor2_ie *, + tDot11fIEvendor_vht_ie *, uint32_t*); #ifdef __cplusplus @@ -7757,7 +7757,7 @@ typedef struct sDot11fAssocRequest{ tDot11fIEExtCap ExtCap; tDot11fIEOperatingMode OperatingMode; tDot11fIEQosMapSet QosMapSet; - tDot11fIEvendor2_ie vendor2_ie; + tDot11fIEvendor_vht_ie vendor_vht_ie; tDot11fIEhs20vendor_ie hs20vendor_ie; } tDot11fAssocRequest; @@ -7813,7 +7813,7 @@ typedef struct sDot11fAssocResponse{ tDot11fIEExtCap ExtCap; tDot11fIEOBSSScanParameters OBSSScanParameters; tDot11fIEQosMapSet QosMapSet; - tDot11fIEvendor2_ie vendor2_ie; + tDot11fIEvendor_vht_ie vendor_vht_ie; } tDot11fAssocResponse; #define DOT11F_ASSOCRESPONSE (4) @@ -7919,7 +7919,7 @@ typedef struct sDot11fBeacon{ tDot11fIEWiderBWChanSwitchAnn WiderBWChanSwitchAnn; tDot11fIEOBSSScanParameters OBSSScanParameters; tDot11fIEVendor1IE Vendor1IE; - tDot11fIEvendor2_ie vendor2_ie; + tDot11fIEvendor_vht_ie vendor_vht_ie; tDot11fIEVendor3IE Vendor3IE; tDot11fIEhs20vendor_ie hs20vendor_ie; tDot11fIEChannelSwitchWrapper ChannelSwitchWrapper; @@ -8014,7 +8014,7 @@ typedef struct sDot11fBeacon2{ tDot11fIEWiderBWChanSwitchAnn WiderBWChanSwitchAnn; tDot11fIEOBSSScanParameters OBSSScanParameters; tDot11fIEVendor1IE Vendor1IE; - tDot11fIEvendor2_ie vendor2_ie; + tDot11fIEvendor_vht_ie vendor_vht_ie; tDot11fIEVendor3IE Vendor3IE; tDot11fIEhs20vendor_ie hs20vendor_ie; tDot11fIEChannelSwitchWrapper ChannelSwitchWrapper; @@ -8090,7 +8090,7 @@ typedef struct sDot11fBeaconIEs{ tDot11fIEWiderBWChanSwitchAnn WiderBWChanSwitchAnn; tDot11fIEOBSSScanParameters OBSSScanParameters; tDot11fIEVendor1IE Vendor1IE; - tDot11fIEvendor2_ie vendor2_ie; + tDot11fIEvendor_vht_ie vendor_vht_ie; tDot11fIEVendor3IE Vendor3IE; tDot11fIEhs20vendor_ie hs20vendor_ie; tDot11fIEChannelSwitchWrapper ChannelSwitchWrapper; @@ -8501,7 +8501,7 @@ typedef struct sDot11fProbeResponse{ tDot11fIEExtCap ExtCap; tDot11fIEOBSSScanParameters OBSSScanParameters; tDot11fIEVendor1IE Vendor1IE; - tDot11fIEvendor2_ie vendor2_ie; + tDot11fIEvendor_vht_ie vendor_vht_ie; tDot11fIEVendor3IE Vendor3IE; tDot11fIEhs20vendor_ie hs20vendor_ie; tDot11fIEChannelSwitchWrapper ChannelSwitchWrapper; @@ -8648,7 +8648,7 @@ typedef struct sDot11fReAssocRequest{ tDot11fIEExtCap ExtCap; tDot11fIEOperatingMode OperatingMode; tDot11fIEQosMapSet QosMapSet; - tDot11fIEvendor2_ie vendor2_ie; + tDot11fIEvendor_vht_ie vendor_vht_ie; tDot11fIEhs20vendor_ie hs20vendor_ie; } tDot11fReAssocRequest; @@ -8705,7 +8705,7 @@ typedef struct sDot11fReAssocResponse{ tDot11fIEExtCap ExtCap; tDot11fIEOBSSScanParameters OBSSScanParameters; tDot11fIEQosMapSet QosMapSet; - tDot11fIEvendor2_ie vendor2_ie; + tDot11fIEvendor_vht_ie vendor_vht_ie; } tDot11fReAssocResponse; #define DOT11F_REASSOCRESPONSE (27) diff --git a/core/mac/src/include/parser_api.h b/core/mac/src/include/parser_api.h index da8c3bc36840..bede0ad11946 100644 --- a/core/mac/src/include/parser_api.h +++ b/core/mac/src/include/parser_api.h @@ -164,7 +164,7 @@ typedef struct sSirProbeRespBeacon { uint8_t WiderBWChanSwitchAnnPresent; tDot11fIEWiderBWChanSwitchAnn WiderBWChanSwitchAnn; uint8_t Vendor1IEPresent; - tDot11fIEvendor2_ie vendor2_ie; + tDot11fIEvendor_vht_ie vendor_vht_ie; uint8_t Vendor3IEPresent; tDot11fIEhs20vendor_ie hs20vendor_ie; tDot11fIEIBSSParams IBSSParams; @@ -245,6 +245,7 @@ typedef struct sSirAssocReq { tDot11fIEVHTCaps VHTCaps; tDot11fIEOperatingMode operMode; tDot11fIEExtCap ExtCap; + tDot11fIEvendor_vht_ie vendor_vht_ie; tDot11fIEhs20vendor_ie hs20vendor_ie; } tSirAssocReq, *tpSirAssocReq; @@ -294,7 +295,7 @@ typedef struct sSirAssocRsp { #ifdef WLAN_FEATURE_11W tDot11fIETimeoutInterval TimeoutInterval; #endif - tDot11fIEvendor2_ie vendor2_ie; + tDot11fIEvendor_vht_ie vendor_vht_ie; tDot11fIEOBSSScanParameters obss_scanparams; } tSirAssocRsp, *tpSirAssocRsp; diff --git a/core/mac/src/include/sir_params.h b/core/mac/src/include/sir_params.h index 2b71b5143209..b11343f2be9b 100644 --- a/core/mac/src/include/sir_params.h +++ b/core/mac/src/include/sir_params.h @@ -606,6 +606,7 @@ typedef struct sSirMbMsgP2p { #define SIR_HAL_ADD_BCN_FILTER_CMDID (SIR_HAL_ITC_MSG_TYPES_BEGIN + 339) #define SIR_HAL_REMOVE_BCN_FILTER_CMDID (SIR_HAL_ITC_MSG_TYPES_BEGIN + 340) + #define SIR_HAL_BPF_GET_CAPABILITIES_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 341) #define SIR_HAL_BPF_SET_INSTRUCTIONS_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 342) @@ -634,6 +635,7 @@ typedef struct sSirMbMsgP2p { #define SIR_HAL_POWER_DBG_CMD (SIR_HAL_ITC_MSG_TYPES_BEGIN + 362) #define SIR_HAL_SET_DTIM_PERIOD (SIR_HAL_ITC_MSG_TYPES_BEGIN + 363) #define SIR_HAL_ENCRYPT_DECRYPT_MSG (SIR_HAL_ITC_MSG_TYPES_BEGIN + 364) +#define SIR_HAL_SET_CTS2SELF_FOR_STA (SIR_HAL_ITC_MSG_TYPES_BEGIN + 368) #define SIR_HAL_MSG_TYPES_END (SIR_HAL_MSG_TYPES_BEGIN + 0x1FF) diff --git a/core/mac/src/pe/include/lim_session.h b/core/mac/src/pe/include/lim_session.h index f12cc19a7619..b8b34a98fb79 100644 --- a/core/mac/src/pe/include/lim_session.h +++ b/core/mac/src/pe/include/lim_session.h @@ -464,6 +464,7 @@ typedef struct sPESession /* Added to Support BT-AMP */ bool is_vendor_specific_vhtcaps; uint8_t vendor_specific_vht_ie_type; uint8_t vendor_specific_vht_ie_sub_type; + bool vendor_vht_sap; /* HS 2.0 Indication */ tDot11fIEhs20vendor_ie hs20vendor_ie; /* flag to indicate country code in beacon */ diff --git a/core/mac/src/pe/lim/lim_api.c b/core/mac/src/pe/lim/lim_api.c index a1e05650a5c5..2700e9ad55b7 100644 --- a/core/mac/src/pe/lim/lim_api.c +++ b/core/mac/src/pe/lim/lim_api.c @@ -681,6 +681,63 @@ void lim_cleanup(tpAniSirGlobal pMac) } /*** end lim_cleanup() ***/ +/** + * lim_state_info_dump() - print state information of lim layer + * @buf: buffer pointer + * @size: size of buffer to be filled + * + * This function is used to print state information of lim layer + * + * Return: None + */ +static void lim_state_info_dump(char **buf_ptr, uint16_t *size) +{ + tHalHandle hal; + tpAniSirGlobal mac; + uint16_t len = 0; + char *buf = *buf_ptr; + + hal = cds_get_context(QDF_MODULE_ID_PE); + if (hal == NULL) { + QDF_ASSERT(0); + return; + } + + mac = PMAC_STRUCT(hal); + + lim_log(mac, LOG1, FL("size of buffer: %d"), *size); + + len += qdf_scnprintf(buf + len, *size - len, + "\n SmeState: %d", mac->lim.gLimSmeState); + len += qdf_scnprintf(buf + len, *size - len, + "\n PrevSmeState: %d", mac->lim.gLimPrevSmeState); + len += qdf_scnprintf(buf + len, *size - len, + "\n MlmState: %d", mac->lim.gLimMlmState); + len += qdf_scnprintf(buf + len, *size - len, + "\n PrevMlmState: %d", mac->lim.gLimPrevMlmState); + len += qdf_scnprintf(buf + len, *size - len, + "\n SystemInScanLearnMode: %d", + mac->lim.gLimSystemInScanLearnMode); + len += qdf_scnprintf(buf + len, *size - len, + "\n ProcessDefdMsgs: %d", mac->lim.gLimProcessDefdMsgs); + len += qdf_scnprintf(buf + len, *size - len, + "\n gLimHalScanState: %d", mac->lim.gLimHalScanState); + + *size -= len; + *buf_ptr += len; +} + +/** + * lim_register_debug_callback() - registration function for lim layer + * to print lim state information + * + * Return: None + */ +static void lim_register_debug_callback(void) +{ + qdf_register_debug_callback(QDF_MODULE_ID_PE, &lim_state_info_dump); +} + /** ------------------------------------------------------------- \fn pe_open \brief will be called in Open sequence from mac_open @@ -746,6 +803,8 @@ tSirRetStatus pe_open(tpAniSirGlobal pMac, struct cds_config_info *cds_cfg) #ifdef LIM_TRACE_RECORD MTRACE(lim_trace_init(pMac)); #endif + lim_register_debug_callback(); + return status; /* status here will be eSIR_SUCCESS */ pe_open_lock_fail: diff --git a/core/mac/src/pe/lim/lim_assoc_utils.c b/core/mac/src/pe/lim/lim_assoc_utils.c index 31818d187df1..4aae611d0787 100644 --- a/core/mac/src/pe/lim/lim_assoc_utils.c +++ b/core/mac/src/pe/lim/lim_assoc_utils.c @@ -3224,12 +3224,12 @@ lim_check_and_announce_join_success(tpAniSirGlobal mac_ctx, wlan_cfg_get_int(mac_ctx, WNI_CFG_DOT11_MODE, &selfStaDot11Mode); if ((IS_DOT11_MODE_VHT(selfStaDot11Mode)) && - beacon_probe_rsp->vendor2_ie.VHTCaps.present) { + beacon_probe_rsp->vendor_vht_ie.VHTCaps.present) { session_entry->is_vendor_specific_vhtcaps = true; session_entry->vendor_specific_vht_ie_type = - beacon_probe_rsp->vendor2_ie.type; + beacon_probe_rsp->vendor_vht_ie.type; session_entry->vendor_specific_vht_ie_sub_type = - beacon_probe_rsp->vendor2_ie.sub_type; + beacon_probe_rsp->vendor_vht_ie.sub_type; lim_log(mac_ctx, LOG1, FL( "VHT caps are present in vendor specific IE")); } @@ -3678,13 +3678,13 @@ tSirRetStatus lim_sta_send_add_bss(tpAniSirGlobal pMac, tpSirAssocRsp pAssocRsp, vht_caps = &pAssocRsp->VHTCaps; vht_oper = &pAssocRsp->VHTOperation; } else if (psessionEntry->vhtCapability && - pAssocRsp->vendor2_ie.VHTCaps.present){ + pAssocRsp->vendor_vht_ie.VHTCaps.present){ pAddBssParams->vhtCapable = - pAssocRsp->vendor2_ie.VHTCaps.present; + pAssocRsp->vendor_vht_ie.VHTCaps.present; lim_log(pMac, LOG1, FL("VHT Caps and Operation are present in vendor Specfic IE")); - vht_caps = &pAssocRsp->vendor2_ie.VHTCaps; - vht_oper = &pAssocRsp->vendor2_ie.VHTOperation; + vht_caps = &pAssocRsp->vendor_vht_ie.VHTCaps; + vht_oper = &pAssocRsp->vendor_vht_ie.VHTOperation; } else { pAddBssParams->vhtCapable = 0; } @@ -3757,15 +3757,15 @@ tSirRetStatus lim_sta_send_add_bss(tpAniSirGlobal pMac, tpSirAssocRsp pAssocRsp, pAddBssParams->staContext.lsigTxopProtection); if (psessionEntry->vhtCapability && (IS_BSS_VHT_CAPABLE(pBeaconStruct->VHTCaps) || - IS_BSS_VHT_CAPABLE( - pBeaconStruct->vendor2_ie.VHTCaps))) { + IS_BSS_VHT_CAPABLE(pBeaconStruct-> + vendor_vht_ie.VHTCaps))) { pAddBssParams->staContext.vhtCapable = 1; pAddBssParams->staContext.vhtSupportedRxNss = pStaDs->vhtSupportedRxNss; if (pAssocRsp->VHTCaps.present) vht_caps = &pAssocRsp->VHTCaps; - else if (pAssocRsp->vendor2_ie.VHTCaps.present) { - vht_caps = &pAssocRsp->vendor2_ie.VHTCaps; + else if (pAssocRsp->vendor_vht_ie.VHTCaps.present) { + vht_caps = &pAssocRsp->vendor_vht_ie.VHTCaps; lim_log(pMac, LOG1, FL( "VHT Caps are in vendor Specfic IE")); } @@ -3790,8 +3790,9 @@ tSirRetStatus lim_sta_send_add_bss(tpAniSirGlobal pMac, tpSirAssocRsp pAssocRsp, pAssocRsp->HTInfo.recommendedTxWidthSet; if (pAssocRsp->VHTCaps.present) vht_oper = &pAssocRsp->VHTOperation; - else if (pAssocRsp->vendor2_ie.VHTCaps.present) { - vht_oper = &pAssocRsp->vendor2_ie.VHTOperation; + else if (pAssocRsp->vendor_vht_ie.VHTCaps.present) { + vht_oper = &pAssocRsp-> + vendor_vht_ie.VHTOperation; lim_log(pMac, LOG1, FL( "VHT Op IE is in vendor Specfic IE")); } @@ -3874,8 +3875,8 @@ tSirRetStatus lim_sta_send_add_bss(tpAniSirGlobal pMac, tpSirAssocRsp pAssocRsp, if (pAssocRsp->VHTCaps.present) vht_caps = &pAssocRsp->VHTCaps; - else if (pAssocRsp->vendor2_ie.VHTCaps.present) { - vht_caps = &pAssocRsp->vendor2_ie.VHTCaps; + else if (pAssocRsp->vendor_vht_ie.VHTCaps.present) { + vht_caps = &pAssocRsp->vendor_vht_ie.VHTCaps; lim_log(pMac, LOG1, FL( "VHT Caps is in vendor Specfic IE")); } @@ -4218,13 +4219,13 @@ tSirRetStatus lim_sta_send_add_bss_pre_assoc(tpAniSirGlobal pMac, uint8_t update pAddBssParams->currentOperChannel); if (psessionEntry->vhtCapability && (IS_BSS_VHT_CAPABLE(pBeaconStruct->VHTCaps) || - IS_BSS_VHT_CAPABLE(pBeaconStruct->vendor2_ie.VHTCaps))) { + IS_BSS_VHT_CAPABLE(pBeaconStruct->vendor_vht_ie.VHTCaps))) { pAddBssParams->vhtCapable = 1; if (pBeaconStruct->VHTOperation.present) vht_oper = &pBeaconStruct->VHTOperation; - else if (pBeaconStruct->vendor2_ie.VHTOperation.present) { - vht_oper = &pBeaconStruct->vendor2_ie.VHTOperation; + else if (pBeaconStruct->vendor_vht_ie.VHTOperation.present) { + vht_oper = &pBeaconStruct->vendor_vht_ie.VHTOperation; lim_log(pMac, LOG1, FL("VHT Operation is present in vendor Specfic IE")); } @@ -4301,12 +4302,13 @@ tSirRetStatus lim_sta_send_add_bss_pre_assoc(tpAniSirGlobal pMac, uint8_t update if (psessionEntry->vhtCapability && (IS_BSS_VHT_CAPABLE(pBeaconStruct->VHTCaps) || IS_BSS_VHT_CAPABLE( - pBeaconStruct->vendor2_ie.VHTCaps))) { + pBeaconStruct->vendor_vht_ie.VHTCaps))) { pAddBssParams->staContext.vhtCapable = 1; if (pBeaconStruct->VHTCaps.present) vht_caps = &pBeaconStruct->VHTCaps; - else if (pBeaconStruct->vendor2_ie.VHTCaps.present) - vht_caps = &pBeaconStruct->vendor2_ie.VHTCaps; + else if (pBeaconStruct->vendor_vht_ie.VHTCaps.present) + vht_caps = &pBeaconStruct-> + vendor_vht_ie.VHTCaps; if ((vht_caps != NULL) && (vht_caps->suBeamFormerCap || vht_caps->muBeamformerCap) && @@ -4389,9 +4391,9 @@ tSirRetStatus lim_sta_send_add_bss_pre_assoc(tpAniSirGlobal pMac, uint8_t update if (pBeaconStruct->VHTCaps.present) vht_caps = &pBeaconStruct->VHTCaps; - else if (pBeaconStruct->vendor2_ie.VHTCaps.present) { + else if (pBeaconStruct->vendor_vht_ie.VHTCaps.present) { vht_caps = - &pBeaconStruct->vendor2_ie.VHTCaps; + &pBeaconStruct->vendor_vht_ie.VHTCaps; lim_log(pMac, LOG1, FL( "VHT Caps are in vendor Specfic IE")); } diff --git a/core/mac/src/pe/lim/lim_process_assoc_req_frame.c b/core/mac/src/pe/lim/lim_process_assoc_req_frame.c index f60e43231eed..c1d77bfb5f9c 100644 --- a/core/mac/src/pe/lim/lim_process_assoc_req_frame.c +++ b/core/mac/src/pe/lim/lim_process_assoc_req_frame.c @@ -504,9 +504,19 @@ static bool lim_chk_11ac_only(tpAniSirGlobal mac_ctx, tpSirMacMgmtHdr hdr, tpPESession session, tpSirAssocReq assoc_req, uint8_t sub_type) { + tDot11fIEVHTCaps *vht_caps; + + if (assoc_req->VHTCaps.present) + vht_caps = &assoc_req->VHTCaps; + else if (assoc_req->vendor_vht_ie.VHTCaps.present && + session->vendor_vht_sap) + vht_caps = &assoc_req->vendor_vht_ie.VHTCaps; + else + vht_caps = NULL; + if (LIM_IS_AP_ROLE(session) && (session->dot11mode == WNI_CFG_DOT11_MODE_11AC_ONLY) && - (!assoc_req->VHTCaps.present)) { + ((vht_caps != NULL) && (!vht_caps->present))) { lim_send_assoc_rsp_mgmt_frame(mac_ctx, eSIR_MAC_CAPABILITIES_NOT_SUPPORTED_STATUS, 1, hdr->sa, sub_type, 0, session); @@ -1231,6 +1241,16 @@ static bool lim_update_sta_ds(tpAniSirGlobal mac_ctx, tpSirMacMgmtHdr hdr, tPmfSaQueryTimerId timer_id; uint32_t retry_interval; #endif + tDot11fIEVHTCaps *vht_caps; + + if (assoc_req->VHTCaps.present) + vht_caps = &assoc_req->VHTCaps; + else if (assoc_req->vendor_vht_ie.VHTCaps.present && + session->vendor_vht_sap) + vht_caps = &assoc_req->vendor_vht_ie.VHTCaps; + else + vht_caps = NULL; + /* * check here if the parsedAssocReq already pointing to the assoc_req * and free it before assigning this new assoc_req @@ -1252,7 +1272,10 @@ static bool lim_update_sta_ds(tpAniSirGlobal mac_ctx, tpSirMacMgmtHdr hdr, } sta_ds->mlmStaContext.htCapability = assoc_req->HTCaps.present; - sta_ds->mlmStaContext.vhtCapability = assoc_req->VHTCaps.present; + if ((vht_caps != NULL) && vht_caps->present) + sta_ds->mlmStaContext.vhtCapability = vht_caps->present; + else + sta_ds->mlmStaContext.vhtCapability = false; sta_ds->qos.addtsPresent = (assoc_req->addtsPresent == 0) ? false : true; sta_ds->qos.addts = assoc_req->addtsReq; @@ -1348,7 +1371,7 @@ static bool lim_update_sta_ds(tpAniSirGlobal mac_ctx, tpSirMacMgmtHdr hdr, (uint8_t) (assoc_req->operMode.chanWidth ? eHT_CHANNEL_WIDTH_40MHZ : eHT_CHANNEL_WIDTH_20MHZ); - } else if (assoc_req->VHTCaps.present) { + } else if ((vht_caps != NULL) && vht_caps->present) { /* * Check if STA has enabled it's channel bonding mode. * If channel bonding mode is enabled, we decide based @@ -1360,7 +1383,7 @@ static bool lim_update_sta_ds(tpAniSirGlobal mac_ctx, tpSirMacMgmtHdr hdr, WNI_CFG_VHT_CHANNEL_WIDTH_20_40MHZ : session->ch_width - 1); sta_ds->htMaxRxAMpduFactor = - assoc_req->VHTCaps.maxAMPDULenExp; + vht_caps->maxAMPDULenExp; } /* Lesser among the AP and STA bandwidth of operation. */ sta_ds->htSupportedChannelWidthSet = @@ -1373,9 +1396,10 @@ static bool lim_update_sta_ds(tpAniSirGlobal mac_ctx, tpSirMacMgmtHdr hdr, (uint8_t) assoc_req->HTCaps.advCodingCap; } - if (assoc_req->VHTCaps.present && assoc_req->wmeInfoPresent) { + if ((vht_caps != NULL) && vht_caps->present && + assoc_req->wmeInfoPresent) { sta_ds->vhtLdpcCapable = - (uint8_t) assoc_req->VHTCaps.ldpcCodingCap; + (uint8_t) vht_caps->ldpcCodingCap; } if (!assoc_req->wmeInfoPresent) { @@ -1398,8 +1422,7 @@ static bool lim_update_sta_ds(tpAniSirGlobal mac_ctx, tpSirMacMgmtHdr hdr, &(assoc_req->supportedRates), &(assoc_req->extendedRates), assoc_req->HTCaps.supportedMCSSet, - session, &assoc_req->VHTCaps) != eSIR_SUCCESS) - { + session, vht_caps) != eSIR_SUCCESS) { /* Could not update hash table entry at DPH with rateset */ lim_log(mac_ctx, LOGE, FL("Couldn't update hash entry for aid=%d, MacAddr: " diff --git a/core/mac/src/pe/lim/lim_process_assoc_rsp_frame.c b/core/mac/src/pe/lim/lim_process_assoc_rsp_frame.c index 8e267663c73d..81f8714bfab8 100644 --- a/core/mac/src/pe/lim/lim_process_assoc_rsp_frame.c +++ b/core/mac/src/pe/lim/lim_process_assoc_rsp_frame.c @@ -172,8 +172,8 @@ void lim_update_assoc_sta_datas(tpAniSirGlobal mac_ctx, if (assoc_rsp->VHTCaps.present) vht_caps = &assoc_rsp->VHTCaps; - else if (assoc_rsp->vendor2_ie.VHTCaps.present) - vht_caps = &assoc_rsp->vendor2_ie.VHTCaps; + else if (assoc_rsp->vendor_vht_ie.VHTCaps.present) + vht_caps = &assoc_rsp->vendor_vht_ie.VHTCaps; if (IS_DOT11_MODE_VHT(session_entry->dot11mode)) { if ((vht_caps != NULL) && vht_caps->present) { diff --git a/core/mac/src/pe/lim/lim_process_mlm_req_messages.c b/core/mac/src/pe/lim/lim_process_mlm_req_messages.c index 1c914142c3d6..09e5c52f867e 100644 --- a/core/mac/src/pe/lim/lim_process_mlm_req_messages.c +++ b/core/mac/src/pe/lim/lim_process_mlm_req_messages.c @@ -595,6 +595,10 @@ lim_mlm_add_bss(tpAniSirGlobal mac_ctx, if (QDF_IBSS_MODE == addbss_param->halPersona) { addbss_param->nss_2g = mac_ctx->vdev_type_nss_2g.ibss; addbss_param->nss_5g = mac_ctx->vdev_type_nss_5g.ibss; + addbss_param->tx_aggregation_size = + mac_ctx->roam.configParam.tx_aggregation_size; + addbss_param->rx_aggregation_size = + mac_ctx->roam.configParam.rx_aggregation_size; } lim_log(mac_ctx, LOG2, FL("dot11_mode:%d nss value:%d"), addbss_param->dot11_mode, addbss_param->nss); diff --git a/core/mac/src/pe/lim/lim_process_sme_req_messages.c b/core/mac/src/pe/lim/lim_process_sme_req_messages.c index 347198956135..df4cd348ad20 100644 --- a/core/mac/src/pe/lim/lim_process_sme_req_messages.c +++ b/core/mac/src/pe/lim/lim_process_sme_req_messages.c @@ -610,6 +610,8 @@ lim_configure_ap_start_bss_session(tpAniSirGlobal mac_ctx, tpPESession session, session->ssidHidden = sme_start_bss_req->ssidHidden; session->wps_state = sme_start_bss_req->wps_state; session->sap_dot11mc = sme_start_bss_req->sap_dot11mc; + session->vendor_vht_sap = + sme_start_bss_req->vendor_vht_sap; lim_get_short_slot_from_phy_mode(mac_ctx, session, session->gLimPhyMode, &session->shortSlotTimeSupported); session->isCoalesingInIBSSAllowed = diff --git a/core/mac/src/pe/lim/lim_prop_exts_utils.c b/core/mac/src/pe/lim/lim_prop_exts_utils.c index 26aa7ca55e9f..1f367b75a469 100644 --- a/core/mac/src/pe/lim/lim_prop_exts_utils.c +++ b/core/mac/src/pe/lim/lim_prop_exts_utils.c @@ -167,7 +167,7 @@ lim_extract_ap_capability(tpAniSirGlobal mac_ctx, uint8_t *p_ie, session->vhtCapability) { session->vhtCapabilityPresentInBeacon = 1; if (((beacon_struct->Vendor1IEPresent && - beacon_struct->vendor2_ie.present && + beacon_struct->vendor_vht_ie.present && beacon_struct->Vendor3IEPresent)) && (((beacon_struct->VHTCaps.txMCSMap & VHT_MCS_3x3_MASK) == VHT_MCS_3x3_MASK) && diff --git a/core/mac/src/pe/lim/lim_send_frames_host_roam.c b/core/mac/src/pe/lim/lim_send_frames_host_roam.c index 5594dfc78843..50c86a6ff657 100644 --- a/core/mac/src/pe/lim/lim_send_frames_host_roam.c +++ b/core/mac/src/pe/lim/lim_send_frames_host_roam.c @@ -304,14 +304,14 @@ void lim_send_reassoc_req_with_ft_ies_mgmt_frame(tpAniSirGlobal mac_ctx, pe_session->is_vendor_specific_vhtcaps) { lim_log(mac_ctx, LOG1, FL("Populate Vendor VHT IEs in Re-Assoc Request")); - frm.vendor2_ie.present = 1; - frm.vendor2_ie.type = + frm.vendor_vht_ie.present = 1; + frm.vendor_vht_ie.type = pe_session->vendor_specific_vht_ie_type; - frm.vendor2_ie.sub_type = + frm.vendor_vht_ie.sub_type = pe_session->vendor_specific_vht_ie_sub_type; - frm.vendor2_ie.VHTCaps.present = 1; + frm.vendor_vht_ie.VHTCaps.present = 1; populate_dot11f_vht_caps(mac_ctx, pe_session, - &frm.vendor2_ie.VHTCaps); + &frm.vendor_vht_ie.VHTCaps); vht_enabled = true; } status = dot11f_get_packed_re_assoc_request_size(mac_ctx, &frm, diff --git a/core/mac/src/pe/lim/lim_send_management_frames.c b/core/mac/src/pe/lim/lim_send_management_frames.c index 93408fc9f590..b10e5847a4aa 100644 --- a/core/mac/src/pe/lim/lim_send_management_frames.c +++ b/core/mac/src/pe/lim/lim_send_management_frames.c @@ -1243,7 +1243,24 @@ lim_send_assoc_rsp_mgmt_frame(tpAniSirGlobal mac_ctx, populate_dot11f_vht_caps(mac_ctx, pe_session, &frm.VHTCaps); populate_dot11f_vht_operation(mac_ctx, pe_session, - &frm.VHTOperation); + &frm.VHTOperation); + is_vht = true; + } + if (pe_session->vhtCapability && + pe_session->vendor_vht_sap && + (assoc_req != NULL) && + assoc_req->vendor_vht_ie.VHTCaps.present) { + lim_log(mac_ctx, LOG1, + FL("Populate Vendor VHT IEs in Assoc Rsponse")); + frm.vendor_vht_ie.present = 1; + frm.vendor_vht_ie.type = + pe_session->vendor_specific_vht_ie_type; + frm.vendor_vht_ie.sub_type = + pe_session->vendor_specific_vht_ie_sub_type; + + frm.vendor_vht_ie.VHTCaps.present = 1; + populate_dot11f_vht_caps(mac_ctx, pe_session, + &frm.vendor_vht_ie.VHTCaps); is_vht = true; } populate_dot11f_ext_cap(mac_ctx, is_vht, &frm.ExtCap, @@ -1812,15 +1829,15 @@ lim_send_assoc_req_mgmt_frame(tpAniSirGlobal mac_ctx, pe_session->is_vendor_specific_vhtcaps) { lim_log(mac_ctx, LOG1, FL("Populate Vendor VHT IEs in Assoc Request")); - frm->vendor2_ie.present = 1; - frm->vendor2_ie.type = + frm->vendor_vht_ie.present = 1; + frm->vendor_vht_ie.type = pe_session->vendor_specific_vht_ie_type; - frm->vendor2_ie.sub_type = + frm->vendor_vht_ie.sub_type = pe_session->vendor_specific_vht_ie_sub_type; - frm->vendor2_ie.VHTCaps.present = 1; + frm->vendor_vht_ie.VHTCaps.present = 1; populate_dot11f_vht_caps(mac_ctx, pe_session, - &frm->vendor2_ie.VHTCaps); + &frm->vendor_vht_ie.VHTCaps); vht_enabled = true; } if (pe_session->is_ext_caps_present) diff --git a/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c b/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c index 26d0190c47d5..60ee95534a28 100644 --- a/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c +++ b/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c @@ -1030,7 +1030,7 @@ lim_send_sme_disassoc_ind(tpAniSirGlobal pMac, tpDphHashNode pStaDs, pSirSmeDisassocInd->sessionId = psessionEntry->smeSessionId; pSirSmeDisassocInd->transactionId = psessionEntry->transactionId; - pSirSmeDisassocInd->statusCode = pStaDs->mlmStaContext.disassocReason; + pSirSmeDisassocInd->statusCode = eSIR_SME_DEAUTH_STATUS; pSirSmeDisassocInd->reasonCode = pStaDs->mlmStaContext.disassocReason; qdf_mem_copy(pSirSmeDisassocInd->bssid.bytes, psessionEntry->bssId, diff --git a/core/mac/src/sys/legacy/src/utils/src/dot11f.c b/core/mac/src/sys/legacy/src/utils/src/dot11f.c index d5068aae9b91..458e073c088d 100644 --- a/core/mac/src/sys/legacy/src/utils/src/dot11f.c +++ b/core/mac/src/sys/legacy/src/utils/src/dot11f.c @@ -33,7 +33,7 @@ * * * This file was automatically generated by 'framesc' - * Mon Sep 19 14:42:34 2016 from the following file(s): + * Mon Oct 3 12:40:25 2016 from the following file(s): * * dot11f.frms * @@ -5949,25 +5949,25 @@ uint32_t dot11f_unpack_ie_sec_chan_offset_ele(tpAniSirGlobal pCtx, #define SigIesec_chan_offset_ele (0x007f) -static const tFFDefn FFS_vendor2_ie[] = { +static const tFFDefn FFS_vendor_vht_ie[] = { { NULL, 0, 0, 0,}, }; -static const tIEDefn IES_vendor2_ie[] = { - { offsetof(tDot11fIEvendor2_ie, VHTCaps), offsetof(tDot11fIEVHTCaps, +static const tIEDefn IES_vendor_vht_ie[] = { + { offsetof(tDot11fIEvendor_vht_ie, VHTCaps), offsetof(tDot11fIEVHTCaps, present), 0, "VHTCaps", 0, 14, 14, SigIeVHTCaps, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTCAPS, 0, }, - { offsetof(tDot11fIEvendor2_ie, VHTOperation), + { offsetof(tDot11fIEvendor_vht_ie, VHTOperation), offsetof(tDot11fIEVHTOperation, present), 0, "VHTOperation", 0, 7, 7, SigIeVHTOperation, {0, 0, 0, 0, 0}, 0, DOT11F_EID_VHTOPERATION, 0, }, {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, }, }; -uint32_t dot11f_unpack_ie_vendor2_ie(tpAniSirGlobal pCtx, - uint8_t *pBuf, - uint8_t ielen, - tDot11fIEvendor2_ie *pDst) +uint32_t dot11f_unpack_ie_vendor_vht_ie(tpAniSirGlobal pCtx, + uint8_t *pBuf, + uint8_t ielen, + tDot11fIEvendor_vht_ie *pDst) { uint32_t status = DOT11F_PARSE_SUCCESS; (void) pBuf; (void)ielen; /* Shutup the compiler */ @@ -5984,14 +5984,14 @@ uint32_t dot11f_unpack_ie_vendor2_ie(tpAniSirGlobal pCtx, status |= unpack_core(pCtx, pBuf, ielen, - FFS_vendor2_ie, - IES_vendor2_ie, + FFS_vendor_vht_ie, + IES_vendor_vht_ie, (uint8_t *)pDst, sizeof(*pDst)); return status; -} /* End dot11f_unpack_ie_vendor2_ie. */ +} /* End dot11f_unpack_ie_vendor_vht_ie. */ -#define SigIevendor2_ie (0x0080) +#define SigIevendor_vht_ie (0x0080) static const tFFDefn FFS_AddTSRequest[] = { @@ -6208,10 +6208,10 @@ static const tIEDefn IES_AssocRequest[] = { { offsetof(tDot11fAssocRequest, QosMapSet), offsetof(tDot11fIEQosMapSet, present), 0, "QosMapSet", 0, 2, 62, SigIeQosMapSet, {0, 0, 0, 0, 0}, 0, DOT11F_EID_QOSMAPSET, 0, }, - { offsetof(tDot11fAssocRequest, vendor2_ie), - offsetof(tDot11fIEvendor2_ie, present), 0, "vendor2_ie", - 0, 7, 28, SigIevendor2_ie, {0, 144, 76, 0, 0}, - 3, DOT11F_EID_VENDOR2_IE, 0, }, + { offsetof(tDot11fAssocRequest, vendor_vht_ie), + offsetof(tDot11fIEvendor_vht_ie, present), 0, "vendor_vht_ie", + 0, 7, 28, SigIevendor_vht_ie, {0, 144, 76, 0, 0}, + 3, DOT11F_EID_VENDOR_VHT_IE, 0, }, { offsetof(tDot11fAssocRequest, hs20vendor_ie), offsetof(tDot11fIEhs20vendor_ie, present), 0, "hs20vendor_ie", 0, 7, 9, SigIehs20vendor_ie, {80, 111, 154, 16, 0}, @@ -6336,10 +6336,10 @@ static const tIEDefn IES_AssocResponse[] = { { offsetof(tDot11fAssocResponse, QosMapSet), offsetof(tDot11fIEQosMapSet, present), 0, "QosMapSet", 0, 2, 62, SigIeQosMapSet, {0, 0, 0, 0, 0}, 0, DOT11F_EID_QOSMAPSET, 0, }, - { offsetof(tDot11fAssocResponse, vendor2_ie), - offsetof(tDot11fIEvendor2_ie, present), 0, "vendor2_ie", - 0, 7, 28, SigIevendor2_ie, {0, 144, 76, 0, 0}, - 3, DOT11F_EID_VENDOR2_IE, 0, }, + { offsetof(tDot11fAssocResponse, vendor_vht_ie), + offsetof(tDot11fIEvendor_vht_ie, present), 0, "vendor_vht_ie", + 0, 7, 28, SigIevendor_vht_ie, {0, 144, 76, 0, 0}, + 3, DOT11F_EID_VENDOR_VHT_IE, 0, }, {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },}; uint32_t dot11f_unpack_assoc_response(tpAniSirGlobal pCtx, @@ -6567,9 +6567,10 @@ static const tIEDefn IES_Beacon[] = { { offsetof(tDot11fBeacon, Vendor1IE), offsetof(tDot11fIEVendor1IE, present), 0, "Vendor1IE", 0, 5, 5, SigIeVendor1IE, {0, 16, 24, 0, 0}, 3, DOT11F_EID_VENDOR1IE, 0, }, - { offsetof(tDot11fBeacon, vendor2_ie), offsetof(tDot11fIEvendor2_ie, - present), 0, "vendor2_ie", 0, 7, 28, SigIevendor2_ie, {0, 144, 76, 0, 0}, - 3, DOT11F_EID_VENDOR2_IE, 0, }, + { offsetof(tDot11fBeacon, vendor_vht_ie), + offsetof(tDot11fIEvendor_vht_ie, present), 0, "vendor_vht_ie", + 0, 7, 28, SigIevendor_vht_ie, {0, 144, 76, 0, 0}, + 3, DOT11F_EID_VENDOR_VHT_IE, 0, }, { offsetof(tDot11fBeacon, Vendor3IE), offsetof(tDot11fIEVendor3IE, present), 0, "Vendor3IE", 0, 5, 5, SigIeVendor3IE, {0, 22, 50, 0, 0}, 3, DOT11F_EID_VENDOR3IE, 0, }, @@ -6768,9 +6769,10 @@ static const tIEDefn IES_Beacon2[] = { { offsetof(tDot11fBeacon2, Vendor1IE), offsetof(tDot11fIEVendor1IE, present), 0, "Vendor1IE", 0, 5, 5, SigIeVendor1IE, {0, 16, 24, 0, 0}, 3, DOT11F_EID_VENDOR1IE, 0, }, - { offsetof(tDot11fBeacon2, vendor2_ie), offsetof(tDot11fIEvendor2_ie, - present), 0, "vendor2_ie", 0, 7, 28, SigIevendor2_ie, {0, 144, 76, 0, 0}, - 3, DOT11F_EID_VENDOR2_IE, 0, }, + { offsetof(tDot11fBeacon2, vendor_vht_ie), + offsetof(tDot11fIEvendor_vht_ie, present), 0, "vendor_vht_ie", + 0, 7, 28, SigIevendor_vht_ie, {0, 144, 76, 0, 0}, + 3, DOT11F_EID_VENDOR_VHT_IE, 0, }, { offsetof(tDot11fBeacon2, Vendor3IE), offsetof(tDot11fIEVendor3IE, present), 0, "Vendor3IE", 0, 5, 5, SigIeVendor3IE, {0, 22, 50, 0, 0}, 3, DOT11F_EID_VENDOR3IE, 0, }, @@ -6965,9 +6967,10 @@ static const tIEDefn IES_BeaconIEs[] = { { offsetof(tDot11fBeaconIEs, Vendor1IE), offsetof(tDot11fIEVendor1IE, present), 0, "Vendor1IE", 0, 5, 5, SigIeVendor1IE, {0, 16, 24, 0, 0}, 3, DOT11F_EID_VENDOR1IE, 0, }, - { offsetof(tDot11fBeaconIEs, vendor2_ie), offsetof(tDot11fIEvendor2_ie, - present), 0, "vendor2_ie", 0, 7, 28, SigIevendor2_ie, {0, 144, 76, 0, 0}, - 3, DOT11F_EID_VENDOR2_IE, 0, }, + { offsetof(tDot11fBeaconIEs, vendor_vht_ie), + offsetof(tDot11fIEvendor_vht_ie, present), 0, "vendor_vht_ie", + 0, 7, 28, SigIevendor_vht_ie, {0, 144, 76, 0, 0}, + 3, DOT11F_EID_VENDOR_VHT_IE, 0, }, { offsetof(tDot11fBeaconIEs, Vendor3IE), offsetof(tDot11fIEVendor3IE, present), 0, "Vendor3IE", 0, 5, 5, SigIeVendor3IE, {0, 22, 50, 0, 0}, 3, DOT11F_EID_VENDOR3IE, 0, }, @@ -7573,10 +7576,10 @@ static const tIEDefn IES_ProbeResponse[] = { { offsetof(tDot11fProbeResponse, Vendor1IE), offsetof(tDot11fIEVendor1IE, present), 0, "Vendor1IE", 0, 5, 5, SigIeVendor1IE, {0, 16, 24, 0, 0}, 3, DOT11F_EID_VENDOR1IE, 0, }, - { offsetof(tDot11fProbeResponse, vendor2_ie), - offsetof(tDot11fIEvendor2_ie, present), 0, "vendor2_ie", - 0, 7, 28, SigIevendor2_ie, {0, 144, 76, 0, 0}, - 3, DOT11F_EID_VENDOR2_IE, 0, }, + { offsetof(tDot11fProbeResponse, vendor_vht_ie), + offsetof(tDot11fIEvendor_vht_ie, present), 0, "vendor_vht_ie", + 0, 7, 28, SigIevendor_vht_ie, {0, 144, 76, 0, 0}, + 3, DOT11F_EID_VENDOR_VHT_IE, 0, }, { offsetof(tDot11fProbeResponse, Vendor3IE), offsetof(tDot11fIEVendor3IE, present), 0, "Vendor3IE", 0, 5, 5, SigIeVendor3IE, {0, 22, 50, 0, 0}, 3, DOT11F_EID_VENDOR3IE, 0, }, @@ -7831,10 +7834,10 @@ static const tIEDefn IES_ReAssocRequest[] = { { offsetof(tDot11fReAssocRequest, QosMapSet), offsetof(tDot11fIEQosMapSet, present), 0, "QosMapSet", 0, 2, 62, SigIeQosMapSet, {0, 0, 0, 0, 0}, 0, DOT11F_EID_QOSMAPSET, 0, }, - { offsetof(tDot11fReAssocRequest, vendor2_ie), - offsetof(tDot11fIEvendor2_ie, present), 0, "vendor2_ie", - 0, 7, 28, SigIevendor2_ie, {0, 144, 76, 0, 0}, - 3, DOT11F_EID_VENDOR2_IE, 0, }, + { offsetof(tDot11fReAssocRequest, vendor_vht_ie), + offsetof(tDot11fIEvendor_vht_ie, present), 0, "vendor_vht_ie", + 0, 7, 28, SigIevendor_vht_ie, {0, 144, 76, 0, 0}, + 3, DOT11F_EID_VENDOR_VHT_IE, 0, }, { offsetof(tDot11fReAssocRequest, hs20vendor_ie), offsetof(tDot11fIEhs20vendor_ie, present), 0, "hs20vendor_ie", 0, 7, 9, SigIehs20vendor_ie, {80, 111, 154, 16, 0}, @@ -7965,10 +7968,10 @@ static const tIEDefn IES_ReAssocResponse[] = { { offsetof(tDot11fReAssocResponse, QosMapSet), offsetof(tDot11fIEQosMapSet, present), 0, "QosMapSet", 0, 2, 62, SigIeQosMapSet, {0, 0, 0, 0, 0}, 0, DOT11F_EID_QOSMAPSET, 0, }, - { offsetof(tDot11fReAssocResponse, vendor2_ie), - offsetof(tDot11fIEvendor2_ie, present), 0, "vendor2_ie", - 0, 7, 28, SigIevendor2_ie, {0, 144, 76, 0, 0}, - 3, DOT11F_EID_VENDOR2_IE, 0, }, + { offsetof(tDot11fReAssocResponse, vendor_vht_ie), + offsetof(tDot11fIEvendor_vht_ie, present), 0, "vendor_vht_ie", + 0, 7, 28, SigIevendor_vht_ie, {0, 144, 76, 0, 0}, + 3, DOT11F_EID_VENDOR_VHT_IE, 0, }, {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },}; uint32_t dot11f_unpack_re_assoc_response(tpAniSirGlobal pCtx, @@ -10274,13 +10277,13 @@ static uint32_t unpack_core(tpAniSirGlobal pCtx, sizeof(tDot11fIEsec_chan_offset_ele) * countOffset)); break; - case SigIevendor2_ie: + case SigIevendor_vht_ie: status |= - dot11f_unpack_ie_vendor2_ie( + dot11f_unpack_ie_vendor_vht_ie( pCtx, pBufRemaining, len, - (tDot11fIEvendor2_ie *) + (tDot11fIEvendor_vht_ie *) (pFrm + pIe->offset + - sizeof(tDot11fIEvendor2_ie) * + sizeof(tDot11fIEvendor_vht_ie) * countOffset)); break; default: @@ -11453,8 +11456,8 @@ uint32_t dot11f_get_packed_ie_hs20vendor_ie(tpAniSirGlobal pCtx, return status; } /* End dot11f_get_packed_ie_hs20vendor_ie. */ -uint32_t dot11f_get_packed_ie_vendor2_ie(tpAniSirGlobal pCtx, - tDot11fIEvendor2_ie *pIe, uint32_t *pnNeeded) +uint32_t dot11f_get_packed_ie_vendor_vht_ie(tpAniSirGlobal pCtx, + tDot11fIEvendor_vht_ie *pIe, uint32_t *pnNeeded) { uint32_t status = DOT11F_PARSE_SUCCESS; (void)pCtx; @@ -11462,11 +11465,11 @@ uint32_t dot11f_get_packed_ie_vendor2_ie(tpAniSirGlobal pCtx, *pnNeeded += 1; *pnNeeded += 1; status = get_packed_size_core(pCtx, (uint8_t *)pIe, pnNeeded, - IES_vendor2_ie); + IES_vendor_vht_ie); break; } return status; -} /* End dot11f_get_packed_ie_vendor2_ie. */ +} /* End dot11f_get_packed_ie_vendor_vht_ie. */ uint32_t dot11f_get_packed_add_ts_request_size(tpAniSirGlobal pCtx, tDot11fAddTSRequest *pFrm, uint32_t *pnNeeded) @@ -12949,11 +12952,11 @@ static uint32_t get_packed_size_core(tpAniSirGlobal pCtx, (pFrm + pIe->offset + offset * i))-> present; break; - case SigIevendor2_ie: - offset = sizeof(tDot11fIEvendor2_ie); + case SigIevendor_vht_ie: + offset = sizeof(tDot11fIEvendor_vht_ie); status |= - dot11f_get_packed_ie_vendor2_ie( - pCtx, (tDot11fIEvendor2_ie *) + dot11f_get_packed_ie_vendor_vht_ie( + pCtx, (tDot11fIEvendor_vht_ie *) (pFrm + pIe->offset + offset * i), pnNeeded); break; @@ -20413,17 +20416,17 @@ uint32_t dot11f_pack_ie_sec_chan_offset_ele(tpAniSirGlobal pCtx, return DOT11F_PARSE_SUCCESS; } /* End dot11f_pack_ie_sec_chan_offset_ele. */ -uint32_t dot11f_pack_ie_vendor2_ie(tpAniSirGlobal pCtx, - tDot11fIEvendor2_ie *pSrc, - uint8_t *pBuf, - uint32_t nBuf, - uint32_t *pnConsumed) +uint32_t dot11f_pack_ie_vendor_vht_ie(tpAniSirGlobal pCtx, + tDot11fIEvendor_vht_ie *pSrc, + uint8_t *pBuf, + uint32_t nBuf, + uint32_t *pnConsumed) { uint8_t *pIeLen = 0; uint32_t nConsumedOnEntry = *pnConsumed; uint32_t nNeeded = 0U; uint32_t status = DOT11F_PARSE_SUCCESS; - status = dot11f_get_packed_ie_vendor2_ie(pCtx, pSrc, &nNeeded); + status = dot11f_get_packed_ie_vendor_vht_ie(pCtx, pSrc, &nNeeded); if (!DOT11F_SUCCEEDED(status)) return status; while (pSrc->present) { @@ -20450,8 +20453,8 @@ uint32_t dot11f_pack_ie_vendor2_ie(tpAniSirGlobal pCtx, pBuf, nBuf, pnConsumed, - FFS_vendor2_ie, - IES_vendor2_ie); + FFS_vendor_vht_ie, + IES_vendor_vht_ie); break; } (void)pCtx; @@ -20459,7 +20462,7 @@ uint32_t dot11f_pack_ie_vendor2_ie(tpAniSirGlobal pCtx, *pIeLen = *pnConsumed - nConsumedOnEntry - 2; } return status; -} /* End dot11f_pack_ie_vendor2_ie. */ +} /* End dot11f_pack_ie_vendor_vht_ie. */ uint32_t dot11f_pack_add_ts_request(tpAniSirGlobal pCtx, tDot11fAddTSRequest *pFrm, @@ -22402,12 +22405,12 @@ static uint32_t pack_core(tpAniSirGlobal pCtx, sizeof(tDot11fIEsec_chan_offset_ele) * i), pBufRemaining, nBufRemaining, &len); break; - case SigIevendor2_ie: + case SigIevendor_vht_ie: status |= - dot11f_pack_ie_vendor2_ie( - pCtx, (tDot11fIEvendor2_ie *) + dot11f_pack_ie_vendor_vht_ie( + pCtx, (tDot11fIEvendor_vht_ie *) (pSrc + pIe->offset + - sizeof(tDot11fIEvendor2_ie) * i), + sizeof(tDot11fIEvendor_vht_ie) * i), pBufRemaining, nBufRemaining, &len); break; default: diff --git a/core/mac/src/sys/legacy/src/utils/src/parser_api.c b/core/mac/src/sys/legacy/src/utils/src/parser_api.c index 360c76a1df92..4cfb1fff3c6f 100644 --- a/core/mac/src/sys/legacy/src/utils/src/parser_api.c +++ b/core/mac/src/sys/legacy/src/utils/src/parser_api.c @@ -2561,19 +2561,19 @@ tSirRetStatus sir_convert_probe_frame2_struct(tpAniSirGlobal pMac, pProbeResp->Vendor1IEPresent = pr->Vendor1IE.present; pProbeResp->Vendor3IEPresent = pr->Vendor3IE.present; - pProbeResp->vendor2_ie.present = pr->vendor2_ie.present; - if (pr->vendor2_ie.present) { - pProbeResp->vendor2_ie.type = pr->vendor2_ie.type; - pProbeResp->vendor2_ie.sub_type = pr->vendor2_ie.sub_type; - } - if (pr->vendor2_ie.VHTCaps.present) { - qdf_mem_copy(&pProbeResp->vendor2_ie.VHTCaps, - &pr->vendor2_ie.VHTCaps, + pProbeResp->vendor_vht_ie.present = pr->vendor_vht_ie.present; + if (pr->vendor_vht_ie.present) { + pProbeResp->vendor_vht_ie.type = pr->vendor_vht_ie.type; + pProbeResp->vendor_vht_ie.sub_type = pr->vendor_vht_ie.sub_type; + } + if (pr->vendor_vht_ie.VHTCaps.present) { + qdf_mem_copy(&pProbeResp->vendor_vht_ie.VHTCaps, + &pr->vendor_vht_ie.VHTCaps, sizeof(tDot11fIEVHTCaps)); } - if (pr->vendor2_ie.VHTOperation.present) { - qdf_mem_copy(&pProbeResp->vendor2_ie.VHTOperation, - &pr->vendor2_ie.VHTOperation, + if (pr->vendor_vht_ie.VHTOperation.present) { + qdf_mem_copy(&pProbeResp->vendor_vht_ie.VHTOperation, + &pr->vendor_vht_ie.VHTOperation, sizeof(tDot11fIEVHTOperation)); } /* Update HS 2.0 Information Element */ @@ -2798,6 +2798,22 @@ sir_convert_assoc_req_frame2_struct(tpAniSirGlobal pMac, ext_cap->timing_meas, ext_cap->fine_time_meas_initiator, ext_cap->fine_time_meas_responder); } + + pAssocReq->vendor_vht_ie.present = ar->vendor_vht_ie.present; + if (ar->vendor_vht_ie.present) { + pAssocReq->vendor_vht_ie.type = ar->vendor_vht_ie.type; + pAssocReq->vendor_vht_ie.sub_type = ar->vendor_vht_ie.sub_type; + + if (ar->vendor_vht_ie.VHTCaps.present) { + qdf_mem_copy(&pAssocReq->vendor_vht_ie.VHTCaps, + &ar->vendor_vht_ie.VHTCaps, + sizeof(tDot11fIEVHTCaps)); + lim_log(pMac, LOG1, + FL("Received Assoc Request with Vendor specific VHT Cap")); + lim_log_vht_cap(pMac, &pAssocReq->VHTCaps); + } + } + qdf_mem_free(ar); return eSIR_SUCCESS; @@ -2998,27 +3014,27 @@ sir_convert_assoc_resp_frame2_struct(tpAniSirGlobal pMac, lim_log_qos_map_set(pMac, &pAssocRsp->QosMapSet); } - pAssocRsp->vendor2_ie.present = ar.vendor2_ie.present; - if (ar.vendor2_ie.present) { - pAssocRsp->vendor2_ie.type = ar.vendor2_ie.type; - pAssocRsp->vendor2_ie.sub_type = ar.vendor2_ie.sub_type; + pAssocRsp->vendor_vht_ie.present = ar.vendor_vht_ie.present; + if (ar.vendor_vht_ie.present) { + pAssocRsp->vendor_vht_ie.type = ar.vendor_vht_ie.type; + pAssocRsp->vendor_vht_ie.sub_type = ar.vendor_vht_ie.sub_type; } if (ar.OBSSScanParameters.present) { qdf_mem_copy(&pAssocRsp->obss_scanparams, &ar.OBSSScanParameters, sizeof(struct sDot11fIEOBSSScanParameters)); } - if (ar.vendor2_ie.VHTCaps.present) { - qdf_mem_copy(&pAssocRsp->vendor2_ie.VHTCaps, - &ar.vendor2_ie.VHTCaps, + if (ar.vendor_vht_ie.VHTCaps.present) { + qdf_mem_copy(&pAssocRsp->vendor_vht_ie.VHTCaps, + &ar.vendor_vht_ie.VHTCaps, sizeof(tDot11fIEVHTCaps)); lim_log(pMac, LOG1, FL("Received Assoc Response with Vendor specific VHT Cap")); lim_log_vht_cap(pMac, &pAssocRsp->VHTCaps); } - if (ar.vendor2_ie.VHTOperation.present) { - qdf_mem_copy(&pAssocRsp->vendor2_ie.VHTOperation, - &ar.vendor2_ie.VHTOperation, + if (ar.vendor_vht_ie.VHTOperation.present) { + qdf_mem_copy(&pAssocRsp->vendor_vht_ie.VHTOperation, + &ar.vendor_vht_ie.VHTOperation, sizeof(tDot11fIEVHTOperation)); lim_log(pMac, LOG1, FL("Received Assoc Response with Vendor specific VHT Oper")); @@ -3733,22 +3749,23 @@ sir_parse_beacon_ie(tpAniSirGlobal pMac, pBeaconStruct->Vendor1IEPresent = pBies->Vendor1IE.present; pBeaconStruct->Vendor3IEPresent = pBies->Vendor3IE.present; - pBeaconStruct->vendor2_ie.present = pBies->vendor2_ie.present; - if (pBies->vendor2_ie.present) { - pBeaconStruct->vendor2_ie.type = pBies->vendor2_ie.type; - pBeaconStruct->vendor2_ie.sub_type = pBies->vendor2_ie.sub_type; + pBeaconStruct->vendor_vht_ie.present = pBies->vendor_vht_ie.present; + if (pBies->vendor_vht_ie.present) { + pBeaconStruct->vendor_vht_ie.type = pBies->vendor_vht_ie.type; + pBeaconStruct->vendor_vht_ie.sub_type = + pBies->vendor_vht_ie.sub_type; } - if (pBies->vendor2_ie.VHTCaps.present) { - pBeaconStruct->vendor2_ie.VHTCaps.present = 1; - qdf_mem_copy(&pBeaconStruct->vendor2_ie.VHTCaps, - &pBies->vendor2_ie.VHTCaps, + if (pBies->vendor_vht_ie.VHTCaps.present) { + pBeaconStruct->vendor_vht_ie.VHTCaps.present = 1; + qdf_mem_copy(&pBeaconStruct->vendor_vht_ie.VHTCaps, + &pBies->vendor_vht_ie.VHTCaps, sizeof(tDot11fIEVHTCaps)); } - if (pBies->vendor2_ie.VHTOperation.present) { - pBeaconStruct->vendor2_ie.VHTOperation.present = 1; - qdf_mem_copy(&pBeaconStruct->vendor2_ie.VHTOperation, - &pBies->vendor2_ie.VHTOperation, + if (pBies->vendor_vht_ie.VHTOperation.present) { + pBeaconStruct->vendor_vht_ie.VHTOperation.present = 1; + qdf_mem_copy(&pBeaconStruct->vendor_vht_ie.VHTOperation, + &pBies->vendor_vht_ie.VHTOperation, sizeof(tDot11fIEVHTOperation)); } if (pBies->ExtCap.present) { @@ -4090,24 +4107,24 @@ sir_convert_beacon_frame2_struct(tpAniSirGlobal pMac, pBeaconStruct->Vendor1IEPresent = pBeacon->Vendor1IE.present; pBeaconStruct->Vendor3IEPresent = pBeacon->Vendor3IE.present; - pBeaconStruct->vendor2_ie.present = pBeacon->vendor2_ie.present; - if (pBeacon->vendor2_ie.present) { - pBeaconStruct->vendor2_ie.type = pBeacon->vendor2_ie.type; - pBeaconStruct->vendor2_ie.sub_type = - pBeacon->vendor2_ie.sub_type; + pBeaconStruct->vendor_vht_ie.present = pBeacon->vendor_vht_ie.present; + if (pBeacon->vendor_vht_ie.present) { + pBeaconStruct->vendor_vht_ie.type = pBeacon->vendor_vht_ie.type; + pBeaconStruct->vendor_vht_ie.sub_type = + pBeacon->vendor_vht_ie.sub_type; } - if (pBeacon->vendor2_ie.present) { + if (pBeacon->vendor_vht_ie.present) { PELOG1(lim_log(pMac, LOG1, FL("Vendor Specific VHT caps present in Beacon Frame!")); ) } - if (pBeacon->vendor2_ie.VHTCaps.present) { - qdf_mem_copy(&pBeaconStruct->vendor2_ie.VHTCaps, - &pBeacon->vendor2_ie.VHTCaps, + if (pBeacon->vendor_vht_ie.VHTCaps.present) { + qdf_mem_copy(&pBeaconStruct->vendor_vht_ie.VHTCaps, + &pBeacon->vendor_vht_ie.VHTCaps, sizeof(tDot11fIEVHTCaps)); } - if (pBeacon->vendor2_ie.VHTOperation.present) { - qdf_mem_copy(&pBeaconStruct->vendor2_ie.VHTOperation, + if (pBeacon->vendor_vht_ie.VHTOperation.present) { + qdf_mem_copy(&pBeaconStruct->vendor_vht_ie.VHTOperation, &pBeacon->VHTOperation, sizeof(tDot11fIEVHTOperation)); } diff --git a/core/pld/inc/pld_common.h b/core/pld/inc/pld_common.h index bcf647b0b1a4..4bb77b27cb94 100644 --- a/core/pld/inc/pld_common.h +++ b/core/pld/inc/pld_common.h @@ -379,4 +379,7 @@ void *pld_smmu_get_mapping(struct device *dev); int pld_smmu_map(struct device *dev, phys_addr_t paddr, uint32_t *iova_addr, size_t size); unsigned int pld_socinfo_get_serial_number(struct device *dev); + +void pld_enable_irq(struct device *dev, unsigned int ce_id); +void pld_disable_irq(struct device *dev, unsigned int ce_id); #endif diff --git a/core/sap/inc/sap_api.h b/core/sap/inc/sap_api.h index d9f06b8bf7c3..1087fe2c44e0 100644 --- a/core/sap/inc/sap_api.h +++ b/core/sap/inc/sap_api.h @@ -589,8 +589,8 @@ typedef struct sap_Config { uint8_t short_retry_limit; uint8_t long_retry_limit; uint8_t ampdu_size; - tSirMacRateSet supp_rate_set; - tSirMacRateSet extended_rate_set; + tSirMacRateSet supported_rates; + tSirMacRateSet extended_rates; enum sap_acs_dfs_mode acs_dfs_mode; } tsap_Config_t; diff --git a/core/sap/src/sap_fsm.c b/core/sap/src/sap_fsm.c index 8eef7af80814..1ed36bbdef35 100644 --- a/core/sap/src/sap_fsm.c +++ b/core/sap/src/sap_fsm.c @@ -4199,6 +4199,22 @@ sapconvert_to_csr_profile(tsap_Config_t *pconfig_params, eCsrRoamBssType bssType } profile->sap_dot11mc = pconfig_params->sap_dot11mc; + if (pconfig_params->supported_rates.numRates) { + qdf_mem_copy(profile->supported_rates.rate, + pconfig_params->supported_rates.rate, + pconfig_params->supported_rates.numRates); + profile->supported_rates.numRates = + pconfig_params->supported_rates.numRates; + } + + if (pconfig_params->extended_rates.numRates) { + qdf_mem_copy(profile->extended_rates.rate, + pconfig_params->extended_rates.rate, + pconfig_params->extended_rates.numRates); + profile->extended_rates.numRates = + pconfig_params->extended_rates.numRates; + } + return eSAP_STATUS_SUCCESS; /* Success. */ } diff --git a/core/sme/inc/csr_api.h b/core/sme/inc/csr_api.h index 07e9874784d9..517a01185aab 100644 --- a/core/sme/inc/csr_api.h +++ b/core/sme/inc/csr_api.h @@ -965,9 +965,10 @@ typedef struct tagCsrRoamProfile { tSirAddIeParams addIeParams; uint8_t sap_dot11mc; uint8_t beacon_tx_rate; - tSirMacRateSet supp_rate_set; - tSirMacRateSet extended_rate_set; + tSirMacRateSet supported_rates; + tSirMacRateSet extended_rates; bool do_not_roam; + } tCsrRoamProfile; #ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH @@ -1215,6 +1216,7 @@ typedef struct tagCsrConfigParam { uint8_t enable_txbf_sap_mode; uint8_t enable2x2; bool enableVhtFor24GHz; + bool vendor_vht_sap; uint8_t enableMuBformee; uint8_t enableVhtpAid; uint8_t enableVhtGid; @@ -1304,6 +1306,8 @@ typedef struct tagCsrConfigParam { enum wmi_dwelltime_adaptive_mode scan_adaptive_dwell_mode; enum wmi_dwelltime_adaptive_mode roamscan_adaptive_dwell_mode; struct csr_sta_roam_policy_params sta_roam_policy_params; + uint32_t tx_aggregation_size; + uint32_t rx_aggregation_size; } tCsrConfigParam; /* Tush */ diff --git a/core/sme/inc/csr_internal.h b/core/sme/inc/csr_internal.h index dd9dffafea2c..89bf7b20a3e9 100644 --- a/core/sme/inc/csr_internal.h +++ b/core/sme/inc/csr_internal.h @@ -663,9 +663,12 @@ typedef struct tagCsrConfig { uint32_t edca_bk_aifs; uint32_t edca_be_aifs; bool enable_fatal_event; + bool vendor_vht_sap; enum wmi_dwelltime_adaptive_mode scan_adaptive_dwell_mode; enum wmi_dwelltime_adaptive_mode roamscan_adaptive_dwell_mode; struct csr_sta_roam_policy_params sta_roam_policy; + uint32_t tx_aggregation_size; + uint32_t rx_aggregation_size; } tCsrConfig; typedef struct tagCsrChannelPowerInfo { diff --git a/core/sme/inc/sme_api.h b/core/sme/inc/sme_api.h index 15f845510ef9..cfbbe22ec405 100644 --- a/core/sme/inc/sme_api.h +++ b/core/sme/inc/sme_api.h @@ -1316,4 +1316,11 @@ QDF_STATUS sme_encrypt_decrypt_msg_deregister_callback(tHalHandle h_hal); QDF_STATUS sme_encrypt_decrypt_msg(tHalHandle hal, struct encrypt_decrypt_req_params *encrypt_decrypt_params); +/** + * sme_set_cts2self_for_p2p_go() - sme function to set ini parms to FW. + * @hal: reference to the HAL + * + * Return: QDF_STATUS + */ +QDF_STATUS sme_set_cts2self_for_p2p_go(tHalHandle hal); #endif /* #if !defined( __SME_API_H ) */ diff --git a/core/sme/src/common/sme_api.c b/core/sme/src/common/sme_api.c index 57c167a44b1f..7bfe3c9ff9a4 100644 --- a/core/sme/src/common/sme_api.c +++ b/core/sme/src/common/sme_api.c @@ -1073,6 +1073,104 @@ bool sme_command_pending(tpAniSirGlobal pMac) LL_ACCESS_NOLOCK); } +/** + * sme_get_sessionid_from_activelist() - gets session id + * @mac: mac context + * + * This function is used to get session id from sme command + * active list + * + * Return: returns session id + */ +uint32_t sme_get_sessionid_from_activelist(tpAniSirGlobal mac) +{ + tListElem *entry; + tSmeCmd *command; + uint32_t session_id = CSR_SESSION_ID_INVALID; + + entry = csr_ll_peek_head(&mac->sme.smeCmdActiveList, LL_ACCESS_LOCK); + if (entry) { + command = GET_BASE_ADDR(entry, tSmeCmd, Link); + session_id = command->sessionId; + } + + return session_id; +} + +/** + * sme_state_info_dump() - prints state information of sme layer + * @buf: buffer pointer + * @size: size of buffer to be filled + * + * This function is used to dump state information of sme layer + * + * Return: None + */ +static void sme_state_info_dump(char **buf_ptr, uint16_t *size) +{ + uint32_t session_id, active_session_id; + tHalHandle hal; + tpAniSirGlobal mac; + uint16_t len = 0; + char *buf = *buf_ptr; + eCsrConnectState connect_state; + + hal = cds_get_context(QDF_MODULE_ID_SME); + if (hal == NULL) { + QDF_ASSERT(0); + return; + } + + mac = PMAC_STRUCT(hal); + sms_log(mac, LOG1, FL("size of buffer: %d"), *size); + + active_session_id = sme_get_sessionid_from_activelist(mac); + if (active_session_id != CSR_SESSION_ID_INVALID) { + len += qdf_scnprintf(buf + len, *size - len, + "\n active command sessionid %d", active_session_id); + } + + for (session_id = 0; session_id < CSR_ROAM_SESSION_MAX; session_id++) { + if (CSR_IS_SESSION_VALID(mac, session_id)) { + connect_state = + mac->roam.roamSession[session_id].connectState; + if ((eCSR_ASSOC_STATE_TYPE_INFRA_ASSOCIATED == + connect_state) + || (eCSR_ASSOC_STATE_TYPE_INFRA_CONNECTED == + connect_state)) { + len += qdf_scnprintf(buf + len, *size - len, + "\n NeighborRoamState: %d", + mac->roam.neighborRoamInfo[session_id]. + neighborRoamState); + len += qdf_scnprintf(buf + len, *size - len, + "\n RoamState: %d", mac->roam. + curState[session_id]); + len += qdf_scnprintf(buf + len, *size - len, + "\n RoamSubState: %d", mac->roam. + curSubState[session_id]); + len += qdf_scnprintf(buf + len, *size - len, + "\n ConnectState: %d", + connect_state); + } + } + } + + *size -= len; + *buf_ptr += len; +} + +/** + * sme_register_debug_callback() - registration function sme layer + * to print sme state information + * + * Return: None + */ +static void sme_register_debug_callback(void) +{ + qdf_register_debug_callback(QDF_MODULE_ID_SME, &sme_state_info_dump); +} + + /* Global APIs */ /** @@ -1134,6 +1232,7 @@ QDF_STATUS sme_open(tHalHandle hHal) } sme_p2p_open(pMac); sme_trace_init(pMac); + sme_register_debug_callback(); return status; } @@ -16715,3 +16814,28 @@ QDF_STATUS sme_encrypt_decrypt_msg_deregister_callback(tHalHandle h_hal) } return status; } + +QDF_STATUS sme_set_cts2self_for_p2p_go(tHalHandle hal_handle) +{ + cds_msg_t message; + void *wma_handle; + + wma_handle = cds_get_context(QDF_MODULE_ID_WMA); + if (!wma_handle) { + QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_ERROR, + "wma_handle is NULL"); + return QDF_STATUS_E_FAILURE; + } + + message.bodyptr = NULL; + message.type = WMA_SET_CTS2SELF_FOR_STA; + + if (QDF_STATUS_SUCCESS != + wma_set_cts2self_for_p2p_go(wma_handle, true)) { + QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_ERROR, + "%s: Failed to set cts2self for p2p GO to firmware", + __func__); + return QDF_STATUS_E_FAILURE; + } + return QDF_STATUS_SUCCESS; +} diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index ad3768c3b13e..300ce13d1556 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -2427,6 +2427,8 @@ QDF_STATUS csr_change_default_config_param(tpAniSirGlobal pMac, pParam->isRoamOffloadEnabled; #endif pMac->roam.configParam.obssEnabled = pParam->obssEnabled; + pMac->roam.configParam.vendor_vht_sap = + pParam->vendor_vht_sap; pMac->roam.configParam.conc_custom_rule1 = pParam->conc_custom_rule1; pMac->roam.configParam.conc_custom_rule2 = @@ -2518,6 +2520,11 @@ QDF_STATUS csr_change_default_config_param(tpAniSirGlobal pMac, pMac->roam.configParam.sta_roam_policy.skip_unsafe_channels = pParam->sta_roam_policy_params.skip_unsafe_channels; + pMac->roam.configParam.tx_aggregation_size = + pParam->tx_aggregation_size; + pMac->roam.configParam.rx_aggregation_size = + pParam->rx_aggregation_size; + } return status; } @@ -2648,8 +2655,10 @@ QDF_STATUS csr_get_config_param(tpAniSirGlobal pMac, tCsrConfigParam *pParam) pParam->enable_dot11p = pMac->enable_dot11p; csr_set_channels(pMac, pParam); pParam->obssEnabled = cfg_params->obssEnabled; + pParam->vendor_vht_sap = + pMac->roam.configParam.vendor_vht_sap; pParam->roam_dense_rssi_thresh_offset = - cfg_params->roam_params.dense_rssi_thresh_offset; + cfg_params->roam_params.dense_rssi_thresh_offset; pParam->roam_dense_min_aps = cfg_params->roam_params.dense_min_aps_cnt; pParam->roam_dense_traffic_thresh = @@ -2726,6 +2735,10 @@ QDF_STATUS csr_get_config_param(tpAniSirGlobal pMac, tCsrConfigParam *pParam) pMac->roam.configParam.sta_roam_policy.dfs_mode; pParam->sta_roam_policy_params.skip_unsafe_channels = pMac->roam.configParam.sta_roam_policy.skip_unsafe_channels; + pParam->tx_aggregation_size = + pMac->roam.configParam.tx_aggregation_size; + pParam->rx_aggregation_size = + pMac->roam.configParam.rx_aggregation_size; return QDF_STATUS_SUCCESS; } @@ -7315,6 +7328,20 @@ QDF_STATUS csr_roam_copy_profile(tpAniSirGlobal pMac, } qdf_mem_copy(&pDstProfile->addIeParams, &pSrcProfile->addIeParams, sizeof(tSirAddIeParams)); + if (pSrcProfile->supported_rates.numRates) { + qdf_mem_copy(pDstProfile->supported_rates.rate, + pSrcProfile->supported_rates.rate, + pSrcProfile->supported_rates.numRates); + pDstProfile->supported_rates.numRates = + pSrcProfile->supported_rates.numRates; + } + if (pSrcProfile->extended_rates.numRates) { + qdf_mem_copy(pDstProfile->extended_rates.rate, + pSrcProfile->extended_rates.rate, + pSrcProfile->extended_rates.numRates); + pDstProfile->extended_rates.numRates = + pSrcProfile->extended_rates.numRates; + } end: if (!QDF_IS_STATUS_SUCCESS(status)) { csr_release_profile(pMac, pDstProfile); @@ -12517,12 +12544,11 @@ uint8_t csr_roam_get_ibss_start_channel_number24(tpAniSirGlobal pMac) return channel; } - /** * csr_populate_basic_rates() - populates OFDM or CCK rates * @rates: rate struct to populate - * @type: true: ofdm rates, false: cck rates - * @masked: indicates if rates are to be masked with + * @is_ofdm_rates: true: ofdm rates, false: cck rates + * @is_basic_rates: indicates if rates are to be masked with * CSR_DOT11_BASIC_RATE_MASK * * This function will populate OFDM or CCK rates @@ -12530,8 +12556,10 @@ uint8_t csr_roam_get_ibss_start_channel_number24(tpAniSirGlobal pMac) * Return: void */ static void -csr_populate_basic_rates(tSirMacRateSet *rate_set, bool type, bool masked) +csr_populate_basic_rates(tSirMacRateSet *rate_set, bool is_ofdm_rates, + bool is_basic_rates) { + int i = 0; uint8_t ofdm_rates[8] = { SIR_MAC_RATE_6, SIR_MAC_RATE_9, @@ -12549,23 +12577,30 @@ csr_populate_basic_rates(tSirMacRateSet *rate_set, bool type, bool masked) SIR_MAC_RATE_11 }; - if (type == true) { + if (is_ofdm_rates == true) { rate_set->numRates = 8; qdf_mem_copy(rate_set->rate, ofdm_rates, sizeof(ofdm_rates)); - if (masked) { + if (is_basic_rates) { rate_set->rate[0] |= CSR_DOT11_BASIC_RATE_MASK; rate_set->rate[2] |= CSR_DOT11_BASIC_RATE_MASK; rate_set->rate[4] |= CSR_DOT11_BASIC_RATE_MASK; } + for (i = 0; i < rate_set->numRates; i++) + QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_INFO, + FL("Default OFDM rate is %2x"), rate_set->rate[i]); } else { rate_set->numRates = 4; qdf_mem_copy(rate_set->rate, cck_rates, sizeof(cck_rates)); - if (masked) { + if (is_basic_rates) { rate_set->rate[0] |= CSR_DOT11_BASIC_RATE_MASK; rate_set->rate[1] |= CSR_DOT11_BASIC_RATE_MASK; rate_set->rate[2] |= CSR_DOT11_BASIC_RATE_MASK; rate_set->rate[3] |= CSR_DOT11_BASIC_RATE_MASK; } + for (i = 0; i < rate_set->numRates; i++) + QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_INFO, + FL("Default CCK rate is %2x"), rate_set->rate[i]); + } } @@ -12601,6 +12636,41 @@ csr_convert_mode_to_nw_type(eCsrCfgDot11Mode dot11_mode, eCsrBand band) } /** + * csr_populate_supported_rates_from_hostapd() - populates operational + * and extended rates. + * from hostapd.conf file + * @opr_rates: rate struct to populate operational rates + * @ext_rates: rate struct to populate extended rates + * @profile: bss profile + * + * Return: void + */ +static void csr_populate_supported_rates_from_hostapd(tSirMacRateSet *opr_rates, + tSirMacRateSet *ext_rates, + tCsrRoamProfile *pProfile) +{ + int i = 0; + if (pProfile->supported_rates.numRates) { + opr_rates->numRates = pProfile->supported_rates.numRates; + qdf_mem_copy(opr_rates->rate, + pProfile->supported_rates.rate, + pProfile->supported_rates.numRates); + for (i = 0; i < opr_rates->numRates; i++) + QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_INFO, + FL("Supported Rate is %2x"), opr_rates->rate[i]); + } + if (pProfile->extended_rates.numRates) { + ext_rates->numRates = + pProfile->extended_rates.numRates; + qdf_mem_copy(ext_rates->rate, + pProfile->extended_rates.rate, + pProfile->extended_rates.numRates); + for (i = 0; i < ext_rates->numRates; i++) + QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_INFO, + FL("Extended Rate is %2x"), ext_rates->rate[i]); + } +} +/** * csr_roam_get_bss_start_parms() - get bss start param from profile * @pMac: mac global context * @pProfile: roam profile @@ -12642,58 +12712,77 @@ csr_roam_get_bss_start_parms(tpAniSirGlobal pMac, nw_type = csr_convert_mode_to_nw_type(pParam->uCfgDot11Mode, band); ext_rates->numRates = 0; - - switch (nw_type) { - default: - sms_log(pMac, LOGE, FL("sees an unknown pSirNwType (%d)"), - nw_type); - case eSIR_11A_NW_TYPE: - csr_populate_basic_rates(opr_rates, true, true); - if (eCSR_OPERATING_CHANNEL_ANY != tmp_opr_ch) { - opr_ch = tmp_opr_ch; - break; - } - opr_ch = csr_roam_get_ibss_start_channel_number50(pMac); - if (0 == opr_ch && - CSR_IS_PHY_MODE_DUAL_BAND(pProfile->phyMode) && - CSR_IS_PHY_MODE_DUAL_BAND(pMac->roam.configParam.phyMode)) { - /* - * We could not find a 5G channel by auto pick, let's - * try 2.4G channels. We only do this here because - * csr_roam_get_phy_mode_band_for_bss always picks 11a - * for AUTO - */ - nw_type = eSIR_11B_NW_TYPE; - opr_ch = csr_roam_get_ibss_start_channel_number24(pMac); - csr_populate_basic_rates(opr_rates, false, true); - } - break; - case eSIR_11B_NW_TYPE: - csr_populate_basic_rates(opr_rates, false, true); - if (eCSR_OPERATING_CHANNEL_ANY == tmp_opr_ch) - opr_ch = csr_roam_get_ibss_start_channel_number24(pMac); - else - opr_ch = tmp_opr_ch; - break; - case eSIR_11G_NW_TYPE: - /* For P2P Client and P2P GO, disable 11b rates */ - if ((pProfile->csrPersona == QDF_P2P_CLIENT_MODE) - || (pProfile->csrPersona == QDF_P2P_GO_MODE) - || (eCSR_CFG_DOT11_MODE_11G_ONLY == - pParam->uCfgDot11Mode)) { + /* + * hostapd.conf will populate its basic and extended rates + * as per hw_mode but if acs in ini is enabled, driver should + * ignore basic and extended rates from hostapd.conf and should + * populate default rates. + */ + if (pProfile->supported_rates.numRates || + pProfile->extended_rates.numRates) { + csr_populate_supported_rates_from_hostapd(opr_rates, + ext_rates, pProfile); + pParam->operationChn = tmp_opr_ch; + } else { + switch (nw_type) { + default: + sms_log(pMac, LOGE, + FL("sees an unknown pSirNwType (%d)"), + nw_type); + case eSIR_11A_NW_TYPE: csr_populate_basic_rates(opr_rates, true, true); - } else { + if (eCSR_OPERATING_CHANNEL_ANY != tmp_opr_ch) { + opr_ch = tmp_opr_ch; + break; + } + opr_ch = csr_roam_get_ibss_start_channel_number50(pMac); + if (0 == opr_ch && + CSR_IS_PHY_MODE_DUAL_BAND(pProfile->phyMode) && + CSR_IS_PHY_MODE_DUAL_BAND( + pMac->roam.configParam.phyMode)) { + /* + * We could not find a 5G channel by auto pick, + * let's try 2.4G channels. We only do this here + * because csr_roam_get_phy_mode_band_for_bss + * always picks 11a for AUTO + */ + nw_type = eSIR_11B_NW_TYPE; + opr_ch = + csr_roam_get_ibss_start_channel_number24(pMac); + csr_populate_basic_rates(opr_rates, false, + true); + } + break; + case eSIR_11B_NW_TYPE: csr_populate_basic_rates(opr_rates, false, true); - csr_populate_basic_rates(ext_rates, true, false); + if (eCSR_OPERATING_CHANNEL_ANY == tmp_opr_ch) + opr_ch = + csr_roam_get_ibss_start_channel_number24(pMac); + else + opr_ch = tmp_opr_ch; + break; + case eSIR_11G_NW_TYPE: + /* For P2P Client and P2P GO, disable 11b rates */ + if ((pProfile->csrPersona == QDF_P2P_CLIENT_MODE) || + (pProfile->csrPersona == QDF_P2P_GO_MODE) || + (eCSR_CFG_DOT11_MODE_11G_ONLY == + pParam->uCfgDot11Mode)) { + csr_populate_basic_rates(opr_rates, true, true); + } else { + csr_populate_basic_rates(opr_rates, false, + true); + csr_populate_basic_rates(ext_rates, true, + false); + } + if (eCSR_OPERATING_CHANNEL_ANY == tmp_opr_ch) + opr_ch = + csr_roam_get_ibss_start_channel_number24(pMac); + else + opr_ch = tmp_opr_ch; + break; } - - if (eCSR_OPERATING_CHANNEL_ANY == tmp_opr_ch) - opr_ch = csr_roam_get_ibss_start_channel_number24(pMac); - else - opr_ch = tmp_opr_ch; - break; + pParam->operationChn = opr_ch; } - pParam->operationChn = opr_ch; pParam->sirNwType = nw_type; pParam->ch_params.ch_width = pProfile->ch_params.ch_width; pParam->ch_params.center_freq_seg0 = @@ -14197,10 +14286,11 @@ QDF_STATUS csr_send_join_req_msg(tpAniSirGlobal pMac, uint32_t sessionId, pIes->VHTCaps.numSoundingDim) txBFCsnValue = QDF_MIN(txBFCsnValue, pIes->VHTCaps.numSoundingDim); - else if (IS_BSS_VHT_CAPABLE(pIes->vendor2_ie.VHTCaps) - && pIes->vendor2_ie.VHTCaps.numSoundingDim) + else if (IS_BSS_VHT_CAPABLE(pIes->vendor_vht_ie.VHTCaps) + && pIes->vendor_vht_ie.VHTCaps.numSoundingDim) txBFCsnValue = QDF_MIN(txBFCsnValue, - pIes->vendor2_ie.VHTCaps.numSoundingDim); + pIes->vendor_vht_ie. + VHTCaps.numSoundingDim); } csr_join_req->vht_config.csnof_beamformer_antSup = txBFCsnValue; @@ -14989,6 +15079,8 @@ QDF_STATUS csr_send_mb_start_bss_req_msg(tpAniSirGlobal pMac, uint32_t sessionId sizeof(pParam->addIeParams)); pMsg->obssEnabled = pMac->roam.configParam.obssEnabled; pMsg->sap_dot11mc = pParam->sap_dot11mc; + pMsg->vendor_vht_sap = + pMac->roam.configParam.vendor_vht_sap; return cds_send_mb_message_to_mac(pMsg); } @@ -15224,6 +15316,10 @@ QDF_STATUS csr_process_add_sta_session_command(tpAniSirGlobal pMac, add_sta_self_req->sub_type = pAddStaReq->subType; add_sta_self_req->nss_2g = nss_2g; add_sta_self_req->nss_5g = nss_5g; + add_sta_self_req->tx_aggregation_size = + pMac->roam.configParam.tx_aggregation_size; + add_sta_self_req->rx_aggregation_size = + pMac->roam.configParam.rx_aggregation_size; msg.type = WMA_ADD_STA_SELF_REQ; msg.reserved = 0; diff --git a/core/sme/src/csr/csr_util.c b/core/sme/src/csr/csr_util.c index bbcecf077bec..5aadb0a1f0b1 100644 --- a/core/sme/src/csr/csr_util.c +++ b/core/sme/src/csr/csr_util.c @@ -1467,7 +1467,7 @@ QDF_STATUS csr_get_phy_mode_from_bss(tpAniSirGlobal pMac, if (pIes->HTCaps.present) { phyMode = eCSR_DOT11_MODE_11n; if (IS_BSS_VHT_CAPABLE(pIes->VHTCaps) || - IS_BSS_VHT_CAPABLE(pIes->vendor2_ie.VHTCaps)) + IS_BSS_VHT_CAPABLE(pIes->vendor_vht_ie.VHTCaps)) phyMode = eCSR_DOT11_MODE_11ac; } *pPhyMode = phyMode; diff --git a/core/wma/inc/wma.h b/core/wma/inc/wma.h index f22aea6dac5d..d2f86a0838ac 100644 --- a/core/wma/inc/wma.h +++ b/core/wma/inc/wma.h @@ -991,6 +991,7 @@ struct wma_txrx_node { uint8_t wep_default_key_idx; tSirHostOffloadReq arp_offload_req; tSirHostOffloadReq ns_offload_req; + bool is_vdev_valid; }; #if defined(QCA_WIFI_FTM) @@ -1070,6 +1071,18 @@ struct dbs_hw_mode_info { uint32_t *hw_mode_list; }; +/** + * struct mac_ss_bw_info - hw_mode_list PHY/MAC params for each MAC + * @mac_tx_stream: Max TX stream + * @mac_rx_stream: Max RX stream + * @mac_bw: Max bandwidth + */ +struct mac_ss_bw_info { + uint32_t mac_tx_stream; + uint32_t mac_rx_stream; + uint32_t mac_bw; +}; + /* Current HTC credit is 2, pool size of 50 is sufficient */ #define WMI_DESC_POOL_MAX 50 diff --git a/core/wma/inc/wma_api.h b/core/wma/inc/wma_api.h index dcd121e37fdb..295973ba2bc7 100644 --- a/core/wma/inc/wma_api.h +++ b/core/wma/inc/wma_api.h @@ -192,7 +192,6 @@ QDF_STATUS wma_get_hw_mode_from_idx(uint32_t idx, struct sir_hw_mode_params *hw_mode); int8_t wma_get_num_dbs_hw_modes(void); bool wma_is_hw_dbs_capable(void); -bool wma_is_hw_agile_dfs_capable(void); int8_t wma_get_mac_id_of_vdev(uint32_t vdev_id); void wma_update_intf_hw_mode_params(uint32_t vdev_id, uint32_t mac_id, uint32_t cfgd_hw_mode_index); @@ -202,7 +201,6 @@ void wma_set_dbs_capability_ut(uint32_t dbs); QDF_STATUS wma_get_dbs_hw_modes(bool *one_by_one_dbs, bool *two_by_two_dbs); QDF_STATUS wma_get_current_hw_mode(struct sir_hw_mode_params *hw_mode); bool wma_is_dbs_enable(void); -bool wma_is_agile_dfs_enable(void); QDF_STATUS wma_get_updated_scan_config(uint32_t *scan_config, bool dbs_scan, bool dbs_plus_agile_scan, @@ -303,4 +301,19 @@ void wma_process_pdev_hw_mode_trans_ind(void *wma, QDF_STATUS wma_set_powersave_config(uint8_t val); QDF_STATUS wma_encrypt_decrypt_msg(WMA_HANDLE wma, struct encrypt_decrypt_req_params *encrypt_decrypt_params); + +/** + * wma_set_cts2self_for_p2p_go() - set CTS2SELF command for P2P GO. + * @wma_handle: pointer to wma handle. + * @cts2self_for_p2p_go: value needs to set to firmware. + * + * At the time of driver startup, inform about ini parma to FW that + * if legacy client connects to P2P GO, stop using NOA for P2P GO. + * + * Return: QDF_STATUS. + */ +QDF_STATUS wma_set_cts2self_for_p2p_go(void *wma_handle, + uint32_t cts2self_for_p2p_go); +QDF_STATUS wma_set_tx_rx_aggregation_size + (struct sir_set_tx_rx_aggregation_size *tx_rx_aggregation_size); #endif diff --git a/core/wma/inc/wma_if.h b/core/wma/inc/wma_if.h index 31939b60a393..ac553511ed98 100644 --- a/core/wma/inc/wma_if.h +++ b/core/wma/inc/wma_if.h @@ -514,6 +514,8 @@ typedef struct { uint8_t nss_2g; uint8_t nss_5g; uint8_t beacon_tx_rate; + uint32_t tx_aggregation_size; + uint32_t rx_aggregation_size; } tAddBssParams, *tpAddBssParams; /** @@ -1151,6 +1153,8 @@ struct add_sta_self_params { uint8_t nss_2g; uint8_t nss_5g; uint32_t status; + uint32_t tx_aggregation_size; + uint32_t rx_aggregation_size; }; /** diff --git a/core/wma/inc/wma_types.h b/core/wma/inc/wma_types.h index 89f06c9db0b5..143bc5b53d9a 100644 --- a/core/wma/inc/wma_types.h +++ b/core/wma/inc/wma_types.h @@ -467,6 +467,7 @@ #define WMA_ADD_BCN_FILTER_CMDID SIR_HAL_ADD_BCN_FILTER_CMDID #define WMA_REMOVE_BCN_FILTER_CMDID SIR_HAL_REMOVE_BCN_FILTER_CMDID #define WMA_SET_ADAPT_DWELLTIME_CONF_PARAMS SIR_HAL_SET_ADAPT_DWELLTIME_PARAMS +#define WMA_SET_CTS2SELF_FOR_STA SIR_HAL_SET_CTS2SELF_FOR_STA #define WDA_BPF_GET_CAPABILITIES_REQ SIR_HAL_BPF_GET_CAPABILITIES_REQ #define WDA_BPF_SET_INSTRUCTIONS_REQ SIR_HAL_BPF_SET_INSTRUCTIONS_REQ diff --git a/core/wma/src/wma_dev_if.c b/core/wma/src/wma_dev_if.c index d3d479e8f427..6a7d2084b79c 100644 --- a/core/wma/src/wma_dev_if.c +++ b/core/wma/src/wma_dev_if.c @@ -546,6 +546,8 @@ static QDF_STATUS wma_handle_vdev_detach(tp_wma_handle wma_handle, if (!generate_rsp) { WMA_LOGE("Call txrx detach w/o callback for vdev %d", vdev_id); ol_txrx_vdev_detach(iface->handle, NULL, NULL); + iface->handle = NULL; + wma_handle->interfaces[vdev_id].is_vdev_valid = false; goto out; } @@ -573,6 +575,8 @@ static QDF_STATUS wma_handle_vdev_detach(tp_wma_handle wma_handle, } WMA_LOGD("Call txrx detach with callback for vdev %d", vdev_id); ol_txrx_vdev_detach(iface->handle, NULL, NULL); + iface->handle = NULL; + wma_handle->interfaces[vdev_id].is_vdev_valid = false; /* * send the response immediately if WMI_SERVICE_SYNC_DELETE_CMDS @@ -1525,6 +1529,8 @@ ol_txrx_vdev_handle wma_vdev_attach(tp_wma_handle wma_handle, tSirMacHTCapabilityInfo *phtCapInfo; cds_msg_t sme_msg = { 0 }; struct vdev_create_params params = { 0 }; + u_int8_t vdev_id; + struct sir_set_tx_rx_aggregation_size tx_rx_aggregation_size; if (NULL == mac) { WMA_LOGE("%s: Failed to get mac", __func__); @@ -1547,6 +1553,8 @@ ol_txrx_vdev_handle wma_vdev_attach(tp_wma_handle wma_handle, goto end; } + vdev_id = self_sta_req->session_id; + txrx_vdev_type = wma_get_txrx_vdev_type(self_sta_req->type); if (wlan_op_mode_unknown == txrx_vdev_type) { @@ -1602,6 +1610,17 @@ ol_txrx_vdev_handle wma_vdev_attach(tp_wma_handle wma_handle, self_sta_req->self_mac_addr, sizeof(wma_handle->interfaces[self_sta_req->session_id]. addr)); + + tx_rx_aggregation_size.tx_aggregation_size = + self_sta_req->tx_aggregation_size; + tx_rx_aggregation_size.rx_aggregation_size = + self_sta_req->rx_aggregation_size; + tx_rx_aggregation_size.vdev_id = self_sta_req->session_id; + + status = wma_set_tx_rx_aggregation_size(&tx_rx_aggregation_size); + if (status != QDF_STATUS_SUCCESS) + WMA_LOGE("failed to set aggregation sizes(err=%d)", status); + switch (self_sta_req->type) { case WMI_VDEV_TYPE_STA: if (wlan_cfg_get_int(mac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, @@ -1652,6 +1671,7 @@ ol_txrx_vdev_handle wma_vdev_attach(tp_wma_handle wma_handle, } } + wma_handle->interfaces[vdev_id].is_vdev_valid = true; ret = wma_vdev_set_param(wma_handle->wmi_handle, self_sta_req->session_id, WMI_VDEV_PARAM_MCC_RTSCTS_PROTECTION_ENABLE, diff --git a/core/wma/src/wma_features.c b/core/wma/src/wma_features.c index 567ed6e7abe4..7bd92da1bd99 100644 --- a/core/wma/src/wma_features.c +++ b/core/wma/src/wma_features.c @@ -7919,6 +7919,71 @@ QDF_STATUS wma_set_bpf_instructions(tp_wma_handle wma, } /** + * wma_set_tx_rx_aggregation_size() - sets tx rx aggregation sizes + * @tx_rx_aggregation_size: aggregation size parameters + * + * This function sets tx rx aggregation sizes + * + * Return: VOS_STATUS_SUCCESS on success, error number otherwise + */ +QDF_STATUS wma_set_tx_rx_aggregation_size( + struct sir_set_tx_rx_aggregation_size *tx_rx_aggregation_size) +{ + tp_wma_handle wma_handle; + wmi_vdev_set_custom_aggr_size_cmd_fixed_param *cmd; + int32_t len; + wmi_buf_t buf; + u_int8_t *buf_ptr; + int ret; + + wma_handle = cds_get_context(QDF_MODULE_ID_WMA); + + if (!tx_rx_aggregation_size) { + WMA_LOGE("%s: invalid pointer", __func__); + return QDF_STATUS_E_INVAL; + } + + if (!wma_handle) { + WMA_LOGE("%s: WMA context is invald!", __func__); + return QDF_STATUS_E_INVAL; + } + + len = sizeof(*cmd); + buf = wmi_buf_alloc(wma_handle->wmi_handle, len); + + if (!buf) { + WMA_LOGE("%s: Failed allocate wmi buffer", __func__); + return QDF_STATUS_E_NOMEM; + } + + buf_ptr = (u_int8_t *) wmi_buf_data(buf); + cmd = (wmi_vdev_set_custom_aggr_size_cmd_fixed_param *) buf_ptr; + + WMITLV_SET_HDR(&cmd->tlv_header, + WMITLV_TAG_STRUC_wmi_vdev_set_custom_aggr_size_cmd_fixed_param, + WMITLV_GET_STRUCT_TLVLEN( + wmi_vdev_set_custom_aggr_size_cmd_fixed_param)); + + cmd->vdev_id = tx_rx_aggregation_size->vdev_id; + cmd->tx_aggr_size = tx_rx_aggregation_size->tx_aggregation_size; + cmd->rx_aggr_size = tx_rx_aggregation_size->rx_aggregation_size; + + WMA_LOGI("tx aggr: %d rx aggr: %d vdev: %d", + cmd->tx_aggr_size, cmd->rx_aggr_size, cmd->vdev_id); + + ret = wmi_unified_cmd_send(wma_handle->wmi_handle, buf, len, + WMI_VDEV_SET_CUSTOM_AGGR_SIZE_CMDID); + if (ret) { + WMA_LOGE("%s: Failed to send aggregation size command", + __func__); + wmi_buf_free(buf); + return QDF_STATUS_E_FAILURE; + } + + return QDF_STATUS_SUCCESS; +} + +/** * wma_p2p_lo_start() - P2P listen offload start * @params: p2p listen offload parameters * diff --git a/core/wma/src/wma_main.c b/core/wma/src/wma_main.c index 00f1735cc44e..3b5f543c30ac 100644 --- a/core/wma/src/wma_main.c +++ b/core/wma/src/wma_main.c @@ -872,6 +872,11 @@ static void wma_process_cli_set_cmd(tp_wma_handle wma, switch (privcmd->param_vp_dev) { case VDEV_CMD: + if (!wma->interfaces[privcmd->param_vdev_id].is_vdev_valid) { + WMA_LOGE("%s Vdev id is not valid", __func__); + return ; + } + WMA_LOGD("vdev id %d pid %d pval %d", privcmd->param_vdev_id, privcmd->param_id, privcmd->param_value); ret = wma_vdev_set_param(wma->wmi_handle, @@ -1668,6 +1673,146 @@ static void wma_init_max_no_of_peers(tp_wma_handle wma_handle, struct wma_version_info g_wmi_version_info; /** + * wma_state_info_dump() - prints state information of wma layer + * @buf: buffer pointer + * @size: size of buffer to be filled + * + * This function is used to dump state information of wma layer + * + * Return: None + */ +static void wma_state_info_dump(char **buf_ptr, uint16_t *size) +{ + tp_wma_handle wma_handle; + uint16_t len = 0; + char *buf = *buf_ptr; + struct wma_txrx_node *iface; + uint8_t vdev_id; + + wma_handle = cds_get_context(QDF_MODULE_ID_WMA); + if (!wma_handle) { + WMA_LOGE("%s: WMA context is invald!", __func__); + return; + } + + WMA_LOGI("%s: size of buffer: %d", __func__, *size); + + len += qdf_scnprintf(buf + len, *size - len, + "\n wow_pno_match_wake_up_count %d", + wma_handle->wow_pno_match_wake_up_count); + len += qdf_scnprintf(buf + len, *size - len, + "\n wow_pno_complete_wake_up_count %d", + wma_handle->wow_pno_complete_wake_up_count); + len += qdf_scnprintf(buf + len, *size - len, + "\n wow_gscan_wake_up_count %d", + wma_handle->wow_gscan_wake_up_count); + len += qdf_scnprintf(buf + len, *size - len, + "\n wow_low_rssi_wake_up_count %d", + wma_handle->wow_low_rssi_wake_up_count); + len += qdf_scnprintf(buf + len, *size - len, + "\n wow_rssi_breach_wake_up_count %d", + wma_handle->wow_rssi_breach_wake_up_count); + len += qdf_scnprintf(buf + len, *size - len, + "\n wow_ucast_wake_up_count %d", + wma_handle->wow_ucast_wake_up_count); + len += qdf_scnprintf(buf + len, *size - len, + "\n wow_bcast_wake_up_count %d", + wma_handle->wow_bcast_wake_up_count); + len += qdf_scnprintf(buf + len, *size - len, + "\n wow_ipv4_mcast_wake_up_count %d", + wma_handle->wow_ipv4_mcast_wake_up_count); + len += qdf_scnprintf(buf + len, *size - len, + "\n wow_ipv6_mcast_ra_stats %d", + wma_handle->wow_ipv6_mcast_ra_stats); + len += qdf_scnprintf(buf + len, *size - len, + "\n wow_ipv6_mcast_ns_stats %d", + wma_handle->wow_ipv6_mcast_ns_stats); + len += qdf_scnprintf(buf + len, *size - len, + "\n wow_ipv6_mcast_na_stats %d", + wma_handle->wow_ipv6_mcast_na_stats); + + for (vdev_id = 0; vdev_id < wma_handle->max_bssid; vdev_id++) { + if (!wma_handle->interfaces[vdev_id].handle) + continue; + + iface = &wma_handle->interfaces[vdev_id]; + + len += qdf_scnprintf(buf + len, *size - len, + "\n vdev_id %d", + vdev_id); + len += qdf_scnprintf(buf + len, *size - len, + "\n conn_state %d", + iface->conn_state); + len += qdf_scnprintf(buf + len, *size - len, + "\n dtimPeriod %d", + iface->dtimPeriod); + len += qdf_scnprintf(buf + len, *size - len, + "\n chanmode %d", + iface->chanmode); + len += qdf_scnprintf(buf + len, *size - len, + "\n vht_capable %d", + iface->vht_capable); + len += qdf_scnprintf(buf + len, *size - len, + "\n ht_capable %d", + iface->ht_capable); + len += qdf_scnprintf(buf + len, *size - len, + "\n chan_width %d", + iface->chan_width); + len += qdf_scnprintf(buf + len, *size - len, + "\n vdev_active %d", + iface->vdev_active); + len += qdf_scnprintf(buf + len, *size - len, + "\n vdev_up %d", + iface->vdev_up); + len += qdf_scnprintf(buf + len, *size - len, + "\n aid %d", + iface->aid); + len += qdf_scnprintf(buf + len, *size - len, + "\n rate_flags %d", + iface->rate_flags); + len += qdf_scnprintf(buf + len, *size - len, + "\n nss %d", + iface->nss); + len += qdf_scnprintf(buf + len, *size - len, + "\n tx_power %d", + iface->tx_power); + len += qdf_scnprintf(buf + len, *size - len, + "\n max_tx_power %d", + iface->max_tx_power); + len += qdf_scnprintf(buf + len, *size - len, + "\n nwType %d", + iface->nwType); + len += qdf_scnprintf(buf + len, *size - len, + "\n tx_streams %d", + iface->tx_streams); + len += qdf_scnprintf(buf + len, *size - len, + "\n rx_streams %d", + iface->rx_streams); + len += qdf_scnprintf(buf + len, *size - len, + "\n chain_mask %d", + iface->chain_mask); + len += qdf_scnprintf(buf + len, *size - len, + "\n nss_2g %d", + iface->nss_2g); + len += qdf_scnprintf(buf + len, *size - len, + "\n nss_5g %d", + iface->nss_5g); + } + + *size -= len; + *buf_ptr += len; +} + +/** + * wma_register_debug_callback() - registration function for wma layer + * to print wma state information + */ +static void wma_register_debug_callback(void) +{ + qdf_register_debug_callback(QDF_MODULE_ID_WMA, &wma_state_info_dump); +} + +/** * wma_open() - Allocate wma context and initialize it. * @cds_context: cds context * @wma_tgt_cfg_cb: tgt config callback fun @@ -2152,6 +2297,8 @@ QDF_STATUS wma_open(void *cds_context, wma_encrypt_decrypt_msg_handler, WMA_RX_SERIALIZER_CTX); wma_ndp_register_all_event_handlers(wma_handle); + wma_register_debug_callback(); + return QDF_STATUS_SUCCESS; err_dbglog_init: @@ -4159,9 +4306,8 @@ void wma_dump_dbs_hw_mode(tp_wma_handle wma_handle) WMI_DBS_HW_MODE_MAC1_TX_STREAMS_GET(param), WMI_DBS_HW_MODE_MAC1_RX_STREAMS_GET(param), WMI_DBS_HW_MODE_MAC1_BANDWIDTH_GET(param)); - WMA_LOGA("%s:[%d] DBS:%d Agile DFS:%d", __func__, i, - WMI_DBS_HW_MODE_DBS_MODE_GET(param), - WMI_DBS_HW_MODE_AGILE_DFS_GET(param)); + WMA_LOGA("%s:[%d] DBS:%d", __func__, i, + WMI_DBS_HW_MODE_DBS_MODE_GET(param)); } } @@ -4801,6 +4947,200 @@ static void wma_print_populate_soc_caps(t_wma_handle *wma_handle) } /** + * wma_map_wmi_channel_width_to_hw_mode_bw() - returns bandwidth + * in terms of hw_mode_bandwidth + * @width: bandwidth in terms of wmi_channel_width + * + * This function returns the bandwidth in terms of hw_mode_bandwidth. + * + * Return: BW in terms of hw_mode_bandwidth. + */ +enum hw_mode_bandwidth wma_map_wmi_channel_width_to_hw_mode_bw( + wmi_channel_width width) +{ + switch (width) { + case WMI_CHAN_WIDTH_20: + return HW_MODE_20_MHZ; + case WMI_CHAN_WIDTH_40: + return HW_MODE_40_MHZ; + case WMI_CHAN_WIDTH_80: + return HW_MODE_80_MHZ; + case WMI_CHAN_WIDTH_160: + return HW_MODE_160_MHZ; + case WMI_CHAN_WIDTH_80P80: + return HW_MODE_80_PLUS_80_MHZ; + case WMI_CHAN_WIDTH_5: + return HW_MODE_5_MHZ; + case WMI_CHAN_WIDTH_10: + return HW_MODE_10_MHZ; + default: + return HW_MODE_BW_NONE; + } + + return HW_MODE_BW_NONE; +} + +/** + * wma_get_hw_mode_params() - get TX-RX stream and bandwidth + * supported from the capabilities. + * @caps: PHY capability + * @info: param to store TX-RX stream and BW information + * + * This function will calculate TX-RX stream and bandwidth supported + * as per the PHY capability, and assign to mac_ss_bw_info. + * + * Return: none + */ +static void wma_get_hw_mode_params(WMI_MAC_PHY_CAPABILITIES *caps, + struct mac_ss_bw_info *info) +{ + if (!caps) { + WMA_LOGE("%s: Invalid capabilities", __func__); + return; + } + + info->mac_tx_stream = wma_get_num_of_setbits_from_bitmask( + QDF_MAX(caps->tx_chain_mask_2G, + caps->tx_chain_mask_5G)); + info->mac_rx_stream = wma_get_num_of_setbits_from_bitmask( + QDF_MAX(caps->rx_chain_mask_2G, + caps->rx_chain_mask_5G)); + info->mac_bw = wma_map_wmi_channel_width_to_hw_mode_bw( + QDF_MAX(caps->max_bw_supported_2G, + caps->max_bw_supported_5G)); +} + +/** + * wma_set_hw_mode_params() - sets TX-RX stream, bandwidth and + * DBS in hw_mode_list + * @wma_handle: pointer to wma global structure + * @mac0_ss_bw_info: TX-RX streams, BW for MAC0 + * @mac1_ss_bw_info: TX-RX streams, BW for MAC1 + * @pos: refers to hw_mode_index + * @dbs_mode: dbs_mode for the dbs_hw_mode + * + * This function sets TX-RX stream, bandwidth and DBS mode in + * hw_mode_list. + * + * Return: none + */ +static void wma_set_hw_mode_params(t_wma_handle *wma_handle, + struct mac_ss_bw_info mac0_ss_bw_info, + struct mac_ss_bw_info mac1_ss_bw_info, + uint32_t pos, uint32_t dbs_mode) +{ + WMI_DBS_HW_MODE_MAC0_TX_STREAMS_SET( + wma_handle->hw_mode.hw_mode_list[pos], + mac0_ss_bw_info.mac_tx_stream); + WMI_DBS_HW_MODE_MAC0_RX_STREAMS_SET( + wma_handle->hw_mode.hw_mode_list[pos], + mac0_ss_bw_info.mac_rx_stream); + WMI_DBS_HW_MODE_MAC0_BANDWIDTH_SET( + wma_handle->hw_mode.hw_mode_list[pos], + mac0_ss_bw_info.mac_bw); + WMI_DBS_HW_MODE_MAC1_TX_STREAMS_SET( + wma_handle->hw_mode.hw_mode_list[pos], + mac1_ss_bw_info.mac_tx_stream); + WMI_DBS_HW_MODE_MAC1_RX_STREAMS_SET( + wma_handle->hw_mode.hw_mode_list[pos], + mac1_ss_bw_info.mac_rx_stream); + WMI_DBS_HW_MODE_MAC1_BANDWIDTH_SET( + wma_handle->hw_mode.hw_mode_list[pos], + mac1_ss_bw_info.mac_bw); + WMI_DBS_HW_MODE_DBS_MODE_SET( + wma_handle->hw_mode.hw_mode_list[pos], + dbs_mode); + WMI_DBS_HW_MODE_AGILE_DFS_SET( + wma_handle->hw_mode.hw_mode_list[pos], + 0); +} + +/** + * wma_update_hw_mode_list() - updates hw_mode_list + * @wma_handle: pointer to wma global structure + * + * This function updates hw_mode_list with tx_streams, rx_streams, + * bandwidth, dbs and agile dfs for each hw_mode. + * + * Returns: 0 for success else failure. + */ +static QDF_STATUS wma_update_hw_mode_list(t_wma_handle *wma_handle) +{ + struct extended_caps *phy_caps; + WMI_MAC_PHY_CAPABILITIES *tmp; + uint32_t i, dbs_mode, hw_config_type, j = 0; + struct mac_ss_bw_info mac0_ss_bw_info = {0}; + struct mac_ss_bw_info mac1_ss_bw_info = {0}; + + if (!wma_handle) { + WMA_LOGE("%s: Invalid wma handle", __func__); + return QDF_STATUS_E_FAILURE; + } + + phy_caps = &wma_handle->phy_caps; + if (!phy_caps) { + WMA_LOGE("%s: Invalid phy capabilities", __func__); + return QDF_STATUS_SUCCESS; + } + + if (!phy_caps->num_hw_modes.num_hw_modes) { + WMA_LOGE("%s: Number of HW modes: %d", + __func__, phy_caps->num_hw_modes.num_hw_modes); + return QDF_STATUS_SUCCESS; + } + + /* + * This list was updated as part of service ready event. Re-populate + * HW mode list from the device capabilities. + */ + if (wma_handle->hw_mode.hw_mode_list) { + qdf_mem_free(wma_handle->hw_mode.hw_mode_list); + wma_handle->hw_mode.hw_mode_list = NULL; + WMA_LOGI("%s: DBS list is freed", __func__); + } + + wma_handle->num_dbs_hw_modes = phy_caps->num_hw_modes.num_hw_modes; + wma_handle->hw_mode.hw_mode_list = + qdf_mem_malloc(sizeof(*wma_handle->hw_mode.hw_mode_list) * + wma_handle->num_dbs_hw_modes); + if (!wma_handle->hw_mode.hw_mode_list) { + WMA_LOGE("%s: Memory allocation failed for DBS", __func__); + return QDF_STATUS_E_FAILURE; + } + + WMA_LOGA("%s: Updated HW mode list: Num modes:%d", + __func__, wma_handle->num_dbs_hw_modes); + + for (i = 0; i < wma_handle->num_dbs_hw_modes; i++) { + /* Update for MAC0 */ + tmp = &phy_caps->each_phy_cap_per_hwmode[j++]; + wma_get_hw_mode_params(tmp, &mac0_ss_bw_info); + hw_config_type = + phy_caps->each_hw_mode_cap[i].hw_mode_config_type; + dbs_mode = 0; + mac1_ss_bw_info.mac_tx_stream = 0; + mac1_ss_bw_info.mac_rx_stream = 0; + mac1_ss_bw_info.mac_bw = 0; + + /* SBS and DBS have dual MAC. Upto 2 MACs are considered. */ + if ((hw_config_type == WMI_HW_MODE_DBS) || + (hw_config_type == WMI_HW_MODE_SBS_PASSIVE) || + (hw_config_type == WMI_HW_MODE_SBS)) { + /* Update for MAC1 */ + tmp = &phy_caps->each_phy_cap_per_hwmode[j++]; + wma_get_hw_mode_params(tmp, &mac1_ss_bw_info); + dbs_mode = 1; + } + + /* Updating HW mode list */ + wma_set_hw_mode_params(wma_handle, mac0_ss_bw_info, + mac1_ss_bw_info, i, dbs_mode); + } + wma_dump_dbs_hw_mode(wma_handle); + return QDF_STATUS_SUCCESS; +} + +/** * wma_populate_soc_caps() - populate entire SOC's capabilities * @wma_handle: pointer to wma global structure * @param_buf: pointer to param of service ready extension event from fw @@ -4988,6 +5328,12 @@ int wma_rx_service_ready_ext_event(void *handle, uint8_t *event, } wma_populate_soc_caps(wma_handle, param_buf); + ret = wma_update_hw_mode_list(wma_handle); + if (QDF_IS_STATUS_ERROR(ret)) { + WMA_LOGE("Failed to update hw mode list"); + return -EINVAL; + } + WMA_LOGA("WMA --> WMI_INIT_CMDID"); status = wmi_unified_send_saved_init_cmd(wma_handle->wmi_handle); if (status != EOK) @@ -6280,6 +6626,8 @@ QDF_STATUS wma_mc_process_msg(void *cds_context, cds_msg_t *msg) case WDA_BPF_SET_INSTRUCTIONS_REQ: wma_set_bpf_instructions(wma_handle, msg->bodyptr); qdf_mem_free(msg->bodyptr); + case WMA_SET_CTS2SELF_FOR_STA: + wma_set_cts2self_for_p2p_go(wma_handle, true); break; case SIR_HAL_NDP_INITIATOR_REQ: wma_handle_ndp_initiator_req(wma_handle, msg->bodyptr); diff --git a/core/wma/src/wma_mgmt.c b/core/wma/src/wma_mgmt.c index 5a4690eb576c..a3223b2f6814 100644 --- a/core/wma/src/wma_mgmt.c +++ b/core/wma/src/wma_mgmt.c @@ -965,6 +965,8 @@ QDF_STATUS wma_send_peer_assoc(tp_wma_handle wma, cmd->peer_flags |= WMI_PEER_160MHZ; cmd->peer_vht_caps = params->vht_caps; + if (params->p2pCapableSta) + cmd->peer_flags |= WMI_PEER_IS_P2P_CAPABLE; if (params->rmfEnabled) cmd->peer_flags |= WMI_PEER_PMF; @@ -2655,6 +2657,32 @@ void wma_process_update_userpos(tp_wma_handle wma_handle, } +QDF_STATUS wma_set_cts2self_for_p2p_go(void *wma_handle, + uint32_t cts2self_for_p2p_go) +{ + int32_t ret; + tp_wma_handle wma = (tp_wma_handle)wma_handle; + struct pdev_params pdevparam; + + pdevparam.param_id = WMI_PDEV_PARAM_CTS2SELF_FOR_P2P_GO_CONFIG; + pdevparam.param_value = cts2self_for_p2p_go; + + ret = wmi_unified_pdev_param_send(wma->wmi_handle, + &pdevparam, + WMA_WILDCARD_PDEV_ID); + if (ret) { + WMA_LOGE("Fail to Set CTS2SELF for p2p GO %d", + cts2self_for_p2p_go); + return QDF_STATUS_E_FAILURE; + } + + WMA_LOGD("Successfully Set CTS2SELF for p2p GO %d", + cts2self_for_p2p_go); + + return QDF_STATUS_SUCCESS; +} + + /** * wma_set_htconfig() - set ht config parameters to target * @vdev_id: vdev id diff --git a/core/wma/src/wma_utils.c b/core/wma/src/wma_utils.c index 945e139adfc2..b4aab11b8e34 100644 --- a/core/wma/src/wma_utils.c +++ b/core/wma/src/wma_utils.c @@ -2572,7 +2572,12 @@ static int8_t wma_get_matching_hw_mode_index(tp_wma_handle wma, t_mac0_bw = WMI_DBS_HW_MODE_MAC0_BANDWIDTH_GET( wma->hw_mode.hw_mode_list[i]); - if (t_mac0_bw != mac0_bw) + /* + * Firmware advertises max bw capability as CBW 80+80 + * for single MAC. Thus CBW 20/40/80 should also be + * supported, if CBW 80+80 is supported. + */ + if (t_mac0_bw < mac0_bw) continue; t_mac1_tx_ss = WMI_DBS_HW_MODE_MAC1_TX_STREAMS_GET( @@ -2587,7 +2592,7 @@ static int8_t wma_get_matching_hw_mode_index(tp_wma_handle wma, t_mac1_bw = WMI_DBS_HW_MODE_MAC1_BANDWIDTH_GET( wma->hw_mode.hw_mode_list[i]); - if (t_mac1_bw != mac1_bw) + if (t_mac1_bw < mac1_bw) continue; dbs_mode = WMI_DBS_HW_MODE_DBS_MODE_GET( @@ -2772,58 +2777,6 @@ bool wma_is_hw_dbs_capable(void) } /** - * wma_is_hw_agile_dfs_capable() - Check if HW is agile DFS capable - * - * Checks if the HW is agile DFS capable - * - * Return: true if the HW is agile DFS capable - */ -bool wma_is_hw_agile_dfs_capable(void) -{ - tp_wma_handle wma; - uint32_t param, i, found = 0; - - wma = cds_get_context(QDF_MODULE_ID_WMA); - if (!wma) { - WMA_LOGE("%s: Invalid WMA handle", __func__); - return false; - } - - if (!wma_is_agile_dfs_enable()) { - WMA_LOGI("%s: Agile DFS is disabled", __func__); - return false; - } - - WMA_LOGI("%s: DBS service bit map: %d", __func__, - WMI_SERVICE_IS_ENABLED(wma->wmi_service_bitmap, - WMI_SERVICE_DUAL_BAND_SIMULTANEOUS_SUPPORT)); - - /* The agreement with FW is that to know if the target is Agile DFS - * capable, DBS needs to be supported in the service bit map and - * Agile DFS needs to be supported in the HW mode list - */ - if (!(WMI_SERVICE_IS_ENABLED(wma->wmi_service_bitmap, - WMI_SERVICE_DUAL_BAND_SIMULTANEOUS_SUPPORT))) - return false; - - for (i = 0; i < wma->num_dbs_hw_modes; i++) { - param = wma->hw_mode.hw_mode_list[i]; - WMA_LOGI("%s: HW param: %x", __func__, param); - if (WMI_DBS_HW_MODE_AGILE_DFS_GET(param)) { - WMA_LOGI("%s: HW %d is agile DFS capable", - __func__, i); - found = 1; - break; - } - } - - if (found) - return true; - - return false; -} - -/** * wma_get_mac_id_of_vdev() - Get MAC id corresponding to a vdev * @vdev_id: VDEV whose MAC ID is required * @@ -3093,42 +3046,6 @@ bool wma_is_dbs_enable(void) } /** - * wma_is_agile_dfs_enable() - Check if master Agile DFS control is enabled - * - * Checks if the master Agile DFS control is enabled. This will be used - * to override any other Agile DFS capability - * - * Return: True if master Agile DFS control is enabled - */ -bool wma_is_agile_dfs_enable(void) -{ - tp_wma_handle wma; - - if (wma_is_dual_mac_disabled_in_ini()) - return false; - - wma = cds_get_context(QDF_MODULE_ID_WMA); - if (!wma) { - WMA_LOGE("%s: Invalid WMA handle", __func__); - return false; - } - - WMA_LOGD("%s: DFS=%d Single mac with DFS=%d", __func__, - WMI_DBS_FW_MODE_CFG_AGILE_DFS_GET( - wma->dual_mac_cfg.cur_fw_mode_config), - WMI_DBS_CONC_SCAN_CFG_AGILE_DFS_SCAN_GET( - wma->dual_mac_cfg.cur_scan_config)); - - if ((WMI_DBS_FW_MODE_CFG_AGILE_DFS_GET( - wma->dual_mac_cfg.cur_fw_mode_config)) && - (WMI_DBS_CONC_SCAN_CFG_AGILE_DFS_SCAN_GET( - wma->dual_mac_cfg.cur_scan_config))) - return true; - - return false; -} - -/** * wma_get_updated_scan_config() - Get the updated scan configuration * @scan_config: Pointer containing the updated scan config * @dbs_scan: 0 or 1 indicating if DBS scan needs to be enabled/disabled |
