diff --git a/Android.bp b/Android.bp new file mode 100644 index 00000000..9b83b174 --- /dev/null +++ b/Android.bp @@ -0,0 +1,36 @@ +soong_namespace { + imports: [ + "hardware/google/interfaces", + "hardware/google/pixel", + ], +} + +package { + default_applicable_licenses: ["device_google_gs201_license"], +} + +// Added automatically by a large-scale-change that took the approach of +// 'apply every license found to every target'. While this makes sure we respect +// every license restriction, it may not be entirely correct. +// +// e.g. GPL in an MIT project might only apply to the contrib/ directory. +// +// Please consider splitting the single license below into multiple licenses, +// taking care not to lose any license_kind information, and overriding the +// default license using the 'licenses: [...]' property on targets as needed. +// +// For unused files, consider creating a 'fileGroup' with "//visibility:private" +// to attach the license to, and including a comment whether the files may be +// used in the current project. +// See: http://go/android-license-faq +license { + name: "device_google_gs201_license", + visibility: [":__subpackages__"], + license_kinds: [ + "SPDX-license-identifier-Apache-2.0", + "SPDX-license-identifier-BSD", + ], + license_text: [ + "NOTICE", + ], +} diff --git a/Android.mk b/Android.mk new file mode 100644 index 00000000..367e845a --- /dev/null +++ b/Android.mk @@ -0,0 +1,30 @@ +# +# Copyright (C) 2011 The Android Open-Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# WARNING: Everything listed here will be built on ALL platforms, +# including x86, the universal, and the SDK. Modules must be uniquely +# named (liblights.panda), and must build everywhere, or limit themselves +# to only building on ARM if they include assembly. Individual makefiles +# are responsible for having their own logic, for fine-grained control. + +LOCAL_PATH := $(call my-dir) + +# if some modules are built directly from this directory (not subdirectories), +# their rules should be written here. + +ifeq ($(USES_DEVICE_GOOGLE_GS201),true) + include $(call first-makefiles-under,$(LOCAL_PATH)) +endif diff --git a/BoardConfig-common.mk b/BoardConfig-common.mk new file mode 100644 index 00000000..93f3f0aa --- /dev/null +++ b/BoardConfig-common.mk @@ -0,0 +1,411 @@ +# +# Copyright (C) 2019 The Android Open-Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +include build/make/target/board/BoardConfigMainlineCommon.mk +include build/make/target/board/BoardConfigPixelCommon.mk + +# Should be uncommented after fixing vndk-sp violation is fixed. +PRODUCT_FULL_TREBLE_OVERRIDE := true + +# HACK : To fix up after bring up multimedia devices. +TARGET_SOC := gs201 + +TARGET_SOC_NAME := google + +USES_DEVICE_GOOGLE_GS201 := true + +TARGET_ARCH := arm64 +TARGET_ARCH_VARIANT := armv8-2a +TARGET_CPU_ABI := arm64-v8a +TARGET_CPU_VARIANT := cortex-a55 +TARGET_CPU_VARIANT_RUNTIME := cortex-a55 + +BOARD_KERNEL_CMDLINE += dyndbg=\"func alloc_contig_dump_pages +p\" +BOARD_KERNEL_CMDLINE += earlycon=exynos4210,0x10A00000 console=ttySAC0,115200 androidboot.console=ttySAC0 printk.devkmsg=on +BOARD_KERNEL_CMDLINE += cma_sysfs.experimental=Y +BOARD_KERNEL_CMDLINE += cgroup_disable=memory +BOARD_KERNEL_CMDLINE += rcupdate.rcu_expedited=1 rcu_nocbs=all +BOARD_KERNEL_CMDLINE += stack_depot_disable=off page_pinner=on +BOARD_KERNEL_CMDLINE += swiotlb=1024 +BOARD_BOOTCONFIG += androidboot.boot_devices=14700000.ufs + +TARGET_NO_BOOTLOADER := true +TARGET_NO_RADIOIMAGE := true +ifneq (,$(filter userdebug eng,$(TARGET_BUILD_VARIANT))) +BOARD_PREBUILT_BOOTIMAGE := $(wildcard $(TARGET_KERNEL_DIR)/boot.img) +else +BOARD_PREBUILT_BOOTIMAGE := $(wildcard $(TARGET_KERNEL_DIR)/boot-user.img) +endif +ifneq (,$(BOARD_PREBUILT_BOOTIMAGE)) +TARGET_NO_KERNEL := true +else +TARGET_NO_KERNEL := false +endif +BOARD_USES_GENERIC_KERNEL_IMAGE := true +BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT := true +BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT := true +TARGET_RECOVERY_WIPE := device/google/gs201/conf/recovery.wipe + +# This is the fstab file that will be included in the recovery image. Note that +# recovery doesn't care about the encryption settings, so it doesn't matter +# whether we use the normal or the fips fstab here. +TARGET_RECOVERY_FSTAB_GENRULE := gen_fstab.gs201 + +TARGET_RECOVERY_PIXEL_FORMAT := ABGR_8888 +TARGET_RECOVERY_UI_MARGIN_HEIGHT := 165 +TARGET_RECOVERY_UI_LIB := \ + librecovery_ui_pixel \ + libfstab + +AB_OTA_UPDATER := true + +AB_OTA_PARTITIONS += \ + system \ + system_dlkm \ + system_ext \ + product \ + vbmeta_system + +ifneq ($(PRODUCT_BUILD_BOOT_IMAGE),false) +AB_OTA_PARTITIONS += boot +endif +ifneq ($(PRODUCT_BUILD_INIT_BOOT_IMAGE), false) +AB_OTA_PARTITIONS += init_boot +endif +ifneq ($(PRODUCT_BUILD_VENDOR_BOOT_IMAGE),false) +AB_OTA_PARTITIONS += vendor_boot +AB_OTA_PARTITIONS += dtbo +endif +ifneq ($(PRODUCT_BUILD_VBMETA_IMAGE),false) +AB_OTA_PARTITIONS += vbmeta +endif +ifneq ($(PRODUCT_BUILD_PVMFW_IMAGE),false) +AB_OTA_PARTITIONS += pvmfw +endif + +# EMULATOR common modules +BOARD_EMULATOR_COMMON_MODULES := liblight + +OVERRIDE_RS_DRIVER := libRSDriverArm.so +BOARD_EGL_CFG := device/google/gs201/conf/egl.cfg +#BOARD_USES_HGL := true +USE_OPENGL_RENDERER := true +NUM_FRAMEBUFFER_SURFACE_BUFFERS := 3 +BOARD_USES_EXYNOS5_COMMON_GRALLOC := true +BOARD_USES_EXYNOS_GRALLOC_VERSION := $(DEVICE_USES_EXYNOS_GRALLOC_VERSION) +BOARD_USES_ALIGN_RESTRICTION := false +BOARD_USES_GRALLOC_ION_SYNC := true + +# This should be the same value as USE_SWIFTSHADER in device.mk +BOARD_USES_SWIFTSHADER := false + +# Gralloc4 +ifeq ($(BOARD_USES_EXYNOS_GRALLOC_VERSION),4) + +ifeq ($(BOARD_USES_SWIFTSHADER),true) +$(call soong_config_set,arm_gralloc,gralloc_arm_no_external_afbc,true) +$(call soong_config_set,arm_gralloc,mali_gpu_support_afbc_basic,false) +$(call soong_config_set,arm_gralloc,mali_gpu_support_afbc_wideblk,false) +$(call soong_config_set,arm_gralloc,gralloc_init_afbc,false) +$(call soong_config_set,arm_gralloc,dpu_support_1010102_afbc,false) +else +$(call soong_config_set,arm_gralloc,gralloc_arm_no_external_afbc,false) +$(call soong_config_set,arm_gralloc,mali_gpu_support_afbc_basic,true) +$(call soong_config_set,arm_gralloc,mali_gpu_support_afbc_wideblk,true) +$(call soong_config_set,arm_gralloc,gralloc_init_afbc,true) +$(call soong_config_set,arm_gralloc,dpu_support_1010102_afbc,true) +endif # ifeq ($(BOARD_USES_SWIFTSHADER),true) +$(call soong_config_set,arm_gralloc,gralloc_ion_sync_on_lock,$(BOARD_USES_GRALLOC_ION_SYNC)) +endif # ifeq ($(BOARD_USES_EXYNOS_GRALLOC_VERSION),4) + +# libVendorGraphicbuffer +ifeq ($(BOARD_USES_EXYNOS_GRALLOC_VERSION),4) +$(call soong_config_set,vendorgraphicbuffer,gralloc_version,four) +else +$(call soong_config_set,vendorgraphicbuffer,gralloc_version,three) +endif + +# Graphics +#BOARD_USES_EXYNOS_DATASPACE_FEATURE := true + +# Enable chain partition for system. +BOARD_AVB_VBMETA_SYSTEM := system system_dlkm system_ext product +BOARD_AVB_VBMETA_SYSTEM_KEY_PATH := external/avb/test/data/testkey_rsa2048.pem +BOARD_AVB_VBMETA_SYSTEM_ALGORITHM := SHA256_RSA2048 +BOARD_AVB_VBMETA_SYSTEM_ROLLBACK_INDEX := $(PLATFORM_SECURITY_PATCH_TIMESTAMP) +BOARD_AVB_VBMETA_SYSTEM_ROLLBACK_INDEX_LOCATION := 1 + +# Enable chained vbmeta for boot images +BOARD_AVB_BOOT_KEY_PATH := external/avb/test/data/testkey_rsa2048.pem +BOARD_AVB_BOOT_ALGORITHM := SHA256_RSA2048 +BOARD_AVB_BOOT_ROLLBACK_INDEX := $(PLATFORM_SECURITY_PATCH_TIMESTAMP) +BOARD_AVB_BOOT_ROLLBACK_INDEX_LOCATION := 2 + +# Enable chained vbmeta for init_boot images +BOARD_AVB_INIT_BOOT_KEY_PATH := external/avb/test/data/testkey_rsa2048.pem +BOARD_AVB_INIT_BOOT_ALGORITHM := SHA256_RSA2048 +BOARD_AVB_INIT_BOOT_ROLLBACK_INDEX := $(PLATFORM_SECURITY_PATCH_TIMESTAMP) +BOARD_AVB_INIT_BOOT_ROLLBACK_INDEX_LOCATION := 4 + +TARGET_USERIMAGES_USE_EXT4 := true +TARGET_USERIMAGES_USE_F2FS := true +BOARD_USERDATAIMAGE_PARTITION_SIZE := 11796480000 +BOARD_USERDATAIMAGE_FILE_SYSTEM_TYPE := f2fs +PRODUCT_FS_COMPRESSION := 1 +BOARD_FLASH_BLOCK_SIZE := 4096 +BOARD_MOUNT_SDCARD_RW := true + +# system.img +BOARD_SYSTEMIMAGE_FILE_SYSTEM_TYPE := erofs + +# product.img +BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE := erofs +TARGET_COPY_OUT_PRODUCT := product + +# system_ext.img +BOARD_SYSTEM_EXTIMAGE_FILE_SYSTEM_TYPE := erofs +TARGET_COPY_OUT_SYSTEM_EXT := system_ext + +# persist.img +BOARD_PERSISTIMAGE_FILE_SYSTEM_TYPE := f2fs + +######################## +# Video Codec +######################## +# 1. Exynos C2 +BOARD_USE_CSC_FILTER := false +BOARD_USE_DEC_SW_CSC := true +BOARD_USE_ENC_SW_CSC := true +BOARD_SUPPORT_MFC_ENC_RGB := true +BOARD_USE_BLOB_ALLOCATOR := false +######################## + +BOARD_SUPER_PARTITION_SIZE := 8531214336 +BOARD_SUPER_PARTITION_GROUPS := google_dynamic_partitions +# Set size to BOARD_SUPER_PARTITION_SIZE - overhead (4MiB) (b/182237294) +BOARD_GOOGLE_DYNAMIC_PARTITIONS_SIZE := 8527020032 +BOARD_GOOGLE_DYNAMIC_PARTITIONS_PARTITION_LIST := \ + system \ + system_dlkm \ + system_ext \ + product \ + vendor \ + vendor_dlkm + +# Set error limit to BOARD_SUPER_PARTITON_SIZE - 500MB +BOARD_SUPER_PARTITION_ERROR_LIMIT := 8006926336 + +# Build a separate system_dlkm partition +BOARD_USES_SYSTEM_DLKMIMAGE := true +BOARD_SYSTEM_DLKMIMAGE_FILE_SYSTEM_TYPE := erofs +TARGET_COPY_OUT_SYSTEM_DLKM := system_dlkm + +# +# AUDIO & VOICE +# +BOARD_USES_GENERIC_AUDIO := true + +$(call soong_config_set,aoc_audio_func,ext_hidl,true) + +ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT))) +$(call soong_config_set,aoc_audio_func,dump_usecase_data,true) +$(call soong_config_set,aoc_audio_func,hal_socket_control,true) +$(call soong_config_set,aoc_audio_func,record_tunning_keys,true) +endif + +ifneq (,$(filter aosp_%,$(TARGET_PRODUCT))) +$(call soong_config_set,aoc_audio_func,aosp_build,true) +endif + +# Primary AudioHAL Configuration +#BOARD_USE_COMMON_AUDIOHAL := true +#BOARD_USE_CALLIOPE_AUDIOHAL := false +#BOARD_USE_AUDIOHAL := true + +# Compress Offload Configuration +#BOARD_USE_OFFLOAD_AUDIO := true +#BOARD_USE_OFFLOAD_EFFECT := false + +# SoundTriggerHAL Configuration +#BOARD_USE_SOUNDTRIGGER_HAL := false + +# HWComposer +BOARD_HWC_VERSION := hwc3 +TARGET_RUNNING_WITHOUT_SYNC_FRAMEWORK := false +BOARD_HDMI_INCAPABLE := true +TARGET_USES_HWC2 := true +HWC_SKIP_VALIDATE := true +HWC_SUPPORT_RENDER_INTENT := true +HWC_SUPPORT_COLOR_TRANSFORM := true +#BOARD_USES_DISPLAYPORT := true +# if AFBC is enabled, must set ro.vendor.ddk.set.afbc=1 +BOARD_USES_EXYNOS_AFBC_FEATURE := true +#BOARD_USES_HDRUI_GLES_CONVERSION := true + +BOARD_LIBACRYL_DEFAULT_COMPOSITOR := fimg2d_gs201 +BOARD_LIBACRYL_G2D_HDR_PLUGIN := libacryl_hdr_plugin + +# HWCServices +BOARD_USES_HWC_SERVICES := true + +# WiFiDisplay +# BOARD_USES_VIRTUAL_DISPLAY := true +# BOARD_USES_VDS_EXYNOS_HWC := true +# BOARD_USES_WIFI_DISPLAY:= true +# BOARD_USES_EGL_SURFACE_FOR_COMPOSITION_MIXED := true +# BOARD_USES_VDS_YUV420SPM := true +# BOARD_USES_VDS_OTHERFORMAT := true +# BOARD_USES_VDS_DEBUG_FLAG := true +# BOARD_USES_DISABLE_COMPOSITIONTYPE_GLES := true +# BOARD_USES_SECURE_ENCODER_ONLY := true +# BOARD_USES_TSMUX := true + +# SCALER +BOARD_USES_DEFAULT_CSC_HW_SCALER := true +BOARD_DEFAULT_CSC_HW_SCALER := 4 +BOARD_USES_SCALER_M2M1SHOT := true + +# Device Tree +BOARD_USES_DT := true +BOARD_INCLUDE_DTB_IN_BOOTIMG := true +BOARD_PREBUILT_DTBIMAGE_DIR := $(TARGET_KERNEL_DIR) +BOARD_PREBUILT_DTBOIMAGE := $(BOARD_PREBUILT_DTBIMAGE_DIR)/dtbo.img + +# PLATFORM LOG +TARGET_USES_LOGD := true + +# LIBHWJPEG +#TARGET_USES_UNIVERSAL_LIBHWJPEG := true +#LIBHWJPEG_HWSCALER_ID := 0 + +#Keymaster +#BOARD_USES_KEYMASTER_VER1 := true + +#FMP +#BOARD_USES_FMP_DM_CRYPT := true +#BOARD_USES_FMP_FSCRYPTO := true +BOARD_USES_METADATA_PARTITION := true + +# SKIA +#BOARD_USES_SKIA_MULTITHREADING := true +#BOARD_USES_FIMGAPI_V5X := true + +# SECCOMP Policy +BOARD_SECCOMP_POLICY = device/google/gs201/seccomp_policy + +#CURL +BOARD_USES_CURL := true + +# Sensor HAL +BOARD_USES_EXYNOS_SENSORS_DUMMY := true + +# VISION +# Exynos vision framework (EVF) +#TARGET_USES_EVF := true +# HW acceleration +#TARGET_USES_VPU_KERNEL := true +#TARGET_USES_SCORE_KERNEL := true +#TARGET_USES_CL_KERNEL := false + +# exynos RIL +TARGET_EXYNOS_RIL_SOURCE := true +ENABLE_VENDOR_RIL_SERVICE := true + +# GNSS +# BOARD_USES_EXYNOS_GNSS_DUMMY := true + +# Bluetooth defines +# TODO(b/123695868): Remove the need for this +BOARD_BLUETOOTH_BDROID_BUILDCFG_INCLUDE_DIR := \ + build/make/target/board/mainline_arm64/bluetooth + +#VNDK +BOARD_PROPERTY_OVERRIDES_SPLIT_ENABLED := true +BOARD_VNDK_VERSION := current + +# H/W align restriction of MM IPs +BOARD_EXYNOS_S10B_FORMAT_ALIGN := 64 + +# NeuralNetworks +GPU_SOURCE_PRESENT := $(wildcard vendor/arm/mali/valhall) +GPU_PREBUILD_PRESENT := $(wildcard vendor/google_devices/zebu/prebuilts/libs) +ifneq (,$(strip $(GPU_SOURCE_PRESENT) $(GPU_PREBUILD_PRESENT))) +ARMNN_COMPUTE_CL_ENABLE := 1 +else +ARMNN_COMPUTE_CL_ENABLE := 0 +endif +ARMNN_COMPUTE_NEON_ENABLE := 1 + +# Boot.img +BOARD_RAMDISK_USE_LZ4 := true +#BOARD_KERNEL_BASE := 0x80000000 +#BOARD_KERNEL_PAGESIZE := 2048 +#BOARD_KERNEL_OFFSET := 0x80000 +#BOARD_RAMDISK_OFFSET := 0x4000000 +BOARD_BOOT_HEADER_VERSION := 4 +BOARD_MKBOOTIMG_ARGS += --header_version $(BOARD_BOOT_HEADER_VERSION) + +BOARD_INIT_BOOT_HEADER_VERSION := 4 +BOARD_MKBOOTIMG_INIT_ARGS += --header_version $(BOARD_INIT_BOOT_HEADER_VERSION) + +BOARD_VENDOR_RAMDISK_FRAGMENTS := dlkm +BOARD_VENDOR_RAMDISK_FRAGMENT.dlkm.KERNEL_MODULE_DIRS := top + +# Enable AVB2.0 +BOARD_AVB_ENABLE := true +BOARD_BOOTIMAGE_PARTITION_SIZE := 0x04000000 +BOARD_INIT_BOOT_IMAGE_PARTITION_SIZE := 0x800000 +BOARD_VENDOR_BOOTIMAGE_PARTITION_SIZE := 0x04000000 +BOARD_DTBOIMG_PARTITION_SIZE := 0x01000000 + +# System As Root +BOARD_BUILD_SYSTEM_ROOT_IMAGE := false + +# Vendor ramdisk image for kernel development +BOARD_BUILD_VENDOR_RAMDISK_IMAGE := true + +KERNEL_MODULE_DIR := $(TARGET_KERNEL_DIR) +KERNEL_MODULES := $(wildcard $(KERNEL_MODULE_DIR)/*.ko) + +BOARD_VENDOR_KERNEL_MODULES_BLOCKLIST_FILE := $(KERNEL_MODULE_DIR)/vendor_dlkm.modules.blocklist + +BOARD_VENDOR_RAMDISK_KERNEL_MODULES_LOAD := $(strip $(shell cat $(KERNEL_MODULE_DIR)/vendor_boot.modules.load)) +ifndef BOARD_VENDOR_RAMDISK_KERNEL_MODULES_LOAD +$(error vendor_boot.modules.load not found or empty) +endif +BOARD_VENDOR_RAMDISK_KERNEL_MODULES := $(addprefix $(KERNEL_MODULE_DIR)/, $(notdir $(BOARD_VENDOR_RAMDISK_KERNEL_MODULES_LOAD))) + +BOARD_VENDOR_KERNEL_MODULES_LOAD := $(strip $(shell cat $(KERNEL_MODULE_DIR)/vendor_dlkm.modules.load)) +ifndef BOARD_VENDOR_KERNEL_MODULES_LOAD +$(error vendor_dlkm.modules.load not found or empty) +endif +BOARD_VENDOR_KERNEL_MODULES := $(KERNEL_MODULES) + +# Using BUILD_COPY_HEADERS +BUILD_BROKEN_USES_BUILD_COPY_HEADERS := true + +include device/google/gs201-sepolicy/gs201-sepolicy.mk + +# Battery options +BOARD_KERNEL_CMDLINE += at24.write_timeout=100 + +# Enable larger logbuf +BOARD_KERNEL_CMDLINE += log_buf_len=1024K + +# Enable load module in parallel +BOARD_BOOTCONFIG += androidboot.load_modules_parallel=true + +# Protected VM firmware +BOARD_PVMFWIMAGE_PARTITION_SIZE := 0x00100000 diff --git a/CleanSpec.mk b/CleanSpec.mk new file mode 100644 index 00000000..34323de4 --- /dev/null +++ b/CleanSpec.mk @@ -0,0 +1,85 @@ +# Copyright (C) 2012 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# If you don't need to do a full clean build but would like to touch +# a file or delete some intermediate files, add a clean step to the end +# of the list. These steps will only be run once, if they haven't been +# run before. +# +# E.g.: +# $(call add-clean-step, touch -c external/sqlite/sqlite3.h) +# $(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/STATIC_LIBRARIES/libz_intermediates) +# +# Always use "touch -c" and "rm -f" or "rm -rf" to gracefully deal with +# files that are missing or have been moved. +# +# Use $(PRODUCT_OUT) to get to the "out/target/product/blah/" directory. +# Use $(OUT_DIR) to refer to the "out" directory. +# +# If you need to re-do something that's already mentioned, just copy +# the command and add it to the bottom of the list. E.g., if a change +# that you made last week required touching a file and a change you +# made today requires touching the same file, just copy the old +# touch step and add it to the end of the list. +# +# ************************************************ +# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST +# ************************************************ + +# For example: +#$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/AndroidTests_intermediates) +#$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/core_intermediates) +#$(call add-clean-step, find $(OUT_DIR) -type f -name "IGTalkSession*" -print0 | xargs -0 rm -f) +#$(call add-clean-step, rm -rf $(PRODUCT_OUT)/data/*) +$(call add-clean-step, find $(PRODUCT_OUT) -name "*.apk" | xargs rm) + +# ************************************************ +# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST +# ************************************************ +$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/SHARED_LIBRARIES/libsurfaceflinger_intermediates) +$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/SHARED_LIBRARIES/libui_intermediates) +$(call add-clean-step, rm -f $(PRODUCT_OUT)/root/default.prop) +$(call add-clean-step, rm -f $(TARGET_OUT)/build.prop) +$(call add-clean-step, rm -f $(PRODUCT_OUT)/system/etc/mixer_paths_lb.xml) +$(call add-clean-step, rm -f $(PRODUCT_OUT)/system/etc/permissions/android.hardware.camera.xml) + +$(call add-clean-step, rm -f $(PRODUCT_OUT)/root/*) +# Power HAL 1.0 +$(call add-clean-step, rm -f $(PRODUCT_OUT)/vendor/init/android.hardware.power@1.0-service.rc) +$(call add-clean-step, rm -f $(PRODUCT_OUT)/vendor/bin/hw/android.hardware.power@1.0-service) +# Power HAL HIDL +$(call add-clean-step, rm -f $(PRODUCT_OUT)/vendor/etc/init/android.hardware.power@1.3-service.pixel-libperfmgr.rc) + +# Health storage HAL +$(call add-clean-step, find $(PRODUCT_OUT) -type f -name "*android.hardware.health.storage@1.0*" -print0 | xargs -0 rm -f) + +# Update to USB HAL 1.3 +$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/bin/hw/android.hardware.usb@1.2-service.slider) +$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/init/android.hardware.usb@1.2-service.slider.rc) +$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/vintf/manifest/android.hardware.usb@1.2-service.slider.xml) +$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/bin/hw/android.hardware.usb@1.3-service.slider) +$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/init/android.hardware.usb@1.3-service.slider.rc) +$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/vintf/manifest/android.hardware.usb@1.3-service.slider.xml) + +# Power Stats HAL 1.0 to AIDL +$(call add-clean-step, rm -f $(PRODUCT_OUT)/vendor/bin/hw/android.hardware.power.stats@1.0-service.gs201) +$(call add-clean-step, rm -f $(PRODUCT_OUT)/vendor/etc/init/android.hardware.power.stats@1.0-service.gs201.rc) +$(call add-clean-step, rm -f $(PRODUCT_OUT)/vendor/etc/vintf/manifest/android.hardware.power.stats@1.0-service.gs201.xml) + +# Health HAL to AIDL +$(call add-clean-step, find $(PRODUCT_OUT)/system -type f -name "*charger*" -print0 | xargs -0 rm -f) +$(call add-clean-step, find $(PRODUCT_OUT)/vendor -type f -name "*health@*" -print0 | xargs -0 rm -f) +$(call add-clean-step, find $(PRODUCT_OUT)/recovery/root -type f -name "*charger*" -print0 | xargs -0 rm -f) +$(call add-clean-step, find $(PRODUCT_OUT)/recovery/root -type f -name "*health@*" -print0 | xargs -0 rm -f) diff --git a/NOTICE b/NOTICE new file mode 100644 index 00000000..316b4eb5 --- /dev/null +++ b/NOTICE @@ -0,0 +1,190 @@ + + Copyright (c) 2014, The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + diff --git a/aoc/conf/init.aoc.daemon.rc b/aoc/conf/init.aoc.daemon.rc new file mode 100644 index 00000000..1cf204e1 --- /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 00000000..329d7d34 --- /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/device.mk b/aoc/device.mk new file mode 100644 index 00000000..3c04b09f --- /dev/null +++ b/aoc/device.mk @@ -0,0 +1,26 @@ +PRODUCT_PACKAGES += \ + aocd + +BOARD_VENDOR_SEPOLICY_DIRS += device/google/gs201-sepolicy/aoc + +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/gs201/aoc/conf/init.aoc.nodaemon.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/init.aoc.rc +else +PRODUCT_COPY_FILES += \ + device/google/gs201/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/aosp_common.mk b/aosp_common.mk new file mode 100644 index 00000000..30d037c5 --- /dev/null +++ b/aosp_common.mk @@ -0,0 +1,51 @@ +# +# Copyright 2020 The Android Open-Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# +# All components inherited here go to system image +# +$(call inherit-product, $(SRC_TARGET_DIR)/product/core_64_bit_only.mk) +$(call inherit-product, $(SRC_TARGET_DIR)/product/generic_system.mk) + +# Enable CSI checking +PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS := relaxed + +# +# All components inherited here go to system_ext image +# +$(call inherit-product, $(SRC_TARGET_DIR)/product/handheld_system_ext.mk) +$(call inherit-product, $(SRC_TARGET_DIR)/product/telephony_system_ext.mk) + +# +# All components inherited here go to product image +# +$(call inherit-product, $(SRC_TARGET_DIR)/product/aosp_product.mk) + +# +# All components inherited here go to vendor image +# +# TODO(b/136525499): move *_vendor.mk into the vendor makefile later +$(call inherit-product, $(SRC_TARGET_DIR)/product/handheld_vendor.mk) +$(call inherit-product, $(SRC_TARGET_DIR)/product/telephony_vendor.mk) + +#$(call inherit-product, device/google/gs201/device.mk) +#$(call inherit-product-if-exists, vendor/google_devices/gs201/proprietary/device-vendor.mk) + +# TODO: fix +# PRODUCT_RESTRICT_VENDOR_FILES := all + +# b/189477034: Bypass build time check on uses_libs until vendor fixes all their apps +PRODUCT_BROKEN_VERIFY_USES_LIBRARIES := true diff --git a/compatibility_matrix.xml b/compatibility_matrix.xml new file mode 100644 index 00000000..264e8547 --- /dev/null +++ b/compatibility_matrix.xml @@ -0,0 +1,84 @@ + + + + android.frameworks.displayservice + 1.0 + + IDisplayService + default + + + + android.frameworks.schedulerservice + 1.0 + + ISchedulingPolicyService + default + + + + android.frameworks.sensorservice + 1.0 + + ISensorManager + default + + + + android.hardware.graphics.composer + 2.1 + + IComposer + vr + + + + android.hidl.allocator + 1.0 + + IAllocator + ashmem + + + + android.hidl.manager + 1.0 + + IServiceManager + default + + + + android.hidl.memory + 1.0 + + IMapper + ashmem + + + + android.hidl.token + 1.0 + + ITokenManager + default + + + + android.system.wifi.keystore + 1.0 + + IKeystore + default + + + + 0.0.0 + + diff --git a/component-overrides.xml b/component-overrides.xml new file mode 100644 index 00000000..9aa38e78 --- /dev/null +++ b/component-overrides.xml @@ -0,0 +1,23 @@ + + + + + + + + + + diff --git a/conf/Android.bp b/conf/Android.bp new file mode 100644 index 00000000..7f1541f6 --- /dev/null +++ b/conf/Android.bp @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2021 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// By default this device uses hardware-wrapped keys for storage encryption, +// which is intended to offer increased security over the traditional method +// (software keys). However, hardware-wrapped keys aren't compatible with +// FIPS-140 certification of the encryption hardware, and hence we have to +// disable the use of them in FIPS mode. This requires having two fstab files: +// one for the default mode, and one for FIPS mode selectable via +// androidboot.fstab_suffix on the kernel command line. These fstabs should be +// identical with the exception of the encryption settings, so to keep them in +// sync the rules below generate them from a template file. + +package { + // See: http://go/android-license-faq + // A large-scale-change added 'default_applicable_licenses' to import + // all of the 'license_kinds' from "device_google_gs201_license" + // to get the below license kinds: + // SPDX-license-identifier-Apache-2.0 + default_applicable_licenses: ["device_google_gs201_license"], +} + +genrule { + name: "gen_fstab.gs201", + srcs: ["fstab.gs201.in"], + out: ["fstab.gs201"], + cmd: "sed -e s/@fileencryption@/::inlinecrypt_optimized+wrappedkey_v0/" + + " -e s/@metadata_encryption@/:wrappedkey_v0/ $(in) > $(out)", +} + +genrule { + name: "gen_fstab.gs201-fips", + srcs: ["fstab.gs201.in"], + out: ["fstab.gs201-fips"], + cmd: "sed -e s/@fileencryption@/aes-256-xts/" + + " -e s/@metadata_encryption@/aes-256-xts/ $(in) > $(out)", +} + +prebuilt_etc { + name: "fstab.gs201", + src: ":gen_fstab.gs201", + vendor: true, + vendor_ramdisk_available: true, +} + +prebuilt_etc { + name: "fstab.gs201-fips", + src: ":gen_fstab.gs201-fips", + vendor: true, + vendor_ramdisk_available: true, +} diff --git a/conf/egl.cfg b/conf/egl.cfg new file mode 100644 index 00000000..4515dfd6 --- /dev/null +++ b/conf/egl.cfg @@ -0,0 +1 @@ +0 1 mali diff --git a/conf/fstab.gs201.in b/conf/fstab.gs201.in new file mode 100644 index 00000000..ccbabba7 --- /dev/null +++ b/conf/fstab.gs201.in @@ -0,0 +1,25 @@ +# Android fstab file. +# +# The filesystem that contains the filesystem checker binary (typically /system) cannot +# specify MF_CHECK, and must come before any filesystems that do specify MF_CHECK +# +# +system /system erofs ro wait,slotselect,avb=vbmeta_system,logical,first_stage_mount,readahead_size_kb=128 +# During compliance testing, the previous line would fail (because GSI is ext4), and the next line would be used to mount GSI. +system /system ext4 ro,barrier=1 wait,slotselect,avb=vbmeta_system,logical,first_stage_mount,readahead_size_kb=128 +system_dlkm /system_dlkm erofs ro wait,slotselect,avb=vbmeta_system,logical,first_stage_mount,readahead_size_kb=128 +system_ext /system_ext erofs ro wait,slotselect,avb=vbmeta_system,logical,first_stage_mount,readahead_size_kb=128 +product /product erofs ro wait,slotselect,avb=vbmeta_system,logical,first_stage_mount,readahead_size_kb=128 +vendor /vendor erofs ro wait,slotselect,avb=vbmeta_vendor,logical,first_stage_mount,readahead_size_kb=128 +vendor_dlkm /vendor_dlkm erofs ro wait,slotselect,avb=vbmeta,logical,first_stage_mount +/dev/block/platform/14700000.ufs/by-name/boot /boot emmc defaults slotselect,avb=boot,first_stage_mount +/dev/block/platform/14700000.ufs/by-name/init_boot /init_boot emmc defaults slotselect,avb=init_boot,first_stage_mount +/dev/block/platform/14700000.ufs/by-name/efs /mnt/vendor/efs f2fs noatime,sync wait,check,formattable +/dev/block/platform/14700000.ufs/by-name/efs_backup /mnt/vendor/efs_backup f2fs noatime,sync wait,check,formattable +/dev/block/platform/14700000.ufs/by-name/modem_userdata /mnt/vendor/modem_userdata f2fs noatime,sync wait,check,formattable +/dev/block/platform/14700000.ufs/by-name/misc /misc emmc defaults wait +/dev/block/platform/14700000.ufs/by-name/metadata /metadata f2fs noatime,nosuid,nodev,sync wait,check,formattable,first_stage_mount +#/dev/block/platform/14700000.ufs/by-name/pvmfw /pvmfw emmc defaults wait,slotselect,avb=pvmfw,first_stage_mount +/dev/block/platform/14700000.ufs/by-name/userdata /data f2fs noatime,nosuid,nodev,discard,reserve_root=32768,resgid=1065,fsync_mode=nobarrier,inlinecrypt,compress_extension=apk,compress_extension=apex,compress_extension=so,compress_extension=vdex,compress_extension=odex,atgc,checkpoint_merge,compress_cache latemount,wait,check,quota,formattable,sysfs_path=/dev/sys/block/bootdevice,checkpoint=fs,reservedsize=128M,fileencryption=@fileencryption@,metadata_encryption=@metadata_encryption@,keydirectory=/metadata/vold/metadata_encryption,fscompress,readahead_size_kb=128 +/dev/block/platform/14700000.ufs/by-name/vbmeta /vbmeta emmc defaults slotselect,first_stage_mount +/devices/platform/11210000.usb* auto vfat defaults voldmanaged=usb:auto diff --git a/conf/fstab.modem b/conf/fstab.modem new file mode 100644 index 00000000..d687ace5 --- /dev/null +++ b/conf/fstab.modem @@ -0,0 +1,5 @@ +# Android fstab file. +# +# Create the specific fstab file for modem partition as flexibility +/dev/block/platform/14700000.ufs/by-name/modem /mnt/vendor/modem_img erofs ro,defaults,context=u:object_r:modem_img_file:s0 wait,slotselect +/dev/block/platform/14700000.ufs/by-name/modem /mnt/vendor/modem_img ext4 ro,defaults,context=u:object_r:modem_img_file:s0,barrier=1 wait,slotselect diff --git a/conf/fstab.persist b/conf/fstab.persist new file mode 100644 index 00000000..ab0631b6 --- /dev/null +++ b/conf/fstab.persist @@ -0,0 +1,5 @@ +# Android fstab file. +# +# Keep persist in an fstab file, since we need to run fsck on it after abnormal shutdown. +/dev/block/platform/14700000.ufs/by-name/persist /mnt/vendor/persist f2fs noatime,nosuid,nodev,sync wait,check,formattable +/dev/block/platform/14700000.ufs/by-name/persist /mnt/vendor/persist ext4 noatime,nosuid,nodev,data=journal,commit=1 wait,check,formattable,metadata_csum diff --git a/conf/fstab.postinstall b/conf/fstab.postinstall new file mode 100644 index 00000000..16b167c2 --- /dev/null +++ b/conf/fstab.postinstall @@ -0,0 +1,4 @@ +# Android fstab file. +# +# +system /postinstall erofs ro,nosuid,nodev,noexec slotselect_other,logical,avb_keys=/product/etc/security/avb/system_other.avbpubkey diff --git a/conf/init.debug.rc b/conf/init.debug.rc new file mode 100644 index 00000000..88e8a17f --- /dev/null +++ b/conf/init.debug.rc @@ -0,0 +1,36 @@ +on early-init + mount debugfs /sys/kernel/debug /sys/kernel/debug + +# SJTAG +on init + chown system system /sys/devices/platform/sjtag_ap/interface/access_lvl + chown system system /sys/devices/platform/sjtag_ap/interface/auth + chown system system /sys/devices/platform/sjtag_ap/interface/begin + chown system system /sys/devices/platform/sjtag_ap/interface/dbg_domain + chown system system /sys/devices/platform/sjtag_ap/interface/dbg_itvl + chown system system /sys/devices/platform/sjtag_ap/interface/end + chown system system /sys/devices/platform/sjtag_ap/interface/pubkey + chown system system /sys/devices/platform/sjtag_gsa/interface/access_lvl + chown system system /sys/devices/platform/sjtag_gsa/interface/auth + chown system system /sys/devices/platform/sjtag_gsa/interface/begin + chown system system /sys/devices/platform/sjtag_gsa/interface/dbg_domain + chown system system /sys/devices/platform/sjtag_gsa/interface/dbg_itvl + chown system system /sys/devices/platform/sjtag_gsa/interface/end + chown system system /sys/devices/platform/sjtag_gsa/interface/pubkey + chown system system /d/maxfg/fg_model + chown system system /d/maxfg/registers + chown system system /d/maxfg_base/fg_model + +on property:vendor.debug.ramdump.force_crash=true + write /sys/kernel/pixel_debug/trigger "null" + +on property:power.battery_input.suspended=true + write /sys/kernel/debug/google_charger/input_suspend 1 + +on property:power.battery_input.suspended=false + write /sys/kernel/debug/google_charger/input_suspend 0 + +# Bluetooth +on post-fs-data + chown bluetooth system /dev/logbuffer_btlpm + chown bluetooth system /dev/logbuffer_tty18 diff --git a/conf/init.exynos.nanohub.rc b/conf/init.exynos.nanohub.rc new file mode 100644 index 00000000..9a582298 --- /dev/null +++ b/conf/init.exynos.nanohub.rc @@ -0,0 +1,20 @@ +on post-fs +## ensure correct calibration file permissions + chown root system /mnt/vendor/persist/sensorcal.json + chmod 0640 /mnt/vendor/persist/sensorcal.json + start vendor.flash-nanohub-fw + +on post-fs-data + mkdir /data/vendor/sensor + chown root system /data/vendor/sensor + chmod 0770 /data/vendor/sensor + +service vendor.flash-nanohub-fw /vendor/bin/nanoapp_cmd download + oneshot + disabled + user root + group system + +on post-fs-data + mkdir /data/system/nanohub_lock/ + restorecon /data/system/nanohub_lock diff --git a/conf/init.factory.rc b/conf/init.factory.rc new file mode 100644 index 00000000..ed294fda --- /dev/null +++ b/conf/init.factory.rc @@ -0,0 +1,19 @@ +# Factory specific init.rc + +on early-init + mount debugfs /sys/kernel/debug /sys/kernel/debug + +on init + export PATH /product/bin:/apex/com.android.runtime/bin:/apex/com.android.art/bin:/system_ext/bin:/system/bin:/system/xbin:/odm/bin:/vendor/bin:/vendor/xbin:/vendor/bin/factory + +on boot + # FTM log folder + mkdir /data/ftmlog 0775 system system + + # Audio test folder + mkdir /data/AudioTest 0775 system system + +on property:sys.boot_completed=1 + # Bump nnapi min clamp & add adbd to it for factory (b/222226268) + write /proc/vendor_sched/nnapi_uclamp_min 512 + exec - root root -- /vendor/bin/factory/factory_post_boot diff --git a/conf/init.gs201.rc b/conf/init.gs201.rc new file mode 100644 index 00000000..bee31cf3 --- /dev/null +++ b/conf/init.gs201.rc @@ -0,0 +1,993 @@ +import /vendor/etc/init/hw/init.gs201.usb.rc +import android.hardware.drm@1.2-service.widevine.rc +import init.exynos.sensorhub.rc + +on early-init + mount_all /vendor/etc/fstab.persist --early + +on init + # CPU0 cannot be offline + chmod 0444 /sys/devices/system/cpu/cpu0/online + + # Boot time fs tuning + write /sys/block/sda/queue/iostats 0 + write /sys/block/sda/queue/scheduler bfq + write /sys/block/sda/queue/iosched/slice_idle 0 + write /sys/block/sda/queue/nr_requests 256 + write /dev/sys/fs/by-name/userdata/data_io_flag 56 + write /dev/sys/fs/by-name/userdata/node_io_flag 56 + + chown system system /proc/vendor_sched/set_task_group_bg + chown system system /proc/vendor_sched/set_task_group_cam + chown system system /proc/vendor_sched/set_task_group_fg + chown system system /proc/vendor_sched/set_task_group_nnapi + chown system system /proc/vendor_sched/set_task_group_sys + chown system system /proc/vendor_sched/set_task_group_sysbg + chown system system /proc/vendor_sched/set_task_group_ta + chown system system /proc/vendor_sched/set_task_group_rt + chown system system /proc/vendor_sched/set_task_group_sf + chown system system /proc/vendor_sched/set_task_group_dex2oat + chown system system /proc/vendor_sched/set_task_group_cam_power + chown system system /proc/vendor_sched/set_task_group_ota + chown system system /proc/vendor_sched/set_proc_group_bg + chown system system /proc/vendor_sched/set_proc_group_cam + chown system system /proc/vendor_sched/set_proc_group_fg + chown system system /proc/vendor_sched/set_proc_group_nnapi + chown system system /proc/vendor_sched/set_proc_group_sys + chown system system /proc/vendor_sched/set_proc_group_sysbg + chown system system /proc/vendor_sched/set_proc_group_ta + chown system system /proc/vendor_sched/set_proc_group_rt + chown system system /proc/vendor_sched/set_proc_group_sf + chown system system /proc/vendor_sched/set_proc_group_dex2oat + chown system system /proc/vendor_sched/set_proc_group_cam_power + chown system system /proc/vendor_sched/set_proc_group_ota + chown system system /proc/vendor_sched/prefer_idle_set + chown system system /proc/vendor_sched/prefer_idle_clear + chown system system /proc/vendor_sched/pmu_poll_enable + chown system system /proc/vendor_sched/pmu_poll_time + chown system system /sys/devices/system/cpu/cpufreq/policy0/sched_pixel/lcpi_threshold + chown system system /sys/devices/system/cpu/cpufreq/policy0/sched_pixel/spc_threshold + chown system system /sys/devices/system/cpu/cpufreq/policy0/sched_pixel/limit_frequency + chown system system /sys/devices/system/cpu/cpufreq/policy0/sched_pixel/pmu_limit_enable + chown system system /sys/devices/system/cpu/cpufreq/policy4/sched_pixel/lcpi_threshold + chown system system /sys/devices/system/cpu/cpufreq/policy4/sched_pixel/spc_threshold + chown system system /sys/devices/system/cpu/cpufreq/policy4/sched_pixel/limit_frequency + chown system system /sys/devices/system/cpu/cpufreq/policy4/sched_pixel/pmu_limit_enable + chown system system /sys/devices/system/cpu/cpufreq/policy6/sched_pixel/lcpi_threshold + chown system system /sys/devices/system/cpu/cpufreq/policy6/sched_pixel/spc_threshold + chown system system /sys/devices/system/cpu/cpufreq/policy6/sched_pixel/limit_frequency + chown system system /sys/devices/system/cpu/cpufreq/policy6/sched_pixel/pmu_limit_enable + + chmod 0220 /proc/vendor_sched/set_task_group_bg + chmod 0220 /proc/vendor_sched/set_task_group_cam + chmod 0220 /proc/vendor_sched/set_task_group_fg + chmod 0220 /proc/vendor_sched/set_task_group_nnapi + chmod 0220 /proc/vendor_sched/set_task_group_sys + chmod 0220 /proc/vendor_sched/set_task_group_sysbg + chmod 0220 /proc/vendor_sched/set_task_group_ta + chmod 0220 /proc/vendor_sched/set_task_group_rt + chmod 0220 /proc/vendor_sched/set_task_group_sf + chmod 0220 /proc/vendor_sched/set_task_group_dex2oat + chmod 0220 /proc/vendor_sched/set_task_group_cam_power + chmod 0220 /proc/vendor_sched/set_task_group_ota + chmod 0220 /proc/vendor_sched/set_proc_group_bg + chmod 0220 /proc/vendor_sched/set_proc_group_cam + chmod 0220 /proc/vendor_sched/set_proc_group_fg + chmod 0220 /proc/vendor_sched/set_proc_group_nnapi + chmod 0220 /proc/vendor_sched/set_proc_group_sys + chmod 0220 /proc/vendor_sched/set_proc_group_sysbg + chmod 0220 /proc/vendor_sched/set_proc_group_ta + chmod 0220 /proc/vendor_sched/set_proc_group_rt + chmod 0220 /proc/vendor_sched/set_proc_group_sf + chmod 0220 /proc/vendor_sched/set_proc_group_dex2oat + chmod 0220 /proc/vendor_sched/set_proc_group_cam_power + chmod 0220 /proc/vendor_sched/set_proc_group_ota + chmod 0220 /proc/vendor_sched/prefer_idle_set + chmod 0220 /proc/vendor_sched/prefer_idle_clear + chmod 0220 /proc/vendor_sched/pmu_poll_enable + chmod 0220 /proc/vendor_sched/pmu_poll_time + + wait /dev/block/platform/${ro.boot.boot_devices} + symlink /dev/block/platform/${ro.boot.boot_devices} /dev/block/bootdevice + + # to access UFS/eMMC sysfs directly + symlink /sys/devices/platform/${ro.boot.boot_devices} /dev/sys/block/bootdevice + + # Disable UFS powersaving + write /dev/sys/block/bootdevice/clkgate_enable 0 + + start vendor.keymaster-4-0 + + # ZRAM setup + write /sys/block/zram0/comp_algorithm lz77eh + write /proc/sys/vm/page-cluster 0 + + # Some user code relies on ro.boot.hardware.revision + setprop ro.boot.hardware.revision ${ro.revision} + + # Allow PAI targeting per hardware SKU + setprop ro.oem.key1 ${ro.boot.hardware.sku} + + # Property used by vintf for sku specific manifests + # Property used by NFC for sku specific configurations + setprop ro.boot.product.hardware.sku ${ro.boot.hardware.sku} + + # Support legacy paths + symlink /data/app /factory + + # Apply network parameters for high data performance. + write /proc/sys/net/core/rmem_default 327680 + write /proc/sys/net/core/rmem_max 8388608 + write /proc/sys/net/core/wmem_default 327680 + write /proc/sys/net/core/wmem_max 8388608 + write /proc/sys/net/core/optmem_max 20480 + write /proc/sys/net/core/netdev_max_backlog 10000 + write /proc/sys/net/ipv4/tcp_rmem "2097152 4194304 8388608" + write /proc/sys/net/ipv4/tcp_wmem "262144 524288 8388608" + write /proc/sys/net/ipv4/tcp_mem "44259 59012 88518" + write /proc/sys/net/ipv4/udp_mem "88518 118025 177036" + + write /sys/class/net/rmnet0/queues/rx-0/rps_cpus fe + write /sys/class/net/rmnet1/queues/rx-0/rps_cpus fe + write /sys/class/net/rmnet2/queues/rx-0/rps_cpus fe + write /sys/class/net/rmnet3/queues/rx-0/rps_cpus fe + write /sys/class/net/rmnet4/queues/rx-0/rps_cpus fe + write /sys/class/net/rmnet5/queues/rx-0/rps_cpus fe + write /sys/class/net/rmnet6/queues/rx-0/rps_cpus fe + write /sys/class/net/rmnet7/queues/rx-0/rps_cpus fe + + # 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 + + # Boot time 183626384 + write /proc/vendor_sched/ta_uclamp_min 1024 + write /proc/vendor_sched/ta_prefer_idle 1 + write /proc/vendor_sched/fg_uclamp_min 1024 + write /proc/vendor_sched/fg_prefer_idle 1 + write /proc/vendor_sched/sys_uclamp_min 1024 + write /proc/vendor_sched/sys_prefer_idle 1 + + # governor setting + write /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor sched_pixel + write /sys/devices/system/cpu/cpu0/cpufreq/sched_pixel/up_rate_limit_us 500 + write /sys/devices/system/cpu/cpu0/cpufreq/sched_pixel/down_rate_limit_us 5000 + write /sys/devices/system/cpu/cpu0/cpufreq/sched_pixel/down_rate_limit_scale_pow 2 + write /sys/devices/system/cpu/cpu4/cpufreq/scaling_governor sched_pixel + write /sys/devices/system/cpu/cpu4/cpufreq/sched_pixel/up_rate_limit_us 500 + write /sys/devices/system/cpu/cpu4/cpufreq/sched_pixel/down_rate_limit_us 20000 + write /sys/devices/system/cpu/cpu6/cpufreq/scaling_governor sched_pixel + write /sys/devices/system/cpu/cpu6/cpufreq/sched_pixel/up_rate_limit_us 500 + write /sys/devices/system/cpu/cpu6/cpufreq/sched_pixel/down_rate_limit_us 20000 + + # RT uclamp setting + write /proc/sys/kernel/sched_util_clamp_min_rt_default 0 + + # change permissions and default values for camera-daemon cpu controller + chown system system /dev/cpuctl/camera-daemon/cpu.uclamp.min + chown system system /dev/cpuctl/camera-daemon/cpu.uclamp.max + chown root root /dev/cpuctl/camera-daemon/cpu.uclamp.latency_sensitive + chown system system /dev/cpuctl/camera-daemon/cgroup.procs + + mkdir /dev/cpuset/camera-daemon-high-group + write /dev/cpuset/camera-daemon-high-group/cpus 0-7 + write /dev/cpuset/camera-daemon-high-group/mems 0 + chown system system /dev/cpuset/camera-daemon-high-group/tasks + chmod 0664 /dev/cpuset/camera-daemon-high-group/tasks + + mkdir /dev/cpuset/camera-daemon-mid-group + write /dev/cpuset/camera-daemon-mid-group/cpus 0-7 + write /dev/cpuset/camera-daemon-mid-group/mems 0 + chown system system /dev/cpuset/camera-daemon-mid-group/tasks + chmod 0664 /dev/cpuset/camera-daemon-mid-group/tasks + + mkdir /dev/cpuset/camera-daemon-mid-high-group + write /dev/cpuset/camera-daemon-mid-high-group/cpus 0-7 + write /dev/cpuset/camera-daemon-mid-high-group/mems 0 + chown system system /dev/cpuset/camera-daemon-mid-high-group/tasks + chmod 0664 /dev/cpuset/camera-daemon-mid-high-group/tasks + + write /proc/vendor_sched/cam_prefer_idle 1 + write /proc/vendor_sched/cam_uclamp_min 1 + + chown system system /dev/cpuset/cgroup.procs + + # nanohub sensor + chmod 0664 /dev/nanohub + chmod 0664 /dev/nanohub_comms + chown system system /dev/nanohub + chown system system /dev/nanohub_comms + + # logbuffer + chown system system /dev/logbuffer_maxfg + chown system system /dev/logbuffer_maxfg_base + chown system system /dev/logbuffer_maxfg_flip + chown system system /dev/logbuffer_maxfg_monitor + chown system system /dev/logbuffer_maxfg_base_monitor + chown system system /dev/logbuffer_maxfg_flip_monitor + chown system system /dev/logbuffer_maxq + chown system system /dev/logbuffer_google,cpm + chown system system /dev/logbuffer_rtx + chown system system /dev/logbuffer_ssoc + chown system system /dev/logbuffer_ttf + chown system system /dev/logbuffer_tcpm + chown system system /dev/logbuffer_usbpd + chown system system /dev/logbuffer_wireless + chown system system /dev/logbuffer_pca9468 + chown system system /dev/logbuffer_cpm + + # Dump maxfg + chown system system /sys/class/power_supply/maxfg/m5_model_state + chown system system /sys/class/power_supply/maxfg_base/m5_model_state + + # pca9468 : slider+77729: 6-0057; slider+MW A1: 5-0057 + chown system system /d/regmap/5-0057-pca9468-mains/registers + chown system system /d/regmap/6-0057-pca9468-mains/registers + + # Dump eeprom + chown system system /sys/devices/platform/10970000.hsi2c/i2c-5/5-0050/eeprom + chown system system /sys/devices/platform/10970000.hsi2c/i2c-4/4-0050/eeprom + chown system system /sys/devices/platform/10da0000.hsi2c/i2c-6/6-0050/eeprom + chown system system /dev/battery_history + chmod 0644 /dev/battery_history + + # Modem temperature driver + chown radio system /sys/devices/platform/cp-tm1/cp_temp + + # Loading common kernel modules in background + start insmod_sh_common + + # Charge stats (write 0) + chown system system /sys/class/power_supply/battery/charge_stats + + # Pca Charge stats (write 0) + chown system system /sys/class/power_supply/pca9468-mains/device/chg_stats + + # Wireless Charge stats (write 0) + chown system system /sys/class/power_supply/wireless/device/charge_stats + + # Permission for wireless charging + chown system system /sys/class/power_supply/wireless/capacity + chown system system /sys/class/power_supply/wireless/device/rtx + chown system system /sys/class/power_supply/wireless/device/rxdata + chown system system /sys/class/power_supply/wireless/device/txdata + chown system system /sys/class/power_supply/wireless/device/rxlen + chown system system /sys/class/power_supply/wireless/device/txlen + chown system system /sys/class/power_supply/wireless/device/ccreset + chown system system /sys/class/power_supply/wireless/device/status + chown system system /sys/class/power_supply/wireless/device/version + chown system system /sys/class/power_supply/wireless/device/features + chown system system /sys/class/power_supply/wireless/device/authtype + + # Adaptive charge + chown system system /sys/class/power_supply/battery/charge_deadline + + # Battery Defender + chown system system /sys/devices/platform/google,battery/power_supply/battery/bd_trickle_cnt + chown system system /sys/devices/platform/google,battery/power_supply/battery/bd_trickle_dry_run + chown system system /sys/devices/platform/google,battery/power_supply/battery/bd_trickle_enable + chown system system /sys/devices/platform/google,battery/power_supply/battery/bd_trickle_recharge_soc + chown system system /sys/devices/platform/google,battery/power_supply/battery/bd_trickle_reset_sec + chown system system /sys/devices/platform/google,battery/power_supply/battery/bd_clear + chown system system /sys/devices/platform/google,battery/power_supply/battery/health_safety_margin + chown system system /sys/devices/platform/google,charger/bd_drainto_soc + chown system system /sys/devices/platform/google,charger/bd_recharge_soc + chown system system /sys/devices/platform/google,charger/bd_recharge_voltage + chown system system /sys/devices/platform/google,charger/bd_resume_abs_temp + chown system system /sys/devices/platform/google,charger/bd_resume_soc + chown system system /sys/devices/platform/google,charger/bd_resume_temp + chown system system /sys/devices/platform/google,charger/bd_resume_time + chown system system /sys/devices/platform/google,charger/bd_temp_dry_run + chown system system /sys/devices/platform/google,charger/bd_temp_enable + chown system system /sys/devices/platform/google,charger/bd_trigger_temp + chown system system /sys/devices/platform/google,charger/bd_trigger_time + chown system system /sys/devices/platform/google,charger/bd_trigger_voltage + chown system system /sys/devices/platform/google,charger/bd_clear + chown system system /sys/devices/platform/google,charger/charge_start_level + chown system system /sys/devices/platform/google,charger/charge_stop_level + chown system system /sys/devices/platform/google,cpm/dc_ctl + + # Power Stats HAL + chown system system /dev/bbd_pwrstat + + # start watchdogd + start watchdogd + + # Add a boost for NNAPI HAL + write /proc/vendor_sched/nnapi_prefer_idle 0 + write /proc/vendor_sched/nnapi_uclamp_min 512 + + # Add memlat governor settings + write /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu0_memlat@17000010/polling_interval 10 + write /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu1_memlat@17000010/polling_interval 10 + write /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu2_memlat@17000010/polling_interval 10 + write /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu3_memlat@17000010/polling_interval 10 + write /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu4_memlat@17000010/polling_interval 10 + write /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu5_memlat@17000010/polling_interval 10 + write /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu6_memlat@17000010/polling_interval 10 + write /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu7_memlat@17000010/polling_interval 10 + write /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu0_memlat@17000010/mem_latency/ratio_ceil 400 + write /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu1_memlat@17000010/mem_latency/ratio_ceil 400 + write /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu2_memlat@17000010/mem_latency/ratio_ceil 400 + write /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu3_memlat@17000010/mem_latency/ratio_ceil 400 + write /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu4_memlat@17000010/mem_latency/ratio_ceil 2700 + write /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu5_memlat@17000010/mem_latency/ratio_ceil 2700 + write /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu6_memlat@17000010/mem_latency/ratio_ceil 3200 + write /sys/class/devfreq/gs_memlat_devfreq:devfreq_mif_cpu7_memlat@17000010/mem_latency/ratio_ceil 3200 + +# For GKI kernel, no device specific modules +on init + setprop vendor.device.modules.ready 1 + +on late-fs + # Wait for keymaster HALs + exec_start wait_for_keymaster + + # Start bootanimation class before mount + start bootanim + class_start animation + + # Mount RW partitions which need run fsck + mount_all --late + +on post-fs-data + # Log data folder + mkdir /data/vendor 0771 radio system + mkdir /data/vendor/log 0771 radio system + mkdir /data/vendor/log/cbd 0771 radio system + mkdir /data/vendor/log/rfsd 0771 radio system + + mkdir /data/exynos/log 0771 radio system + mkdir /data/vendor/rild 0771 radio system + mkdir /data/vendor/dump 0771 radio system + mkdir /data/vendor/slog 0771 system system + + # PixelLogger log paths. + mkdir /data/vendor/radio 773 system radio + mkdir /data/vendor/radio/logs 773 system radio + mkdir /data/vendor/radio/logs/always-on 777 system radio + + # Modem extended log folder + mkdir /data/vendor/radio/extended_logs 0770 radio system + + # Modem MDS log folder + mkdir /data/vendor/radio/mds 0771 radio system + + # Unzipped modem images folder + mkdir /data/vendor/radio/image 0771 radio system + + # Modem stat folder + mkdir /data/vendor/modem_stat 0771 radio system + write /data/vendor/modem_stat/debug.txt "" + chown radio system /data/vendor/modem_stat/debug.txt + chmod 0664 /data/vendor/modem_stat/debug.txt + + # Modem replay folder + mkdir /mnt/vendor/modem_userdata/replay 0775 radio system + + # Write display MIPI frequency from Modem + chown system system /sys/devices/platform/1c2c0000.drmdsim/hs_clock + chown system system /sys/devices/platform/1c2d0000.drmdsim/hs_clock + chmod 0664 /sys/devices/platform/1c2c0000.drmdsim/hs_clock + chmod 0664 /sys/devices/platform/1c2d0000.drmdsim/hs_clock + + # IPSEC PIDDIR for VoWiFi + mkdir /data/vendor/misc 0771 root system + mkdir /data/vendor/misc/vpn 0771 root system + + # Permissions Camera + mkdir /data/vendor/camera 0770 system camera + chmod 0755 /sys/kernel/debug/tracing + restorecon /sys/kernel/debug/tracing/trace_marker + + # ranging sensor + chown system system /dev/stmvl53l1_ranging + chmod 0660 /dev/stmvl53l1_ranging + + # Factory calibration files + chmod 0771 /mnt/vendor/persist/camera + chmod 0771 /mnt/vendor/persist/camera/OTP_calibration + chmod 0771 /mnt/vendor/persist/camera/pdaf_calibration_data + chmod 0771 /mnt/vendor/persist/camera/rear + + # Audio dump and debug + mkdir /data/vendor/audio 0770 audio audio + + # Create the directories for Darwinn HAL. + mkdir /data/vendor/hal_neuralnetworks_darwinn 0770 system system + mkdir /data/vendor/hal_neuralnetworks_darwinn/checksum_cache 0770 system system + mkdir /data/vendor/edgetpu 0770 system system + mkdir /data/vendor/edgetpu/cache 0770 system system + + # Compatibility path for TPU + symlink /dev/janeiro /dev/edgetpu + + +on zygote-start + # For PixelLogger configuration file. + chmod 0771 /data/vendor/wifi + write /proc/vendor_sched/sys_uclamp_min 0 + +on post-fs-data + # Create the directories used by the Wireless subsystem + mkdir /data/vendor/wifi 0771 wifi wifi + mkdir /data/vendor/wifi/wpa 0770 wifi wifi + mkdir /data/vendor/wifi/wpa/sockets 0770 wifi wifi + +# Gatekeeper data + mkdir /data/vendor/gk 0771 system system + +# HWC data + mkdir /data/vendor/log/hwc 0771 system graphics + +# Video data + mkdir /data/vendor/media 0700 mediacodec mediacodec + +on post-fs-data + # GPS + mkdir /data/vendor/gps 0771 system system + chown system system /data/vendor/gps + rm /data/vendor/gps/gps_started + rm /data/vendor/gps/glonass_started + rm /data/vendor/gps/beidou_started + rm /data/vendor/gps/smd_started + rm /data/vendor/gps/sv_cno.info + + chown gps system /sys/devices/platform/10940000.spi/spi_master/spi5/spi5.0/nstandby + chmod 0664 /dev/ttyBCM + chown gps system /dev/ttyBCM + chmod 0664 /dev/bbd_control + chown gps system /dev/bbd_control + chmod 0664 /dev/bbd_patch + chown gps system /dev/bbd_patch + chmod 0664 /dev/bbd_sensor + chown gps system /dev/bbd_sensor + +on early-boot + # Wait for insmod_sh to finish all common modules + wait_for_prop vendor.common.modules.ready 1 + + # Wait for insmod_sh to finish all device specific modules + wait_for_prop vendor.device.modules.ready 1 + + # Other services depend on the properties + setprop vendor.all.modules.ready 1 + setprop vendor.all.devices.ready 1 + + # Permission for Health Storage HAL + chown system system /dev/sys/block/bootdevice/manual_gc + + # Permission for Pixelstats + chown system system /dev/sys/block/bootdevice/slowio_read_cnt + chown system system /dev/sys/block/bootdevice/slowio_write_cnt + chown system system /dev/sys/block/bootdevice/slowio_unmap_cnt + chown system system /dev/sys/block/bootdevice/slowio_sync_cnt + +on boot + + # Allow to access debugfs for system:system + chmod 0755 /sys/kernel/debug + chown system system /sys/kernel/debug + + #setprop ro.radio.noril no + + # default country code + setprop ro.boot.wificountrycode 00 + + # Set up kernel tracing, but disable it by default + chmod 0222 /sys/kernel/debug/tracing/trace_marker + write /sys/kernel/debug/tracing/tracing_on 0 + + # Change permission for A-Box firmware logs file & GPR dump + chown audioserver system /sys/devices/platform/17c50000.abox/reset + chown audioserver system /sys/devices/platform/17c50000.abox/service + chown audioserver system /sys/devices/platform/17c50000.abox/0.abox_debug/gpr + chown audioserver system /sys/devices/platform/17c50000.abox/0.abox_debug/calliope_sram + chown audioserver system /sys/devices/platform/17c50000.abox/0.abox_debug/calliope_dram + chown audioserver system /sys/devices/platform/17c50000.abox/0.abox_debug/calliope_iva + chown audioserver system /sys/kernel/debug/abox/log-00 + +# Permission for USB SELECT + chown system system /sys/class/android_usb/android0/enable + chmod 0660 /sys/class/android_usb/android0/enable + chown system system /sys/class/android_usb/android0/idVendor + chmod 0660 /sys/class/android_usb/android0/idVendor + chown system system /sys/class/android_usb/android0/idProduct + chmod 0660 /sys/class/android_usb/android0/idProduct + chown system system /sys/class/android_usb/android0/f_diag/clients + chmod 0660 /sys/class/android_usb/android0/f_diag/clients + chown system system /sys/class/android_usb/android0/functions + chmod 0660 /sys/class/android_usb/android0/functions + chown system system /sys/class/android_usb/android0/bDeviceClass + chmod 0660 /sys/class/android_usb/android0/bDeviceClass + +# Permission for UART SWITCH + chmod 0660 /sys/class/sec/switch/uart_sel + chown system system /sys/class/sec/switch/uart_sel + +# VTS sysfs file permission + chown audioserver system /sys/devices/platform/13810000.vts/vts_svoice_model + chown audioserver system /sys/devices/platform/13810000.vts/vts_google_model + chmod 0660 /sys/devices/platform/13810000.vts/vts_svoice_model + chmod 0660 /sys/devices/platform/13810000.vts/vts_google_model + +on property:persist.vendor.radio.no_modem_board=1 + setprop ro.radio.noril yes + +on fs + mount_all --early + restorecon_recursive /mnt/vendor/efs + chown radio system /mnt/vendor/efs + restorecon_recursive /mnt/vendor/efs_backup + chown radio system /mnt/vendor/efs_backup + restorecon_recursive /mnt/vendor/modem_userdata + chown radio system /mnt/vendor/modem_userdata + + # Mount modem partition + mount_all /vendor/etc/fstab.modem --early + restorecon_recursive /mnt/vendor/modem_img + + restorecon_recursive /mnt/vendor/persist + restorecon_recursive /mnt/vendor/persist/aoc + restorecon_recursive /mnt/vendor/persist/audio + restorecon_recursive /mnt/vendor/persist/sensors + restorecon_recursive /mnt/vendor/persist/battery + # Set up display-related directories and permissions + # Add restorecon_recursive command to make sure the restorecon label is persist_display_file. + restorecon_recursive /mnt/vendor/persist/display + mkdir /mnt/vendor/persist/data/sfs 0700 system system + mkdir /mnt/vendor/persist/data/tz 0700 system system + mkdir /mnt/vendor/persist/touch 0770 system system + +# Permissions for ION + chmod 0660 /sys/class/ion_cma/ion_video_ext/isolated + chown system system /sys/class/ion_cma/ion_video_ext/isolated + +# Permissions for hwcomposer + chown system system /sys/class/backlight/panel0-backlight/als_table + chown system system /sys/class/backlight/panel0-backlight/brightness + chown system system /sys/class/backlight/panel0-backlight/dimming_on + chown system system /sys/class/backlight/panel0-backlight/hbm_mode + chown system system /sys/class/backlight/panel0-backlight/local_hbm_mode + chown system system /sys/devices/platform/exynos-drm/primary-panel/gamma + chown system system /sys/devices/platform/exynos-drm/primary-panel/min_vrefresh + chown system system /sys/devices/platform/exynos-drm/primary-panel/idle_delay_ms + chown system system /sys/devices/platform/exynos-drm/primary-panel/panel_idle + chown system system /sys/devices/platform/exynos-drm/primary-panel/panel_need_handle_idle_exit + chown system system /sys/module/drm/parameters/vblankoffdelay + chown system system /sys/class/dqe0/atc/ambient_light + chown system system /sys/class/dqe0/atc/st + chown system system /sys/class/dqe0/atc/en + chown system system /sys/class/dqe0/atc/lt + chown system system /sys/class/dqe0/atc/ns + chown system system /sys/class/dqe0/atc/dither + chown system system /sys/class/dqe0/atc/pl_w1 + chown system system /sys/class/dqe0/atc/pl_w2 + chown system system /sys/class/dqe0/atc/ctmode + chown system system /sys/class/dqe0/atc/pp_en + chown system system /sys/class/dqe0/atc/upgrade_on + chown system system /sys/class/dqe0/atc/tdr_max + chown system system /sys/class/dqe0/atc/tdr_min + chown system system /sys/class/dqe0/atc/back_light + chown system system /sys/class/dqe0/atc/dstep + chown system system /sys/class/dqe0/atc/scale_mode + chown system system /sys/class/dqe0/atc/threshold_1 + chown system system /sys/class/dqe0/atc/threshold_2 + chown system system /sys/class/dqe0/atc/threshold_3 + chown system system /sys/class/dqe0/atc/gain_limit + chown system system /sys/class/dqe0/atc/lt_calc_ab_shift + + chown system system /sys/devices/platform/1c240000.drmdecon/early_wakeup + chmod 0660 /sys/devices/platform/1c240000.drmdecon/early_wakeup + chown system system /sys/devices/platform/1c242000.drmdecon/early_wakeup + chmod 0660 /sys/devices/platform/1c242000.drmdecon/early_wakeup + +# Copy DRM Key +# copy /system/app/wv.keys /factory/wv.keys + +# Permission for DRM Key +# chmod 0644 /factory/wv.keys + +# Permission for flashlight control for HAL3.3 +# The Istor espresso board does not have the flash led h/w, So the below permission line are blocked. +# If you want to test the flashlight in board which have the flash led h/w, Enable the below blocked lines. + chmod 0660 /sys/class/camera/flash/rear_torch_flash + chown system camera /sys/class/camera/flash/rear_torch_flash +#load ecd firmware + write /proc/ecd/load_firmware 1 + +service abox /vendor/bin/main_abox 17c50000.abox + class late_start + user audioserver + group audioserver + seclabel u:r:abox:s0 + +# GPS +service lhd /vendor/bin/hw/lhd /vendor/etc/gnss/lhd.conf + class main + user gps + group system inet net_raw sdcard_rw + ioprio be 0 + +service gpsd /vendor/bin/hw/gpsd -c /vendor/etc/gnss/gps.xml + class main + user gps + group system gps radio inet wakelock sdcard_rw net_raw + ioprio be 0 + +service scd /vendor/bin/hw/scd /vendor/etc/gnss/scd.conf + class main + user gps + group system inet net_raw wakelock + ioprio be 0 + +service gnss_service /vendor/bin/hw/android.hardware.gnss@2.1-service-brcm + class hal + user gps + group system gps radio + +# disable gps service if no gps h/w +on property:vendor.ril.cbd.svc=0 + stop gpsd + stop lhd + stop scd + +# on userdebug and eng builds, enable kgdb on the serial console +on property:ro.debuggable=1 + write /sys/module/kgdboc/parameters/kgdboc ttyFIQ1 + write /sys/module/fiq_debugger/parameters/kgdb_enable 1 + +# Touch +on property:vendor.device.modules.ready=1 + chown system system /sys/class/spi_master/spi0/spi0.0/synaptics_tcm.0/sysfs/get_raw_data + chown system system /sys/class/spi_master/spi0/spi0.0/synaptics_tcm.0/sysfs/force_active + chown system system /sys/class/spi_master/spi11/spi11.0/stm_fts_cmd + chown system system /sys/class/spi_master/spi11/spi11.0/glove_mode + chown system system /sys/class/spi_master/spi6/spi6.0/stm_fts_cmd + chown system system /sys/class/spi_master/spi6/spi6.0/glove_mode + chown system system /sys/devices/virtual/sec/tsp/fw_version + chown system system /sys/devices/virtual/sec/tsp/cmd + chown system system /sys/devices/virtual/sec/tsp/cmd_result + chown system system /sys/devices/virtual/sec/tsp/status + # Allow access to touch + chown system input /dev/touch_offload + chmod 660 /dev/touch_offload + +# Route touch_sensitivity_mode to persist +on property:debug.touch_sensitivity_mode=0 + setprop persist.vendor.touch_sensitivity_mode 0 + +on property:debug.touch_sensitivity_mode=1 + setprop persist.vendor.touch_sensitivity_mode 1 + +on property:init.svc.vendor.charger=running + stop keymaster-4-0 + + setprop sys.usb.configfs 1 + setprop vendor.setup.power 1 + + # keep one little and one big + write /sys/devices/system/cpu/cpu1/online 0 + write /sys/devices/system/cpu/cpu2/online 0 + write /sys/devices/system/cpu/cpu3/online 0 + write /sys/devices/system/cpu/cpu4/online 0 + write /sys/devices/system/cpu/cpu5/online 0 + write /sys/devices/system/cpu/cpu7/online 0 + +on property:sys.boot_completed=1 + + # Runtime fs tuning + write /sys/block/sda/queue/nr_requests 128 + write /sys/block/sda/queue/iostats 1 + write /sys/block/sda/queue/iosched/slice_idle 0 + write /dev/sys/fs/by-name/userdata/data_io_flag 8 + write /dev/sys/fs/by-name/userdata/node_io_flag 8 + + # Permission for Pixelstats + chown system system /dev/sys/fs/by-name/userdata/compr_written_block + chown system system /dev/sys/fs/by-name/userdata/compr_saved_block + chown system system /dev/sys/fs/by-name/userdata/compr_new_inode + chown system system /dev/sys/fs/by-name/userdata/gc_segment_mode + chown system system /dev/sys/fs/by-name/userdata/gc_reclaimed_segments + + # Enable ZRAM on boot_complete + swapon_all /vendor/etc/fstab.${ro.board.platform} + write /proc/sys/vm/swappiness 100 + + # Back to default VM settings + write /proc/sys/vm/dirty_expire_centisecs 3000 + write /proc/sys/vm/dirty_background_ratio 10 + + # Enable UFS powersaving + write /dev/sys/block/bootdevice/clkgate_enable 1 + + # Setup final cpuset + write /dev/cpuset/top-app/cpus 0-7 + write /dev/cpuset/foreground/cpus 0-3,4-5 + write /dev/cpuset/background/cpus 0-1 + write /dev/cpuset/system-background/cpus 0-3 + write /dev/cpuset/restricted/cpus 0-3 + write /dev/cpuset/camera-daemon/cpus 0-7 + setprop vendor.powerhal.init 1 + + # Setup final cpu.uclamp + write /proc/vendor_sched/uclamp_threshold 8 + write /proc/vendor_sched/ta_uclamp_min 1 + write /proc/vendor_sched/fg_uclamp_min 0 + write /proc/vendor_sched/sys_prefer_idle 0 + # cfs_rq clamp is using tg->uclamp setting + # align it with the vendor_group setting + write /proc/vendor_sched/bg_uclamp_max 512 + write /dev/cpuctl/background/cpu.uclamp.max 50 + write /proc/vendor_sched/bg_group_throttle 512 + write /proc/vendor_sched/sysbg_uclamp_max 512 + write /dev/cpuctl/system-background/cpu.uclamp.max 50 + write /proc/vendor_sched/sysbg_group_throttle 512 + write /proc/vendor_sched/dex2oat_uclamp_max 615 + write /dev/cpuctl/dex2oat/cpu.uclamp.max 60 + write /proc/vendor_sched/dex2oat_group_throttle 615 + write /proc/vendor_sched/ota_uclamp_max 410 + write /proc/vendor_sched/ota_group_throttle 410 + + # Set PMU freq limit parameters + write /sys/devices/system/cpu/cpufreq/policy0/sched_pixel/lcpi_threshold 2 + write /sys/devices/system/cpu/cpufreq/policy0/sched_pixel/spc_threshold 59 + write /sys/devices/system/cpu/cpufreq/policy0/sched_pixel/limit_frequency 1401000 + write /sys/devices/system/cpu/cpufreq/policy4/sched_pixel/lcpi_threshold 6 + write /sys/devices/system/cpu/cpufreq/policy4/sched_pixel/spc_threshold 64 + write /sys/devices/system/cpu/cpufreq/policy4/sched_pixel/limit_frequency 1826000 + write /sys/devices/system/cpu/cpufreq/policy6/sched_pixel/lcpi_threshold 5 + write /sys/devices/system/cpu/cpufreq/policy6/sched_pixel/spc_threshold 69 + write /sys/devices/system/cpu/cpufreq/policy6/sched_pixel/limit_frequency 2507000 + write /proc/vendor_sched/pmu_poll_time 10 + + # Disable PMU freq limit + write /sys/devices/system/cpu/cpufreq/policy0/sched_pixel/pmu_limit_enable 1 + write /sys/devices/system/cpu/cpufreq/policy4/sched_pixel/pmu_limit_enable 1 + write /sys/devices/system/cpu/cpufreq/policy6/sched_pixel/pmu_limit_enable 1 + write /proc/vendor_sched/pmu_poll_enable 0 + + # Setup groups for SF (RT used for SF RE, SF used for SF main) + write /proc/vendor_sched/rt_uclamp_min 125 + write /proc/vendor_sched/rt_prefer_idle 1 + write /proc/vendor_sched/sf_uclamp_min 30 + write /proc/vendor_sched/sf_prefer_idle 1 + + # Setup cpu.shares to throttle background groups (bg ~ 5% sysbg ~ 5% dex2oat ~2.5%) + write /dev/cpuctl/background/cpu.shares 1024 + write /dev/cpuctl/system-background/cpu.shares 1024 + write /dev/cpuctl/dex2oat/cpu.shares 512 + write /dev/cpuctl/system/cpu.shares 20480 + # We only have system and background groups holding tasks and the groups below are empty + write /dev/cpuctl/camera-daemon/cpu.shares 20480 + write /dev/cpuctl/foreground/cpu.shares 20480 + write /dev/cpuctl/nnapi-hal/cpu.shares 20480 + write /dev/cpuctl/rt/cpu.shares 20480 + write /dev/cpuctl/top-app/cpu.shares 20480 + + # gvotables for dumpstate + chown system system /sys/kernel/debug/gvotables + + # Permission for wireless charging + chown system system /sys/class/power_supply/wireless/capacity + chown system system /sys/class/power_supply/wireless/device/rtx + chown system system /sys/class/power_supply/wireless/device/rxdata + chown system system /sys/class/power_supply/wireless/device/txdata + chown system system /sys/class/power_supply/wireless/device/rxlen + chown system system /sys/class/power_supply/wireless/device/txlen + chown system system /sys/class/power_supply/wireless/device/ccreset + chown system system /sys/class/power_supply/wireless/device/status + chown system system /sys/class/power_supply/wireless/device/version + + # AOC reset permission + chown root system /sys/devices/platform/19000000.aoc/reset + chmod 0220 /sys/devices/platform/19000000.aoc/reset + + # AOC UDFPS clock compensation permission + chown system system /sys/devices/platform/19000000.aoc/control/udfps_set_clock_source + chmod 220 /sys/devices/platform/19000000.aoc/control/udfps_set_clock_source + chown system system /sys/devices/platform/19000000.aoc/control/udfps_get_osc_freq + chmod 440 /sys/devices/platform/19000000.aoc/control/udfps_get_osc_freq + chown system system /sys/devices/platform/19000000.aoc/control/udfps_get_disp_freq + chmod 440 /sys/devices/platform/19000000.aoc/control/udfps_get_disp_freq + + #enable GPU power optimization + write /sys/devices/platform/28000000.mali/ifpo 1 + +# IMS WiFi Calling + service charonservice /system/vendor/bin/charon + class main + user root + disabled + seclabel u:r:charonservice:s0 + +on property:vendor.charon.exec=1 + rm /data/vendor/misc/vpn/charon.pid + chmod 0666 /dev/tun + start charonservice + +on property:vendor.charon.exec=0 + stop charonservice + rm /data/vendor/misc/vpn/charon.pid + +# charger driver exposes now finer grain control, map demo mode to those properties +# NOTE: demo mode can only be exit wiping data (which reset the persist properties) +on property:sys.retaildemo.enabled=1 + setprop persist.vendor.charge.stop.level 35 + setprop persist.vendor.charge.start.level 30 + +# Test Harness Mode default battery profile. +on property:persist.sys.test_harness=1 && property:persist.vendor.testing_battery_profile=0 + setprop persist.vendor.charge.stop.level 70 + setprop persist.vendor.charge.start.level 35 + setprop vendor.battery.defender.disable 1 + +# Extremely restricted battery profile. +on property:persist.sys.test_harness=1 && property:persist.vendor.testing_battery_profile=1 + setprop persist.vendor.charge.stop.level 50 + setprop persist.vendor.charge.start.level 35 + setprop vendor.battery.defender.disable 1 + +# Normal behavior (as if the device was a regular device) +on property:persist.sys.test_harness=1 && property:persist.vendor.testing_battery_profile=2 + setprop persist.vendor.charge.stop.level 100 + setprop persist.vendor.charge.start.level 0 + +# Unrestricted, allows charging to 100% +on property:persist.sys.test_harness=1 && property:persist.vendor.testing_battery_profile=3 + setprop persist.vendor.charge.stop.level 100 + setprop persist.vendor.charge.start.level 0 + setprop vendor.battery.defender.disable 1 + +service insmod_sh_common /vendor/bin/init.insmod.sh /vendor/etc/init.insmod.gs201.cfg + class main + user root + group root system + disabled + oneshot + +# Set watchdog timer to 30 seconds and pet it every 10 seconds to get a 20 second margin +service watchdogd /system/bin/watchdogd 10 20 + class core + oneshot + seclabel u:r:watchdogd:s0 + +# bugreport is triggered by holding down volume down, volume up and power +service bugreport /system/bin/dumpstate -d -p -z + class main + disabled + oneshot + keycodes 114 115 116 + +# Proxy for Secure Storage +on post-fs-data + mkdir /data/vendor/rebootescrow 0770 hsm hsm + mkdir /data/vendor/ss 0770 root system + mkdir /mnt/vendor/persist/ss 0770 root system + restorecon_recursive /mnt/vendor/persist/ss + symlink /mnt/vendor/persist/ss /data/vendor/ss/persist + chown root system /data/vendor/ss/persist + chmod 0770 /data/vendor/ss/persist + + restart storageproxyd + +service storageproxyd /vendor/bin/storageproxyd -d /dev/trusty-ipc-dev0 \ + -r /dev/sg1 -p /data/vendor/ss -t ufs + class early_hal + user root + +# Write build info to kdebuginfo +on property:ro.build.fingerprint=* + write /sys/module/debug_kinfo/parameters/build_info ${ro.build.fingerprint} + +# Bluetooth +on post-fs-data + chown bluetooth system /sys/devices/platform/175b0000.serial/serial0/serial0-0/bluetooth/hci0/rfkill0/state + chown bluetooth system /sys/devices/platform/odm/odm:btbcm/rfkill/rfkill0/state + chown bluetooth system /sys/devices/platform/odm/odm:btbcm/rfkill/rfkill2/state + chown bluetooth system /proc/bluetooth/sleep/btwake + chown bluetooth system /proc/bluetooth/sleep/lpm + chown bluetooth system /proc/bluetooth/sleep/btwrite + +# ODPM +on fs + chown system system /sys/devices/platform/acpm_mfd_bus@18100000/i2c-7/i2c-s2mpg12mfd/s2mpg12-meter/s2mpg12-odpm/iio\:device0/enabled_rails + chown system system /sys/devices/platform/acpm_mfd_bus@18110000/i2c-8/i2c-s2mpg13mfd/s2mpg13-meter/s2mpg13-odpm/iio\:device1/enabled_rails + +on post-fs-data + mkdir /data/vendor/powerstats 0771 system system + chown system system /data/vendor/powerstats + +on property:vendor.thermal.link_ready=1 + # BCL + write /sys/devices/virtual/pmic/mitigation/clock_ratio/tpu_light_clk_ratio 0xfff041c1 #DFS + write /sys/devices/virtual/pmic/mitigation/clock_ratio/cpu1_heavy_clk_ratio 0xfff041c1 #DFS + write /sys/devices/virtual/pmic/mitigation/clock_ratio/cpu2_heavy_clk_ratio 0xfff041c1 #DFS + write /sys/devices/virtual/pmic/mitigation/clock_ratio/gpu_light_clk_ratio 0xfff041c1 #DFS + write /sys/devices/virtual/pmic/mitigation/clock_ratio/cpu2_light_clk_ratio 0xfff041c3 #OCP + write /sys/devices/virtual/pmic/mitigation/clock_ratio/gpu_heavy_clk_ratio 0xfff04385 #OCP + write /sys/devices/virtual/pmic/mitigation/clock_ratio/tpu_heavy_clk_ratio 0xfff041c3 #OCP + write /sys/devices/virtual/pmic/mitigation/triggered_lvl/smpl_lvl 3100 + write /sys/devices/virtual/pmic/mitigation/triggered_lvl/soft_ocp_cpu2_lvl 12000 + write /sys/devices/virtual/pmic/mitigation/triggered_lvl/soft_ocp_gpu_lvl 9000 + write /sys/devices/virtual/pmic/mitigation/triggered_lvl/soft_ocp_tpu_lvl 8500 + write /sys/devices/virtual/pmic/mitigation/clock_div/tpu_clk_div 0x1 + write /sys/devices/virtual/pmic/mitigation/clock_div/gpu_clk_div 0x1 + write /sys/devices/virtual/pmic/mitigation/clock_div/cpu2_clk_div 0x1 + chown system system /dev/thermal/tz-by-name/soc/mode + chown system system /dev/thermal/tz-by-name/vdroop2/trip_point_0_temp + chown system system /dev/thermal/tz-by-name/vdroop2/trip_point_0_hyst + chown system system /dev/thermal/tz-by-name/vdroop1/trip_point_0_temp + chown system system /dev/thermal/tz-by-name/vdroop1/trip_point_0_hyst + chown system system /dev/thermal/tz-by-name/smpl_gm/trip_point_0_temp + chown system system /dev/thermal/tz-by-name/smpl_gm/trip_point_0_hyst + chown system system /dev/thermal/tz-by-name/ocp_cpu1/trip_point_0_temp + chown system system /dev/thermal/tz-by-name/ocp_cpu1/trip_point_0_hyst + chown system system /dev/thermal/tz-by-name/ocp_cpu2/trip_point_0_temp + chown system system /dev/thermal/tz-by-name/ocp_cpu2/trip_point_0_hyst + chown system system /dev/thermal/tz-by-name/ocp_tpu/trip_point_0_temp + chown system system /dev/thermal/tz-by-name/ocp_tpu/trip_point_0_hyst + chown system system /dev/thermal/tz-by-name/ocp_gpu/trip_point_0_temp + chown system system /dev/thermal/tz-by-name/ocp_gpu/trip_point_0_hyst + chown system system /dev/thermal/tz-by-name/soft_ocp_cpu1/trip_point_0_temp + chown system system /dev/thermal/tz-by-name/soft_ocp_cpu1/trip_point_0_hyst + chown system system /dev/thermal/tz-by-name/soft_ocp_cpu2/trip_point_0_temp + chown system system /dev/thermal/tz-by-name/soft_ocp_cpu2/trip_point_0_hyst + chown system system /dev/thermal/tz-by-name/soft_ocp_tpu/trip_point_0_temp + chown system system /dev/thermal/tz-by-name/soft_ocp_tpu/trip_point_0_hyst + chown system system /dev/thermal/tz-by-name/soft_ocp_gpu/trip_point_0_temp + chown system system /dev/thermal/tz-by-name/soft_ocp_gpu/trip_point_0_hyst + chown system system /dev/thermal/tz-by-name/soc/trip_point_0_temp + chown system system /dev/thermal/tz-by-name/soc/trip_point_0_hyst + chown system system /dev/thermal/tz-by-name/batoilo/trip_point_0_temp + chown system system /dev/thermal/tz-by-name/batoilo/trip_point_0_hyst + # Thermal + chown system system /dev/thermal/tz-by-name/quiet_therm/trip_point_0_temp + chown system system /dev/thermal/tz-by-name/quiet_therm/trip_point_0_hyst + chown system system /dev/thermal/cdev-by-name/thermal-cpufreq-0/user_vote + chown system system /dev/thermal/cdev-by-name/thermal-cpufreq-1/user_vote + chown system system /dev/thermal/cdev-by-name/thermal-cpufreq-2/user_vote + chown system system /dev/thermal/cdev-by-name/thermal-gpufreq-0/user_vote + chown system system /dev/thermal/cdev-by-name/gxp-cooling/user_vote + chown system system /dev/thermal/cdev-by-name/tpu_cooling/user_vote + chown system system /dev/thermal/cdev-by-name/fcc/cur_state + chown system system /dev/thermal/cdev-by-name/dc_icl/cur_state + chown system system /dev/thermal/cdev-by-name/wlc_fcc/cur_state + chown system system /dev/thermal/cdev-by-name/chg_mdis/cur_state + chown system system /dev/thermal/cdev-by-name/usbc-port/cur_state + +on property:vendor.disable.bcl.control=1 + write /sys/devices/virtual/pmic/mitigation/instruction/enable_mitigation 0 + +on property:vendor.disable.bcl.control=0 + write /sys/devices/virtual/pmic/mitigation/instruction/enable_mitigation 1 + +# UDFPS +on post-fs-data && property:ro.vendor.factory=1 + # HBM mode for UDFPS factory apk + chmod 666 /d/dri/0/DSI-1/panel/reg/payload + chmod 666 /d/dri/0/DSI-1/panel/hbm_mode + chmod 666 /sys/class/backlight/panel0-backlight/local_hbm_max_timeout + chmod 666 /sys/class/backlight/panel0-backlight/local_hbm_mode + chmod 666 /sys/class/backlight/panel0-backlight/hbm_mode + +# Persistent Soft Max Freq overrides +on property:persist.vendor.softmaxfreq.cl0=* + write /sys/devices/platform/exynos-acme/freq_qos_max "0 ${persist.vendor.softmaxfreq.cl0}" + +on property:persist.vendor.softmaxfreq.cl1=* + write /sys/devices/platform/exynos-acme/freq_qos_max "4 ${persist.vendor.softmaxfreq.cl1}" + +on property:persist.vendor.softmaxfreq.cl2=* + write /sys/devices/platform/exynos-acme/freq_qos_max "6 ${persist.vendor.softmaxfreq.cl2}" + +# UFS +on property:ro.boot.mode=charger && property:init.svc.vendor.charger=running + # Enable UFS powersaving in Off Mode Charger + write /dev/sys/block/bootdevice/clkgate_enable 1 diff --git a/conf/init.gs201.usb.rc b/conf/init.gs201.usb.rc new file mode 100644 index 00000000..d8f89965 --- /dev/null +++ b/conf/init.gs201.usb.rc @@ -0,0 +1,196 @@ +on early-boot + mkdir /config/usb_gadget/g1 + mkdir /config/usb_gadget/g1/strings/0x409 + mkdir /config/usb_gadget/g1/configs/b.1 + write /config/usb_gadget/g1/idVendor 0x18d1 + write /config/usb_gadget/g1/strings/0x409/serialnumber ${ro.serialno} + write /config/usb_gadget/g1/strings/0x409/manufacturer ${ro.product.manufacturer} + write /config/usb_gadget/g1/strings/0x409/product ${ro.product.model} + write /config/usb_gadget/g1/configs/b.1/MaxPower 0x384 + write /config/usb_gadget/g1/os_desc/b_vendor_code 0x1 + write /config/usb_gadget/g1/os_desc/qw_sign "MSFT100" + + # ffs function + mkdir /config/usb_gadget/g1/functions/ffs.adb 0770 shell shell + mkdir /config/usb_gadget/g1/functions/ffs.mtp + mkdir /config/usb_gadget/g1/functions/ffs.ptp + mkdir /dev/usb-ffs 0775 shell shell + mkdir /dev/usb-ffs/adb 0770 shell shell + mkdir /dev/usb-ffs/mtp 0770 mtp mtp + mkdir /dev/usb-ffs/ptp 0770 mtp mtp + mount functionfs adb /dev/usb-ffs/adb rmode=0770,fmode=0660,uid=2000,gid=2000,no_disconnect=1 + mount functionfs mtp /dev/usb-ffs/mtp rmode=0770,fmode=0660,uid=1024,gid=1024,no_disconnect=1 + mount functionfs ptp /dev/usb-ffs/ptp rmode=0770,fmode=0660,uid=1024,gid=1024,no_disconnect=1 + setprop sys.usb.mtp.device_type 3 + setprop sys.usb.mtp.batchcancel true + symlink /config/usb_gadget/g1/configs/b.1 /config/usb_gadget/g1/os_desc/b.1 + + # mtp function + mkdir /config/usb_gadget/g1/functions/mtp.gs0 + + # ptp function + mkdir /config/usb_gadget/g1/functions/ptp.gs1 + + # accessory function + mkdir /config/usb_gadget/g1/functions/accessory.gs2 + + # audio_source function + mkdir /config/usb_gadget/g1/functions/audio_source.gs3 + + # rndis function + mkdir /config/usb_gadget/g1/functions/rndis.gs4 + # Modify class/subclass/protocol for rndis.gs4 + # Remote NDIS: Class: Wireless Controller (0xe0), Subclass: 0x1, Protocol: 0x3 + write /config/usb_gadget/g1/functions/rndis.gs4/class e0 + write /config/usb_gadget/g1/functions/rndis.gs4/subclass 01 + write /config/usb_gadget/g1/functions/rndis.gs4/protocol 03 + write /config/usb_gadget/g1/functions/rndis.gs4/os_desc/interface.ncm/compatible_id RNDIS + write /config/usb_gadget/g1/functions/rndis.gs4/ifname rndis%d + setprop vendor.usb.rndis.config rndis.gs4 + + # midi function + mkdir /config/usb_gadget/g1/functions/midi.gs5 + + # acm function + mkdir /config/usb_gadget/g1/functions/acm.gs6 + + # dm function + mkdir /config/usb_gadget/g1/functions/dm.gs7 + + # uts function + mkdir /config/usb_gadget/g1/functions/uts.gs8 + + # ncm function + mkdir /config/usb_gadget/g1/functions/ncm.gs9 + write /config/usb_gadget/g1/functions/ncm.gs9/os_desc/interface.ncm/compatible_id WINNCM + write /config/usb_gadget/g1/functions/ncm.gs9/ifname ncm%d + + # etr_miu function + mkdir /config/usb_gadget/g1/functions/etr_miu.gs11 + + # acm function for uwb + mkdir /config/usb_gadget/g1/functions/acm.uwb0 + + # chown file/folder permission + chown system system /config/usb_gadget/ + chown system system /config/usb_gadget/g1 + chown system system /config/usb_gadget/g1/UDC + chown system system /config/usb_gadget/g1/bDeviceClass + chown system system /config/usb_gadget/g1/bDeviceProtocol + chown system system /config/usb_gadget/g1/bDeviceSubClass + chown system system /config/usb_gadget/g1/bMaxPacketSize0 + chown system system /config/usb_gadget/g1/bcdDevice + chown system system /config/usb_gadget/g1/bcdUSB + chown system system /config/usb_gadget/g1/configs + chown system system /config/usb_gadget/g1/configs/b.1 + chown system system /config/usb_gadget/g1/configs/b.1/MaxPower + chown system system /config/usb_gadget/g1/configs/b.1/bmAttributes + chown system system /config/usb_gadget/g1/configs/b.1/strings + chown system system /config/usb_gadget/g1/functions + chown system system /config/usb_gadget/g1/functions/accessory.gs2 + chown system system /config/usb_gadget/g1/functions/acm.gs6 + chown system system /config/usb_gadget/g1/functions/acm.gs6/port_num + chown system system /config/usb_gadget/g1/functions/acm.uwb0 + chown system system /config/usb_gadget/g1/functions/acm.uwb0/port_num + chown system system /config/usb_gadget/g1/functions/audio_source.gs3 + chown system system /config/usb_gadget/g1/functions/dm.gs7 + chown system system /config/usb_gadget/g1/functions/ffs.adb + chown system system /config/usb_gadget/g1/functions/ffs.mtp + chown system system /config/usb_gadget/g1/functions/ffs.ptp + chown system system /config/usb_gadget/g1/functions/midi.gs5 + chown system system /config/usb_gadget/g1/functions/midi.gs5/buflen + chown system system /config/usb_gadget/g1/functions/midi.gs5/id + chown system system /config/usb_gadget/g1/functions/midi.gs5/in_ports + chown system system /config/usb_gadget/g1/functions/midi.gs5/index + chown system system /config/usb_gadget/g1/functions/midi.gs5/out_ports + chown system system /config/usb_gadget/g1/functions/midi.gs5/qlen + chown system system /config/usb_gadget/g1/functions/mtp.gs0 + chown system system /config/usb_gadget/g1/functions/mtp.gs0/os_desc + chown system system /config/usb_gadget/g1/functions/mtp.gs0/os_desc/interface.MTP + chown system system /config/usb_gadget/g1/functions/mtp.gs0/os_desc/interface.MTP/compatible_id + chown system system /config/usb_gadget/g1/functions/mtp.gs0/os_desc/interface.MTP/sub_compatible_id + chown system system /config/usb_gadget/g1/functions/ncm.gs9 + chown system system /config/usb_gadget/g1/functions/ncm.gs9/dev_addr + chown system system /config/usb_gadget/g1/functions/ncm.gs9/host_addr + chown system system /config/usb_gadget/g1/functions/ncm.gs9/ifname + chown system system /config/usb_gadget/g1/functions/ncm.gs9/os_desc + chown system system /config/usb_gadget/g1/functions/ncm.gs9/os_desc/interface.ncm + chown system system /config/usb_gadget/g1/functions/ncm.gs9/os_desc/interface.ncm/compatible_id + chown system system /config/usb_gadget/g1/functions/ncm.gs9/os_desc/interface.ncm/sub_compatible_id + chown system system /config/usb_gadget/g1/functions/ncm.gs9/qmult + chown system system /config/usb_gadget/g1/functions/ptp.gs1 + chown system system /config/usb_gadget/g1/functions/ptp.gs1/os_desc + chown system system /config/usb_gadget/g1/functions/ptp.gs1/os_desc/interface.MTP + chown system system /config/usb_gadget/g1/functions/ptp.gs1/os_desc/interface.MTP/compatible_id + chown system system /config/usb_gadget/g1/functions/ptp.gs1/os_desc/interface.MTP/sub_compatible_id + chown system system /config/usb_gadget/g1/functions/rndis.gs4 + chown system system /config/usb_gadget/g1/functions/rndis.gs4/class + chown system system /config/usb_gadget/g1/functions/rndis.gs4/dev_addr + chown system system /config/usb_gadget/g1/functions/rndis.gs4/host_addr + chown system system /config/usb_gadget/g1/functions/rndis.gs4/ifname + chown system system /config/usb_gadget/g1/functions/rndis.gs4/os_desc + chown system system /config/usb_gadget/g1/functions/rndis.gs4/os_desc/interface.rndis + chown system system /config/usb_gadget/g1/functions/rndis.gs4/os_desc/interface.rndis/compatible_id + chown system system /config/usb_gadget/g1/functions/rndis.gs4/os_desc/interface.rndis/sub_compatible_id + chown system system /config/usb_gadget/g1/functions/rndis.gs4/protocol + chown system system /config/usb_gadget/g1/functions/rndis.gs4/qmult + chown system system /config/usb_gadget/g1/functions/rndis.gs4/subclass + chown system system /config/usb_gadget/g1/idProduct + chown system system /config/usb_gadget/g1/idVendor + chown system system /config/usb_gadget/g1/max_speed + chown system system /config/usb_gadget/g1/os_desc + chown system system /config/usb_gadget/g1/os_desc/b.1 + chown system system /config/usb_gadget/g1/os_desc/b_vendor_code + chown system system /config/usb_gadget/g1/os_desc/qw_sign + chown system system /config/usb_gadget/g1/os_desc/use + chown system system /config/usb_gadget/g1/strings + chown system system /config/usb_gadget/g1/strings/0x409 + chown system system /config/usb_gadget/g1/strings/0x409/manufacturer + chown system system /config/usb_gadget/g1/strings/0x409/product + chown system system /config/usb_gadget/g1/strings/0x409/serialnumber + setprop vendor.usb.functions.ready 1 + +on boot + write /config/usb_gadget/g1/bcdDevice 0x0510 + # Use USB Gadget HAL + setprop sys.usb.configfs 2 + +on property:sys.usb.ffs.ready=1 && property:sys.usb.config=adb && property:sys.usb.configfs=1 + write /config/usb_gadget/g1/idProduct 0x4EE7 + write /config/usb_gadget/g1/idVendor 0x18D1 + +on property:vendor.usb.config=* + start usbd + +on property:persist.vendor.usb.usbradio.config=* + start usbd + +on charger + mkdir /config/usb_gadget/g1 + mkdir /config/usb_gadget/g1/strings/0x409 + mkdir /config/usb_gadget/g1/configs/b.1 + write /config/usb_gadget/g1/strings/0x409/serialnumber ${ro.serialno} + write /config/usb_gadget/g1/strings/0x409/manufacturer ${ro.product.manufacturer} + write /config/usb_gadget/g1/strings/0x409/product ${ro.product.model} + write /config/usb_gadget/g1/configs/b.1/MaxPower 0x384 + write /config/usb_gadget/g1/os_desc/b_vendor_code 0x1 + write /config/usb_gadget/g1/os_desc/qw_sign "MSFT100" + write /config/usb_gadget/g1/bcdDevice 0x0510 + mkdir /config/usb_gadget/g1/functions/midi.gs5 + symlink /config/usb_gadget/g1/configs/b.1 /config/usb_gadget/g1/os_desc/b.1 + setprop sys.usb.controller "11110000.dwc3" + setprop sys.usb.configfs 1 + +on property:ro.bootmode=charger + setprop sys.usb.config charger + +on property:sys.usb.config=charger && property:sys.usb.configfs=1 + write /config/usb_gadget/g1/idVendor 0x18d1 + write /config/usb_gadget/g1/idProduct 0x4eea + write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration "midi" + symlink /config/usb_gadget/g1/functions/midi.gs5 /config/usb_gadget/g1/configs/b.1/f1 + write /config/usb_gadget/g1/UDC ${sys.usb.controller} + setprop sys.usb.state ${sys.usb.config} + +on property:ro.bootmode=usbuwb + setprop persist.vendor.usb.usbradio.config uwb_acm diff --git a/conf/init.recovery.device.rc b/conf/init.recovery.device.rc new file mode 100644 index 00000000..592efbd3 --- /dev/null +++ b/conf/init.recovery.device.rc @@ -0,0 +1,16 @@ +on init + wait /sys/devices/platform/11210000.usb/11210000.dwc3/driver 10 + setprop sys.usb.controller "11210000.dwc3" + setprop sys.usb.configfs 1 + +on init && property:ro.debuggable=1 && property:ro.boot.mode=recovery + start recovery-console + +service recovery-console /system/bin/sh + class core + console + disabled + user root + group root shell log readproc + seclabel u:r:su:s0 + setenv HOSTNAME console diff --git a/conf/recovery.wipe b/conf/recovery.wipe new file mode 100644 index 00000000..9ee7a1e3 --- /dev/null +++ b/conf/recovery.wipe @@ -0,0 +1,3 @@ +# All the partitions to be wiped (in order) under recovery. +/dev/block/by-name/userdata +/dev/block/by-name/metadata diff --git a/conf/soundtrigger_conf.h b/conf/soundtrigger_conf.h new file mode 100644 index 00000000..1263c60b --- /dev/null +++ b/conf/soundtrigger_conf.h @@ -0,0 +1,109 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef __EXYNOS_SOUNDTRIGGERCONF_H__ +#define __EXYNOS_SOUNDTRIGGERCONF_H__ + +/********************************************************************/ +/** ALSA Framework Sound Card & Sound Device Information */ +/** */ +/** You can find Sound Device Name from /dev/snd. */ +/** Sound Device Name consist of Card Number & Device Number. */ +/** */ +/********************************************************************/ + +/* Sound Card and Mixer card Numbers based on Target Device */ +/* You have to match this number with real kernel information */ +#define VTS_SOUND_CARD 0 +#define VTS_MIXER_CARD 0 + +/* PCM Nodes number for seamless and normal recording*/ +#define VTS_TRICAP_DEVICE_NODE 13 +#define VTS_RECORD_DEVICE_NODE 14 + +/* sysfs file paths for loading model binaries into VTS kernel driver */ +#define VTS_HOTWORD_MODEL "/sys/devices/platform/13810000.vts/vts_google_model" +#define VTS_SVOICE_MODEL "/sys/devices/platform/13810000.vts/vts_svoice_model" + +#define AUDIO_PRIMARY_HAL_LIBRARY_PATH "/vendor/lib/libaudioproxy.so" + +// VTS Capture(Input) PCM Configuration +#define DEFAULT_VTS_CHANNELS 1 // Mono +#define DEFAULT_VTS_SAMPLING_RATE 16000 // 16KHz + +#define PRIMARY_VTS_PERIOD_SIZE 160 // 160 frames, 10ms in case of 16KHz Stream +#define PRIMARY_VTS_PERIOD_COUNT 1024 // Buffer count => Total 327680 Bytes = 160 * 1(Mono) * 2(16bit PCM) * 1024(Buffer count) + +/* VTS mixer controls */ +#define VTS_ACTIVE_KEYPHRASE_CTL_NAME "VTS Active Keyphrase" /* default: 0-"SVOICE", 1-"GOOGLE", 2-"SENSORY" */ +#define VTS_EXECUTION_MODE_CTL_NAME "VTS Execution Mode" /* 0-"OFF-MODE", 1-"VOICE-TRIG-MODE", 2-"SOUND-DECTECT-MODE", 3-"VT-ALWAYS-MODE" 4-"GOOGLE-TRI-MODE */ +#define VTS_VOICERECOGNIZE_START_CTL_NAME "VTS VoiceRecognize Start" /* 0-"Off", 1-On" */ +#define VTS_VOICETRIGGER_VALUE_CTL_NAME "VTS VoiceTrigger Value" /* 0 ~ 2000 ms*/ + +#define MAIN_MIC_CONTROL_COUNT 8 +#define HEADSET_MIC_CONTROL_COUNT 8 +#define MODEL_RECOGNIZE_CONTROL_COUNT 4 + +/* MIC Mixer controls for VTS */ +char *main_mic_ctlname[] = { + "VTS DMIC SEL", + "VTS DMIC IF RCH EN", + "VTS DMIC IF LCH EN", + "VTS SYS SEL", + "VTS HPF EN", + "VTS HPF SEL", + "DMIC1 Switch", + "VTS Virtual Output Mux", +}; + +char *headset_mic_ctlname[] = { + "AUXPDM1 Rate", + "AUXPDM1 Input", + "AUXPDM1 Output Switch", + "AUXPDM Switch", + "VTS DMIC SEL", + "VTS DMIC IF RCH EN", + "VTS DMIC IF LCH EN", + "VTS SYS SEL", + "VTS HPF EN", + "VTS HPF SEL", +}; + +/* MIC Mixer control values */ +/* FIXME : Double check this values */ +int main_mic_ctlvalue[] = { + 0, //"VTS DMIC SEL", + 1, //"VTS DMIC IF RCH EN", + 1, //"VTS DMIC IF LCH EN", + 1, //"VTS SYS SEL", + 1, //"VTS HPF EN", + 1, //"VTS HPF SEL", + 1, //"DMIC1 Switch", + 1, //"VTS Virtual Output Mux", +}; + +int headset_mic_ctlvalue[] = { + 3, //"AUXPDM1 Rate", + 0, //"AUXPDM1 Input", + 1, //"AUXPDM1 Output Switch", + 1, //"AUXPDM Switch", + 1, //"VTS DMIC SEL", + 1, //"VTS DMIC IF RCH EN", + 1, //"VTS DMIC IF LCH EN", + 1, //"VTS SYS SEL", + 1, //"VTS HPF EN", + 1, //"VTS HPF SEL", +}; +#endif // __EXYNOS_SOUNDTRIGGERCONF_H__ diff --git a/conf/ueventd.gs201.rc b/conf/ueventd.gs201.rc new file mode 100644 index 00000000..c4006353 --- /dev/null +++ b/conf/ueventd.gs201.rc @@ -0,0 +1,219 @@ +/dev/mali0 0666 system system +/dev/ion 0666 system system +/dev/ump 0666 system graphics +/dev/exynos-mem 0660 system graphics +/dev/video0 0660 system camera +/dev/video1 0660 system camera +/dev/video2 0660 system camera +/dev/video3 0660 system camera +/dev/video20 0660 system system +# media0 is used for GSC, DECON, etc +/dev/media0 0660 system camera +# media1 is used for DECON Ext WB +/dev/media1 0660 system graphics +# Various devices use the v4l-subdev interface +# We declare all such nodes simultaneously here +/dev/v4l-subdev0 0660 system camera +/dev/v4l-subdev1 0660 system camera +/dev/v4l-subdev2 0660 system camera +/dev/v4l-subdev3 0660 system camera +/dev/v4l-subdev4 0660 system camera +/dev/v4l-subdev5 0660 system camera +/dev/v4l-subdev6 0660 system camera +/dev/v4l-subdev7 0660 system camera +/dev/v4l-subdev8 0660 system camera +/dev/v4l-subdev9 0660 system camera +/dev/v4l-subdev10 0660 system camera +/dev/v4l-subdev11 0660 system camera +/dev/v4l-subdev12 0660 system camera +/dev/v4l-subdev13 0660 system camera +/dev/v4l-subdev14 0660 system camera +/dev/v4l-subdev15 0660 system camera +/dev/v4l-subdev16 0660 system camera +/dev/v4l-subdev17 0660 system camera +/dev/v4l-subdev18 0660 system camera +/dev/v4l-subdev19 0660 system camera +# v4l-subdev20 is used for DECON Ext WB +/dev/v4l-subdev20 0660 system graphics +/dev/v4l-subdev21 0660 system graphics +/dev/v4l-subdev32 0660 system graphics + +# gscalers +/dev/video23 0660 media graphics +/dev/video26 0660 media graphics +/dev/video24 0660 media graphics +/dev/video27 0660 media graphics +/dev/video29 0660 media graphics +/dev/video30 0660 media graphics +# video31 is used for DECON Ext WB +/dev/video31 0660 media graphics + +# mscalers +/dev/video50 0660 mediacodec drmrpc +/dev/m2m1shot_scaler0 0660 mediacodec drmrpc + +/dev/video55 0666 system graphics +/dev/g2d 0660 system graphics +/dev/fimg2d 0666 system graphics +/dev/i2c-2 0660 system system +/dev/HPD 0660 system system + +# wfd +/dev/tsmux 0660 media graphics +/dev/repeater 0660 media graphics + +# mfc +/dev/video6 0660 mediacodec mediadrm +/dev/video7 0660 mediacodec mediadrm +/dev/video8 0660 mediacodec mediadrm +/dev/video9 0660 mediacodec mediadrm +/dev/video10 0660 mediacodec mediadrm +/dev/video11 0660 mediacodec mediadrm + +# camera +/dev/media2 0660 media media +/dev/hdcp2 0660 media media + +# jpeg +/dev/m2m1shot_jpeg 0660 media media +/dev/video12 0660 cameraserver media + +# audio +/dev/seiren 0660 system audio +/dev/acd-audio_output_tuning 0660 system audio +/dev/acd-audio_bulk_tx 0660 system audio +/dev/acd-audio_bulk_rx 0660 system audio +/dev/acd-audio_input_tuning 0660 system audio +/dev/acd-audio_input_bulk_tx 0660 system audio +/dev/acd-audio_input_bulk_rx 0660 system audio +/dev/acd-sound_trigger 0660 system audio +/dev/acd-hotword_notification 0660 system audio +/dev/acd-hotword_pcm 0660 system audio +/dev/acd-ambient_pcm 0660 system audio +/dev/acd-model_data 0660 system audio +/dev/acd-debug 0660 system audio +/dev/acd-audio_tap* 0660 system audio +/dev/acd-audio_dcdoff_ref 0660 system audio +/dev/amcs 0660 system audio + +# Secure MEM driver +/dev/s5p-smem 0660 drm drmrpc + +# cbd +/dev/block/by-name/modem 0640 root radio +/dev/block/by-name/modem_a 0640 root radio +/dev/block/by-name/modem_b 0640 root radio + +# DM tools +/dev/umts_dm0 0660 system system +/dev/umts_router 0660 system system +/dev/ttyGS0 0660 system system +/dev/ttyGS1 0660 system system +/dev/ttyGS2 0660 system system + +# IPC RIL +/dev/umts_boot0 0660 radio system +/dev/umts_ipc0 0660 radio radio +/dev/umts_ipc1 0660 radio radio +/dev/umts_rfs0 0660 radio radio + +# IPC OEM +/dev/oem_ipc* 0660 radio radio + +# interactive governor parameters +/sys/devices/system/cpu/cpu* cpufreq/interactive/timer_rate 0660 system system +/sys/devices/system/cpu/cpu* cpufreq/interactive/timer_slack 0660 system system +/sys/devices/system/cpu/cpu* cpufreq/interactive/min_sample_time 0660 system system +/sys/devices/system/cpu/cpu* cpufreq/interactive/hispeed_freq 0660 system system +/sys/devices/system/cpu/cpu* cpufreq/interactive/target_loads 0660 system system +/sys/devices/system/cpu/cpu* cpufreq/interactive/go_hispeed_load 0660 system system +/sys/devices/system/cpu/cpu* cpufreq/interactive/above_hispeed_delay 0660 system system +/sys/devices/system/cpu/cpu* cpufreq/interactive/boost 0660 system system +/sys/devices/system/cpu/cpu* cpufreq/interactive/boostpulse 0200 system system +/sys/devices/system/cpu/cpu* cpufreq/interactive/input_boost 0660 system system +/sys/devices/system/cpu/cpu* cpufreq/interactive/boostpulse_duration 0660 system system +/sys/devices/system/cpu/cpu* cpufreq/interactive/io_is_busy 0660 system system + +# Vision (VPU, SCORE) +/dev/vertex0 0660 media media +/dev/vertex1 0660 media media + +# AoC +/dev/aoc 0660 system system + +# Sensors (USF) +/dev/acd-com.google.usf 0660 system system + +# LWIS +/dev/lwis* 0660 system system + +# NFC +/dev/st21nfc 0660 nfc nfc + +# SecureElement +/dev/st54j_se 0660 secure_element secure_element +/dev/st54spi 0660 secure_element secure_element +/dev/st33spi 0660 secure_element secure_element + +#bigocean +/dev/bigocean 0660 mediacodec mediadrm + +# Trusty +/dev/trusty-ipc-dev0 0660 system drmrpc +/dev/trusty-log0 0660 system system + +# RPMB +/dev/sg1 0660 system system + +# Citadel +/dev/gsc0 0660 hsm hsm + +# Storage: for factory reset protection feature +/dev/block/by-name/frp 0660 system system + +# Storage: for UDFPS calibration data sideload feature +/dev/block/by-name/mfg_data 0660 system system + +# TPU +/dev/janeiro 0660 system system + +# DSP +/dev/gxp 0666 system camera + +# TOE +/dev/dit2 0660 radio radio + +# Bluetooth +/dev/ttySAC18 0660 bluetooth system +/dev/btpower 0660 bluetooth system + +# BT Wifi Coexistence +/dev/wbrc 0660 system system + +# TUI +/dev/tui-driver 0660 system system + +# DMA-BUF heaps +/dev/dma_heap/crypto 0444 system graphics +/dev/dma_heap/crypto-uncached 0444 system graphics +/dev/dma_heap/faceauth_tpu-secure 0444 system graphics +/dev/dma_heap/faimg-secure 0444 system graphics +/dev/dma_heap/famodel-secure 0444 system graphics +/dev/dma_heap/faprev-secure 0444 system graphics +/dev/dma_heap/farawimg-secure 0444 system graphics +/dev/dma_heap/tui-secure 0444 system graphics +/dev/dma_heap/vframe-secure 0444 system drmrpc +/dev/dma_heap/vscaler-secure 0444 system graphics +/dev/dma_heap/vstream-secure 0444 system drmrpc +/dev/dma_heap/sensor_direct_heap 0444 system graphics +/dev/dma_heap/aaudio_playback_heap 0444 system audio +/dev/dma_heap/aaudio_capture_heap 0444 system audio + +# Direct Charging +/dev/logbuffer_pca9468_tcpm 0600 system system + +# Raw HID devices +/dev/hidraw* 0660 system system + +# Wlan +/dev/wlan 0660 wifi wifi diff --git a/default-permissions.xml b/default-permissions.xml new file mode 100644 index 00000000..2641aa47 --- /dev/null +++ b/default-permissions.xml @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +        +        + + + + + + +    + + + + + + + + + + diff --git a/device-common.mk b/device-common.mk new file mode 100644 index 00000000..35f04042 --- /dev/null +++ b/device-common.mk @@ -0,0 +1,44 @@ +# +# Copyright (C) 2020 The Android Open-Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +-include vendor/google_devices/gs201/proprietary/telephony/device-vendor.mk +include device/google/gs201/device.mk + +# Telephony +PRODUCT_COPY_FILES += \ + frameworks/native/data/etc/android.hardware.telephony.carrierlock.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.telephony.carrierlock.xml + +# Android Verified Boot +PRODUCT_COPY_FILES += \ + frameworks/native/data/etc/android.software.verified_boot.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.verified_boot.xml + +# Factory OTA +-include vendor/unbundled_google/packages/FactoryOtaPrebuilt/factoryota.mk + +# Set system properties identifying the chipset +PRODUCT_VENDOR_PROPERTIES += ro.soc.manufacturer=Google +PRODUCT_VENDOR_PROPERTIES += ro.soc.model=GS201 + +PRODUCT_PRODUCT_PROPERTIES += \ + persist.vendor.testing_battery_profile=2 + +# The default value of this variable is false and should only be set to true when +# the device allows users to retain eSIM profiles after factory reset of user data. +PRODUCT_PRODUCT_PROPERTIES += \ + masterclear.allow_retain_esim_profiles_after_fdr=true + +# ZramWriteback +-include hardware/google/pixel/mm/device_gki.mk diff --git a/device-shipping-common.mk b/device-shipping-common.mk new file mode 100644 index 00000000..63cfb734 --- /dev/null +++ b/device-shipping-common.mk @@ -0,0 +1,16 @@ +# +# Copyright (C) 2020 The Android Open-Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +include device/google/gs201/device-common.mk diff --git a/device.mk b/device.mk new file mode 100644 index 00000000..2f9147d7 --- /dev/null +++ b/device.mk @@ -0,0 +1,1093 @@ +# +# Copyright (C) 2011 The Android Open-Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +include device/google/gs-common/device.mk + +TARGET_BOARD_PLATFORM := gs201 + +AB_OTA_POSTINSTALL_CONFIG += \ + RUN_POSTINSTALL_system=true \ + POSTINSTALL_PATH_system=system/bin/otapreopt_script \ + FILESYSTEM_TYPE_system=erofs \ +POSTINSTALL_OPTIONAL_system=true + +# Set Vendor SPL to match platform +VENDOR_SECURITY_PATCH = $(PLATFORM_SECURITY_PATCH) + +# Set boot SPL +BOOT_SECURITY_PATCH = $(PLATFORM_SECURITY_PATCH) + +# TODO(b/207450311): Remove this flag once implemented +USE_PIXEL_GRALLOC := false +ifeq ($(USE_PIXEL_GRALLOC),true) + PRODUCT_SOONG_NAMESPACES += hardware/google/gchips/GrallocHAL +else + PRODUCT_SOONG_NAMESPACES += hardware/google/gchips/gralloc4 +endif + +PRODUCT_SOONG_NAMESPACES += \ + hardware/google/av \ + hardware/google/gchips \ + hardware/google/graphics/common \ + hardware/google/graphics/gs201 \ + hardware/google/interfaces \ + hardware/google/pixel \ + device/google/gs201 \ + device/google/gs201/powerstats \ + vendor/google/whitechapel/tools \ + vendor/google/interfaces \ + vendor/google_devices/common/proprietary/confirmatioui_hal \ + vendor/google_nos/host/android \ + vendor/google_nos/test/system-test-harness \ + vendor/google/camera + +LOCAL_KERNEL := $(TARGET_KERNEL_DIR)/Image.lz4 + +# OEM Unlock reporting +PRODUCT_DEFAULT_PROPERTY_OVERRIDES += \ + ro.oem_unlock_supported=1 + +# Include vendor telephony soong namespace +PRODUCT_SOONG_NAMESPACES += \ + vendor/samsung_slsi/telephony/$(BOARD_USES_SHARED_VENDOR_TELEPHONY) + +ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT))) +#Set IKE logs to verbose for WFC +PRODUCT_PROPERTY_OVERRIDES += log.tag.IKE=VERBOSE + +#Set Shannon IMS logs to debug +PRODUCT_PROPERTY_OVERRIDES += log.tag.SHANNON_IMS=DEBUG + +#Set Shannon QNS logs to debug +PRODUCT_PROPERTY_OVERRIDES += log.tag.ShannonQNS=DEBUG +PRODUCT_PROPERTY_OVERRIDES += log.tag.ShannonQNS-ims=DEBUG +PRODUCT_PROPERTY_OVERRIDES += log.tag.ShannonQNS-emergency=DEBUG +PRODUCT_PROPERTY_OVERRIDES += log.tag.ShannonQNS-mms=DEBUG +PRODUCT_PROPERTY_OVERRIDES += log.tag.ShannonQNS-xcap=DEBUG +PRODUCT_PROPERTY_OVERRIDES += log.tag.ShannonQNS-HC=DEBUG + +# Modem userdebug +include device/google/gs201/modem/userdebug.mk +endif + +ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT))) +# b/36703476: Set default log size to 1M +PRODUCT_PROPERTY_OVERRIDES += \ + ro.logd.size=1M +# b/114766334: persist all logs by default rotating on 30 files of 1MiB +PRODUCT_PROPERTY_OVERRIDES += \ + logd.logpersistd=logcatd \ + logd.logpersistd.size=30 +endif + +# From system.property +PRODUCT_PROPERTY_OVERRIDES += \ + ro.telephony.default_network=27 \ + persist.vendor.ril.use.iccid_to_plmn=1 \ + persist.vendor.ril.emergencynumber.mode=5 + #rild.libpath=/system/lib64/libsec-ril.so \ + #rild.libargs=-d /dev/umts_ipc0 + +# SIT-RIL Logging setting +PRODUCT_PROPERTY_OVERRIDES += \ + persist.vendor.ril.log_mask=3 \ + persist.vendor.ril.log.base_dir=/data/vendor/radio/sit-ril \ + persist.vendor.ril.log.chunk_size=5242880 \ + persist.vendor.ril.log.num_file=3 + +# Enable reboot free DSDS +PRODUCT_PRODUCT_PROPERTIES += \ + persist.radio.reboot_on_modem_change=false + +# Configure DSDS by default +PRODUCT_PRODUCT_PROPERTIES += \ + persist.radio.multisim.config=dsds + +# Enable Early Camping +PRODUCT_PRODUCT_PROPERTIES += \ + persist.vendor.ril.camp_on_earlier=1 + +# Set supported Bluetooth profiles to enabled +PRODUCT_PRODUCT_PROPERTIES += \ + bluetooth.profile.asha.central.enabled=true \ + bluetooth.profile.a2dp.source.enabled=true \ + bluetooth.profile.avrcp.target.enabled=true \ + bluetooth.profile.bap.broadcast.assist.enabled=true \ + bluetooth.profile.bap.unicast.server.enabled=true \ + bluetooth.profile.bas.client.enabled=true \ + bluetooth.profile.csip.set_coordinator.enabled=true \ + bluetooth.profile.gatt.enabled=true \ + bluetooth.profile.hap.client.enabled=true \ + bluetooth.profile.hfp.ag.enabled=true \ + bluetooth.profile.hid.device.enabled=true \ + bluetooth.profile.hid.host.enabled=true \ + bluetooth.profile.map.server.enabled=true \ + bluetooth.profile.mcp.server.enabled=true \ + bluetooth.profile.opp.enabled=true \ + bluetooth.profile.pan.nap.enabled=true \ + bluetooth.profile.pan.panu.enabled=true \ + bluetooth.profile.pbap.server.enabled=true \ + bluetooth.profile.sap.server.enabled=true \ + bluetooth.profile.tbs.server.enabled=true \ + bluetooth.profile.vc.server.enabled=true + +# Carrier configuration default location +PRODUCT_PROPERTY_OVERRIDES += \ + persist.vendor.radio.config.carrier_config_dir=/mnt/vendor/modem_img/images/default/confpack + +PRODUCT_PROPERTY_OVERRIDES += \ + telephony.active_modems.max_count=2 + +USE_LASSEN_OEMHOOK := true + +# Use for GRIL +USES_LASSEN_MODEM := true + +ifeq ($(USES_GOOGLE_DIALER_CARRIER_SETTINGS),true) +USE_GOOGLE_DIALER := true +USE_GOOGLE_CARRIER_SETTINGS := true +endif + +ifeq (,$(filter aosp_%,$(TARGET_PRODUCT))) +# Audio client implementation for RIL +USES_GAUDIO := true +endif + +# ###################### +# GRAPHICS - GPU (begin) + +# Must match BOARD_USES_SWIFTSHADER in BoardConfig.mk +USE_SWIFTSHADER := false + +# HWUI +TARGET_USES_VULKAN = true + +PRODUCT_SOONG_NAMESPACES += \ + vendor/arm/mali/valhall + +$(call soong_config_set,pixel_mali,soc,$(TARGET_BOARD_PLATFORM)) + +include device/google/gs101/neuralnetwork/neuralnetwork.mk + +PRODUCT_PACKAGES += \ + csffw_image_prebuilt__firmware_prebuilt_todx_mali_csffw.bin \ + libGLES_mali \ + vulkan.mali \ + libOpenCL \ + libgpudataproducer \ + +PRODUCT_VENDOR_PROPERTIES += \ + ro.hardware.vulkan=mali + +ifeq ($(USE_SWIFTSHADER),true) +PRODUCT_PACKAGES += \ + libGLESv1_CM_swiftshader \ + libEGL_swiftshader \ + libGLESv2_swiftshader +endif + +PRODUCT_COPY_FILES += \ + frameworks/native/data/etc/android.hardware.opengles.aep.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.opengles.aep.xml \ + frameworks/native/data/etc/android.hardware.vulkan.version-1_1.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.vulkan.version.xml \ + frameworks/native/data/etc/android.hardware.vulkan.level-1.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.vulkan.level.xml \ + frameworks/native/data/etc/android.hardware.vulkan.compute-0.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.vulkan.compute.xml \ + frameworks/native/data/etc/android.software.vulkan.deqp.level-2021-03-01.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.vulkan.deqp.level.xml \ + frameworks/native/data/etc/android.software.opengles.deqp.level-2021-03-01.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.opengles.deqp.level.xml + +ifeq ($(USE_SWIFTSHADER),true) +PRODUCT_VENDOR_PROPERTIES += \ + ro.hardware.egl = swiftshader +else +PRODUCT_VENDOR_PROPERTIES += \ + ro.hardware.egl = mali +endif + +PRODUCT_VENDOR_PROPERTIES += \ + ro.opengles.version=196610 \ + graphics.gpu.profiler.support=true \ + debug.renderengine.backend=skiaglthreaded \ + +# GRAPHICS - GPU (end) +# #################### + +# Device Manifest, Device Compatibility Matrix for Treble +DEVICE_MANIFEST_FILE := \ + device/google/gs201/manifest.xml + +ifneq (,$(filter aosp_%,$(TARGET_PRODUCT))) +DEVICE_MANIFEST_FILE += \ + device/google/gs201/manifest_media_aosp.xml + +PRODUCT_COPY_FILES += \ + device/google/gs201/media_codecs_aosp_c2.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_c2.xml +else +DEVICE_MANIFEST_FILE += \ + device/google/gs201/manifest_media.xml + +PRODUCT_COPY_FILES += \ + device/google/gs201/media_codecs_bo_c2.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_c2.xml \ + device/google/gs201/media_codecs_aosp_c2.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_aosp_c2.xml +endif + +DEVICE_MATRIX_FILE := \ + device/google/gs201/compatibility_matrix.xml + +DEVICE_PACKAGE_OVERLAYS += device/google/gs201/overlay + +# This will be updated to 33 (Android T) for shipping +PRODUCT_SHIPPING_API_LEVEL := 32 + +# RKP VINTF +-include vendor/google_nos/host/android/hals/keymaster/aidl/strongbox/RemotelyProvisionedComponent-citadel.mk + +# Enforce the Product interface +PRODUCT_PRODUCT_VNDK_VERSION := current +PRODUCT_ENFORCE_PRODUCT_PARTITION_INTERFACE := true + +# Init files +PRODUCT_COPY_FILES += \ + $(LOCAL_KERNEL):kernel \ + device/google/gs201/conf/init.gs201.usb.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/hw/init.gs201.usb.rc \ + device/google/gs201/conf/ueventd.gs201.rc:$(TARGET_COPY_OUT_VENDOR)/etc/ueventd.rc + +PRODUCT_COPY_FILES += \ + device/google/gs201/conf/init.gs201.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/hw/init.gs201.rc + +ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT))) +PRODUCT_COPY_FILES += \ + device/google/gs201/conf/init.debug.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/init.debug.rc +endif + +# Recovery files +PRODUCT_COPY_FILES += \ + device/google/gs201/conf/init.recovery.device.rc:$(TARGET_COPY_OUT_RECOVERY)/root/init.recovery.gs201.rc + +# Fstab files +PRODUCT_PACKAGES += \ + fstab.gs201 \ + fstab.gs201.vendor_ramdisk \ + fstab.gs201-fips \ + fstab.gs201-fips.vendor_ramdisk + +PRODUCT_COPY_FILES += \ + device/google/$(TARGET_BOARD_PLATFORM)/conf/fstab.persist:$(TARGET_COPY_OUT_VENDOR)/etc/fstab.persist \ + device/google/$(TARGET_BOARD_PLATFORM)/conf/fstab.modem:$(TARGET_COPY_OUT_VENDOR)/etc/fstab.modem + +# Shell scripts +PRODUCT_COPY_FILES += \ + device/google/gs201/init.insmod.sh:$(TARGET_COPY_OUT_VENDOR)/bin/init.insmod.sh \ + +# insmod files +PRODUCT_COPY_FILES += \ + device/google/gs201/init.insmod.gs201.cfg:$(TARGET_COPY_OUT_VENDOR)/etc/init.insmod.gs201.cfg + +# For creating dtbo image +PRODUCT_HOST_PACKAGES += \ + mkdtimg + +PRODUCT_PACKAGES += \ + messaging + +# Contexthub HAL +PRODUCT_PACKAGES += \ + android.hardware.contexthub-service.generic + +# CHRE tools +ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT))) +PRODUCT_PACKAGES += \ + chre_power_test_client \ + chre_test_client +endif + +PRODUCT_COPY_FILES += \ + frameworks/native/data/etc/android.hardware.context_hub.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.context_hub.xml + +## Enable the CHRE Daemon +CHRE_USF_DAEMON_ENABLED := true +PRODUCT_PACKAGES += \ + chre \ + preloaded_nanoapps.json + +# Filesystem management tools +PRODUCT_PACKAGES += \ + linker.vendor_ramdisk \ + tune2fs.vendor_ramdisk \ + resize2fs.vendor_ramdisk + +# Userdata Checkpointing OTA GC +PRODUCT_PACKAGES += \ + checkpoint_gc + +# Vendor verbose logging default property +ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT))) +PRODUCT_PROPERTY_OVERRIDES += \ + persist.vendor.verbose_logging_enabled=true +else +PRODUCT_PROPERTY_OVERRIDES += \ + persist.vendor.verbose_logging_enabled=false +endif + +# CP Logging properties +PRODUCT_PROPERTY_OVERRIDES += \ + ro.vendor.sys.modem.logging.loc = /data/vendor/slog \ + persist.vendor.sys.silentlog.tcp = "On" \ + ro.vendor.cbd.modem_removable = "1" \ + ro.vendor.cbd.modem_type = "s5100sit" \ + persist.vendor.sys.modem.logging.br_num=5 \ + persist.vendor.sys.modem.logging.enable=true + +# Enable silent CP crash handling +ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT))) +PRODUCT_PROPERTY_OVERRIDES += \ + persist.vendor.ril.crash_handling_mode=1 +else +PRODUCT_PROPERTY_OVERRIDES += \ + persist.vendor.ril.crash_handling_mode=2 +endif + +# Add support dual SIM mode +PRODUCT_PROPERTY_OVERRIDES += \ + persist.vendor.radio.multisim_switch_support=true + +# RPMB TA +PRODUCT_PACKAGES += \ + tlrpmb + +# Touch firmware +#PRODUCT_COPY_FILES += \ + device/google/gs201/firmware/touch/s6sy761.bin:$(TARGET_COPY_OUT_VENDOR)/firmware/s6sy761.fw +# Touch +PRODUCT_COPY_FILES += \ + frameworks/native/data/etc/android.hardware.touchscreen.multitouch.jazzhand.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.touchscreen.multitouch.jazzhand.xml + +# Sensors +PRODUCT_COPY_FILES += \ + frameworks/native/data/etc/android.hardware.sensor.accelerometer.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.sensor.accelerometer.xml \ + frameworks/native/data/etc/android.hardware.sensor.barometer.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.sensor.barometer.xml \ + frameworks/native/data/etc/android.hardware.sensor.compass.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.sensor.compass.xml \ + frameworks/native/data/etc/android.hardware.sensor.gyroscope.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.sensor.gyroscope.xml \ + frameworks/native/data/etc/android.hardware.sensor.hifi_sensors.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.sensor.hifi_sensors.xml \ + frameworks/native/data/etc/android.hardware.sensor.light.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.sensor.light.xml\ + frameworks/native/data/etc/android.hardware.sensor.proximity.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.sensor.proximity.xml \ + frameworks/native/data/etc/android.hardware.sensor.stepcounter.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.sensor.stepcounter.xml \ + frameworks/native/data/etc/android.hardware.sensor.stepdetector.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.sensor.stepdetector.xml + +# Add sensor HAL 2.1 product packages +PRODUCT_PACKAGES += android.hardware.sensors@2.1-service.multihal + +# USB HAL +PRODUCT_PACKAGES += \ + android.hardware.usb-service +PRODUCT_PACKAGES += \ + android.hardware.usb.gadget-service + +# MIDI feature +PRODUCT_COPY_FILES += \ + frameworks/native/data/etc/android.software.midi.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.midi.xml + +# default usb debug functions +ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT))) +PRODUCT_PROPERTY_OVERRIDES += \ + persist.vendor.usb.usbradio.config=dm +endif + +# adpf 16ms update rate +PRODUCT_PRODUCT_PROPERTIES += \ + vendor.powerhal.adpf.rate=16666666 + +PRODUCT_COPY_FILES += \ + device/google/gs201/task_profiles.json:$(TARGET_COPY_OUT_VENDOR)/etc/task_profiles.json + +-include hardware/google/pixel/power-libperfmgr/aidl/device.mk + +# IRQ rebalancing. +include hardware/google/pixel/rebalance_interrupts/rebalance_interrupts.mk + +# PowerStats HAL +PRODUCT_PACKAGES += \ + android.hardware.power.stats-service.pixel + +# dumpstate HAL +PRODUCT_PACKAGES += \ + android.hardware.dumpstate@1.1-service.gs201 + +# AoC support +include device/google/gs201/aoc/device.mk + +# +# Audio HALs +# + +# Audio Configurations +USE_LEGACY_LOCAL_AUDIO_HAL := false +USE_XML_AUDIO_POLICY_CONF := 1 + +# Enable AAudio MMAP/NOIRQ data path. +PRODUCT_PROPERTY_OVERRIDES += aaudio.mmap_policy=2 +PRODUCT_PROPERTY_OVERRIDES += aaudio.mmap_exclusive_policy=2 +PRODUCT_PROPERTY_OVERRIDES += aaudio.hw_burst_min_usec=2000 + +# Calliope firmware overwrite +#PRODUCT_COPY_FILES += \ + device/google/gs201/firmware/calliope_dram.bin:$(TARGET_COPY_OUT_VENDOR)/firmware/calliope_dram.bin \ + device/google/gs201/firmware/calliope_sram.bin:$(TARGET_COPY_OUT_VENDOR)/firmware/calliope_sram.bin \ + device/google/gs201/firmware/calliope_dram_2.bin:$(TARGET_COPY_OUT_VENDOR)/firmware/calliope_dram_2.bin \ + device/google/gs201/firmware/calliope_sram_2.bin:$(TARGET_COPY_OUT_VENDOR)/firmware/calliope_sram_2.bin \ + device/google/gs201/firmware/calliope2.dt:$(TARGET_COPY_OUT_VENDOR)/firmware/calliope2.dt \ + +# Cannot reference variables defined in BoardConfig.mk, uncomment this if +# BOARD_USE_OFFLOAD_AUDIO and BOARD_USE_OFFLOAD_EFFECT are true +## AudioEffectHAL library +#PRODUCT_PACKAGES += \ +# libexynospostprocbundle + +# Cannot reference variables defined in BoardConfig.mk, uncomment this if +# BOARD_USE_SOUNDTRIGGER_HAL is true +#PRODUCT_PACKAGES += \ +# sound_trigger.primary.maran9820 + +# A-Box Service Daemon +#PRODUCT_PACKAGES += main_abox + +# Libs +PRODUCT_PACKAGES += \ + com.android.future.usb.accessory + +PRODUCT_PACKAGES += \ + android.hardware.graphics.mapper@4.0-impl \ + android.hardware.graphics.allocator@4.0-service \ + android.hardware.graphics.allocator@4.0-impl \ + android.hardware.graphics.allocator-V1-service + +PRODUCT_PACKAGES += \ + memtrack.$(TARGET_BOARD_PLATFORM) \ + libion_exynos \ + libion + +PRODUCT_PACKAGES += \ + libhwjpeg + +# Video Editor +PRODUCT_PACKAGES += \ + VideoEditorGoogle + +# WideVine modules +include device/google/gs201/widevine/device.mk +PRODUCT_PACKAGES += \ + liboemcrypto \ + +PANTHER_PRODUCT := %panther +CHEETAH_PRODUCT := %cheetah +CLOUDRIPPER_PRODUCT := %cloudripper +ifneq (,$(filter $(PANTHER_PRODUCT), $(TARGET_PRODUCT))) + LOCAL_TARGET_PRODUCT := panther +else ifneq (,$(filter $(CHEETAH_PRODUCT), $(TARGET_PRODUCT))) + LOCAL_TARGET_PRODUCT := cheetah +else ifneq (,$(filter $(CLOUDRIPPER_PRODUCT), $(TARGET_PRODUCT))) + LOCAL_TARGET_PRODUCT := cloudripper +else + # WAR: continue defaulting to slider build on gs201 to not + # break dev targets such as ravenclaw + LOCAL_TARGET_PRODUCT := slider +endif + +$(call soong_config_set,google3a_config,soc,gs201) +$(call soong_config_set,google3a_config,gcam_awb,true) +$(call soong_config_set,google3a_config,ghawb_truetone,true) + +ifneq ($(wildcard vendor/google/services/LyricCameraHAL/src),) +$(call soong_config_set,lyric,soc,gs201) +$(call soong_config_set,lyric,use_lyric_camera_hal,true) +# lyric::tuning_product is set in device-specific makefiles, +# such as device/google/${DEVICE}/device-${DEVICE}.mk + +$(call soong_config_set,gch,hwl_library,lyric) +endif + +# WiFi +PRODUCT_PACKAGES += \ + android.hardware.wifi@1.0-service \ + wificond \ + libwpa_client + +# Connectivity +PRODUCT_PACKAGES += \ + ConnectivityOverlay + +PRODUCT_PACKAGES_DEBUG += \ + sg_write_buffer \ + f2fs_io \ + check_f2fs \ + f2fsstat \ + f2fs.fibmap \ + dump.f2fs + +# Storage health HAL +PRODUCT_PACKAGES += \ + android.hardware.health.storage-service.default + +# storage pixelstats +-include hardware/google/pixel/pixelstats/device.mk + +# Enable project quotas and casefolding for emulated storage without sdcardfs +$(call inherit-product, $(SRC_TARGET_DIR)/product/emulated_storage.mk) + +$(call inherit-product, $(SRC_TARGET_DIR)/product/virtual_ab_ota/android_t_baseline.mk) +PRODUCT_VIRTUAL_AB_COMPRESSION_METHOD := gz + +# Enforce generic ramdisk allow list +$(call inherit-product, $(SRC_TARGET_DIR)/product/generic_ramdisk.mk) + +# Titan-M +ifeq (,$(filter true, $(BOARD_WITHOUT_DTLS))) +include hardware/google/pixel/dauntless/dauntless.mk +endif + +PRODUCT_PACKAGES_DEBUG += \ + WvInstallKeybox + +# Copy Camera HFD Setfiles +#PRODUCT_COPY_FILES += \ + device/google/gs201/firmware/camera/libhfd/default_configuration.hfd.cfg.json:$(TARGET_COPY_OUT_VENDOR)/firmware/default_configuration.hfd.cfg.json \ + device/google/gs201/firmware/camera/libhfd/pp_cfg.json:$(TARGET_COPY_OUT_VENDOR)/firmware/pp_cfg.json \ + device/google/gs201/firmware/camera/libhfd/tracker_cfg.json:$(TARGET_COPY_OUT_VENDOR)/firmware/tracker_cfg.json \ + device/google/gs201/firmware/camera/libhfd/WithLightFixNoBN.SDNNmodel:$(TARGET_COPY_OUT_VENDOR)/firmware/WithLightFixNoBN.SDNNmodel + +# WiFi +PRODUCT_COPY_FILES += \ + frameworks/native/data/etc/android.hardware.wifi.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.xml \ + frameworks/native/data/etc/android.hardware.wifi.direct.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.direct.xml \ + frameworks/native/data/etc/android.hardware.wifi.aware.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.aware.xml \ + frameworks/native/data/etc/android.hardware.wifi.passpoint.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.passpoint.xml \ + frameworks/native/data/etc/android.hardware.wifi.rtt.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.rtt.xml + +PRODUCT_COPY_FILES += \ + frameworks/native/data/etc/android.hardware.usb.host.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.usb.host.xml \ + frameworks/native/data/etc/android.hardware.usb.accessory.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.usb.accessory.xml + +PRODUCT_COPY_FILES += \ + frameworks/native/data/etc/android.hardware.camera.flash-autofocus.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.camera.flash-autofocus.xml \ + frameworks/native/data/etc/android.hardware.camera.front.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.camera.front.xml \ + frameworks/native/data/etc/android.hardware.camera.concurrent.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.camera.concurrent.xml \ + frameworks/native/data/etc/android.hardware.camera.full.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.camera.full.xml\ + frameworks/native/data/etc/android.hardware.camera.raw.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.camera.raw.xml\ + +#PRODUCT_COPY_FILES += \ + frameworks/native/data/etc/handheld_core_hardware.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/handheld_core_hardware.xml \ + frameworks/native/data/etc/android.hardware.wifi.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.xml \ + frameworks/native/data/etc/android.hardware.wifi.direct.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.direct.xml \ + frameworks/native/data/etc/android.hardware.wifi.passpoint.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.passpoint.xml \ + +PRODUCT_COPY_FILES += \ + frameworks/native/data/etc/android.hardware.audio.low_latency.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.audio.low_latency.xml \ + frameworks/native/data/etc/android.hardware.audio.pro.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.audio.pro.xml \ + +PRODUCT_COPY_FILES += \ + frameworks/native/data/etc/android.software.ipsec_tunnels.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.ipsec_tunnels.xml \ + +PRODUCT_PROPERTY_OVERRIDES += \ + debug.slsi_platform=1 \ + debug.hwc.winupdate=1 + +ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT))) +PRODUCT_PACKAGES += displaycolor_service +endif + +PRODUCT_PROPERTY_OVERRIDES += \ + debug.sf.disable_backpressure=0 \ + debug.sf.enable_gl_backpressure=1 \ + debug.sf.enable_sdr_dimming=1 + +PRODUCT_DEFAULT_PROPERTY_OVERRIDES += debug.sf.use_phase_offsets_as_durations=1 +PRODUCT_DEFAULT_PROPERTY_OVERRIDES += debug.sf.late.sf.duration=10500000 +PRODUCT_DEFAULT_PROPERTY_OVERRIDES += debug.sf.late.app.duration=16600000 +PRODUCT_DEFAULT_PROPERTY_OVERRIDES += debug.sf.early.sf.duration=16600000 +PRODUCT_DEFAULT_PROPERTY_OVERRIDES += debug.sf.early.app.duration=16600000 +PRODUCT_DEFAULT_PROPERTY_OVERRIDES += debug.sf.earlyGl.sf.duration=16600000 +PRODUCT_DEFAULT_PROPERTY_OVERRIDES += debug.sf.earlyGl.app.duration=16600000 +PRODUCT_DEFAULT_PROPERTY_OVERRIDES += debug.sf.frame_rate_multiple_threshold=120 + +PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.enable_layer_caching=true +PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.set_idle_timer_ms?=80 +PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.set_touch_timer_ms=200 +PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.set_display_power_timer_ms=1000 +PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.use_content_detection_for_refresh_rate=true +PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.max_frame_buffer_acquired_buffers=3 + +PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.supports_background_blur=1 +PRODUCT_SYSTEM_PROPERTIES += ro.launcher.blur.appLaunch=0 + +# Must align with HAL types Dataspace +# The data space of wide color gamut composition preference is Dataspace::DISPLAY_P3 +PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.wcg_composition_dataspace=143261696 + +# Display +PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.has_wide_color_display=true +PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.has_HDR_display=true +PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.use_color_management=true +PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.protected_contents=true +PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.display_update_imminent_timeout_ms=50 + +# force to blend in P3 mode +PRODUCT_PROPERTY_OVERRIDES += \ + persist.sys.sf.native_mode=2 \ + persist.sys.sf.color_mode=9 +PRODUCT_COPY_FILES += \ + device/google/gs201/display/display_colordata_cal0.pb:$(TARGET_COPY_OUT_VENDOR)/etc/display_colordata_cal0.pb + +# limit DPP downscale ratio +PRODUCT_DEFAULT_PROPERTY_OVERRIDES += vendor.hwc.dpp.downscale=2 + +# Cannot reference variables defined in BoardConfig.mk, uncomment this if +# BOARD_USES_EXYNOS_DSS_FEATURE is true +## set the dss enable status setup +#PRODUCT_PROPERTY_OVERRIDES += \ +# ro.exynos.dss=1 + +# Cannot reference variables defined in BoardConfig.mk, uncomment this if +# BOARD_USES_EXYNOS_AFBC_FEATURE is true +# set the dss enable status setup +PRODUCT_PROPERTY_OVERRIDES += \ + ro.vendor.ddk.set.afbc=1 + +PRODUCT_CHARACTERISTICS := nosdcard + +# WIFI COEX +PRODUCT_COPY_FILES += \ + device/google/gs201/wifi/coex_table.xml:$(TARGET_COPY_OUT_VENDOR)/etc/wifi/coex_table.xml + +PRODUCT_PACKAGES += hostapd +PRODUCT_PACKAGES += wpa_supplicant +PRODUCT_PACKAGES += wpa_supplicant.conf + +WIFI_PRIV_CMD_UPDATE_MBO_CELL_STATUS := enabled + +ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT))) +PRODUCT_PACKAGES += wpa_cli +PRODUCT_PACKAGES += hostapd_cli +endif + +#################################### +## VIDEO +#################################### + +$(call soong_config_set,bigo,soc,gs201) + +# 1. Codec 2.0 +# exynos service +PRODUCT_SOONG_NAMESPACES += vendor/samsung_slsi/codec2 + +PRODUCT_COPY_FILES += \ + device/google/gs201/media_codecs_performance_c2.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_performance_c2.xml \ + +PRODUCT_PACKAGES += \ + samsung.hardware.media.c2@1.0-service \ + codec2.vendor.base.policy \ + codec2.vendor.ext.policy \ + libExynosC2ComponentStore \ + libExynosC2H264Dec \ + libExynosC2H264Enc \ + libExynosC2HevcDec \ + libExynosC2HevcEnc \ + libExynosC2Mpeg4Dec \ + libExynosC2Mpeg4Enc \ + libExynosC2H263Dec \ + libExynosC2H263Enc \ + libExynosC2Vp8Dec \ + libExynosC2Vp8Enc \ + libExynosC2Vp9Dec \ + libExynosC2Vp9Enc + +PRODUCT_PROPERTY_OVERRIDES += \ + debug.c2.use_dmabufheaps=1 \ + media.c2.dmabuf.padding=512 \ + debug.stagefright.ccodec_delayed_params=1 \ + ro.vendor.gpu.dataspace=1 + +# Create input surface on the framework side +PRODUCT_PROPERTY_OVERRIDES += \ + debug.stagefright.c2inputsurface=-1 \ + +# 2. OpenMAX IL +PRODUCT_COPY_FILES += \ + device/google/gs201/media_codecs.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs.xml \ + device/google/gs201/media_codecs_performance.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_performance.xml +#################################### + +# Telephony +#PRODUCT_COPY_FILES += \ + frameworks/av/media/libstagefright/data/media_codecs_google_telephony.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_google_telephony.xml + +# CBD (CP booting deamon) +CBD_USE_V2 := true +CBD_PROTOCOL_SIT := true + +# setup dalvik vm configs. +$(call inherit-product, frameworks/native/build/phone-xhdpi-6144-dalvik-heap.mk) + +PRODUCT_TAGS += dalvik.gc.type-precise + +# Exynos OpenVX framework +PRODUCT_PACKAGES += \ + libexynosvision + +ifeq ($(TARGET_USES_CL_KERNEL),true) +PRODUCT_PACKAGES += \ + libopenvx-opencl +endif + +# Trusty (KM, GK, Storage) +$(call inherit-product, system/core/trusty/trusty-storage.mk) +$(call inherit-product, system/core/trusty/trusty-base.mk) + +# Trusty unit test tool +PRODUCT_PACKAGES_DEBUG += trusty-ut-ctrl \ + tipc-test + +include device/google/gs101/confirmationui/confirmationui.mk + +# Trusty Secure DPU Daemon +PRODUCT_PACKAGES += \ + securedpud.slider + +# Trusty Metrics Daemon +#PRODUCT_SOONG_NAMESPACES += \ +# vendor/google/trusty/common +# +#PRODUCT_PACKAGES += \ +# trusty_metricsd + +PRODUCT_PACKAGES += \ + android.hardware.composer.hwc3-service.pixel \ + libdisplaycolor + +# Storage: for factory reset protection feature +PRODUCT_PROPERTY_OVERRIDES += \ + ro.frp.pst=/dev/block/by-name/frp + +# Bluetooth +PRODUCT_COPY_FILES += \ + frameworks/native/data/etc/android.hardware.bluetooth.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.bluetooth.xml \ + frameworks/native/data/etc/android.hardware.bluetooth_le.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.bluetooth_le.xml + +# System props to enable Bluetooth Quality Report (BQR) feature +ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT))) +PRODUCT_PRODUCT_PROPERTIES += \ + persist.bluetooth.bqr.event_mask=262174 \ + persist.bluetooth.bqr.min_interval_ms=500 +else +PRODUCT_PRODUCT_PROPERTIES += \ + persist.bluetooth.bqr.event_mask=30 \ + persist.bluetooth.bqr.min_interval_ms=500 +endif + +#VNDK +PRODUCT_PACKAGES += \ + vndk-libs + +PRODUCT_ENFORCE_RRO_TARGETS := \ + framework-res + +# Dynamic Partitions +PRODUCT_USE_DYNAMIC_PARTITIONS := true + +# Use FUSE passthrough +PRODUCT_PRODUCT_PROPERTIES += \ + persist.sys.fuse.passthrough.enable=true + +# Use /product/etc/fstab.postinstall to mount system_other +PRODUCT_PRODUCT_PROPERTIES += \ + ro.postinstall.fstab.prefix=/product + +PRODUCT_COPY_FILES += \ + device/google/gs201/conf/fstab.postinstall:$(TARGET_COPY_OUT_PRODUCT)/etc/fstab.postinstall + +# fastbootd +PRODUCT_PACKAGES += \ + android.hardware.fastboot@1.1-impl.pixel \ + fastbootd + +#google iwlan +PRODUCT_PACKAGES += \ + Iwlan + +#Iwlan test app for userdebug/eng builds +ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT))) +PRODUCT_PACKAGES += \ + IwlanTestApp +endif + +PRODUCT_PACKAGES += \ + whitelist \ + libstagefright_hdcp \ + libskia_opt + +#PRODUCT_PACKAGES += \ + mfc_fw.bin \ + calliope_sram.bin \ + calliope_dram.bin \ + calliope_iva.bin \ + vts.bin + +# This will be called only if IMSService is building with source code for dev branches. +$(call inherit-product-if-exists, vendor/samsung_slsi/telephony/$(BOARD_USES_SHARED_VENDOR_TELEPHONY)/shannon-ims/device-vendor.mk) + +PRODUCT_PACKAGES += ShannonIms + +#RCS Test Messaging App +PRODUCT_PACKAGES_DEBUG += \ + TestRcsApp + +PRODUCT_PACKAGES += ShannonRcs + +# Boot Control HAL +PRODUCT_PACKAGES += \ + android.hardware.boot@1.2-impl-gs201 \ + android.hardware.boot@1.2-service-gs201 + +# Exynos RIL and telephony +# Multi SIM(DSDS) +SIM_COUNT := 2 +SUPPORT_MULTI_SIM := true +# Support NR +SUPPORT_NR := true +# Support 5G on both stacks +SUPPORT_NR_DS := true +# Using IRadio 2.0 +USE_RADIO_HAL_2_0 := true + +#$(call inherit-product, vendor/google_devices/telephony/common/device-vendor.mk) +#$(call inherit-product, vendor/google_devices/gs201/proprietary/device-vendor.mk) + +ifneq ($(BOARD_WITHOUT_RADIO),true) +$(call inherit-product-if-exists, vendor/samsung_slsi/telephony/$(BOARD_USES_SHARED_VENDOR_TELEPHONY)/common/device-vendor.mk) +endif + +#GPS HAL +include device/google/gs201/gnss/device-gnss.mk +BOARD_VENDOR_SEPOLICY_DIRS += device/google/gs201-sepolicy/gps + +$(call inherit-product, $(SRC_TARGET_DIR)/product/core_64_bit_only.mk) +#$(call inherit-product, hardware/google_devices/exynos5/exynos5.mk) +#$(call inherit-product-if-exists, hardware/google_devices/gs201/gs201.mk) +#$(call inherit-product-if-exists, vendor/google_devices/common/exynos-vendor.mk) +#$(call inherit-product-if-exists, hardware/broadcom/wlan/bcmdhd/firmware/bcm4375/device-bcm.mk) +$(call inherit-product-if-exists, vendor/google/sensors/usf/android/usf_efw_product.mk) +$(call inherit-product-if-exists, vendor/google/services/LyricCameraHAL/src/build/device-vendor.mk) +$(call inherit-product-if-exists, vendor/google/camera/devices/whi/device-vendor.mk) + +PRODUCT_COPY_FILES += \ + device/google/gs201/default-permissions.xml:$(TARGET_COPY_OUT_PRODUCT)/etc/default-permissions/default-permissions.xml \ + device/google/gs201/component-overrides.xml:$(TARGET_COPY_OUT_VENDOR)/etc/sysconfig/component-overrides.xml \ + frameworks/native/data/etc/handheld_core_hardware.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/handheld_core_hardware.xml \ + +# modem_svc_sit daemon +PRODUCT_PACKAGES += modem_svc_sit + +# modem logging binary/configs +PRODUCT_PACKAGES += modem_logging_control + +# modem logging configs +PRODUCT_COPY_FILES += \ + device/google/gs201/radio/config/logging.conf:$(TARGET_COPY_OUT_VENDOR)/etc/modem/logging.conf \ + device/google/gs201/radio/config/default.cfg:$(TARGET_COPY_OUT_VENDOR)/etc/modem/default.cfg \ + device/google/gs201/radio/config/default.nprf:$(TARGET_COPY_OUT_VENDOR)/etc/modem/default.nprf \ + device/google/gs201/radio/config/default_metrics.xml:$(TARGET_COPY_OUT_VENDOR)/etc/modem/default_metrics.xml + +# ARM NN files +ARM_COMPUTE_CL_ENABLE := 1 + +# Vibrator Diag +PRODUCT_PACKAGES_DEBUG += \ + diag-vibrator \ + diag-vibrator-cs40l25a \ + diag-vibrator-drv2624 \ + $(NULL) + +PRODUCT_PACKAGES += \ + android.hardware.health-service.gs201 \ + android.hardware.health-service.gs201_recovery \ + +# Audio +# Audio HAL Server & Default Implementations +PRODUCT_PACKAGES += \ + android.hardware.audio.service \ + android.hardware.audio@7.1-impl \ + android.hardware.audio.effect@7.0-impl \ + android.hardware.soundtrigger@2.3-impl \ + vendor.google.whitechapel.audio.audioext@3.0-impl \ + android.hardware.bluetooth.audio-impl \ + +# +##Audio HAL libraries +PRODUCT_PACKAGES += \ + audio.primary.$(TARGET_BOARD_PLATFORM) \ + audio.platform.aoc \ + audio_tunnel_aoc \ + aoc_aud_ext \ + libaoctuningdecoder \ + liboffloadeffect \ + audio_bt_aoc \ + audio_waves_aoc \ + audio_fortemedia_aoc \ + audio_bluenote_aoc \ + audio_usb_aoc \ + libamcsextfile \ + audio_amcs_ext \ + audio.usb.default \ + audio.usbv2.default \ + audio.bluetooth.default \ + audio.r_submix.default \ + audio_spk_35l41 \ + sound_trigger.primary.$(TARGET_BOARD_PLATFORM) +# libaoc_waves \ +# + +##Audio Vendor libraries +PRODUCT_PACKAGES += \ + libfvsam_prm_parser \ + libmahalcontroller \ + libAlgFx_HiFi3z +# +## AudioHAL Configurations +PRODUCT_COPY_FILES += \ + frameworks/av/services/audiopolicy/config/a2dp_audio_policy_configuration_7_0.xml:$(TARGET_COPY_OUT_VENDOR)/etc/a2dp_audio_policy_configuration_7_0.xml \ + frameworks/av/services/audiopolicy/config/a2dp_in_audio_policy_configuration_7_0.xml:$(TARGET_COPY_OUT_VENDOR)/etc/a2dp_in_audio_policy_configuration_7_0.xml \ + frameworks/av/services/audiopolicy/config/hearing_aid_audio_policy_configuration_7_0.xml:$(TARGET_COPY_OUT_VENDOR)/etc/hearing_aid_audio_policy_configuration_7_0.xml \ + frameworks/av/services/audiopolicy/config/r_submix_audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/r_submix_audio_policy_configuration.xml \ + frameworks/av/services/audiopolicy/config/usb_audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/usb_audio_policy_configuration.xml \ + frameworks/av/services/audiopolicy/config/audio_policy_volumes.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_policy_volumes.xml \ + frameworks/av/services/audiopolicy/config/default_volume_tables.xml:$(TARGET_COPY_OUT_VENDOR)/etc/default_volume_tables.xml \ + frameworks/av/services/audiopolicy/config/bluetooth_audio_policy_configuration_7_0.xml:$(TARGET_COPY_OUT_VENDOR)/etc/bluetooth_audio_policy_configuration_7_0.xml + +##Audio soong +PRODUCT_SOONG_NAMESPACES += \ + vendor/google/whitechapel/audio/hal \ + vendor/google/whitechapel/audio/interfaces + +$(call soong_config_set,aoc_audio_board,platform,$(TARGET_BOARD_PLATFORM)) + +## AoC soong +PRODUCT_SOONG_NAMESPACES += \ + vendor/google/whitechapel/aoc + +$(call soong_config_set,aoc,target_soc,$(TARGET_BOARD_PLATFORM)) + +# +## Audio properties +PRODUCT_PROPERTY_OVERRIDES += \ + ro.config.vc_call_vol_steps=7 \ + ro.config.media_vol_steps=25 \ + ro.audio.monitorRotation = true \ + ro.audio.offload_wakelock=false + +# vndservicemanager and vndservice no longer included in API 30+, however needed by vendor code. +# See b/148807371 for reference +PRODUCT_PACKAGES += vndservicemanager +PRODUCT_PACKAGES += vndservice + +## TinyTools, debug tool and cs35l41 speaker calibration tool for Audio +ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT))) +PRODUCT_PACKAGES += \ + tinyplay \ + tinycap \ + tinymix \ + tinypcminfo \ + tinyhostless \ + cplay \ + aoc_hal \ + aoc_tuning_inft \ + mahal_test \ + ma_aoc_tuning_test \ + crus_sp_cal +endif + +PRODUCT_PACKAGES += \ + google.hardware.media.c2@1.0-service \ + libgc2_store \ + libgc2_base \ + libgc2_av1_dec \ + libbo_av1 \ + libgc2_cwl \ + libgc2_utils + +## Start packet router +include device/google/gs101/telephony/pktrouter.mk + +# Thermal HAL +include hardware/google/pixel/thermal/device.mk +PRODUCT_PROPERTY_OVERRIDES += persist.vendor.enable.thermal.genl=true + +## TPU packages +include device/google/gs201/edgetpu/edgetpu.mk + +# Connectivity Thermal Power Manager +PRODUCT_PACKAGES += \ + ConnectivityThermalPowerManager + +# A/B support +PRODUCT_PACKAGES += \ + otapreopt_script \ + cppreopts.sh \ + update_engine \ + update_engine_sideload \ + update_verifier + +# pKVM +$(call inherit-product, packages/modules/Virtualization/apex/product_packages.mk) +PRODUCT_BUILD_PVMFW_IMAGE := true + +# Enable watchdog timeout loop breaker. +PRODUCT_PROPERTY_OVERRIDES += \ + framework_watchdog.fatal_window.second=600 \ + framework_watchdog.fatal_count=3 + +# Enable zygote critical window. +PRODUCT_PROPERTY_OVERRIDES += \ + zygote.critical_window.minute=10 + +# Suspend properties +PRODUCT_PROPERTY_OVERRIDES += \ + suspend.short_suspend_threshold_millis=5000 + +# Enable Incremental on the device +PRODUCT_PROPERTY_OVERRIDES += \ + ro.incremental.enable=true + +# Project +include hardware/google/pixel/common/pixel-common-device.mk + +# Pixel Logger +include hardware/google/pixel/PixelLogger/PixelLogger.mk + +# sscoredump +include hardware/google/pixel/sscoredump/device.mk + +# Wifi ext +include hardware/google/pixel/wifi_ext/device.mk + +# Battery Stats Viewer +PRODUCT_PACKAGES_DEBUG += BatteryStatsViewer + +# Install product specific framework compatibility matrix +# (TODO: b/169535506) This includes the FCM for system_ext and product partition. +# It must be split into the FCM of each partition. +DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE := device/google/gs201/device_framework_matrix_product.xml + +# Keymint configuration +PRODUCT_COPY_FILES += \ + frameworks/native/data/etc/android.software.device_id_attestation.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.device_id_attestation.xml \ + frameworks/native/data/etc/android.hardware.device_unique_attestation.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.device_unique_attestation.xml diff --git a/device_framework_matrix_product.xml b/device_framework_matrix_product.xml new file mode 100644 index 00000000..bce7e68a --- /dev/null +++ b/device_framework_matrix_product.xml @@ -0,0 +1,255 @@ + + + android.hardware.biometrics.face + + IFace + default + + + + android.hardware.biometrics.fingerprint + + IFingerprint + default + + + + android.hardware.contexthub + 1 + + IContextHub + default + + + + android.hardware.dumpstate + 1.1 + + IDumpstateDevice + default + + + + android.hardware.gnss + + IGnss + default + + + + android.hardware.graphics.composer3 + 1 + + IComposer + default + + + + android.hardware.radio + 1.2 + + ISap + slot2 + + + + android.hardware.radio.config + 1.1 + + IRadioConfig + default + + + + android.hardware.vibrator + 2 + + IVibrator + dual + + + + android.hardware.wifi.hostapd + 1 + + IHostapd + default + + + + android.vendor.samsung_slsi.telephony.hardware.radio + 1.1 + + IOemSamsungslsi + slot1 + slot2 + + + + com.fingerprints33.extension + 1.0 + + IFingerprintAuthenticator + default + + + IFingerprintCalibration + default + + + IFingerprintEngineering + default + + + IFingerprintNavigation + default + + + IFingerprintRecalibration + default + + + IFingerprintSenseTouch + default + + + IFingerprintSensorTest + default + + + + com.google.face.debug + + IDebugHost + default + + + + com.google.edgetpu + 2 + + IEdgeTpuVendorService + default + + + + com.google.hardware.pixel.display + 4 + + IDisplay + default + + + + com.google.input + + ITouchContextService + default + + + + hardware.qorvo.uwb + + IUwbVendor + default + + + + vendor.goodix.hardware.biometrics.fingerprint + 2.1 + + IGoodixFingerprintDaemon + default + + + + hardware.google.bluetooth.bt_channel_avoidance + 1.0 + + IBTChannelAvoidance + default + + + + hardware.google.bluetooth.sar + 1.1 + + IBluetoothSar + default + + + + hardware.google.bluetooth.ccc + 1.0 + + IBluetoothCcc + default + + + + vendor.google.google_battery + 1.2 + + IGoogleBattery + default + + + + vendor.google.radioext + 1.3 + + IRadioExt + default + + + + vendor.google.whitechapel.audio.audioext + 3.0 + + IAudioExt + default + + + + vendor.google.wifi_ext + 1.3 + + IWifiExt + default + + + + vendor.google.wireless_charger + 1.3 + + IWirelessCharger + default + + + + vendor.samsung_slsi.telephony.hardware.oemservice + 1.0 + + IOemService + dm0 + dm1 + sced0 + + + + vendor.samsung_slsi.telephony.hardware.radioExternal + 1.1 + + IOemSlsiRadioExternal + rilExternal + + + + vendor.google.audiometricext + 1.0 + + IAudioMetricExt + default + + + diff --git a/display/display_colordata_cal0.pb b/display/display_colordata_cal0.pb new file mode 100644 index 00000000..b266f90e Binary files /dev/null and b/display/display_colordata_cal0.pb differ diff --git a/dumpstate/Android.mk b/dumpstate/Android.mk new file mode 100644 index 00000000..05586dfb --- /dev/null +++ b/dumpstate/Android.mk @@ -0,0 +1,47 @@ +# +# Copyright 2016 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +LOCAL_PATH:= $(call my-dir) +include $(CLEAR_VARS) +LOCAL_MODULE := android.hardware.dumpstate@1.1-service.gs201 +LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0 +LOCAL_LICENSE_CONDITIONS := notice +LOCAL_NOTICE_FILE := $(LOCAL_PATH)/../NOTICE +LOCAL_INIT_RC := android.hardware.dumpstate@1.1-service.gs201.rc +LOCAL_MODULE_RELATIVE_PATH := hw + +LOCAL_SRC_FILES := \ + DumpstateDevice.cpp \ + service.cpp + +LOCAL_SHARED_LIBRARIES := \ + android.hardware.dumpstate@1.0 \ + android.hardware.dumpstate@1.1 \ + libbase \ + libcutils \ + libdumpstateutil \ + libhidlbase \ + libhidltransport \ + libhwbinder \ + liblog \ + libutils + +LOCAL_CFLAGS := -Werror -Wall + +LOCAL_MODULE_TAGS := optional +LOCAL_PROPRIETARY_MODULE := true + +include $(BUILD_EXECUTABLE) diff --git a/dumpstate/DumpstateDevice.cpp b/dumpstate/DumpstateDevice.cpp new file mode 100644 index 00000000..3e0039ba --- /dev/null +++ b/dumpstate/DumpstateDevice.cpp @@ -0,0 +1,1279 @@ +/* + * Copyright 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define LOG_TAG "dumpstate_device" + +#include + +#include +#include +#include +#include +#include +#include +#include + +#include "DumpstateDevice.h" + +#include "DumpstateUtil.h" + +#define MODEM_LOG_DIRECTORY "/data/vendor/radio/logs/always-on" +#define MODEM_EXTENDED_LOG_DIRECTORY "/data/vendor/radio/extended_logs" +#define RIL_LOG_DIRECTORY "/data/vendor/radio" +#define RIL_LOG_DIRECTORY_PROPERTY "persist.vendor.ril.log.base_dir" +#define RIL_LOG_NUMBER_PROPERTY "persist.vendor.ril.log.num_file" +#define MODEM_LOGGING_PERSIST_PROPERTY "persist.vendor.sys.modem.logging.enable" +#define MODEM_LOGGING_PROPERTY "vendor.sys.modem.logging.enable" +#define MODEM_LOGGING_STATUS_PROPERTY "vendor.sys.modem.logging.status" +#define MODEM_LOGGING_NUMBER_BUGREPORT_PROPERTY "persist.vendor.sys.modem.logging.br_num" +#define GPS_LOG_DIRECTORY "/data/vendor/gps/logs" +#define GPS_LOG_NUMBER_PROPERTY "persist.vendor.gps.aol.log_num" +#define GPS_LOGGING_STATUS_PROPERTY "vendor.gps.aol.enabled" + +#define UFS_BOOTDEVICE "ro.boot.bootdevice" + +#define TCPDUMP_LOG_DIRECTORY "/data/vendor/tcpdump_logger/logs" +#define TCPDUMP_NUMBER_BUGREPORT "persist.vendor.tcpdump.log.br_num" +#define TCPDUMP_PERSIST_PROPERTY "persist.vendor.tcpdump.log.alwayson" + +#define HW_REVISION "ro.boot.hardware.revision" + +using android::os::dumpstate::CommandOptions; +using android::os::dumpstate::DumpFileToFd; +using android::os::dumpstate::PropertiesHelper; +using android::os::dumpstate::RunCommandToFd; + +namespace android { +namespace hardware { +namespace dumpstate { +namespace V1_1 { +namespace implementation { + +#define GPS_LOG_PREFIX "gl-" +#define GPS_MCU_LOG_PREFIX "esw-" +#define MODEM_LOG_PREFIX "sbuff_" +#define EXTENDED_LOG_PREFIX "extended_log_" +#define RIL_LOG_PREFIX "rild.log." +#define BUFSIZE 65536 +#define TCPDUMP_LOG_PREFIX "tcpdump" + +typedef std::chrono::time_point timepoint_t; + +const char kVerboseLoggingProperty[] = "persist.vendor.verbose_logging_enabled"; + +void DumpstateDevice::dumpLogs(int fd, std::string srcDir, std::string destDir, int maxFileNum, + const char *logPrefix) { + struct dirent **dirent_list = NULL; + int num_entries = scandir(srcDir.c_str(), + &dirent_list, + 0, + (int (*)(const struct dirent **, const struct dirent **)) alphasort); + if (!dirent_list) { + return; + } else if (num_entries <= 0) { + return; + } + + int copiedFiles = 0; + + for (int i = num_entries - 1; i >= 0; i--) { + ALOGD("Found %s\n", dirent_list[i]->d_name); + + if (0 != strncmp(dirent_list[i]->d_name, logPrefix, strlen(logPrefix))) { + continue; + } + + if ((copiedFiles >= maxFileNum) && (maxFileNum != -1)) { + ALOGD("Skipped %s\n", dirent_list[i]->d_name); + continue; + } + + copiedFiles++; + + CommandOptions options = CommandOptions::WithTimeout(120).Build(); + std::string srcLogFile = srcDir + "/" + dirent_list[i]->d_name; + std::string destLogFile = destDir + "/" + dirent_list[i]->d_name; + + std::string copyCmd = "/vendor/bin/cp " + srcLogFile + " " + destLogFile; + + ALOGD("Copying %s to %s\n", srcLogFile.c_str(), destLogFile.c_str()); + RunCommandToFd(fd, "CP DIAG LOGS", { "/vendor/bin/sh", "-c", copyCmd.c_str() }, options); + } + + while (num_entries--) { + free(dirent_list[num_entries]); + } + + free(dirent_list); +} + +void DumpstateDevice::dumpRilLogs(int fd, std::string destDir) { + std::string rilLogDir = + android::base::GetProperty(RIL_LOG_DIRECTORY_PROPERTY, RIL_LOG_DIRECTORY); + + int maxFileNum = android::base::GetIntProperty(RIL_LOG_NUMBER_PROPERTY, 50); + + const std::string currentLogDir = rilLogDir + "/cur"; + const std::string previousLogDir = rilLogDir + "/prev"; + const std::string currentDestDir = destDir + "/cur"; + const std::string previousDestDir = destDir + "/prev"; + + RunCommandToFd(fd, "MKDIR RIL CUR LOG", {"/vendor/bin/mkdir", "-p", currentDestDir.c_str()}, + CommandOptions::WithTimeout(2).Build()); + RunCommandToFd(fd, "MKDIR RIL PREV LOG", {"/vendor/bin/mkdir", "-p", previousDestDir.c_str()}, + CommandOptions::WithTimeout(2).Build()); + + dumpLogs(fd, currentLogDir, currentDestDir, maxFileNum, RIL_LOG_PREFIX); + dumpLogs(fd, previousLogDir, previousDestDir, maxFileNum, RIL_LOG_PREFIX); +} + +void copyFile(std::string srcFile, std::string destFile) { + uint8_t buffer[BUFSIZE]; + ssize_t size; + + int fdSrc = open(srcFile.c_str(), O_RDONLY); + if (fdSrc < 0) { + ALOGD("Failed to open source file %s\n", srcFile.c_str()); + return; + } + + int fdDest = open(destFile.c_str(), O_WRONLY | O_CREAT, 0666); + if (fdDest < 0) { + ALOGD("Failed to open destination file %s\n", destFile.c_str()); + close(fdSrc); + return; + } + + ALOGD("Copying %s to %s\n", srcFile.c_str(), destFile.c_str()); + while ((size = TEMP_FAILURE_RETRY(read(fdSrc, buffer, BUFSIZE))) > 0) { + TEMP_FAILURE_RETRY(write(fdDest, buffer, size)); + } + + close(fdDest); + close(fdSrc); +} + +void dumpNetmgrLogs(std::string destDir) { + const std::vector netmgrLogs + { + "/data/vendor/radio/metrics_data", + "/data/vendor/radio/omadm_logs.txt", + "/data/vendor/radio/power_anomaly_data.txt", + }; + for (const auto& logFile : netmgrLogs) { + copyFile(logFile, destDir + "/" + basename(logFile.c_str())); + } +} + +/** Dumps last synced NV data into bugreports */ +void dumpModemEFS(std::string destDir) { + const std::string EFS_DIRECTORY = "/mnt/vendor/efs/"; + const std::vector nv_files + { + EFS_DIRECTORY+"nv_normal.bin", + EFS_DIRECTORY+"nv_protected.bin", + }; + for (const auto& logFile : nv_files) { + copyFile(logFile, destDir + "/" + basename(logFile.c_str())); + } +} + +void DumpstateDevice::dumpGpsLogs(int fd, const std::string &destDir) { + const std::string gpsLogDir = GPS_LOG_DIRECTORY; + const std::string gpsTmpLogDir = gpsLogDir + "/.tmp"; + const std::string gpsDestDir = destDir + "/gps"; + int maxFileNum = android::base::GetIntProperty(GPS_LOG_NUMBER_PROPERTY, 20); + + RunCommandToFd(fd, "MKDIR GPS LOG", {"/vendor/bin/mkdir", "-p", gpsDestDir.c_str()}, + CommandOptions::WithTimeout(2).Build()); + + dumpLogs(fd, gpsTmpLogDir, gpsDestDir, 1, GPS_LOG_PREFIX); + dumpLogs(fd, gpsLogDir, gpsDestDir, 3, GPS_MCU_LOG_PREFIX); + dumpLogs(fd, gpsLogDir, gpsDestDir, maxFileNum, GPS_LOG_PREFIX); +} + +void DumpstateDevice::dumpCameraLogs(int fd, const std::string &destDir) { + static const std::string kCameraLogDir = "/data/vendor/camera/profiler"; + const std::string cameraDestDir = destDir + "/camera"; + RunCommandToFd(fd, "MKDIR CAMERA LOG", {"/vendor/bin/mkdir", "-p", cameraDestDir.c_str()}, + CommandOptions::WithTimeout(2).Build()); + // Attach multiple latest sessions (in case the user is running concurrent + // sessions or starts a new session after the one with performance issues). + dumpLogs(fd, kCameraLogDir, cameraDestDir, 10, "session-ended-"); + dumpLogs(fd, kCameraLogDir, cameraDestDir, 5, "high-drop-rate-"); + dumpLogs(fd, kCameraLogDir, cameraDestDir, 5, "watchdog-"); + dumpLogs(fd, kCameraLogDir, cameraDestDir, 5, "camera-ended-"); +} + +timepoint_t startSection(int fd, const std::string §ionName) { + android::base::WriteStringToFd( + "\n" + "------ Section start: " + sectionName + " ------\n" + "\n", fd); + return std::chrono::steady_clock::now(); +} + +void endSection(int fd, const std::string §ionName, timepoint_t startTime) { + auto endTime = std::chrono::steady_clock::now(); + auto elapsedMsec = std::chrono::duration_cast + (endTime - startTime).count(); + + android::base::WriteStringToFd( + "\n" + "------ Section end: " + sectionName + " ------\n" + "Elapsed msec: " + std::to_string(elapsedMsec) + "\n" + "\n", fd); +} + +// If you are adding a single RunCommandToFd() or DumpFileToFd() call, please +// add it to dumpMiscSection(). But if you are adding multiple items that are +// related to each other - for instance, for a Foo peripheral - please add them +// to a new dump function and include it in this table so it can be accessed from the +// command line, e.g.: +// lshal debug android.hardware.dumpstate@1.0::IDumpstateDevice/default foo +// +// However, if your addition generates attachments and/or binary data for the +// bugreport (i.e. if it requires two file descriptors to execute), it must not be +// added to this table and should instead be added to dumpstateBoard() below. + +DumpstateDevice::DumpstateDevice() + : mTextSections{ + { "wlan", [this](int fd) { dumpWlanSection(fd); } }, + { "soc", [this](int fd) { dumpSocSection(fd); } }, + { "storage", [this](int fd) { dumpStorageSection(fd); } }, + { "memory", [this](int fd) { dumpMemorySection(fd); } }, + { "Devfreq", [this](int fd) { dumpDevfreqSection(fd); } }, + { "cpu", [this](int fd) { dumpCpuSection(fd); } }, + { "power", [this](int fd) { dumpPowerSection(fd); } }, + { "thermal", [this](int fd) { dumpThermalSection(fd); } }, + { "touch", [this](int fd) { dumpTouchSection(fd); } }, + { "display", [this](int fd) { dumpDisplaySection(fd); } }, + { "sensors-usf", [this](int fd) { dumpSensorsUSFSection(fd); } }, + { "aoc", [this](int fd) { dumpAoCSection(fd); } }, + { "ramdump", [this](int fd) { dumpRamdumpSection(fd); } }, + { "misc", [this](int fd) { dumpMiscSection(fd); } }, + { "gsc", [this](int fd) { dumpGscSection(fd); } }, + { "trusty", [this](int fd) { dumpTrustySection(fd); } }, + } { +} + +// Dump data requested by an argument to the "debug" HAL interface, or help info +// if the specified section is not supported. +void DumpstateDevice::dumpTextSection(int fd, const std::string §ionName) { + bool dumpAll = (sectionName == kAllSections); + + for (const auto §ion : mTextSections) { + if (dumpAll || sectionName == section.first) { + auto startTime = startSection(fd, section.first); + section.second(fd); + endSection(fd, section.first, startTime); + + if (!dumpAll) { + return; + } + } + } + + if (dumpAll) { + return; + } + + // An unsupported section was requested on the command line + android::base::WriteStringToFd("Unrecognized text section: " + sectionName + "\n", fd); + android::base::WriteStringToFd("Try \"" + kAllSections + "\" or one of the following:", fd); + for (const auto §ion : mTextSections) { + android::base::WriteStringToFd(" " + section.first, fd); + } + android::base::WriteStringToFd("\nNote: sections with attachments (e.g. modem) are" + "not avalable from the command line.\n", fd); +} + +// Dump items related to wlan +void DumpstateDevice::dumpWlanSection(int fd) { + RunCommandToFd(fd, "WLAN Debug Dump", {"/vendor/bin/sh", "-c", + "cat /sys/wifi/dump_start"}); + + // Dump firmware symbol table for firmware log decryption + DumpFileToFd(fd, "WLAN FW Log Symbol Table", "/vendor/firmware/Data.msc"); +} + +// Dump items related to power and battery +void DumpstateDevice::dumpPowerSection(int fd) { + struct stat buffer; + + RunCommandToFd(fd, "Power Stats Times", {"/vendor/bin/sh", "-c", + "echo -n \"Boot: \" && /vendor/bin/uptime -s && " + "echo -n \"Now: \" && date"}); + + RunCommandToFd(fd, "ACPM stats", {"/vendor/bin/sh", "-c", + "for f in /sys/devices/platform/acpm_stats/*_stats ; do " + "echo \"\\n\\n$f\" ; cat $f ; " + "done"}); + + DumpFileToFd(fd, "CPU PM stats", "/sys/devices/system/cpu/cpupm/cpupm/time_in_state"); + + DumpFileToFd(fd, "GENPD summary", "/d/pm_genpd/pm_genpd_summary"); + + DumpFileToFd(fd, "Power supply property battery", "/sys/class/power_supply/battery/uevent"); + DumpFileToFd(fd, "Power supply property dc", "/sys/class/power_supply/dc/uevent"); + DumpFileToFd(fd, "Power supply property gcpm", "/sys/class/power_supply/gcpm/uevent"); + DumpFileToFd(fd, "Power supply property gcpm_pps", "/sys/class/power_supply/gcpm_pps/uevent"); + DumpFileToFd(fd, "Power supply property main-charger", "/sys/class/power_supply/main-charger/uevent"); + if (!stat("/sys/class/power_supply/pca9468-mains/uevent", &buffer)) { + DumpFileToFd(fd, "Power supply property pca9468-mains", "/sys/class/power_supply/pca9468-mains/uevent"); + } else { + DumpFileToFd(fd, "Power supply property pca94xx-mains", "/sys/class/power_supply/pca94xx-mains/uevent"); + } + DumpFileToFd(fd, "Power supply property tcpm", "/sys/class/power_supply/tcpm-source-psy-i2c-max77759tcpc/uevent"); + DumpFileToFd(fd, "Power supply property usb", "/sys/class/power_supply/usb/uevent"); + DumpFileToFd(fd, "Power supply property wireless", "/sys/class/power_supply/wireless/uevent"); + if (!stat("/sys/class/power_supply/maxfg", &buffer)) { + DumpFileToFd(fd, "Power supply property maxfg", "/sys/class/power_supply/maxfg/uevent"); + DumpFileToFd(fd, "m5_state", "/sys/class/power_supply/maxfg/m5_model_state"); + DumpFileToFd(fd, "maxfg", "/dev/logbuffer_maxfg"); + DumpFileToFd(fd, "maxfg", "/dev/logbuffer_maxfg_monitor"); + } else { + DumpFileToFd(fd, "Power supply property maxfg_base", "/sys/class/power_supply/maxfg_base/uevent"); + DumpFileToFd(fd, "Power supply property maxfg_flip", "/sys/class/power_supply/maxfg_flip/uevent"); + DumpFileToFd(fd, "m5_state", "/sys/class/power_supply/maxfg_base/m5_model_state"); + DumpFileToFd(fd, "maxfg_base", "/dev/logbuffer_maxfg_base"); + DumpFileToFd(fd, "maxfg_flip", "/dev/logbuffer_maxfg_flip"); + DumpFileToFd(fd, "maxfg_base", "/dev/logbuffer_maxfg_base_monitor"); + DumpFileToFd(fd, "maxfg_flip", "/dev/logbuffer_maxfg_flip_monitor"); + } + + if (!stat("/sys/class/power_supply/dock", &buffer)) { + DumpFileToFd(fd, "Power supply property dock", "/sys/class/power_supply/dock/uevent"); + } + + if (!stat("/dev/logbuffer_tcpm", &buffer)) { + DumpFileToFd(fd, "Logbuffer TCPM", "/dev/logbuffer_tcpm"); + } else if (!PropertiesHelper::IsUserBuild()) { + if (!stat("/sys/kernel/debug/tcpm", &buffer)) { + RunCommandToFd(fd, "TCPM logs", {"/vendor/bin/sh", "-c", "cat /sys/kernel/debug/tcpm/*"}); + } else { + RunCommandToFd(fd, "TCPM logs", {"/vendor/bin/sh", "-c", "cat /sys/kernel/debug/usb/tcpm*"}); + } + } + + RunCommandToFd(fd, "TCPC", {"/vendor/bin/sh", "-c", + "for f in /sys/devices/platform/10d60000.hsi2c/i2c-*/i2c-max77759tcpc;" + "do echo \"registers:\"; cat $f/registers;" + "echo \"frs:\"; cat $f/frs;" + "echo \"auto_discharge:\"; cat $f/auto_discharge;" + "echo \"bc12_enabled:\"; cat $f/bc12_enabled;" + "echo \"cc_toggle_enable:\"; cat $f/cc_toggle_enable;" + "echo \"contaminant_detection:\"; cat $f/contaminant_detection;" + "echo \"contaminant_detection_status:\"; cat $f/contaminant_detection_status; done"}); + + DumpFileToFd(fd, "PD Engine", "/dev/logbuffer_usbpd"); + DumpFileToFd(fd, "PPS-google_cpm", "/dev/logbuffer_cpm"); + DumpFileToFd(fd, "PPS-dc", "/dev/logbuffer_pca9468"); + + DumpFileToFd(fd, "BMS", "/dev/logbuffer_ssoc"); + DumpFileToFd(fd, "TTF", "/dev/logbuffer_ttf"); + DumpFileToFd(fd, "TTF details", "/sys/class/power_supply/battery/ttf_details"); + DumpFileToFd(fd, "TTF stats", "/sys/class/power_supply/battery/ttf_stats"); + DumpFileToFd(fd, "maxq", "/dev/logbuffer_maxq"); + + RunCommandToFd(fd, "TRICKLE-DEFEND Config", {"/vendor/bin/sh", "-c", + " cd /sys/devices/platform/google,battery/power_supply/battery/;" + " for f in `ls bd_*` ; do echo \"$f: `cat $f`\" ; done"}); + + RunCommandToFd(fd, "DWELL-DEFEND Config", {"/vendor/bin/sh", "-c", + " cd /sys/devices/platform/google,charger/;" + " for f in `ls charge_s*` ; do echo \"$f: `cat $f`\" ; done"}); + + RunCommandToFd(fd, "TEMP-DEFEND Config", {"/vendor/bin/sh", "-c", + " cd /sys/devices/platform/google,charger/;" + " for f in `ls bd_*` ; do echo \"$f: `cat $f`\" ; done"}); + + if (!PropertiesHelper::IsUserBuild()) { + DumpFileToFd(fd, "DC_registers dump", "/sys/class/power_supply/pca94xx-mains/device/registers_dump"); + + RunCommandToFd(fd, "fg_model", {"/vendor/bin/sh", "-c", + "for f in /d/maxfg* ; do " + "regs=`cat $f/fg_model`; echo $f: ;" + "echo \"$regs\"; done"}); + + RunCommandToFd(fd, "fg_alo_ver", {"/vendor/bin/sh", "-c", + "for f in /d/maxfg* ; do " + "regs=`cat $f/algo_ver`; echo $f: ;" + "echo \"$regs\"; done"}); + + RunCommandToFd(fd, "fg_model_ok", {"/vendor/bin/sh", "-c", + "for f in /d/maxfg* ; do " + "regs=`cat $f/model_ok`; echo $f: ;" + "echo \"$regs\"; done"}); + + /* FG Registers */ + RunCommandToFd(fd, "fg registers", {"/vendor/bin/sh", "-c", + "for f in /d/maxfg* ; do " + "regs=`cat $f/registers`; echo $f: ;" + "echo \"$regs\"; done"}); + } + + /* EEPROM State */ + if (!stat("/sys/devices/platform/10970000.hsi2c/i2c-4/4-0050/eeprom", &buffer)) { + RunCommandToFd(fd, "Battery EEPROM", {"/vendor/bin/sh", "-c", "xxd /sys/devices/platform/10970000.hsi2c/i2c-4/4-0050/eeprom"}); + } else if (!stat("/sys/devices/platform/10970000.hsi2c/i2c-5/5-0050/eeprom", &buffer)) { + RunCommandToFd(fd, "Battery EEPROM", {"/vendor/bin/sh", "-c", "xxd /sys/devices/platform/10970000.hsi2c/i2c-5/5-0050/eeprom"}); + } else if (!stat("/sys/devices/platform/10da0000.hsi2c/i2c-6/6-0050/eeprom", &buffer)) { + RunCommandToFd(fd, "Battery EEPROM", {"/vendor/bin/sh", "-c", "xxd /sys/devices/platform/10da0000.hsi2c/i2c-6/6-0050/eeprom"}); + } + + + DumpFileToFd(fd, "Charger Stats", "/sys/class/power_supply/battery/charge_details"); + if (!PropertiesHelper::IsUserBuild()) { + RunCommandToFd(fd, "Google Charger", {"/vendor/bin/sh", "-c", "cd /sys/kernel/debug/google_charger/; " + "for f in `ls pps_*` ; do echo \"$f: `cat $f`\" ; done"}); + RunCommandToFd(fd, "Google Battery", {"/vendor/bin/sh", "-c", "cd /sys/kernel/debug/google_battery/; " + "for f in `ls ssoc_*` ; do echo \"$f: `cat $f`\" ; done"}); + } + + DumpFileToFd(fd, "WLC logs", "/dev/logbuffer_wireless"); + DumpFileToFd(fd, "WLC VER", "/sys/class/power_supply/wireless/device/version"); + DumpFileToFd(fd, "WLC STATUS", "/sys/class/power_supply/wireless/device/status"); + DumpFileToFd(fd, "WLC FW Version", "/sys/class/power_supply/wireless/device/fw_rev"); + DumpFileToFd(fd, "RTX", "/dev/logbuffer_rtx"); + + if (!PropertiesHelper::IsUserBuild()) { + RunCommandToFd(fd, "gvotables", {"/vendor/bin/sh", "-c", "cat /sys/kernel/debug/gvotables/*/status"}); + } + RunCommandToFd(fd, "Mitigation Stats", {"/vendor/bin/sh", "-c", "echo \"Source\\t\\tCount\\tSOC\\tTime\\tVoltage\"; " + "for f in `ls /sys/devices/virtual/pmic/mitigation/last_triggered_count/*` ; " + "do count=`cat $f`; " + "a=${f/\\/sys\\/devices\\/virtual\\/pmic\\/mitigation\\/last_triggered_count\\//}; " + "b=${f/last_triggered_count/last_triggered_capacity}; " + "c=${f/last_triggered_count/last_triggered_timestamp/}; " + "d=${f/last_triggered_count/last_triggered_voltage/}; " + "cnt=`cat $f`; " + "cap=`cat ${b/count/cap}`; " + "ti=`cat ${c/count/time}`; " + "volt=`cat ${d/count/volt}`; " + "echo \"${a/_count/} " + "\\t$cnt\\t$cap\\t$ti\\t$volt\" ; done"}); + RunCommandToFd(fd, "Clock Divider Ratio", {"/vendor/bin/sh", "-c", "echo \"Source\\t\\tRatio\"; " + "for f in `ls /sys/devices/virtual/pmic/mitigation/clock_ratio/*` ; " + "do ratio=`cat $f`; " + "a=${f/\\/sys\\/devices\\/virtual\\/pmic\\/mitigation\\/clock_ratio\\//}; " + "echo \"${a/_ratio/} \\t$ratio\" ; done"}); + RunCommandToFd(fd, "Clock Stats", {"/vendor/bin/sh", "-c", "echo \"Source\\t\\tStats\"; " + "for f in `ls /sys/devices/virtual/pmic/mitigation/clock_stats/*` ; " + "do stats=`cat $f`; " + "a=${f/\\/sys\\/devices\\/virtual\\/pmic\\/mitigation\\/clock_stats\\//}; " + "echo \"${a/_stats/} \\t$stats\" ; done"}); + RunCommandToFd(fd, "Triggered Level", {"/vendor/bin/sh", "-c", "echo \"Source\\t\\tLevel\"; " + "for f in `ls /sys/devices/virtual/pmic/mitigation/triggered_lvl/*` ; " + "do lvl=`cat $f`; " + "a=${f/\\/sys\\/devices\\/virtual\\/pmic\\/mitigation\\/triggered_lvl\\//}; " + "echo \"${a/_lvl/} \\t$lvl\" ; done"}); + RunCommandToFd(fd, "Instruction", {"/vendor/bin/sh", "-c", + "for f in `ls /sys/devices/virtual/pmic/mitigation/instruction/*` ; " + "do val=`cat $f` ; " + "a=${f/\\/sys\\/devices\\/virtual\\/pmic\\/mitigation\\/instruction\\//}; " + "echo \"$a=$val\" ; done"}); + +} + +// Dump items related to thermal +void DumpstateDevice::dumpThermalSection(int fd) { + RunCommandToFd(fd, "Temperatures", {"/vendor/bin/sh", "-c", + "for f in /sys/class/thermal/thermal* ; do " + "type=`cat $f/type` ; temp=`cat $f/temp` ; echo \"$type: $temp\" ; " + "done"}); + RunCommandToFd(fd, "Cooling Device Current State", {"/vendor/bin/sh", "-c", + "for f in /sys/class/thermal/cooling* ; do " + "type=`cat $f/type` ; temp=`cat $f/cur_state` ; echo \"$type: $temp\" ; " + "done"}); + RunCommandToFd(fd, "Cooling Device User Vote State", {"/vendor/bin/sh", "-c", + "for f in /sys/class/thermal/cooling* ; do " + "if [ ! -f $f/user_vote ]; then continue; fi; " + "type=`cat $f/type` ; temp=`cat $f/user_vote` ; echo \"$type: $temp\" ; " + "done"}); + RunCommandToFd(fd, "Cooling Device Time in State", {"/vendor/bin/sh", "-c", "for f in /sys/class/thermal/cooling* ; " + "do type=`cat $f/type` ; temp=`cat $f/stats/time_in_state_ms` ; echo \"$type:\n$temp\" ; done"}); + RunCommandToFd(fd, "Cooling Device Trans Table", {"/vendor/bin/sh", "-c", "for f in /sys/class/thermal/cooling* ; " + "do type=`cat $f/type` ; temp=`cat $f/stats/trans_table` ; echo \"$type:\n$temp\" ; done"}); + RunCommandToFd(fd, "Cooling Device State2Power Table", {"/vendor/bin/sh", "-c", + "for f in /sys/class/thermal/cooling* ; do " + "if [ ! -f $f/state2power_table ]; then continue; fi; " + "type=`cat $f/type` ; state2power_table=`cat $f/state2power_table` ; echo \"$type: $state2power_table\" ; " + "done"}); + DumpFileToFd(fd, "TMU state:", "/sys/module/gs_thermal/parameters/tmu_reg_dump_state"); + DumpFileToFd(fd, "TMU current temperature:", "/sys/module/gs_thermal/parameters/tmu_reg_dump_current_temp"); + DumpFileToFd(fd, "TMU_TOP rise thresholds:", "/sys/module/gs_thermal/parameters/tmu_top_reg_dump_rise_thres"); + DumpFileToFd(fd, "TMU_TOP fall thresholds:", "/sys/module/gs_thermal/parameters/tmu_top_reg_dump_fall_thres"); + DumpFileToFd(fd, "TMU_SUB rise thresholds:", "/sys/module/gs_thermal/parameters/tmu_sub_reg_dump_rise_thres"); + DumpFileToFd(fd, "TMU_SUB fall thresholds:", "/sys/module/gs_thermal/parameters/tmu_sub_reg_dump_fall_thres"); +} + +// Dump items related to touch +void DumpstateDevice::dumpTouchSection(int fd) { + const char stm_cmd_path[4][50] = {"/sys/class/spi_master/spi11/spi11.0", + "/proc/fts/driver_test", + "/sys/class/spi_master/spi6/spi6.0", + "/proc/fts_ext/driver_test"}; + const char lsi_spi_path[] = "/sys/devices/virtual/sec/tsp"; + const char syna_cmd_path[] = "/sys/class/spi_master/spi0/spi0.0/synaptics_tcm.0/sysfs"; + const char focaltech_cmd_path[] = "/proc/focaltech_touch"; + char cmd[256]; + + if (!access(focaltech_cmd_path, R_OK)) { + // Enable: force touch active + snprintf(cmd, sizeof(cmd), "echo 21 > %s/force_active", focaltech_cmd_path); + RunCommandToFd(fd, "Enable Force Touch Active", {"/vendor/bin/sh", "-c", cmd}); + + // Touch Firmware Version + snprintf(cmd, sizeof(cmd), "%s/FW_Version", focaltech_cmd_path); + DumpFileToFd(fd, "Touch Firmware Version", cmd); + + // Touch INT PIN Test + snprintf(cmd, sizeof(cmd), "%s/INT_PIN", focaltech_cmd_path); + DumpFileToFd(fd, "Touch INT PIN Test", cmd); + + // Get Raw Data - Delta + snprintf(cmd, sizeof(cmd), "%s/selftest/Panel_Differ", focaltech_cmd_path); + DumpFileToFd(fd, "Get Raw Data - Panel_Differ", cmd); + + // Get Raw Data - Raw + snprintf(cmd, sizeof(cmd), "%s/selftest/Rawdata", focaltech_cmd_path); + DumpFileToFd(fd, "Get Raw Data - Raw", cmd); + + // Get Raw Data - Baseline + snprintf(cmd, sizeof(cmd), "%s/selftest/Baseline", focaltech_cmd_path); + DumpFileToFd(fd, "Get Raw Data - Baseline", cmd); + + // Get Raw Data - Noise + snprintf(cmd, sizeof(cmd), "%s/selftest/Noise", focaltech_cmd_path); + DumpFileToFd(fd, "Get Raw Data - Noise", cmd); + + // Get Raw Data - Uniformity + snprintf(cmd, sizeof(cmd), "%s/selftest/Rawdata_Uniformity", focaltech_cmd_path); + DumpFileToFd(fd, "Get Raw Data - Uniformity", cmd); + + // Get Scap_CB + snprintf(cmd, sizeof(cmd), "%s/selftest/Scap_CB", focaltech_cmd_path); + DumpFileToFd(fd, "Get Scap_CB", cmd); + + // Get Scap_CB - Raw + snprintf(cmd, sizeof(cmd), "%s/selftest/Scap_Rawdata", focaltech_cmd_path); + DumpFileToFd(fd, "Get Scap_Rawdata", cmd); + + // Get Short Test + snprintf(cmd, sizeof(cmd), "%s/selftest/Short", focaltech_cmd_path); + DumpFileToFd(fd, "Get Short Test", cmd); + + // Disable: force touch active + snprintf(cmd, sizeof(cmd), "echo 20 > %s/force_active", focaltech_cmd_path); + RunCommandToFd(fd, "Disable Force Touch Active", {"/vendor/bin/sh", "-c", cmd}); + } + + if (!access(syna_cmd_path, R_OK)) { + // Enable: force touch active + snprintf(cmd, sizeof(cmd), "echo 21 > %s/force_active", syna_cmd_path); + RunCommandToFd(fd, "Enable Force Touch Active", {"/vendor/bin/sh", "-c", cmd}); + + // Touch Firmware Information + snprintf(cmd, sizeof(cmd), "%s/info", syna_cmd_path); + DumpFileToFd(fd, "Touch Firmware Information", cmd); + + // Get Raw Data - Delta + snprintf(cmd, sizeof(cmd), + "echo 12 > %s/get_raw_data && cat %s/get_raw_data", syna_cmd_path, syna_cmd_path); + RunCommandToFd(fd, "Get Raw Data - Delta", {"/vendor/bin/sh", "-c", cmd}); + + // Get Raw Data - Raw + snprintf(cmd, sizeof(cmd), + "echo 13 > %s/get_raw_data && cat %s/get_raw_data", syna_cmd_path, syna_cmd_path); + RunCommandToFd(fd, "Get Raw Data - Raw", {"/vendor/bin/sh", "-c", cmd}); + + // Get Raw Data - Baseline + snprintf(cmd, sizeof(cmd), + "echo 14 > %s/get_raw_data && cat %s/get_raw_data", syna_cmd_path, syna_cmd_path); + RunCommandToFd(fd, "Get Raw Data - Baseline", {"/vendor/bin/sh", "-c", cmd}); + + // Disable: force touch active + snprintf(cmd, sizeof(cmd), "echo 20 > %s/force_active", syna_cmd_path); + RunCommandToFd(fd, "Disable Force Touch Active", {"/vendor/bin/sh", "-c", cmd}); + } + + for (int i = 0; i < 4; i+=2) { + snprintf(cmd, sizeof(cmd), "%s", stm_cmd_path[i + 1]); + if (!access(cmd, R_OK)) { + snprintf(cmd, sizeof(cmd), "echo A0 01 01 > %s", stm_cmd_path[i + 1]); + RunCommandToFd(fd, "Force Set AP as Bus Owner with Bugreport Flag", + {"/vendor/bin/sh", "-c", cmd}); + } + + snprintf(cmd, sizeof(cmd), "%s/appid", stm_cmd_path[i]); + if (!access(cmd, R_OK)) { + // Touch firmware version + DumpFileToFd(fd, "STM touch firmware version", cmd); + + // Touch controller status + snprintf(cmd, sizeof(cmd), "%s/status", stm_cmd_path[i]); + DumpFileToFd(fd, "STM touch status", cmd); + + // Mutual raw data + snprintf(cmd, sizeof(cmd), + "echo 13 00 01 > %s/stm_fts_cmd && cat %s/stm_fts_cmd", + stm_cmd_path[i], stm_cmd_path[i]); + RunCommandToFd(fd, "Mutual Raw", {"/vendor/bin/sh", "-c", cmd}); + + // Mutual strength data + snprintf(cmd, sizeof(cmd), + "echo 17 01 > %s/stm_fts_cmd && cat %s/stm_fts_cmd", + stm_cmd_path[i], stm_cmd_path[i]); + RunCommandToFd(fd, "Mutual Strength", {"/vendor/bin/sh", "-c", cmd}); + + // Self raw data + snprintf(cmd, sizeof(cmd), + "echo 15 00 01 > %s/stm_fts_cmd && cat %s/stm_fts_cmd", + stm_cmd_path[i], stm_cmd_path[i]); + RunCommandToFd(fd, "Self Raw", {"/vendor/bin/sh", "-c", cmd}); + } + + snprintf(cmd, sizeof(cmd), "%s", stm_cmd_path[i + 1]); + if (!access(cmd, R_OK)) { + snprintf(cmd, sizeof(cmd), "echo 23 00 > %s && cat %s", + stm_cmd_path[i + 1], stm_cmd_path[i + 1]); + RunCommandToFd(fd, "Mutual Raw Data", + {"/vendor/bin/sh", "-c", cmd}); + + snprintf(cmd, sizeof(cmd), "echo 23 03 > %s && cat %s", + stm_cmd_path[i + 1], stm_cmd_path[i + 1]); + RunCommandToFd(fd, "Mutual Baseline Data", + {"/vendor/bin/sh", "-c", cmd}); + + snprintf(cmd, sizeof(cmd), "echo 23 02 > %s && cat %s", + stm_cmd_path[i + 1], stm_cmd_path[i + 1]); + RunCommandToFd(fd, "Mutual Strength Data", + {"/vendor/bin/sh", "-c", cmd}); + + snprintf(cmd, sizeof(cmd), "echo 24 00 > %s && cat %s", + stm_cmd_path[i + 1], stm_cmd_path[i + 1]); + RunCommandToFd(fd, "Self Raw Data", + {"/vendor/bin/sh", "-c", cmd}); + + snprintf(cmd, sizeof(cmd), "echo 24 03 > %s && cat %s", + stm_cmd_path[i + 1], stm_cmd_path[i + 1]); + RunCommandToFd(fd, "Self Baseline Data", + {"/vendor/bin/sh", "-c", cmd}); + + snprintf(cmd, sizeof(cmd), "echo 24 02 > %s && cat %s", + stm_cmd_path[i + 1], stm_cmd_path[i + 1]); + RunCommandToFd(fd, "Self Strength Data", + {"/vendor/bin/sh", "-c", cmd}); + + snprintf(cmd, sizeof(cmd), "echo 32 10 > %s && cat %s", + stm_cmd_path[i + 1], stm_cmd_path[i + 1]); + RunCommandToFd(fd, "Mutual Compensation", + {"/vendor/bin/sh", "-c", cmd}); + + snprintf(cmd, sizeof(cmd), "echo 32 11 > %s && cat %s", + stm_cmd_path[i + 1], stm_cmd_path[i + 1]); + RunCommandToFd(fd, "Mutual Low Power Compensation", + {"/vendor/bin/sh", "-c", cmd}); + + snprintf(cmd, sizeof(cmd), "echo 33 12 > %s && cat %s", + stm_cmd_path[i + 1], stm_cmd_path[i + 1]); + RunCommandToFd(fd, "Self Compensation", + {"/vendor/bin/sh", "-c", cmd}); + + snprintf(cmd, sizeof(cmd), "echo 34 > %s && cat %s", + stm_cmd_path[i + 1], stm_cmd_path[i + 1]); + RunCommandToFd(fd, "Golden Mutual Raw Data", + {"/vendor/bin/sh", "-c", cmd}); + + snprintf(cmd, sizeof(cmd), "echo 01 FA 20 00 00 24 80 > %s", + stm_cmd_path[i + 1]); + RunCommandToFd(fd, "Packaging Plant - HW reset", + {"/vendor/bin/sh", "-c", cmd}); + snprintf(cmd, sizeof(cmd), "echo 01 FA 20 00 00 68 08 > %s", + stm_cmd_path[i + 1]); + RunCommandToFd(fd, "Packaging Plant - Hibernate Memory", + {"/vendor/bin/sh", "-c", cmd}); + snprintf(cmd, sizeof(cmd), + "echo 02 FB 00 04 3F D8 00 10 01 > %s && cat %s", + stm_cmd_path[i + 1], stm_cmd_path[i + 1]); + RunCommandToFd(fd, "Packaging Plant - Read 16 bytes from Address 0x00041FD8", + {"/vendor/bin/sh", "-c", cmd}); + } + + snprintf(cmd, sizeof(cmd), "%s/stm_fts_cmd", stm_cmd_path[i]); + if (!access(cmd, R_OK)) { + // ITO raw data + snprintf(cmd, sizeof(cmd), + "echo 01 > %s/stm_fts_cmd && cat %s/stm_fts_cmd", + stm_cmd_path[i], stm_cmd_path[i]); + RunCommandToFd(fd, "ITO Raw", {"/vendor/bin/sh", "-c", cmd}); + } + + snprintf(cmd, sizeof(cmd), "%s", stm_cmd_path[i + 1]); + if (!access(cmd, R_OK)) { + snprintf(cmd, sizeof(cmd), "echo A0 00 01 > %s", stm_cmd_path[i + 1]); + RunCommandToFd(fd, "Restore Bus Owner", + {"/vendor/bin/sh", "-c", cmd}); + } + } + + if (!access(lsi_spi_path, R_OK)) { + // Enable: force touch active + snprintf(cmd, sizeof(cmd), + "echo %s > %s/cmd && cat %s/cmd_result", + "force_touch_active,1", + lsi_spi_path, lsi_spi_path); + RunCommandToFd(fd, "Force Touch Active", {"/vendor/bin/sh", "-c", cmd}); + + // Firmware info + snprintf(cmd, sizeof(cmd), "%s/fw_version", lsi_spi_path); + DumpFileToFd(fd, "LSI firmware version", cmd); + + // Touch status + snprintf(cmd, sizeof(cmd), "%s/status", lsi_spi_path); + DumpFileToFd(fd, "LSI touch status", cmd); + + // Calibration info + snprintf(cmd, sizeof(cmd), + "echo %s > %s/cmd && cat %s/cmd_result", + "get_mis_cal_info", + lsi_spi_path, lsi_spi_path); + RunCommandToFd(fd, "Calibration info", {"/vendor/bin/sh", "-c", cmd}); + + // Mutual strength + snprintf(cmd, sizeof(cmd), + "echo %s > %s/cmd && cat %s/cmd_result", + "run_delta_read_all", + lsi_spi_path, lsi_spi_path); + RunCommandToFd(fd, "Mutual Strength", {"/vendor/bin/sh", "-c", cmd}); + + // Self strength + snprintf(cmd, sizeof(cmd), + "echo %s > %s/cmd && cat %s/cmd_result", + "run_self_delta_read_all", + lsi_spi_path, lsi_spi_path); + RunCommandToFd(fd, "Self Strength", {"/vendor/bin/sh", "-c", cmd}); + + // Raw cap + snprintf(cmd, sizeof(cmd), + "echo %s > %s/cmd && cat %s/cmd_result", + "run_rawcap_read_all", + lsi_spi_path, lsi_spi_path); + RunCommandToFd(fd, "Mutual Raw Cap", {"/vendor/bin/sh", "-c", cmd}); + + // Self raw cap + snprintf(cmd, sizeof(cmd), + "echo %s > %s/cmd && cat %s/cmd_result", + "run_self_rawcap_read_all", + lsi_spi_path, lsi_spi_path); + RunCommandToFd(fd, "Self Raw Cap", {"/vendor/bin/sh", "-c", cmd}); + + // TYPE_AMBIENT_DATA + snprintf(cmd, sizeof(cmd), + "echo %s > %s/cmd && cat %s/cmd_result", + "run_rawdata_read_type,3", + lsi_spi_path, lsi_spi_path); + RunCommandToFd(fd, "TYPE_AMBIENT_DATA", {"/vendor/bin/sh", "-c", cmd}); + + // TYPE_DECODED_DATA + snprintf(cmd, sizeof(cmd), + "echo %s > %s/cmd && cat %s/cmd_result", + "run_rawdata_read_type,5", + lsi_spi_path, lsi_spi_path); + RunCommandToFd(fd, "TYPE_DECODED_DATA", {"/vendor/bin/sh", "-c", cmd}); + + // TYPE_NOI_P2P_MIN + snprintf(cmd, sizeof(cmd), + "echo %s > %s/cmd && cat %s/cmd_result", + "run_rawdata_read_type,30", + lsi_spi_path, lsi_spi_path); + RunCommandToFd(fd, "TYPE_NOI_P2P_MIN", {"/vendor/bin/sh", "-c", cmd}); + + // TYPE_NOI_P2P_MAX + snprintf(cmd, sizeof(cmd), + "echo %s > %s/cmd && cat %s/cmd_result", + "run_rawdata_read_type,31", + lsi_spi_path, lsi_spi_path); + RunCommandToFd(fd, "TYPE_NOI_P2P_MAX", {"/vendor/bin/sh", "-c", cmd}); + + // Disable: force touch active + snprintf(cmd, sizeof(cmd), + "echo %s > %s/cmd && cat %s/cmd_result", + "force_touch_active,0", + lsi_spi_path, lsi_spi_path); + RunCommandToFd(fd, "Force Touch Active", {"/vendor/bin/sh", "-c", cmd}); + } +} + +// Dump items related to SoC +void DumpstateDevice::dumpSocSection(int fd) { + DumpFileToFd(fd, "AP HW TUNE", "/sys/devices/system/chip-id/ap_hw_tune_str"); + DumpFileToFd(fd, "EVT VERSION", "/sys/devices/system/chip-id/evt_ver"); + DumpFileToFd(fd, "LOT ID", "/sys/devices/system/chip-id/lot_id"); + DumpFileToFd(fd, "PRODUCT ID", "/sys/devices/system/chip-id/product_id"); + DumpFileToFd(fd, "REVISION", "/sys/devices/system/chip-id/revision"); + DumpFileToFd(fd, "RAW STR", "/sys/devices/system/chip-id/raw_str"); +} + +// Dump items related to CPUs +void DumpstateDevice::dumpCpuSection(int fd) { + DumpFileToFd(fd, "CPU present", "/sys/devices/system/cpu/present"); + DumpFileToFd(fd, "CPU online", "/sys/devices/system/cpu/online"); + RunCommandToFd(fd, "CPU time-in-state", {"/vendor/bin/sh", "-c", + "for cpu in /sys/devices/system/cpu/cpu*; do " + "f=$cpu/cpufreq/stats/time_in_state; " + "if [ ! -f $f ]; then continue; fi; " + "echo $f:; cat $f; " + "done"}); + RunCommandToFd(fd, "CPU cpuidle", {"/vendor/bin/sh", "-c", + "for cpu in /sys/devices/system/cpu/cpu*; do " + "for d in $cpu/cpuidle/state*; do " + "if [ ! -d $d ]; then continue; fi; " + "echo \"$d: `cat $d/name` `cat $d/desc` `cat $d/time` `cat $d/usage`\"; " + "done; " + "done"}); + DumpFileToFd(fd, "INTERRUPTS", "/proc/interrupts"); +} + +// Dump items related to Devfreq & BTS +void DumpstateDevice::dumpDevfreqSection(int fd) { + DumpFileToFd(fd, "MIF DVFS", + "/sys/devices/platform/17000010.devfreq_mif/devfreq/17000010.devfreq_mif/time_in_state"); + DumpFileToFd(fd, "INT DVFS", + "/sys/devices/platform/17000020.devfreq_int/devfreq/17000020.devfreq_int/time_in_state"); + DumpFileToFd(fd, "INTCAM DVFS", + "/sys/devices/platform/17000030.devfreq_intcam/devfreq/17000030.devfreq_intcam/time_in_state"); + DumpFileToFd(fd, "DISP DVFS", + "/sys/devices/platform/17000040.devfreq_disp/devfreq/17000040.devfreq_disp/time_in_state"); + DumpFileToFd(fd, "CAM DVFS", + "/sys/devices/platform/17000050.devfreq_cam/devfreq/17000050.devfreq_cam/time_in_state"); + DumpFileToFd(fd, "TNR DVFS", + "/sys/devices/platform/17000060.devfreq_tnr/devfreq/17000060.devfreq_tnr/time_in_state"); + DumpFileToFd(fd, "MFC DVFS", + "/sys/devices/platform/17000070.devfreq_mfc/devfreq/17000070.devfreq_mfc/time_in_state"); + DumpFileToFd(fd, "BO DVFS", + "/sys/devices/platform/17000080.devfreq_bo/devfreq/17000080.devfreq_bo/time_in_state"); + DumpFileToFd(fd, "BTS stats", "/sys/devices/platform/exynos-bts/bts_stats"); +} + +// Dump items related to memory +void DumpstateDevice::dumpMemorySection(int fd) { + RunCommandToFd(fd, "ION HEAPS", {"/vendor/bin/sh", "-c", + "for d in $(ls -d /d/ion/*); do " + "if [ -f $d ]; then " + "echo --- $d; cat $d; " + "else " + "for f in $(ls $d); do " + "echo --- $d/$f; cat $d/$f; " + "done; " + "fi; " + "done"}); + DumpFileToFd(fd, "dmabuf info", "/d/dma_buf/bufinfo"); + DumpFileToFd(fd, "Page Pinner - longterm pin", "/sys/kernel/debug/page_pinner/longterm_pinner"); + DumpFileToFd(fd, "Page Pinner - alloc_contig_failed", "/sys/kernel/debug/page_pinner/alloc_contig_failed"); +} + +static void DumpF2FS(int fd) { + DumpFileToFd(fd, "F2FS", "/sys/kernel/debug/f2fs/status"); + RunCommandToFd(fd, "F2FS - fsck time (ms)", {"/vendor/bin/sh", "-c", "getprop ro.boottime.init.fsck.data"}); + RunCommandToFd(fd, "F2FS - checkpoint=disable time (ms)", {"/vendor/bin/sh", "-c", "getprop ro.boottime.init.mount.data"}); +} + +static void DumpUFS(int fd) { + DumpFileToFd(fd, "UFS model", "/sys/block/sda/device/model"); + DumpFileToFd(fd, "UFS rev", "/sys/block/sda/device/rev"); + DumpFileToFd(fd, "UFS size", "/sys/block/sda/size"); + + DumpFileToFd(fd, "UFS Slow IO Read", "/dev/sys/block/bootdevice/slowio_read_cnt"); + DumpFileToFd(fd, "UFS Slow IO Write", "/dev/sys/block/bootdevice/slowio_write_cnt"); + DumpFileToFd(fd, "UFS Slow IO Unmap", "/dev/sys/block/bootdevice/slowio_unmap_cnt"); + DumpFileToFd(fd, "UFS Slow IO Sync", "/dev/sys/block/bootdevice/slowio_sync_cnt"); + + RunCommandToFd(fd, "UFS err_stats", {"/vendor/bin/sh", "-c", + "path=\"/dev/sys/block/bootdevice/err_stats\"; " + "for node in `ls $path/* | grep -v reset_err_status`; do " + "printf \"%s:%d\\n\" $(basename $node) $(cat $node); done;"}); + + + RunCommandToFd(fd, "UFS io_stats", {"/vendor/bin/sh", "-c", + "path=\"/dev/sys/block/bootdevice/io_stats\"; " + "printf \"\\t\\t%-10s %-10s %-10s %-10s %-10s %-10s\\n\" " + "ReadCnt ReadBytes WriteCnt WriteBytes RWCnt RWBytes; " + "str=$(cat $path/*_start); arr=($str); " + "printf \"Started: \\t%-10s %-10s %-10s %-10s %-10s %-10s\\n\" " + "${arr[1]} ${arr[0]} ${arr[5]} ${arr[4]} ${arr[3]} ${arr[2]}; " + "str=$(cat $path/*_complete); arr=($str); " + "printf \"Completed: \\t%-10s %-10s %-10s %-10s %-10s %-10s\\n\" " + "${arr[1]} ${arr[0]} ${arr[5]} ${arr[4]} ${arr[3]} ${arr[2]}; " + "str=$(cat $path/*_maxdiff); arr=($str); " + "printf \"MaxDiff: \\t%-10s %-10s %-10s %-10s %-10s %-10s\\n\\n\" " + "${arr[1]} ${arr[0]} ${arr[5]} ${arr[4]} ${arr[3]} ${arr[2]}; "}); + + RunCommandToFd(fd, "UFS req_stats", {"/vendor/bin/sh", "-c", + "path=\"/dev/sys/block/bootdevice/req_stats\"; " + "printf \"\\t%-10s %-10s %-10s %-10s %-10s %-10s\\n\" " + "All Write Read Security Flush Discard; " + "str=$(cat $path/*_min); arr=($str); " + "printf \"Min:\\t%-10s %-10s %-10s %-10s %-10s %-10s\\n\" " + "${arr[0]} ${arr[5]} ${arr[3]} ${arr[4]} ${arr[2]} ${arr[1]}; " + "str=$(cat $path/*_max); arr=($str); " + "printf \"Max:\\t%-10s %-10s %-10s %-10s %-10s %-10s\\n\" " + "${arr[0]} ${arr[5]} ${arr[3]} ${arr[4]} ${arr[2]} ${arr[1]}; " + "str=$(cat $path/*_avg); arr=($str); " + "printf \"Avg.:\\t%-10s %-10s %-10s %-10s %-10s %-10s\\n\" " + "${arr[0]} ${arr[5]} ${arr[3]} ${arr[4]} ${arr[2]} ${arr[1]}; " + "str=$(cat $path/*_sum); arr=($str); " + "printf \"Count:\\t%-10s %-10s %-10s %-10s %-10s %-10s\\n\\n\" " + "${arr[0]} ${arr[5]} ${arr[3]} ${arr[4]} ${arr[2]} ${arr[1]};"}); + + std::string ufs_health = "for f in $(find /dev/sys/block/bootdevice/health_descriptor -type f); do if [[ -r $f && -f $f ]]; then echo --- $f; cat $f; echo ''; fi; done"; + RunCommandToFd(fd, "UFS health", {"/vendor/bin/sh", "-c", ufs_health.c_str()}); +} + +// Dump items related to storage +void DumpstateDevice::dumpStorageSection(int fd) { + DumpF2FS(fd); + DumpUFS(fd); +} + +// Dump items related to display +void DumpstateDevice::dumpDisplaySection(int fd) { + DumpFileToFd(fd, "CRTC-0 underrun count", "/sys/kernel/debug/dri/0/crtc-0/underrun_cnt"); + DumpFileToFd(fd, "CRTC-0 crc count", "/sys/kernel/debug/dri/0/crtc-0/crc_cnt"); + DumpFileToFd(fd, "CRTC-0 ecc count", "/sys/kernel/debug/dri/0/crtc-0/ecc_cnt"); + DumpFileToFd(fd, "CRTC-0 idma err count", "/sys/kernel/debug/dri/0/crtc-0/idma_err_cnt"); + DumpFileToFd(fd, "CRTC-0 event log", "/sys/kernel/debug/dri/0/crtc-0/event"); + DumpFileToFd(fd, "CRTC-1 underrun count", "/sys/kernel/debug/dri/0/crtc-1/underrun_cnt"); + DumpFileToFd(fd, "CRTC-1 crc count", "/sys/kernel/debug/dri/0/crtc-1/crc_cnt"); + DumpFileToFd(fd, "CRTC-1 ecc count", "/sys/kernel/debug/dri/0/crtc-1/ecc_cnt"); + DumpFileToFd(fd, "CRTC-1 idma err count", "/sys/kernel/debug/dri/0/crtc-1/idma_err_cnt"); + DumpFileToFd(fd, "CRTC-1 event log", "/sys/kernel/debug/dri/0/crtc-1/event"); + RunCommandToFd(fd, "libdisplaycolor", {"/vendor/bin/dumpsys", "displaycolor", "-v"}, + CommandOptions::WithTimeout(2).Build()); + DumpFileToFd(fd, "Primary panel name", "/sys/devices/platform/exynos-drm/primary-panel/panel_name"); + DumpFileToFd(fd, "Primary panel extra info", "/sys/devices/platform/exynos-drm/primary-panel/panel_extinfo"); + DumpFileToFd(fd, "Secondary panel name", "/sys/devices/platform/exynos-drm/secondary-panel/panel_name"); + DumpFileToFd(fd, "Secondary panel extra info", "/sys/devices/platform/exynos-drm/secondary-panel/panel_extinfo"); +} + +// Dump items related to AoC +void DumpstateDevice::dumpAoCSection(int fd) { + DumpFileToFd(fd, "AoC Service Status", "/sys/devices/platform/19000000.aoc/services"); + DumpFileToFd(fd, "AoC Restarts", "/sys/devices/platform/19000000.aoc/restart_count"); + DumpFileToFd(fd, "AoC Coredumps", "/sys/devices/platform/19000000.aoc/coredump_count"); + DumpFileToFd(fd, "AoC ring buf wake", "/sys/devices/platform/19000000.aoc/control/ring_buffer_wakeup"); + DumpFileToFd(fd, "AoC host ipc wake", "/sys/devices/platform/19000000.aoc/control/host_ipc_wakeup"); + DumpFileToFd(fd, "AoC usf wake", "/sys/devices/platform/19000000.aoc/control/usf_wakeup"); + DumpFileToFd(fd, "AoC audio wake", "/sys/devices/platform/19000000.aoc/control/audio_wakeup"); + DumpFileToFd(fd, "AoC logging wake", "/sys/devices/platform/19000000.aoc/control/logging_wakeup"); + DumpFileToFd(fd, "AoC hotword wake", "/sys/devices/platform/19000000.aoc/control/hotword_wakeup"); + RunCommandToFd(fd, "AoC memory exception wake", {"/vendor/bin/sh", "-c", "cat /sys/devices/platform/19000000.aoc/control/memory_exception"}, CommandOptions::WithTimeout(2).Build()); + RunCommandToFd(fd, "AoC memory votes", {"/vendor/bin/sh", "-c", "cat /sys/devices/platform/19000000.aoc/control/memory_votes"}, CommandOptions::WithTimeout(2).Build()); + RunCommandToFd(fd, "AoC Heap Stats (A32)", + {"/vendor/bin/sh", "-c", "echo 'dbg heap -c 1' > /dev/acd-debug; timeout 0.1 cat /dev/acd-debug"}, + CommandOptions::WithTimeout(1).Build()); + RunCommandToFd(fd, "AoC Heap Stats (F1)", + {"/vendor/bin/sh", "-c", "echo 'dbg heap -c 2' > /dev/acd-debug; timeout 0.1 cat /dev/acd-debug"}, + CommandOptions::WithTimeout(1).Build()); + RunCommandToFd(fd, "AoC Heap Stats (HF0)", + {"/vendor/bin/sh", "-c", "echo 'dbg heap -c 3' > /dev/acd-debug; timeout 0.1 cat /dev/acd-debug"}, + CommandOptions::WithTimeout(1).Build()); + RunCommandToFd(fd, "AoC Heap Stats (HF1)", + {"/vendor/bin/sh", "-c", "echo 'dbg heap -c 4' > /dev/acd-debug; timeout 0.1 cat /dev/acd-debug"}, + CommandOptions::WithTimeout(1).Build()); + RunCommandToFd(fd, "AoC MIF Stats", + {"/vendor/bin/sh", "-c", "echo 'mif details' > /dev/acd-debug; timeout 0.1 cat /dev/acd-debug"}, + CommandOptions::WithTimeout(1).Build()); +} + +// Dump items related to sensors usf. +void DumpstateDevice::dumpSensorsUSFSection(int fd) { + CommandOptions options = CommandOptions::WithTimeout(2).Build(); + RunCommandToFd(fd, "USF statistics", + {"/vendor/bin/sh", "-c", "usf_stats get --all"}, + options); + if (!PropertiesHelper::IsUserBuild()) { + // Not a user build, if this is also not a production device dump the USF registry. + std::string hwRev = android::base::GetProperty(HW_REVISION, ""); + if (hwRev.find("PROTO") != std::string::npos || + hwRev.find("EVT") != std::string::npos || + hwRev.find("DVT") != std::string::npos) { + RunCommandToFd(fd, "USF Registry", + {"/vendor/bin/sh", "-c", "usf_reg_edit save -"}, + options); + } + } +} + +// Gzip binary data and dump to fd in base64 format. Cmd to decode is also attached. +void dumpGzippedFileInBase64ToFd(int fd, const char* title, const char* file_path) { + auto cmd = android::base::StringPrintf("echo 'base64 -d <i, header->size, std::string(header->buf, header->i).c_str()), fd); + } else { + android::base::WriteStringToFd("*** Ramdump misc file: abl.log: File not found\n", fd); + } + dumpGzippedFileInBase64ToFd( + fd, "Ramdump misc file: acpm.lst (gzipped in base64)", "/mnt/vendor/ramdump/acpm.lst"); + dumpGzippedFileInBase64ToFd( + fd, "Ramdump misc file: s2d.lst (gzipped in base64)", "/mnt/vendor/ramdump/s2d.lst"); +} + +// Dump items that don't fit well into any other section +void DumpstateDevice::dumpMiscSection(int fd) { + RunCommandToFd(fd, "VENDOR PROPERTIES", {"/vendor/bin/getprop"}); + DumpFileToFd(fd, "VENDOR PROC DUMP", "/proc/vendor_sched/dump_task"); +} + +// Dump items related to GSC +void DumpstateDevice::dumpGscSection(int fd) { + RunCommandToFd(fd, "Citadel VERSION", {"vendor/bin/hw/citadel_updater", "-lv"}); + RunCommandToFd(fd, "Citadel STATS", {"vendor/bin/hw/citadel_updater", "--stats"}); + RunCommandToFd(fd, "GSC DEBUG DUMP", {"vendor/bin/hw/citadel_updater", "-D"}); +} + +void DumpstateDevice::dumpTrustySection(int fd) { + DumpFileToFd(fd, "Trusty TEE0 Logs", "/dev/trusty-log0"); +} + +void DumpstateDevice::dumpModem(int fd, int fdModem) +{ + std::string modemLogDir = MODEM_LOG_DIRECTORY; + std::string extendedLogDir = MODEM_EXTENDED_LOG_DIRECTORY; + std::string tcpdumpLogDir = TCPDUMP_LOG_DIRECTORY; + static const std::string sectionName = "modem"; + auto startTime = startSection(fd, sectionName); + + const std::string modemLogCombined = modemLogDir + "/modem_log_all.tar"; + const std::string modemLogAllDir = modemLogDir + "/modem_log"; + + DumpFileToFd(fd, "Modem Stat", "/data/vendor/modem_stat/debug.txt"); + RunCommandToFd(fd, "Modem SSR history", {"/vendor/bin/sh", "-c", + "for f in $(ls /data/vendor/ssrdump/crashinfo_modem*); do " + "echo $f ; cat $f ; done"}, + CommandOptions::WithTimeout(2).Build()); + RunCommandToFd(fd, "RFSD error log", {"/vendor/bin/sh", "-c", + "for f in $(ls /data/vendor/log/rfsd/rfslog_*); do " + "echo $f ; cat $f ; done"}, + CommandOptions::WithTimeout(2).Build()); + RunCommandToFd(fd, "MKDIR MODEM LOG", {"/vendor/bin/mkdir", "-p", modemLogAllDir.c_str()}, CommandOptions::WithTimeout(2).Build()); + + if (!PropertiesHelper::IsUserBuild()) { + bool modemLogEnabled = android::base::GetBoolProperty(MODEM_LOGGING_PERSIST_PROPERTY, false); + bool gpsLogEnabled = android::base::GetBoolProperty(GPS_LOGGING_STATUS_PROPERTY, false); + bool tcpdumpEnabled = android::base::GetBoolProperty(TCPDUMP_PERSIST_PROPERTY, false); + bool cameraLogsEnabled = android::base::GetBoolProperty( + "vendor.camera.debug.camera_performance_analyzer.attach_to_bugreport", true); + bool gxpDumpEnabled = android::base::GetBoolProperty("vendor.gxp.attach_to_bugreport", false); + int maxFileNum = android::base::GetIntProperty(MODEM_LOGGING_NUMBER_BUGREPORT_PROPERTY, 100); + + if (tcpdumpEnabled) { + dumpLogs(fd, tcpdumpLogDir, modemLogAllDir, android::base::GetIntProperty(TCPDUMP_NUMBER_BUGREPORT, 5), TCPDUMP_LOG_PREFIX); + } + + if (modemLogEnabled) { + bool modemLogStarted = android::base::GetBoolProperty(MODEM_LOGGING_STATUS_PROPERTY, false); + + if (modemLogStarted) { + android::base::SetProperty(MODEM_LOGGING_PROPERTY, "false"); + ALOGD("Stopping modem logging...\n"); + } else { + ALOGD("modem logging is not running\n"); + } + + for (int i = 0; i < 30; i++) { + if (!android::base::GetBoolProperty(MODEM_LOGGING_STATUS_PROPERTY, false)) { + ALOGD("modem logging stopped\n"); + sleep(1); + break; + } + sleep(1); + } + + dumpLogs(fd, modemLogDir, modemLogAllDir, maxFileNum, MODEM_LOG_PREFIX); + + if (modemLogStarted) { + ALOGD("Restarting modem logging...\n"); + android::base::SetProperty(MODEM_LOGGING_PROPERTY, "true"); + } + } + + if (gpsLogEnabled) { + dumpGpsLogs(fd, modemLogAllDir); + } else { + ALOGD("gps logging is not running\n"); + } + + if (cameraLogsEnabled) { + dumpCameraLogs(STDOUT_FILENO, modemLogAllDir); + } + + if (gxpDumpEnabled) { + const int maxGxpDebugDumps = 8; + const std::string gxpCoredumpOutputDir = modemLogAllDir + "/gxp_ssrdump"; + const std::string gxpCoredumpInputDir = "/data/vendor/ssrdump"; + + RunCommandToFd(fd, "MKDIR GXP COREDUMP", {"/vendor/bin/mkdir", "-p", gxpCoredumpOutputDir}, CommandOptions::WithTimeout(2).Build()); + + // Copy GXP coredumps and crashinfo to the output directory. + dumpLogs(fd, gxpCoredumpInputDir + "/coredump", gxpCoredumpOutputDir, maxGxpDebugDumps, "coredump_gxp_platform"); + dumpLogs(fd, gxpCoredumpInputDir, gxpCoredumpOutputDir, maxGxpDebugDumps, "crashinfo_gxp_platform"); + } + + dumpLogs(fd, extendedLogDir, modemLogAllDir, maxFileNum, EXTENDED_LOG_PREFIX); + dumpRilLogs(fd, modemLogAllDir); + dumpNetmgrLogs(modemLogAllDir); + dumpModemEFS(modemLogAllDir); + } + + RunCommandToFd(fd, "TAR LOG", {"/vendor/bin/tar", "cvf", modemLogCombined.c_str(), "-C", modemLogAllDir.c_str(), "."}, CommandOptions::WithTimeout(120).Build()); + RunCommandToFd(fd, "CHG PERM", {"/vendor/bin/chmod", "a+w", modemLogCombined.c_str()}, CommandOptions::WithTimeout(2).Build()); + + std::vector buffer(65536); + android::base::unique_fd fdLog(TEMP_FAILURE_RETRY(open(modemLogCombined.c_str(), O_RDONLY | O_CLOEXEC | O_NONBLOCK))); + + if (fdLog >= 0) { + while (1) { + ssize_t bytes_read = TEMP_FAILURE_RETRY(read(fdLog, buffer.data(), buffer.size())); + + if (bytes_read == 0) { + break; + } else if (bytes_read < 0) { + ALOGD("read(%s): %s\n", modemLogCombined.c_str(), strerror(errno)); + break; + } + + ssize_t result = TEMP_FAILURE_RETRY(write(fdModem, buffer.data(), bytes_read)); + + if (result != bytes_read) { + ALOGD("Failed to write %ld bytes, actually written: %ld", bytes_read, result); + break; + } + } + } + + RunCommandToFd(fd, "RM MODEM DIR", { "/vendor/bin/rm", "-r", modemLogAllDir.c_str()}, CommandOptions::WithTimeout(2).Build()); + RunCommandToFd(fd, "RM LOG", { "/vendor/bin/rm", modemLogCombined.c_str()}, CommandOptions::WithTimeout(2).Build()); + + endSection(fd, sectionName, startTime); +} + +// Methods from ::android::hardware::dumpstate::V1_0::IDumpstateDevice follow. +Return DumpstateDevice::dumpstateBoard(const hidl_handle &handle) { +// Ignore return value, just return an empty status. + dumpstateBoard_1_1(handle, DumpstateMode::DEFAULT, 30 * 1000 /* timeoutMillis */); + return Void(); +} + +// Methods from ::android::hardware::dumpstate::V1_1::IDumpstateDevice follow. +Return DumpstateDevice::dumpstateBoard_1_1(const hidl_handle& handle, + const DumpstateMode mode, + const uint64_t timeoutMillis) { + // Unused arguments. + (void) timeoutMillis; + + if (handle == nullptr || handle->numFds < 1) { + ALOGE("no FDs\n"); + return DumpstateStatus::ILLEGAL_ARGUMENT; + } + + int fd = handle->data[0]; + if (fd < 0) { + ALOGE("invalid FD: %d\n", handle->data[0]); + return DumpstateStatus::ILLEGAL_ARGUMENT; + } + + if (mode == DumpstateMode::WEAR) { + // We aren't a Wear device. + ALOGE("Unsupported mode: %d\n", mode); + return DumpstateStatus::UNSUPPORTED_MODE; + } else if (mode < DumpstateMode::FULL || mode > DumpstateMode::PROTO) { + ALOGE("Invalid mode: %d\n", mode); + return DumpstateStatus::ILLEGAL_ARGUMENT; + } + + dumpTextSection(fd, kAllSections); + + if (handle->numFds < 2) { + ALOGE("no FD for modem\n"); + } else { + int fdModem = handle->data[1]; + dumpModem(fd, fdModem); + } + + return DumpstateStatus::OK; +} + +Return DumpstateDevice::setVerboseLoggingEnabled(const bool enable) { + ::android::base::SetProperty(kVerboseLoggingProperty, enable ? "true" : "false"); + return Void(); +} + +Return DumpstateDevice::getVerboseLoggingEnabled() { + return ::android::base::GetBoolProperty(kVerboseLoggingProperty, false); +} + +// Since HALs that support the debug() interface are automatically invoked during +// bugreport generation and we don't want to generate a second copy of the same +// data that will go into dumpstate_board.txt, this function will only do +// something if it is called with an option, e.g. +// lshal debug android.hardware.dumpstate@1.0::IDumpstateDevice/default all +// +// Also, note that sections which generate attachments and/or binary data when +// included in a bugreport are not available through the debug() interface. +Return DumpstateDevice::debug(const hidl_handle &handle, const hidl_vec &args) { + // Exit when dump is completed since this is a lazy HAL. + addPostCommandTask([]() { + exit(0); + }); + + if (handle == nullptr || handle->numFds < 1 || args.size() != 1) { + return Void(); + } + + int fd = handle->data[0]; + dumpTextSection(fd, static_cast(args[0])); + + fsync(fd); + return Void(); +} + + +} // namespace implementation +} // namespace V1_1 +} // namespace dumpstate +} // namespace hardware +} // namespace android diff --git a/dumpstate/DumpstateDevice.h b/dumpstate/DumpstateDevice.h new file mode 100644 index 00000000..eca59b26 --- /dev/null +++ b/dumpstate/DumpstateDevice.h @@ -0,0 +1,97 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef ANDROID_HARDWARE_DUMPSTATE_V1_1_DUMPSTATEDEVICE_H +#define ANDROID_HARDWARE_DUMPSTATE_V1_1_DUMPSTATEDEVICE_H + +#include +#include +#include +#include + +namespace android { +namespace hardware { +namespace dumpstate { +namespace V1_1 { +namespace implementation { + +using ::android::hardware::dumpstate::V1_1::DumpstateMode; +using ::android::hardware::dumpstate::V1_1::DumpstateStatus; +using ::android::hardware::dumpstate::V1_1::IDumpstateDevice; +using ::android::hardware::hidl_handle; +using ::android::hardware::hidl_string; +using ::android::hardware::hidl_vec; +using ::android::hardware::Return; + +struct DumpstateDevice : public IDumpstateDevice { + public: + DumpstateDevice(); + + // Methods from ::android::hardware::dumpstate::V1_0::IDumpstateDevice follow. + Return dumpstateBoard(const hidl_handle& h) override; + + // Methods from ::android::hardware::dumpstate::V1_1::IDumpstateDevice follow. + Return dumpstateBoard_1_1(const hidl_handle& h, + const DumpstateMode mode, + const uint64_t timeoutMillis) override; + Return setVerboseLoggingEnabled(const bool enable) override; + Return getVerboseLoggingEnabled() override; + + // Methods from ::android::hidl::base::V1_0::IBase follow. + Return debug(const hidl_handle &fd, const hidl_vec &args) override; + + private: + const std::string kAllSections = "all"; + + std::vector>> mTextSections; + + void dumpLogs(int fd, std::string srcDir, std::string destDir, int maxFileNum, + const char *logPrefix); + + void dumpTextSection(int fd, std::string const& sectionName); + + // Text sections that can be dumped individually on the command line in + // addition to being included in full dumps + void dumpWlanSection(int fd); + void dumpPowerSection(int fd); + void dumpThermalSection(int fd); + void dumpTouchSection(int fd); + void dumpSocSection(int fd); + void dumpCpuSection(int fd); + void dumpDevfreqSection(int fd); + void dumpMemorySection(int fd); + void dumpStorageSection(int fd); + void dumpDisplaySection(int fd); + void dumpSensorsUSFSection(int fd); + void dumpAoCSection(int fd); + void dumpRamdumpSection(int fd); + void dumpMiscSection(int fd); + void dumpGscSection(int fd); + void dumpTrustySection(int fd); + + // Hybrid and binary sections that require an additional file descriptor + void dumpModem(int fd, int fdModem); + void dumpRilLogs(int fd, std::string destDir); + void dumpGpsLogs(int fd, const std::string &destDir); + void dumpCameraLogs(int fd, const std::string &destDir); +}; + +} // namespace implementation +} // namespace V1_0 +} // namespace dumpstate +} // namespace hardware +} // namespace android + +#endif // ANDROID_HARDWARE_DUMPSTATE_V1_1_DUMPSTATEDEVICE_H diff --git a/dumpstate/android.hardware.dumpstate@1.1-service.gs201.rc b/dumpstate/android.hardware.dumpstate@1.1-service.gs201.rc new file mode 100644 index 00000000..b18b7555 --- /dev/null +++ b/dumpstate/android.hardware.dumpstate@1.1-service.gs201.rc @@ -0,0 +1,6 @@ +service vendor.dumpstate-1-1 /vendor/bin/hw/android.hardware.dumpstate@1.1-service.gs201 + class hal + user system + group system + interface android.hardware.dumpstate@1.0::IDumpstateDevice default + interface android.hardware.dumpstate@1.1::IDumpstateDevice default diff --git a/dumpstate/service.cpp b/dumpstate/service.cpp new file mode 100644 index 00000000..7633c02a --- /dev/null +++ b/dumpstate/service.cpp @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#define LOG_TAG "android.hardware.dumpstate@1.0-service.gs201" + +#include +#include + +#include "DumpstateDevice.h" + +using ::android::hardware::configureRpcThreadpool; +using ::android::hardware::dumpstate::V1_1::IDumpstateDevice; +using ::android::hardware::dumpstate::V1_1::implementation::DumpstateDevice; +using ::android::hardware::joinRpcThreadpool; +using ::android::sp; + + +int main(int /* argc */, char* /* argv */ []) { + sp dumpstate = new DumpstateDevice; + configureRpcThreadpool(1, true); + + android::status_t status = dumpstate->registerAsService(); + + if (status != android::OK) + { + ALOGE("Could not register DumpstateDevice service (%d).", status); + return -1; + } + + joinRpcThreadpool(); +} diff --git a/edgetpu/OWNERS b/edgetpu/OWNERS new file mode 100644 index 00000000..9eb92a96 --- /dev/null +++ b/edgetpu/OWNERS @@ -0,0 +1,6 @@ +# Devs who work on EdgeTPU on Android. +hsuy@google.com +yuchicheng@google.com +iayara@google.com +qinyiyan@google.com +macwang@google.com \ No newline at end of file diff --git a/edgetpu/edgetpu.mk b/edgetpu/edgetpu.mk new file mode 100644 index 00000000..c97b5abc --- /dev/null +++ b/edgetpu/edgetpu.mk @@ -0,0 +1,28 @@ +# Edgetpu packages + +# Config variables for TPU chip on device. +$(call soong_config_set,edgetpu_config,chip,janeiro) + +# TPU logging service +PRODUCT_PACKAGES += \ + android.hardware.edgetpu.logging@service-edgetpu-logging +# TPU firmware +PRODUCT_PACKAGES += \ + edgetpu-janeiro.fw +# TPU NN AIDL HAL +PRODUCT_PACKAGES += \ + android.hardware.neuralnetworks@service-darwinn-aidl +# TPU application service +PRODUCT_PACKAGES += \ + vendor.google.edgetpu_app_service@1.0-service +# TPU vendor service +PRODUCT_PACKAGES += \ + vendor.google.edgetpu_vendor_service@1.0-service +# TPU HAL client library +PRODUCT_PACKAGES += \ + libedgetpu_client.google +# TPU metrics logger library +PRODUCT_PACKAGES += \ + libmetrics_logger +BOARD_VENDOR_SEPOLICY_DIRS += device/google/gs101-sepolicy/edgetpu/ +BOARD_VENDOR_SEPOLICY_DIRS += device/google/gs201-sepolicy/edgetpu/ diff --git a/factory/factory_post_boot/Android.bp b/factory/factory_post_boot/Android.bp new file mode 100644 index 00000000..cbbebda4 --- /dev/null +++ b/factory/factory_post_boot/Android.bp @@ -0,0 +1,25 @@ +// +// Copyright (C) 2022 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package { + default_applicable_licenses: ["Android-Apache-2.0"], +} +sh_binary { + name: "factory_post_boot", + src: "factory_post_boot.sh", + vendor: true, + sub_dir: "factory", +} + diff --git a/factory/factory_post_boot/factory_post_boot.sh b/factory/factory_post_boot/factory_post_boot.sh new file mode 100644 index 00000000..82dfcfb0 --- /dev/null +++ b/factory/factory_post_boot/factory_post_boot.sh @@ -0,0 +1,4 @@ +#!/vendor/bin/sh + +# Add adbd to nnapi vendor cgroup. (b/222226268) +echo `pidof adbd` > /proc/vendor_sched/set_task_group_nnapi diff --git a/factory/framework/Android.bp b/factory/framework/Android.bp new file mode 100644 index 00000000..aa9098de --- /dev/null +++ b/factory/framework/Android.bp @@ -0,0 +1,15 @@ +package { + // See: http://go/android-license-faq + // A large-scale-change added 'default_applicable_licenses' to import + // all of the 'license_kinds' from "//device/google/gs201:device_google_gs201_license" + // to get the below license kinds: + // SPDX-license-identifier-Apache-2.0 + default_applicable_licenses: [ + "//device/google/gs201:device_google_gs201_license", + ], +} + +runtime_resource_overlay { + name: "FactoryOverlayFrameworkRes", + product_specific: true, +} diff --git a/factory/framework/AndroidManifest.xml b/factory/framework/AndroidManifest.xml new file mode 100644 index 00000000..73875be8 --- /dev/null +++ b/factory/framework/AndroidManifest.xml @@ -0,0 +1,24 @@ + + + + + + + diff --git a/factory/framework/res/drawable-nodpi/default_wallpaper.png b/factory/framework/res/drawable-nodpi/default_wallpaper.png new file mode 100644 index 00000000..93b787e3 Binary files /dev/null and b/factory/framework/res/drawable-nodpi/default_wallpaper.png differ diff --git a/factory/launcher3/Android.bp b/factory/launcher3/Android.bp new file mode 100644 index 00000000..109ad5e1 --- /dev/null +++ b/factory/launcher3/Android.bp @@ -0,0 +1,15 @@ +package { + // See: http://go/android-license-faq + // A large-scale-change added 'default_applicable_licenses' to import + // all of the 'license_kinds' from "//device/google/gs201:device_google_gs201_license" + // to get the below license kinds: + // SPDX-license-identifier-Apache-2.0 + default_applicable_licenses: [ + "//device/google/gs201:device_google_gs201_license", + ], +} + +runtime_resource_overlay { + name: "FactoryOverlayLauncher3", + product_specific: true, +} diff --git a/factory/launcher3/AndroidManifest.xml b/factory/launcher3/AndroidManifest.xml new file mode 100644 index 00000000..3f285855 --- /dev/null +++ b/factory/launcher3/AndroidManifest.xml @@ -0,0 +1,25 @@ + + + + + + + diff --git a/factory/launcher3/res/xml/default_workspace_5x5.xml b/factory/launcher3/res/xml/default_workspace_5x5.xml new file mode 100644 index 00000000..ba1427a8 --- /dev/null +++ b/factory/launcher3/res/xml/default_workspace_5x5.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + diff --git a/factory/settings/Android.bp b/factory/settings/Android.bp new file mode 100644 index 00000000..3db1861d --- /dev/null +++ b/factory/settings/Android.bp @@ -0,0 +1,15 @@ +package { + // See: http://go/android-license-faq + // A large-scale-change added 'default_applicable_licenses' to import + // all of the 'license_kinds' from "//device/google/gs201:device_google_gs201_license" + // to get the below license kinds: + // SPDX-license-identifier-Apache-2.0 + default_applicable_licenses: [ + "//device/google/gs201:device_google_gs201_license", + ], +} + +runtime_resource_overlay { + name: "FactoryOverlaySettings", + product_specific: true, +} diff --git a/factory/settings/AndroidManifest.xml b/factory/settings/AndroidManifest.xml new file mode 100644 index 00000000..72e7838a --- /dev/null +++ b/factory/settings/AndroidManifest.xml @@ -0,0 +1,25 @@ + + + + + + + diff --git a/factory/settings/res/values/defaults.xml b/factory/settings/res/values/defaults.xml new file mode 100644 index 00000000..b7febd9e --- /dev/null +++ b/factory/settings/res/values/defaults.xml @@ -0,0 +1,26 @@ + + + + 0 + true + false + false + false + confirmed + diff --git a/factory_common.mk b/factory_common.mk new file mode 100644 index 00000000..fc745873 --- /dev/null +++ b/factory_common.mk @@ -0,0 +1,85 @@ +# +# Copyright 2020 The Android Open-Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +$(call inherit-product, device/google/gs201/aosp_common.mk) +$(call inherit-product-if-exists, vendor/google_devices/gs201/factory/pixel/device-factory.mk) + +PRODUCT_PROPERTY_OVERRIDES += service.adb.root=1 \ + ro.vendor.factory=1 + +# Factory Libraries of Audio +PRODUCT_PACKAGES += audioroute libaudioroutelite + +# Enable fatp by default for factory builds +PRODUCT_SYSTEM_DEFAULT_PROPERTIES += \ + persist.vendor.camera.fatp.enable=1 + +# Disable camera related features for factory builds +PRODUCT_PROPERTY_OVERRIDES += \ + vendor.camera.debug.bypass_face_ssd_processor=1 \ + vendor.camera.debug.csi_ebuf_enable=0 \ + vendor.camera.debug.enable_face_detection=0 \ + vendor.camera.debug.force_dpm_on=0 \ + vendor.camera.debug.force_eis_on=0 \ + vendor.camera.debug.force_eaf_on=0 \ + vendor.camera.debug.force_mesh_warp_on=0 \ + vendor.camera.debug.force_rectiface_node_on=0 \ + vendor.camera.debug.force_steadiface_on=0 \ + vendor.camera.debug.force_tnr_on=0 \ + vendor.camera.debug.force_segmentation_node_on=0 \ + vendor.camera.debug.enable_saliency=0 \ + vendor.camera.debug.force_local_tone_mapping_on=0 \ + vendor.camera.debug.local_tone_mapping_controller_v1.mode=0 + +# Disable ScreenDecorations for factory builds +PRODUCT_PROPERTY_OVERRIDES += \ + debug.disable_screen_decorations=true + +PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.set_idle_timer_ms?=80 +PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.set_touch_timer_ms=200 +PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.set_display_power_timer_ms=1000 +PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.use_content_detection_for_refresh_rate=true + +# factory should always has SELinux permissive +BOARD_BOOTCONFIG += androidboot.selinux=permissive +BOARD_KERNEL_CMDLINE += androidboot.selinux=permissive + +# Disable DebugFS restrictions in factory builds +PRODUCT_SET_DEBUGFS_RESTRICTIONS := false + +# Disable Bluetooth as default in factory build +DEVICE_PACKAGE_OVERLAYS += device/google/gs201/overlay-factory + +PRODUCT_COPY_FILES += \ + device/google/gs201/conf/init.factory.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/hw/init.factory.rc + +BOARD_SEPOLICY_DIRS += hardware/google/pixel-sepolicy/factory_boost + +# Add factory-friendly changes +PRODUCT_PACKAGES += \ + FactoryOverlaySettings \ + FactoryOverlayLauncher3 \ + FactoryOverlayFrameworkRes \ + factory_post_boot + +# To prevent rebooting due to crashing services +PRODUCT_SYSTEM_DEFAULT_PROPERTIES += \ + init.svc_debug.no_fatal.zygote=true \ + persist.device_config.configuration.disable_rescue_party=true + +# PixelLogger for RF testing +PRODUCT_PACKAGES_DEBUG += \ + PixelLogger \ diff --git a/fingerprint/fpc1540/fingerprint_config.mk b/fingerprint/fpc1540/fingerprint_config.mk new file mode 100644 index 00000000..1584e11f --- /dev/null +++ b/fingerprint/fpc1540/fingerprint_config.mk @@ -0,0 +1,18 @@ +# ---------------------------- +# Add feature flags below +# ---------------------------- +FPC_CONFIG_BUILD_VERSION=33 +FPC_CONFIG_CAPACITIVE=1 +FPC_CONFIG_MAX_NR_TEMPLATES=5 +FPC_CONFIG_SENSE_TOUCH_CALIBRATION_PATH=/data/fpc/calibration_sense_touch.dat +FPC_CONFIG_TA_FS=1 +FPC_DEFECTIVE_PIXEL_LIST_SIZE=5000 +FPC_SENSOR_SDK_LOG_LEVEL=3 +FPC_TEE_RUNTIME=TRUSTY +LIBFPC_NAME=libfpc1541_S_nav_debug.a +FPC_CONFIG_DEBUG=1 +FPC_CONFIG_PRODUCT_DEFAULT=FPC_PRODUCT_TYPE1541_S + +# +# File included from device//<>/.mk +# Packages to include into the build diff --git a/fingerprint/fpc1540/fingerprint_config_factory.mk b/fingerprint/fpc1540/fingerprint_config_factory.mk new file mode 100644 index 00000000..85b10641 --- /dev/null +++ b/fingerprint/fpc1540/fingerprint_config_factory.mk @@ -0,0 +1,21 @@ +# ---------------------------- +# Add feature flags below +# ---------------------------- +FPC_CONFIG_BUILD_VERSION=33 +FPC_CONFIG_CAPACITIVE=1 +FPC_CONFIG_MAX_NR_TEMPLATES=5 +FPC_CONFIG_NAVIGATION=0 +FPC_CONFIG_SENSE_TOUCH_CALIBRATION_PATH=/data/fpc/calibration_sense_touch.dat +FPC_CONFIG_SENSORTEST=1 +FPC_CONFIG_TA_FS=1 +FPC_DEFECTIVE_PIXEL_LIST_SIZE=5000 +FPC_SENSOR_SDK_LOG_LEVEL=3 +FPC_TEE_RUNTIME=TRUSTY +LIBFPC_NAME=libfpc1541_S_nav_debug.a +FPC_CONFIG_DEBUG=1 +FPC_CONFIG_ENGINEERING=1 +FPC_CONFIG_PRODUCT_DEFAULT=FPC_PRODUCT_TYPE1541_S + +# +# File included from device//<>/.mk +# Packages to include into the build diff --git a/fingerprint/fpc1540/fpc1540.mk b/fingerprint/fpc1540/fpc1540.mk new file mode 100644 index 00000000..779af80e --- /dev/null +++ b/fingerprint/fpc1540/fpc1540.mk @@ -0,0 +1,8 @@ +# Fingerprint +include device/google/gs201/fingerprint/fpc1540/fingerprint_config.mk + +PRODUCT_PACKAGES += \ + android.hardware.biometrics.fingerprint@2.1-service.fpc \ + +PRODUCT_COPY_FILES += \ + frameworks/native/data/etc/android.hardware.fingerprint.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.fingerprint.xml diff --git a/fingerprint/fpc1540/fpc1540_factory.mk b/fingerprint/fpc1540/fpc1540_factory.mk new file mode 100644 index 00000000..968e1d3c --- /dev/null +++ b/fingerprint/fpc1540/fpc1540_factory.mk @@ -0,0 +1,10 @@ +# Fingerprint +include device/google/gs201/fingerprint/fpc1540/fingerprint_config_factory.mk + +PRODUCT_PACKAGES += \ + fpc_tee_test\ + SensorTestTool \ + +PRODUCT_PACKAGES += \ + com.fingerprints.extension.xml \ + com.fingerprints.extension \ diff --git a/fingerprint/udfps.mk b/fingerprint/udfps.mk new file mode 100644 index 00000000..61f138f6 --- /dev/null +++ b/fingerprint/udfps.mk @@ -0,0 +1,28 @@ +# +# Copyright (C) 2020 The Android Open-Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +PRODUCT_COPY_FILES += \ + frameworks/native/data/etc/android.hardware.fingerprint.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.fingerprint.xml + +# Include the Goodix AIDL HAL namespaces. +PRODUCT_SOONG_NAMESPACES += vendor/goodix/udfps/g6_trusty +PRODUCT_SOONG_NAMESPACES += vendor/goodix/udfps/g6_aidl_trusty + +$(call soong_config_set,fp_hal_feature,biometric_suez_support,true) + +PRODUCT_PACKAGES += \ + android.hardware.biometrics.fingerprint@2.1-service.goodix \ + android.hardware.biometrics.fingerprint-service.goodix diff --git a/fingerprint/udfps_factory.mk b/fingerprint/udfps_factory.mk new file mode 100644 index 00000000..41aebe08 --- /dev/null +++ b/fingerprint/udfps_factory.mk @@ -0,0 +1,22 @@ +# +# Copyright (C) 2020 The Android Open-Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +PRODUCT_PACKAGES += \ + GF_delmar_factory \ + udfps_test + +PRODUCT_PROPERTY_OVERRIDES += \ + gf.debug.dump_data=1 diff --git a/firmware/BCM.btaddr b/firmware/BCM.btaddr new file mode 100644 index 00000000..4bf70ebc --- /dev/null +++ b/firmware/BCM.btaddr @@ -0,0 +1 @@ +22:22:3b:ff:0d:50 diff --git a/firmware/BCM4362A2_001.003.006.0027.0033.hcd b/firmware/BCM4362A2_001.003.006.0027.0033.hcd new file mode 100644 index 00000000..27b0dbc2 Binary files /dev/null and b/firmware/BCM4362A2_001.003.006.0027.0033.hcd differ diff --git a/firmware/BCM4389C0_003.001.010.0101.0000_Google_eval_USI_ES10.hcd b/firmware/BCM4389C0_003.001.010.0101.0000_Google_eval_USI_ES10.hcd new file mode 100644 index 00000000..8e73e471 Binary files /dev/null and b/firmware/BCM4389C0_003.001.010.0101.0000_Google_eval_USI_ES10.hcd differ diff --git a/firmware/BCM4389C1_003.002.009.0050.0000_Google_eval_USI_ES10_ePA_Updated.hcd b/firmware/BCM4389C1_003.002.009.0050.0000_Google_eval_USI_ES10_ePA_Updated.hcd new file mode 100644 index 00000000..47120b34 Binary files /dev/null and b/firmware/BCM4389C1_003.002.009.0050.0000_Google_eval_USI_ES10_ePA_Updated.hcd differ diff --git a/gnss/47765/Android.bp b/gnss/47765/Android.bp new file mode 100644 index 00000000..8ce2dd05 --- /dev/null +++ b/gnss/47765/Android.bp @@ -0,0 +1,231 @@ +// Copyright (C) 2020 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +soong_namespace { +} + +package { + // See: http://go/android-license-faq + // A large-scale-change added 'default_applicable_licenses' to import + // all of the 'license_kinds' from "//device/google/gs201:device_google_gs201_license" + // to get the below license kinds: + // SPDX-license-identifier-Apache-2.0 + default_applicable_licenses: [ + "//device/google/gs201:device_google_gs201_license", + ], +} + +cc_prebuilt_library_shared { + name: "android.hardware.gnss@2.1-impl-google", + arch: { + arm64: { + srcs: ["bin/android.hardware.gnss@2.1-impl-google.so"], + shared_libs: [ + "liblog", + "libhidlbase", + // "libhidltransport", + "libutils", + "android.hardware.gnss@1.0", + "android.hardware.gnss@1.1", + "android.hardware.gnss@2.0", + "android.hardware.gnss@2.1", + "android.hardware.gnss.measurement_corrections@1.0", + "android.hardware.gnss.visibility_control@1.0", + "android.hardware.gnss-V1-ndk", + "libhardware", + "libc++", + "libc", + "libm", + "libdl", + ], + }, + }, + compile_multilib: "64", + vendor: true, + relative_install_path: "hw", + strip: { + none: true, + }, + // Bypass because libhidltransport is deprecated + check_elf_files: false, +} + +cc_prebuilt_binary { + name: "android.hardware.gnss@2.1-service-brcm", + arch: { + arm64: { + srcs: ["bin/android.hardware.gnss@2.1-service-brcm"], + shared_libs: [ + "liblog", + "libutils", + "libhardware", + "android.hardware.gnss@1.0", + "libhidlbase", + // "libhidltransport", + // "libhwbinder", + "android.hardware.gnss@1.1", + "android.hardware.gnss@2.0", + "android.hardware.gnss@2.1", + "libc++", + "libc", + "libm", + "libdl", + ], + }, + }, + compile_multilib: "64", + vendor: true, + relative_install_path: "hw", + strip: { + none: true, + }, + // Bypass because libhidltransport is deprecated + // Bypass because libhwbinder is deprecated + check_elf_files: false, + vintf_fragments: ["android.hardware.gnss@2.1-service-brcm.xml"] +} + +cc_prebuilt_library_shared { + name: "flp.default", + arch: { + arm64: { + srcs: ["bin/flp.default.so"], + shared_libs: [ + "liblog", + "libcutils", + "libutils", + "libc++", + "libc", + "libm", + "libdl", + ], + }, + }, + compile_multilib: "64", + vendor: true, + relative_install_path: "hw", + strip: { + none: true, + }, + // Bypass because soname mismatch + check_elf_files: false, +} + +cc_prebuilt_binary { + name: "gpsd", + arch: { + arm64: { + srcs: ["bin/gpsd"], + shared_libs: [ + "liblog", + "libutils", + "libhardware_legacy", + "libcutils", + "libssl", + "libcrypto", + // "libsitril-gps", + "android.frameworks.sensorservice@1.0", + "libhidlbase", + "libandroid_net", + "libc++", + "libc", + "libm", + "libdl", + ], + }, + }, + compile_multilib: "64", + vendor: true, + relative_install_path: "hw", + strip: { + none: true, + }, + // Bypass because libsitril-gps is Android.mk module + check_elf_files: false, +} + +cc_prebuilt_library_shared { + name: "gps.default", + arch: { + arm64: { + srcs: ["bin/gps.default.so"], + shared_libs: [ + "liblog", + "libcutils", + "libutils", + "libc++", + "libc", + "libm", + "libdl", + ], + }, + }, + compile_multilib: "64", + vendor: true, + relative_install_path: "hw", + strip: { + none: true, + }, + // Bypass because soname mismatch + check_elf_files: false, +} + +cc_prebuilt_binary { + name: "lhd", + arch: { + arm64: { + srcs: ["bin/lhd"], + shared_libs: [ + "liblog", + "libutils", + "libhardware_legacy", + "libc++", + "libc", + "libm", + "libz", + "android.hardware.contexthub@1.0", + "libhidlbase", + "libdl", + ], + }, + }, + compile_multilib: "64", + vendor: true, + relative_install_path: "hw", + strip: { + none: true, + }, +} + +cc_prebuilt_binary { + name: "scd", + arch: { + arm64: { + srcs: ["bin/scd"], + shared_libs: [ + "liblog", + "libutils", + "libssl", + "libcrypto", + "libandroid_net", + ], + }, + }, + compile_multilib: "64", + vendor: true, + relative_install_path: "hw", + strip: { + none: true, + }, +} diff --git a/gnss/47765/android.hardware.gnss@2.1-service-brcm.xml b/gnss/47765/android.hardware.gnss@2.1-service-brcm.xml new file mode 100644 index 00000000..1eb3509e --- /dev/null +++ b/gnss/47765/android.hardware.gnss@2.1-service-brcm.xml @@ -0,0 +1,16 @@ + + + android.hardware.gnss + hwbinder + 2.1 + 1.1 + + IGnss + default + + + + android.hardware.gnss + IGnss/default + + diff --git a/gnss/47765/bin/android.hardware.gnss@2.1-impl-google.so b/gnss/47765/bin/android.hardware.gnss@2.1-impl-google.so new file mode 100755 index 00000000..48d5336d Binary files /dev/null and b/gnss/47765/bin/android.hardware.gnss@2.1-impl-google.so differ diff --git a/gnss/47765/bin/android.hardware.gnss@2.1-service-brcm b/gnss/47765/bin/android.hardware.gnss@2.1-service-brcm new file mode 100755 index 00000000..b679b152 Binary files /dev/null and b/gnss/47765/bin/android.hardware.gnss@2.1-service-brcm differ diff --git a/gnss/47765/bin/flp.default.so b/gnss/47765/bin/flp.default.so new file mode 100755 index 00000000..226f61ad Binary files /dev/null and b/gnss/47765/bin/flp.default.so differ diff --git a/gnss/47765/bin/gps.default.so b/gnss/47765/bin/gps.default.so new file mode 100755 index 00000000..808f08f9 Binary files /dev/null and b/gnss/47765/bin/gps.default.so differ diff --git a/gnss/47765/bin/gpsd b/gnss/47765/bin/gpsd new file mode 100755 index 00000000..2d1d8ac4 Binary files /dev/null and b/gnss/47765/bin/gpsd differ diff --git a/gnss/47765/bin/lhd b/gnss/47765/bin/lhd new file mode 100755 index 00000000..ec4c7709 Binary files /dev/null and b/gnss/47765/bin/lhd differ diff --git a/gnss/47765/bin/scd b/gnss/47765/bin/scd new file mode 100755 index 00000000..f9643526 Binary files /dev/null and b/gnss/47765/bin/scd differ diff --git a/gnss/47765/config/gps.cer b/gnss/47765/config/gps.cer new file mode 100644 index 00000000..934e0c5c --- /dev/null +++ b/gnss/47765/config/gps.cer @@ -0,0 +1,161 @@ +-----BEGIN CERTIFICATE----- +MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB +yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL +ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp +U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW +ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL +MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW +ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln +biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp +U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y +aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1 +nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex +t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz +SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG +BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+ +rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/ +NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E +BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH +BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy +aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv +MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE +p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y +5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK +WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ +4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N +hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ +RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD +VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX +DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y +ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy +VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr +mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr +IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK +mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu +XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy +dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye +jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1 +BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3 +DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92 +9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx +jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0 +Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz +ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS +R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH +MjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT +MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j +b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI +2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx +1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ +q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz +tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ +vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP +BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV +5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY +1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4 +NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG +Fdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91 +8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe +pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl +MrY= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB +yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL +ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp +U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW +ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL +MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW +ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln +biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp +U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y +aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1 +nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex +t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz +SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG +BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+ +rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/ +NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E +BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH +BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy +aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv +MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE +p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y +5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK +WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ +4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N +hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFZTCCA02gAwIBAgIPAWv6o5fPZQ5hxva1vuNrMA0GCSqGSIb3DQEBCwUAMDgx +CzAJBgNVBAYTAkpQMRcwFQYDVQQKDA5SYWt1dGVuIE1vYmlsZTEQMA4GA1UEAwwH +Um9vdCBDQTAeFw0xOTA3MTYxMTU1NDJaFw0yOTA3MTMxMTU1NDJaMD4xCzAJBgNV +BAYTAkpQMRcwFQYDVQQKEw5SYWt1dGVuIE1vYmlsZTEWMBQGA1UEAxMNREMgSXNz +dWluZyBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAObjAbQ8TkzF +A+/WvSE6fzDf+rlvBKY1dJJbiJ2/j0lc+tj56dE7+BhZ2JVmAYIYfEoUw69dwxTR +44EdZln3ZVFmMuOdfxvF9A46pMKzH1skr8ErDgjNyJ9f/JOuQ29p/7BvLC55aRzk +yj99BYdzJWKs+5W7jQlv7/HyJ/PQ+rUEBOx4o/YiTucDFduWdV6/x5mcEbKD3ufL +66vUEf3MHGegDkOWAMTchl1RmaYDlf3IMsXC7M2bFPFa/9y/vzaaY6EhnJ861co6 +rkOhTZe/kJZwqQYFmWczBPZK/9zRy3C1zA09tCBk+CDNBrNXe+3dMLFmnW4npxUQ +oceTPhaaDo5lA6HkkARwVWLrporFZ2B/th2Bqtu6uObLSB6JMA2jxmKwKukM8/jp +C9tKV9X03rHQIQultc63rivPdgQvqYgW1PVdzV1a3pZEMk5zv257+fxgfUGzfUh7 +tx0OY+BkykSP6ZK/BsbI/BY+rsS0L/0lmC22NU1p+qVeN3ZRHoqntB+FymaBfQ3/ +yfKkDNfnMua5GzLyyYGYUDDx71rtfrs3hGDiwjvE4B0IvsU0E7Oerk5gLqx8t0q/ +MmhI+CJJS1bH2sRBMcqfRAv+eyByFsvLY7Er/ztveaabX9xEwyPNFOcU+SZMhipv +EUKmUcOAHxzx4HbYEFyM0Z7WgUdlTd1xAgMBAAGjZjBkMB8GA1UdIwQYMBaAFPUI +BlLFno+y5xdHlCX349iVyS75MB0GA1UdDgQWBBQzVhTSCf8F31Zf0Bu661qymMko +JzAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADANBgkqhkiG9w0B +AQsFAAOCAgEADQEufjma/6fT/Do4Fh13lZhsowHSsGv5sFYly6224GsciE80ZwYg +R4EK/TAR0jorBXsu6sQc51pZ5SSHhIxfo2frfprTPaaWN6cZwfrb6UcnD/FaZ1jP +HzWrI3kRxG9JCDffzE8uMf8Rnc69n1j+TBerk4Ix3Zui2TaaF6LVceJ4RgeNkZl0 +OFkGGFruHz/d83q7A6YjgN0iwMEabdtKH7Sq27LqGPeCS8NuGlrziNAxktdwaYlN +D5t6ntM/1nHYPmVqdioEU9vAnyB3BiXOlITPHEEMOSlItcUsJ6rN5DZJaJgkBxvN +Qdi6wmaDlxy8XFyy4KGFKWAl17FlfpqW5VtYQJ4aDpibGlGqamg0vm+IJDIGPlOs +KQcxG17cOw4MCflAtnzHKHBn52DegQKwxev2ZpqdwVw/NqPq0yTNEbCRqEyiq7+H +ljKEFiEjEjeXTcqR4DoCseA5UgcriuriV0OCvr8KTlviV4FEUu+IA9ut8YIvf2of +Zz0z8rO4H+Rb4tMi/yBRM09x3rEW4hXwO0qpCBNBa0wEJBxufF3f6l9efEle+YTR +XS92gutaoVluqMfRSJckjwWokToi32/FvF79guZymD0qHkOSi5dewsIW7zsdobvv +t2CWLfTAb9cx222ELBpVPkfcgUKfF4RCGWPzuAlK6OueuDrInOiz8ag= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFUjCCAzqgAwIBAgICBpAwDQYJKoZIhvcNAQELBQAwODELMAkGA1UEBhMCSlAx +FzAVBgNVBAoMDlJha3V0ZW4gTW9iaWxlMRAwDgYDVQQDDAdSb290IENBMB4XDTE5 +MDcxNjEwNTkwMVoXDTM5MDcxNTEwNTkwMVowODELMAkGA1UEBhMCSlAxFzAVBgNV +BAoMDlJha3V0ZW4gTW9iaWxlMRAwDgYDVQQDDAdSb290IENBMIICIjANBgkqhkiG +9w0BAQEFAAOCAg8AMIICCgKCAgEAqiPMbNudotG8afkk5Fwo2QdDcFFmC+qGpGjw +yQs57QtGPRk1HsIhZFfr6zn8t1tZw6Zo+A0biFA7d2N93nYsseHBy/bZlhhOL+Js +Jb907UM09L5xaJIgnbFYVT1QjtB7ksLAy3rHpdSKiggfT1ynwM/u6wIdWRSx24QU +Vxpq5iFpVj041+/RnpCPASL5pSnbYZKQyOb/XsOaR+hz7aSjwiUzk2cRjAmRqYxY +qYVe135IAy377inJRtUPvi3IhtmUHJToiMLBH5tChkjkIpdRG1lVIj4vGdzrIb+Q +Kvg/k7BDVZ3sstsLvJ8evNonBzrqcr80ek/X+HFrgY/3M1VEru4ohLAiA877CuuG +UAfrxFh9qjP1yue+dlrQWk+WHMbGMzKI1zCKEMphJatyNHfpRtD8LUWtLV96DD78 +qLwQwrSYrEMd2u/akeBFKINYWqpqkVBhSsV3eukXVIdSbtSAxZNv+4m6QddEcUvG +2ZLf+yCf2tl+LPGXNL08vwMVbQqcDw8m+nDP4vu0VUixddyoqnnDlWOoQESuQFQ1 +IqYFQhRPs2dFRf5TJzkmbqRUXbaPxsrKGjTtVpPgENbv40nyRGyBbl1CzqpBFEp5 +7w4MPYDIzWKYbRyCnUE5WScRBFmym7242KA3SOfkylzGMb8KGJxohVME+7oMbNf5 +EjLWVgECAwEAAaNmMGQwHwYDVR0jBBgwFoAU9QgGUsWej7LnF0eUJffj2JXJLvkw +HQYDVR0OBBYEFPUIBlLFno+y5xdHlCX349iVyS75MA4GA1UdDwEB/wQEAwIBBjAS +BgNVHRMBAf8ECDAGAQH/AgEBMA0GCSqGSIb3DQEBCwUAA4ICAQCDGIeYrtivFt3p +8k5vXKFUT072C7wMvfrAGYCYgIdUthWCqJoMwnG3Fsg7Ngu70La7ESBzEKpnpPWz +eIdnREJkNP9iqiKHXnaUV2P/21AS1q6enVKBFOl7dYiVjqOZ+vac3a1UjLWkvm0g +x4sg/f3PpiEzZM7ecnQYk2wfMSq8Jw0w1Lf0SEeoYZTkf12cqSJVSa/G7gEdL/Cn +LO3yyBq0KPNdd87eIfvCLJj55UJ5dCr0JXRTUteBvJwflbPXmOqfI8fA05fwlJZS +o1SBpMI9cEBwaPXQM9CPNKaWLvyOR1KpviRzbCnaKf44Fs2OuZboo3avZrC9eUoU +HU2HKXRj8UMRlFeCdNugbOdGyK+CpXwMHVtIrtpf0iOUqo0rOekgnUSNi9qyjD1g +IV3Y/NLVl9fqe8q66IWUn8NYndxigMKWcMCBFUjfP0yMZeqSHFiIv7zk9PuV/62k +Yele7cK9iHnEUwWBj6VCEs6pZBS1QSmhRw3GWlSDc/gHXd38PG20zH7xg4z2H9Rc +Op9P1ZW2kjqv5D2+q/qtaePAyHn3B05UZrQYUmx7LaHNO7op6dZgCdoR0sVsR+Fc +Zyr0AhgiuTWrjtUEOGx2qJVwAsHkpqtlN+DaGT08dT64LvIf0bfGvmtm++/WEDWJ +HInwg85pGm+sEkYbYFRBD0woPBsL3g== +-----END CERTIFICATE----- diff --git a/gnss/47765/config/lhd.conf b/gnss/47765/config/lhd.conf new file mode 100644 index 00000000..efde25ba --- /dev/null +++ b/gnss/47765/config/lhd.conf @@ -0,0 +1,33 @@ +LheName=bbd + +LheRsmResetTimeoutMS=10000 +GpioNStdbyPath=/sys/devices/platform/10940000.spi/spi_master/spi5/spi5.0/nstandby + +LhePatch=/vendor/firmware/SensorHub.patch +Lhe477xDebugFlags=RPC:FACILITY=65535-dKP+CUST+LHE:STDOUT_PUTS:STDOUT_LOG +LheConsole=/data/vendor/gps/LheConsole + +LogEnabled=true +Log=JAVA +LogDirectory=/sdcard/gps/broadcom/storage + +LheBbdPacket=/dev/ttyBCM + +LheBbdControl=/dev/bbd_control + +# LheBbdSensor=/dev/bbd_sensor + +LheFailSafe=/data/vendor/gps/logs/esw-crash-dump.txt +LogLevel=*:I + +NvStorageDir=/data/vendor/gps/ + +# Enable BBD debugging at these stages: +# LheDriverDebugFlags=PATCH_BBD:LHE_BBD:FSC_BBD + +LheAutoBaudDelayMS=10 +TrafficLogEnabled=false +SecondaryConfigPath=/data/vendor/gps/overlay/lhd_overlay.conf + +SkipSensorWakeLock=true +LoggerWakeLockEnable=false diff --git a/gnss/47765/config/lhd_user.conf b/gnss/47765/config/lhd_user.conf new file mode 100644 index 00000000..0216ace9 --- /dev/null +++ b/gnss/47765/config/lhd_user.conf @@ -0,0 +1,31 @@ +LheName=bbd + +LheRsmResetTimeoutMS=10000 +GpioNStdbyPath=/sys/devices/platform/10940000.spi/spi_master/spi5/spi5.0/nstandby + +LhePatch=/vendor/firmware/SensorHub.patch +Lhe477xDebugFlags=RPC:FACILITY=65535-dKP+CUST+LHE:STDOUT_PUTS:STDOUT_LOG +# LheConsole=/data/vendor/gps/LheConsole + +LogEnabled=false +Log=JAVA +LogDirectory=/sdcard/gps/broadcom/storage + +LheBbdPacket=/dev/ttyBCM + +LheBbdControl=/dev/bbd_control + +# LheBbdSensor=/dev/bbd_sensor + +# LheFailSafe=/data/vendor/gps/esw-crash-dump.txt + +NvStorageDir=/data/vendor/gps/ + +# Enable BBD debugging at these stages: +# LheDriverDebugFlags=PATCH_BBD:LHE_BBD:FSC_BBD + +LheAutoBaudDelayMS=10 +TrafficLogEnabled=false + +SkipSensorWakeLock=true +LoggerWakeLockEnable=false diff --git a/gnss/47765/config/scd.conf b/gnss/47765/config/scd.conf new file mode 100644 index 00000000..43f9cd27 --- /dev/null +++ b/gnss/47765/config/scd.conf @@ -0,0 +1,6 @@ +LogEnabled=true +Log=JAVA +LogDirectory=/sdcard/gps/broadcom/storage +NvStorageDir=/data/vendor/gps/ +TcpConnectionTimeout=20 +SecondaryConfigPath=/data/vendor/gps/overlay/scd_overlay.conf diff --git a/gnss/47765/config/scd_user.conf b/gnss/47765/config/scd_user.conf new file mode 100644 index 00000000..e75f209b --- /dev/null +++ b/gnss/47765/config/scd_user.conf @@ -0,0 +1,5 @@ +LogEnabled=false +Log=JAVA +LogDirectory=/sdcard/gps/broadcom/storage +NvStorageDir=/data/vendor/gps/ +TcpConnectionTimeout=20 diff --git a/gnss/47765/firmware/SensorHub.patch b/gnss/47765/firmware/SensorHub.patch new file mode 100644 index 00000000..5cdc8b50 --- /dev/null +++ b/gnss/47765/firmware/SensorHub.patch @@ -0,0 +1,7027 @@ + + + + + + + + + + + + + + diff --git a/gnss/Android.mk b/gnss/Android.mk new file mode 100644 index 00000000..12f46b76 --- /dev/null +++ b/gnss/Android.mk @@ -0,0 +1,40 @@ +# Copyright (C) 2010 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +# We're moving the emulator-specific platform libs to +# development.git/tools/emulator/. The following test is to ensure +# smooth builds even if the tree contains both versions. +# + +ifeq ($(BOARD_USES_EXYNOS_GNSS_DUMMY), true) + +LOCAL_PATH := $(call my-dir) + +# HAL module implemenation stored in +# hw/..so +include $(CLEAR_VARS) + +LOCAL_MODULE_RELATIVE_PATH := hw +LOCAL_SHARED_LIBRARIES := liblog libcutils libhardware +LOCAL_SRC_FILES := gps_dummy.c +LOCAL_MODULE := gps.$(TARGET_BOARD_PLATFORM) +LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0 +LOCAL_LICENSE_CONDITIONS := notice +LOCAL_NOTICE_FILE := $(LOCAL_PATH)/../NOTICE +LOCAL_PROPRIETARY_MODULE := true + +include $(BUILD_SHARED_LIBRARY) + +endif diff --git a/gnss/device-gnss.mk b/gnss/device-gnss.mk new file mode 100644 index 00000000..08afe191 --- /dev/null +++ b/gnss/device-gnss.mk @@ -0,0 +1,29 @@ +PRODUCT_COPY_FILES += \ + frameworks/native/data/etc/android.hardware.location.gps.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.location.gps.xml \ + device/google/gs201/gnss/47765/config/gps.cer:$(TARGET_COPY_OUT_VENDOR)/etc/gnss/gps.cer \ + device/google/gs201/gnss/47765/firmware/SensorHub.patch:$(TARGET_COPY_OUT_VENDOR)/firmware/SensorHub.patch + +ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT))) + PRODUCT_COPY_FILES += \ + device/google/gs201/gnss/47765/config/lhd.conf:$(TARGET_COPY_OUT_VENDOR)/etc/gnss/lhd.conf \ + device/google/gs201/gnss/47765/config/scd.conf:$(TARGET_COPY_OUT_VENDOR)/etc/gnss/scd.conf +else + PRODUCT_COPY_FILES += \ + device/google/gs201/gnss/47765/config/lhd_user.conf:$(TARGET_COPY_OUT_VENDOR)/etc/gnss/lhd.conf \ + device/google/gs201/gnss/47765/config/scd_user.conf:$(TARGET_COPY_OUT_VENDOR)/etc/gnss/scd.conf +endif + +PRODUCT_SOONG_NAMESPACES += \ + device/google/gs201/gnss/47765 + +PRODUCT_PACKAGES += \ + android.hardware.gnss@2.1-impl-google \ + gps.default \ + flp.default \ + gpsd \ + lhd \ + scd \ + android.hardware.gnss@2.1-service-brcm + +PRODUCT_PACKAGES_DEBUG += \ + init.gps_log.rc diff --git a/gnss/gps_dummy.c b/gnss/gps_dummy.c new file mode 100644 index 00000000..9ccde1d3 --- /dev/null +++ b/gnss/gps_dummy.c @@ -0,0 +1,158 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* this implements a GPS hardware library for the Android emulator. + * the following code should be built as a shared library that will be + * placed into /system/lib/hw/gps.goldfish.so + * + * it will be loaded by the code in hardware/libhardware/hardware.c + * which is itself called from android_location_GpsLocationProvider.cpp + */ + + +#include +#include +#include +#include +#include +#include +#include +#include + +#define LOG_TAG "gps_dummy" +#include +//#include +#include + +#define GPS_DEBUG 0 + +#if GPS_DEBUG +# define D(...) ALOGD(__VA_ARGS__) +#else +# define D(...) ((void)0) +#endif + +static int +dummy_gps_init(GpsCallbacks* callbacks) +{ + return 0; +} + +static void +dummy_gps_cleanup(void) +{ +} + + +static int +dummy_gps_start() +{ + return 0; +} + + +static int +dummy_gps_stop() +{ + return 0; +} + + +static int +dummy_gps_inject_time(GpsUtcTime __unused time, + int64_t __unused timeReference, + int __unused uncertainty) +{ + return 0; +} + +static int +dummy_gps_inject_location(double __unused latitude, + double __unused longitude, + float __unused accuracy) +{ + return 0; +} + +static void +dummy_gps_delete_aiding_data(GpsAidingData __unused flags) +{ +} + +static int dummy_gps_set_position_mode(GpsPositionMode __unused mode, + GpsPositionRecurrence __unused recurrence, + uint32_t __unused min_interval, + uint32_t __unused preferred_accuracy, + uint32_t __unused preferred_time) +{ + // FIXME - support fix_frequency + return 0; +} + +static const void* +dummy_gps_get_extension(const char* __unused name) +{ + // no extensions supported + return NULL; +} + +static const GpsInterface dummyGpsInterface = { + sizeof(GpsInterface), + dummy_gps_init, + dummy_gps_start, + dummy_gps_stop, + dummy_gps_cleanup, + dummy_gps_inject_time, + dummy_gps_inject_location, + dummy_gps_delete_aiding_data, + dummy_gps_set_position_mode, + dummy_gps_get_extension, +}; + +const GpsInterface* gps__get_gps_interface(struct gps_device_t* __unused dev) +{ + return &dummyGpsInterface; +} + +static int open_gps(const struct hw_module_t* module, + char const* __unused name, + struct hw_device_t** device) +{ + struct gps_device_t *dev = (struct gps_device_t *)malloc(sizeof(struct gps_device_t)); + memset(dev, 0, sizeof(*dev)); + + dev->common.tag = HARDWARE_DEVICE_TAG; + dev->common.version = 0; + dev->common.module = (struct hw_module_t*)module; + dev->get_gps_interface = gps__get_gps_interface; + + *device = (struct hw_device_t*)dev; + return 0; +} + +static struct hw_module_methods_t gps_module_methods = { + .open = open_gps +}; + +struct hw_module_t HAL_MODULE_INFO_SYM = { + .tag = HARDWARE_MODULE_TAG, + .version_major = 1, + .version_minor = 0, + .id = GPS_HARDWARE_MODULE_ID, + .name = "Dummy GPS Module", + .author = "The Android Open Source Project", + .methods = &gps_module_methods, +}; diff --git a/health/Android.bp b/health/Android.bp new file mode 100644 index 00000000..01ca99eb --- /dev/null +++ b/health/Android.bp @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package { + // See: http://go/android-license-faq + // A large-scale-change added 'default_applicable_licenses' to import + // all of the 'license_kinds' from "//device/google/gs201:device_google_gs201_license" + // to get the below license kinds: + // SPDX-license-identifier-Apache-2.0 + default_applicable_licenses: [ + "//device/google/gs201:device_google_gs201_license", + ], +} + +cc_defaults { + name: "android.hardware.health-service.gs201-defaults", + defaults: [ + "libhealth_aidl_impl_user", + "libhealth_aidl_charger_defaults", + ], + relative_install_path: "hw", + vintf_fragments: ["android.hardware.health-service.gs201.xml"], + srcs: [ + "Health.cpp", + ], + + cflags: [ + "-Wall", + "-Werror", + ], + + static_libs: [ + "libhealth_aidl_impl", + ], +} + +cc_binary { + name: "android.hardware.health-service.gs201", + defaults: ["android.hardware.health-service.gs201-defaults"], + proprietary: true, + init_rc: ["android.hardware.health-service.gs201.rc"], + overrides: ["charger"], + shared_libs: [ + "libpixelhealth", + ], +} + +cc_binary { + name: "android.hardware.health-service.gs201_recovery", + defaults: ["android.hardware.health-service.gs201-defaults"], + recovery: true, + init_rc: ["android.hardware.health-service.gs201_recovery.rc"], + overrides: ["charger.recovery"], +} diff --git a/health/Health.cpp b/health/Health.cpp new file mode 100644 index 00000000..453c151a --- /dev/null +++ b/health/Health.cpp @@ -0,0 +1,269 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#define LOG_TAG "android.hardware.health@2.1-impl-gs201" +#include + +#include +#include +#include +#include +#include +#include + +// Recovery doesn't have libpixelhealth and charger mode +#ifndef __ANDROID_RECOVERY__ +#include +#include +#include +#include +#include +#include +#include +#endif // !__ANDROID_RECOVERY__ + +#include +#include +#include +#include +#include + +namespace { + +using namespace std::literals; + +using aidl::android::hardware::health::DiskStats; +using aidl::android::hardware::health::HalHealthLoop; +using aidl::android::hardware::health::HealthInfo; +using aidl::android::hardware::health::StorageInfo; +using android::hardware::health::InitHealthdConfig; + +#ifndef __ANDROID_RECOVERY__ +using aidl::android::hardware::health::charger::ChargerCallback; +using aidl::android::hardware::health::charger::ChargerModeMain; +using hardware::google::pixel::health::BatteryDefender; +using hardware::google::pixel::health::BatteryMetricsLogger; +using hardware::google::pixel::health::BatteryThermalControl; +using hardware::google::pixel::health::DeviceHealth; +using hardware::google::pixel::health::LowBatteryShutdownMetrics; +using hardware::google::pixel::health::ChargerDetect; + +#define FG_DIR "/sys/class/power_supply/battery" +constexpr char kBatteryResistance[] {FG_DIR "/resistance"}; +constexpr char kBatteryOCV[] {FG_DIR "/voltage_ocv"}; +constexpr char kVoltageAvg[] {FG_DIR "/voltage_now"}; + +#define WLC_DIR "/sys/class/power_supply/wireless" + +static BatteryDefender battDefender(WLC_DIR "/present", + "/sys/devices/platform/google,charger/charge_start_level", + "/sys/devices/platform/google,charger/charge_stop_level"); +static BatteryThermalControl battThermalControl( + "dev/thermal/tz-by-name/soc/mode"); +static BatteryMetricsLogger battMetricsLogger(kBatteryResistance, kBatteryOCV); +static LowBatteryShutdownMetrics shutdownMetrics(kVoltageAvg); +static DeviceHealth deviceHealth; +#endif // !__ANDROID_RECOVERY__ + +#define UFS_DIR "/dev/sys/block/bootdevice" +constexpr char kUfsHealthEol[]{UFS_DIR "/health_descriptor/eol_info"}; +constexpr char kUfsHealthLifetimeA[]{UFS_DIR "/health_descriptor/life_time_estimation_a"}; +constexpr char kUfsHealthLifetimeB[]{UFS_DIR "/health_descriptor/life_time_estimation_b"}; +constexpr char kUfsVersion[]{UFS_DIR "/device_descriptor/specification_version"}; +constexpr char kDiskStatsFile[]{"/sys/block/sda/stat"}; + +static std::string ufs_version; +static uint16_t eol; +static uint16_t lifetimeA; +static uint16_t lifetimeB; +static std::chrono::system_clock::time_point ufs_last_query_time; +constexpr auto kUfsQueryIntervalHours = std::chrono::hours{24}; + +#ifndef __ANDROID_RECOVERY__ +static bool needs_wlc_updates = false; +constexpr char kWlcCapacity[]{WLC_DIR "/capacity"}; +#endif // !__ANDROID_RECOVERY__ + +std::ifstream assert_open(const std::string &path) { + std::ifstream stream(path); + if (!stream.is_open()) { + LOG(WARNING) << "Cannot read " << path; + } + return stream; +} + +template +void read_value_from_file(const std::string &path, T *field) { + auto stream = assert_open(path); + stream.unsetf(std::ios_base::basefield); + stream >> *field; +} + +void read_ufs_version(StorageInfo *info) { + if (ufs_version.empty()) { + uint64_t value; + read_value_from_file(kUfsVersion, &value); + std::stringstream ss; + ss << "ufs " << std::hex << value; + ufs_version = ss.str(); + LOG(INFO) << "ufs: " << ufs_version << " detected"; + } + info->version = ufs_version; +} + +#ifdef __ANDROID_RECOVERY__ +void private_healthd_board_init(struct healthd_config *) {} +int private_healthd_board_battery_update(HealthInfo *) { return 0; } +#else // !__ANDROID__RECOVERY__ + +static bool FileExists(const std::string &filename) { + struct stat buffer; + + return stat(filename.c_str(), &buffer) == 0; +} + +void private_healthd_board_init(struct healthd_config *hc) { + std::string tcpmPsyName; + ChargerDetect::populateTcpmPsyName(&tcpmPsyName); + hc->ignorePowerSupplyNames.push_back(android::String8(tcpmPsyName.c_str())); + needs_wlc_updates = FileExists(kWlcCapacity); + if (needs_wlc_updates == false) { + battDefender.setWirelessNotSupported(); + } +} + +int private_healthd_board_battery_update(HealthInfo *health_info) { + deviceHealth.update(health_info); + battThermalControl.updateThermalState(*health_info); + battMetricsLogger.logBatteryProperties(*health_info); + shutdownMetrics.logShutdownVoltage(*health_info); + // Allow BatteryDefender to override online properties + ChargerDetect::onlineUpdate(health_info); + battDefender.update(health_info); + + if (needs_wlc_updates && + !android::base::WriteStringToFile(std::to_string(health_info->batteryLevel), kWlcCapacity)) + LOG(INFO) << "Unable to write battery level to wireless capacity"; + + return 0; +} +#endif // __ANDROID_RECOVERY__ + +void private_get_storage_info(std::vector *vec_storage_info) { + vec_storage_info->resize(1); + StorageInfo *storage_info = &vec_storage_info->at(0); + + read_ufs_version(storage_info); + + auto time_now = std::chrono::system_clock::now(); + auto time_delta = time_now - ufs_last_query_time; + auto hoursElapsed = std::chrono::duration_cast(time_delta); + if (hoursElapsed >= kUfsQueryIntervalHours) { + ufs_last_query_time = time_now; + read_value_from_file(kUfsHealthEol, &eol); + read_value_from_file(kUfsHealthLifetimeA, &lifetimeA); + read_value_from_file(kUfsHealthLifetimeB, &lifetimeB); + LOG(INFO) << "ufs: eol=" << eol << " lifetimeA=" << lifetimeA << " lifetimeB=" << lifetimeB; + } + storage_info->eol = eol; + storage_info->lifetimeA = lifetimeA; + storage_info->lifetimeB = lifetimeB; + + return; +} + +void private_get_disk_stats(std::vector *vec_stats) { + vec_stats->resize(1); + DiskStats *stats = &vec_stats->at(0); + + auto stream = assert_open(kDiskStatsFile); + // Regular diskstats entries + stream >> stats->reads >> stats->readMerges >> stats->readSectors >> + stats->readTicks >> stats->writes >> stats->writeMerges >> + stats->writeSectors >> stats->writeTicks >> stats->ioInFlight >> + stats->ioTicks >> stats->ioInQueue; + return; +} +} // anonymous namespace + +namespace aidl::android::hardware::health::implementation { +class HealthImpl : public Health { + public: + HealthImpl(std::string_view instance_name, std::unique_ptr&& config) + : Health(std::move(instance_name), std::move(config)) {} + + ndk::ScopedAStatus getDiskStats(std::vector* out) override; + ndk::ScopedAStatus getStorageInfo(std::vector* out) override; + + protected: + void UpdateHealthInfo(HealthInfo* health_info) override; + +}; + +void HealthImpl::UpdateHealthInfo(HealthInfo* health_info) { + private_healthd_board_battery_update(health_info); +} + +ndk::ScopedAStatus HealthImpl::getStorageInfo(std::vector* out) +{ + private_get_storage_info(out); + if (out->empty()) { + return ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION); + } + return ndk::ScopedAStatus::ok(); +} + +ndk::ScopedAStatus HealthImpl::getDiskStats(std::vector* out) +{ + private_get_disk_stats(out); + if (out->empty()) { + return ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION); + } + return ndk::ScopedAStatus::ok(); +} + +} // namespace aidl::android::hardware::health::implementation + +int main(int argc, char **argv) { + using ::aidl::android::hardware::health::implementation::HealthImpl; + + // Use kernel logging in recovery +#ifdef __ANDROID_RECOVERY__ + android::base::InitLogging(argv, android::base::KernelLogger); +#endif + + auto config = std::make_unique(); + InitHealthdConfig(config.get()); + + private_healthd_board_init(config.get()); + + auto binder = + ndk::SharedRefBase::make("default"sv, std::move(config)); + + if (argc >= 2 && argv[1] == "--charger"sv) { + // In regular mode, start charger UI. +#ifndef __ANDROID_RECOVERY__ + LOG(INFO) << "Starting charger mode with UI."; + return ChargerModeMain(binder, std::make_shared(binder)); +#endif + // In recovery, ignore --charger arg. + LOG(INFO) << "Starting charger mode without UI."; + } else { + LOG(INFO) << "Starting health HAL."; + } + + auto hal_health_loop = std::make_shared(binder, binder); + return hal_health_loop->StartLoop(); +} diff --git a/health/android.hardware.health-service.gs201.rc b/health/android.hardware.health-service.gs201.rc new file mode 100644 index 00000000..bff83a39 --- /dev/null +++ b/health/android.hardware.health-service.gs201.rc @@ -0,0 +1,17 @@ +service vendor.health-gs201 /vendor/bin/hw/android.hardware.health-service.gs201 + class hal + user system + group system + capabilities WAKE_ALARM BLOCK_SUSPEND + file /dev/kmsg w + +service vendor.charger /vendor/bin/hw/android.hardware.health-service.gs201 --charger + class charger + seclabel u:r:charger_vendor:s0 + user system + group system wakelock input + capabilities SYS_BOOT + file /dev/kmsg w + file /sys/fs/pstore/console-ramoops-0 r + file /sys/fs/pstore/console-ramoops r + file /proc/last_kmsg r diff --git a/health/android.hardware.health-service.gs201.xml b/health/android.hardware.health-service.gs201.xml new file mode 100644 index 00000000..98026cbd --- /dev/null +++ b/health/android.hardware.health-service.gs201.xml @@ -0,0 +1,7 @@ + + + android.hardware.health + 1 + IHealth/default + + diff --git a/health/android.hardware.health-service.gs201_recovery.rc b/health/android.hardware.health-service.gs201_recovery.rc new file mode 100644 index 00000000..ddaeaa5e --- /dev/null +++ b/health/android.hardware.health-service.gs201_recovery.rc @@ -0,0 +1,7 @@ +service vendor.health-gs201 /system/bin/hw/android.hardware.health-service.gs201_recovery + class hal + seclabel u:r:hal_health_default:s0 + user system + group system + capabilities WAKE_ALARM BLOCK_SUSPEND + file /dev/kmsg w diff --git a/init.hardware.wlc.rc.userdebug b/init.hardware.wlc.rc.userdebug new file mode 100644 index 00000000..dee7b6bc --- /dev/null +++ b/init.hardware.wlc.rc.userdebug @@ -0,0 +1,24 @@ +# +# Copyright (C) 2018 The Android Open-Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +on property:sys.boot_completed=1 && property:persist.vendor.limit.wlc.current=1 + write /sys/class/power_supply/dc/current_max 75000 + +on property:sys.boot_completed=1 && property:persist.vendor.limit.wlc.current=0 + write /sys/class/power_supply/dc/current_max 1100000 + +on property:vendor.disable.wlc=1 + write /sys/class/power_supply/wireless/online 0 diff --git a/init.insmod.gs201.cfg b/init.insmod.gs201.cfg new file mode 100644 index 00000000..1eb29b9a --- /dev/null +++ b/init.insmod.gs201.cfg @@ -0,0 +1,12 @@ +#################################################### +# init.insmod.common.cfg # +# This file contains common kernel modules to load # +# at init time by init.insmod.sh script # +#################################################### + +# Load common kernel modules +# Modules here will be loaded *before* device specific modules +install_display_drivers +modprobe|-b * +# All common modules loaded +setprop|vendor.common.modules.ready diff --git a/init.insmod.sh b/init.insmod.sh new file mode 100755 index 00000000..97ae7bcb --- /dev/null +++ b/init.insmod.sh @@ -0,0 +1,76 @@ +#!/vendor/bin/sh + +############################################################# +### init.insmod.cfg format: ### +### ----------------------------------------------------- ### +### [insmod|setprop|enable/moprobe|wait] [path|prop name] ### +### ... ### +############################################################# + +modules_dir= + +for f in /vendor/lib/modules/*/modules.dep /vendor/lib/modules/modules.dep; do + if [[ -f "$f" ]]; then + modules_dir="$(dirname "$f")" + break + fi +done + +if [[ -z "${modules_dir}" ]]; then + echo "Unable to locate kernel modules directory" 2>&1 + exit 1 +fi + +# imitates wait_for_file() in init +wait_for_file() +{ + filename="${1}" + timeout="${2:-5}" + + expiry=$(($(date "+%s")+timeout)) + while [[ ! -e "${filename}" ]] && [[ "$(date "+%s")" -le "${expiry}" ]] + do + sleep 0.01 + done +} + +install_display_drivers() +{ + panel_drv=`getprop ro.boot.primary_panel_drv` + if [[ -z "$panel_drv" ]]; then + panel_drv="panel-samsung-emul" + fi + modprobe -d "${modules_dir}" exynos-drm.ko + modprobe -d "${modules_dir}" $panel_drv.ko +} + +if [ $# -eq 1 ]; then + cfg_file=$1 +else + # Set property even if there is no insmod config + # to unblock early-boot trigger + setprop vendor.common.modules.ready + setprop vendor.device.modules.ready + exit 1 +fi + +if [ -f $cfg_file ]; then + while IFS="|" read -r action arg + do + case $action in + "insmod") insmod $arg ;; + "setprop") setprop $arg 1 ;; + "enable") echo 1 > $arg ;; + "modprobe") + case ${arg} in + "-b *" | "-b") + arg="-b --all=${modules_dir}/modules.load" ;; + "*" | "") + arg="--all=${modules_dir}/modules.load" ;; + esac + modprobe -a -d "${modules_dir}" $arg ;; + "wait") wait_for_file $arg ;; + "install_display_drivers") install_display_drivers ;; + esac + done < $cfg_file +fi diff --git a/interfaces/boot/1.0/Android.bp b/interfaces/boot/1.0/Android.bp new file mode 100644 index 00000000..a5937e78 --- /dev/null +++ b/interfaces/boot/1.0/Android.bp @@ -0,0 +1,66 @@ +// +// Copyright (C) 2019 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package { + // See: http://go/android-license-faq + // A large-scale-change added 'default_applicable_licenses' to import + // all of the 'license_kinds' from "//device/google/gs201:device_google_gs201_license" + // to get the below license kinds: + // SPDX-license-identifier-Apache-2.0 + default_applicable_licenses: [ + "//device/google/gs201:device_google_gs201_license", + ], +} + +cc_binary { + name: "android.hardware.boot@1.0-service-gs201", + defaults: ["hidl_defaults"], + relative_install_path: "hw", + vendor: true, + init_rc: ["android.hardware.boot@1.0-service-gs201.rc"], + srcs: [ + "BootControl.cpp", + "GptUtils.cpp", + "service.cpp" + ], + shared_libs: [ + "libbase", + "liblog", + "libhidlbase", + "libutils", + "libcutils", + "libz", + "android.hardware.boot@1.0", + ], +} + +cc_library { + name: "android.hardware.boot@1.0-impl-gs201", + recovery: true, + srcs: [ + "BootControl.cpp", + "GptUtils.cpp", + ], + relative_install_path: "hw", + shared_libs: [ + "libbase", + "liblog", + "libhidlbase", + "libutils", + "libcutils", + "libz", + "android.hardware.boot@1.0", + ], +} diff --git a/interfaces/boot/1.0/BootControl.cpp b/interfaces/boot/1.0/BootControl.cpp new file mode 100644 index 00000000..1f155c9d --- /dev/null +++ b/interfaces/boot/1.0/BootControl.cpp @@ -0,0 +1,272 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define LOG_TAG "bootcontrolhal" + +#include "BootControl.h" +#include "GptUtils.h" + +#include +#include +#include + +namespace android { +namespace hardware { +namespace boot { +namespace V1_0 { +namespace implementation { + +namespace { + +#define BOOT_A_PATH "/dev/block/by-name/boot_a" +#define BOOT_B_PATH "/dev/block/by-name/boot_b" + +// slot flags +#define AB_ATTR_PRIORITY_SHIFT 52 +#define AB_ATTR_PRIORITY_MASK (3UL << AB_ATTR_PRIORITY_SHIFT) +#define AB_ATTR_ACTIVE_SHIFT 54 +#define AB_ATTR_ACTIVE (1UL << AB_ATTR_ACTIVE_SHIFT) +#define AB_ATTR_RETRY_COUNT_SHIFT (55) +#define AB_ATTR_RETRY_COUNT_MASK (7UL << AB_ATTR_RETRY_COUNT_SHIFT) +#define AB_ATTR_SUCCESSFUL (1UL << 58) +#define AB_ATTR_UNBOOTABLE (1UL << 59) + +#define AB_ATTR_MAX_PRIORITY 3UL +#define AB_ATTR_MAX_RETRY_COUNT 3UL + +static std::string getDevPath(uint32_t slot) { + char real_path[PATH_MAX]; + + const char *path = slot == 0 ? BOOT_A_PATH : BOOT_B_PATH; + + int ret = readlink(path, real_path, sizeof real_path); + if (ret < 0) { + ALOGE("readlink failed for boot device %s\n", strerror(errno)); + return std::string(); + } + + std::string dp(real_path); + // extract /dev/sda.. part + return dp.substr(0, sizeof "/dev/block/sdX" - 1); +} + +static bool isSlotFlagSet(uint32_t slot, uint64_t flag) { + std::string dev_path = getDevPath(slot); + if (dev_path.empty()) { + ALOGI("Could not get device path for slot %d\n", slot); + return false; + } + + GptUtils gpt(dev_path); + if (gpt.Load()) { + ALOGI("failed to load gpt data\n"); + return false; + } + + gpt_entry *e = gpt.GetPartitionEntry(slot ? "boot_b" : "boot_a"); + if (e == nullptr) { + ALOGI("failed to get gpt entry\n"); + return false; + } + + return !!(e->attr & flag); +} + +static int setSlotFlag(uint32_t slot, uint64_t flag) { + std::string dev_path = getDevPath(slot); + if (dev_path.empty()) { + ALOGI("Could not get device path for slot %d\n", slot); + return -1; + } + + GptUtils gpt(dev_path); + if (gpt.Load()) { + ALOGI("failed to load gpt data\n"); + return -1; + } + + gpt_entry *e = gpt.GetPartitionEntry(slot ? "boot_b" : "boot_a"); + if (e == nullptr) { + ALOGI("failed to get gpt entry\n"); + return -1; + } + + e->attr |= flag; + gpt.Sync(); + + return 0; +} + +} + +// Methods from ::android::hardware::boot::V1_0::IBootControl follow. +Return BootControl::getNumberSlots() { + uint32_t slots = 0; + + if (access(BOOT_A_PATH, F_OK) == 0) + slots++; + + if (access(BOOT_B_PATH, F_OK) == 0) + slots++; + + return slots; +} + +Return BootControl::getCurrentSlot() { + char suffix[PROPERTY_VALUE_MAX]; + property_get("ro.boot.slot_suffix", suffix, "_a"); + return std::string(suffix) == "_b" ? 1 : 0; +} + +Return BootControl::markBootSuccessful(markBootSuccessful_cb _hidl_cb) { + if (getNumberSlots() == 0) { + // no slots, just return true otherwise Android keeps trying + _hidl_cb({true, ""}); + return Void(); + } + int ret = setSlotFlag(getCurrentSlot(), AB_ATTR_SUCCESSFUL); + ret ? _hidl_cb({false, "Failed to set successfull flag"}) : _hidl_cb({true, ""}); + return Void(); +} + +Return BootControl::setActiveBootSlot(uint32_t slot, setActiveBootSlot_cb _hidl_cb) { + if (slot >= 2) { + _hidl_cb({false, "Invalid slot"}); + return Void(); + } + + std::string dev_path = getDevPath(slot); + if (dev_path.empty()) { + _hidl_cb({false, "Could not get device path for slot"}); + return Void(); + } + + GptUtils gpt(dev_path); + if (gpt.Load()) { + _hidl_cb({false, "failed to load gpt data"}); + return Void(); + } + + gpt_entry *active_entry = gpt.GetPartitionEntry(slot == 0 ? "boot_a" : "boot_b"); + gpt_entry *inactive_entry = gpt.GetPartitionEntry(slot == 0 ? "boot_b" : "boot_a"); + if (active_entry == nullptr || inactive_entry == nullptr) { + _hidl_cb({false, "failed to get entries for boot partitions"}); + return Void(); + } + + ALOGV("slot active attributes %lx\n", active_entry->attr); + ALOGV("slot inactive attributes %lx\n", inactive_entry->attr); + + char boot_dev[PROPERTY_VALUE_MAX]; + property_get("ro.boot.bootdevice", boot_dev, ""); + if (boot_dev[0] == '\0') { + _hidl_cb({false, "invalid ro.boot.bootdevice prop"}); + return Void(); + } + + std::string boot_lun_path = std::string("/sys/devices/platform/") + + boot_dev + "/pixel/boot_lun_enabled"; + int fd = open(boot_lun_path.c_str(), O_RDWR); + if (fd < 0) { + // Try old path for kernels < 5.4 + // TODO: remove once kernel 4.19 support is deprecated + std::string boot_lun_path = std::string("/sys/devices/platform/") + + boot_dev + "/attributes/boot_lun_enabled"; + fd = open(boot_lun_path.c_str(), O_RDWR); + if (fd < 0) { + _hidl_cb({false, "failed to open ufs attr boot_lun_enabled"}); + return Void(); + } + } + + // update attributes for active and inactive + inactive_entry->attr &= ~AB_ATTR_ACTIVE; + active_entry->attr = AB_ATTR_ACTIVE | (AB_ATTR_MAX_PRIORITY << AB_ATTR_PRIORITY_SHIFT) | + (AB_ATTR_MAX_RETRY_COUNT << AB_ATTR_RETRY_COUNT_SHIFT); + + // + // bBootLunEn + // 0x1 => Boot LU A = enabled, Boot LU B = disable + // 0x2 => Boot LU A = disable, Boot LU B = enabled + // + int ret = android::base::WriteStringToFd(slot == 0 ? "1" : "2", fd); + close(fd); + if (ret < 0) { + _hidl_cb({false, "faied to write boot_lun_enabled attribute"}); + return Void(); + } + + _hidl_cb({true, ""}); + return Void(); +} + +Return BootControl::setSlotAsUnbootable(uint32_t slot, setSlotAsUnbootable_cb _hidl_cb) { + if (slot >= 2) { + _hidl_cb({false, "Invalid slot"}); + return Void(); + } + + std::string dev_path = getDevPath(slot); + if (dev_path.empty()) { + _hidl_cb({false, "Could not get device path for slot"}); + return Void(); + } + + GptUtils gpt(dev_path); + gpt.Load(); + + gpt_entry *e = gpt.GetPartitionEntry(slot ? "boot_b" : "boot_a"); + e->attr |= AB_ATTR_UNBOOTABLE; + + gpt.Sync(); + + _hidl_cb({true, ""}); + return Void(); +} + +Return<::android::hardware::boot::V1_0::BoolResult> BootControl::isSlotBootable(uint32_t slot) { + if (getNumberSlots() == 0) + return BoolResult::FALSE; + if (slot >= getNumberSlots()) + return BoolResult::INVALID_SLOT; + return isSlotFlagSet(slot, AB_ATTR_UNBOOTABLE) ? BoolResult::FALSE : BoolResult::TRUE; +} + +Return<::android::hardware::boot::V1_0::BoolResult> BootControl::isSlotMarkedSuccessful(uint32_t slot) { + if (getNumberSlots() == 0) { + // just return true so that we don't we another call trying to mark it as successful + // when there is no slots + return BoolResult::TRUE; + } + if (slot >= getNumberSlots()) + return BoolResult::INVALID_SLOT; + return isSlotFlagSet(slot, AB_ATTR_SUCCESSFUL) ? BoolResult::TRUE : BoolResult::FALSE; +} + +Return BootControl::getSuffix(uint32_t slot, getSuffix_cb _hidl_cb) { + _hidl_cb(slot == 0 ? "_a" : slot == 1 ? "_b" : ""); + return Void(); +} + +extern "C" IBootControl* HIDL_FETCH_IBootControl(const char*) { + return new BootControl(); +} + +} // namespace implementation +} // namespace V1_0 +} // namespace boot +} // namespace hardware +} // namespace android diff --git a/interfaces/boot/1.0/BootControl.h b/interfaces/boot/1.0/BootControl.h new file mode 100644 index 00000000..eb81cb07 --- /dev/null +++ b/interfaces/boot/1.0/BootControl.h @@ -0,0 +1,59 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#include +#include +#include + +namespace android { +namespace hardware { +namespace boot { +namespace V1_0 { +namespace implementation { + +using ::android::hardware::hidl_array; +using ::android::hardware::hidl_memory; +using ::android::hardware::hidl_string; +using ::android::hardware::hidl_vec; +using ::android::hardware::Return; +using ::android::hardware::Void; +using ::android::sp; + +struct BootControl : public IBootControl { + // Methods from ::android::hardware::boot::V1_0::IBootControl follow. + Return getNumberSlots() override; + Return getCurrentSlot() override; + Return markBootSuccessful(markBootSuccessful_cb _hidl_cb) override; + Return setActiveBootSlot(uint32_t slot, setActiveBootSlot_cb _hidl_cb) override; + Return setSlotAsUnbootable(uint32_t slot, setSlotAsUnbootable_cb _hidl_cb) override; + Return<::android::hardware::boot::V1_0::BoolResult> isSlotBootable(uint32_t slot) override; + Return<::android::hardware::boot::V1_0::BoolResult> isSlotMarkedSuccessful(uint32_t slot) override; + Return getSuffix(uint32_t slot, getSuffix_cb _hidl_cb) override; + + // Methods from ::android::hidl::base::V1_0::IBase follow. + +}; + +// FIXME: most likely delete, this is only for passthrough implementations +extern "C" IBootControl* HIDL_FETCH_IBootControl(const char* name); + +} // namespace implementation +} // namespace V1_0 +} // namespace boot +} // namespace hardware +} // namespace android diff --git a/interfaces/boot/1.0/GptUtils.cpp b/interfaces/boot/1.0/GptUtils.cpp new file mode 100644 index 00000000..f8936175 --- /dev/null +++ b/interfaces/boot/1.0/GptUtils.cpp @@ -0,0 +1,199 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define LOG_TAG "bootcontrolhal" + +#include "GptUtils.h" + +#include +#include +#include +#include +#include + +namespace android { +namespace hardware { +namespace boot { +namespace V1_0 { +namespace implementation { + +namespace { + +static int ValidateGptHeader(gpt_header *gpt) +{ + if (gpt->signature != GPT_SIGNATURE) { + ALOGE("invalid gpt signature 0x%lx\n", gpt->signature); + return -1; + } + + if (gpt->header_size != sizeof(gpt_header)) { + ALOGE("invalid gpt header size %u\n", gpt->header_size); + return -1; + } + + if (gpt->entry_size != sizeof(gpt_entry)) { + ALOGE("invalid gpt entry size %u\n", gpt->entry_size); + return -1; + } + + return 0; +} + +} + +GptUtils::GptUtils(const std::string dev_path) : dev_path(dev_path), fd(0) {} + +int GptUtils::Load(void) +{ + fd = open(dev_path.c_str(), O_RDWR); + if (fd < 0) { + ALOGE("failed to open block dev %s, %d\n", dev_path.c_str(), errno); + return -1; + } + + int ret = ioctl(fd, BLKSSZGET, &block_size); + if (ret < 0) { + ALOGE("failed to get block size %d\n", errno); + return -1; + } + + // read primary header + lseek64(fd, block_size, SEEK_SET); + ret = read(fd, &gpt_primary, sizeof gpt_primary); + if (ret < 0) { + ALOGE("failed to read gpt primary header %d\n", errno); + return -1; + } + + if (ValidateGptHeader(&gpt_primary)) { + ALOGE("error validating gpt header\n"); + return -1; + } + + // read partition entries + entry_array.resize(gpt_primary.entry_count); + uint32_t entries_size = gpt_primary.entry_size * gpt_primary.entry_count; + lseek64(fd, block_size * gpt_primary.start_lba, SEEK_SET); + ret = read(fd, entry_array.data(), entries_size); + if (ret < 0) { + ALOGE("failed to read gpt partition entries %d\n", errno); + return -1; + } + + // read gpt back header + lseek64(fd, block_size * gpt_primary.backup_lba, SEEK_SET); + ret = read(fd, &gpt_backup, sizeof gpt_backup); + if (ret < 0) { + ALOGE("failed to read gpt backup header %d\n", errno); + return -1; + } + + if (ValidateGptHeader(&gpt_backup)) { + ALOGW("error validating gpt backup\n"); // just warn about it, not fail + } + + // Create map + auto get_name = [](const uint16_t *efi_name) { + char name[37] = {}; + for (int i = 0; efi_name[i] && i < sizeof name - 1; ++i) + name[i] = efi_name[i]; + return std::string(name); + }; + + for (auto const &e: entry_array) { + if (e.name[0] == 0) + break; // stop at the first partition with no name + std::string s = get_name(e.name); + entries[s] = const_cast(&e); + } + + return 0; +} + +gpt_entry *GptUtils::GetPartitionEntry(std::string name) +{ + return entries.find(name) != entries.end() ? entries[name] : nullptr; +} + +int GptUtils::Sync(void) +{ + if (!fd) + return -1; + + // calculate crc and check if we need to update gpt + gpt_primary.entries_crc32 = crc32(0, reinterpret_cast(entry_array.data()), + entry_array.size() * sizeof(gpt_entry)); + + // save old crc + uint32_t crc = gpt_primary.crc32; + gpt_primary.crc32 = 0; + + gpt_primary.crc32 = crc32(0, reinterpret_cast(&gpt_primary), sizeof gpt_primary); + if (crc == gpt_primary.crc32) + return 0; // nothing to do (no changes) + + ALOGI("updating GPT\n"); + + lseek64(fd, block_size * gpt_primary.current_lba, SEEK_SET); + int ret = write(fd, &gpt_primary, sizeof gpt_primary); + if (ret < 0) { + ALOGE("failed to write gpt primary header %d\n", errno); + return -1; + } + + lseek64(fd, block_size * gpt_primary.start_lba, SEEK_SET); + ret = write(fd, entry_array.data(), entry_array.size() * sizeof(gpt_entry)); + if (ret < 0) { + ALOGE("failed to write gpt partition entries %d\n", errno); + return -1; + } + + //update GPT backup entries and backup + lseek64(fd, block_size * gpt_backup.start_lba, SEEK_SET); + ret = write(fd, entry_array.data(), entry_array.size() * sizeof(gpt_entry)); + if (ret < 0) { + ALOGE("failed to write gpt backup partition entries %d\n", errno); + return -1; + } + + gpt_backup.entries_crc32 = gpt_primary.entries_crc32; + gpt_backup.crc32 = 0; + gpt_backup.crc32 = crc32(0, reinterpret_cast(&gpt_backup), sizeof gpt_backup); + lseek64(fd, block_size * gpt_primary.backup_lba, SEEK_SET); + ret = write(fd, &gpt_backup, sizeof gpt_backup); + if (ret < 0) { + ALOGE("failed to write gpt backup header %d\n", errno); + return -1; + } + + fsync(fd); + + return 0; +} + +GptUtils::~GptUtils() +{ + if (fd) { + Sync(); + close(fd); + } +} + +} // namespace implementation +} // namespace V1_0 +} // namespace boot +} // namespace hardware +} // namespace android diff --git a/interfaces/boot/1.0/GptUtils.h b/interfaces/boot/1.0/GptUtils.h new file mode 100644 index 00000000..d969d9d8 --- /dev/null +++ b/interfaces/boot/1.0/GptUtils.h @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#include +#include +#include + +namespace android { +namespace hardware { +namespace boot { +namespace V1_0 { +namespace implementation { + +#define GPT_SIGNATURE 0x5452415020494645UL + +typedef struct { + uint8_t type_guid[16]; + uint8_t guid[16]; + uint64_t first_lba; + uint64_t last_lba; + uint64_t attr; + uint16_t name[36]; +} __attribute__((packed)) gpt_entry; + +typedef struct { + uint64_t signature; + uint32_t revision; + uint32_t header_size; + uint32_t crc32; + uint32_t reserved; + uint64_t current_lba; + uint64_t backup_lba; + uint64_t first_usable_lba; + uint64_t last_usable_lba; + uint8_t disk_guid[16]; + uint64_t start_lba; + uint32_t entry_count; + uint32_t entry_size; + uint32_t entries_crc32; +} __attribute__((packed)) gpt_header; + +class GptUtils { + public: + GptUtils(const std::string dev_path); + int Load(void); + gpt_entry *GetPartitionEntry(std::string name); + int Sync(void); + ~GptUtils(); + + private: + std::string dev_path; + int fd; + uint32_t block_size; + gpt_header gpt_primary; + gpt_header gpt_backup; + std::vector entry_array; + std::mapentries; +}; + +} // namespace implementation +} // namespace V1_0 +} // namespace boot +} // namespace hardware +} // namespace android diff --git a/interfaces/boot/1.0/android.hardware.boot@1.0-service-gs201.rc b/interfaces/boot/1.0/android.hardware.boot@1.0-service-gs201.rc new file mode 100644 index 00000000..7a7849fd --- /dev/null +++ b/interfaces/boot/1.0/android.hardware.boot@1.0-service-gs201.rc @@ -0,0 +1,4 @@ +service vendor.boot-hal-1-0 /vendor/bin/hw/android.hardware.boot@1.0-service-gs201 + class early_hal + user root + group root diff --git a/interfaces/boot/1.0/service.cpp b/interfaces/boot/1.0/service.cpp new file mode 100644 index 00000000..9dcd78cc --- /dev/null +++ b/interfaces/boot/1.0/service.cpp @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#define LOG_TAG "android.hardware.boot@1.0-service" + +#include +#include +#include +#include +#include "BootControl.h" + +using ::android::status_t; + +using ::android::hardware::boot::V1_0::IBootControl; + +using ::android::hardware::boot::V1_0::implementation::BootControl; + +int main (int /* argc */, char * /* argv */ []) { + // This function must be called before you join to ensure the proper + // number of threads are created. The threadpool will never exceed + // size one because of this call. + ::android::hardware::configureRpcThreadpool(1 /*threads*/, true /*willJoin*/); + + ::android::sp bootctrl = new BootControl(); + const status_t status = bootctrl->registerAsService(); + if (status != ::android::OK) { + return 1; // or handle error + } + + // Adds this thread to the threadpool, resulting in one total + // thread in the threadpool. We could also do other things, but + // would have to specify 'false' to willJoin in configureRpcThreadpool. + ::android::hardware::joinRpcThreadpool(); + return 1; // joinRpcThreadpool should never return +} diff --git a/interfaces/boot/1.2/Android.bp b/interfaces/boot/1.2/Android.bp new file mode 100644 index 00000000..a9fb7f49 --- /dev/null +++ b/interfaces/boot/1.2/Android.bp @@ -0,0 +1,81 @@ +// +// Copyright (C) 2020 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package { + // See: http://go/android-license-faq + // A large-scale-change added 'default_applicable_licenses' to import + // all of the 'license_kinds' from "//device/google/gs201:device_google_gs201_license" + // to get the below license kinds: + // SPDX-license-identifier-Apache-2.0 + default_applicable_licenses: [ + "//device/google/gs201:device_google_gs201_license", + ], +} + +cc_binary { + name: "android.hardware.boot@1.2-service-gs201", + defaults: ["hidl_defaults"], + relative_install_path: "hw", + vendor: true, + init_rc: ["android.hardware.boot@1.2-service-gs201.rc"], + srcs: [ + "BootControl.cpp", + "GptUtils.cpp", + "service.cpp" + ], + shared_libs: [ + "libbase", + "liblog", + "libhidlbase", + "libutils", + "libcutils", + "libz", + "android.hardware.boot@1.0", + "android.hardware.boot@1.1", + "android.hardware.boot@1.2", + ], + static_libs: [ + "libboot_control", + "libbootloader_message_vendor", + "libfstab", + ], +} + +cc_library { + name: "android.hardware.boot@1.2-impl-gs201", + stem: "android.hardware.boot@1.0-impl-1.2-impl-gs201", + recovery: true, + srcs: [ + "BootControl.cpp", + "GptUtils.cpp", + ], + relative_install_path: "hw", + shared_libs: [ + "libbase", + "liblog", + "libhidlbase", + "libutils", + "libcutils", + "libz", + "android.hardware.boot@1.0", + "android.hardware.boot@1.1", + "android.hardware.boot@1.2", + ], + static_libs: [ + "libboot_control", + "libbootloader_message_vendor", + "libfstab", + ], +} diff --git a/interfaces/boot/1.2/BootControl.cpp b/interfaces/boot/1.2/BootControl.cpp new file mode 100644 index 00000000..70b95940 --- /dev/null +++ b/interfaces/boot/1.2/BootControl.cpp @@ -0,0 +1,420 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define LOG_TAG "bootcontrolhal" + +#include "BootControl.h" + +#include +#include +#include +#include +#include +#include + +#include "DevInfo.h" +#include "GptUtils.h" + +namespace android { +namespace hardware { +namespace boot { +namespace V1_2 { +namespace implementation { + +using android::bootable::GetMiscVirtualAbMergeStatus; +using android::bootable::InitMiscVirtualAbMessageIfNeeded; +using android::bootable::SetMiscVirtualAbMergeStatus; +using android::hardware::boot::V1_0::BoolResult; +using android::hardware::boot::V1_0::CommandResult; +using android::hardware::boot::V1_1::MergeStatus; + +namespace { + +// clang-format off + +#define BOOT_A_PATH "/dev/block/by-name/boot_a" +#define BOOT_B_PATH "/dev/block/by-name/boot_b" +#define DEVINFO_PATH "/dev/block/by-name/devinfo" + +// slot flags +#define AB_ATTR_PRIORITY_SHIFT 52 +#define AB_ATTR_PRIORITY_MASK (3UL << AB_ATTR_PRIORITY_SHIFT) +#define AB_ATTR_ACTIVE_SHIFT 54 +#define AB_ATTR_ACTIVE (1UL << AB_ATTR_ACTIVE_SHIFT) +#define AB_ATTR_RETRY_COUNT_SHIFT (55) +#define AB_ATTR_RETRY_COUNT_MASK (7UL << AB_ATTR_RETRY_COUNT_SHIFT) +#define AB_ATTR_SUCCESSFUL (1UL << 58) +#define AB_ATTR_UNBOOTABLE (1UL << 59) + +#define AB_ATTR_MAX_PRIORITY 3UL +#define AB_ATTR_MAX_RETRY_COUNT 3UL + +// clang-format on + +static std::string getDevPath(uint32_t slot) { + char real_path[PATH_MAX]; + + const char *path = slot == 0 ? BOOT_A_PATH : BOOT_B_PATH; + + int ret = readlink(path, real_path, sizeof real_path); + if (ret < 0) { + ALOGE("readlink failed for boot device %s\n", strerror(errno)); + return std::string(); + } + + std::string dp(real_path); + // extract /dev/sda.. part + return dp.substr(0, sizeof "/dev/block/sdX" - 1); +} + +static bool isSlotFlagSet(uint32_t slot, uint64_t flag) { + std::string dev_path = getDevPath(slot); + if (dev_path.empty()) { + ALOGI("Could not get device path for slot %d\n", slot); + return false; + } + + GptUtils gpt(dev_path); + if (gpt.Load()) { + ALOGI("failed to load gpt data\n"); + return false; + } + + gpt_entry *e = gpt.GetPartitionEntry(slot ? "boot_b" : "boot_a"); + if (e == nullptr) { + ALOGI("failed to get gpt entry\n"); + return false; + } + + return !!(e->attr & flag); +} + +static bool setSlotFlag(uint32_t slot, uint64_t flag) { + std::string dev_path = getDevPath(slot); + if (dev_path.empty()) { + ALOGI("Could not get device path for slot %d\n", slot); + return false; + } + + GptUtils gpt(dev_path); + if (gpt.Load()) { + ALOGI("failed to load gpt data\n"); + return false; + } + + gpt_entry *e = gpt.GetPartitionEntry(slot ? "boot_b" : "boot_a"); + if (e == nullptr) { + ALOGI("failed to get gpt entry\n"); + return false; + } + + e->attr |= flag; + gpt.Sync(); + + return true; +} + +static bool is_devinfo_valid; +static bool is_devinfo_initialized; +static std::mutex devinfo_lock; +static devinfo_t devinfo; + +static bool isDevInfoValid() { + const std::lock_guard lock(devinfo_lock); + + if (is_devinfo_initialized) { + return is_devinfo_valid; + } + + is_devinfo_initialized = true; + + android::base::unique_fd fd(open(DEVINFO_PATH, O_RDONLY)); + android::base::ReadFully(fd, &devinfo, sizeof devinfo); + + if (devinfo.magic != DEVINFO_MAGIC) { + return is_devinfo_valid; + } + + uint32_t version = ((uint32_t)devinfo.ver_major << 16) | devinfo.ver_minor; + // only version 3.3+ supports A/B data + if (version >= 0x0003'0003) { + is_devinfo_valid = true; + } + + return is_devinfo_valid; +} + +static bool DevInfoSync() { + if (!isDevInfoValid()) { + return false; + } + + android::base::unique_fd fd(open(DEVINFO_PATH, O_WRONLY)); + return android::base::WriteFully(fd, &devinfo, sizeof devinfo); +} + +static void DevInfoInitSlot(devinfo_ab_slot_data_t &slot_data) { + slot_data.retry_count = AB_ATTR_MAX_RETRY_COUNT; + slot_data.unbootable = 0; + slot_data.successful = 0; + slot_data.active = 1; + slot_data.fastboot_ok = 0; +} + +} // namespace + +// Methods from ::android::hardware::boot::V1_0::IBootControl follow. +Return BootControl::getNumberSlots() { + uint32_t slots = 0; + + if (access(BOOT_A_PATH, F_OK) == 0) + slots++; + + if (access(BOOT_B_PATH, F_OK) == 0) + slots++; + + return slots; +} + +Return BootControl::getCurrentSlot() { + char suffix[PROPERTY_VALUE_MAX]; + property_get("ro.boot.slot_suffix", suffix, "_a"); + return std::string(suffix) == "_b" ? 1 : 0; +} + +Return BootControl::markBootSuccessful(markBootSuccessful_cb _hidl_cb) { + if (getNumberSlots() == 0) { + // no slots, just return true otherwise Android keeps trying + _hidl_cb({true, ""}); + return Void(); + } + + bool ret; + if (isDevInfoValid()) { + auto const slot = getCurrentSlot(); + devinfo.ab_data.slots[slot].successful = 1; + ret = DevInfoSync(); + } else { + ret = setSlotFlag(getCurrentSlot(), AB_ATTR_SUCCESSFUL); + } + + !ret ? _hidl_cb({false, "Failed to set successful flag"}) : _hidl_cb({true, ""}); + return Void(); +} + +Return BootControl::setActiveBootSlot(uint32_t slot, setActiveBootSlot_cb _hidl_cb) { + if (slot >= 2) { + _hidl_cb({false, "Invalid slot"}); + return Void(); + } + + if (isDevInfoValid()) { + auto &active_slot_data = devinfo.ab_data.slots[slot]; + auto &inactive_slot_data = devinfo.ab_data.slots[!slot]; + + inactive_slot_data.active = 0; + DevInfoInitSlot(active_slot_data); + + if (!DevInfoSync()) { + _hidl_cb({false, "Could not update DevInfo data"}); + return Void(); + } + } else { + std::string dev_path = getDevPath(slot); + if (dev_path.empty()) { + _hidl_cb({false, "Could not get device path for slot"}); + return Void(); + } + + GptUtils gpt(dev_path); + if (gpt.Load()) { + _hidl_cb({false, "failed to load gpt data"}); + return Void(); + } + + gpt_entry *active_entry = gpt.GetPartitionEntry(slot == 0 ? "boot_a" : "boot_b"); + gpt_entry *inactive_entry = gpt.GetPartitionEntry(slot == 0 ? "boot_b" : "boot_a"); + if (active_entry == nullptr || inactive_entry == nullptr) { + _hidl_cb({false, "failed to get entries for boot partitions"}); + return Void(); + } + + ALOGV("slot active attributes %lx\n", active_entry->attr); + ALOGV("slot inactive attributes %lx\n", inactive_entry->attr); + + // update attributes for active and inactive + inactive_entry->attr &= ~AB_ATTR_ACTIVE; + active_entry->attr = AB_ATTR_ACTIVE | (AB_ATTR_MAX_PRIORITY << AB_ATTR_PRIORITY_SHIFT) | + (AB_ATTR_MAX_RETRY_COUNT << AB_ATTR_RETRY_COUNT_SHIFT); + } + + char boot_dev[PROPERTY_VALUE_MAX]; + property_get("ro.boot.bootdevice", boot_dev, ""); + if (boot_dev[0] == '\0') { + _hidl_cb({false, "invalid ro.boot.bootdevice prop"}); + return Void(); + } + + std::string boot_lun_path = + std::string("/sys/devices/platform/") + boot_dev + "/pixel/boot_lun_enabled"; + int fd = open(boot_lun_path.c_str(), O_RDWR); + if (fd < 0) { + // Try old path for kernels < 5.4 + // TODO: remove once kernel 4.19 support is deprecated + std::string boot_lun_path = + std::string("/sys/devices/platform/") + boot_dev + "/attributes/boot_lun_enabled"; + fd = open(boot_lun_path.c_str(), O_RDWR); + if (fd < 0) { + _hidl_cb({false, "failed to open ufs attr boot_lun_enabled"}); + return Void(); + } + } + + // + // bBootLunEn + // 0x1 => Boot LU A = enabled, Boot LU B = disable + // 0x2 => Boot LU A = disable, Boot LU B = enabled + // + int ret = android::base::WriteStringToFd(slot == 0 ? "1" : "2", fd); + close(fd); + if (ret < 0) { + _hidl_cb({false, "faied to write boot_lun_enabled attribute"}); + return Void(); + } + + _hidl_cb({true, ""}); + return Void(); +} + +Return BootControl::setSlotAsUnbootable(uint32_t slot, setSlotAsUnbootable_cb _hidl_cb) { + if (slot >= 2) { + _hidl_cb({false, "Invalid slot"}); + return Void(); + } + + if (isDevInfoValid()) { + auto &slot_data = devinfo.ab_data.slots[slot]; + slot_data.unbootable = 1; + if (!DevInfoSync()) { + _hidl_cb({false, "Could not update DevInfo data"}); + return Void(); + } + } else { + std::string dev_path = getDevPath(slot); + if (dev_path.empty()) { + _hidl_cb({false, "Could not get device path for slot"}); + return Void(); + } + + GptUtils gpt(dev_path); + gpt.Load(); + + gpt_entry *e = gpt.GetPartitionEntry(slot ? "boot_b" : "boot_a"); + e->attr |= AB_ATTR_UNBOOTABLE; + + gpt.Sync(); + } + + _hidl_cb({true, ""}); + return Void(); +} + +Return<::android::hardware::boot::V1_0::BoolResult> BootControl::isSlotBootable(uint32_t slot) { + if (getNumberSlots() == 0) + return BoolResult::FALSE; + if (slot >= getNumberSlots()) + return BoolResult::INVALID_SLOT; + + bool unbootable; + if (isDevInfoValid()) { + auto &slot_data = devinfo.ab_data.slots[slot]; + unbootable = !!slot_data.unbootable; + } else { + unbootable = isSlotFlagSet(slot, AB_ATTR_UNBOOTABLE); + } + + return unbootable ? BoolResult::FALSE : BoolResult::TRUE; +} + +Return<::android::hardware::boot::V1_0::BoolResult> BootControl::isSlotMarkedSuccessful( + uint32_t slot) { + if (getNumberSlots() == 0) { + // just return true so that we don't we another call trying to mark it as successful + // when there is no slots + return BoolResult::TRUE; + } + if (slot >= getNumberSlots()) + return BoolResult::INVALID_SLOT; + + bool successful; + if (isDevInfoValid()) { + auto &slot_data = devinfo.ab_data.slots[slot]; + successful = !!slot_data.successful; + } else { + successful = isSlotFlagSet(slot, AB_ATTR_SUCCESSFUL); + } + + return successful ? BoolResult::TRUE : BoolResult::FALSE; +} + +Return BootControl::getSuffix(uint32_t slot, getSuffix_cb _hidl_cb) { + _hidl_cb(slot == 0 ? "_a" : slot == 1 ? "_b" : ""); + return Void(); +} + +// Methods from ::android::hardware::boot::V1_1::IBootControl follow. +bool BootControl::Init() { + return InitMiscVirtualAbMessageIfNeeded(); +} + +Return BootControl::setSnapshotMergeStatus( + ::android::hardware::boot::V1_1::MergeStatus status) { + return SetMiscVirtualAbMergeStatus(getCurrentSlot(), status); +} + +Return<::android::hardware::boot::V1_1::MergeStatus> BootControl::getSnapshotMergeStatus() { + MergeStatus status; + if (!GetMiscVirtualAbMergeStatus(getCurrentSlot(), &status)) { + return MergeStatus::UNKNOWN; + } + return status; +} + +// Methods from ::android::hardware::boot::V1_2::IBootControl follow. +Return BootControl::getActiveBootSlot() { + if (getNumberSlots() == 0) + return 0; + + if (isDevInfoValid()) + return devinfo.ab_data.slots[1].active ? 1 : 0; + return isSlotFlagSet(1, AB_ATTR_ACTIVE) ? 1 : 0; +} + +// Methods from ::android::hidl::base::V1_0::IBase follow. + +IBootControl *HIDL_FETCH_IBootControl(const char * /* name */) { + auto module = new BootControl(); + + module->Init(); + + return module; +} + +} // namespace implementation +} // namespace V1_2 +} // namespace boot +} // namespace hardware +} // namespace android diff --git a/interfaces/boot/1.2/BootControl.h b/interfaces/boot/1.2/BootControl.h new file mode 100644 index 00000000..17b5f0fb --- /dev/null +++ b/interfaces/boot/1.2/BootControl.h @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#include +#include +#include + +namespace android { +namespace hardware { +namespace boot { +namespace V1_2 { +namespace implementation { + +using ::android::sp; +using ::android::hardware::hidl_array; +using ::android::hardware::hidl_memory; +using ::android::hardware::hidl_string; +using ::android::hardware::hidl_vec; +using ::android::hardware::Return; +using ::android::hardware::Void; + +struct BootControl : public IBootControl { + bool Init(); + + // Methods from ::android::hardware::boot::V1_0::IBootControl follow. + Return getNumberSlots() override; + Return getCurrentSlot() override; + Return markBootSuccessful(markBootSuccessful_cb _hidl_cb) override; + Return setActiveBootSlot(uint32_t slot, setActiveBootSlot_cb _hidl_cb) override; + Return setSlotAsUnbootable(uint32_t slot, setSlotAsUnbootable_cb _hidl_cb) override; + Return<::android::hardware::boot::V1_0::BoolResult> isSlotBootable(uint32_t slot) override; + Return<::android::hardware::boot::V1_0::BoolResult> isSlotMarkedSuccessful( + uint32_t slot) override; + Return getSuffix(uint32_t slot, getSuffix_cb _hidl_cb) override; + + // Methods from ::android::hardware::boot::V1_1::IBootControl follow. + Return setSnapshotMergeStatus( + ::android::hardware::boot::V1_1::MergeStatus status) override; + Return<::android::hardware::boot::V1_1::MergeStatus> getSnapshotMergeStatus() override; + + // Methods from ::android::hardware::boot::V1_2::IBootControl follow. + Return getActiveBootSlot() override; + + // Methods from ::android::hidl::base::V1_0::IBase follow. +}; + +// FIXME: most likely delete, this is only for passthrough implementations +extern "C" IBootControl *HIDL_FETCH_IBootControl(const char *name); + +} // namespace implementation +} // namespace V1_2 +} // namespace boot +} // namespace hardware +} // namespace android diff --git a/interfaces/boot/1.2/DevInfo.h b/interfaces/boot/1.2/DevInfo.h new file mode 100644 index 00000000..a09a83a2 --- /dev/null +++ b/interfaces/boot/1.2/DevInfo.h @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2021 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +namespace android { +namespace hardware { +namespace boot { +namespace V1_2 { +namespace implementation { + +// +// definitions taken from ABL code +// + +constexpr uint32_t DEVINFO_MAGIC = 0x49564544; +constexpr size_t DEVINFO_AB_SLOT_COUNT = 2; + +struct devinfo_ab_slot_data_t { + uint8_t retry_count; + uint8_t unbootable : 1; + uint8_t successful : 1; + uint8_t active : 1; + uint8_t fastboot_ok : 1; + uint8_t : 4; + uint8_t unused[2]; +} __attribute__((packed)); + +typedef struct { + devinfo_ab_slot_data_t slots[DEVINFO_AB_SLOT_COUNT]; +} __attribute__((packed)) devinfo_ab_data_t; + +struct devinfo_t { + uint32_t magic; + uint16_t ver_major; + uint16_t ver_minor; + uint8_t unused[40]; + devinfo_ab_data_t ab_data; + uint8_t unused1[72]; // use remaining up to complete 128 bytes +} __attribute__((packed)); + +static_assert(sizeof(devinfo_t) == 128, "invalid devinfo struct size"); + +} // namespace implementation +} // namespace V1_2 +} // namespace boot +} // namespace hardware +} // namespace android diff --git a/interfaces/boot/1.2/GptUtils.cpp b/interfaces/boot/1.2/GptUtils.cpp new file mode 100644 index 00000000..25088e79 --- /dev/null +++ b/interfaces/boot/1.2/GptUtils.cpp @@ -0,0 +1,193 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define LOG_TAG "bootcontrolhal" + +#include "GptUtils.h" + +#include +#include +#include +#include +#include + +namespace android { +namespace hardware { +namespace boot { +namespace V1_2 { +namespace implementation { + +namespace { + +static int ValidateGptHeader(gpt_header *gpt) { + if (gpt->signature != GPT_SIGNATURE) { + ALOGE("invalid gpt signature 0x%lx\n", gpt->signature); + return -1; + } + + if (gpt->header_size != sizeof(gpt_header)) { + ALOGE("invalid gpt header size %u\n", gpt->header_size); + return -1; + } + + if (gpt->entry_size != sizeof(gpt_entry)) { + ALOGE("invalid gpt entry size %u\n", gpt->entry_size); + return -1; + } + + return 0; +} + +} // namespace + +GptUtils::GptUtils(const std::string dev_path) : dev_path(dev_path), fd(0) {} + +int GptUtils::Load(void) { + fd = open(dev_path.c_str(), O_RDWR); + if (fd < 0) { + ALOGE("failed to open block dev %s, %d\n", dev_path.c_str(), errno); + return -1; + } + + int ret = ioctl(fd, BLKSSZGET, &block_size); + if (ret < 0) { + ALOGE("failed to get block size %d\n", errno); + return -1; + } + + // read primary header + lseek64(fd, block_size, SEEK_SET); + ret = read(fd, &gpt_primary, sizeof gpt_primary); + if (ret < 0) { + ALOGE("failed to read gpt primary header %d\n", errno); + return -1; + } + + if (ValidateGptHeader(&gpt_primary)) { + ALOGE("error validating gpt header\n"); + return -1; + } + + // read partition entries + entry_array.resize(gpt_primary.entry_count); + uint32_t entries_size = gpt_primary.entry_size * gpt_primary.entry_count; + lseek64(fd, block_size * gpt_primary.start_lba, SEEK_SET); + ret = read(fd, entry_array.data(), entries_size); + if (ret < 0) { + ALOGE("failed to read gpt partition entries %d\n", errno); + return -1; + } + + // read gpt back header + lseek64(fd, block_size * gpt_primary.backup_lba, SEEK_SET); + ret = read(fd, &gpt_backup, sizeof gpt_backup); + if (ret < 0) { + ALOGE("failed to read gpt backup header %d\n", errno); + return -1; + } + + if (ValidateGptHeader(&gpt_backup)) { + ALOGW("error validating gpt backup\n"); // just warn about it, not fail + } + + // Create map + auto get_name = [](const uint16_t *efi_name) { + char name[37] = {}; + for (int i = 0; efi_name[i] && i < sizeof name - 1; ++i) name[i] = efi_name[i]; + return std::string(name); + }; + + for (auto const &e : entry_array) { + if (e.name[0] == 0) + break; // stop at the first partition with no name + std::string s = get_name(e.name); + entries[s] = const_cast(&e); + } + + return 0; +} + +gpt_entry *GptUtils::GetPartitionEntry(std::string name) { + return entries.find(name) != entries.end() ? entries[name] : nullptr; +} + +int GptUtils::Sync(void) { + if (!fd) + return -1; + + // calculate crc and check if we need to update gpt + gpt_primary.entries_crc32 = crc32(0, reinterpret_cast(entry_array.data()), + entry_array.size() * sizeof(gpt_entry)); + + // save old crc + uint32_t crc = gpt_primary.crc32; + gpt_primary.crc32 = 0; + + gpt_primary.crc32 = crc32(0, reinterpret_cast(&gpt_primary), sizeof gpt_primary); + if (crc == gpt_primary.crc32) + return 0; // nothing to do (no changes) + + ALOGI("updating GPT\n"); + + lseek64(fd, block_size * gpt_primary.current_lba, SEEK_SET); + int ret = write(fd, &gpt_primary, sizeof gpt_primary); + if (ret < 0) { + ALOGE("failed to write gpt primary header %d\n", errno); + return -1; + } + + lseek64(fd, block_size * gpt_primary.start_lba, SEEK_SET); + ret = write(fd, entry_array.data(), entry_array.size() * sizeof(gpt_entry)); + if (ret < 0) { + ALOGE("failed to write gpt partition entries %d\n", errno); + return -1; + } + + // update GPT backup entries and backup + lseek64(fd, block_size * gpt_backup.start_lba, SEEK_SET); + ret = write(fd, entry_array.data(), entry_array.size() * sizeof(gpt_entry)); + if (ret < 0) { + ALOGE("failed to write gpt backup partition entries %d\n", errno); + return -1; + } + + gpt_backup.entries_crc32 = gpt_primary.entries_crc32; + gpt_backup.crc32 = 0; + gpt_backup.crc32 = crc32(0, reinterpret_cast(&gpt_backup), sizeof gpt_backup); + lseek64(fd, block_size * gpt_primary.backup_lba, SEEK_SET); + ret = write(fd, &gpt_backup, sizeof gpt_backup); + if (ret < 0) { + ALOGE("failed to write gpt backup header %d\n", errno); + return -1; + } + + fsync(fd); + + return 0; +} + +GptUtils::~GptUtils() { + if (fd) { + Sync(); + close(fd); + } +} + +} // namespace implementation +} // namespace V1_2 +} // namespace boot +} // namespace hardware +} // namespace android diff --git a/interfaces/boot/1.2/GptUtils.h b/interfaces/boot/1.2/GptUtils.h new file mode 100644 index 00000000..a2bed334 --- /dev/null +++ b/interfaces/boot/1.2/GptUtils.h @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#include +#include +#include + +namespace android { +namespace hardware { +namespace boot { +namespace V1_2 { +namespace implementation { + +#define GPT_SIGNATURE 0x5452415020494645UL + +typedef struct { + uint8_t type_guid[16]; + uint8_t guid[16]; + uint64_t first_lba; + uint64_t last_lba; + uint64_t attr; + uint16_t name[36]; +} __attribute__((packed)) gpt_entry; + +typedef struct { + uint64_t signature; + uint32_t revision; + uint32_t header_size; + uint32_t crc32; + uint32_t reserved; + uint64_t current_lba; + uint64_t backup_lba; + uint64_t first_usable_lba; + uint64_t last_usable_lba; + uint8_t disk_guid[16]; + uint64_t start_lba; + uint32_t entry_count; + uint32_t entry_size; + uint32_t entries_crc32; +} __attribute__((packed)) gpt_header; + +class GptUtils { + public: + GptUtils(const std::string dev_path); + int Load(void); + gpt_entry *GetPartitionEntry(std::string name); + int Sync(void); + ~GptUtils(); + + private: + std::string dev_path; + int fd; + uint32_t block_size; + gpt_header gpt_primary; + gpt_header gpt_backup; + std::vector entry_array; + std::map entries; +}; + +} // namespace implementation +} // namespace V1_2 +} // namespace boot +} // namespace hardware +} // namespace android diff --git a/interfaces/boot/1.2/android.hardware.boot@1.2-service-gs201.rc b/interfaces/boot/1.2/android.hardware.boot@1.2-service-gs201.rc new file mode 100644 index 00000000..3457b5f0 --- /dev/null +++ b/interfaces/boot/1.2/android.hardware.boot@1.2-service-gs201.rc @@ -0,0 +1,7 @@ +service vendor.boot-hal-1-2 /vendor/bin/hw/android.hardware.boot@1.2-service-gs201 + interface android.hardware.boot@1.0::IBootControl default + interface android.hardware.boot@1.1::IBootControl default + interface android.hardware.boot@1.2::IBootControl default + class early_hal + user root + group root diff --git a/interfaces/boot/1.2/service.cpp b/interfaces/boot/1.2/service.cpp new file mode 100644 index 00000000..f07682e9 --- /dev/null +++ b/interfaces/boot/1.2/service.cpp @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define LOG_TAG "android.hardware.boot@1.2-service" + +#include +#include +#include +#include + +#include "BootControl.h" + +using ::android::status_t; + +using ::android::hardware::boot::V1_2::IBootControl; + +using ::android::hardware::boot::V1_2::implementation::BootControl; +// using ::android::hardware::boot::implementation::BootControl; + +int main(int /* argc */, char * /* argv */[]) { + // This function must be called before you join to ensure the proper + // number of threads are created. The threadpool will never exceed + // size one because of this call. + ::android::hardware::configureRpcThreadpool(1 /*threads*/, true /*willJoin*/); + + ::android::sp bootctrl = new BootControl(); + const status_t status = bootctrl->registerAsService(); + if (status != ::android::OK) { + return 1; // or handle error + } + + // Adds this thread to the threadpool, resulting in one total + // thread in the threadpool. We could also do other things, but + // would have to specify 'false' to willJoin in configureRpcThreadpool. + ::android::hardware::joinRpcThreadpool(); + return 1; // joinRpcThreadpool should never return +} diff --git a/keymaster/Android.bp b/keymaster/Android.bp new file mode 100644 index 00000000..c9620ca8 --- /dev/null +++ b/keymaster/Android.bp @@ -0,0 +1,40 @@ +// +// Copyright (C) 2018 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package { + // See: http://go/android-license-faq + // A large-scale-change added 'default_applicable_licenses' to import + // all of the 'license_kinds' from "//device/google/gs201:device_google_gs201_license" + // to get the below license kinds: + // SPDX-license-identifier-Apache-2.0 + default_applicable_licenses: [ + "//device/google/gs201:device_google_gs201_license", + ], +} + +cc_binary { + name: "wait_for_strongbox", + init_rc: ["wait_for_strongbox.rc"], + relative_install_path: "hw", + srcs: [ "wait_for_strongbox.cpp" ], + cflags: [ "-Werror", "-Wall" ], + shared_libs: [ + "android.hardware.keymaster@4.0", + "libbase", + "libkeymaster4_1support", + "libutils", + ], + proprietary: true, +} diff --git a/keymaster/wait_for_strongbox.cpp b/keymaster/wait_for_strongbox.cpp new file mode 100644 index 00000000..c0f4094b --- /dev/null +++ b/keymaster/wait_for_strongbox.cpp @@ -0,0 +1,59 @@ +/* + ** Copyright 2018, The Android Open Source Project + ** + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** + ** http://www.apache.org/licenses/LICENSE-2.0 + ** + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + */ + +#include + +#define LOG_TAG "wait_for_strongbox" +#include + +#include + +using android::hardware::keymaster::V4_1::SecurityLevel; +using android::hardware::keymaster::V4_1::support::Keymaster; + +useconds_t kWaitTimeMicroseconds = 1 * 1000; // 1 milliseconds + +int main() { + for (unsigned cycleCount = 0; /* Forever */; ++cycleCount) { + auto keymasters = Keymaster::enumerateAvailableDevices(); + + bool foundStrongBox = false; + bool foundTee = false; + for (auto &dev : keymasters) { + SecurityLevel securityLevel = dev->halVersion().securityLevel; + uint8_t majorVersion = dev->halVersion().majorVersion; + if (securityLevel == SecurityLevel::STRONGBOX && majorVersion == 4) { + foundStrongBox = true; + } + if (securityLevel == SecurityLevel::TRUSTED_ENVIRONMENT && majorVersion == 4) { + foundTee = true; + } + } + + if (foundTee && foundStrongBox) { + return 0; + } + if (cycleCount % 10 == 1) { + if (!foundStrongBox) { + LOG(WARNING) << "Still waiting for StrongBox Keymaster"; + } + if (!foundTee) { + LOG(WARNING) << "Still waiting for TEE Keymaster"; + } + } + usleep(kWaitTimeMicroseconds); + } +} diff --git a/keymaster/wait_for_strongbox.rc b/keymaster/wait_for_strongbox.rc new file mode 100644 index 00000000..c02fc465 --- /dev/null +++ b/keymaster/wait_for_strongbox.rc @@ -0,0 +1,9 @@ +# Wait for both Trusty and Strongbox HALs to be up +service wait_for_strongbox /vendor/bin/hw/wait_for_strongbox + user root + group root system + priority -20 + ioprio rt 0 + +on late-fs + exec_start wait_for_strongbox diff --git a/manifest-gralloc3.xml b/manifest-gralloc3.xml new file mode 100644 index 00000000..97afb6b6 --- /dev/null +++ b/manifest-gralloc3.xml @@ -0,0 +1,163 @@ + + + android.hardware.audio + hwbinder + 7.1 + + IDevicesFactory + default + + + + android.hardware.audio.effect + hwbinder + 7.0 + + IEffectsFactory + default + + + + android.hardware.soundtrigger + hwbinder + 2.3 + + ISoundTriggerHw + default + + + + android.hardware.graphics.allocator + hwbinder + 2.0 + + IAllocator + default + + + + android.hardware.graphics.mapper + passthrough + 2.0 + + IMapper + default + + + + android.hardware.graphics.composer + hwbinder + 2.4 + + IComposer + default + + + + android.hardware.memtrack + hwbinder + 1.0 + + IMemtrack + default + + + + android.hardware.drm + hwbinder + 1.0 + + ICryptoFactory + default + + + IDrmFactory + default + + @1.3::ICryptoFactory/clearkey + @1.3::IDrmFactory/clearkey + @1.3::ICryptoFactory/widevine + @1.3::IDrmFactory/widevine + + + android.hardware.dumpstate + hwbinder + 1.0 + + IDumpstateDevice + default + + + + android.hardware.bluetooth.audio + hwbinder + 2.1 + + IBluetoothAudioProvidersFactory + default + + + + android.hardware.boot + hwbinder + @1.2::IBootControl/default + + + android.hardware.sensors + hwbinder + 1.0 + + ISensors + default + + + + android.hardware.neuralnetworks + hwbinder + 1.3 + + IDevice + google-armnn + + @1.3::IDevice/google-armnn + + + android.hardware.neuralnetworks + hwbinder + @1.3::IDevice/google-edgetpu + + + com.google.input + + ITouchContextService + default + + + + vendor.google.google_battery + hwbinder + 1.2 + + IGoogleBattery + default + + + + vendor.google.whitechapel.audio.audioext + hwbinder + 3.0 + + IAudioExt + default + + + + vendor.google.audiometricext + hwbinder + 1.0 + + IAudioMetricExt + default + + + diff --git a/manifest.xml b/manifest.xml new file mode 100644 index 00000000..c1efc47d --- /dev/null +++ b/manifest.xml @@ -0,0 +1,105 @@ + + + android.hardware.audio + hwbinder + 7.1 + + IDevicesFactory + default + + + + android.hardware.audio.effect + hwbinder + 7.0 + + IEffectsFactory + default + + + + android.hardware.soundtrigger + hwbinder + 2.3 + + ISoundTriggerHw + default + + + + android.hardware.graphics.allocator + hwbinder + 4.0 + + IAllocator + default + + + + android.hardware.graphics.mapper + passthrough + 4.0 + + IMapper + default + + + + android.hardware.dumpstate + hwbinder + 1.1 + + IDumpstateDevice + default + + + + android.hardware.boot + hwbinder + @1.2::IBootControl/default + + + android.hardware.neuralnetworks + hwbinder + 1.3 + + IDevice + google-armnn + + @1.3::IDevice/google-armnn + + + com.google.input + + ITouchContextService + default + + + + vendor.google.google_battery + hwbinder + 1.2 + + IGoogleBattery + default + + + + vendor.google.whitechapel.audio.audioext + hwbinder + 3.0 + + IAudioExt + default + + + + vendor.google.audiometricext + hwbinder + 1.0 + + IAudioMetricExt + default + + + diff --git a/manifest_media.xml b/manifest_media.xml new file mode 100644 index 00000000..3ed9e247 --- /dev/null +++ b/manifest_media.xml @@ -0,0 +1,12 @@ + + + android.hardware.media.c2 + hwbinder + 1.0 + + IComponentStore + default + default1 + + + diff --git a/manifest_media_aosp.xml b/manifest_media_aosp.xml new file mode 100644 index 00000000..3bc347c9 --- /dev/null +++ b/manifest_media_aosp.xml @@ -0,0 +1,11 @@ + + + android.hardware.media.c2 + hwbinder + 1.0 + + IComponentStore + default + + + diff --git a/media_codecs.xml b/media_codecs.xml new file mode 100644 index 00000000..87a42ef5 --- /dev/null +++ b/media_codecs.xml @@ -0,0 +1,82 @@ + + + + + + + + diff --git a/media_codecs_aosp_c2.xml b/media_codecs_aosp_c2.xml new file mode 100644 index 00000000..62b47070 --- /dev/null +++ b/media_codecs_aosp_c2.xml @@ -0,0 +1,228 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/media_codecs_bo_c2.xml b/media_codecs_bo_c2.xml new file mode 100644 index 00000000..ad4ad7df --- /dev/null +++ b/media_codecs_bo_c2.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/media_codecs_performance.xml b/media_codecs_performance.xml new file mode 100644 index 00000000..9cb42101 --- /dev/null +++ b/media_codecs_performance.xml @@ -0,0 +1,18 @@ + + + + + diff --git a/media_codecs_performance_c2.xml b/media_codecs_performance_c2.xml new file mode 100644 index 00000000..2c6663e9 --- /dev/null +++ b/media_codecs_performance_c2.xml @@ -0,0 +1,279 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/media_profiles.xml b/media_profiles.xml new file mode 100644 index 00000000..cc6e3f4e --- /dev/null +++ b/media_profiles.xml @@ -0,0 +1,895 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modem/userdebug.mk b/modem/userdebug.mk new file mode 100644 index 00000000..ba4c0e9d --- /dev/null +++ b/modem/userdebug.mk @@ -0,0 +1 @@ +PRODUCT_PACKAGES += vcd diff --git a/overlay-factory/frameworks/base/packages/SettingsProvider/res/values/defaults.xml b/overlay-factory/frameworks/base/packages/SettingsProvider/res/values/defaults.xml new file mode 100644 index 00000000..3f3258f5 --- /dev/null +++ b/overlay-factory/frameworks/base/packages/SettingsProvider/res/values/defaults.xml @@ -0,0 +1,23 @@ + + + + + false + + diff --git a/overlay-factory/vendor/google/apps/PixelLogger/res/values/arrays.xml b/overlay-factory/vendor/google/apps/PixelLogger/res/values/arrays.xml new file mode 100644 index 00000000..20a83653 --- /dev/null +++ b/overlay-factory/vendor/google/apps/PixelLogger/res/values/arrays.xml @@ -0,0 +1,7 @@ + + + shannondm + cnss_diag + brcm_gps + + diff --git a/overlay-factory/vendor/google/apps/PixelLogger/res/values/config.xml b/overlay-factory/vendor/google/apps/PixelLogger/res/values/config.xml new file mode 100644 index 00000000..ee2e1e81 --- /dev/null +++ b/overlay-factory/vendor/google/apps/PixelLogger/res/values/config.xml @@ -0,0 +1,10 @@ + + + shannondm + Built-in Mask #1 + + + cnss_diag.conf + + true + diff --git a/overlay-factory/vendor/google/apps/PixelLogger/res/values/configmessages.xml b/overlay-factory/vendor/google/apps/PixelLogger/res/values/configmessages.xml new file mode 100644 index 00000000..578cfc57 --- /dev/null +++ b/overlay-factory/vendor/google/apps/PixelLogger/res/values/configmessages.xml @@ -0,0 +1,19 @@ + + + + + + + This will collect audio from your voice calls. Would you like to proceed? + + + This may collect audio from your voice calls. Would you like to proceed? + Pixel_Default.nprf + Built-in Mask #0 + Built-in Mask #1 + Built-in Mask #2 + Built-in Mask #3 + + Privacy Warning + You are loading a user defined logging config. This may collect audio from your voice calls. Would you like to proceed? + diff --git a/overlay-vendor/vendor/google/apps/ModemService/res/values/config.xml b/overlay-vendor/vendor/google/apps/ModemService/res/values/config.xml new file mode 100644 index 00000000..7266f917 --- /dev/null +++ b/overlay-vendor/vendor/google/apps/ModemService/res/values/config.xml @@ -0,0 +1,21 @@ + + + + false + 1 + 0 + + + 0 + 3 + + + false + + + + 3 + 4 + diff --git a/overlay-vendor/vendor/google/apps/PixelLogger/res/values/arrays.xml b/overlay-vendor/vendor/google/apps/PixelLogger/res/values/arrays.xml new file mode 100644 index 00000000..79f0587f --- /dev/null +++ b/overlay-vendor/vendor/google/apps/PixelLogger/res/values/arrays.xml @@ -0,0 +1,6 @@ + + + qxdm + cnss_diag + + diff --git a/overlay-vendor/vendor/google/apps/PixelLogger/res/values/config.xml b/overlay-vendor/vendor/google/apps/PixelLogger/res/values/config.xml new file mode 100644 index 00000000..80c0abe6 --- /dev/null +++ b/overlay-vendor/vendor/google/apps/PixelLogger/res/values/config.xml @@ -0,0 +1,5 @@ + + + + cnss_diag.conf + diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable-ldrtl/deferred_setup_closing_img.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable-ldrtl/deferred_setup_closing_img.xml new file mode 100644 index 00000000..983fc647 --- /dev/null +++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable-ldrtl/deferred_setup_closing_img.xml @@ -0,0 +1,119 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable-nodpi/placeholder.png b/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable-nodpi/placeholder.png new file mode 100644 index 00000000..ec4f14d1 Binary files /dev/null and b/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable-nodpi/placeholder.png differ diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable/deferred_setup_closing_img.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable/deferred_setup_closing_img.xml new file mode 100644 index 00000000..284de8ae --- /dev/null +++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable/deferred_setup_closing_img.xml @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable/deferred_setup_welcome_img.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable/deferred_setup_welcome_img.xml new file mode 100644 index 00000000..c2b0ba13 --- /dev/null +++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable/deferred_setup_welcome_img.xml @@ -0,0 +1,167 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable/ic_deferred_setup_icon.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable/ic_deferred_setup_icon.xml new file mode 100644 index 00000000..990ed484 --- /dev/null +++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable/ic_deferred_setup_icon.xml @@ -0,0 +1,35 @@ + + + + + + + + + diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable/ic_language.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable/ic_language.xml new file mode 100644 index 00000000..6cc9a729 --- /dev/null +++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable/ic_language.xml @@ -0,0 +1,26 @@ + + + + + + diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable/ic_logo_googleg.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable/ic_logo_googleg.xml new file mode 100644 index 00000000..36454fa7 --- /dev/null +++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable/ic_logo_googleg.xml @@ -0,0 +1,35 @@ + + + + + + + + + diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable/ic_network_signal.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable/ic_network_signal.xml new file mode 100644 index 00000000..73bbac11 --- /dev/null +++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/drawable/ic_network_signal.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/layout/esim_intro_activity.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/layout/esim_intro_activity.xml new file mode 100644 index 00000000..f35062b3 --- /dev/null +++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/layout/esim_intro_activity.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/layout/items_esim.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/layout/items_esim.xml new file mode 100644 index 00000000..1d60d9d1 --- /dev/null +++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/layout/items_esim.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/layout/sim_missing_activity.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/layout/sim_missing_activity.xml new file mode 100644 index 00000000..18d74477 --- /dev/null +++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/layout/sim_missing_activity.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/overlay-vendor/vendor/google/apps/SetupWizard/res/layout/welcome_activity.xml b/overlay-vendor/vendor/google/apps/SetupWizard/res/layout/welcome_activity.xml new file mode 100644 index 00000000..060b38f8 --- /dev/null +++ b/overlay-vendor/vendor/google/apps/SetupWizard/res/layout/welcome_activity.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +