普通文本  |  1017行  |  36.03 KB

#
# Copyright (C) 2016 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 /vendor/etc/init/hw/init.${ro.boot.hardware.platform}.power.rc
import /vendor/etc/init/hw/init.${ro.boot.hardware.platform}.usb.rc
import /vendor/etc/init/hw/init.${ro.boot.hardware.platform}.diag.rc
import /vendor/etc/init/hw/init.${ro.boot.hardware.platform}.logging.rc
import /vendor/etc/init/hw/init.${ro.boot.hardware.platform}.mpssrfs.rc


on property:init.svc.vendor.charger=running
    # keep one LITTLE and one big
    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/cpu5/online 0
    write /sys/devices/system/cpu/cpu6/online 0
    write /sys/devices/system/cpu/cpu7/online 0
    # Enable UFS powersaving
    write /sys/devices/platform/soc/${ro.boot.bootdevice}/clkgate_enable 1
    write /sys/devices/platform/soc/${ro.boot.bootdevice}/hibern8_on_idle_enable 1
    write /sys/class/typec/port0/port_type sink
    write /sys/module/lpm_levels/parameters/sleep_disabled 0
    # Disable sched_boost
    write /proc/sys/kernel/sched_boost 0
    # Enable thermal mitigation
    write /sys/devices/virtual/thermal/tz-by-name/backup-charge/mode enabled
    # Ensure 100% reporting is sticky
    write /sys/class/power_supply/maxfg/offmode_charger 1

service vendor.charger /charger
    class charger
    seclabel u:r:charger:s0
    user system
    group system wakelock input
    capabilities SYS_BOOT
    file /dev/kmsg w
    file /sys/fs/pstore/console-ramoops-0 r
    file /sys/fs/pstore/console-ramoops r
    file /proc/last_kmsg r

on early-init
    mount debugfs debugfs /sys/kernel/debug
    chmod 0755 /sys/kernel/debug
    # Enable sched_boost
    write /proc/sys/kernel/sched_boost 1
    mount_all /vendor/etc/fstab.persist --early

# Skip init trigger for charger mode
on early-init && property:ro.boot.mode=charger
    setprop vendor.skip.init 1

# We need vold early for metadata encryption
on early-fs
    start vold

