import init.${ro.hardware}.usb.rc
import init.${ro.hardware}.power.rc

on init
    # mount debugfs
    mount debugfs /sys/kernel/debug /sys/kernel/debug mode=755

    # disable transparent huge pages
    write /sys/kernel/mm/transparent_hugepage/enabled "never"

    # Initialize cpusets to boot-time values
    write /dev/cpuset/foreground/cpus 0-7
    write /dev/cpuset/background/cpus 0-7
    write /dev/cpuset/system-background/cpus 0-7
    write /dev/cpuset/top-app/cpus 0-7

    # 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

    start watchdogd

on fs
    mount_all /vendor/etc/init/fstab.${ro.hardware}
    setprop ro.crypto.fuse_sdcard false

on post-fs
    # For legacy support
    # See storage config details at http://source.android.com/tech/storage/
    # since /storage is mounted on post-fs in init.rc
    symlink /sdcard /storage/sdcard0

    # BT LED sysfs entry
    write /sys/class/leds/bt_active/trigger "hci1rx"

    chmod 0666 /dev/ump
    chmod 0666 /dev/ion
    chmod 0666 /dev/graphics/fb0

# fake some battery state
    setprop status.battery.state Slow
    setprop status.battery.level 5
    setprop status.battery.level_raw  50
    setprop status.battery.level_scale 9

# Set Display density
    setprop ro.sf.lcd_density 160

# Set supported opengles version
    setprop ro.opengles.version 196608

# If an app forces screen rotation, revert it once the apps closes
    setprop persist.demo.rotationlock 1

# enable Google-specific location features,
# like NetworkLocationProvider and LocationCollector
    setprop ro.com.google.locationfeatures 1

# enable test harness
    setprop ro.test_harness true

on post-fs-data
    mkdir /data/media 0770 media_rw media_rw
    mkdir /data/misc/gatord 0700 root root
    # Set SELinux security contexts for files used by lava.
    restorecon_recursive /data/local/tmp/lava

on zygote-start
    mkdir /data/vendor/wifi 0770 wifi wifi
    mkdir /data/vendor/wifi/wpa 0770 wifi wifi
    mkdir /data/vendor/wifi/wpa/sockets 0770 wifi wifi

on property:sys.boot_completed=1
    # update cpuset now that processors are up
    # Foreground should contain most cores (7 is reserved for top-app)
    write /dev/cpuset/foreground/cpus 0-6

    # top-app gets all cpus (including reserved #7)
    write /dev/cpuset/top-app/cpus 0-7

    #background contains a small subset (generally one little core)
    write /dev/cpuset/background/cpus 0

    # add system-background cpuset, a new cpuset for system services
    # that should not run on larger cores
    # system-background is for system tasks that should only run on
    # little cores, not on bigs to be used only by init
    write /dev/cpuset/system-background/cpus 0-3

on property:usb_speed.switch=high
    write /sys/kernel/debug/f72c0000.usb/config "0"

on property:usb_speed.switch=full
    write /sys/kernel/debug/f72c0000.usb/config "1"

#userspace daemon needed for bluetooth
service uim /vendor/bin/uim
    class main
    user bluetooth
    group bluetooth net_bt_admin system
    oneshot

service wpa_supplicant /system/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
     socket wpa_wlan0 dgram 660 wifi wifi
     class main
     disabled
     oneshot

# Set watchdog timer to 30 seconds and pet it every 10 seconds to get a 20 second margin
service watchdogd /sbin/watchdogd 10 20
    class core
    oneshot
    seclabel u:r:watchdogd:s0

service bugreport /system/bin/dumpstate -d -p -B -z \
    -o /data/user_de/0/com.android.shell/files/bugreports/bugreport
    class main
    disabled
    oneshot
