Fix wifi startup timing issue
Bug: 17358965
Change-Id: Iacafcf1a1a9fed9755912b591eacdefd6992b088
diff --git a/device.mk b/device.mk
index 09d7ae2..e7d4da5 100644
--- a/device.mk
+++ b/device.mk
@@ -57,7 +57,8 @@
PRODUCT_COPY_FILES += \
device/lge/mako/WCNSS_cfg.dat:system/vendor/firmware/wlan/prima/WCNSS_cfg.dat \
device/lge/mako/WCNSS_qcom_cfg.ini:system/etc/wifi/WCNSS_qcom_cfg.ini \
- device/lge/mako/WCNSS_qcom_wlan_nv.bin:system/etc/wifi/WCNSS_qcom_wlan_nv.bin
+ device/lge/mako/WCNSS_qcom_wlan_nv.bin:system/etc/wifi/WCNSS_qcom_wlan_nv.bin \
+ device/lge/mako/init.mako.wifi.sh:system/etc/init.mako.wifi.sh
PRODUCT_COPY_FILES += \
device/lge/mako/audio_policy.conf:system/etc/audio_policy.conf
diff --git a/init.mako.rc b/init.mako.rc
index 85babc8..67a80d8 100644
--- a/init.mako.rc
+++ b/init.mako.rc
@@ -147,16 +147,12 @@
# to observe dnsmasq.leases file for dhcp information of soft ap.
chown dhcp system /data/misc/dhcp
- write /dev/wcnss_wlan 1
+ chown system system /dev/wcnss_wlan
write /sys/module/wcnss_ssr_8960/parameters/enable_riva_ssr 1
# Create directory used by audio subsystem
mkdir /data/misc/audio 0770 audio audio
- # Workaround for conn_init not copying the updated firmware
- rm /data/misc/wifi/WCNSS_qcom_cfg.ini
- rm /data/misc/wifi/WCNSS_qcom_wlan_nv.bin
-
# Mounting of persist is moved to 'on emmc-fs' and 'on fs' sections
# We chown/chmod /persist again so because mount is run as root + defaults
chown system system /persist
@@ -395,10 +391,11 @@
user camera
group camera system inet input
-service conn_init /system/bin/conn_init
- class late_start
+service wcnss_init /system/bin/sh /system/etc/init.mako.wifi.sh
+ class main
user system
group system wifi
+ seclabel u:r:conn_init:s0
oneshot
service bdAddrLoader /system/bin/bdAddrLoader -f /persist/bluetooth/.bdaddr -h -x
diff --git a/init.mako.wifi.sh b/init.mako.wifi.sh
new file mode 100644
index 0000000..e586e96
--- /dev/null
+++ b/init.mako.wifi.sh
@@ -0,0 +1,10 @@
+#!/system/bin/sh
+
+# Workaround for conn_init not copying the updated firmware
+rm /data/misc/wifi/WCNSS_qcom_cfg.ini
+rm /data/misc/wifi/WCNSS_qcom_wlan_nv.bin
+
+/system/bin/conn_init
+
+echo 1 > /dev/wcnss_wlan
+
diff --git a/sepolicy/conn_init.te b/sepolicy/conn_init.te
index 33f0cab..6491888 100644
--- a/sepolicy/conn_init.te
+++ b/sepolicy/conn_init.te
@@ -2,10 +2,11 @@
type conn_init, domain;
type conn_init_exec, exec_type, file_type;
-# Started by logwrapper in init
-domain_auto_trans(init, conn_init_exec, conn_init)
+init_daemon_domain(conn_init)
-allow conn_init devpts:chr_file { read write };
+# Runs init.mako.wifi.sh
+allow conn_init shell_exec:file { entrypoint read };
+allow conn_init conn_init_exec:file rx_file_perms;
# Allow /persist/wifi access
allow conn_init { persist_file persist_wifi_file }:dir search;
@@ -14,3 +15,8 @@
# Allow /data/misc/wifi access for firmware files
allow conn_init wifi_data_file:dir w_dir_perms;
allow conn_init wifi_data_file:file create_file_perms;
+
+allow conn_init wlan_device:chr_file rw_file_perms;
+
+# init.mako.wifi.sh runs toolbox
+allow conn_init system_file:file execute_no_trans;
diff --git a/sepolicy/device.te b/sepolicy/device.te
index 81caeca..b6e993a 100644
--- a/sepolicy/device.te
+++ b/sepolicy/device.te
@@ -1,3 +1,5 @@
+type wlan_device, dev_type;
+
type diag_device, dev_type;
# Kickstart device used by QC qcks
diff --git a/sepolicy/file_contexts b/sepolicy/file_contexts
index ca7e215..4944f75 100644
--- a/sepolicy/file_contexts
+++ b/sepolicy/file_contexts
@@ -2,6 +2,9 @@
/dev/kgsl-3d0 u:object_r:gpu_device:s0
/dev/kgsl u:object_r:gpu_device:s0
+# WLAN
+/dev/wcnss_wlan u:object_r:wlan_device:s0
+
# Image Rotator Driver
/dev/msm_rotator u:object_r:video_device:s0