|
@@ -6171,132 +6171,6 @@ void hdd_prevent_suspend_timeout(uint32_t timeout, uint32_t reason)
|
|
|
qdf_wake_lock_timeout_acquire(&wlan_wake_lock, timeout);
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * hdd_exchange_version_and_caps() - exchange version and capability with target
|
|
|
- * @hdd_ctx: Pointer to HDD context
|
|
|
- *
|
|
|
- * This is the HDD function to exchange version and capability information
|
|
|
- * between Host and Target
|
|
|
- *
|
|
|
- * This function gets reported version of FW.
|
|
|
- * It also finds the version of target headers used to compile the host;
|
|
|
- * It compares the above two and prints a warning if they are different;
|
|
|
- * It gets the SW and HW version string;
|
|
|
- * Finally, it exchanges capabilities between host and target i.e. host
|
|
|
- * and target exchange a msg indicating the features they support through a
|
|
|
- * bitmap
|
|
|
- *
|
|
|
- * Return: None
|
|
|
- */
|
|
|
-void hdd_exchange_version_and_caps(struct hdd_context *hdd_ctx)
|
|
|
-{
|
|
|
-
|
|
|
- tSirVersionType versionCompiled;
|
|
|
- tSirVersionType versionReported;
|
|
|
- tSirVersionString versionString;
|
|
|
- uint8_t fwFeatCapsMsgSupported = 0;
|
|
|
- QDF_STATUS vstatus;
|
|
|
-
|
|
|
- memset(&versionCompiled, 0, sizeof(versionCompiled));
|
|
|
- memset(&versionReported, 0, sizeof(versionReported));
|
|
|
-
|
|
|
- /* retrieve and display WCNSS version information */
|
|
|
- do {
|
|
|
-
|
|
|
- vstatus = sme_get_wcnss_wlan_compiled_version(hdd_ctx->hHal,
|
|
|
- &versionCompiled);
|
|
|
- if (!QDF_IS_STATUS_SUCCESS(vstatus)) {
|
|
|
- hdd_err("unable to retrieve WCNSS WLAN compiled version");
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
- vstatus = sme_get_wcnss_wlan_reported_version(hdd_ctx->hHal,
|
|
|
- &versionReported);
|
|
|
- if (!QDF_IS_STATUS_SUCCESS(vstatus)) {
|
|
|
- hdd_err("unable to retrieve WCNSS WLAN reported version");
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
- if ((versionCompiled.major != versionReported.major) ||
|
|
|
- (versionCompiled.minor != versionReported.minor) ||
|
|
|
- (versionCompiled.version != versionReported.version) ||
|
|
|
- (versionCompiled.revision != versionReported.revision)) {
|
|
|
- pr_err("%s: WCNSS WLAN Version %u.%u.%u.%u, "
|
|
|
- "Host expected %u.%u.%u.%u\n",
|
|
|
- WLAN_MODULE_NAME,
|
|
|
- (int)versionReported.major,
|
|
|
- (int)versionReported.minor,
|
|
|
- (int)versionReported.version,
|
|
|
- (int)versionReported.revision,
|
|
|
- (int)versionCompiled.major,
|
|
|
- (int)versionCompiled.minor,
|
|
|
- (int)versionCompiled.version,
|
|
|
- (int)versionCompiled.revision);
|
|
|
- } else {
|
|
|
- pr_info("%s: WCNSS WLAN version %u.%u.%u.%u\n",
|
|
|
- WLAN_MODULE_NAME,
|
|
|
- (int)versionReported.major,
|
|
|
- (int)versionReported.minor,
|
|
|
- (int)versionReported.version,
|
|
|
- (int)versionReported.revision);
|
|
|
- }
|
|
|
-
|
|
|
- vstatus = sme_get_wcnss_software_version(hdd_ctx->hHal,
|
|
|
- versionString,
|
|
|
- sizeof(versionString));
|
|
|
- if (!QDF_IS_STATUS_SUCCESS(vstatus)) {
|
|
|
- hdd_err("unable to retrieve WCNSS software version string");
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
- pr_info("%s: WCNSS software version %s\n",
|
|
|
- WLAN_MODULE_NAME, versionString);
|
|
|
-
|
|
|
- vstatus = sme_get_wcnss_hardware_version(hdd_ctx->hHal,
|
|
|
- versionString,
|
|
|
- sizeof(versionString));
|
|
|
- if (!QDF_IS_STATUS_SUCCESS(vstatus)) {
|
|
|
- hdd_err("unable to retrieve WCNSS hardware version string");
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
- pr_info("%s: WCNSS hardware version %s\n",
|
|
|
- WLAN_MODULE_NAME, versionString);
|
|
|
-
|
|
|
- /*
|
|
|
- * 1.Check if FW version is greater than 0.1.1.0. Only then
|
|
|
- * send host-FW capability exchange message
|
|
|
- * 2.Host-FW capability exchange message is only present on
|
|
|
- * target 1.1 so send the message only if it the target is 1.1
|
|
|
- * minor numbers for different target branches:
|
|
|
- * 0 -> (1.0)Mainline Build
|
|
|
- * 1 -> (1.1)Mainline Build
|
|
|
- * 2->(1.04) Stability Build
|
|
|
- */
|
|
|
- if (((versionReported.major > 0) || (versionReported.minor > 1)
|
|
|
- || ((versionReported.minor >= 1)
|
|
|
- && (versionReported.version >= 1)))
|
|
|
- && ((versionReported.major == 1)
|
|
|
- && (versionReported.minor >= 1)))
|
|
|
- fwFeatCapsMsgSupported = 1;
|
|
|
-
|
|
|
- if (fwFeatCapsMsgSupported) {
|
|
|
- /*
|
|
|
- * Indicate if IBSS heartbeat monitoring needs to be
|
|
|
- * offloaded
|
|
|
- */
|
|
|
- if (!hdd_ctx->config->enableIbssHeartBeatOffload) {
|
|
|
- sme_disable_feature_capablity
|
|
|
- (IBSS_HEARTBEAT_OFFLOAD);
|
|
|
- }
|
|
|
-
|
|
|
- sme_feature_caps_exchange(hdd_ctx->hHal);
|
|
|
- }
|
|
|
-
|
|
|
- } while (0);
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
/* Initialize channel list in sme based on the country code */
|
|
|
QDF_STATUS hdd_set_sme_chan_list(struct hdd_context *hdd_ctx)
|
|
|
{
|