# Copyright (c) 2013-2018, 2020, 2021 The Linux Foundation. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#     * Redistributions of source code must retain the above copyright
#       notice, this list of conditions and the following disclaimer.
#     * Redistributions in binary form must reproduce the above
#       copyright notice, this list of conditions and the following
#       disclaimer in the documentation and/or other materials provided
#       with the distribution.
#     * Neither the name of The Linux Foundation nor the names of its
#       contributors may be used to endorse or promote products derived
#       from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
# ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
#

on early-init
    # Disable EAS
    write /proc/sys/kernel/sched_energy_aware 0

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

    # Alarm
    write /sys/module/qpnp_rtc/parameters/poweron_alarm 1

    # Add a cpuset for the camera daemon
    mkdir /dev/cpuset/camera-daemon 0750 cameraserver cameraserver
    write /dev/cpuset/camera-daemon/cpus 0-7
    write /dev/cpuset/camera-daemon/mems 0
    chown cameraserver cameraserver /dev/cpuset/camera-daemon/tasks
    chmod 0660 /dev/cpuset/camera-daemon/tasks

    # Create an stune group for camera-specific processes
    mkdir /dev/stune/camera-daemon
    chown system system /dev/stune/camera-daemon
    chown system system /dev/stune/camera-daemon/tasks
    chmod 0664 /dev/stune/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

    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

    # Setup permission for Power HAL
    chown system system /sys/class/kgsl/kgsl-3d0/devfreq/min_freq
    chown system system /sys/class/kgsl/kgsl-3d0/devfreq/max_freq
    chown system system /sys/class/kgsl/kgsl-3d0/force_rail_on
    chown system system /sys/class/kgsl/kgsl-3d0/force_clk_on
    chown system system /sys/class/kgsl/kgsl-3d0/idle_timer
    chown system system /sys/class/devfreq/soc:qcom,gpubw/min_freq
    chown system system /sys/class/devfreq/soc:qcom,cpu-cpu-ddr-bw/max_freq
    chown system system /sys/class/devfreq/soc:qcom,cpu-cpu-ddr-bw/min_freq
    chown system system /sys/class/devfreq/soc:qcom,cpu-cpu-ddr-bw/bw_hwmon/hist_memory
    chown system system /sys/class/devfreq/soc:qcom,cpu-cpu-ddr-bw/bw_hwmon/hyst_length
    chown system system /sys/class/devfreq/soc:qcom,cpu-cpu-ddr-bw/bw_hwmon/hyst_trigger_count
    chown system system /sys/class/devfreq/soc:qcom,cpu-cpu-ddr-bw/bw_hwmon/io_percent
    chown system system /sys/class/devfreq/soc:qcom,cpu-cpu-ddr-bw/bw_hwmon/sample_ms
    chown system system /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
    chown system system /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
    chown system system /sys/devices/system/cpu/cpu4/cpufreq/scaling_max_freq
    chown system system /sys/devices/system/cpu/cpu4/cpufreq/scaling_min_freq

    chmod 0664 /sys/class/kgsl/kgsl-3d0/devfreq/min_freq
    chmod 0664 /sys/class/kgsl/kgsl-3d0/devfreq/max_freq
    chmod 0664 /sys/class/kgsl/kgsl-3d0/force_rail_on
    chmod 0664 /sys/class/kgsl/kgsl-3d0/force_clk_on
    chmod 0664 /sys/class/kgsl/kgsl-3d0/idle_timer
    chmod 0664 /sys/class/devfreq/soc:qcom,gpubw/min_freq
    chmod 0664 /sys/class/devfreq/soc:qcom,cpu-cpu-ddr-bw/max_freq
    chmod 0664 /sys/class/devfreq/soc:qcom,cpu-cpu-ddr-bw/min_freq
    chmod 0664 /sys/class/devfreq/soc:qcom,cpu-cpu-ddr-bw/bw_hwmon/hist_memory
    chmod 0664 /sys/class/devfreq/soc:qcom,cpu-cpu-ddr-bw/bw_hwmon/hyst_length
    chmod 0664 /sys/class/devfreq/soc:qcom,cpu-cpu-ddr-bw/bw_hwmon/hyst_trigger_count
    chmod 0664 /sys/class/devfreq/soc:qcom,cpu-cpu-ddr-bw/bw_hwmon/io_percent
    chmod 0664 /sys/class/devfreq/soc:qcom,cpu-cpu-ddr-bw/bw_hwmon/sample_ms
    chmod 0664 /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
    chmod 0664 /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
    chmod 0664 /sys/devices/system/cpu/cpu4/cpufreq/scaling_max_freq
    chmod 0664 /sys/devices/system/cpu/cpu4/cpufreq/scaling_min_freq

    chown system system /sys/module/battery_saver/parameters/enabled
    chmod 0664 /sys/module/battery_saver/parameters/enabled

    # Change permissions for /dev/diag
    chmod 0666 /dev/diag

