on early-init
#    loglevel 8

    mount securityfs securityfs /sys/kernel/security

    setprop ro.sf.lcd_density ${ro.boot.lcd_density}
    setprop ro.hardware.egl ${ro.boot.hardware.egl}
    setprop debug.sf.vsync_reactor_ignore_present_fences true
    setprop ro.hardware.gralloc ${ro.boot.hardware.gralloc}
    setprop ro.hardware.hwcomposer ${ro.boot.hardware.hwcomposer}
    setprop ro.hardware.vulkan ${ro.boot.hardware.vulkan}
    setprop ro.cpuvulkan.version ${ro.boot.cpuvulkan.version}
    setprop ro.hw_timeout_multiplier ${ro.boot.hw_timeout_multiplier}

    # start module load in the background
    start vendor.insmod_sh

on init
    # ZRAM setup
    write /sys/block/zram0/comp_algorithm lz4

    # EAS uclamp interfaces
    mkdir /dev/cpuctl/foreground
    mkdir /dev/cpuctl/background
    mkdir /dev/cpuctl/top-app
    mkdir /dev/cpuctl/rt
    chown system system /dev/cpuctl
    chown system system /dev/cpuctl/foreground
    chown system system /dev/cpuctl/background
    chown system system /dev/cpuctl/top-app
    chown system system /dev/cpuctl/rt
    chown system system /dev/cpuctl/tasks
    chown system system /dev/cpuctl/foreground/tasks
    chown system system /dev/cpuctl/background/tasks
    chown system system /dev/cpuctl/top-app/tasks
    chown system system /dev/cpuctl/rt/tasks
    chmod 0664 /dev/cpuctl/tasks
    chmod 0664 /dev/cpuctl/foreground/tasks
    chmod 0664 /dev/cpuctl/background/tasks
    chmod 0664 /dev/cpuctl/top-app/tasks
    chmod 0664 /dev/cpuctl/rt/tasks

on fs
    mkdir /mnt/vendor/shared 0770 system system

    # Mount everything that does not require fsck
    mount_all --early
    restorecon_recursive /vendor

    start setup_wifi
    # works around framework netiface enumeration issue
    start rename_eth0

    # So GceBootReporter can print to kmsg
    chmod 622 /dev/kmsg

on post-fs
    # set RLIMIT_MEMLOCK to 64MB
    setrlimit 8 67108864 67108864

    start bt_vhci_forwarder

on post-fs-data
    mkdir /data/vendor/modem_dump 0777 system system
    mkdir /data/vendor/radio 0777 system system

on late-fs
    # Wait for keymaster
    exec_start wait_for_keymaster

    # Mount RW partitions which need run fsck
    mount_all --late

    write /dev/kmsg "GUEST_BUILD_FINGERPRINT: ${ro.build.fingerprint}"

on boot
    chmod 0660 /dev/cpuctl
    mkdir /data/vendor/wifi 0770 wifi wifi
    mkdir /data/vendor/wifi/wpa 0770 wifi wifi
    mkdir /data/vendor/wifi/wpa/sockets 0770 wifi wifi
    start socket_vsock_proxy
    setprop ro.hardware.audio.primary goldfish

service bt_vhci_forwarder /vendor/bin/bt_vhci_forwarder -virtio_console_dev=${vendor.ser.bt-uart}
    user bluetooth
    group bluetooth

service setup_wifi /vendor/bin/setup_wifi
    oneshot

service rename_eth0 /vendor/bin/rename_netiface eth0 rmnet0
    oneshot

on property:sys.boot_completed=1
    trigger sys-boot-completed-set

# We want one opportunity per boot to enable zram, so we
# use a trigger we fire from the above stanza. If
# persist.sys.zram_enabled becomes true after boot,
# we don't want to run swapon_all at that time.
on sys-boot-completed-set && property:persist.sys.zram_enabled=1
    swapon_all

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

service socket_vsock_proxy /vendor/bin/socket_vsock_proxy -server=vsock -tcp_port=5555 -vsock_port=6520

service seriallogging /system/bin/logcat -b all -v threadtime -f /dev/hvc2 *:V
    class main
    user logd
    group root logd

service vsoc_input_service /vendor/bin/vsoc_input_service -touch_port=${ro.boot.vsock_touch_port} -keyboard_port=${ro.boot.vsock_keyboard_port}
    group root uhid
    disabled

on early-boot && property:ro.boot.vsock_touch_port=*
   enable vsoc_input_service
   start vsoc_input_service

on early-boot && property:ro.boot.vsock_keyboard_port=*
   enable vsoc_input_service
   start vsoc_input_service

service wpa_supplicant /vendor/bin/hw/wpa_supplicant -g@android:wpa_wlan0
    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
    interface android.hardware.wifi.supplicant@1.3::ISupplicant default
    interface android.hardware.wifi.supplicant@1.4::ISupplicant default
    socket wpa_wlan0 dgram 660 wifi wifi
    group system wifi inet
    disabled
    oneshot

service bugreport /system/bin/dumpstate -d -p -z
    class main
    disabled
    oneshot
    keycodes 30 48

# TODO: disable this service once cuttlefish implements system suspend
service suspend_blocker /vendor/bin/suspend_blocker
    class early_hal # Start together with system_suspend HAL
    group system
    user root
