diff options
62 files changed, 539 insertions, 64 deletions
diff --git a/audio/common/all-versions/default/service/Android.bp b/audio/common/all-versions/default/service/Android.bp index 9890be2954..99f745c17b 100644 --- a/audio/common/all-versions/default/service/Android.bp +++ b/audio/common/all-versions/default/service/Android.bp @@ -40,7 +40,40 @@ cc_binary { init_rc: ["android.hardware.audio.service.rc"], relative_install_path: "hw", vendor: true, + srcs: ["service.cpp"], + + cflags: [ + "-Wall", + "-Wextra", + "-Werror", + ], + shared_libs: [ + "libcutils", + "libbinder", + "libbinder_ndk", + "libhwbinder", + "libhidlbase", + "liblog", + "libutils", + "libhardware", + ], + arch : { + arm : { + cflags: [ + "-DARCH_ARM_32", + ] + } + }, +} + +cc_binary { + name: "android.hardware.audio.service_64", + + init_rc: ["android.hardware.audio.service_64.rc"], + relative_install_path: "hw", + vendor: true, + compile_multilib: "64", srcs: ["service.cpp"], cflags: [ @@ -53,6 +86,7 @@ cc_binary { "libcutils", "libbinder", "libbinder_ndk", + "libhwbinder", "libhidlbase", "liblog", "libutils", @@ -69,3 +103,7 @@ phony { name: "android.hardware.audio@2.0-service", required: ["android.hardware.audio.service"], } +phony { + name: "android.hardware.audio@2.0-service_64", + required: ["android.hardware.audio.service_64"], +} diff --git a/audio/common/all-versions/default/service/android.hardware.audio.service_64.rc b/audio/common/all-versions/default/service/android.hardware.audio.service_64.rc new file mode 100644 index 0000000000..5db2fafe31 --- /dev/null +++ b/audio/common/all-versions/default/service/android.hardware.audio.service_64.rc @@ -0,0 +1,9 @@ +service vendor.audio-hal /vendor/bin/hw/android.hardware.audio.service_64 + class hal + user audioserver + # media gid needed for /dev/fm (radio) and for /data/misc/media (tee) + group audio camera drmrpc inet media mediadrm net_bt net_bt_admin net_bw_acct wakelock context_hub + capabilities BLOCK_SUSPEND + ioprio rt 4 + task_profiles ProcessCapacityHigh HighPerformance + onrestart restart audioserver diff --git a/audio/common/all-versions/default/service/service.cpp b/audio/common/all-versions/default/service/service.cpp index fbf616563d..bd677e29ce 100644 --- a/audio/common/all-versions/default/service/service.cpp +++ b/audio/common/all-versions/default/service/service.cpp @@ -33,6 +33,18 @@ using android::OK; using InterfacesList = std::vector<std::string>; +#ifdef ARCH_ARM_32 +//default h/w binder memsize is 1 MB +#define DEFAULT_HW_BINDER_MEM_SIZE_KB 1024 + +size_t getHWBinderMmapSize(){ + int32_t value = DEFAULT_HW_BINDER_MEM_SIZE_KB; + value = property_get_int32("persist.vendor.audio.hw.binder.size_kbyte", value); + ALOGD("Init hw binder with mem size = %d ", value); + return 1024 * value; +} +#endif + /** Try to register the provided factories in the provided order. * If any registers successfully, do not register any other and return true. * If all fail, return false. @@ -74,6 +86,9 @@ static bool registerExternalServiceImplementation(const std::string& libName, int main(int /* argc */, char* /* argv */ []) { signal(SIGPIPE, SIG_IGN); +#ifdef ARCH_ARM_32 + android::hardware::ProcessState::initWithMmapSize(getHWBinderMmapSize()); +#endif ::android::ProcessState::initWithDriver("/dev/vndbinder"); // start a threadpool for vndbinder interactions diff --git a/boot/1.0/default/Android.bp b/boot/1.0/default/Android.bp index b7d2ec8971..10634e8535 100644 --- a/boot/1.0/default/Android.bp +++ b/boot/1.0/default/Android.bp @@ -39,6 +39,13 @@ cc_binary { "libhidlbase", "libutils", "android.hardware.boot@1.0", + "libhwbinder", ], - + arch: { + arm: { + cflags: [ + "-DARCH_ARM_32" + ], + }, + }, } diff --git a/boot/1.0/default/service.cpp b/boot/1.0/default/service.cpp index f3996efe9c..2b50740f2a 100644 --- a/boot/1.0/default/service.cpp +++ b/boot/1.0/default/service.cpp @@ -17,10 +17,14 @@ #include <android/hardware/boot/1.0/IBootControl.h> #include <hidl/LegacySupport.h> +#include <hwbinder/ProcessState.h> using ::android::hardware::boot::V1_0::IBootControl; using android::hardware::defaultPassthroughServiceImplementation; int main (int /* argc */, char * /* argv */ []) { +#ifdef ARCH_ARM_32 + android::hardware::ProcessState::initWithMmapSize((size_t)8192); +#endif return defaultPassthroughServiceImplementation<IBootControl>(); } diff --git a/camera/common/1.0/default/Android.bp b/camera/common/1.0/default/Android.bp index 4a5ca83803..0927807b21 100644 --- a/camera/common/1.0/default/Android.bp +++ b/camera/common/1.0/default/Android.bp @@ -36,4 +36,5 @@ cc_library_static { ], include_dirs: ["system/media/private/camera/include"], export_include_dirs: ["include"], + sdclang: false, } diff --git a/camera/common/1.0/default/CameraModule.cpp b/camera/common/1.0/default/CameraModule.cpp index 16fb85cc64..188b4bed27 100644 --- a/camera/common/1.0/default/CameraModule.cpp +++ b/camera/common/1.0/default/CameraModule.cpp @@ -267,6 +267,22 @@ int CameraModule::init() { return res; } +int CameraModule::getCameraDeviceVersion(int cameraId, uint32_t* version) { + ATRACE_CALL(); + int ret; + if (getModuleApiVersion() >= CAMERA_MODULE_API_VERSION_2_5 && + mModule->get_camera_device_version != NULL) { + ret = mModule->get_camera_device_version(cameraId, version); + } else { + struct camera_info info; + ret = getCameraInfo(cameraId, &info); + if (ret == OK) { + *version = info.device_version; + } + } + return ret; +} + int CameraModule::getCameraInfo(int cameraId, struct camera_info *info) { ATRACE_CALL(); Mutex::Autolock lock(mCameraInfoLock); @@ -367,11 +383,9 @@ int CameraModule::getPhysicalCameraInfo(int physicalCameraId, camera_metadata_t int CameraModule::getDeviceVersion(int cameraId) { ssize_t index = mDeviceVersionMap.indexOfKey(cameraId); if (index == NAME_NOT_FOUND) { - int deviceVersion; + uint32_t deviceVersion; if (getModuleApiVersion() >= CAMERA_MODULE_API_VERSION_2_0) { - struct camera_info info; - getCameraInfo(cameraId, &info); - deviceVersion = info.device_version; + getCameraDeviceVersion(cameraId, &deviceVersion); } else { deviceVersion = CAMERA_DEVICE_API_VERSION_1_0; } diff --git a/camera/common/1.0/default/include/CameraModule.h b/camera/common/1.0/default/include/CameraModule.h index c89e934655..8195835406 100644 --- a/camera/common/1.0/default/include/CameraModule.h +++ b/camera/common/1.0/default/include/CameraModule.h @@ -49,6 +49,7 @@ public: // Returns OK on success, NO_INIT on failure int init(); + int getCameraDeviceVersion(int cameraId, uint32_t* version); int getCameraInfo(int cameraId, struct camera_info *info); int getDeviceVersion(int cameraId); int getNumberOfCameras(void); diff --git a/camera/device/1.0/default/Android.bp b/camera/device/1.0/default/Android.bp index 9ff6480d4b..f875d77f68 100644 --- a/camera/device/1.0/default/Android.bp +++ b/camera/device/1.0/default/Android.bp @@ -19,6 +19,7 @@ cc_library_shared { "libhidlmemory", "libutils", "android.hardware.camera.device@1.0", + "vendor.qti.hardware.camera.device@1.0", "android.hardware.camera.common@1.0", "android.hardware.graphics.allocator@2.0", "android.hardware.graphics.mapper@2.0", @@ -40,4 +41,9 @@ cc_library_shared { "media_plugin_headers", ], export_include_dirs: ["."], + sdclang: false, // See b/163842697 + // Since this platform module has been forked to depend on a vendor + // proprietary library, we exclude it from the vendor snapshot so that it + // will be built from source as part of the vendor build. + exclude_from_vendor_snapshot: true, } diff --git a/camera/device/1.0/default/CameraDevice.cpp b/camera/device/1.0/default/CameraDevice.cpp index 80733d1908..622660685f 100644 --- a/camera/device/1.0/default/CameraDevice.cpp +++ b/camera/device/1.0/default/CameraDevice.cpp @@ -433,30 +433,68 @@ void CameraDevice::sDataCb(int32_t msg_type, const camera_memory_t *data, unsign index, mem->mNumBufs); return; } - if (object->mDeviceCallback != nullptr) { - CameraFrameMetadata hidlMetadata; - if (metadata) { - hidlMetadata.faces.resize(metadata->number_of_faces); - for (size_t i = 0; i < hidlMetadata.faces.size(); i++) { - hidlMetadata.faces[i].score = metadata->faces[i].score; - hidlMetadata.faces[i].id = metadata->faces[i].id; - for (int k = 0; k < 4; k++) { - hidlMetadata.faces[i].rect[k] = metadata->faces[i].rect[k]; - } - for (int k = 0; k < 2; k++) { - hidlMetadata.faces[i].leftEye[k] = metadata->faces[i].left_eye[k]; - } - for (int k = 0; k < 2; k++) { - hidlMetadata.faces[i].rightEye[k] = metadata->faces[i].right_eye[k]; - } - for (int k = 0; k < 2; k++) { - hidlMetadata.faces[i].mouth[k] = metadata->faces[i].mouth[k]; - } - } - } - CameraHeapMemory* mem = static_cast<CameraHeapMemory *>(data->handle); - object->mDeviceCallback->dataCallback( - (DataCallbackMsg) msg_type, mem->handle.mId, index, hidlMetadata); + if(object->mQDeviceCallback != nullptr) { + vendor::qti::hardware::camera::device::V1_0::QCameraFrameMetadata hidlMetadata; + if (metadata) { + hidlMetadata.faces.resize(metadata->number_of_faces); + for (size_t i = 0; i < hidlMetadata.faces.size(); i++) { + hidlMetadata.faces[i].score = metadata->faces[i].score; + hidlMetadata.faces[i].id = metadata->faces[i].id; + for (int k = 0; k < 4; k++) { + hidlMetadata.faces[i].rect[k] = metadata->faces[i].rect[k]; + } + for (int k = 0; k < 2; k++) { + hidlMetadata.faces[i].leftEye[k] = metadata->faces[i].left_eye[k]; + } + for (int k = 0; k < 2; k++) { + hidlMetadata.faces[i].rightEye[k] = metadata->faces[i].right_eye[k]; + } + for (int k = 0; k < 2; k++) { + hidlMetadata.faces[i].mouth[k] = metadata->faces[i].mouth[k]; + } + hidlMetadata.faces[i].smile_degree = metadata->faces[i].smile_degree; + hidlMetadata.faces[i].smile_score = metadata->faces[i].smile_score; + hidlMetadata.faces[i].blink_detected = metadata->faces[i].blink_detected; + hidlMetadata.faces[i].face_recognised = metadata->faces[i].face_recognised; + hidlMetadata.faces[i].gaze_angle = metadata->faces[i].gaze_angle; + hidlMetadata.faces[i].updown_dir = metadata->faces[i].updown_dir; + hidlMetadata.faces[i].leftright_dir = metadata->faces[i].leftright_dir; + hidlMetadata.faces[i].roll_dir = metadata->faces[i].roll_dir; + hidlMetadata.faces[i].left_right_gaze = metadata->faces[i].left_right_gaze; + hidlMetadata.faces[i].top_bottom_gaze = metadata->faces[i].top_bottom_gaze; + hidlMetadata.faces[i].leye_blink = metadata->faces[i].leye_blink; + hidlMetadata.faces[i].reye_blink = metadata->faces[i].reye_blink; + } + } + CameraHeapMemory* mem = static_cast<CameraHeapMemory *>(data->handle); + object->mQDeviceCallback->QDataCallback( + (DataCallbackMsg) msg_type, mem->handle.mId, index, hidlMetadata); + } else { + if (object->mDeviceCallback != nullptr) { + CameraFrameMetadata hidlMetadata; + if (metadata) { + hidlMetadata.faces.resize(metadata->number_of_faces); + for (size_t i = 0; i < hidlMetadata.faces.size(); i++) { + hidlMetadata.faces[i].score = metadata->faces[i].score; + hidlMetadata.faces[i].id = metadata->faces[i].id; + for (int k = 0; k < 4; k++) { + hidlMetadata.faces[i].rect[k] = metadata->faces[i].rect[k]; + } + for (int k = 0; k < 2; k++) { + hidlMetadata.faces[i].leftEye[k] = metadata->faces[i].left_eye[k]; + } + for (int k = 0; k < 2; k++) { + hidlMetadata.faces[i].rightEye[k] = metadata->faces[i].right_eye[k]; + } + for (int k = 0; k < 2; k++) { + hidlMetadata.faces[i].mouth[k] = metadata->faces[i].mouth[k]; + } + } + } + CameraHeapMemory* mem = static_cast<CameraHeapMemory *>(data->handle); + object->mDeviceCallback->dataCallback( + (DataCallbackMsg) msg_type, mem->handle.mId, index, hidlMetadata); + } } } @@ -672,6 +710,11 @@ Return<Status> CameraDevice::open(const sp<ICameraDeviceCallback>& callback) { initHalPreviewWindow(); mDeviceCallback = callback; + mQDeviceCallback = + vendor::qti::hardware::camera::device::V1_0::IQCameraDeviceCallback::castFrom(callback); + if(mQDeviceCallback == nullptr) { + ALOGI("could not cast ICameraDeviceCallback to IQCameraDeviceCallback"); + } if (mDevice->ops->set_callbacks) { mDevice->ops->set_callbacks(mDevice, diff --git a/camera/device/1.0/default/CameraDevice_1_0.h b/camera/device/1.0/default/CameraDevice_1_0.h index 2c980f0a8f..e5a194edc5 100644 --- a/camera/device/1.0/default/CameraDevice_1_0.h +++ b/camera/device/1.0/default/CameraDevice_1_0.h @@ -24,6 +24,7 @@ #include "HandleImporter.h" #include <android/hardware/camera/device/1.0/ICameraDevice.h> +#include <vendor/qti/hardware/camera/device/1.0/IQCameraDeviceCallback.h> #include <android/hidl/allocator/1.0/IAllocator.h> #include <android/hidl/memory/1.0/IMemory.h> #include <hidl/MQDescriptor.h> @@ -44,6 +45,7 @@ using ::android::hardware::camera::common::V1_0::helper::HandleImporter; using ::android::hardware::camera::device::V1_0::CameraInfo; using ::android::hardware::camera::device::V1_0::CommandType; using ::android::hardware::camera::device::V1_0::ICameraDevice; +using ::vendor::qti::hardware::camera::device::V1_0::IQCameraDeviceCallback; using ::android::hardware::camera::device::V1_0::ICameraDeviceCallback; using ::android::hardware::camera::device::V1_0::ICameraDevicePreviewCallback; using ::android::hardware::camera::device::V1_0::MemoryId; @@ -164,6 +166,7 @@ private: const SortedVector<std::pair<std::string, std::string>>& mCameraDeviceNames; sp<ICameraDeviceCallback> mDeviceCallback = nullptr; + sp<IQCameraDeviceCallback> mQDeviceCallback = nullptr; mutable Mutex mMemoryMapLock; // gating access to mMemoryMap // must not hold mLock after this lock is acquired diff --git a/camera/device/3.2/default/Android.bp b/camera/device/3.2/default/Android.bp index a1962915ff..d7ad6ad740 100644 --- a/camera/device/3.2/default/Android.bp +++ b/camera/device/3.2/default/Android.bp @@ -38,4 +38,5 @@ cc_library_shared { export_shared_lib_headers: [ "libfmq", ], + sdclang: false, // See b/163842697 } diff --git a/camera/device/3.2/default/CameraDeviceSession.cpp b/camera/device/3.2/default/CameraDeviceSession.cpp index 769991c5fa..896c35843a 100644 --- a/camera/device/3.2/default/CameraDeviceSession.cpp +++ b/camera/device/3.2/default/CameraDeviceSession.cpp @@ -926,12 +926,12 @@ bool CameraDeviceSession::preProcessConfigurationLocked( mStreamMap[id].data_space); mCirculatingBuffers.emplace(stream.mId, CirculatingBuffers{}); } else { - // width/height/format must not change, but usage/rotation might need to change + // width/height must not change, but usage/rotation might need to change + // format might change and get updated with overrideFormat if (mStreamMap[id].stream_type != (int) requestedConfiguration.streams[i].streamType || mStreamMap[id].width != requestedConfiguration.streams[i].width || mStreamMap[id].height != requestedConfiguration.streams[i].height || - mStreamMap[id].format != (int) requestedConfiguration.streams[i].format || mStreamMap[id].data_space != mapToLegacyDataspace( static_cast<android_dataspace_t> ( requestedConfiguration.streams[i].dataSpace))) { diff --git a/camera/device/3.2/default/convert.cpp b/camera/device/3.2/default/convert.cpp index 06ad7e963c..628b7af912 100644 --- a/camera/device/3.2/default/convert.cpp +++ b/camera/device/3.2/default/convert.cpp @@ -66,6 +66,8 @@ void convertFromHidl(const Stream &src, Camera3Stream* dst) { dst->data_space = (android_dataspace_t) src.dataSpace; dst->rotation = (int) src.rotation; dst->usage = (uint32_t) src.usage; + dst->reserved[0] = NULL; + dst->reserved[1] = NULL; // Fields to be filled by HAL (max_buffers, priv) are initialized to 0 dst->max_buffers = 0; dst->priv = 0; @@ -88,6 +90,23 @@ void convertToHidl(const Camera3Stream* src, HalStream* dst) { ALOGW("%s: Stream type %d is not currently supported!", __FUNCTION__, src->stream_type); } + + HalStream* halStream = NULL; + if (src->reserved[0] != NULL) { + halStream = (HalStream*)(src->reserved[0]); + } else if (src->reserved[1] != NULL) { + halStream = (HalStream*)(src->reserved[1]); + } + + // Check if overrideFormat is set and honor it + if (halStream != NULL) { + dst->overrideFormat = (PixelFormat) halStream->overrideFormat; + if (src->stream_type == CAMERA3_STREAM_OUTPUT) { + dst->producerUsage = (BufferUsageFlags)halStream->producerUsage; + } else if (src->stream_type == CAMERA3_STREAM_INPUT) { + dst->consumerUsage = (BufferUsageFlags)halStream->consumerUsage; + } + } } void convertToHidl(const camera3_stream_configuration_t& src, HalStreamConfiguration* dst) { diff --git a/camera/device/3.3/default/convert.cpp b/camera/device/3.3/default/convert.cpp index dae190b03c..ac17d837d7 100644 --- a/camera/device/3.3/default/convert.cpp +++ b/camera/device/3.3/default/convert.cpp @@ -47,6 +47,22 @@ void convertToHidl(const Camera3Stream* src, HalStream* dst) { ALOGW("%s: Stream type %d is not currently supported!", __FUNCTION__, src->stream_type); } + + HalStream* halStream = NULL; + if (src->reserved[0] != NULL) { + halStream = (HalStream*)(src->reserved[0]); + } else if (src->reserved[1] != NULL) { + halStream = (HalStream*)(src->reserved[1]); + } + + if (halStream != NULL) { + dst->v3_2.overrideFormat = (PixelFormat) halStream->v3_2.overrideFormat; + if (src->stream_type == CAMERA3_STREAM_OUTPUT) { + dst->v3_2.producerUsage = (BufferUsageFlags)halStream->v3_2.producerUsage; + } else if (src->stream_type == CAMERA3_STREAM_INPUT) { + dst->v3_2.consumerUsage = (BufferUsageFlags)halStream->v3_2.consumerUsage; + } + } } void convertToHidl(const camera3_stream_configuration_t& src, HalStreamConfiguration* dst) { diff --git a/camera/device/3.4/default/Android.bp b/camera/device/3.4/default/Android.bp index 9f0c77739a..17bcdbb6d4 100644 --- a/camera/device/3.4/default/Android.bp +++ b/camera/device/3.4/default/Android.bp @@ -71,6 +71,7 @@ cc_library_shared { export_shared_lib_headers: [ "libfmq", ], + sdclang: false, // See b/163842697 } cc_library_shared { @@ -114,4 +115,5 @@ cc_library_shared { export_shared_lib_headers: [ "libfmq", ], + sdclang: false, // See b/163842697 } diff --git a/camera/device/3.5/default/Android.bp b/camera/device/3.5/default/Android.bp index 9d27b321e0..4ed65ba72d 100644 --- a/camera/device/3.5/default/Android.bp +++ b/camera/device/3.5/default/Android.bp @@ -68,6 +68,7 @@ cc_library_shared { "android.hardware.camera.common@1.0-helper", ], local_include_dirs: ["include/device_v3_5_impl"], + sdclang: false, // See b/163842697 } cc_library_shared { @@ -112,4 +113,5 @@ cc_library_shared { export_shared_lib_headers: [ "libfmq", ], + sdclang: false, // See b/163842697 } diff --git a/camera/device/3.6/default/Android.bp b/camera/device/3.6/default/Android.bp index 89ee145820..0e5440a865 100644 --- a/camera/device/3.6/default/Android.bp +++ b/camera/device/3.6/default/Android.bp @@ -74,4 +74,5 @@ cc_library_shared { export_shared_lib_headers: [ "libfmq", ], + sdclang: false, // See b/163842697 } diff --git a/camera/provider/2.4/default/Android.bp b/camera/provider/2.4/default/Android.bp index bccd6cb536..76220e2917 100644 --- a/camera/provider/2.4/default/Android.bp +++ b/camera/provider/2.4/default/Android.bp @@ -15,6 +15,7 @@ cc_library_shared { shared_libs: [ "android.hardware.camera.common@1.0", "android.hardware.camera.device@1.0", + "vendor.qti.hardware.camera.device@1.0", "android.hardware.camera.device@3.2", "android.hardware.camera.device@3.3", "android.hardware.camera.device@3.4", @@ -45,6 +46,11 @@ cc_library_shared { "camera.device@3.5-impl_headers", ], export_include_dirs: ["."], + sdclang: false, // See b/163842697 + // Since this framework module has been forked to depend on a vendor + // proprietary library, we exclude this module from the vendor snapshot so + // that it will be built from source as part of the vendor image build. + exclude_from_vendor_snapshot: true, } cc_library_shared { @@ -88,6 +94,10 @@ cc_library_shared { "camera.device@3.6-external-impl_headers", ], export_include_dirs: ["."], + // Since this framework module has a transitive dependency on a vendor + // proprietary library, we exclude this module from the vendor snapshot so + // that it will be built from source as part of the vendor image build. + exclude_from_vendor_snapshot: true, } cc_library_shared { @@ -136,6 +146,10 @@ cc_library_shared { "android.hardware.camera.common@1.0-helper", ], export_include_dirs: ["."], + // Since this framework module has a transitive dependency on a vendor + // proprietary library, we exclude this module from the vendor snapshot so + // that it will be built from source as part of the vendor image build. + exclude_from_vendor_snapshot: true, } cc_defaults { @@ -147,6 +161,7 @@ cc_defaults { shared_libs: [ "android.hardware.camera.common@1.0", "android.hardware.camera.device@1.0", + "vendor.qti.hardware.camera.device@1.0", "android.hardware.camera.device@3.2", "android.hardware.camera.device@3.3", "android.hardware.camera.device@3.4", @@ -174,6 +189,10 @@ cc_defaults { "camera.device@3.5-external-impl_headers", "camera.device@3.5-impl_headers", ], + // Since this framework module has been forked to depend on a vendor + // proprietary library, we exclude this module from the vendor snapshot so + // that it will be built from source as part of the vendor image build. + exclude_from_vendor_snapshot: true, } cc_binary { @@ -236,4 +255,8 @@ cc_binary { "camera.device@3.5-external-impl_headers", "camera.device@3.5-impl_headers", ], + // Since this framework module has a transitive dependency on a vendor + // proprietary library, we exclude this module from the vendor snapshot so + // that it will be built from source as part of the vendor image build. + exclude_from_vendor_snapshot: true, } diff --git a/camera/provider/2.4/default/LegacyCameraProviderImpl_2_4.cpp b/camera/provider/2.4/default/LegacyCameraProviderImpl_2_4.cpp index 7c3b982931..ab97646e32 100644 --- a/camera/provider/2.4/default/LegacyCameraProviderImpl_2_4.cpp +++ b/camera/provider/2.4/default/LegacyCameraProviderImpl_2_4.cpp @@ -87,23 +87,32 @@ void LegacyCameraProviderImpl_2_4::addDeviceNames(int camera_id, CameraDeviceSta if (deviceVersion >= CAMERA_DEVICE_API_VERSION_3_2 && mModule->isOpenLegacyDefined()) { // try open_legacy to see if it actually works - struct hw_device_t* halDev = nullptr; - int ret = mModule->openLegacy(cameraId, CAMERA_DEVICE_API_VERSION_1_0, &halDev); - if (ret == 0) { - mOpenLegacySupported[cameraIdStr] = true; - halDev->close(halDev); - deviceNamePair = std::make_pair(cameraIdStr, + if ((property_get_bool("ro.config.low_ram", /*default*/ false))) { + deviceNamePair = std::make_pair(cameraIdStr, getHidlDeviceName(cameraIdStr, CAMERA_DEVICE_API_VERSION_1_0)); - mCameraDeviceNames.add(deviceNamePair); - if (cam_new) { - mCallbacks->cameraDeviceStatusChange(deviceNamePair.second, status); - } - } else if (ret == -EBUSY || ret == -EUSERS) { + mCameraDeviceNames.add(deviceNamePair); + if (cam_new) { + mCallbacks->cameraDeviceStatusChange(deviceNamePair.second, status); + } + } else { + struct hw_device_t* halDev = nullptr; + int ret = mModule->openLegacy(cameraId, CAMERA_DEVICE_API_VERSION_1_0, &halDev); + if (ret == 0) { + mOpenLegacySupported[cameraIdStr] = true; + halDev->close(halDev); + deviceNamePair = std::make_pair(cameraIdStr, + getHidlDeviceName(cameraIdStr, CAMERA_DEVICE_API_VERSION_1_0)); + mCameraDeviceNames.add(deviceNamePair); + if (cam_new) { + mCallbacks->cameraDeviceStatusChange(deviceNamePair.second, status); + } + } else if (ret == -EBUSY || ret == -EUSERS) { // Looks like this provider instance is not initialized during // system startup and there are other camera users already. // Not a good sign but not fatal. - ALOGW("%s: open_legacy try failed!", __FUNCTION__); - } + ALOGW("%s: open_legacy try failed!", __FUNCTION__); + } + } } } @@ -314,15 +323,15 @@ bool LegacyCameraProviderImpl_2_4::initialize() { mNumberOfLegacyCameras = mModule->getNumberOfCameras(); for (int i = 0; i < mNumberOfLegacyCameras; i++) { - struct camera_info info; - auto rc = mModule->getCameraInfo(i, &info); + uint32_t device_version; + auto rc = mModule->getCameraDeviceVersion(i, &device_version); if (rc != NO_ERROR) { - ALOGE("%s: Camera info query failed!", __func__); + ALOGE("%s: Camera device version query failed!", __func__); mModule.clear(); return true; } - if (checkCameraVersion(i, info) != OK) { + if (checkCameraVersion(i, device_version) != OK) { ALOGE("%s: Camera version check failed!", __func__); mModule.clear(); return true; @@ -342,7 +351,7 @@ bool LegacyCameraProviderImpl_2_4::initialize() { /** * Check that the device HAL version is still in supported. */ -int LegacyCameraProviderImpl_2_4::checkCameraVersion(int id, camera_info info) { +int LegacyCameraProviderImpl_2_4::checkCameraVersion(int id, uint32_t device_version) { if (mModule == nullptr) { return NO_INIT; } @@ -352,7 +361,7 @@ int LegacyCameraProviderImpl_2_4::checkCameraVersion(int id, camera_info info) { uint16_t moduleVersion = mModule->getModuleApiVersion(); if (moduleVersion >= CAMERA_MODULE_API_VERSION_2_0) { // Verify the device version is in the supported range - switch (info.device_version) { + switch (device_version) { case CAMERA_DEVICE_API_VERSION_1_0: case CAMERA_DEVICE_API_VERSION_3_2: case CAMERA_DEVICE_API_VERSION_3_3: @@ -370,7 +379,7 @@ int LegacyCameraProviderImpl_2_4::checkCameraVersion(int id, camera_info info) { if (moduleVersion < CAMERA_MODULE_API_VERSION_2_5) { ALOGE("%s: Device %d has unsupported version combination:" "HAL version %x and module version %x", - __FUNCTION__, id, info.device_version, moduleVersion); + __FUNCTION__, id, device_version, moduleVersion); return NO_INIT; } break; @@ -380,8 +389,8 @@ int LegacyCameraProviderImpl_2_4::checkCameraVersion(int id, camera_info info) { case CAMERA_DEVICE_API_VERSION_3_1: // no longer supported default: - ALOGE("%s: Device %d has HAL version %x, which is not supported", - __FUNCTION__, id, info.device_version); + ALOGE("%s: Device %d has HAL version %x, which is not supported", __FUNCTION__, id, + device_version); return NO_INIT; } } diff --git a/camera/provider/2.4/default/LegacyCameraProviderImpl_2_4.h b/camera/provider/2.4/default/LegacyCameraProviderImpl_2_4.h index b4914b3cfe..9ec5c5e8db 100644 --- a/camera/provider/2.4/default/LegacyCameraProviderImpl_2_4.h +++ b/camera/provider/2.4/default/LegacyCameraProviderImpl_2_4.h @@ -97,7 +97,7 @@ protected: hidl_vec<VendorTagSection> mVendorTagSections; bool setUpVendorTags(); - int checkCameraVersion(int id, camera_info info); + int checkCameraVersion(int id, uint32_t device_version); // create HIDL device name from camera ID and legacy device version std::string getHidlDeviceName(std::string cameraId, int deviceVersion); diff --git a/camera/provider/2.4/default/android.hardware.camera.provider@2.4-service.rc b/camera/provider/2.4/default/android.hardware.camera.provider@2.4-service.rc index f7ac9f83e4..ff924ed360 100644 --- a/camera/provider/2.4/default/android.hardware.camera.provider@2.4-service.rc +++ b/camera/provider/2.4/default/android.hardware.camera.provider@2.4-service.rc @@ -5,4 +5,4 @@ service vendor.camera-provider-2-4 /vendor/bin/hw/android.hardware.camera.provid group audio camera input drmrpc ioprio rt 4 capabilities SYS_NICE - task_profiles CameraServiceCapacity MaxPerformance + task_profiles CameraServiceCapacity HighPerformance diff --git a/camera/provider/2.4/default/android.hardware.camera.provider@2.4-service_64.rc b/camera/provider/2.4/default/android.hardware.camera.provider@2.4-service_64.rc index a32dd468d3..642e84e5b0 100644 --- a/camera/provider/2.4/default/android.hardware.camera.provider@2.4-service_64.rc +++ b/camera/provider/2.4/default/android.hardware.camera.provider@2.4-service_64.rc @@ -5,4 +5,4 @@ service vendor.camera-provider-2-4 /vendor/bin/hw/android.hardware.camera.provid group audio camera input drmrpc ioprio rt 4 capabilities SYS_NICE - task_profiles CameraServiceCapacity MaxPerformance + task_profiles CameraServiceCapacity HighPerformance diff --git a/camera/provider/2.5/default/Android.bp b/camera/provider/2.5/default/Android.bp index 2fcb35ab00..188b70157a 100644 --- a/camera/provider/2.5/default/Android.bp +++ b/camera/provider/2.5/default/Android.bp @@ -44,6 +44,10 @@ cc_library_shared { "camera.device@3.5-impl_headers", ], export_include_dirs: ["."], + // Since this framework module has a transitive dependency on a vendor + // proprietary library, we exclude this module from the vendor snapshot so + // that it will be built from source as part of the vendor image build. + exclude_from_vendor_snapshot: true, } cc_library_shared { @@ -87,6 +91,10 @@ cc_library_shared { "camera.device@3.6-external-impl_headers" ], export_include_dirs: ["."], + // Since this framework module has a transitive dependency on a vendor + // proprietary library, we exclude this module from the vendor snapshot so + // that it will be built from source as part of the vendor image build. + exclude_from_vendor_snapshot: true, } cc_defaults { @@ -123,6 +131,10 @@ cc_defaults { "camera.device@3.4-impl_headers", "camera.device@3.5-impl_headers" ], + // Since this framework module has a transitive dependency on a vendor + // proprietary library, we exclude this module from the vendor snapshot so + // that it will be built from source as part of the vendor image build. + exclude_from_vendor_snapshot: true, } cc_binary { @@ -196,4 +208,8 @@ cc_binary { "camera.device@3.5-impl_headers", "camera.device@3.6-external-impl_headers", ], + // Since this framework module has a transitive dependency on a vendor + // proprietary library, we exclude this module from the vendor snapshot so + // that it will be built from source as part of the vendor image build. + exclude_from_vendor_snapshot: true, } diff --git a/cas/1.0/default/Android.bp b/cas/1.0/default/Android.bp index fc5b3b4361..a85c5fc230 100644 --- a/cas/1.0/default/Android.bp +++ b/cas/1.0/default/Android.bp @@ -33,10 +33,16 @@ cc_defaults { "liblog", "libstagefright_foundation", "libutils", + "libhwbinder" ], header_libs: [ "media_plugin_headers", ], + arch: { + arm: { + cflags: ["-DARCH_ARM_32"], + }, + }, } cc_binary { diff --git a/cas/1.0/default/service.cpp b/cas/1.0/default/service.cpp index 754c0c5af7..dfb385d2a0 100644 --- a/cas/1.0/default/service.cpp +++ b/cas/1.0/default/service.cpp @@ -27,6 +27,10 @@ #include "MediaCasService.h" +#ifdef ARCH_ARM_32 +#include <hwbinder/ProcessState.h> +#endif + using android::hardware::configureRpcThreadpool; using android::hardware::joinRpcThreadpool; using android::hardware::LazyServiceRegistrar; @@ -40,6 +44,9 @@ const bool kLazyService = false; #endif int main() { + #ifdef ARCH_ARM_32 + android::hardware::ProcessState::initWithMmapSize((size_t)32768); + #endif configureRpcThreadpool(8, true /* callerWillJoin */); // Setup hwbinder service diff --git a/compatibility_matrices/compatibility_matrix.4.xml b/compatibility_matrices/compatibility_matrix.4.xml index 8ef0b3ad27..5e4bcb4c1c 100644 --- a/compatibility_matrices/compatibility_matrix.4.xml +++ b/compatibility_matrices/compatibility_matrix.4.xml @@ -505,6 +505,7 @@ <interface> <name>IHostapd</name> <instance>default</instance> + <instance>wigighostapd</instance> </interface> </hal> <hal format="hidl" optional="true"> diff --git a/compatibility_matrices/compatibility_matrix.5.xml b/compatibility_matrices/compatibility_matrix.5.xml index 12b85c7724..df594ab2f0 100644 --- a/compatibility_matrices/compatibility_matrix.5.xml +++ b/compatibility_matrices/compatibility_matrix.5.xml @@ -554,6 +554,7 @@ <interface> <name>IHostapd</name> <instance>default</instance> + <instance>wigighostapd</instance> </interface> </hal> <hal format="hidl" optional="true"> diff --git a/compatibility_matrices/compatibility_matrix.6.xml b/compatibility_matrices/compatibility_matrix.6.xml index e19d2dd12e..6ea772fc38 100644 --- a/compatibility_matrices/compatibility_matrix.6.xml +++ b/compatibility_matrices/compatibility_matrix.6.xml @@ -644,6 +644,7 @@ <interface> <name>IHostapd</name> <instance>default</instance> + <instance>wigighostapd</instance> </interface> </hal> <hal format="hidl" optional="true"> diff --git a/graphics/allocator/2.0/default/Android.bp b/graphics/allocator/2.0/default/Android.bp index 4d17dc3a1b..47c34849c1 100644 --- a/graphics/allocator/2.0/default/Android.bp +++ b/graphics/allocator/2.0/default/Android.bp @@ -42,4 +42,11 @@ cc_binary { "liblog", "libutils", ], + arch: { + arm: { + cflags: [ + "-DARCH_ARM_32" + ], + }, + }, } diff --git a/graphics/allocator/2.0/default/service.cpp b/graphics/allocator/2.0/default/service.cpp index bc0539a617..ca1fee4f2d 100644 --- a/graphics/allocator/2.0/default/service.cpp +++ b/graphics/allocator/2.0/default/service.cpp @@ -19,10 +19,15 @@ #include <android/hardware/graphics/allocator/2.0/IAllocator.h> #include <hidl/LegacySupport.h> +#include <hwbinder/ProcessState.h> using android::hardware::defaultPassthroughServiceImplementation; using android::hardware::graphics::allocator::V2_0::IAllocator; int main() { + +#ifdef ARCH_ARM_32 + android::hardware::ProcessState::initWithMmapSize((size_t)(32768)); +#endif return defaultPassthroughServiceImplementation<IAllocator>(4); } diff --git a/graphics/composer/2.1/default/Android.bp b/graphics/composer/2.1/default/Android.bp index 96fea4e6cd..3744469e21 100644 --- a/graphics/composer/2.1/default/Android.bp +++ b/graphics/composer/2.1/default/Android.bp @@ -22,6 +22,7 @@ cc_binary { "android.hardware.graphics.composer@2.1-resources", "libbase", "libbinder", + "libhwbinder", "libcutils", "libfmq", "libhardware", @@ -32,4 +33,11 @@ cc_binary { "libsync", "libutils", ], + arch: { + arm: { + cflags: [ + "-DARCH_ARM_32" + ], + }, + }, } diff --git a/graphics/composer/2.1/default/android.hardware.graphics.composer@2.1-service.rc b/graphics/composer/2.1/default/android.hardware.graphics.composer@2.1-service.rc index c8fccdce20..6e2c8134c5 100644 --- a/graphics/composer/2.1/default/android.hardware.graphics.composer@2.1-service.rc +++ b/graphics/composer/2.1/default/android.hardware.graphics.composer@2.1-service.rc @@ -1,8 +1,8 @@ service vendor.hwcomposer-2-1 /vendor/bin/hw/android.hardware.graphics.composer@2.1-service - interface android.hardware.graphics.composer@2.1::IComposer default class hal animation user system group graphics drmrpc capabilities SYS_NICE onrestart restart surfaceflinger task_profiles ServiceCapacityLow + socket pps stream 0660 system system diff --git a/graphics/composer/2.1/default/service.cpp b/graphics/composer/2.1/default/service.cpp index 1276d2df7e..b8ddd212a4 100644 --- a/graphics/composer/2.1/default/service.cpp +++ b/graphics/composer/2.1/default/service.cpp @@ -23,6 +23,7 @@ #include <binder/ProcessState.h> #include <composer-passthrough/2.1/HwcLoader.h> #include <hidl/LegacySupport.h> +#include <hwbinder/ProcessState.h> using android::hardware::graphics::composer::V2_1::IComposer; using android::hardware::graphics::composer::V2_1::passthrough::HwcLoader; @@ -41,6 +42,10 @@ int main() { ALOGE("Couldn't set SCHED_FIFO: %d", errno); } +#ifdef ARCH_ARM_32 + android::hardware::ProcessState::initWithMmapSize((size_t)(32768)); +#endif + android::hardware::configureRpcThreadpool(4, true /* will join */); android::sp<IComposer> composer = HwcLoader::load(); diff --git a/graphics/composer/2.2/default/android.hardware.graphics.composer@2.2-service.rc b/graphics/composer/2.2/default/android.hardware.graphics.composer@2.2-service.rc index 7714119993..ddb5e8f5b0 100644 --- a/graphics/composer/2.2/default/android.hardware.graphics.composer@2.2-service.rc +++ b/graphics/composer/2.2/default/android.hardware.graphics.composer@2.2-service.rc @@ -4,4 +4,5 @@ service vendor.hwcomposer-2-2 /vendor/bin/hw/android.hardware.graphics.composer@ group graphics drmrpc capabilities SYS_NICE onrestart restart surfaceflinger + socket pps stream 0660 system system task_profiles ServiceCapacityLow diff --git a/graphics/composer/2.3/default/android.hardware.graphics.composer@2.3-service.rc b/graphics/composer/2.3/default/android.hardware.graphics.composer@2.3-service.rc index d3835a4121..9b941539c2 100644 --- a/graphics/composer/2.3/default/android.hardware.graphics.composer@2.3-service.rc +++ b/graphics/composer/2.3/default/android.hardware.graphics.composer@2.3-service.rc @@ -4,4 +4,5 @@ service vendor.hwcomposer-2-3 /vendor/bin/hw/android.hardware.graphics.composer@ group graphics drmrpc capabilities SYS_NICE onrestart restart surfaceflinger + socket pps stream 0660 system system task_profiles ServiceCapacityLow diff --git a/graphics/composer/2.3/utils/passthrough/include/composer-passthrough/2.3/HwcHal.h b/graphics/composer/2.3/utils/passthrough/include/composer-passthrough/2.3/HwcHal.h index e0e1394027..19c4653e0f 100644 --- a/graphics/composer/2.3/utils/passthrough/include/composer-passthrough/2.3/HwcHal.h +++ b/graphics/composer/2.3/utils/passthrough/include/composer-passthrough/2.3/HwcHal.h @@ -222,6 +222,10 @@ class HwcHalImpl : public V2_2::passthrough::detail::HwcHalImpl<Hal> { Error getDisplayCapabilities( Display display, std::vector<IComposerClient::DisplayCapability>* outCapabilities) override { + if (!mDispatch.getDisplayCapabilities) { + return Error::UNSUPPORTED; + } + uint32_t count = 0; int32_t error = mDispatch.getDisplayCapabilities(mDevice, display, &count, nullptr); if (error != HWC2_ERROR_NONE) { diff --git a/graphics/composer/2.4/default/android.hardware.graphics.composer@2.4-service.rc b/graphics/composer/2.4/default/android.hardware.graphics.composer@2.4-service.rc index d82dcd92f0..06003b02b3 100644 --- a/graphics/composer/2.4/default/android.hardware.graphics.composer@2.4-service.rc +++ b/graphics/composer/2.4/default/android.hardware.graphics.composer@2.4-service.rc @@ -5,3 +5,4 @@ service vendor.hwcomposer-2-4 /vendor/bin/hw/android.hardware.graphics.composer@ capabilities SYS_NICE onrestart restart surfaceflinger task_profiles ServiceCapacityLow + socket pps stream 0660 system system diff --git a/keymaster/4.0/support/include/keymasterV4_0/keymaster_tags.h b/keymaster/4.0/support/include/keymasterV4_0/keymaster_tags.h index ea40971898..d7358f36f3 100644 --- a/keymaster/4.0/support/include/keymasterV4_0/keymaster_tags.h +++ b/keymaster/4.0/support/include/keymasterV4_0/keymaster_tags.h @@ -73,6 +73,9 @@ namespace V4_0 { static const int32_t KM_TAG_DIGEST_OLD = static_cast<int32_t>(TagType::ENUM) | 5; static const int32_t KM_TAG_PADDING_OLD = static_cast<int32_t>(TagType::ENUM) | 7; +static const int32_t KM_TAG_FBE_ICE = static_cast<int32_t>(TagType::BOOL) | 16201; +static const int32_t KM_TAG_KEY_TYPE = static_cast<int32_t>(TagType::UINT) | 16202; + constexpr TagType typeFromTag(Tag tag) { return static_cast<TagType>(static_cast<uint32_t>(tag) & static_cast<uint32_t>(0xf0000000)); } diff --git a/light/2.0/default/Android.bp b/light/2.0/default/Android.bp index 2745f3d8be..e3e7e5b0ca 100644 --- a/light/2.0/default/Android.bp +++ b/light/2.0/default/Android.bp @@ -50,10 +50,18 @@ cc_defaults { "libbase", "libdl", "libutils", + "libhwbinder", "libhardware", "libhidlbase", "android.hardware.light@2.0", ], + arch: { + arm: { + cflags: [ + "-DARCH_ARM_32" + ], + }, + }, } cc_binary { diff --git a/light/2.0/default/service.cpp b/light/2.0/default/service.cpp index 20f0578f02..b50a2034f4 100644 --- a/light/2.0/default/service.cpp +++ b/light/2.0/default/service.cpp @@ -16,10 +16,14 @@ #include <android/hardware/light/2.0/ILight.h> #include <hidl/LegacySupport.h> +#include <hwbinder/ProcessState.h> using android::hardware::light::V2_0::ILight; using android::hardware::defaultPassthroughServiceImplementation; int main() { +#ifdef ARCH_ARM_32 + android::hardware::ProcessState::initWithMmapSize((size_t)(32768)); +#endif return defaultPassthroughServiceImplementation<ILight>(); } diff --git a/neuralnetworks/1.0/vts/functional/AndroidTest.xml b/neuralnetworks/1.0/vts/functional/AndroidTest.xml index 8f56ff9c1f..9dd85ae7f1 100644 --- a/neuralnetworks/1.0/vts/functional/AndroidTest.xml +++ b/neuralnetworks/1.0/vts/functional/AndroidTest.xml @@ -29,6 +29,5 @@ <option name="native-test-device-path" value="/data/local/tmp" /> <option name="module-name" value="VtsHalNeuralnetworksV1_0TargetTest" /> <option name="native-test-timeout" value="20m" /> - <option name="native-test-flag" value="--gtest_break_on_failure" /> </test> </configuration> diff --git a/neuralnetworks/1.1/vts/functional/AndroidTest.xml b/neuralnetworks/1.1/vts/functional/AndroidTest.xml index 956933362f..74001f924e 100644 --- a/neuralnetworks/1.1/vts/functional/AndroidTest.xml +++ b/neuralnetworks/1.1/vts/functional/AndroidTest.xml @@ -29,6 +29,5 @@ <option name="native-test-device-path" value="/data/local/tmp" /> <option name="module-name" value="VtsHalNeuralnetworksV1_1TargetTest" /> <option name="native-test-timeout" value="20m" /> - <option name="native-test-flag" value="--gtest_break_on_failure" /> </test> </configuration> diff --git a/neuralnetworks/1.2/vts/functional/AndroidTest.xml b/neuralnetworks/1.2/vts/functional/AndroidTest.xml index c28b2e2d3c..5396d85928 100644 --- a/neuralnetworks/1.2/vts/functional/AndroidTest.xml +++ b/neuralnetworks/1.2/vts/functional/AndroidTest.xml @@ -29,6 +29,5 @@ <option name="native-test-device-path" value="/data/local/tmp" /> <option name="module-name" value="VtsHalNeuralnetworksV1_2TargetTest" /> <option name="native-test-timeout" value="20m" /> - <option name="native-test-flag" value="--gtest_break_on_failure" /> </test> </configuration> diff --git a/neuralnetworks/1.3/vts/functional/AndroidTest.xml b/neuralnetworks/1.3/vts/functional/AndroidTest.xml index d1cba6ac54..c418aaaddc 100644 --- a/neuralnetworks/1.3/vts/functional/AndroidTest.xml +++ b/neuralnetworks/1.3/vts/functional/AndroidTest.xml @@ -29,6 +29,5 @@ <option name="native-test-device-path" value="/data/local/tmp" /> <option name="module-name" value="VtsHalNeuralnetworksV1_3TargetTest" /> <option name="native-test-timeout" value="20m" /> - <option name="native-test-flag" value="--gtest_break_on_failure" /> </test> </configuration> diff --git a/neuralnetworks/aidl/vts/functional/AndroidTestDevice.xml b/neuralnetworks/aidl/vts/functional/AndroidTestDevice.xml index 204d8f1117..384d42078f 100644 --- a/neuralnetworks/aidl/vts/functional/AndroidTestDevice.xml +++ b/neuralnetworks/aidl/vts/functional/AndroidTestDevice.xml @@ -29,6 +29,5 @@ <option name="native-test-device-path" value="/data/local/tmp" /> <option name="module-name" value="VtsHalNeuralnetworksTargetTest" /> <option name="native-test-timeout" value="20m" /> - <option name="native-test-flag" value="--gtest_break_on_failure" /> </test> </configuration> diff --git a/power/1.0/default/Android.bp b/power/1.0/default/Android.bp index a64b15ca97..d99ef9d833 100644 --- a/power/1.0/default/Android.bp +++ b/power/1.0/default/Android.bp @@ -63,6 +63,12 @@ cc_binary { "libhardware", "libhidlbase", "android.hardware.power@1.0", + "libhwbinder" ], + arch: { + arm: { + cflags: ["-DARCH_ARM_32"], + }, + }, } diff --git a/power/1.0/default/service.cpp b/power/1.0/default/service.cpp index e8618b84e8..d5619192bb 100644 --- a/power/1.0/default/service.cpp +++ b/power/1.0/default/service.cpp @@ -18,10 +18,16 @@ #include <android/hardware/power/1.0/IPower.h> #include <hidl/LegacySupport.h> +#ifdef ARCH_ARM_32 +#include <hwbinder/ProcessState.h> +#endif using android::hardware::power::V1_0::IPower; using android::hardware::defaultPassthroughServiceImplementation; int main() { + #ifdef ARCH_ARM_32 + android::hardware::ProcessState::initWithMmapSize((size_t)16384); + #endif return defaultPassthroughServiceImplementation<IPower>(); } diff --git a/sensors/1.0/default/Android.bp b/sensors/1.0/default/Android.bp index 2e4e1b015c..b2d3c49cf2 100644 --- a/sensors/1.0/default/Android.bp +++ b/sensors/1.0/default/Android.bp @@ -55,6 +55,7 @@ cc_binary { relative_install_path: "hw", vendor: true, init_rc: ["android.hardware.sensors@1.0-service.rc"], + defaults: ["hidl_defaults"], srcs: ["service.cpp"], shared_libs: [ @@ -65,5 +66,11 @@ cc_binary { "libutils", "libhidlbase", "android.hardware.sensors@1.0", + "libhwbinder", ], + arch: { + arm: { + cflags: ["-DARCH_ARM_32"], + }, + }, } diff --git a/sensors/1.0/default/android.hardware.sensors@1.0-service.rc b/sensors/1.0/default/android.hardware.sensors@1.0-service.rc index 1af6d0b08c..e029bb8f72 100644 --- a/sensors/1.0/default/android.hardware.sensors@1.0-service.rc +++ b/sensors/1.0/default/android.hardware.sensors@1.0-service.rc @@ -2,6 +2,6 @@ service vendor.sensors-hal-1-0 /vendor/bin/hw/android.hardware.sensors@1.0-servi interface android.hardware.sensors@1.0::ISensors default class hal user system - group system wakelock uhid context_hub + group system wakelock uhid input context_hub capabilities BLOCK_SUSPEND rlimit rtprio 10 10 diff --git a/sensors/1.0/default/service.cpp b/sensors/1.0/default/service.cpp index 65f6d816a1..c413d1a0e0 100644 --- a/sensors/1.0/default/service.cpp +++ b/sensors/1.0/default/service.cpp @@ -19,10 +19,30 @@ #include <android/hardware/sensors/1.0/ISensors.h> #include <hidl/LegacySupport.h> +#ifdef ARCH_ARM_32 +#include <hwbinder/ProcessState.h> +#include <cutils/properties.h> +#endif + using android::hardware::sensors::V1_0::ISensors; using android::hardware::defaultPassthroughServiceImplementation; +#ifdef ARCH_ARM_32 +//default h/w binder memsize for sensors is 8 KB +#define DEFAULT_SENSORS_HW_BINDER_MEM_SIZE_KB 8 +size_t getHWBinderMmapSize() { + int32_t value = DEFAULT_SENSORS_HW_BINDER_MEM_SIZE_KB; + + value = property_get_int32("persist.vendor.sensor.hw.binder.size", value); + ALOGD("Init hw binder with mem size = %d", value); + return 1024 * value; +} +#endif + int main() { +#ifdef ARCH_ARM_32 + android::hardware::ProcessState::initWithMmapSize((size_t)getHWBinderMmapSize()); +#endif /* Sensors framework service needs at least two threads. * One thread blocks on a "poll" * The second thread is needed for all other HAL methods. diff --git a/usb/1.0/default/Usb.cpp b/usb/1.0/default/Usb.cpp index 6eb88428c9..f72ab9cb39 100644 --- a/usb/1.0/default/Usb.cpp +++ b/usb/1.0/default/Usb.cpp @@ -206,6 +206,19 @@ rescan: bool canSwitchRoleHelper(const std::string portName, PortRoleType type) { std::string filename = appendRoleNodeHelper(portName, type); + + if (type == PortRoleType::DATA_ROLE || type == PortRoleType::POWER_ROLE) { + std::string pd_filename = "/sys/class/power_supply/usb/pd_active"; + std::string pd_active; + + if (!readFile(pd_filename, pd_active)) { + if (pd_active == "0") + return false; + } else { + ALOGE("canSwitchRoleHelper: couldn't read %s", pd_filename.c_str()); + } + } + std::ofstream file(filename); if (file.is_open()) { @@ -396,7 +409,7 @@ void* work(void* param) { for (int n = 0; n < nevents; ++n) { if (events[n].data.ptr) - (*(void (*)(int, struct data *payload))events[n].data.ptr) + (*(void (*)(uint32_t, struct data *payload))events[n].data.ptr) (events[n].events, &payload); } } diff --git a/vibrator/1.0/default/Android.bp b/vibrator/1.0/default/Android.bp index ed750b453b..d495f711d3 100644 --- a/vibrator/1.0/default/Android.bp +++ b/vibrator/1.0/default/Android.bp @@ -51,5 +51,13 @@ cc_binary { "libutils", "libhardware", "android.hardware.vibrator@1.0", + "libhwbinder", ], + arch: { + arm: { + cflags: [ + "-DARCH_ARM_32" + ], + }, + }, } diff --git a/vibrator/1.0/default/service.cpp b/vibrator/1.0/default/service.cpp index 7cc074461d..b626056990 100644 --- a/vibrator/1.0/default/service.cpp +++ b/vibrator/1.0/default/service.cpp @@ -17,10 +17,14 @@ #include <android/hardware/vibrator/1.0/IVibrator.h> #include <hidl/LegacySupport.h> +#include <hwbinder/ProcessState.h> using android::hardware::vibrator::V1_0::IVibrator; using android::hardware::defaultPassthroughServiceImplementation; int main() { +#ifdef ARCH_ARM_32 + android::hardware::ProcessState::initWithMmapSize((size_t)8192); +#endif return defaultPassthroughServiceImplementation<IVibrator>(); } diff --git a/vibrator/aidl/vts/VtsHalVibratorTargetTest.cpp b/vibrator/aidl/vts/VtsHalVibratorTargetTest.cpp index 38417154eb..791d7e8613 100644 --- a/vibrator/aidl/vts/VtsHalVibratorTargetTest.cpp +++ b/vibrator/aidl/vts/VtsHalVibratorTargetTest.cpp @@ -332,6 +332,7 @@ TEST_P(VibratorAidl, ChangeVibrationAmplitude) { sleep(1); EXPECT_EQ(Status::EX_NONE, vibrator->setAmplitude(1.0f).exceptionCode()); sleep(1); + EXPECT_TRUE(vibrator->off().isOk()); } } diff --git a/wifi/1.6/default/hidl_struct_util.cpp b/wifi/1.6/default/hidl_struct_util.cpp index 2112b260f3..ff3105dd77 100644 --- a/wifi/1.6/default/hidl_struct_util.cpp +++ b/wifi/1.6/default/hidl_struct_util.cpp @@ -2999,6 +2999,71 @@ bool convertLegacyRadioCombinationsMatrixToHidl( return true; } +bool convertLegacyIfaceMaskToIfaceConcurrencyType( + u32 mask, std::vector<V1_6::IfaceConcurrencyType>* types) { + if (!mask) + return false; + +#ifndef BIT +#define BIT(x) (1 << (x)) +#endif + if (mask & BIT(WIFI_INTERFACE_TYPE_STA)) + types->push_back(V1_6::IfaceConcurrencyType::STA); + if (mask & BIT(WIFI_INTERFACE_TYPE_AP)) + types->push_back(V1_6::IfaceConcurrencyType::AP); + if (mask & BIT(WIFI_INTERFACE_TYPE_AP_BRIDGED)) + types->push_back(V1_6::IfaceConcurrencyType::AP_BRIDGED); + if (mask & BIT(WIFI_INTERFACE_TYPE_P2P)) + types->push_back(V1_6::IfaceConcurrencyType::P2P); + if (mask & BIT(WIFI_INTERFACE_TYPE_NAN)) + types->push_back(V1_6::IfaceConcurrencyType::NAN); + + return true; +} + +bool convertLegacyIfaceCombinationsMatrixToChipMode( + legacy_hal::wifi_iface_concurrency_matrix* legacy_matrix, + V1_6::IWifiChip::ChipMode* chip_mode) { + if (!chip_mode || !legacy_matrix) { + LOG(ERROR) << "legacy_matrix is null"; + return false; + } + *chip_mode = {}; + + int num_combinations = legacy_matrix->num_iface_combinations; + std::vector<V1_6::IWifiChip::ChipConcurrencyCombination> driver_Combinations_vec; + if (!num_combinations) { + LOG(ERROR) << "zero iface combinations"; + return false; + } + + for (int i = 0; i < num_combinations; i++) { + V1_6::IWifiChip::ChipConcurrencyCombination chipComb; + std::vector<V1_6::IWifiChip::ChipConcurrencyCombinationLimit> limits; + wifi_iface_combination *comb = &legacy_matrix->iface_combinations[i]; + if (!comb->num_iface_limits) + continue; + for (u32 j = 0; j < comb->num_iface_limits; j++) { + V1_6::IWifiChip::ChipConcurrencyCombinationLimit chipLimit; + chipLimit.maxIfaces = comb->iface_limits[j].max_limit; + std::vector<V1_6::IfaceConcurrencyType> types; + if (!convertLegacyIfaceMaskToIfaceConcurrencyType( + comb->iface_limits[j].iface_mask, &types)) { + LOG(ERROR) << "Failed to convert from iface_mask:" + << comb->iface_limits[j].iface_mask; + return false; + } + chipLimit.types = hidl_vec(types); + limits.push_back(chipLimit); + } + chipComb.limits = hidl_vec(limits); + driver_Combinations_vec.push_back(chipComb); + } + + chip_mode->availableCombinations = driver_Combinations_vec; + return true; +} + } // namespace hidl_struct_util } // namespace implementation } // namespace V1_6 diff --git a/wifi/1.6/default/hidl_struct_util.h b/wifi/1.6/default/hidl_struct_util.h index 2d4a5f13f4..e86f3302ad 100644 --- a/wifi/1.6/default/hidl_struct_util.h +++ b/wifi/1.6/default/hidl_struct_util.h @@ -79,6 +79,9 @@ bool convertLegacyRadioCombinationsMatrixToHidl( V1_6::WifiRadioCombinationMatrix* hidl_matrix); V1_5::WifiBand convertLegacyMacBandToHidlWifiBand(uint32_t band); V1_6::WifiAntennaMode convertLegacyAntennaConfigurationToHidl(uint32_t antenna_cfg); +bool convertLegacyIfaceCombinationsMatrixToChipMode( + legacy_hal::wifi_iface_concurrency_matrix* legacy_matrix, + V1_6::IWifiChip::ChipMode* chip_mode); // STA iface conversion methods. bool convertLegacyFeaturesToHidlStaCapabilities(uint64_t legacy_feature_set, diff --git a/wifi/1.6/default/wifi_chip.cpp b/wifi/1.6/default/wifi_chip.cpp index c7c00b17fd..9c0a15be05 100644 --- a/wifi/1.6/default/wifi_chip.cpp +++ b/wifi/1.6/default/wifi_chip.cpp @@ -378,6 +378,36 @@ WifiChip::WifiChip(ChipId chip_id, bool is_primary, debug_ring_buffer_cb_registered_(false), subsystemCallbackHandler_(handler) { setActiveWlanIfaceNameProperty(kNoActiveWlanIfaceNamePropertyValue); + using_dynamic_iface_combination_ = false; +} + +void WifiChip::retrieveDynamicIfaceCombination() { + + if (using_dynamic_iface_combination_) return; + + legacy_hal::wifi_iface_concurrency_matrix* legacy_matrix; + legacy_hal::wifi_error legacy_status; + + std::tie(legacy_status, legacy_matrix) = + legacy_hal_.lock()->getSupportedIfaceConcurrencyMatrix(); + if (legacy_status != legacy_hal::WIFI_SUCCESS) { + LOG(ERROR) << "Failed to get SupportedIfaceCombinations matrix from legacy HAL: " + << legacyErrorToString(legacy_status); + return; + } + + V1_6::IWifiChip::ChipMode hidl_chip_mode; + if (!hidl_struct_util::convertLegacyIfaceCombinationsMatrixToChipMode(legacy_matrix, + &hidl_chip_mode)) { + LOG(ERROR) << "Failed convertLegacyIfaceCombinationsMatrixToChipMode() "; + return; + } + + LOG(INFO) << "Reloading iface concurrency combination from driver"; + hidl_chip_mode.id = feature_flags::chip_mode_ids::kV3; + modes_.clear(); + modes_.push_back(hidl_chip_mode); + using_dynamic_iface_combination_ = true; } void WifiChip::invalidate() { @@ -1595,6 +1625,8 @@ WifiStatus WifiChip::handleChipConfiguration( property_set("vendor.wlan.driver.version", version_info.second.driverDescription.c_str()); } + // Get the driver supported interface combination. + retrieveDynamicIfaceCombination(); return createWifiStatus(WifiStatusCode::SUCCESS); } diff --git a/wifi/1.6/default/wifi_chip.h b/wifi/1.6/default/wifi_chip.h index e8ddaa6f9e..b1a40dc606 100644 --- a/wifi/1.6/default/wifi_chip.h +++ b/wifi/1.6/default/wifi_chip.h @@ -281,6 +281,7 @@ class WifiChip : public V1_6::IWifiChip { WifiBand band, uint32_t ifaceModeMask, uint32_t filterMask); std::pair<WifiStatus, WifiRadioCombinationMatrix> getSupportedRadioCombinationsMatrixInternal(); std::pair<WifiStatus, std::vector<V1_6::IWifiChip::ChipMode>> getAvailableModesInternal_1_6(); + void retrieveDynamicIfaceCombination(); ChipId chip_id_; std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal_; @@ -301,6 +302,7 @@ class WifiChip : public V1_6::IWifiChip { // registration mechanism. Use this to check if we have already // registered a callback. bool debug_ring_buffer_cb_registered_; + bool using_dynamic_iface_combination_; hidl_callback_util::HidlCallbackHandler<V1_4::IWifiChipEventCallback> event_cb_handler_; const std::function<void(const std::string&)> subsystemCallbackHandler_; diff --git a/wifi/1.6/default/wifi_legacy_hal.cpp b/wifi/1.6/default/wifi_legacy_hal.cpp index 2211897cd2..aff1b8cfbf 100644 --- a/wifi/1.6/default/wifi_legacy_hal.cpp +++ b/wifi/1.6/default/wifi_legacy_hal.cpp @@ -1589,6 +1589,18 @@ wifi_error WifiLegacyHal::enableWifiTxPowerLimits(const std::string& iface_name, return global_func_table_.wifi_enable_tx_power_limits(getIfaceHandle(iface_name), enable); } +std::pair<wifi_error, wifi_iface_concurrency_matrix*> +WifiLegacyHal::getSupportedIfaceConcurrencyMatrix() { + wifi_iface_concurrency_matrix *iface_concurrency_matrix_ptr = + &iface_concurrency_matrix_; + wifi_error status = global_func_table_.wifi_get_supported_iface_concurrency_matrix( + global_handle_, iface_concurrency_matrix_ptr); + if (status != WIFI_SUCCESS) + return {status, nullptr}; + + return {status, iface_concurrency_matrix_ptr}; +} + void WifiLegacyHal::invalidate() { global_handle_ = nullptr; iface_name_to_handle_.clear(); diff --git a/wifi/1.6/default/wifi_legacy_hal.h b/wifi/1.6/default/wifi_legacy_hal.h index 2b923b44a7..f878db4612 100644 --- a/wifi/1.6/default/wifi_legacy_hal.h +++ b/wifi/1.6/default/wifi_legacy_hal.h @@ -249,6 +249,9 @@ using ::WIFI_ERROR_UNINITIALIZED; using ::WIFI_ERROR_UNKNOWN; using ::wifi_gscan_capabilities; using ::wifi_hal_fn; +using ::wifi_iface_combination; +using ::wifi_iface_concurrency_matrix; +using ::wifi_iface_limit; using ::wifi_information_element; using ::WIFI_INTERFACE_IBSS; using ::WIFI_INTERFACE_MESH; @@ -685,6 +688,8 @@ class WifiLegacyHal { wifi_error enableWifiTxPowerLimits(const std::string& iface_name, bool enable); + std::pair<wifi_error, wifi_iface_concurrency_matrix*> getSupportedIfaceConcurrencyMatrix(); + private: // Retrieve interface handles for all the available interfaces. wifi_error retrieveIfaceHandles(); @@ -718,6 +723,8 @@ class WifiLegacyHal { // such as bring wlan0 interface up/down on start/stop HAL. // it may be removed once vendor HALs are updated. bool is_primary_; + // Driver supported iface combinations + wifi_iface_concurrency_matrix iface_concurrency_matrix_; }; } // namespace legacy_hal diff --git a/wifi/1.6/default/wifi_legacy_hal_stubs.cpp b/wifi/1.6/default/wifi_legacy_hal_stubs.cpp index b3bd37389c..a0ee0c5125 100644 --- a/wifi/1.6/default/wifi_legacy_hal_stubs.cpp +++ b/wifi/1.6/default/wifi_legacy_hal_stubs.cpp @@ -167,6 +167,7 @@ bool initHalFuncTableWithStubs(wifi_hal_fn* hal_fn) { populateStubFor(&hal_fn->wifi_nan_rtt_chre_disable_request); populateStubFor(&hal_fn->wifi_chre_register_handler); populateStubFor(&hal_fn->wifi_enable_tx_power_limits); + populateStubFor(&hal_fn->wifi_get_supported_iface_concurrency_matrix); return true; } } // namespace legacy_hal |