# Copyright (c) 2009-2012, 2014-2019, 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 BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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.
#

import /vendor/etc/init/hw/init.qcom.usb.rc
import /vendor/etc/init/hw/init.msm.usb.configfs.rc
import /vendor/etc/init/hw/init.target.rc
import /vendor/etc/init/hw/init.device.rc

on early-init
    mount debugfs debugfs /sys/kernel/debug
    chmod 0755 /sys/kernel/debug

  # Change ownership of hw_recovery related nodes
    chown system graphics /sys/kernel/debug/dri/0/debug/dump
    chown system graphics /sys/kernel/debug/dri/0/debug/recovery_reg
    chown system graphics /sys/kernel/debug/dri/0/debug/recovery_dbgbus
    chown system graphics /sys/kernel/debug/dri/0/debug/recovery_vbif_dbgbus

    # Change ownership of sw_sync node
    chown system graphics /sys/kernel/debug/sync/sw_sync
    chmod 0666 /sys/kernel/debug/sync/sw_sync

    chown root system /dev/kmsg
    chmod 0620 /dev/kmsg
    # Load WIGIG platform driver
    exec u:r:vendor_modprobe:s0 -- /vendor/bin/modprobe -a -d /vendor/lib/modules msm_11ad_proxy

on init
    # Create cgroup mount point for memory
    mkdir /sys/fs/cgroup/memory/bg 0750 root system
    write /sys/fs/cgroup/memory/bg/memory.swappiness 140
    write /sys/fs/cgroup/memory/bg/memory.move_charge_at_immigrate 1
    chown root system /sys/fs/cgroup/memory/bg/tasks
    chmod 0660 /sys/fs/cgroup/memory/bg/tasks

    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

    # 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

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

on post-fs
    chmod 0755 /sys/kernel/debug/tracing

    write /sys/class/graphics/fb0/idle_time 100

on early-boot
    # set RLIMIT_MEMLOCK to 64MB
    setrlimit 8 67108864 67108864
    # Allow subsystem (modem etc) debugging
    write /sys/kernel/debug/bootkpi/kpi_values "M - Start adsp"
    write /sys/kernel/boot_adsp/boot 1
    write /sys/kernel/boot_cdsp/boot 1
    write /sys/devices/virtual/npu/msm_npu/boot 1
    write /sys/kernel/boot_slpi/boot 1
    setprop ro.alarm_boot false

    # SSR Setup
    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
    write /sys/bus/msm_subsys/devices/subsys4/restart_level RELATED
    write /sys/bus/msm_subsys/devices/subsys5/restart_level RELATED
    write /sys/devices/virtual/cvp/cvp/boot 1

    # for backward compatibility
    chown system system /persist/sensors
    chown system system /persist/sensors/registry
    chown system system /persist/sensors/registry/registry
    chown system system /persist/sensors/registry/registry/sensors_registry
    chown system system /persist/sensors/sensors_settings
    chown system system /persist/sensors/registry/config
    chmod 0664 /persist/sensors/sensors_settings

    chown system system /mnt/vendor/persist/sensors
    chown system system /mnt/vendor/persist/sensors/sns.reg
    chown system system /mnt/vendor/persist/sensors/sensors_list.txt
    chown system system /mnt/vendor/persist/sensors/registry
    chown system system /mnt/vendor/persist/sensors/registry/registry
    chown system system /mnt/vendor/persist/sensors/registry/registry/sensors_registry
    chown system system /mnt/vendor/persist/sensors/sensors_settings
    chown system system /mnt/vendor/persist/sensors/registry/sns_reg_config
    chown system system /mnt/vendor/persist/sensors/registry/sns_reg_version
    chown system system /mnt/vendor/persist/sensors/registry/config
    chmod 0664 /mnt/vendor/persist/sensors/sensors_settings

    chown system system /mnt/vendor/persist/data/pfm/licenses
    chmod 0775 /mnt/vendor/persist/data/pfm/licenses