on fs
    wait /dev/block/platform/soc/${ro.boot.bootdevice}
    symlink /dev/block/platform/soc/${ro.boot.bootdevice} /dev/block/bootdevice
    mount_all --early /vendor/etc/fstab.qcom
    chown root system /mnt/vendor/persist
    chmod 0771 /mnt/vendor/persist
    mkdir /mnt/vendor/persist/data 0700 system system
    mkdir /mnt/vendor/persist/bms 0700 root system
    restorecon_recursive /mnt/vendor/persist
    write /sys/kernel/boot_adsp/boot 1

    mkdir /mnt/vendor/dsp 0770 root root
    copy /vendor/dsp/cdsp/fastrpc_shell_3 /mnt/vendor/dsp/fastrpc_shell_3
    chmod 0644 /mnt/vendor/dsp/fastrpc_shell_3
    mount none /mnt/vendor/dsp/fastrpc_shell_3 /vendor/dsp/cdsp/fastrpc_shell_3 bind

on late-fs
    mount_all --late /vendor/etc/fstab.qcom

on post-fs
    start vendor.qseecomd
    wait_for_prop vendor.sys.listeners.registered true

on post-fs-data
    mkdir /data/vendor/tombstones/modem 0771 system system
    mkdir /data/vendor/tombstones/lpass 0771 system system
    mkdir /data/vendor/tombstones/wcnss 0771 system system
    mkdir /data/vendor/tombstones/dsps 0771 system system
    mkdir /data/vendor/misc/seemp 0700 system system

on early-boot
    write /dev/ipa 1
    # Enable charging led trigger
    write /sys/class/leds/red/trigger battery-charging-or-full

on boot
    start vendor.rmt_storage

    # Thermal
    chmod 0664 /sys/class/thermal/thermal_message/sconfig
    chown system system /sys/class/thermal/thermal_message/sconfig
    chmod 0666 /sys/class/thermal/thermal_message/temp_state
    chown system system /sys/class/thermal/thermal_message/temp_state
    
    # Cpusets
    write /dev/cpuset/top-app/cpus 0-7
    write /dev/cpuset/foreground/cpus 0-7
    write /dev/cpuset/foreground/boost/cpus 0-7
    write /dev/cpuset/background/cpus 0-7
    write /dev/cpuset/system-background/cpus 0-7
    ####Regionalization config and prop files####
    chmod 0644 /persist/speccfg/spec
    chmod 0644 /persist/speccfg/devicetype
    chmod 0644 /persist/speccfg/mbnversion
    chmod 0644 /persist/speccfg/.not_triggered
    chmod 0644 /persist/speccfg/vendor_ro.prop
    chmod 0644 /persist/speccfg/vendor_persist.prop
    chmod 0644 /persist/speccfg/submask
    chmod 0644 /persist/speccfg/partition
    chown system system /persist/speccfg/spec
    chown system system /persist/speccfg/devicetype
    chown system system /persist/speccfg/mbnversion
    chown system system /persist/speccfg/.not_triggered
    chown system system /persist/speccfg/vendor_ro.prop
    chown system system /persist/speccfg/vendor_persist.prop
    chown system system /persist/speccfg/submask
    chown system system /persist/speccfg/partition
    
    # Turn on sleep modes
    write /sys/module/lpm_levels/parameters/sleep_disabled 0

#Create folder dump yuv images while debugging
    mkdir /data/vendor/camera 0770 camera camera

#USB controller configuration
    setprop vendor.usb.rndis.func.name "rndis_bam"
    setprop vendor.usb.rmnet.func.name "rmnet_bam"
    setprop vendor.usb.rmnet.inst.name "rmnet"
    setprop vendor.usb.dpl.inst.name "dpl"
    setprop vendor.usb.qdss.inst.name "qdss"
    setprop vendor.usb.controller a800000.dwc3
    setprop sys.usb.configfs 1
    write /sys/module/usb_f_qcrndis/parameters/rndis_dl_max_xfer_size 15916