on init && property:vendor.skip.init=0
    start logd

    # QSEE rpmb listener need symlink for bootdevice
    wait /dev/block/platform/soc/${ro.boot.bootdevice}
    symlink /dev/block/platform/soc/${ro.boot.bootdevice} /dev/block/bootdevice

    # start qseecomd early as we mount system/ vendor/ early
    # vold needs keymaster that needs qseecomd
    start vendor.qseecomd
    start keymaster-4-0

    # start Citadel keymaster (StrongBox) early
    start vendor.citadeld
    start vendor.keymaster-4-0-citadel

    # Boot time fs tune
    write /sys/block/sda/queue/iostats 0
    write /sys/block/sda/queue/scheduler cfq
    write /sys/block/sda/queue/iosched/slice_idle 0
    write /sys/block/sda/queue/read_ahead_kb 2048
    write /sys/block/sda/queue/nr_requests 256
    write /sys/block/sdf/queue/iostats 0
    write /sys/block/sdf/queue/scheduler cfq
    write /sys/block/sdf/queue/iosched/slice_idle 0
    write /sys/block/sdf/queue/read_ahead_kb 2048
    write /sys/block/sdf/queue/nr_requests 256
    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
    write /sys/block/dm-3/queue/read_ahead_kb 2048
    write /sys/block/dm-4/queue/read_ahead_kb 2048
    write /sys/block/dm-5/queue/read_ahead_kb 2048

    # Disable UFS powersaving
    write /sys/devices/platform/soc/${ro.boot.bootdevice}/clkgate_enable 0
    write /sys/devices/platform/soc/${ro.boot.bootdevice}/hibern8_on_idle_enable 0

    # Disable powersaving
    write /sys/module/lpm_levels/parameters/sleep_disabled 1

    # Loading kernel modules in background
    start insmod_sh

    # Support legacy paths
    symlink /sdcard /mnt/sdcard
    symlink /sdcard /storage/sdcard0

    # bring back all cores
    write /sys/devices/system/cpu/cpu0/online 1
    write /sys/devices/system/cpu/cpu1/online 1
    write /sys/devices/system/cpu/cpu2/online 1
    write /sys/devices/system/cpu/cpu3/online 1
    write /sys/devices/system/cpu/cpu4/online 1
    write /sys/devices/system/cpu/cpu5/online 1
    write /sys/devices/system/cpu/cpu6/online 1
    write /sys/devices/system/cpu/cpu7/online 1

    # configure governor settings for little cluster
    write /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor schedutil
    write /sys/devices/system/cpu/cpu0/cpufreq/schedutil/up_rate_limit_us 500
    write /sys/devices/system/cpu/cpu0/cpufreq/schedutil/down_rate_limit_us 20000

    # configure governor settings for big cluster
    write /sys/devices/system/cpu/cpu4/cpufreq/scaling_governor schedutil
    write /sys/devices/system/cpu/cpu4/cpufreq/schedutil/up_rate_limit_us 500
    write /sys/devices/system/cpu/cpu4/cpufreq/schedutil/down_rate_limit_us 20000

    # set default schedTune value for foreground/top-app
    write /dev/stune/foreground/schedtune.prefer_idle 1
    write /dev/stune/top-app/schedtune.boost 10
    write /dev/stune/top-app/schedtune.prefer_idle 1

    # Setup cpusets used by the VR services.
    mkdir /dev/cpuset/kernel 0750 root system
    write /dev/cpuset/kernel/cpus 0
    write /dev/cpuset/kernel/mems 0
    chown system system /dev/cpuset/kernel/tasks
    chown system system /dev/cpuset/kernel/cpus
    chmod 0660 /dev/cpuset/kernel/tasks
    chmod 0660 /dev/cpuset/kernel/cpus

    mkdir /dev/cpuset/camera-daemon
    write /dev/cpuset/camera-daemon/cpus 0-7
    write /dev/cpuset/camera-daemon/mems 0
    chown system system /dev/cpuset/camera-daemon
    chown system system /dev/cpuset/camera-daemon/tasks
    chmod 0664 /dev/cpuset/camera-daemon/tasks

    mkdir /dev/cpuset/system 0750 root system
    write /dev/cpuset/system/cpus 0
    write /dev/cpuset/system/mems 0
    chown system system /dev/cpuset/system/tasks
    chmod 0660 /dev/cpuset/system/tasks

    mkdir /dev/cpuset/system/performance 0750 root system
    write /dev/cpuset/system/performance/cpus 0
    write /dev/cpuset/system/performance/mems 0
    chown system system /dev/cpuset/system/performance/tasks
    chmod 0660 /dev/cpuset/system/performance/tasks

    mkdir /dev/cpuset/system/background 0750 root system
    write /dev/cpuset/system/background/cpus 0
    write /dev/cpuset/system/background/mems 0
    chown system system /dev/cpuset/system/background/tasks
    chmod 0660 /dev/cpuset/system/background/tasks

    mkdir /dev/cpuset/application 0750 root system
    write /dev/cpuset/application/cpus 0
    write /dev/cpuset/application/mems 0
    chown system system /dev/cpuset/application/tasks
    chmod 0660 /dev/cpuset/application/tasks

    mkdir /dev/cpuset/application/performance 0750 root system
    write /dev/cpuset/application/performance/cpus 0
    write /dev/cpuset/application/performance/mems 0
    chown system system /dev/cpuset/application/performance/tasks
    chmod 0660 /dev/cpuset/application/performance/tasks

    mkdir /dev/cpuset/application/background 0750 root system
    write /dev/cpuset/application/background/cpus 0
    write /dev/cpuset/application/background/mems 0
    chown system system /dev/cpuset/application/background/tasks
    chmod 0660 /dev/cpuset/application/background/tasks

    # Create UDS structure for base VR services.
    mkdir /dev/socket/pdx 0775 system system
    mkdir /dev/socket/pdx/system 0775 system system
    mkdir /dev/socket/pdx/system/buffer_hub 0775 system system
    mkdir /dev/socket/pdx/system/performance 0775 system system
    mkdir /dev/socket/pdx/system/vr 0775 system system
    mkdir /dev/socket/pdx/system/vr/display 0775 system system
    mkdir /dev/socket/pdx/system/vr/pose 0775 system system
    mkdir /dev/socket/pdx/system/vr/sensors 0775 system system

    # b/37682684 Enable suspend clock reporting
    write /sys/kernel/debug/clk/debug_suspend 1

    # ZRAM setup
    write /sys/block/zram0/comp_algorithm lz4
    write /proc/sys/vm/page-cluster 0

    # Some user code relies on ro.boot.hardware.revision
    setprop ro.boot.hardware.revision ${ro.revision}

    # Allow PAI targeting per hardware SKU
    setprop ro.oem.key1 ${ro.boot.hardware.sku}

    # Property used by vintf for sku specific manifests
    setprop ro.boot.product.hardware.sku ${ro.boot.hardware.sku}

    # Property used by pointing to thermal-engine config file
    setprop vendor.thermal.vr_mode -novr
    setprop vendor.thermal.hw_mode -prod
    setprop vendor.thermal.config "thermal_info_config.json"