on boot
    chown bluetooth bluetooth /sys/module/bluetooth_power/parameters/power
    chown bluetooth net_bt /sys/class/rfkill/rfkill0/type
    chown bluetooth net_bt /sys/class/rfkill/rfkill0/state
    chown bluetooth bluetooth /proc/bluetooth/sleep/proto
    chown bluetooth bluetooth /sys/module/hci_uart/parameters/ath_lpm
    chown bluetooth bluetooth /sys/module/hci_uart/parameters/ath_btwrite
    chown system system /sys/module/sco/parameters/disable_esco
    chown bluetooth bluetooth /sys/module/hci_smd/parameters/hcismd_set
    chown system system /sys/module/msm_core/parameters/polling_interval
    chown system system /sys/module/msm_core/parameters/disabled
    chown system system /sys/kernel/debug/msm_core/enable
    chown system system /sys/kernel/debug/msm_core/ptable
    chown system system /sys/kernel/boot_slpi/ssr
    chown system system /sys/module/radio_iris_transport/parameters/fmsmd_set
    chmod 0660 /sys/module/bluetooth_power/parameters/power
    chmod 0660 /sys/module/hci_smd/parameters/hcismd_set
    chmod 0660 /sys/module/radio_iris_transport/parameters/fmsmd_set
    chmod 0660 /sys/class/rfkill/rfkill0/state
    chmod 0660 /proc/bluetooth/sleep/proto
    chown bluetooth net_bt /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 bluetooth /sys/devices/platform/msm_serial_hs.0/clock
    chmod 0660 /sys/devices/platform/msm_serial_hs.0/clock

    chmod 0660 /dev/ttyHS2
    chown bluetooth bluetooth /dev/ttyHS2

    chown bluetooth net_bt /sys/class/rfkill/rfkill0/device/extldo
    chmod 0660 /sys/class/rfkill/rfkill0/device/extldo

    #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

    #define back flash and front flash
    chmod 0660 /sys/android_camera/sensor
    chmod 0660 /sys/class/leds/led:flash_0/brightness
    chmod 0660 /sys/class/leds/led:flash_1/brightness
    chmod 0660 /sys/class/leds/led:flash_2/brightness
    chmod 0660 /sys/class/leds/led:torch_0/brightness
    chmod 0660 /sys/class/leds/led:torch_1/brightness
    chmod 0660 /sys/class/leds/led:torch_2/brightness
    chmod 0660 /sys/class/leds/led:switch_0/brightness
    chmod 0660 /sys/class/leds/led:switch_1/brightness
    chmod 0660 /sys/class/leds/flashlight/brightness
    chown system system /sys/android_camera/sensor
    chown system system /sys/class/leds/led:flash_0/brightness
    chown system system /sys/class/leds/led:flash_1/brightness
    chown system system /sys/class/leds/led:flash_2/brightness
    chown system system /sys/class/leds/led:torch_0/brightness
    chown system system /sys/class/leds/led:torch_1/brightness
    chown system system /sys/class/leds/led:torch_2/brightness
    chown system system /sys/class/leds/led:switch_0/brightness
    chown system system /sys/class/leds/led:switch_1/brightness
    chown system system /sys/class/leds/flashlight/brightness
    chmod 0660 /sys/class/power_supply/battery/input_suspend
    chmod 0660 /sys/class/power_supply/battery/charging_enabled
    chown system system /sys/class/power_supply/battery/input_suspend
    chown system system /sys/class/power_supply/battery/charging_enabled

    chmod 0770 /sys/class/power_supply/battery/device/thermalcall
    chown system system /sys/class/power_supply/battery/device/thermalcall

    mkdir /vendor/mnt/persist/drm 0770 system system
    mkdir /vendor/mnt/persist/bluetooth 0770 bluetooth bluetooth
    mkdir /vendor/mnt/persist/misc 0770 system system
    mkdir /vendor/mnt/persist/alarm 0770 system system
    mkdir /vendor/mnt/persist/time 0770 system system
    mkdir /vendor/mnt/persist/secnvm 0770 system system

    #create port-bridge log dir
    mkdir /data/vendor/port_bridge 0770 radio radio
    chmod 0770 /data/vendor/port_bridge

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

    setprop wifi.interface wlan0



    setprop ro.telephony.call_ring.multiple false

    #enable camera read sensors data
    setprop persist.camera.gyro.disable 0

    #Remove SUID bit for iproute2 ip tool
    chmod 0755 /system/bin/ip


    chmod 0444 /sys/devices/platform/msm_hsusb/gadget/usb_state

    setprop net.tcp.2g_init_rwnd 10

    # 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

    #Make MTU adjusting for sometimes cannot access to internet
    write /proc/sys/net/ipv4/tcp_mtu_probing 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"

    # Allow access for CCID command/response timeout configuration
    chown system system /sys/module/ccid_bridge/parameters/bulk_msg_timeout

    # bond0 used by FST Manager
    chown wifi wifi /sys/class/net/bond0/bonding/queue_id

    # Allow access to dload sysfs node
    chown root system /sys/kernel/dload/emmc_dload
    chmod 0660 /sys/kernel/dload/emmc_dload
    chown root system /sys/kernel/dload/dload_mode
    chmod 0660 /sys/kernel/dload/dload_mode

    chown system system /sys/class/backlight/panel0-backlight/brightness
    chown system system /sys/class/backlight/panel0-backlight/max_brightness
    chown system system /sys/class/backlight/panel1-backlight/brightness
    chown system system /sys/class/backlight/panel1-backlight/max_brightness

    # Allow access to sensors device attributes
    chown system system /sys/class/sensors/MPU6050-accel/enable
    chown system system /sys/class/sensors/MPU6050-accel/poll_delay
    chown system system /sys/class/sensors/MPU6050-gyro/enable
    chown system system /sys/class/sensors/MPU6050-gyro/poll_delay
    chown system system /sys/class/sensors/apds9930-light/enable
    chown system system /sys/class/sensors/apds9930-light/poll_delay
    chown system system /sys/class/sensors/apds9930-proximity/enable
    chown system system /sys/class/sensors/apds9930-proximity/poll_delay

    # Create directory used for display
    # for backward compatibility
    mkdir /persist/display 0770 system graphics
    mkdir /mnt/vendor/persist/display 0770 system graphics

    # Create vpp directory
    mkdir /mnt/vendor/persist/vpp 0770 media media

    # Create hvdcp_opti directory
    mkdir /mnt/vendor/persist/hvdcp_opti 0770 root system

    # Create pa-cal driver directory lct-20180914
    mkdir /mnt/vendor/persist/audio 0770 root root

    # zhitongze@huaqin.com add sensor hardware info 20180207 begin
    chmod 0664 /sys/devices/platform/HardwareInfo/gsensor
    chmod 0664 /sys/devices/platform/HardwareInfo/msensor
    chmod 0664 /sys/devices/platform/HardwareInfo/alsps
    chmod 0664 /sys/devices/platform/HardwareInfo/gyro
    # zhitongze@huaqin.com add sensor hardware info 20180207 end
    chown system system /sys/devices/platform/HardwareInfo/alsps
    chown system system /sys/devices/platform/HardwareInfo/gsensor
    chown system system /sys/devices/platform/HardwareInfo/msensor
    chown system system /sys/devices/platform/HardwareInfo/gyro
    chown system system /sys/devices/platform/HardwareInfo/sar_sensor_1
    chown system system /sys/devices/platform/HardwareInfo/sar_sensor_2
    #sensors log dir
    mkdir /data/vendor/sensors
    chown system system /data/vendor/sensors

