diff --git a/aoc/aoc.mk b/aoc/aoc.mk index 2bbc8d3..2eadb08 100644 --- a/aoc/aoc.mk +++ b/aoc/aoc.mk @@ -1,3 +1,26 @@ BOARD_VENDOR_SEPOLICY_DIRS += device/google/gs-common/aoc/sepolicy -PRODUCT_PACKAGES += dump_aoc +PRODUCT_PACKAGES += dump_aoc \ + aocd + +ifeq (,$(filter aosp_%,$(TARGET_PRODUCT))) +# IAudioMetricExt HIDL +PRODUCT_PACKAGES += \ + vendor.google.audiometricext@1.0-service-vendor +endif + +# If AoC Daemon is not present on this build, load firmware at boot via rc +ifeq ($(wildcard vendor/google/whitechapel/aoc/aocd),) +PRODUCT_COPY_FILES += \ + device/google/gs-common/aoc/conf/init.aoc.nodaemon.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/init.aoc.rc +else +PRODUCT_COPY_FILES += \ + device/google/gs-common/aoc/conf/init.aoc.daemon.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/init.aoc.rc +endif + +# AoC debug support +PRODUCT_PACKAGES_DEBUG += \ + aocdump \ + aocutil \ + aoc_audio_cfg \ + vp_util diff --git a/aoc/conf/init.aoc.daemon.rc b/aoc/conf/init.aoc.daemon.rc new file mode 100644 index 0000000..1cf204e --- /dev/null +++ b/aoc/conf/init.aoc.daemon.rc @@ -0,0 +1 @@ +# AoC firmware will be loaded by Daemon \ No newline at end of file diff --git a/aoc/conf/init.aoc.nodaemon.rc b/aoc/conf/init.aoc.nodaemon.rc new file mode 100644 index 0000000..329d7d3 --- /dev/null +++ b/aoc/conf/init.aoc.nodaemon.rc @@ -0,0 +1,3 @@ +# Load AoC firmware and boot +on property:vendor.all.modules.ready=1 + write /sys/devices/platform/19000000.aoc/firmware aoc.bin \ No newline at end of file diff --git a/aoc/sepolicy/aocd.te b/aoc/sepolicy/aocd.te new file mode 100644 index 0000000..69b0af0 --- /dev/null +++ b/aoc/sepolicy/aocd.te @@ -0,0 +1,21 @@ +type aocd, domain; +type aocd_exec, vendor_file_type, exec_type, file_type; +init_daemon_domain(aocd) + +# access persist files +allow aocd mnt_vendor_file:dir search; +allow aocd persist_file:dir search; +r_dir_file(aocd, persist_aoc_file); + +# sysfs operations +allow aocd sysfs_aoc:dir search; +allow aocd sysfs_aoc_firmware:file w_file_perms; + +# dev operations +allow aocd aoc_device:chr_file rw_file_perms; + +# allow inotify to watch for additions/removals from /dev +allow aocd device:dir r_dir_perms; + +# set properties +set_prop(aocd, vendor_aoc_prop) diff --git a/aoc/sepolicy/aocdump.te b/aoc/sepolicy/aocdump.te new file mode 100644 index 0000000..0801ec0 --- /dev/null +++ b/aoc/sepolicy/aocdump.te @@ -0,0 +1,18 @@ +type aocdump, domain; +type aocdump_exec, vendor_file_type, exec_type, file_type; +init_daemon_domain(aocdump) + +userdebug_or_eng(` + # Permit communication with AoC + allow aocdump aoc_device:chr_file rw_file_perms; + + allow aocdump radio_vendor_data_file:dir rw_dir_perms; + allow aocdump radio_vendor_data_file:file create_file_perms; + allow aocdump wifi_logging_data_file:dir create_dir_perms; + allow aocdump wifi_logging_data_file:file create_file_perms; + set_prop(aocdump, vendor_audio_prop); + r_dir_file(aocdump, proc_asound) + + allow aocdump self:unix_stream_socket create_stream_socket_perms; + allow aocdump audio_vendor_data_file:sock_file { create unlink }; +') diff --git a/aoc/sepolicy/device.te b/aoc/sepolicy/device.te new file mode 100644 index 0000000..fbd2b32 --- /dev/null +++ b/aoc/sepolicy/device.te @@ -0,0 +1,5 @@ +# AOC device +type aoc_device, dev_type; + +# AMCS device +type amcs_device, dev_type; diff --git a/aoc/sepolicy/file.te b/aoc/sepolicy/file.te new file mode 100644 index 0000000..649e161 --- /dev/null +++ b/aoc/sepolicy/file.te @@ -0,0 +1,16 @@ +# sysfs +type sysfs_aoc_dumpstate, sysfs_type, fs_type; +type sysfs_aoc_boottime, sysfs_type, fs_type; +type sysfs_aoc_firmware, sysfs_type, fs_type; +type sysfs_aoc, sysfs_type, fs_type; +type sysfs_aoc_reset, sysfs_type, fs_type; + +# persist +type persist_aoc_file, file_type, vendor_persist_type; +type persist_audio_file, file_type, vendor_persist_type; + +# vendor +type aoc_audio_file, file_type, vendor_file_type; + +# data +type audio_vendor_data_file, file_type, data_file_type; diff --git a/aoc/sepolicy/file_contexts b/aoc/sepolicy/file_contexts index bfeb604..399a6dc 100644 --- a/aoc/sepolicy/file_contexts +++ b/aoc/sepolicy/file_contexts @@ -1 +1,38 @@ -/vendor/bin/dump/dump_aoc u:object_r:dump_aoc_exec:s0 +# AoC devices +/dev/acd-audio_output_tuning u:object_r:aoc_device:s0 +/dev/acd-audio_bulk_tx u:object_r:aoc_device:s0 +/dev/acd-audio_bulk_rx u:object_r:aoc_device:s0 +/dev/acd-audio_input_tuning u:object_r:aoc_device:s0 +/dev/acd-audio_input_bulk_tx u:object_r:aoc_device:s0 +/dev/acd-audio_input_bulk_rx u:object_r:aoc_device:s0 +/dev/acd-sound_trigger u:object_r:aoc_device:s0 +/dev/acd-hotword_notification u:object_r:aoc_device:s0 +/dev/acd-hotword_pcm u:object_r:aoc_device:s0 +/dev/acd-ambient_pcm u:object_r:aoc_device:s0 +/dev/acd-model_data u:object_r:aoc_device:s0 +/dev/acd-debug u:object_r:aoc_device:s0 +/dev/acd-audio_tap[0-9]* u:object_r:aoc_device:s0 +/dev/acd-audio_dcdoff_ref u:object_r:aoc_device:s0 +/dev/acd-com.google.usf u:object_r:aoc_device:s0 +/dev/acd-com.google.usf.non_wake_up u:object_r:aoc_device:s0 +/dev/acd-logging u:object_r:aoc_device:s0 +/dev/aoc u:object_r:aoc_device:s0 +/dev/acd-audio_ap_offload_rx u:object_r:aoc_device:s0 +/dev/acd-audio_ap_offload_tx u:object_r:aoc_device:s0 +/dev/amcs u:object_r:amcs_device:s0 + +# AoC vendor binaries +/vendor/bin/aocd u:object_r:aocd_exec:s0 +/vendor/bin/aocdump u:object_r:aocdump_exec:s0 +/vendor/bin/dump/dump_aoc u:object_r:dump_aoc_exec:s0 +/vendor/bin/hw/vendor\.google\.audiometricext@1\.0-service-vendor u:object_r:hal_audiometricext_default_exec:s0 + +# AoC audio files +/vendor/etc/aoc(/.*)? u:object_r:aoc_audio_file:s0 + +# Aoc persist files +/mnt/vendor/persist/aoc(/.*)? u:object_r:persist_aoc_file:s0 +/mnt/vendor/persist/audio(/.*)? u:object_r:persist_audio_file:s0 + +# Audio data files +/data/vendor/audio(/.*)? u:object_r:audio_vendor_data_file:s0 diff --git a/aoc/sepolicy/genfs_contexts b/aoc/sepolicy/genfs_contexts new file mode 100644 index 0000000..331b67a --- /dev/null +++ b/aoc/sepolicy/genfs_contexts @@ -0,0 +1,12 @@ +# pixelstat_vendor +genfscon sysfs /devices/platform/audiometrics/codec_state u:object_r:sysfs_pixelstats:s0 +genfscon sysfs /devices/platform/audiometrics/hs_codec_state u:object_r:sysfs_pixelstats:s0 +genfscon sysfs /devices/platform/audiometrics/speaker_impedance u:object_r:sysfs_pixelstats:s0 +genfscon sysfs /devices/platform/audiometrics/speaker_excursion u:object_r:sysfs_pixelstats:s0 +genfscon sysfs /devices/platform/audiometrics/speaker_heartbeat u:object_r:sysfs_pixelstats:s0 +genfscon sysfs /devices/platform/audiometrics/speaker_temp u:object_r:sysfs_pixelstats:s0 +genfscon sysfs /devices/platform/audiometrics/mic_broken_degrade u:object_r:sysfs_pixelstats:s0 +genfscon sysfs /devices/platform/audiometrics/codec_crashed_counter u:object_r:sysfs_pixelstats:s0 +genfscon sysfs /devices/platform/audiometrics/hwinfo_part_number u:object_r:sysfs_pixelstats:s0 +genfscon sysfs /devices/platform/audiometrics/ams_rate_read_once u:object_r:sysfs_pixelstats:s0 + diff --git a/aoc/sepolicy/hal_audio_default.te b/aoc/sepolicy/hal_audio_default.te new file mode 100644 index 0000000..aa462bf --- /dev/null +++ b/aoc/sepolicy/hal_audio_default.te @@ -0,0 +1,35 @@ +vndbinder_use(hal_audio_default) +hwbinder_use(hal_audio_default) + +allow hal_audio_default audio_vendor_data_file:dir rw_dir_perms; +allow hal_audio_default audio_vendor_data_file:file create_file_perms; + +r_dir_file(hal_audio_default, aoc_audio_file); +r_dir_file(hal_audio_default, mnt_vendor_file); +r_dir_file(hal_audio_default, persist_audio_file); + +allow hal_audio_default persist_file:dir search; +allow hal_audio_default aoc_device:file rw_file_perms; +allow hal_audio_default aoc_device:chr_file rw_file_perms; + +allow hal_audio_default hal_audio_ext_hwservice:hwservice_manager { find add }; + +allow hal_audio_default amcs_device:file rw_file_perms; +allow hal_audio_default amcs_device:chr_file rw_file_perms; +allow hal_audio_default sysfs_pixelstats:file rw_file_perms; + +#allow access to DMABUF Heaps for AAudio API +allow hal_audio_default dmabuf_heap_device:chr_file r_file_perms; + +set_prop(hal_audio_default, vendor_audio_prop); + +hal_client_domain(hal_audio_default, hal_health); +hal_client_domain(hal_audio_default, hal_thermal); +allow hal_audio_default fwk_sensor_hwservice:hwservice_manager find; + +userdebug_or_eng(` + allow hal_audio_default self:unix_stream_socket create_stream_socket_perms; + allow hal_audio_default audio_vendor_data_file:sock_file { create unlink }; +') + +wakelock_use(hal_audio_default); diff --git a/aoc/sepolicy/hal_audiometricext_default.te b/aoc/sepolicy/hal_audiometricext_default.te new file mode 100644 index 0000000..5358eac --- /dev/null +++ b/aoc/sepolicy/hal_audiometricext_default.te @@ -0,0 +1,12 @@ +type hal_audiometricext_default, domain; +type hal_audiometricext_default_exec, vendor_file_type, exec_type, file_type; +init_daemon_domain(hal_audiometricext_default) + +allow hal_audiometricext_default amcs_device:chr_file rw_file_perms; +allow hal_audiometricext_default sysfs_pixelstats:file rw_file_perms; + +get_prop(hal_audiometricext_default, vendor_audio_prop); +get_prop(hal_audiometricext_default, hwservicemanager_prop); + +hwbinder_use(hal_audiometricext_default); +add_hwservice(hal_audiometricext_default, hal_audiometricext_hwservice); diff --git a/aoc/sepolicy/hwservice.te b/aoc/sepolicy/hwservice.te new file mode 100644 index 0000000..b7bf5d9 --- /dev/null +++ b/aoc/sepolicy/hwservice.te @@ -0,0 +1,6 @@ +# Audio +type hal_audio_ext_hwservice, hwservice_manager_type; + +# AudioMetric +type hal_audiometricext_hwservice, hwservice_manager_type; + diff --git a/aoc/sepolicy/hwservice_contexts b/aoc/sepolicy/hwservice_contexts new file mode 100644 index 0000000..f06c846 --- /dev/null +++ b/aoc/sepolicy/hwservice_contexts @@ -0,0 +1,4 @@ +# Audio +vendor.google.whitechapel.audio.audioext::IAudioExt u:object_r:hal_audio_ext_hwservice:s0 +vendor.google.audiometricext::IAudioMetricExt u:object_r:hal_audiometricext_hwservice:s0 + diff --git a/aoc/sepolicy/property.te b/aoc/sepolicy/property.te new file mode 100644 index 0000000..d38e3ec --- /dev/null +++ b/aoc/sepolicy/property.te @@ -0,0 +1,4 @@ +# AoC +vendor_internal_prop(vendor_aoc_prop) +# Audio +vendor_internal_prop(vendor_audio_prop) diff --git a/aoc/sepolicy/property_contexts b/aoc/sepolicy/property_contexts new file mode 100644 index 0000000..e957de6 --- /dev/null +++ b/aoc/sepolicy/property_contexts @@ -0,0 +1,13 @@ +# AoC +vendor.aoc.firmware.version u:object_r:vendor_aoc_prop:s0 + +# for audio +vendor.audio_hal.period_multiplier u:object_r:vendor_audio_prop:s0 +vendor.audiodump.enable u:object_r:vendor_audio_prop:s0 +persist.vendor.audio. u:object_r:vendor_audio_prop:s0 +vendor.audiodump.log.ondemand u:object_r:vendor_audio_prop:s0 +vendor.audiodump.log.config u:object_r:vendor_audio_prop:s0 +vendor.audiodump.output.dir u:object_r:vendor_audio_prop:s0 +vendor.audiodump.encode.disable u:object_r:vendor_audio_prop:s0 +vendor.audiodump.log.cca.updated u:object_r:vendor_audio_prop:s0 +vendor.audiodump.cca.config u:object_r:vendor_audio_prop:s0