Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 704099f3 authored by Lior David's avatar Lior David Committed by Maya Erez
Browse files

wil6210: bus_request platform operation refinement



The driver uses the bus_request platform operation to
request resources from the platform for a specific bandwidth.
Currently the driver requests resources for the maximum
theoretical bandwidth, when interface is brought up.
Refine this process a bit: now the driver will request a
small amount of resources when interface is up, and will only
issue the maximum request when connected.
This mechanism will be improved further in the future to make
more refined requests based on actual bandwidth.

Change-Id: Ib4287cec52c566ba62850a2695eb5be52c69f88e
Signed-off-by: default avatarLior David <qca_liord@qca.qualcomm.com>
Signed-off-by: default avatarMaya Erez <qca_merez@qca.qualcomm.com>
Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
Git-commit: 9953a782f9fac1becccb8f48f1a276c310f2ab5a
Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git


Signed-off-by: default avatarMaya Erez <merez@codeaurora.org>
parent 1aaa3245
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -764,6 +764,7 @@ static int wil_cfg80211_connect(struct wiphy *wiphy,
	rc = wmi_send(wil, WMI_CONNECT_CMDID, &conn, sizeof(conn));
	if (rc == 0) {
		netif_carrier_on(ndev);
		wil6210_bus_request(wil, WIL_MAX_BUS_REQUEST_KBPS);
		/* Connect can take lots of time */
		mod_timer(&wil->connect_timer,
			  jiffies + msecs_to_jiffies(2000));
@@ -1283,6 +1284,7 @@ static int _wil_cfg80211_start_ap(struct wiphy *wiphy,
	wil->pbss = pbss;

	netif_carrier_on(ndev);
	wil6210_bus_request(wil, WIL_MAX_BUS_REQUEST_KBPS);

	rc = wmi_pcp_start(wil, bi, wmi_nettype, chan, hidden_ssid, is_go);
	if (rc)
@@ -1298,6 +1300,7 @@ static int _wil_cfg80211_start_ap(struct wiphy *wiphy,
	wmi_pcp_stop(wil);
err_pcp_start:
	netif_carrier_off(ndev);
	wil6210_bus_request(wil, WIL_DEFAULT_BUS_REQUEST_KBPS);
out:
	mutex_unlock(&wil->mutex);
	return rc;
@@ -1404,6 +1407,7 @@ static int wil_cfg80211_stop_ap(struct wiphy *wiphy,
	wil_dbg_misc(wil, "stop_ap\n");

	netif_carrier_off(ndev);
	wil6210_bus_request(wil, WIL_DEFAULT_BUS_REQUEST_KBPS);
	wil_set_recovery_state(wil, fw_recovery_idle);

	mutex_lock(&wil->mutex);
+9 −5
Original line number Diff line number Diff line
@@ -274,6 +274,7 @@ static void _wil6210_disconnect(struct wil6210_priv *wil, const u8 *bssid,
		wil_bcast_fini(wil);
		wil_update_net_queues_bh(wil, NULL, true);
		netif_carrier_off(ndev);
		wil6210_bus_request(wil, WIL_DEFAULT_BUS_REQUEST_KBPS);

		if (test_bit(wil_status_fwconnected, wil->status)) {
			clear_bit(wil_status_fwconnected, wil->status);
@@ -557,6 +558,12 @@ int wil_priv_init(struct wil6210_priv *wil)
	return -EAGAIN;
}

void wil6210_bus_request(struct wil6210_priv *wil, u32 kbps)
{
	if (wil->platform_ops.bus_request)
		wil->platform_ops.bus_request(wil->platform_handle, kbps);
}

/**
 * wil6210_disconnect - disconnect one connection
 * @wil: driver context
@@ -1073,9 +1080,7 @@ int __wil_up(struct wil6210_priv *wil)
	napi_enable(&wil->napi_tx);
	set_bit(wil_status_napi_en, wil->status);

	if (wil->platform_ops.bus_request)
		wil->platform_ops.bus_request(wil->platform_handle,
					      WIL_MAX_BUS_REQUEST_KBPS);
	wil6210_bus_request(wil, WIL_DEFAULT_BUS_REQUEST_KBPS);

	return 0;
}
@@ -1099,8 +1104,7 @@ int __wil_down(struct wil6210_priv *wil)

	set_bit(wil_status_resetting, wil->status);

	if (wil->platform_ops.bus_request)
		wil->platform_ops.bus_request(wil->platform_handle, 0);
	wil6210_bus_request(wil, 0);

	wil_disable_irq(wil);
	if (test_and_clear_bit(wil_status_napi_en, wil->status)) {
+3 −2
Original line number Diff line number Diff line
/*
 * Copyright (c) 2012-2016 Qualcomm Atheros, Inc.
 * Copyright (c) 2012-2017 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
@@ -41,6 +41,7 @@ extern bool disable_ap_sme;
#define WIL_FW_NAME_SPARROW_PLUS "wil6210_sparrow_plus.fw" /* code Sparrow D0 */
#define WIL_BOARD_FILE_NAME "wil6210.brd" /* board & radio parameters */

#define WIL_DEFAULT_BUS_REQUEST_KBPS 128000 /* ~1Gbps */
#define WIL_MAX_BUS_REQUEST_KBPS 800000 /* ~6.1Gbps */

/**
@@ -910,7 +911,7 @@ int wmi_aoa_meas(struct wil6210_priv *wil, const void *mac_addr, u8 chan,
		 u8 type);
int wmi_abort_scan(struct wil6210_priv *wil);
void wil_abort_scan(struct wil6210_priv *wil, bool sync);

void wil6210_bus_request(struct wil6210_priv *wil, u32 kbps);
void wil6210_disconnect(struct wil6210_priv *wil, const u8 *bssid,
			u16 reason_code, bool from_event);
void wil_probe_client_flush(struct wil6210_priv *wil);
+1 −0
Original line number Diff line number Diff line
@@ -566,6 +566,7 @@ static void wmi_evt_connect(struct wil6210_priv *wil, int id, void *d, int len)
	    (wdev->iftype == NL80211_IFTYPE_P2P_CLIENT)) {
		if (rc) {
			netif_carrier_off(ndev);
			wil6210_bus_request(wil, WIL_DEFAULT_BUS_REQUEST_KBPS);
			wil_err(wil, "cfg80211_connect_result with failure\n");
			cfg80211_connect_result(ndev, evt->bssid, NULL, 0,
						NULL, 0,