# msm specific files that need to be created on /data
on post-fs-data
    mkdir /data/vendor/misc 01771 system system

    # Create directory used for dump collection
    mkdir /data/vendor/ssrdump 0770 root system

    # Create directory used by display clients
    mkdir /data/vendor/display 0770 system graphics

    # Change lm related dirs
    mkdir /data/vendor/lm 0700 root root

    # Create directory used by media clients
    mkdir /data/vendor/media 0770 mediacodec media

    # create QDMA dropbox
    mkdir /data/vendor/qdmastats 0700 system system
    mkdir /data/vendor/qdma 0770 system system
    mkdir /dev/socket/qdma 0770 system system
    chmod 2770 /dev/socket/qdma

    # Create /data/vendor/tzstorage directory for SFS listener
    mkdir /data/vendor/tzstorage 0770 system system

    # Create directory for apps access via QTEEConnector
    mkdir /data/vendor/qtee 0770 system system

    #Create folder of camera
    mkdir /data/vendor/camera 0770 camera camera
    mkdir /data/misc/camera 0770 camera camera

    #Create directory for tftp
    mkdir /data/vendor/tombstones 0771 system system
    mkdir /data/vendor/tombstones/rfs 0771 system system

    mkdir /data/vendor/ramdump 0771 root system
    mkdir /data/vendor/bluetooth 0770 bluetooth bluetooth
    mkdir /data/vendor/ramdump/bluetooth 0770 bluetooth bluetooth

    # Create the directories used by the Wireless subsystem
    mkdir /data/vendor/wifi 0770 wifi wifi
    mkdir /data/vendor/wifi/sockets 0770 wifi wifi
    mkdir /data/vendor/wifi/hostapd 0770 wifi wifi
    mkdir /data/vendor/wifi/hostapd/ctrl 0770 wifi wifi
    mkdir /data/vendor/wifi/wpa_supplicant 0770 wifi wifi
    mkdir /data/vendor/wifi/wigig_hostapd 0770 wifi wifi
    mkdir /data/vendor/wifi/wpa 0770 wifi wifi
    mkdir /data/vendor/wifi/wpa/sockets 0770 wifi wifi

    #create port-bridge log dir
    mkdir /data/vendor/port_bridge 0770 radio radio
    chmod 0770 /data/vendor/port_bridge

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

    #create ipacm log dir
    mkdir /data/vendor/ipa 0770 radio radio
    chmod 0770 /data/vendor/ipa

    #Create QTI dir for logs
    mkdir /data/vendor/dataqti 0770 radio radio
    chmod 0770 /data/vendor/dataqti

    # Create the directories used by CnE subsystem
    mkdir /data/vendor/connectivity 0771 radio radio
    chown radio radio /data/vendor/connectivity

    # Create the directories used by LctDiagSendData
    mkdir /data/vendor/lct_diag 0771 root root
    chown root root /data/vendor/lct_diag
    rm /data/vendor/lct_diag/client_*

    # 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 0770 system radio
    rm /data/vendor/radio/shmbus

    # Create directory for modem_config
    mkdir /data/vendor/modem_config 0570 radio root

    # Mounting of persist is moved to 'on emmc-fs' and 'on fs' sections
    # We chown/chmod /vendor/mnt/persist again so because mount is run as root + defaults
    chown root system /vendor/mnt/persist
    chmod 0771 /vendor/mnt/persist
    chown system system /vendor/mnt/persist/WCNSS_qcom_wlan_nv.bin
    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/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
    mkdir /data/vendor/location-partner 0770 gps gps
    mkdir /data/vendor/location-partner/dre 0770 gps gps
    mkdir /data/vendor/location-partner/ppe 0770 gps gps
    mkdir /dev/socket/location 0770 gps gps
    mkdir /dev/socket/location/ehub 0770 gps gps

    #Create directories for wifihal services
    mkdir /dev/socket/wifihal 0770 wifi wifi
    chmod 2770 /dev/socket/wifihal

    # SSC/SLPI sensors
    mkdir /vendor/mnt/persist/sensors 0775 sensors sensors
    write /vendor/mnt/persist/sensors/sensors_settings 1
    chown system root /vendor/mnt/persist/sensors/sensors_settings
    chmod 0664 /vendor/mnt/persist/sensors/sensors_settings
    chown system system /vendor/mnt/persist/PRSensorData.txt
    chmod 0600 /vendor/mnt/persist/PRSensorData.txt

    #Create directory for hostapd
    mkdir /data/hostapd 0770 system wifi

    # Create /data/time folder for time-services
    mkdir /data/vendor/time/ 0700 system system


    setprop vold.post_fs_data_done 1

    #Create FM dir for patchdownloader
    mkdir /data/vendor/fm 0770 system system
    chmod 0770 /data/vendor/fm

    #Create PERFD deamon related dirs
    mkdir /data/vendor/perfd 0770 root system
    chmod 2770 /data/vendor/perfd
    rm /data/vendor/perfd/default_values

    mkdir /data/vendor/secure_element 0777 system system

    #Create IOP  deamon related dirs
    mkdir /data/vendor/iop 0700 root system

    # 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

    # copy prebuilt qcril.db files always
    copy /vendor/radio/qcril_database/qcril.db /data/vendor/radio/qcril_prebuilt.db
    chown radio radio /data/vendor/radio/qcril_prebuilt.db
    chmod 0660 /data/vendor/radio/qcril_prebuilt.db
    # 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

    copy /vendor/etc/ad_calib.cfg /data/vendor/display/ad_calib.cfg
    chmod 0644 /data/vendor/display/ad_calib.cfg
    # qti-logkit data
    mkdir /data/vendor/qti-logkit/ 0771 system system
    mkdir /data/vendor/qti-logkit/shared-privileged/ 2770 system system
    mkdir /data/vendor/qti-logkit/shared-public/ 2770 system diag
    mkdir /data/vendor/qti-logkit/socket-privileged/ 2770 system system
    mkdir /data/vendor/qti-logkit/socket-public/ 2750 system diag
    mkdir /data/vendor/qti-logkit/logdata/ 2750 system shell

    #Create SWAP related dirs
    mkdir /data/vendor/swap 0770 root system
    chmod 2770 /data/vendor/swap

    # Create vpp directory
    mkdir /data/vendor/vpp 0770 media media

    #Create FTM_AP dir for factory test
    mkdir /data/FTM_AP 0775 system system

    #Create dir for TUI
    mkdir /data/vendor/tui 0600 system drmrpc

    #Start move time data to /data/vendor once post-fs-data done
    start vendor.move_time_data

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

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