on late-init
    write /sys/devices/virtual/thermal/tz-by-name/fps-therm-adc/mode enabled
    chown system system /sys/devices/virtual/thermal/tz-by-name/fps-therm-monitor/trip_point_0_temp
    chown system system /sys/devices/virtual/thermal/tz-by-name/fps-therm-monitor/trip_point_0_hyst
    chown system system /sys/devices/virtual/thermal/tz-by-name/usbc-therm-monitor/trip_point_0_temp
    chown system system /sys/devices/virtual/thermal/tz-by-name/usbc-therm-monitor/trip_point_0_hyst

on fs
    mount_all /vendor/etc/fstab.${ro.boot.hardware.platform} --early

    mkdir /persist/data 0700 system system
    mkdir /persist/display 0770 system graphics
    mkdir /persist/rfs 0770 root system
    mkdir /persist/hlos_rfs 0770 root system
    chmod 0770 /persist/rfs
    chmod 0770 /persist/rfs/shared
    chmod 0770 /persist/rfs/msm
    chmod 0770 /persist/rfs/msm/adsp
    chmod 0770 /persist/rfs/msm/mpss
    chmod 0770 /persist/rfs/msm/slpi
    chmod 0770 /persist/rfs/mdm
    chmod 0770 /persist/rfs/mdm/adsp
    chmod 0770 /persist/rfs/mdm/mpss
    chmod 0770 /persist/rfs/mdm/slpi
    chmod 0770 /persist/rfs/mdm/tn
    chmod 0770 /persist/rfs/apq
    chmod 0770 /persist/rfs/apq/gnss
    chmod 0770 /persist/hlos_rfs
    # for cycle count backup
    mkdir /persist/battery 0700 system system
    restorecon_recursive /mnt/vendor/persist

on late-fs
    # Start devices by sysfs trigger, including SLPI. SLPI waits for sscrpcd to
    # read /persist, so to prevent SLPI startup delays, start both here.
    start devstart_sh
    start vendor.sscrpcd

    # Start services for bootanim
    start surfaceflinger
    start bootanim
    start vendor.hwcomposer-2-3
    start vendor.configstore-hal
    start vendor.qti.hardware.display.allocator
    start vendor.light-1-0

    # Wait for hwservicemanager ready since fsck might be triggered in mount_all --late
    # In such case, init won't responce the property_set from hwservicemanager and then
    # cause services for bootanim not running.
    wait_for_prop hwservicemanager.ready true

    # Wait for keymaster HALs (TEE and StrongBox)
    exec_start wait_for_strongbox

    # Mount RW partitions which need run fsck
    mount_all /vendor/etc/fstab.${ro.boot.hardware.platform} --late
    # Boot time fs tune
    write /sys/block/dm-3/queue/read_ahead_kb 2048
    write /sys/block/dm-4/queue/read_ahead_kb 2048
    write /sys/block/dm-6/queue/read_ahead_kb 2048

    # Required for time_daemon
    mkdir /persist/time 0770 system system

    # Start time daemon early so that the system time can be set early
    start time_daemon

on post-fs
    # Disable sched autogroup
    write /proc/sys/kernel/sched_autogroup_enabled 0

    # set RLIMIT_MEMLOCK to 64MB
    setrlimit 8 67108864 67108864

    chmod 0664 /sys/devices/virtual/graphics/fb0/idle_time
    chown system graphics /sys/devices/virtual/graphics/fb0/idle_time
    write /sys/devices/virtual/graphics/fb0/idle_time 100

    # turn off vblank irq immediately after turning off
    write /sys/module/drm/parameters/vblankoffdelay -1

on post-fs-data
    # We can start netd here before in is launched in common init.rc on zygote-start
    start netd

    # b/38048356 Setup debug folders for camera
    mkdir /data/vendor/camera 0770 camera camera

    # b/38496103 Setup debug folders for display
    mkdir /data/vendor/display 0770 system graphics

    # Setup folder for modem fdr
    mkdir /data/vendor/modem_fdr 0700 root system

    # keep that at the end of on post-fs-data
    # Set indication (checked by vold) that we have finished this action
    setprop vold.post_fs_data_done 1

    # Wait until the system time is set
    wait_for_prop vendor.qcom.time.set true

    # Wait qseecomd started
    wait_for_prop vendor.sys.listeners.registered true

    # load IPA FWs
    # This must be started when vendor.sys.listeners.registered is true
    start ipastart_sh

    mkdir /data/vendor/nnhal 0700 system system

