#
# Copyright 2014 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.shamu.usb.rc
import init.shamu.power.rc
import init.shamu.diag.rc
on early-init
mkdir /firmware 0771 system system
symlink /data/tombstones /tombstones
mount debugfs debugfs /sys/kernel/debug
chown system system /sys/kernel/debug/kgsl/proc
on init
# See storage config details at http://source.android.com/tech/storage/
mkdir /mnt/shell/emulated 0700 shell shell
mkdir /storage/emulated 0555 root root
mkdir /oem 0550 root root
# Set permissions for persist partition
mkdir /persist 0771 system system
export EXTERNAL_STORAGE /storage/emulated/legacy
export EMULATED_STORAGE_SOURCE /mnt/shell/emulated
export EMULATED_STORAGE_TARGET /storage/emulated
# Support legacy paths
symlink /storage/emulated/legacy /sdcard
symlink /storage/emulated/legacy /mnt/sdcard
symlink /storage/emulated/legacy /storage/sdcard0
symlink /mnt/shell/emulated/0 /storage/emulated/legacy
on fs
mount_all fstab.shamu
setprop ro.crypto.fuse_sdcard true
# Keeping following partitions outside fstab file. As user may not have
# these partition flashed on the device. Failure to mount any partition in fstab file
# results in failure to launch late-start class.
wait /dev/block/platform/msm_sdcc.1/by-name/persist
mount ext4 /dev/block/platform/msm_sdcc.1/by-name/persist /persist nosuid nodev barrier=1
restorecon_recursive /persist
mkdir /persist/data 0700 system system
mkdir /persist/data/sfs 0700 system system
mkdir /persist/data/tz 0700 system system
mkdir /persist/public 0755 system radio
mkdir /persist/public/hiddenmenu 0775 system radio
mkdir /persist/public/hiddenmenu/data 0775 system radio
wait /dev/block/platform/msm_sdcc.1/by-name/oem
mount ext4 /dev/block/platform/msm_sdcc.1/by-name/oem /oem ro nosuid nodev context=u:object_r:oemfs:s0
mkdir /fsg 0755 root root
mount ext4 /dev/block/platform/msm_sdcc.1/by-name/mdm1m9kefs3 /fsg ro nosuid nodev barrier=0 context=u:object_r:fsg_file:s0
# Enable rmnet data and aggregation
setprop persist.rmnet.mux enabled
setprop persist.rmnet.data.enable true
setprop persist.data.wda.enable true
setprop persist.data.df.agg.dl_pkt 10
setprop persist.data.df.agg.dl_size 4096
on post-fs-data
mkdir /data/tombstones 0771 system system
mkdir /tombstones/modem 0771 system system
mkdir /tombstones/lpass 0771 system system
mkdir /tombstones/wcnss 0771 system system
mkdir /tombstones/dsps 0771 system system
# SENSORS
#Create directory used by sensor subsystem(dsps)
mkdir /data/system/sensors
chmod 0775 /data/system/sensors
# AKM setting data
mkdir /data/misc/sensors
chmod 0775 /data/misc/sensors
mkdir /persist/sensors
chmod 0775 /persist/sensors
mkdir /persist/mdm 0770 radio radio
#Subsystem RAM-dumps
mkdir /data/ss-ram-dumps 0750 radio log
mkdir /data/ss-ram-dumps/bp-dumps 0750 radio log
# rild files
mkdir /data/misc/audio_cutback 0770 radio audio
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/kernel/boot_adsp/boot 1
# Subsytem Restart
#venus
write /sys/bus/msm_subsys/devices/subsys0/restart_level "related"
write /sys/bus/msm_subsys/devices/subsys0/recovery_policy "skip_restart"
#adsp
write /sys/bus/msm_subsys/devices/subsys1/restart_level "related"
write /sys/bus/msm_subsys/devices/subsys1/recovery_policy "skip_restart"
#vpu
write /sys/bus/msm_subsys/devices/subsys2/restart_level "related"
write /sys/bus/msm_subsys/devices/subsys2/recovery_policy "skip_restart"
#esoc0 (mdm)
write /sys/bus/msm_subsys/devices/subsys3/restart_level "related"
write /sys/bus/msm_subsys/devices/subsys3/recovery_policy "skip_restart"
on boot
insmod /system/lib/modules/adsprpc.ko
insmod /system/lib/modules/mhi.ko
chown bluetooth net_bt_stack /sys/module/bluetooth_power/parameters/power
chown bluetooth net_bt_stack /sys/class/rfkill/rfkill0/type
chown bluetooth net_bt_stack /sys/class/rfkill/rfkill0/state
chown bluetooth net_bt_stack /proc/bluetooth/sleep/proto
chown bluetooth net_bt_stack /proc/bluetooth/sleep/lpm
chown bluetooth net_bt_stack /proc/bluetooth/sleep/btwrite
chown bluetooth net_bt_stack /sys/module/hci_uart/parameters/ath_lpm
chown bluetooth net_bt_stack /sys/module/hci_uart/parameters/ath_btwrite
chown system system /sys/module/sco/parameters/disable_esco
chown bluetooth net_bt_stack /sys/module/hci_smd/parameters/hcismd_set
chmod 0660 /sys/module/bluetooth_power/parameters/power
chmod 0660 /sys/module/hci_smd/parameters/hcismd_set
chmod 0660 /sys/class/rfkill/rfkill0/state
chmod 0660 /proc/bluetooth/sleep/proto
chown bluetooth net_bt_stack /dev/ttyHS0
chmod 0660 /sys/module/hci_uart/parameters/ath_lpm
chmod 0660 /sys/module/hci_uart/parameters/ath_btwrite
chmod 0660 /dev/ttyHS0
chown bluetooth net_bt_stack /sys/devices/platform/msm_serial_hs.0/clock
chmod 0660 /sys/devices/platform/msm_serial_hs.0/clock
chmod 0660 /dev/ttyHS2
chown bluetooth net_bt_stack /dev/ttyHS2
#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
mkdir /dev/socket/mpdecision 2775 root system
chmod 2775 /dev/socket/mpdecision
setprop wifi.interface wlan0
#readable symlinks for video nodes
mkdir /dev/video
symlink /dev/video32 /dev/video/venus_dec
symlink /dev/video33 /dev/video/venus_enc
setprop ro.telephony.call_ring.multiple false
chown system system /sys/bus/i2c/devices/1-004a/tsp
chmod 0444 /sys/devices/platform/msm_hsusb/gadget/usb_state
# Allow QMUX daemon to assign port open wait time
chown radio radio /sys/devices/virtual/hsicctl/hsicctl0/modem_wait
#port-bridge
chmod 0660 /dev/smd0
chown system system /dev/smd0
#BT DUN port-bridge
chmod 0660 /dev/smd7
chown bluetooth net_bt_stack /dev/smd7
#For bridgemgr daemon to inform the USB driver of the correct transport
chown radio radio /sys/class/android_usb/f_rmnet_smd_sdio/transport
# 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
#To allow interfaces to get v6 address when tethering is enabled
write /proc/sys/net/ipv6/conf/rmnet0/accept_ra 2
write /proc/sys/net/ipv6/conf/rmnet1/accept_ra 2
write /proc/sys/net/ipv6/conf/rmnet2/accept_ra 2
write /proc/sys/net/ipv6/conf/rmnet3/accept_ra 2
write /proc/sys/net/ipv6/conf/rmnet4/accept_ra 2
write /proc/sys/net/ipv6/conf/rmnet5/accept_ra 2
write /proc/sys/net/ipv6/conf/rmnet6/accept_ra 2
write /proc/sys/net/ipv6/conf/rmnet7/accept_ra 2
write /proc/sys/net/ipv6/conf/rmnet_sdio0/accept_ra 2
write /proc/sys/net/ipv6/conf/rmnet_sdio1/accept_ra 2
write /proc/sys/net/ipv6/conf/rmnet_sdio2/accept_ra 2
write /proc/sys/net/ipv6/conf/rmnet_sdio3/accept_ra 2
write /proc/sys/net/ipv6/conf/rmnet_sdio4/accept_ra 2
write /proc/sys/net/ipv6/conf/rmnet_sdio5/accept_ra 2
write /proc/sys/net/ipv6/conf/rmnet_sdio6/accept_ra 2
write /proc/sys/net/ipv6/conf/rmnet_sdio7/accept_ra 2
write /proc/sys/net/ipv6/conf/rmnet_usb0/accept_ra 2
write /proc/sys/net/ipv6/conf/rmnet_usb1/accept_ra 2
write /proc/sys/net/ipv6/conf/rmnet_usb2/accept_ra 2
write /proc/sys/net/ipv6/conf/rmnet_usb3/accept_ra 2
# To prevent out of order acknowledgements from making
# connection tracking to treat them as not belonging to
# the connection they belong to.
# Otherwise, a weird issue happens in which some long
# connections on high-throughput links get dropped when
# an ack packet comes out of order
write /proc/sys/net/netfilter/nf_conntrack_tcp_be_liberal 1
# Set the console loglevel to < KERN_INFO
# Set the default message loglevel to KERN_INFO
# write /proc/sys/kernel/printk "6 6 1 7"
write /sys/bus/platform/drivers/xhci_msm_hsic/unbind msm_hsic_host
write /sys/module/rmnet_usb/parameters/mux_enabled 1
write /sys/module/rmnet_usb/parameters/no_fwd_rmnet_links 8
write /sys/module/rmnet_usb/parameters/no_rmnet_insts_per_dev 17
write /sys/module/rmnet_usb/parameters/rmnet_data_init 1
chown radio radio /sys/devices/virtual/hsicctl/hsicctl0/modem_wait
# Audio DSP permissions
chown media media /dev/ttyHS3
chown media media /sys/devices/c55_ctrl/gpio_ap_int/edge
chown media media /sys/devices/c55_ctrl/gpio_ap_int/value
chown media media /sys/devices/c55_ctrl/gpio_c55_int/value
chown media media /sys/devices/c55_ctrl/gpio_core/value
chown media media /sys/devices/c55_ctrl/gpio_reset/value
# subsystem ramdump collection
on property:persist.sys.qc.sub.rdump.on=*
write /sys/module/subsystem_restart/parameters/enable_ramdumps ${persist.sys.qc.sub.rdump.on}
# permissions for CapSense firmware update
chown radio radio /sys/devices/cycapsense_prog.1/cycapsense_fw
chmod 0220 /sys/devices/cycapsense_prog.1/cycapsense_fw
# msm specific files that need to be created on /data
on post-fs-data
# we will remap this as /mnt/sdcard with the sdcard fuse tool
mkdir /data/media 0770 media_rw media_rw
chown media_rw media_rw /data/media
mkdir /data/misc/bluetooth 0770 bluetooth bluetooth
# Create the directories used by the Wireless subsystem
mkdir /data/misc/wifi 0770 wifi wifi
mkdir /data/misc/wifi/sockets 0770 wifi wifi
mkdir /data/misc/wifi/wpa_supplicant 0770 wifi wifi
mkdir /data/misc/dhcp 0770 dhcp dhcp
chown dhcp dhcp /data/misc/dhcp
# Create the directories used by CnE subsystem
mkdir /data/connectivity 0771 system system
chown system system /data/connectivity
mkdir /data/connectivity/nsrm 0771 system system
chown system system /data/connectivity/nsrm
# Create directory used by audio subsystem
mkdir /data/misc/audio 0770 audio audio
# 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
chmod 0771 /persist
chmod 0664 /sys/devices/platform/msm_sdcc.1/polling
chmod 0664 /sys/devices/platform/msm_sdcc.2/polling
chmod 0664 /sys/devices/platform/msm_sdcc.3/polling
chmod 0664 /sys/devices/platform/msm_sdcc.4/polling
# Chown polling nodes as needed from UI running on system server
chown system system /sys/devices/platform/msm_sdcc.1/polling
chown system system /sys/devices/platform/msm_sdcc.2/polling
chown system system /sys/devices/platform/msm_sdcc.3/polling
chown system system /sys/devices/platform/msm_sdcc.4/polling
#Create the symlink to qcn wpa_supplicant folder for ar6000 wpa_supplicant
mkdir /data/system 0775 system system
#symlink /data/misc/wifi/wpa_supplicant /data/system/wpa_supplicant
#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/quipc 0770 gps system
mkdir /data/misc/location/gsiff 0770 gps gps
#Create directory from IMS services
mkdir /data/shared 0755
chown system system /data/shared
#Create directory for FOTA
mkdir /data/fota 0771
chown system system /data/fota
#Create directory for hostapd
mkdir /data/hostapd 0770 system wifi
# Create /data/time folder for time-services
mkdir /data/time/ 0700 system system
mkdir /data/audio/ 0770 media audio
setprop vold.post_fs_data_done 1
#Create a folder for SRS to be able to create a usercfg file
mkdir /data/data/media 0770 media media
# NFC local data and nfcee xml storage
mkdir /data/nfc 0770 nfc nfc
mkdir /data/nfc/param 0770 nfc nfc
# Audio DSP permissions
mkdir /data/adspd 0770 media media
mkdir /data/adspd/1 0770 media media
on property:init.svc.wpa_supplicant=stopped
stop dhcpcd
on property:bluetooth.isEnabled=true
start btwlancoex
write /sys/class/bluetooth/hci0/idle_timeout 7000
on property:ro.bluetooth.ftm_enabled=true
start ftmd
on property:persist.env.fastdorm.enabled=true
setprop persist.radio.data_no_toggle 1
service irsc_util /system/bin/irsc_util "/etc/sec_config"
class main
user root
oneshot
service mdm_helper /system/bin/mdm_helper
user root
group root system radio
class core
onrestart setprop ro.service.mdm_helper_restarted "true"
service tcmd /system/bin/tcmd_mini
class core
user radio
group radio net_raw net_admin
disabled
service bridgemgrd /system/bin/bridgemgrd
class late_start
user radio
group radio
# QMUX must be in multiple groups to support external process connections
service qmuxd /system/bin/qmuxd
class main
user root
group radio audio bluetooth gps
service netmgrd /system/bin/netmgrd
class main
group radio
service sensors /system/bin/sensors.qcom
class core
user root
group root
on property:ro.use_data_netmgrd=false
# netmgr not supported on specific target
stop netmgrd
# Adjust socket buffer to enlarge TCP receive window for high bandwidth
# but only if ro.data.large_tcp_window_size property is set.
on property:ro.data.large_tcp_window_size=true
write /proc/sys/net/ipv4/tcp_adv_win_scale 2
service p2p_supplicant /system/bin/wpa_supplicant \
-iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf \
-I/system/etc/wifi/p2p_supplicant_overlay.conf \
-puse_p2p_group_interface=1p2p_device=1 \
-m/data/misc/wifi/p2p_supplicant.conf \
-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 wpa_supplicant /system/bin/wpa_supplicant \
-iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf \
-I/system/etc/wifi/wpa_supplicant_overlay.conf \
-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 dhcpcd_wlan0 /system/bin/dhcpcd -ABKLG
class late_start
disabled
oneshot
service dhcpcd_p2p /system/bin/dhcpcd -ABKLG
class late_start
disabled
oneshot
service iprenew_wlan0 /system/bin/dhcpcd -n
class late_start
disabled
oneshot
service iprenew_p2p /system/bin/dhcpcd -n
class late_start
disabled
oneshot
service dhcpcd_bt-pan /system/bin/dhcpcd -BKLG
class late_start
disabled
oneshot
service iprenew_bt-pan /system/bin/dhcpcd -n
class late_start
disabled
oneshot
service dhcpcd_bnep0 /system/bin/dhcpcd -BKLG
disabled
oneshot
service dhcpcd_bnep1 /system/bin/dhcpcd -BKLG
disabled
oneshot
service dhcpcd_bnep2 /system/bin/dhcpcd -BKLG
disabled
oneshot
service dhcpcd_bnep3 /system/bin/dhcpcd -BKLG
disabled
oneshot
service dhcpcd_bnep4 /system/bin/dhcpcd -BKLG
disabled
oneshot
service dhcpcd_eth0 /system/bin/dhcpcd -aABDKL
class late_start
disabled
oneshot
service iprenew_eth0 /system/bin/dhcpcd -n
class late_start
disabled
oneshot
service adspd /system/bin/adspd /dev/ttyHS3
class late_start
socket adspdsock stream 0660 media media
user media
group media input
#start GNSS/Sensor interface daemon
service gsiff_daemon /system/vendor/bin/gsiff_daemon
class late_start
user gps
group gps net_raw
on property:sys.boot_completed=1
start qcom-post-boot
on property:ro.debuggable=1
start ss_ramdump
on property:ro.data.large_tcp_window_size=true
# Adjust socket buffer to enlarge TCP receive window for high bandwidth (e.g. DO-RevB)
write /proc/sys/net/ipv4/tcp_adv_win_scale 2
# virtual sdcard daemon running as media_rw (1023)
service sdcard /system/bin/sdcard -u 1023 -g 1023 -l /data/media /mnt/shell/emulated
class late_start
on charger
write /sys/class/leds/lcd-backlight/brightness 100
mount ext4 /dev/block/platform/msm_sdcc.1/by-name/system /system ro barrier=1
start thermal-engine
service charger /charger
class charger
group log
seclabel u:r:healthd:s0
# Allow usb charging to be disabled peristently
on property:persist.usb.chgdisabled=1
write /sys/class/power_supply/battery/charging_enabled 0
on property:persist.usb.chgdisabled=0
write /sys/class/power_supply/battery/charging_enabled 1
service qseecomd /system/bin/qseecomd
class core
user root
group root
service mpdecision /system/bin/mpdecision --avg_comp
class main
user root
service ss_ramdump /system/bin/subsystem_ramdump
class main
user root
group root
disabled
service thermal-engine /system/bin/thermal-engine
class main
user root
group root
service time_daemon /system/bin/time_daemon
class late_start
user root
group root
on property:init.svc.bootanim=stopped
start usf-post-boot
service qcamerasvr /system/bin/mm-qcamera-daemon
class late_start
user camera
group camera system inet input graphics
service bdAddrLoader /system/bin/bdAddrLoader -p ro.boot.btmacaddr -s -x
class main
user bluetooth
group system bluetooth
oneshot
on property:vold.decrypt=trigger_reset_main
stop gnss-svcd
# When QCA1530 is known not to present
on property:persist.qca1530=no
stop gnss-svcd
stop gnss-detect
write /sys/kernel/qca1530/chip_state 0
on property:init.svc.surfaceflinger=stopped
stop ppd
service mmi-touch-sh /system/bin/sh /init.mmi.touch.sh atmel
class main
user root
oneshot
# bugreport is triggered by holding down volume down, volume up and power
service bugreport /system/bin/dumpstate -d -p -B \
-o /data/data/com.android.shell/files/bugreports/bugreport
class main
disabled
oneshot
keycodes 114 115 116
service mdm_helper_proxy /system/bin/mdm_helper_proxy
class core
user system
group system
disabled
# Stop mdm_helper_proxy in case of shutdown
on property:sys.shutdown.requested=*
stop mdm_helper_proxy
# Start mdm_helper_proxy after RIL.
on property:ro.mdm_helper_proxy_req=true
start mdm_helper_proxy
on property:init.svc.ril-daemon=running
setprop ro.mdm_helper_proxy_req true