on property:ro.vendor.iocgrp.config=1
    mkdir /dev/blkio
    mount cgroup none /dev/blkio blkio
    chown system system /dev/blkio
    chown system system /dev/blkio/tasks
    chmod 0664 /dev/blkio/tasks
    mkdir /dev/blkio/bg 0755 system system
    chown system system /dev/blkio/bg/tasks
    chmod 0664 /dev/blkio/bg/tasks
    write /dev/blkio/blkio.weight 1000
    write /dev/blkio/bg/blkio.weight 100

on property:persist.vendor.sys.ssr.enable_debug=*
    write /sys/module/subsystem_restart/parameters/enable_debug ${persist.vendor.sys.ssr.enable_debug}

on property:persist.vendor.sys.mba_boot_timeout=*
    write /sys/module/pil_msa/parameters/pbl_mba_boot_timeout_ms ${persist.vendor.sys.mba_boot_timeout}

on property:persist.vendor.sys.modem_auth_timeout=*
    write /sys/module/pil_msa/parameters/modem_auth_timeout_ms ${persist.vendor.sys.modem_auth_timeout}

on property:persist.vendor.sys.pil_proxy_timeout=*
    write /sys/module/peripheral_loader/parameters/proxy_timeout_ms ${persist.vendor.sys.pil_proxy_timeout}

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