# zygote need to be started after otapreopt which will be done on post-fs-data
on zygote-start
    # zygote is started in common init.rc
    # and now we can continue initialize /data/
    mkdir /data/vendor/ipa 0770 radio radio
    chown radio radio /data/vendor/ipa

    # Create the directories used by the Wireless subsystem
    mkdir /data/vendor/wifi 0771 wifi wifi
    mkdir /data/vendor/wifi/wpa 0770 wifi wifi
    mkdir /data/vendor/wifi/wpa/sockets 0770 wifi wifi

    chown system system /persist/WCNSS_qcom_wlan_nv.bin

    # Trigger WLAN driver load
    write /sys/kernel/boot_wlan/boot_wlan 1

    #create netmgr log dir
    mkdir /data/vendor/netmgr 0771 radio radio
    chmod 0771 /data/vendor/netmgr

    # Create netmgr recovery folder
    mkdir /data/vendor/netmgr/recovery 0700 radio radio
    chmod 0770 /data/vendor/netmgr/recovery
    write /data/vendor/netmgr/recovery/recovery_info ""
    chown radio radio /data/vendor/netmgr/recovery/recovery_info

    # Create directory used by audio subsystem
    mkdir /data/vendor/audio 0770 audio audio

    # Create directory for audio delta files
    mkdir /data/vendor/audio/acdbdata 0770 media audio
    mkdir /data/vendor/audio/acdbdata/delta 0770 media audio

    # Create directory for radio
    mkdir /data/vendor/radio 0773 system radio
    mkdir /data/vendor/modem_stat 0771 system radio
    write /data/vendor/modem_stat/debug.txt ""
    chown system radio /data/vendor/modem_stat/debug.txt
    chmod 0664 /data/vendor/modem_stat/debug.txt

    # Set up sensors-related directories and permissions
    chmod 775 /persist/sensors
    chmod 664 /persist/sensors/sensors_settings
    chown root system /persist/sensors/registry
    chmod 775 /persist/sensors/registry
    chown root system /persist/sensors/registry/registry
    chmod 775 /persist/sensors/registry/registry

    chown system root /persist/sensors/sensors_settings
    chown root root /persist/sensors/registry/registry/sensors_settings

    mkdir /data/vendor/sensors 0770
    chown system system /data/vendor/sensors

    chmod 770 /persist/audio
    chmod 660 /persist/audio/audio.cal
    chown media audio /persist/audio
    chown audioserver audio /persist/audio/audio.cal

    chmod 770 /persist/haptics
    chmod 440 /persist/haptics/cs40l20.cal
    chown system system /persist/haptics
    chown system system /persist/haptics/cs40l20.cal

    # Mark the copy complete flag to not completed
    write /data/vendor/radio/copy_complete 0
    chown radio radio /data/vendor/radio/copy_complete
    chmod 0660 /data/vendor/radio/copy_complete

    # File flags for prebuilt ril db file
    write /data/vendor/radio/prebuilt_db_support 1
    chown radio radio /data/vendor/radio/prebuilt_db_support
    chmod 0400 /data/vendor/radio/prebuilt_db_support
    write /data/vendor/radio/db_check_done 0
    chown radio radio /data/vendor/radio/db_check_done
    chmod 0660 /data/vendor/radio/db_check_done

    # Create directories for Location services
    mkdir /data/vendor/location 0770 gps gps
    mkdir /data/vendor/location/mq 0770 gps gps
    mkdir /data/vendor/location/xtwifi 0770 gps gps
    mkdir /dev/socket/location 0770 gps gps
    mkdir /dev/socket/location/mq 0770 gps gps
    mkdir /dev/socket/location/xtra 0770 gps gps

    # NFC local data and nfcee xml storage
    mkdir /data/vendor/nfc 0770 nfc nfc

    # Secure Element directory for loader service functionality
    mkdir /data/vendor/secure_element 0770 secure_element secure_element

