move aoc settings to gs-common

Bug: 248426917
Test: boot with aoc launched
Change-Id: I7f3e65f9b27510bff657ca46c9688932a0352437
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