on property:persist.vendor.ssr.enable_ramdumps=1
    write /sys/module/subsystem_restart/parameters/enable_ramdumps 1
    mkdir /data/vendor/ramdump_ssr 770 system system
    start vendor.ss_ramdump

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

on property:sys.boot_completed=1
    write /dev/kmsg "Boot completed "

    #Reset read ahead for dm-0, dm-1, dm-3, dm-4, dm-5 and dm-6 to 128b
    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

    # Back to default VM settings
    write /proc/sys/vm/dirty_expire_centisecs 3000
    write /proc/sys/vm/dirty_background_ratio 10

    # Setup runtime 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

    #WDSP FW boot sysfs node used by STHAL
    chown media audio /sys/kernel/wdsp0/boot
    chown media audio /sys/kernel/wcd_cpe0/fw_name

on property:persist.vendor.radio.atfwd.start=false
    stop vendor.atfwd

on property:vendor.radio.atfwd.start=false
    stop vendor.atfwd

# corefile limit
on property:persist.debug.trace=1
    mkdir /data/core 0777 root root
    write /proc/sys/kernel/core_pattern "/data/core/%E.%p.%e"

on property:init.svc.wpa_supplicant=stopped
    stop dhcpcd

on property:ro.bluetooth.ftm_enabled=true
    start vendor.ftmd