on boot && property:persist.vendor.usb.controller.default=*
    setprop vendor.usb.controller ${persist.vendor.usb.controller.default}

on property:vendor.usb.controller=*
    setprop sys.usb.controller ${vendor.usb.controller}
    write /sys/module/usb_f_qcrndis/parameters/rndis_dl_max_xfer_size 15916

    # Touchpanel
    chown system system /sys/touchpanel/double_tap
    chmod 0664 /sys/touchpanel/double_tap

    # SmartCharging
    chown system system /sys/class/power_supply/battery/charging_enabled
    chmod 0666 /sys/class/power_supply/battery/charging_enabled

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

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

on property:init.svc.vendor.per_mgr=running
    start vendor.per_proxy

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

#start camera server as daemon
#service qcamerasvr /system/bin/mm-qcamera-daemon
#    class late_start
#    user camera
#    group camera system inet input graphics

## import cne init file
#on post-fs
#    export LD_PRELOAD /vendor/lib/libNimsWrap.so
#
## 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 qrngd /system/bin/qrngd -f
#   class main
#   user root
#   group root
#
#service qrngp /system/bin/qrngp
#    class main
#    user root
#    group root
#    oneshot
#    disabled
#
#on property:sys.boot_completed=1
#    start qrngp
#
service vendor.qseecomd /vendor/bin/qseecomd
   class core
   user root
   group root

#service qosmgrd /system/bin/qosmgr /system/etc/qosmgr_rules.xml
#   user system
#   group system
#   disabled
#

#service security-check1 /sbin/security_boot_check system
#    class core
#    oneshot
#
#service security-check2 /sbin/security_boot_check recovery
#    class core
#    oneshot
#

#
#service usf_tester /system/vendor/bin/usf_tester
#    user system
#    group system inet
#    disabled
#
#service usf_epos /system/vendor/bin/usf_epos
#    user system
#    group system inet
#    disabled
#
#service usf_gesture /system/vendor/bin/usf_gesture
#    user system
#    group system inet
#    disabled
#

#service usf_sync_gesture /system/vendor/bin/usf_sync_gesture
#    user system
#    group system inet
#    disabled
#

#service usf_p2p /system/vendor/bin/usf_p2p
#    user system
#    group system inet
#    disabled
#
#service usf_hovering /system/vendor/bin/usf_hovering
#    user system
#    group system inet
#    disabled
#
#service usf_proximity /system/vendor/bin/usf_proximity
#    user system
#    group system inet
#    disabled
#
#service usf-post-boot /system/vendor/bin/sh /system/etc/usf_post_boot.sh
#    class late_start
#    user root
#    disabled
#    oneshot
#
#on property:init.svc.bootanim=stopped
#    start usf-post-boot
#
#
#on boot
#    insmod /system/lib/modules/adsprpc.ko
#    insmod /system/lib/modules/mhi.ko
## access permission for secure touch
#    chmod 0660 /sys/devices/f9966000.i2c/i2c-1/1-004a/secure_touch_enable
#    chmod 0440 /sys/devices/f9966000.i2c/i2c-1/1-004a/secure_touch
#    chmod 0660 /sys/devices/f9966000.i2c/i2c-1/1-0020/secure_touch_enable
#    chmod 0440 /sys/devices/f9966000.i2c/i2c-1/1-0020/secure_touch
#    chown system drmrpc /sys/devices/f9966000.i2c/i2c-1/1-004a/secure_touch_enable
#    chown system drmrpc /sys/devices/f9966000.i2c/i2c-1/1-004a/secure_touch
#    chown system drmrpc /sys/devices/f9966000.i2c/i2c-1/1-0020/secure_touch_enable
#    chown system drmrpc /sys/devices/f9966000.i2c/i2c-1/1-0020/secure_touch
#
#
#
service vendor-sensor-sh /vendor/bin/init.qcom.sensors.sh
    class core
    user root
    oneshot