on early-boot
    # wait for devices
    wait_for_prop vendor.qcom.devup 1

    # wait for insmod_sh to finish all modules
    wait_for_prop vendor.all.modules.ready 1

    write /sys/kernel/boot_adsp/boot 1
    write /sys/kernel/boot_cdsp/boot 1

    # Update dm-verity state and set partition.*.verified properties
    verity_update_state

    # Permission for rainbow sensor
    chown cameraserver camera /sys/devices/platform/soc/ac4a000.qcom,cci/ac4a000.qcom,cci:qcom,rainbow@20/rainbow_enable
    chmod 0660 /sys/devices/platform/soc/ac4a000.qcom,cci/ac4a000.qcom,cci:qcom,rainbow@20/rainbow_enable
    chown cameraserver camera /sys/devices/platform/soc/ac4a000.qcom,cci/ac4a000.qcom,cci:qcom,rainbow@20/rainbow_read_byte
    chmod 0660 /sys/devices/platform/soc/ac4a000.qcom,cci/ac4a000.qcom,cci:qcom,rainbow@20/rainbow_read_byte
    chown cameraserver camera /sys/devices/platform/soc/ac4a000.qcom,cci/ac4a000.qcom,cci:qcom,rainbow@20/rainbow_write_byte
    chmod 0660 /sys/devices/platform/soc/ac4a000.qcom,cci/ac4a000.qcom,cci:qcom,rainbow@20/rainbow_write_byte
    chown cameraserver camera /dev/vd6281
    chmod 0660 /dev/vd6281

    # Permission for Vibrator
    chown system system /sys/class/leds/vibrator/device/comp_enable
    chown system system /sys/class/leds/vibrator/device/cp_dig_scale
    chown system system /sys/class/leds/vibrator/device/cp_trigger_index
    chown system system /sys/class/leds/vibrator/device/cp_trigger_queue
    chown system system /sys/class/leds/vibrator/device/dig_scale
    chown system system /sys/class/leds/vibrator/device/f0_stored
    chown system system /sys/class/leds/vibrator/device/heartbeat
    chown system system /sys/class/leds/vibrator/device/num_waves
    chown system system /sys/class/leds/vibrator/device/redc_stored
    chown system system /sys/class/leds/vibrator/device/standby_timeout

    # Permission for LED driver
    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
    chown system system /sys/class/leds/green/rgb_start
    chown system system /sys/class/leds/blue/rgb_start
    chown system system /sys/class/backlight/panel0-backlight/brightness
    chown system system /sys/class/backlight/panel0-backlight/vr_mode
    chown system system /sys/class/backlight/panel0-backlight/hbm_mode

    # Permission for Wireless charger
    chown system system /sys/devices/platform/soc/a88000.i2c/i2c-0/0-0061/rxdata
    chown system system /sys/devices/platform/soc/a88000.i2c/i2c-0/0-0061/txdata
    chown system system /sys/devices/platform/soc/a88000.i2c/i2c-0/0-0061/txlen
    chown system system /sys/devices/platform/soc/a88000.i2c/i2c-0/0-0061/ccreset
    chown system system /sys/devices/platform/soc/a88000.i2c/i2c-0/0-0061/status
    chown system system /sys/devices/platform/soc/a88000.i2c/i2c-0/0-0061/version
    chown system system /sys/class/power_supply/wireless/capacity

    # FG cycle counts read from dumpstate + backup restore from health HAL
    chown system system /sys/devices/platform/soc/c440000.qcom,spmi/spmi-0/spmi0-02/c440000.qcom,spmi:qcom,pmi8998@2:qpnp,fg/cycle_counts_bins
    chown system system /sys/devices/platform/soc/a90000.i2c/i2c-4/4-0036/power_supply/maxfg/cycle_counts_bins

    # HardwareInfo needs to be able to read CC bins
    chmod 644 /sys/devices/platform/soc/c440000.qcom,spmi/spmi-0/spmi0-02/c440000.qcom,spmi:qcom,pmi8998@2:qpnp,fg/cycle_counts_bins
    chmod 644 /sys/devices/platform/soc/a90000.i2c/i2c-4/4-0036/power_supply/maxfg/cycle_counts_bins

    # Permission for Pixelstats
    chown system system /sys/class/misc/msm_cirrus_playback/resistance_left_right
    chown system system /sys/devices/platform/soc/1d84000.ufshc/slowio_read_cnt
    chown system system /sys/devices/platform/soc/1d84000.ufshc/slowio_write_cnt
    chown system system /sys/devices/platform/soc/1d84000.ufshc/slowio_unmap_cnt
    chown system system /sys/devices/platform/soc/1d84000.ufshc/slowio_sync_cnt
    chown system system /sys/devices/platform/soc/soc:qcom,wcd-dsp-mgr/wdsp_stat


    # Permission for Health Storage HAL
    chown system system /sys/devices/platform/soc/1d84000.ufshc/manual_gc

on boot
    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

    # Create NETMGR daemon socket area
    mkdir /dev/socket/netmgr 0750 radio radio

    setprop wifi.interface wlan0

    # 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

    # Update DVR cpusets to boot-time values.
    write /dev/cpuset/kernel/cpus 0-7
    write /dev/cpuset/system/cpus 0-7
    write /dev/cpuset/system/performance/cpus 0-7
    write /dev/cpuset/system/background/cpus 0-7
    write /dev/cpuset/system/cpus 0-7
    write /dev/cpuset/application/cpus 0-7
    write /dev/cpuset/application/performance/cpus 0-7
    write /dev/cpuset/application/background/cpus 0-7
    write /dev/cpuset/application/cpus 0-7

    # 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 /sys/class/rfkill/rfkill0/device/extldo
    chmod 0660 /sys/class/rfkill/rfkill0/device/extldo

    # Wifi firmware reload path
    chown wifi wifi /sys/module/wlan/parameters/fwpath

    # default country code
    setprop ro.boot.wificountrycode 00

    # WLAN debug access
    chown system system /d/icnss/stats

service init-radio-sh /vendor/bin/init.radio.sh
    class late_start
    user radio
    group root radio
    oneshot

# reset thermal-engine when changed profile
on property:vendor.thermal.vr_mode=*
    restart vendor.thermal-engine

service vendor.thermal-engine /vendor/bin/thermal-engine -c /vendor/etc/thermal-engine-${ro.hardware}${vendor.thermal.vr_mode}${vendor.thermal.hw_mode}.conf
   class main
   user root
   group root system
   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

