#
# Copyright 2015 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
import init.bullhead.usb.rc
import init.bullhead.diag.rc
import init.bullhead.fp.rc
import init.bullhead.sensorhub.rc
import init.bullhead.ramdump.rc
import init.bullhead.misc.rc
on early-init
mount debugfs debugfs /sys/kernel/debug
chown system system /sys/kernel/debug/kgsl/proc
on charger
# disable FPS clk
write /sys/bus/spi/drivers/fpc1020/spi1.2/clk_enable 0
# low power governing
write /sys/devices/system/cpu/cpu1/online 0
write /sys/devices/system/cpu/cpu2/online 0
write /sys/devices/system/cpu/cpu3/online 0
write /sys/devices/system/cpu/cpu4/online 0
write /sys/devices/system/cpu/cpu5/online 0
write /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor powersave
# Disable CPU retention
write /sys/module/lpm_levels/system/a53/cpu0/retention/idle_enabled 0
write /sys/module/lpm_levels/system/a53/cpu1/retention/idle_enabled 0
write /sys/module/lpm_levels/system/a53/cpu2/retention/idle_enabled 0
write /sys/module/lpm_levels/system/a53/cpu3/retention/idle_enabled 0
write /sys/module/lpm_levels/system/a57/cpu4/retention/idle_enabled 0
write /sys/module/lpm_levels/system/a57/cpu5/retention/idle_enabled 0
# Disable L2 retention
write /sys/module/lpm_levels/system/a53/a53-l2-retention/idle_enabled 0
write /sys/module/lpm_levels/system/a57/a57-l2-retention/idle_enabled 0
on property:sys.boot_completed=1
# allow CPUs to go in deeper idle state than C0
write /sys/module/lpm_levels/parameters/sleep_disabled 0
#end boot time fs tune
write /sys/block/mmcblk0/queue/scheduler noop
write /sys/block/mmcblk0/queue/rq_affinity 0
write /sys/block/mmcblk0/queue/read_ahead_kb 128
write /sys/block/dm-0/queue/read_ahead_kb 128
write /sys/block/dm-1/queue/read_ahead_kb 128
write /sys/block/dm-2/queue/read_ahead_kb 128
write /sys/block/mmcblk0/queue/iostats 1
on init
# Load persistent dm-verity state
verity_load_state
# Set permissions for persist partition
mkdir /persist 0771 system system
mkdir /firmware 0771 system system
symlink /sdcard /storage/sdcard0
# NXP HAL expects /dev/pn54x
symlink /dev/pn548 /dev/pn54x
write /sys/block/zram0/comp_algorithm lz4
write /sys/block/zram0/max_comp_streams 4
write /proc/sys/vm/page-cluster 0
on fs
mount_all ./fstab.bullhead
swapon_all ./fstab.bullhead
restorecon_recursive /persist
on early-boot
# set RLIMIT_MEMLOCK to 64MB
setrlimit 8 67108864 67108864
# Allow subsystem (modem etc) debugging
write /sys/module/subsystem_restart/parameters/enable_debug ${persist.sys.ssr.enable_debug}
write /sys/module/pil_msa/parameters/pbl_mba_boot_timeout_ms ${persist.sys.mba_boot_timeout}
write /sys/module/pil_msa/parameters/modem_auth_timeout_ms ${persist.sys.modem_auth_timeout}
write /sys/module/peripheral_loader/parameters/proxy_timeout_ms ${persist.sys.pil_proxy_timeout}
# Update dm-verity state and set partition.*.verified properties
verity_update_state
# Busy loop to wait for devices booted by devstart_sh just in case device not ready
exec - root root system -- /system/bin/init.qcom.devwait.sh
on boot
# execute script to set initial CPU settings
# don't run as a service to avoid race conditions
exec - root root system -- /system/bin/init.bullhead.power.sh
# update foreground cpuset now that processors are up
# foreground gets all CPUs except CPU 3
# CPU 3 is reserved for the top app
write /dev/cpuset/foreground/cpus 0-2,4-5
write /dev/cpuset/foreground/boost/cpus 4-5
write /dev/cpuset/background/cpus 0
write /dev/cpuset/system-background/cpus 0-2
write /dev/cpuset/top-app/cpus 0-5
# Bluetooth
chown bluetooth net_bt /sys/class/rfkill/rfkill0/type
chown bluetooth net_bt /sys/class/rfkill/rfkill0/state
chmod 0660 /sys/class/rfkill/rfkill0/state
chown bluetooth net_bt /dev/ttyHS0
chmod 0660 /dev/ttyHS0
chown bluetooth net_bt /sys/class/rfkill/rfkill0/device/extldo
chmod 0660 /sys/class/rfkill/rfkill0/device/extldo
# Fingerprint
chown system system /sys/bus/spi/drivers/fpc1020/spi1.2/clk_enable
chown system system /sys/bus/spi/drivers/fpc1020/spi1.2/wakeup_enable
chown system system /sys/bus/spi/drivers/fpc1020/spi1.2/irq
# create symlink for fb1 as HDMI
symlink /dev/graphics/fb1 /dev/graphics/hdmi
# setup permissions for fb1 related nodes
chown system graphics /sys/class/graphics/fb1/hpd
chown system graphics /sys/class/graphics/fb1/vendor_name
chown system graphics /sys/class/graphics/fb1/product_description
chmod 0664 /sys/devices/virtual/graphics/fb1/hpd
chmod 0664 /sys/devices/virtual/graphics/fb1/vendor_name
chmod 0664 /sys/devices/virtual/graphics/fb1/product_description
# Grant permission to modify the color_temp setting
chown system graphics /sys/class/graphics/fb0/color_temp
chmod 0664 /sys/class/graphics/fb0/color_temp
# Allow QMUX daemon to assign port open wait time
chown radio radio /sys/devices/virtual/hsicctl/hsicctl0/modem_wait
#Create QMUX deamon socket area
mkdir /dev/socket/qmux_radio 0770 radio radio
chmod 2770 /dev/socket/qmux_radio
mkdir /dev/socket/qmux_audio 0770 media audio
chmod 2770 /dev/socket/qmux_audio
mkdir /dev/socket/qmux_bluetooth 0770 bluetooth bluetooth
chmod 2770 /dev/socket/qmux_bluetooth
mkdir /dev/socket/qmux_gps 0770 gps gps
chmod 2770 /dev/socket/qmux_gps
# Subsytem Restart
write /sys/bus/msm_subsys/devices/subsys0/restart_level "related"
write /sys/bus/msm_subsys/devices/subsys1/restart_level "related"
write /sys/bus/msm_subsys/devices/subsys2/restart_level "related"
write /sys/bus/msm_subsys/devices/subsys3/restart_level "related"
# Subsytem Ramdump collection
write /sys/module/subsystem_restart/parameters/enable_ramdumps 1
write /sys/module/msm_poweroff/parameters/download_mode 0
# Adjust socket buffer to enlarge TCP receive window for high bandwidth
write /proc/sys/net/ipv4/tcp_adv_win_scale 1
# Assign TCP buffer thresholds to be ceiling value of technology maximums
# Increased technology maximums should be reflected here.
write /proc/sys/net/core/rmem_max 8388608
write /proc/sys/net/core/wmem_max 8388608
# Leds
chown system system /sys/class/leds/red/on_off_ms
chown system system /sys/class/leds/green/on_off_ms
chown system system /sys/class/leds/blue/on_off_ms
chown system system /sys/class/leds/red/rgb_start
# Wifi firmware reload path
chown wifi wifi /sys/module/wlan/parameters/fwpath
# Wifi firmware reload path
chown wifi wifi /sys/module/wlan/parameters/fwpath
on post-fs
symlink /dev/block/platform/soc.0/f9824900.sdhci /dev/block/bootdevice
mkdir /persist/data 0700 system system
mkdir /persist/data/sfs 0700 system system
mkdir /persist/data/tz 0700 system system
mkdir /persist/data/app_g 0700 system system
mkdir /persist/widevine 0770 drm system
start qseecomd
# Busy loop to wait for qseecomd started
exec - root root system -- /system/bin/init.bullhead.qseecomd.sh
# Start devices by sysfs trigger
start devstart_sh
on post-fs-data
# boot time fs tune
write /sys/block/mmcblk0/queue/iostats 0
write /sys/block/mmcblk0/queue/scheduler cfq
write /sys/block/mmcblk0/queue/iosched/slice_idle 0
write /sys/block/mmcblk0/queue/read_ahead_kb 2048
write /sys/block/dm-0/queue/read_ahead_kb 2048
write /sys/block/dm-1/queue/read_ahead_kb 2048
write /sys/block/dm-2/queue/read_ahead_kb 2048
# Mark the copy complete flag to not completed
mkdir /data/misc/radio 0770 radio radio
write /data/misc/radio/copy_complete 0
chown radio radio /data/misc/radio/copy_complete
chmod 0660 /data/misc/radio/copy_complete
#Update touch firmware if required
write /sys/bus/i2c/devices/2-0020/check_fw 1
write /sys/devices/soc.0/f9924000.i2c/power/control on
# Create /data/time folder for time-services
mkdir /data/time/ 0700 system system
# Create the directories used by CnE subsystem
mkdir /data/connectivity 0771 system system
# NFC: create data/nfc for nv storage
mkdir /data/nfc 0770 nfc nfc
mkdir /data/vendor/nfc 0770 nfc nfc
mkdir /data/nfc/param 0770 nfc nfc
# use qcril.db to handle Ecc and load MBN
copy /system/etc/qcril.db /data/misc/radio/qcril.db
chown radio radio /data/misc/radio/qcril.db
chmod 0600 /data/misc/radio/qcril.db
# Create folder for mm-qcamera-daemon
mkdir /data/misc/camera 0770 camera camera
# change permission for ldaf
chown input system /persist/calibration
chmod 0650 /persist/calibration
chown input system /persist/calibration/offset
chmod 0640 /persist/calibration/offset
chown input system /persist/calibration/xtalk
chmod 0640 /persist/calibration/xtalk
#Create directories for Location services
mkdir /data/misc/location 0770 gps gps
mkdir /data/misc/location/mq 0770 gps gps
mkdir /data/misc/location/xtwifi 0770 gps gps
mkdir /data/misc/location/gpsone_d 0770 system gps
# Audio
mkdir /data/misc/audio 0770 audio audio
# perf daemon
mkdir /data/misc/perfd 0755 root system
chmod 2755 /data/misc/perfd
rm /data/misc/perfd/default_values
# Subsytem Ramdump collection
mkdir /data/ramdump 0700 root root
setprop vold.post_fs_data_done 1
service irsc_util /system/bin/irsc_util "/etc/sec_config"
class main
user root
oneshot
service rmt_storage /system/bin/rmt_storage
class core
user root
group system wakelock
service start_hci_filter /vendor/bin/wcnss_filter
class late_start
user bluetooth
group bluetooth system
disabled
on property:wc_transport.start_hci=true
start start_hci_filter
on property:wc_transport.start_hci=false
stop start_hci_filter
# QMUX must be in multiple groups to support external process connections
service qmuxd /system/bin/qmuxd
class main
user radio
group radio audio bluetooth wakelock gps
service perfd /system/bin/perfd
class main
user root
group system
writepid /dev/cpuset/system-background/tasks
service qti /system/vendor/bin/qti
class main
user radio
group radio net_raw diag usb net_admin
service netmgrd /system/bin/netmgrd
class main
group radio system wakelock
service per_mgr /system/bin/pm-service
class core
user system
group system net_raw
service per_proxy /system/bin/pm-proxy
class core
user system
group system net_raw
disabled
on property:init.svc.per_mgr=running
start per_proxy
on property:sys.shutdown.requested=*
stop per_proxy
on property:ro.boot.hardware.sku=LGH790
setprop ro.boot.wificountrycode US
on property:ro.boot.hardware.sku=LGH791
setprop ro.boot.wificountrycode 00
on property:ro.boot.hardware.sku=LGH791F
setprop ro.boot.wificountrycode 00
on property:ro.boot.hardware.sku=LGH798
setprop ro.boot.wificountrycode 00
service thermal-engine /system/bin/thermal-engine
class main
user root
socket thermal-send-client stream 0666 system system
socket thermal-recv-client stream 0660 system system
socket thermal-recv-passive-client stream 0666 system system
group root
service wpa_supplicant /vendor/bin/hw/wpa_supplicant \
-ip2p0 -Dnl80211 -c/data/misc/wifi/p2p_supplicant.conf \
-I/system/etc/wifi/p2p_supplicant_overlay.conf -N \
-iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf \
-I/system/etc/wifi/wpa_supplicant_overlay.conf \
-puse_p2p_group_interface=1 \
-e/data/misc/wifi/entropy.bin -g@android:wpa_wlan0
# we will start as root and wpa_supplicant will switch to user wifi
# after setting up the capabilities required for WEXT
# user wifi
# group wifi inet keystore
class main
socket wpa_wlan0 dgram 660 wifi wifi
disabled
oneshot
service loc_launcher /system/bin/loc_launcher
#loc_launcher will start as root and set its uid to gps
class late_start
group gps inet net_raw diag net_admin wifi
service cnss-daemon /system/bin/cnss-daemon -n -l
class late_start
service qseecomd /vendor/bin/qseecomd
class core
user root
group root
service msm_irqbalance /system/bin/msm_irqbalance -f /vendor/etc/msm_irqbalance.conf
socket msm_irqbalance seqpacket 660 root system
class core
user root
group root
writepid /dev/cpuset/system-background/tasks
service time_daemon /system/bin/time_daemon
class late_start
user root
group root
service charger /charger
class charger
critical
seclabel u:r:charger:s0
service qcamerasvr /vendor/bin/mm-qcamera-daemon
class late_start
user camera
group camera system inet input graphics
writepid /dev/cpuset/system-background/tasks
on property:persist.radio.atfwd.start=false
stop atfwd
service atfwd /system/bin/ATFWD-daemon
class late_start
user system
group system radio
on property:ro.debuggable=1
start ss_ramdump
service ss_ramdump /system/bin/subsystem_ramdump
class main
user root
group root system
disabled
service cnd /system/bin/cnd
class late_start
socket cnd stream 660 root inet
group root wakelock
service imsqmidaemon /system/bin/imsqmidaemon
class main
user system
socket ims_qmid stream 0660 system radio
group radio net_raw log diag
service imsdatadaemon /system/bin/imsdatadaemon
class main
user system
socket ims_datad stream 0660 system radio
group system wifi radio inet net_raw log diag net_admin
disabled
on property:sys.ims.QMI_DAEMON_STATUS=1
start imsdatadaemon
service bullhead-sh /system/bin/init.bullhead.sh
class late_start
user radio
group system
oneshot
# bugreport is triggered by holding down volume down, volume up and power
service bugreport /system/bin/dumpstate -d -p -B -z \
-o /data/user_de/0/com.android.shell/files/bugreports/bugreport
class main
disabled
oneshot
keycodes 114 115 116
service devstart_sh /system/bin/init.qcom.devstart.sh
class main
user root
group root system
disabled
oneshot