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

Unverified Commit cdf2f2b2 authored by Park Ju Hyung's avatar Park Ju Hyung Committed by Michael Bestas
Browse files

qcacld-3.0: Defer HDD initialization

 * Also rely on userspace writing to /dev/wlan, Wi-Fi
   HAL writes "ON" or "OFF" to /dev/wlan.

 * Use this method to initialize hdd as it's a safer
   way to ensure both wlan_mac.bin and WCNSS_qcom_cfg.ini
   are ready to be read.

 * This also eliminates the needs for horrible hacks
   to read the userspace file.

Change-Id: I648f1a107c095e50a64f44c39e78d6b6f917e190
parent 566743e4
Loading
Loading
Loading
Loading
+17 −12
Original line number Diff line number Diff line
@@ -243,6 +243,7 @@ static unsigned int dev_num = 1;
static struct cdev wlan_hdd_state_cdev;
static struct class *class;
static dev_t device;
static bool hdd_loaded = false;
#ifndef MODULE
static struct gwlan_loader *wlan_loader;
static ssize_t wlan_boot_cb(struct kobject *kobj,
@@ -16805,6 +16806,7 @@ static void hdd_inform_wifi_on(void)
}
#endif
int hdd_driver_load(void);
static ssize_t wlan_hdd_state_ctrl_param_write(struct file *filp,
						const char __user *user_buf,
						size_t count,
@@ -16839,6 +16841,13 @@ static ssize_t wlan_hdd_state_ctrl_param_write(struct file *filp,
		goto exit;
	}
	if (!hdd_loaded) {
		if (hdd_driver_load()) {
			pr_err("%s: Failed to init hdd module\n", __func__);
			goto exit;
		}
	}
	if (!cds_is_driver_loaded() || cds_is_driver_recovering()) {
		rc = wait_for_completion_timeout(&wlan_start_comp,
				msecs_to_jiffies(HDD_WLAN_START_WAIT_TIME));
@@ -17693,16 +17702,10 @@ int hdd_driver_load(void)
	hdd_set_conparam(con_mode);
	errno = wlan_hdd_state_ctrl_param_create();
	if (errno) {
		hdd_err("Failed to create ctrl param; errno:%d", errno);
		goto wakelock_destroy;
	}
	errno = pld_init();
	if (errno) {
		hdd_err("Failed to init PLD; errno:%d", errno);
		goto param_destroy;
		goto wakelock_destroy;
	}
	/* driver mode pass to cnss2 platform driver*/
@@ -17722,6 +17725,7 @@ int hdd_driver_load(void)
		goto pld_deinit;
	}
	hdd_loaded = true;
	hdd_debug("%s: driver loaded", WLAN_MODULE_NAME);
	return 0;
@@ -17740,8 +17744,6 @@ int hdd_driver_load(void)
	/* Wait for any ref taken on /dev/wlan to be released */
	while (qdf_atomic_read(&wlan_hdd_state_fops_ref))
		;
param_destroy:
	wlan_hdd_state_ctrl_param_destroy();
wakelock_destroy:
	qdf_wake_lock_destroy(&wlan_wake_lock);
comp_deinit:
@@ -17990,10 +17992,13 @@ static int hdd_module_init(void)
#else
static int hdd_module_init(void)
{
	if (hdd_driver_load())
		return -EINVAL;
	int ret;
	return 0;
	ret = wlan_hdd_state_ctrl_param_create();
	if (ret)
		pr_err("wlan_hdd_state_create:%x\n", ret);
	return ret;
}
#endif
#else