on property:persist.vendor.sys.ssr.restart_level=*
    start vendor.ssr_setup

service vendor.ssr_setup /vendor/bin/ssr_setup
    oneshot
    disabled

service vendor.ssr_diag /vendor/bin/ssr_diag
    class late_start
    user system
    group system
    disabled

service vendor.per_mgr /vendor/bin/pm-service
    class core
    user system
    group system
    ioprio rt 4

service per_proxy /vendor/bin/pm-proxy
    class core
    user system
    group system
    disabled

on property:sys.boot_completed=1
    # Set the default IRQ affinity to the silver cluster.
    write /proc/irq/default_smp_affinity f

    # Enable UFS powersaving
    write /sys/devices/platform/soc/${ro.boot.bootdevice}/clkgate_enable 1
    write /sys/devices/platform/soc/${ro.boot.bootdevice}/hibern8_on_idle_enable 1

    # Enable ZRAM on boot_complete
    swapon_all /vendor/etc/fstab.${ro.boot.hardware.platform}
    write /proc/sys/vm/swappiness 100

    # Setup final blkio
    # value for group_idle is us
    write /dev/blkio/blkio.weight 1000
    write /dev/blkio/background/blkio.weight 10
    write /dev/blkio/blkio.group_idle 2000
    write /dev/blkio/background/blkio.group_idle 0

    # Setup final cpuset
    write /dev/cpuset/top-app/cpus 0-7
    write /dev/cpuset/foreground/boost/cpus 0-3,6-7
    write /dev/cpuset/foreground/cpus 0-3,6-7
    write /dev/cpuset/background/cpus 0-1
    write /dev/cpuset/system-background/cpus 0-3
    write /dev/cpuset/restricted/cpus 0-3

    # Update DVR cpusets to runtime values.
    # Kernel cpuset will be apply on PowerHAL
    write /dev/cpuset/system/performance/cpus 6-7
    write /dev/cpuset/system/background/cpus 0-1
    write /dev/cpuset/system/cpus 0-1,6-7
    write /dev/cpuset/application/performance/cpus 4-5
    write /dev/cpuset/application/background/cpus 0-1
    write /dev/cpuset/application/cpus 0-1,4-5

    # Runtime fs tuning: as we have init boottime setting and kernel patch setting
    # default readahead to 2048KB. We should adjust the setting upon boot_complete
    # for runtime performance
    write /sys/block/sda/queue/read_ahead_kb 128
    write /sys/block/sda/queue/nr_requests 128
    write /sys/block/sda/queue/iostats 1
    write /sys/block/sdf/queue/read_ahead_kb 128
    write /sys/block/sdf/queue/nr_requests 128
    write /sys/block/sdf/queue/iostats 1
    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/dm-3/queue/read_ahead_kb 128
    write /sys/block/dm-4/queue/read_ahead_kb 128
    write /sys/block/dm-5/queue/read_ahead_kb 128
    write /sys/block/dm-6/queue/read_ahead_kb 128

    # QCOM FG SRAM dump for dumpstate
    chown system system /d/fg/sram/data
    chown system system /d/fg/sram/count
    chown system system /d/fg/sram/address

    # Maxim FG dump for dumpstate
    chown system system /d/regmap/4-0036/registers
    chown system system /d/regmap/4-000b/registers

    # UFS health
    chmod 755 /sys/kernel/debug/ufshcd0
    chmod 644 /sys/kernel/debug/ufshcd0/show_hba
    chmod 644 /sys/kernel/debug/ufshcd0/stats/err_stats
    chmod 644 /sys/kernel/debug/ufshcd0/stats/io_stats
    chmod 644 /sys/kernel/debug/ufshcd0/stats/req_stats

    # Disable sched_boost
    write /proc/sys/kernel/sched_boost 0

    # Enable PowerHAL hint processing
    setprop vendor.powerhal.init 1

    start per_proxy

    # Create pixel-trace.
    # At this moment, only mm_event is available. If others want to put more,
    # it should get hard review from pixel-perf-team.
    mkdir /sys/kernel/debug/tracing/instances/pixel-trace 0755 system system
    chown system system /sys/kernel/debug/tracing/instances/pixel-trace/trace
    chmod 0660 /sys/kernel/debug/tracing/instances/pixel-trace/trace
    chown system system /sys/kernel/debug/tracing/instances/pixel-trace/tracing_on
    chmod 0660 /sys/kernel/debug/tracing/instances/pixel-trace/tracing_on
    write /sys/kernel/debug/tracing/instances/pixel-trace/buffer_size_kb 64
    write /sys/kernel/debug/tracing/instances/pixel-trace/events/mm_event/enable 1

on property:sys.shutdown.requested=*
    stop per_proxy

service vendor.qseecomd /vendor/bin/qseecomd
   class core
   user root
   group root