service vendor.qcom-c_main-sh /vendor/bin/init.class_main.sh
    class main
    user root
    group root system
    oneshot

on property:vold.decrypt=trigger_restart_framework
    start vendor.qcom-c_main-sh
    start vendor.cnss_diag
    restart vendor.audio-hal-2-0
    restart vendor.camera-provider-2-4

on property:persist.env.fastdorm.enabled=true
    setprop persist.radio.data_no_toggle 1

service vendor.irsc_util /vendor/bin/irsc_util "/vendor/etc/sec_config"
    class core
    user root
    oneshot
    writepid /dev/cpuset/system-background/tasks

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

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

service vendor.port-bridge /system/vendor/bin/port-bridge
    class main
    user radio
    group radio system inet
    disabled
    oneshot
    writepid /dev/cpuset/system-background/tasks

service vendor.ipacm /system/vendor/bin/ipacm
    class main
    user radio
    group radio inet
    disabled
    writepid /dev/cpuset/system-background/tasks


service vendor.sensors /vendor/bin/sscrpcd sensorspd
    class early_hal
    user system
    group system wakelock
    capabilities BLOCK_SUSPEND

service vendor.sensors.qti /vendor/bin/sensors.qti
    class main
    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.sensors.qcom /vendor/bin/sensors.qcom
    class main
    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

on property:ro.vendor.use_data_netmgrd=false
    # netmgr not supported on specific target
    stop vendor.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

on property:sys.sysctl.tcp_adv_win_scale=*
    write /proc/sys/net/ipv4/tcp_adv_win_scale ${sys.sysctl.tcp_adv_win_scale}

service wpa_supplicant /vendor/bin/hw/wpa_supplicant \
    -O/data/vendor/wifi/wpa/sockets -puse_p2p_group_interface=1 \
    -g@android:vendor_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 vendor_wpa_wlan0 dgram 660 wifi wifi
    disabled
    oneshot
    writepid /dev/cpuset/system-background/tasks

# Data Migration
service vendor.move_wifi_data /system/bin/move_wifi_data.sh
    class main
    user  wifi
    group wifi
    disabled
    oneshot

service cnss-daemon /system/vendor/bin/cnss-daemon -n -l
    class late_start
    user system
    group system inet net_admin wifi
    capabilities NET_ADMIN
    writepid /dev/cpuset/system-background/tasks

on property:sys.shutdown.requested=*
    write /sys/kernel/shutdown_wlan/shutdown 1
    stop cnss-daemon

service loc_launcher /system/vendor/bin/loc_launcher
    class late_start
    user gps
    group gps

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

service vendor.qcom-post-boot /vendor/bin/init.qcom.post_boot.sh
    class late_start
    user root
    group root system wakelock graphics
    disabled
    oneshot

on property:sys.boot_completed=1
    start vendor.qcom-post-boot

on property:vendor.post_boot.parsed=*
    setprop sys.post_boot.parsed ${vendor.post_boot.parsed}

on property:ro.vendor.ril.mbn_copy_completed=1
    write /data/vendor/radio/copy_complete 1

service vendor.qvop-daemon /vendor/bin/qvop-daemon
    class late_start
    user system
    group system drmrpc
    writepid /dev/cpuset/system-background/tasks

service vendor.atfwd /vendor/bin/ATFWD-daemon
    class late_start
    user system
    group system radio

on property:persist.vendor.radio.atfwd.start=true
    start vendor.atfwd

