From 4e361450ebf77ca8761c64e4c95bd036cd37174b Mon Sep 17 00:00:00 2001 From: Krishna Kumaar Natarajan Date: Wed, 1 Apr 2015 13:04:28 -0700 Subject: qcacld: update fw common interface files. This change set adds module ids for ERE and OCB features. These changes are part of CL 1024090 and CL 1221536. Change-Id: Ia31d325fa175ee57cc3f7426a766fdc953921dd4 CRs-Fixed: 816641 --- CORE/SERVICES/COMMON/wlan_module_ids.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CORE/SERVICES/COMMON/wlan_module_ids.h b/CORE/SERVICES/COMMON/wlan_module_ids.h index 348085dc9b5c..8596a8c8afc3 100644 --- a/CORE/SERVICES/COMMON/wlan_module_ids.h +++ b/CORE/SERVICES/COMMON/wlan_module_ids.h @@ -86,6 +86,8 @@ typedef enum { WLAN_MODULE_UNIT_TEST, WLAN_MODULE_MLME, WLAN_MODULE_SUPPL, + WLAN_MODULE_ERE, + WLAN_MODULE_OCB, WLAN_MODULE_ID_MAX, WLAN_MODULE_ID_INVALID = WLAN_MODULE_ID_MAX, } WLAN_MODULE_ID; -- cgit v1.2.3 From 8893d86b8862d817d7c612ab923916bb0803c3d4 Mon Sep 17 00:00:00 2001 From: Rajeev Kumar Date: Mon, 30 Mar 2015 17:11:55 -0700 Subject: qcacld: CL 1263754 - update fw common interface files fix RSSI mask vs. shift bug + incorrect comment in htt.h Add WMI command and event for Wireless Network Time Synchronization Change-Id: I5ff982f47f834e550da7d1530102dd73792ee297 CRs-Fixed: 815433 --- CORE/CLD_TXRX/HTT/htt.h | 30 +++++++++++++++--------------- CORE/SERVICES/COMMON/wmi_tlv_defs.h | 18 ++++++++++++++++-- CORE/SERVICES/COMMON/wmi_unified.h | 36 ++++++++++++++++++++++++++++++++++++ CORE/SERVICES/COMMON/wmi_version.h | 2 +- CORE/SERVICES/WMI/wmi_unified.c | 1 + 5 files changed, 69 insertions(+), 18 deletions(-) diff --git a/CORE/CLD_TXRX/HTT/htt.h b/CORE/CLD_TXRX/HTT/htt.h index a7713718d2dd..b28d30d8788f 100644 --- a/CORE/CLD_TXRX/HTT/htt.h +++ b/CORE/CLD_TXRX/HTT/htt.h @@ -1091,13 +1091,13 @@ PREPACK struct htt_tx_msdu_desc_ext_t { * bit 2 -> CCK 5.5 Mbps rate is allowed * bit 3 -> CCK 11 Mbps rate is allowed * bit 4 -> OFDM BPSK modulation, 1/2 coding rate is allowed - * bit 5 -> OFDM QPSK modulation, 1/2 coding rate is allowed - * bit 6 -> OFDM QPSK modulation, 3/4 coding rate is allowed - * bit 7 -> OFDM 16-QAM modulation, 1/2 coding rate is allowed - * bit 8 -> OFDM 16-QAM modulation, 3/4 coding rate is allowed - * bit 9 -> OFDM 64-QAM modulation, 2/3 coding rate is allowed - * bit 10 -> OFDM 64-QAM modulation, 3/4 coding rate is allowed - * bit 11 -> OFDM 64-QAM modulation, 5/6 coding rate is allowed + * bit 5 -> OFDM BPSK modulation, 3/4 coding rate is allowed + * bit 6 -> OFDM QPSK modulation, 1/2 coding rate is allowed + * bit 7 -> OFDM QPSK modulation, 3/4 coding rate is allowed + * bit 8 -> OFDM 16-QAM modulation, 1/2 coding rate is allowed + * bit 9 -> OFDM 16-QAM modulation, 3/4 coding rate is allowed + * bit 10 -> OFDM 64-QAM modulation, 2/3 coding rate is allowed + * bit 11 -> OFDM 64-QAM modulation, 3/4 coding rate is allowed * * The MCS index specification needs to be compatible with the * bandwidth mask specification. For example, a MCS index == 9 @@ -3271,14 +3271,14 @@ A_COMPILE_TIME_ASSERT(HTT_RX_IND_hdr_size_quantum, #define HTT_RX_IND_START_VALID_M 0x80000000 #define HTT_RX_IND_START_VALID_S 31 -#define HTT_RX_IND_RSSI_PRI20_S 0x000000ff -#define HTT_RX_IND_RSSI_PRI20_M 0 -#define HTT_RX_IND_RSSI_EXT20_S 0x0000ff00 -#define HTT_RX_IND_RSSI_EXT20_M 8 -#define HTT_RX_IND_RSSI_EXT40_S 0x00ff0000 -#define HTT_RX_IND_RSSI_EXT40_M 16 -#define HTT_RX_IND_RSSI_EXT80_S 0xff000000 -#define HTT_RX_IND_RSSI_EXT80_M 24 +#define HTT_RX_IND_RSSI_PRI20_M 0x000000ff +#define HTT_RX_IND_RSSI_PRI20_S 0 +#define HTT_RX_IND_RSSI_EXT20_M 0x0000ff00 +#define HTT_RX_IND_RSSI_EXT20_S 8 +#define HTT_RX_IND_RSSI_EXT40_M 0x00ff0000 +#define HTT_RX_IND_RSSI_EXT40_S 16 +#define HTT_RX_IND_RSSI_EXT80_M 0xff000000 +#define HTT_RX_IND_RSSI_EXT80_S 24 #define HTT_RX_IND_VHT_SIG_A1_M 0x00ffffff #define HTT_RX_IND_VHT_SIG_A1_S 0 diff --git a/CORE/SERVICES/COMMON/wmi_tlv_defs.h b/CORE/SERVICES/COMMON/wmi_tlv_defs.h index 0ad0d817e24a..84114d44075a 100644 --- a/CORE/SERVICES/COMMON/wmi_tlv_defs.h +++ b/CORE/SERVICES/COMMON/wmi_tlv_defs.h @@ -555,6 +555,8 @@ typedef enum { WMITLV_TAG_STRUC_wmi_passpoint_event_hdr, WMITLV_TAG_STRUC_wmi_extscan_configure_hotlist_ssid_monitor_cmd_fixed_param, WMITLV_TAG_STRUC_wmi_extscan_hotlist_ssid_match_event_fixed_param, + WMITLV_TAG_STRUC_wmi_vdev_tsf_tstamp_action_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_vdev_tsf_report_event_fixed_param, } WMITLV_TAG_ID; /* @@ -766,7 +768,8 @@ typedef enum { OP(WMI_DCC_CLEAR_STATS_CMDID) \ OP(WMI_DCC_UPDATE_NDL_CMDID) \ OP(WMI_ROAM_FILTER_CMDID) \ - OP(WMI_PASSPOINT_LIST_CONFIG_CMDID) + OP(WMI_PASSPOINT_LIST_CONFIG_CMDID) \ + OP(WMI_VDEV_TSF_TSTAMP_ACTION_CMDID) /* * IMPORTANT: Please add _ALL_ WMI Events Here. @@ -868,7 +871,8 @@ typedef enum { OP(WMI_DCC_GET_STATS_RESP_EVENTID) \ OP(WMI_DCC_UPDATE_NDL_RESP_EVENTID) \ OP(WMI_DCC_STATS_EVENTID) \ - OP(WMI_PASSPOINT_MATCH_EVENTID) + OP(WMI_PASSPOINT_MATCH_EVENTID) \ + OP(WMI_VDEV_TSF_REPORT_EVENTID) /* TLV definitions of WMI commands */ @@ -2149,6 +2153,11 @@ WMITLV_CREATE_PARAM_STRUC(WMI_DCC_UPDATE_NDL_CMDID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_UINT32, A_UINT32, bssid_preferred_factor, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_ROAM_FILTER_CMDID); +/* TSF timestamp action cmd */ +#define WMITLV_TABLE_WMI_VDEV_TSF_TSTAMP_ACTION_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_vdev_tsf_tstamp_action_cmd_fixed_param, wmi_vdev_tsf_tstamp_action_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_TSF_TSTAMP_ACTION_CMDID); + /************************** TLV definitions of WMI events *******************************/ /* Service Ready event */ @@ -2677,6 +2686,11 @@ WMITLV_CREATE_PARAM_STRUC(WMI_DCC_UPDATE_NDL_RESP_EVENTID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_dcc_ndl_stats_per_channel, stats_per_channel_list, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_DCC_STATS_EVENTID); +/* Read TSF timer response event */ +#define WMITLV_TABLE_WMI_VDEV_TSF_REPORT_EVENTID(id,op,buf,len) \ +WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_vdev_tsf_report_event_fixed_param, wmi_vdev_tsf_report_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_TSF_REPORT_EVENTID); + #ifdef __cplusplus } #endif diff --git a/CORE/SERVICES/COMMON/wmi_unified.h b/CORE/SERVICES/COMMON/wmi_unified.h index c5d2527a0fe3..75e7a08411a2 100644 --- a/CORE/SERVICES/COMMON/wmi_unified.h +++ b/CORE/SERVICES/COMMON/wmi_unified.h @@ -329,6 +329,8 @@ typedef enum { WMI_VDEV_PLMREQ_START_CMDID, WMI_VDEV_PLMREQ_STOP_CMDID, + /* TSF timestamp action for specified vdev */ + WMI_VDEV_TSF_TSTAMP_ACTION_CMDID, /* peer specific commands */ @@ -825,6 +827,9 @@ typedef enum { This request is valid only for vdevs operating in soft AP or P2P GO mode */ WMI_VDEV_MCC_BCN_INTERVAL_CHANGE_REQ_EVENTID, + /* Return the TSF timestamp of specified vdev */ + WMI_VDEV_TSF_REPORT_EVENTID, + /* peer specific events */ /** FW reauet to kick out the station for reasons like inactivity,lack of response ..etc */ WMI_PEER_STA_KICKOUT_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_PEER), @@ -10498,6 +10503,37 @@ typedef struct { * END DEPRECATED */ + +/* Actions for TSF timestamp */ +typedef enum { + TSF_TSTAMP_CAPTURE_REQ = 1, + TSF_TSTAMP_CAPTURE_RESET = 2, + TSF_TSTAMP_READ_VALUE = 3, +} wmi_tsf_tstamp_action; + +typedef struct { + /** TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_vdev_tsf_tstamp_action_cmd_fixed_param */ + A_UINT32 tlv_header; + /** unique id identifying the VDEV, generated by the caller */ + A_UINT32 vdev_id; + /* action type, refer to wmi_tsf_tstamp_action */ + A_UINT32 tsf_action; +} wmi_vdev_tsf_tstamp_action_cmd_fixed_param; + +typedef struct { + /* TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_vdev_tsf_report_event_fixed_param */ + A_UINT32 tlv_header; + /* VDEV identifier */ + A_UINT32 vdev_id; + /* low 32bit of tsf */ + A_UINT32 tsf_low; + /* high 32 bit of tsf */ + A_UINT32 tsf_high; +} wmi_vdev_tsf_report_event_fixed_param; + + #ifdef __cplusplus } #endif diff --git a/CORE/SERVICES/COMMON/wmi_version.h b/CORE/SERVICES/COMMON/wmi_version.h index 901e90e04c77..5cc753b9e599 100644 --- a/CORE/SERVICES/COMMON/wmi_version.h +++ b/CORE/SERVICES/COMMON/wmi_version.h @@ -36,7 +36,7 @@ #define __WMI_VER_MINOR_ 0 /** WMI revision number has to be incremented when there is a * change that may or may not break compatibility. */ -#define __WMI_REVISION_ 102 +#define __WMI_REVISION_ 103 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work diff --git a/CORE/SERVICES/WMI/wmi_unified.c b/CORE/SERVICES/WMI/wmi_unified.c index 51e996914268..f94d43e6d156 100644 --- a/CORE/SERVICES/WMI/wmi_unified.c +++ b/CORE/SERVICES/WMI/wmi_unified.c @@ -230,6 +230,7 @@ static u_int8_t* get_wmi_cmd_string(WMI_CMD_ID wmi_command) CASE_RETURN_STRING(WMI_VDEV_PLMREQ_START_CMDID); CASE_RETURN_STRING(WMI_VDEV_PLMREQ_STOP_CMDID); + CASE_RETURN_STRING(WMI_VDEV_TSF_TSTAMP_ACTION_CMDID); /* peer specific commands */ -- cgit v1.2.3 From df245770e7465afd3c66ff9fbcf264c8de11fdf1 Mon Sep 17 00:00:00 2001 From: Rajeev Kumar Date: Tue, 31 Mar 2015 14:35:32 -0700 Subject: qcacld: CL 1264975 - update fw common interface files Common diag interface for all WLAN images TSF_Delta addition to wmi_mgmt_rx_hdr Change-Id: Ib2deece34ea9584ef675101242f3f2792d8327ba CRs-Fixed: 815982 --- CORE/SERVICES/COMMON/dbglog.h | 4 ++-- CORE/SERVICES/COMMON/wmi_unified.h | 9 +++++++++ CORE/SERVICES/COMMON/wmi_version.h | 2 +- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/CORE/SERVICES/COMMON/dbglog.h b/CORE/SERVICES/COMMON/dbglog.h index c7ac9e963b31..327bd3c86467 100644 --- a/CORE/SERVICES/COMMON/dbglog.h +++ b/CORE/SERVICES/COMMON/dbglog.h @@ -63,8 +63,8 @@ extern "C" { #define DBGLOG_NUM_ARGS_OFFSET 26 #define DBGLOG_NUM_ARGS_MASK 0xFC000000 /* Bit 26-31 */ -#define DBGLOG_NUM_ARGS_MAX 5 /* it is limited bcoz of limitations - with Xtensa tool */ +#define DBGLOG_NUM_ARGS_MAX 9 /* it is bcoz of limitation + of corebsp MSG*() to accept max 9 arg */ #define DBGLOG_LOG_BUFFER_SIZE 1500 #define DBGLOG_DBGID_DEFINITION_LEN_MAX 90 diff --git a/CORE/SERVICES/COMMON/wmi_unified.h b/CORE/SERVICES/COMMON/wmi_unified.h index 75e7a08411a2..675154afade4 100644 --- a/CORE/SERVICES/COMMON/wmi_unified.h +++ b/CORE/SERVICES/COMMON/wmi_unified.h @@ -2069,6 +2069,15 @@ typedef struct { A_UINT32 flags; /** combined RSSI, i.e. the sum of the snr + noise floor (dBm units) */ A_INT32 rssi; + /** delta between local TSF(TSF timestamp when frame was RXd) + * and remote TSF(TSF timestamp in the IE for mgmt frame - + * beacon,proberesp for e.g). If remote TSF is not available, + * delta set to 0. + * Although tsf_delta is stored as A_UINT32, it can be negative, + * and thus would need to be sign-extended if added to a value + * larger than 32 bits. + */ + A_UINT32 tsf_delta; /* This TLV is followed by array of bytes: * // management frame buffer diff --git a/CORE/SERVICES/COMMON/wmi_version.h b/CORE/SERVICES/COMMON/wmi_version.h index 5cc753b9e599..137f534213ea 100644 --- a/CORE/SERVICES/COMMON/wmi_version.h +++ b/CORE/SERVICES/COMMON/wmi_version.h @@ -36,7 +36,7 @@ #define __WMI_VER_MINOR_ 0 /** WMI revision number has to be incremented when there is a * change that may or may not break compatibility. */ -#define __WMI_REVISION_ 103 +#define __WMI_REVISION_ 104 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work -- cgit v1.2.3 From 3e08cfea0f1d03fcdeb424b63be7d512320383c2 Mon Sep 17 00:00:00 2001 From: Srinivas Girigowda Date: Fri, 27 Mar 2015 22:11:55 -0700 Subject: qcacld: extscan: Add NL nesting to passpoint match found event 1. Add NL nesting to passpoint match found event. 2. Add missing 'break' between passpoint match found event and ssid hotlist match indication. 3. Use correct 'lost_ap_sample_size' attribute for set_bssid_hotlist Change-Id: I0b32b244252d59141b367454fb7362e7d140900c CRs-Fixed: 815363 --- CORE/HDD/src/wlan_hdd_cfg80211.c | 217 +++++++++++++++++++++++---------------- 1 file changed, 131 insertions(+), 86 deletions(-) diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c index e8441913a948..f1715fb23284 100644 --- a/CORE/HDD/src/wlan_hdd_cfg80211.c +++ b/CORE/HDD/src/wlan_hdd_cfg80211.c @@ -2061,13 +2061,13 @@ static int wlan_hdd_cfg80211_extscan_set_bssid_hotlist(struct wiphy *wiphy, hddLog(VOS_TRACE_LEVEL_INFO, FL("Number of AP (%d)"), pReqMsg->numAp); /* Parse and fetch lost ap sample size */ - if (!tb[QCA_WLAN_VENDOR_ATTR_EXTSCAN_SIGNIFICANT_CHANGE_PARAMS_LOST_AP_SAMPLE_SIZE]) { + if (!tb[QCA_WLAN_VENDOR_ATTR_EXTSCAN_BSSID_HOTLIST_PARAMS_LOST_AP_SAMPLE_SIZE]) { hddLog(LOGE, FL("attr lost ap sample size failed")); goto fail; } pReqMsg->lost_ap_sample_size = nla_get_u32( - tb[QCA_WLAN_VENDOR_ATTR_EXTSCAN_SIGNIFICANT_CHANGE_PARAMS_LOST_AP_SAMPLE_SIZE]); + tb[QCA_WLAN_VENDOR_ATTR_EXTSCAN_BSSID_HOTLIST_PARAMS_LOST_AP_SAMPLE_SIZE]); hddLog(LOG1, FL("Lost ap sample size (%d)"), pReqMsg->lost_ap_sample_size); pReqMsg->sessionId = pAdapter->sessionId; @@ -2112,12 +2112,6 @@ static int wlan_hdd_cfg80211_extscan_set_bssid_hotlist(struct wiphy *wiphy, tb2[QCA_WLAN_VENDOR_ATTR_EXTSCAN_AP_THRESHOLD_PARAM_RSSI_HIGH]); hddLog(VOS_TRACE_LEVEL_INFO, FL("RSSI High (%d)"), pReqMsg->ap[i].high); - - /* Parse and fetch channel */ - if (!tb2[QCA_WLAN_VENDOR_ATTR_EXTSCAN_AP_THRESHOLD_PARAM_CHANNEL]) { - hddLog(VOS_TRACE_LEVEL_ERROR, FL("attr channel failed")); - goto fail; - } i++; } @@ -18721,8 +18715,12 @@ static void wlan_hdd_cfg80211_passpoint_match_found(void *ctx, struct wifi_passpoint_match *data) { - hdd_context_t *pHddCtx = (hdd_context_t *)ctx; + hdd_context_t *pHddCtx = ctx; struct sk_buff *skb = NULL; + uint32_t len, i, num_matches = 1, more_data = 0; + struct nlattr *nla_aps; + struct nlattr *nla_bss; + struct nlattr *nla_b; ENTER(); @@ -18732,6 +18730,12 @@ wlan_hdd_cfg80211_passpoint_match_found(void *ctx, return; } + len = sizeof(*data) + data->ap.ieLength + data->anqp_len; + if (len >= EXTSCAN_EVENT_BUF_SIZE) { + hddLog(LOGE, FL("Result exceeded NL size limitation, drop it")); + return; + } + skb = cfg80211_vendor_event_alloc(pHddCtx->wiphy, NULL, EXTSCAN_EVENT_BUF_SIZE + NLMSG_HDRLEN, @@ -18743,96 +18747,136 @@ wlan_hdd_cfg80211_passpoint_match_found(void *ctx, return; } - data->ap.channel = vos_chan_to_freq(data->ap.channel); - hddLog(LOG1, "Id (%u) ANQP length (%u)", - data->id, data->anqp_len); - hddLog(LOG1, "AP Info: Timestamp(0x%llX) Ssid (%s) " - "Bssid (" MAC_ADDRESS_STR ") " - "Channel (%u) " - "Rssi (%d) " - "RTT (%u) " - "RTT_SD (%u) " - "Bcn Period (%d) " - "Capability (0x%X) " - "IE Length (%d)", - data->ap.ts, - data->ap.ssid, - MAC_ADDR_ARRAY(data->ap.bssid), - data->ap.channel, - data->ap.rssi, - data->ap.rtt, - data->ap.rtt_sd, - data->ap.beaconPeriod, - data->ap.capability, - data->ap.ieLength); - hddLog(LOG1, "Beacon IE hexdump"); - VOS_TRACE_HEX_DUMP(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - data->ap.ieData, data->ap.ieLength); - hddLog(LOG1, "ANQP blob hexdump"); - VOS_TRACE_HEX_DUMP(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, - data->anqp, data->anqp_len); + hddLog(LOG1, "Req Id (%u) Id (%u) ANQP length (%u) num_matches (%u)", + data->request_id, data->id, data->anqp_len, num_matches); + for (i = 0; i < num_matches; i++) { + data->ap.channel = vos_chan_to_freq(data->ap.channel); + hddLog(LOG1, "AP Info: Timestamp(0x%llX) Ssid (%s) " + "Bssid (" MAC_ADDRESS_STR ") " + "Channel (%u) " + "Rssi (%d) " + "RTT (%u) " + "RTT_SD (%u) " + "Bcn Period (%d) " + "Capability (0x%X) " + "IE Length (%d)", + data->ap.ts, + data->ap.ssid, + MAC_ADDR_ARRAY(data->ap.bssid), + data->ap.channel, + data->ap.rssi, + data->ap.rtt, + data->ap.rtt_sd, + data->ap.beaconPeriod, + data->ap.capability, + data->ap.ieLength); + hddLog(LOG1, "Beacon IE hexdump"); + VOS_TRACE_HEX_DUMP(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + data->ap.ieData, data->ap.ieLength); + hddLog(LOG1, "ANQP blob hexdump"); + VOS_TRACE_HEX_DUMP(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, + data->anqp, data->anqp_len); + } if (nla_put_u32(skb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_REQUEST_ID, data->request_id) || nla_put_u32(skb, - QCA_WLAN_VENDOR_ATTR_EXTSCAN_PNO_RESULTS_PASSPOINT_MATCH_ID, - data->id) || - nla_put_u32(skb, - QCA_WLAN_VENDOR_ATTR_EXTSCAN_PNO_RESULTS_PASSPOINT_MATCH_ANQP_LEN, - data->anqp_len) || - nla_put_u64(skb, - QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_TIME_STAMP, - data->ap.ts) || - nla_put(skb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_SSID, - sizeof(data->ap.ssid), - data->ap.ssid) || - nla_put(skb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_BSSID, - sizeof(data->ap.bssid), - data->ap.bssid) || - nla_put_u32(skb, - QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_CHANNEL, - data->ap.channel) || - nla_put_s32(skb, - QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_RSSI, - data->ap.rssi) || - nla_put_u32(skb, - QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_RTT, - data->ap.rtt) || - nla_put_u32(skb, - QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_RTT_SD, - data->ap.rtt_sd) || - nla_put_u16(skb, - QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_BEACON_PERIOD, - data->ap.beaconPeriod) || - nla_put_u16(skb, - QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_CAPABILITY, - data->ap.capability) || - nla_put_u32(skb, - QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_IE_LENGTH, - data->ap.ieLength)) { + QCA_WLAN_VENDOR_ATTR_EXTSCAN_PNO_RESULTS_PASSPOINT_NETWORK_FOUND_NUM_MATCHES, + num_matches) || + nla_put_u8(skb, + QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_MORE_DATA, + more_data)) { hddLog(LOGE, FL("nla put fail")); - goto nla_put_failure; + goto fail; } - if (data->ap.ieLength) { - if (nla_put(skb, - QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_IE_DATA, - data->ap.ieLength, data->ap.ieData)) - goto nla_put_failure; - } + nla_aps = nla_nest_start(skb, + QCA_WLAN_VENDOR_ATTR_EXTSCAN_PNO_RESULTS_PASSPOINT_MATCH_RESULT_LIST); + if (!nla_aps) + goto fail; - if (data->anqp_len) { - if (nla_put(skb, - QCA_WLAN_VENDOR_ATTR_EXTSCAN_PNO_RESULTS_PASSPOINT_MATCH_ANQP, - data->anqp_len, data->anqp)) - goto nla_put_failure; - } + for (i = 0; i < num_matches; i++) { + struct nlattr *nla_ap; + nla_ap = nla_nest_start(skb, i); + if (!nla_ap) + goto fail; + + if (nla_put_u32(skb, + QCA_WLAN_VENDOR_ATTR_EXTSCAN_PNO_RESULTS_PASSPOINT_MATCH_ID, + data->id) || + nla_put_u32(skb, + QCA_WLAN_VENDOR_ATTR_EXTSCAN_PNO_RESULTS_PASSPOINT_MATCH_ANQP_LEN, + data->anqp_len)) { + goto fail; + } + + if (data->anqp_len) + if (nla_put(skb, + QCA_WLAN_VENDOR_ATTR_EXTSCAN_PNO_RESULTS_PASSPOINT_MATCH_ANQP, + data->anqp_len, data->anqp)) + goto fail; + + nla_bss = nla_nest_start(skb, + QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_LIST); + if (!nla_bss) + goto fail; + + nla_b = nla_nest_start(skb, 0); + if (!nla_b) + goto fail; + + if (nla_put_u64(skb, + QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_TIME_STAMP, + data->ap.ts) || + nla_put(skb, + QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_SSID, + sizeof(data->ap.ssid), + data->ap.ssid) || + nla_put(skb, + QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_BSSID, + sizeof(data->ap.bssid), + data->ap.bssid) || + nla_put_u32(skb, + QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_CHANNEL, + data->ap.channel) || + nla_put_s32(skb, + QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_RSSI, + data->ap.rssi) || + nla_put_u32(skb, + QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_RTT, + data->ap.rtt) || + nla_put_u32(skb, + QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_RTT_SD, + data->ap.rtt_sd) || + nla_put_u16(skb, + QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_BEACON_PERIOD, + data->ap.beaconPeriod) || + nla_put_u16(skb, + QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_CAPABILITY, + data->ap.capability) || + nla_put_u32(skb, + QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_IE_LENGTH, + data->ap.ieLength)) + goto fail; + + if (data->ap.ieLength) + if (nla_put(skb, + QCA_WLAN_VENDOR_ATTR_EXTSCAN_RESULTS_SCAN_RESULT_IE_DATA, + data->ap.ieLength, + data->ap.ieData)) + goto fail; + + nla_nest_end(skb, nla_b); + nla_nest_end(skb, nla_bss); + nla_nest_end(skb, nla_ap); + } + nla_nest_end(skb, nla_aps); cfg80211_vendor_event(skb, GFP_KERNEL); return; -nla_put_failure: +fail: kfree_skb(skb); return; } @@ -18930,6 +18974,7 @@ void wlan_hdd_cfg80211_extscan_callback(void *ctx, const tANI_U16 evType, case eSIR_PASSPOINT_NETWORK_FOUND_IND: wlan_hdd_cfg80211_passpoint_match_found(ctx, (struct wifi_passpoint_match *) pMsg); + break; case eSIR_EXTSCAN_HOTLIST_SSID_MATCH_IND: wlan_hdd_cfg80211_extscan_hotlist_ssid_match_ind(ctx, -- cgit v1.2.3 From f0bc3e5438b318402f3a71b87bd5650191ae4f34 Mon Sep 17 00:00:00 2001 From: Amar Singhal Date: Thu, 26 Mar 2015 16:01:05 -0700 Subject: qcacld-2.0: Correct setting up dynamic DTIM Correct setting up dynamic DTIM. The value needs to be percolated down to firmware as well. Change-Id: I2a89e646037fa84e270e2310cf7c3e0986e829ad CRs-Fixed: 810050 --- CORE/HDD/src/wlan_hdd_cfg80211.c | 22 ++++++++------- CORE/SERVICES/COMMON/wma_api.h | 3 ++- CORE/SERVICES/WMA/wma.c | 9 ++++--- CORE/SME/inc/sme_Api.h | 3 +++ CORE/SME/src/sme_common/sme_Api.c | 57 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 81 insertions(+), 13 deletions(-) diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c index f1715fb23284..6cc8fce6d685 100644 --- a/CORE/HDD/src/wlan_hdd_cfg80211.c +++ b/CORE/HDD/src/wlan_hdd_cfg80211.c @@ -3831,8 +3831,6 @@ static bool put_wifi_iface_stats(tpSirWifiIfaceStat pWifiIfaceStat, average_tsf_offset = (average_tsf_offset << 32) | pWifiIfaceStat->avg_bcn_spread_offset_low ; - printk("putting interface values\n"); - if (nla_put_u32(vendor_event, QCA_WLAN_VENDOR_ATTR_LL_STATS_IFACE_NUM_PEERS, num_peers) || @@ -6463,16 +6461,15 @@ static int wlan_hdd_cfg80211_wifi_configuration_set(struct wiphy *wiphy, hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); hdd_context_t *pHddCtx = wiphy_priv(wiphy); struct nlattr *tb[QCA_WLAN_VENDOR_ATTR_CONFIG_MAX + 1]; - int ret_val1 = 0; - int ret_val2 = 0; + int ret_val = 0; u32 dynamic_dtim; u16 stats_avg_factor; u32 guard_time; eHalStatus status; - if ((ret_val1 = wlan_hdd_validate_context(pHddCtx))) { + if ((ret_val = wlan_hdd_validate_context(pHddCtx))) { hddLog(LOGE, FL("HDD context is not valid")); - return ret_val1; + return ret_val; } if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_CONFIG_MAX, @@ -6486,6 +6483,13 @@ static int wlan_hdd_cfg80211_wifi_configuration_set(struct wiphy *wiphy, dynamic_dtim = nla_get_u32( tb[QCA_WLAN_VENDOR_ATTR_CONFIG_DYNAMIC_DTIM]); pHddCtx->cfg_ini->enableDynamicDTIM = dynamic_dtim; + + status = sme_configure_dynamic_dtim(pHddCtx->hHal, + pAdapter->sessionId, + dynamic_dtim); + + if (eHAL_STATUS_SUCCESS != status) + ret_val = -EPERM; } if (tb[QCA_WLAN_VENDOR_ATTR_CONFIG_STATS_AVG_FACTOR]) { @@ -6496,7 +6500,7 @@ static int wlan_hdd_cfg80211_wifi_configuration_set(struct wiphy *wiphy, stats_avg_factor); if (eHAL_STATUS_SUCCESS != status) - ret_val1 = -EPERM; + ret_val = -EPERM; } @@ -6508,10 +6512,10 @@ static int wlan_hdd_cfg80211_wifi_configuration_set(struct wiphy *wiphy, guard_time); if (eHAL_STATUS_SUCCESS != status) - ret_val2 = -EPERM; + ret_val = -EPERM; } - return (ret_val1 | ret_val2); + return ret_val; } const struct wiphy_vendor_command hdd_wiphy_vendor_commands[] = diff --git a/CORE/SERVICES/COMMON/wma_api.h b/CORE/SERVICES/COMMON/wma_api.h index ea84460cc083..f034959d76cd 100644 --- a/CORE/SERVICES/COMMON/wma_api.h +++ b/CORE/SERVICES/COMMON/wma_api.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013-2014 The Linux Foundation. All rights reserved. + * Copyright (c) 2013-2015 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -76,6 +76,7 @@ typedef enum { #ifdef CONFIG_ATH_PCIE_ACCESS_DEBUG GEN_PARAM_DUMP_PCIE_ACCESS_LOG #endif + GEN_PARAM_DYNAMIC_DTIM } GEN_PARAM; #define VDEV_CMD 1 diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c index 6fa478adb867..b8a614dd0dc6 100644 --- a/CORE/SERVICES/WMA/wma.c +++ b/CORE/SERVICES/WMA/wma.c @@ -12148,6 +12148,9 @@ static void wma_process_cli_set_cmd(tp_wma_handle wma, HTCDump(wma->htc_handle, PCIE_DUMP, false); break; #endif + case GEN_PARAM_DYNAMIC_DTIM: + wma->staDynamicDtim = privcmd->param_value; + break; default: WMA_LOGE("Invalid param id 0x%x", privcmd->param_id); break; @@ -29930,6 +29933,9 @@ static void wma_set_vdev_suspend_dtim(tp_wma_handle wma, v_U8_t vdev_id) return; } + WMA_LOGD("Set Listen Interval vdevId %d Listen Intv %d", + vdev_id, listen_interval); + ret = wmi_unified_vdev_set_param_send(wma->wmi_handle, vdev_id, WMI_VDEV_PARAM_LISTEN_INTERVAL, listen_interval); @@ -29939,9 +29945,6 @@ static void wma_set_vdev_suspend_dtim(tp_wma_handle wma, v_U8_t vdev_id) vdev_id); } - WMA_LOGD("Set Listen Interval vdevId %d Listen Intv %d", - vdev_id, listen_interval); - if (is_qpower_enabled) { WMA_LOGD("disable Qpower in suspend mode!"); ret = wmi_unified_set_sta_ps_param(wma->wmi_handle, diff --git a/CORE/SME/inc/sme_Api.h b/CORE/SME/inc/sme_Api.h index 81ff03e395f4..b52ad8885b26 100644 --- a/CORE/SME/inc/sme_Api.h +++ b/CORE/SME/inc/sme_Api.h @@ -4289,6 +4289,9 @@ bool sme_validate_sap_channel_switch(tHalHandle hal, uint8_t cc_switch_mode, uint32_t session_id); +eHalStatus sme_configure_dynamic_dtim(tHalHandle hHal, tANI_U8 session_id, + tANI_U32 dynamic_dtim); + eHalStatus sme_configure_stats_avg_factor(tHalHandle hHal, tANI_U8 session_id, tANI_U16 stats_avg_factor); diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c index 6c44635ecb71..a7cfa29ba79f 100644 --- a/CORE/SME/src/sme_common/sme_Api.c +++ b/CORE/SME/src/sme_common/sme_Api.c @@ -15657,3 +15657,60 @@ eHalStatus sme_update_roam_scan_hi_rssi_scan_params(tHalHandle hal_handle, return status; } +/** + * sme_configure_dynamic_dtim() - function to configure dynamic dtim + * @h_hal: SME API to enable/disable dynamic DTIM + * @session_id: session ID + * @dynamic_dtim: dynamic dtim value + * + * This function configures the guard time in firmware + * + * Return: eHalStatus + */ +eHalStatus sme_configure_dynamic_dtim(tHalHandle h_hal, tANI_U8 session_id, + tANI_U32 dynamic_dtim) +{ + vos_msg_t msg; + eHalStatus status = eHAL_STATUS_SUCCESS; + tpAniSirGlobal pMac = PMAC_STRUCT(h_hal); + wda_cli_set_cmd_t *iwcmd; + + iwcmd = vos_mem_malloc(sizeof(*iwcmd)); + if (NULL == iwcmd) { + VOS_TRACE(VOS_MODULE_ID_SME, + VOS_TRACE_LEVEL_FATAL, + "%s: vos_mem_alloc failed", __func__); + return eHAL_STATUS_FAILED_ALLOC; + } + + status = sme_AcquireGlobalLock(&pMac->sme); + + if (eHAL_STATUS_SUCCESS == status) { + + vos_mem_zero((void *)iwcmd, sizeof(*iwcmd)); + iwcmd->param_value = dynamic_dtim; + iwcmd->param_vdev_id = session_id; + iwcmd->param_id = GEN_PARAM_DYNAMIC_DTIM; + iwcmd->param_vp_dev = GEN_CMD; + msg.type = WDA_CLI_SET_CMD; + msg.reserved = 0; + msg.bodyptr = (void *)iwcmd; + + if (!VOS_IS_STATUS_SUCCESS( + vos_mq_post_message(VOS_MODULE_ID_WDA, &msg))) { + VOS_TRACE( VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + "%s: Not able to post SIR_HAL_CONFIG_GUARD_TIME to WDA!", + __func__); + vos_mem_free(iwcmd); + status = eHAL_STATUS_FAILURE; + } + sme_ReleaseGlobalLock(&pMac->sme); + } else { + VOS_TRACE( VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, + "%s: sme_AcquireGlobalLock error!", + __func__); + vos_mem_free(iwcmd); + } + + return status; +} -- cgit v1.2.3 From 8ef2ed2e81a59e407f1051340286c33e7c566963 Mon Sep 17 00:00:00 2001 From: Yun Park Date: Wed, 1 Apr 2015 22:40:17 -0700 Subject: qca-cld: Fix build error when IPA uC is not enabled Add build flag for the variables which are used only when IPA uC offload is enbled. Change-Id: Ia9734ffd72bc97ee7cb9be79b3a0308907a9664a CRs-Fixed: 814186 --- CORE/HDD/src/wlan_hdd_ipa.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CORE/HDD/src/wlan_hdd_ipa.c b/CORE/HDD/src/wlan_hdd_ipa.c index 0e4b7a18af02..0a4594ae15aa 100644 --- a/CORE/HDD/src/wlan_hdd_ipa.c +++ b/CORE/HDD/src/wlan_hdd_ipa.c @@ -3899,9 +3899,9 @@ VOS_STATUS hdd_ipa_init(hdd_context_t *hdd_ctx) struct hdd_ipa_iface_context *iface_context = NULL; #ifdef IPA_UC_OFFLOAD struct ipa_wdi_uc_ready_params uc_ready_param; -#endif /* IPA_UC_OFFLOAD */ struct ipa_msg_meta meta; struct ipa_wlan_msg *ipa_msg; +#endif /* IPA_UC_OFFLOAD */ if (!hdd_ipa_is_enabled(hdd_ctx)) return VOS_STATUS_SUCCESS; -- cgit v1.2.3 From 97e12fd5271d4a84d8f01099d6e90cf247575e3a Mon Sep 17 00:00:00 2001 From: Dhanashri Atre Date: Mon, 30 Mar 2015 11:34:52 -0700 Subject: wlan: qca-cld: Replace panic with BUG_ON Register values are captured in the crash dump with BUG_ON. Change-Id: I33500aea0769879d63b2e684dc898ba0e3b0b5a2 CRs-Fixed: 813402 --- CORE/SERVICES/COMMON/adf/linux/adf_os_util_pvt.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CORE/SERVICES/COMMON/adf/linux/adf_os_util_pvt.h b/CORE/SERVICES/COMMON/adf/linux/adf_os_util_pvt.h index 855dd005b1da..5584698fe31a 100644 --- a/CORE/SERVICES/COMMON/adf/linux/adf_os_util_pvt.h +++ b/CORE/SERVICES/COMMON/adf/linux/adf_os_util_pvt.h @@ -64,7 +64,7 @@ printk(KERN_ERR "Assertion failed! %s:%s %s:%d\n", \ #expr, __FUNCTION__, __FILE__, __LINE__); \ dump_stack(); \ - panic("Take care of the assert first\n"); \ + BUG_ON(1); \ } \ }while(0) -- cgit v1.2.3 From 6fb0c4268b7cdc74ba07885369c81e84f04b8973 Mon Sep 17 00:00:00 2001 From: AnjaneeDevi Kapparapu Date: Thu, 2 Apr 2015 12:33:07 +0530 Subject: Cafstaging Release 4.0.10.67 Cafstaging Release 4.0.10.67 Change-Id: I1bcec158c70866d622f16a100dc3bfe6f9061500 CRs-Fixed: 688141 --- CORE/MAC/inc/qwlan_version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CORE/MAC/inc/qwlan_version.h b/CORE/MAC/inc/qwlan_version.h index 663803a1645f..1ce4fec4d7ff 100644 --- a/CORE/MAC/inc/qwlan_version.h +++ b/CORE/MAC/inc/qwlan_version.h @@ -42,9 +42,9 @@ BRIEF DESCRIPTION: #define QWLAN_VERSION_MINOR 0 #define QWLAN_VERSION_PATCH 10 #define QWLAN_VERSION_EXTRA "" -#define QWLAN_VERSION_BUILD 66 +#define QWLAN_VERSION_BUILD 67 -#define QWLAN_VERSIONSTR "4.0.10.66" +#define QWLAN_VERSIONSTR "4.0.10.67" #define AR6320_REV1_VERSION 0x5000000 -- cgit v1.2.3