service time_daemon /vendor/bin/time_daemon
   class core
   user root
   group root

service ss_ramdump /vendor/bin/subsystem_ramdump
    class main
    user root
    group system
    disabled

on property:persist.vendor.sys.ssr.enable_ramdumps=1
    write /sys/module/subsystem_restart/parameters/enable_ramdumps 1
    mkdir /data/vendor/wifidump 771 root system
    mkdir /data/vendor/ramdump 771 root system
    mkdir /data/vendor/ssrdump 771 root system
    mkdir /data/vendor/ssrlog  771 root system
    start ss_ramdump

on property:persist.vendor.sys.ssr.enable_ramdumps=0
    write /sys/module/subsystem_restart/parameters/enable_ramdumps 0

service sensors.qti /vendor/bin/sensors.qti
    class core
    user system
    group system
    # Grants the ability for this daemon to bind IPC router ports so it can
    # register QMI services
    capabilities NET_BIND_SERVICE

service vendor.sscrpcd  /vendor/bin/sscrpcd
    class core
    user system
    group system

service adsprpcd /vendor/bin/adsprpcd
   class main
   user media
   group media

service cdsprpcd /vendor/bin/cdsprpcd
   class main
   user system
   group system

service irsc_util /vendor/bin/irsc_util "/vendor/etc/sec_config"
    class core
    user root
    oneshot

service rmt_storage /vendor/bin/rmt_storage
    class core
    user root
    ioprio rt 0
    shutdown critical

service tftp_server /vendor/bin/tftp_server
   class core
   user root
   group root system

service modem_svc /vendor/bin/modem_svc -q
   class core
   user root
   group system
   capabilities NET_BIND_SERVICE

service wpa_supplicant /vendor/bin/hw/wpa_supplicant \
    -O/data/vendor/wifi/wpa/sockets -puse_p2p_group_interface=1 -dd \
    -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
    interface android.hardware.wifi.supplicant@1.0::ISupplicant default
    interface android.hardware.wifi.supplicant@1.1::ISupplicant default
    interface android.hardware.wifi.supplicant@1.2::ISupplicant default
    class main
    socket wpa_wlan0 dgram 660 wifi wifi
    disabled
    oneshot

service cnss-daemon /vendor/bin/cnss-daemon -n -l
   class late_start
   user system
   group system inet wifi

service imsqmidaemon /vendor/bin/imsqmidaemon
   class main
   user system
   socket ims_qmid stream 0660 system radio
   group radio log diag

service imsdatadaemon /vendor/bin/imsdatadaemon
   class main
   user system
   socket ims_datad stream 0660 system radio
   group system wifi radio inet log
   disabled

on property:vendor.ims.QMI_DAEMON_STATUS=1
   start imsdatadaemon

service ims_rtp_daemon /vendor/bin/ims_rtp_daemon
   class main
   user system
   group radio diag inet log
   disabled

service imsrcsservice /vendor/bin/imsrcsd
   class main
   user system
   group radio diag inet log
   disabled

on property:vendor.ims.DATA_DAEMON_STATUS=1
   start ims_rtp_daemon
   start imsrcsservice

service cnd /vendor/bin/cnd
   class main
   user radio
   group system wifi inet radio wakelock

service netmgrd /vendor/bin/netmgrd
    class main
    user root
    group root wifi wakelock radio inet

service port-bridge /vendor/bin/port-bridge
    class main
    user radio
    group radio system inet
    oneshot

service ipacm /vendor/bin/ipacm
    class main
    user radio
    group radio inet

service loc_launcher /vendor/bin/loc_launcher
    class late_start
    group gps inet diag wifi

service pd_mapper /vendor/bin/pd-mapper
     class core

# turns off tracing right before bugreporting to keep more traces
on property:init.svc.dumpstatez=running
    write /d/tracing/instances/pixel-trace/tracing_on 0

on property:init.svc.dumpstatez=stopped
    write /d/tracing/instances/pixel-trace/tracing_on 1

on property:init.svc.bugreport=running
    write /d/tracing/instances/pixel-trace/tracing_on 0

on property:init.svc.bugreport=stopped
    write /d/tracing/instances/pixel-trace/tracing_on 1

# 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 vendor.chre /vendor/bin/chre
    class late_start
    user system
    group system wakelock
    capabilities BLOCK_SUSPEND
    socket chre seqpacket 0660 root system
    shutdown critical

service devstart_sh /vendor/bin/init.qcom.devstart.sh
    class main
    user root
    group root system
    disabled
    oneshot

service ipastart_sh /vendor/bin/init.qcom.ipastart.sh
    class main
    user system
    group net_admin
    disabled
    oneshot

service insmod_sh /vendor/bin/init.insmod.sh
    class main
    user root
    group root system
    disabled
    oneshot

service msm_irqbalance /vendor/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 ppd /vendor/bin/mm-pp-dpps
    class late_start
    user graphics
    group graphics
    socket pps stream 0660 system system
    disabled