service hostapd_fst /vendor/bin/hw/hostapd -dd -g /data/vendor/wifi/hostapd/global
    class main
    capabilities NET_ADMIN NET_RAW
    user wifi
    group wifi
    disabled
    oneshot

service ims_regmanager /system/vendor/bin/exe-ims-regmanagerprocessnative
    class late_start
    group net_bt_admin inet radio wifi
    disabled

on property:persist.ims.regmanager.mode=1
    start ims_regmanager

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

service vendor.ril-daemon2 /vendor/bin/hw/rild -c 2
    class main
    user radio
    disabled
    group radio cache inet misc audio sdcard_r sdcard_rw diag oem_2901 log
    capabilities BLOCK_SUSPEND NET_ADMIN NET_RAW

service vendor.ril-daemon3 /vendor/bin/hw/rild -c 3
    class main
    user radio
    disabled
    group radio cache inet misc audio sdcard_r sdcard_rw diag oem_2901 log
    capabilities BLOCK_SUSPEND NET_ADMIN NET_RAW

service charger /system/bin/charger
    class charger
    user system
    group system graphics input
    capabilities SYS_BOOT
    seclabel u:r:charger:s0

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


service vendor.msm_irqbalance /vendor/bin/msm_irqbalance -f /system/vendor/etc/msm_irqbalance.conf
    class core
    user root
    group root
    disabled

service vendor.msm_irqbal_lb /vendor/bin/msm_irqbalance -f /system/vendor/etc/msm_irqbalance_little_big.conf
    class core
    user root
    group root
    disabled

on charger
    setprop persist.sys.usb.config mass_storage
    load_system_props
    start qcom-post-boot

#add poweroffhandler
service poweroffhandler /system/vendor/bin/poweroffhandler
    class core
    user media
    group graphics audio
    disabled
    oneshot

on property:vendor.display.lcd_density=*
    setprop ro.sf.lcd_density ${vendor.display.lcd_density}

# Set vendor-ril lib path based on Meta version
on property:vendor.rild.libpath=*
    setprop rild.libpath ${vendor.rild.libpath}

on property:ro.vendor.radio.noril=*
    setprop ro.radio.noril ${ro.vendor.radio.noril}


service vendor.power_off_alarm /vendor/bin/power_off_alarm
    class core
    group system
    disabled
    oneshot

#Set GPU Opengles version
on property:vendor.opengles.version=*
    setprop ro.opengles.version ${vendor.opengles.version}

#Set gpu available frequencies property
on property:vendor.gpu.available_frequencies=*
    setprop ro.vendor.gpu.available_frequencies ${vendor.gpu.available_frequencies}

#workaround for camera HAL can not read sys property
on property:sys.camera.face.unlock=*
    setprop vendor.camera.face.unlock ${sys.camera.face.unlock}

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

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

#add cts verify flag
on property:sys.camera.not.ctsverify.apk=*
    setprop vendor.camera.not.ctsverify.apk ${sys.camera.not.ctsverify.apk}
#add cts verify flag
    on property:sys.gyro.sensorname=*
    setprop vendor.camera.gyro.sensorname ${sys.gyro.sensorname}

service vendor.audio-hal-2-0 /vendor/bin/hw/android.hardware.audio@2.0-service
    override
    class hal
    user audioserver
    # media gid needed for /dev/fm (radio) and for /data/misc/media (tee)
    group audio camera drmrpc inet media mediadrm net_bt net_bt_admin net_bw_acct oem_2901 wakelock
    capabilities BLOCK_SUSPEND
    ioprio rt 4
    writepid /dev/cpuset/foreground/tasks /dev/stune/foreground/tasks
    # audioflinger restarts itself when it loses connection with the hal
    # and its .rc file has an "onrestart restart audio-hal" rule, thus
    # an additional auto-restart from the init process isn't needed.
    oneshot
    interface android.hardware.audio@5.0::IDevicesFactory default
    interface android.hardware.audio@4.0::IDevicesFactory default
    interface android.hardware.audio@2.0::IDevicesFactory default