#
#service mdm_helper /system/bin/mdm_helper
#    class core
#    onrestart setprop ro.service.mdm_helper_restarted "true"
#    disabled
#
#service mdm_helper_proxy /system/bin/mdm_helper_proxy
#    class core
#    disabled
#
#service mdm_launcher /system/bin/sh /init.mdm.sh
#    class main
#    oneshot
#
#service qcamerasvr /system/bin/mm-qcamera-daemon
#    class late_start
#    user camera
#    group camera system inet input graphics
#
# Stop mdm_helper_proxy in case of shutdown
#on property:sys.shutdown.requested=*
#    stop mdm_helper_proxy
#
# Stop mdm_helper_proxy on APQ target
#on property:ro.radio.noril=yes
#    stop mdm_helper_proxy
#
#on property:persist.airplane.mode.pwr.svg=enabled
#    setprop ro.mdm_helper_proxy_req false
#
#on property:init.svc.ril-daemon=running
#    setprop ro.mdm_helper_proxy_req true
#
## Start mdm_helper_proxy
#on property:ro.mdm_helper_proxy_req=true
#    start mdm_helper_proxy
#
## QCA1530 SoC core detect
#service gnss-detect /system/vendor/bin/gnss.qca1530.sh detect
#   class core
#   oneshot

service mdtpd /system/vendor/bin/mdtpd
    class late_start
    user root
    group system radio drmrpc

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

#
## QCA1530 SoC late_start group trigger
#service gnss-init /system/vendor/bin/gnss.qca1530.sh init
#   class late_start
#   oneshot
#
## QCA1530 SoC Service Daemon
#service gnss-svcd /system/vendor/bin/gnss.qca1530.sh start
#   class late_start
#   user root
#   group gps system qcom_diag diag log inet net_raw
#   disabled

on property:vold.decrypt=trigger_restart_framework
   start cnss_diag

service cnss_diag /system/vendor/bin/cnss_diag -q -f -t HELIUM
   class main
   user system
   group system wifi inet sdcard_rw media_rw diag
   oneshot

service dcvs-sh /vendor/bin/init.qti.dcvs.sh
    class late_start
    user root
    group root system
    disabled
    oneshot

on property:vendor.dcvs.prop=1
   start dcvs-sh

service folio_daemon /system/bin/folio_daemon
    class late_start
    user system
    group system uhid
    disabled

on property:persist.service.folio_daemon=0
    stop folio_daemon
 
on property:persist.service.folio_daemon=1
    start folio_daemon

service ppd /system/vendor/bin/mm-pp-dpps
    class late_start
    user system
    group system graphics
    socket pps stream 0660 system system
    disabled

on property:sys.boot_completed=1
    # Enable PowerHAL hint processing
    setprop vendor.powerhal.init 1
    # Stop bootanimation
    stop bootanim

on property:init.svc.surfaceflinger=stopped
    stop ppd

on property:init.svc.surfaceflinger=running
    start ppd

on property:init.svc.surfaceflinger=restarting
    stop ppd

on property:init.svc.zygote=stopped
    stop ppd

on property:init.svc.zygote=running
    start ppd

on property:init.svc.zygote=restarting
    stop ppd

on charger
    start qcom-post-boot
    start vendor.hvdcp_opti
    setprop vendor.usb.controller a800000.dwc3
    setprop sys.usb.configfs 1
    start vendor.power_off_alarm

service vendor.hvdcp_opti /vendor/bin/hvdcp_opti
    class main
    user system
    group system wakelock
    capabilities BLOCK_SUSPEND WAKE_ALARM

#
#service nqs /system/bin/nqs
#    class late_start
#    socket nqs_qsb_comm stream 660 system system
#    user system
#    group drmrpc
#
#service adsprpcd /system/vendor/bin/adsprpcd
#   class main
#   user media
#   group media
#
##Start picture quality tuning service
#service vqttoolservice /system/bin/vqttoolservice
#    class late_start
#    socket vqtss stream 0660 system system
#    user system
#    group system

service seempd /system/bin/seempd
    class late_start
    user system
    group system sdcard_rw
    socket seempdw dgram 0666 system system

on property:sys.boot_completed=1
    # Enable EAS
    write /proc/sys/kernel/sched_energy_aware 1

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

# MIUI camera flag
on property:sys.camera.miui.apk=*
    setprop vendor.camera.miui.apk ${sys.camera.miui.apk}

on property:sys.boot_completed=1 && property:ro.boot.fpsensor=gdx
    # stop fps_hal
    stop vendor.fps_hal

# Setup final cpu.uclamp
on property:sys.boot_completed=1
    write /dev/cpuctl/background/cpu.uclamp.max 70
    write /dev/cpuctl/system-background/cpu.uclamp.max 70
    write /dev/cpuctl/dex2oat/cpu.uclamp.max 80

on property:sys.boot_completed=1
    write /proc/sys/vm/page-cluster 0
    write /proc/sys/vm/swappiness 60
    write /sys/block/zram0/comp_algorithm lz4
    swapon_all /vendor/etc/fstab.qcom