service wait_for_strongbox /vendor/bin/hw/wait_for_strongbox
    user root
    group root system
    priority -20
    ioprio rt 0

on property:init.svc.vendor.hwcomposer-2-3=stopped
    stop ppd

on property:init.svc.vendor.hwcomposer-2-3=running
    start ppd

# b/70518189 vDSO experiments
on property:sys.vdso=*
    write /sys/module/vdso/parameters/enable_32 1
    write /sys/module/vdso/parameters/enable_64 1

on property:sys.vdso=false
    write /sys/module/vdso/parameters/enable_32 0
    write /sys/module/vdso/parameters/enable_64 0

on property:sys.vdso=64
    write /sys/module/vdso/parameters/enable_32 0

on property:sys.vdso=32
    write /sys/module/vdso/parameters/enable_64 0

on property:ro.boot.mode=sota
    setprop ro.boot.sota enabled

on property:ro.boot.hardware.sku=G013A
    setprop persist.vendor.nfc.uicc_enabled true
on property:ro.boot.hardware.sku=G013B
    setprop persist.vendor.nfc.uicc_enabled false
    setprop persist.vendor.radio.uicc_se_enabled false
    interface_start android.hardware.secure_element@1.1::ISecureElement/eSE1
on property:ro.boot.hardware.sku=G013C
    setprop persist.vendor.nfc.uicc_enabled true
on property:ro.boot.hardware.sku=G013D
    setprop persist.vendor.nfc.uicc_enabled false
    setprop persist.vendor.radio.uicc_se_enabled false
    interface_start android.hardware.secure_element@1.1::ISecureElement/eSE1

# charger driver exposes now finer grain control, map demo mode to those properties
# demo mode can only be exit wipping data which will also reset the persist properties
on property:sys.retaildemo.enabled=1
    setprop persist.vendor.charge.stop.level 35
    setprop persist.vendor.charge.start.level 30

on property:persist.vendor.charge.stop.level=*
    write /sys/devices/platform/soc/soc:google,charger/charge_stop_level ${persist.vendor.charge.stop.level}

on property:persist.vendor.charge.start.level=*
    write /sys/devices/platform/soc/soc:google,charger/charge_start_level ${persist.vendor.charge.start.level}

# For Japan radio builds, always enforce camera shutter sound
# Since this property is read by the audio server in system service,
# it should be written by the system init.
on property:ro.boot.hardware.radio.subtype=1
    setprop audio.camerasound.force true

on property:sys.boot_completed=1 && property:ro.boot.mode=firstboot
    start init-firstboot-sh

service init-firstboot-sh /vendor/bin/init.firstboot.sh
    user nobody
    disabled
    oneshot

# init-fingerprint-sh is for stopping fps_hal after init retry fail serval times
# It keeps running until max init retry or fps_hal running successfully
# vendor.fps_hal restarts until max init retry times
#
# /vendor/bin/init.fingerprint.sh [max_init_retry_times]
service init-fingerprint-sh /vendor/bin/init.fingerprint.sh 10
    group root
    user root
    disabled
    oneshot

on property:sys.boot_completed=1
    start init-fingerprint-sh

on property:vendor.fps.init.succeed=true && property:init.svc.vendor.fps_hal=stopped
    start init-fingerprint-sh

on boot && property:persist.radio.multisim.config=dsds && property:persist.vendor.radio.multisim_switch_support=true
    start vendor.qcrild2

# Disable DSDS if multisim_switch_support is not enabled
on boot && property:persist.radio.multisim.config=dsds && property:persist.vendor.radio.multisim_switch_support=false
    setprop persist.radio.multisim.config ""
    stop vendor.qcrild2

# Write the dark theme magic (`theme-dark`, or 0x7468656d652d6461726b in hex string) to /misc
# partition. Offset 0 in vendor space is effectively offset 2048 in /misc partition.
service vendor.theme_set /vendor/bin/misc_writer --vendor-space-offset 0 --hex-string 0x7468656d652d6461726b
    disabled
    oneshot

# Clear the 10-byte dark theme magic in /misc partition. Offset 0 in vendor space is effectively
# offset 2048 in /misc partition.
service vendor.theme_clear /vendor/bin/misc_writer --vendor-space-offset 0 --hex-string 0x00000000000000000000
    disabled
    oneshot

# Set dark boot flag on dark mode (UiModeManager.MODE_NIGHT_YES == 2).
on property:persist.sys.theme=2
    start vendor.theme_set

# Clear the dark boot flag on light mode (UiModeManager.MODE_NIGHT_NO == 1) or auto mode
# (UiModeManager.MODE_NIGHT_AUTO == 0).
on property:persist.sys.theme=1
    start vendor.theme_clear

on property:persist.sys.theme=0
    start vendor.theme_clear