summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--audio/common/all-versions/default/service/Android.bp44
-rw-r--r--audio/common/all-versions/default/service/android.hardware.audio.service_64.rc9
-rw-r--r--audio/common/all-versions/default/service/service.cpp16
-rw-r--r--boot/1.0/default/Android.bp9
-rw-r--r--boot/1.0/default/service.cpp4
-rw-r--r--camera/common/1.0/default/Android.bp1
-rw-r--r--camera/common/1.0/default/CameraModule.cpp22
-rw-r--r--camera/common/1.0/default/include/CameraModule.h1
-rw-r--r--camera/device/1.0/default/Android.bp6
-rw-r--r--camera/device/1.0/default/CameraDevice.cpp91
-rw-r--r--camera/device/1.0/default/CameraDevice_1_0.h3
-rw-r--r--camera/device/3.2/default/Android.bp1
-rw-r--r--camera/device/3.2/default/CameraDeviceSession.cpp4
-rw-r--r--camera/device/3.2/default/convert.cpp19
-rw-r--r--camera/device/3.3/default/convert.cpp16
-rw-r--r--camera/device/3.4/default/Android.bp2
-rw-r--r--camera/device/3.5/default/Android.bp2
-rw-r--r--camera/device/3.6/default/Android.bp1
-rw-r--r--camera/provider/2.4/default/Android.bp23
-rw-r--r--camera/provider/2.4/default/LegacyCameraProviderImpl_2_4.cpp53
-rw-r--r--camera/provider/2.4/default/LegacyCameraProviderImpl_2_4.h2
-rw-r--r--camera/provider/2.4/default/android.hardware.camera.provider@2.4-service.rc2
-rw-r--r--camera/provider/2.4/default/android.hardware.camera.provider@2.4-service_64.rc2
-rw-r--r--camera/provider/2.5/default/Android.bp16
-rw-r--r--cas/1.0/default/Android.bp6
-rw-r--r--cas/1.0/default/service.cpp7
-rw-r--r--compatibility_matrices/compatibility_matrix.4.xml1
-rw-r--r--compatibility_matrices/compatibility_matrix.5.xml1
-rw-r--r--compatibility_matrices/compatibility_matrix.6.xml1
-rw-r--r--compatibility_matrices/compatibility_matrix.current.xml1
-rw-r--r--graphics/allocator/2.0/default/Android.bp7
-rw-r--r--graphics/allocator/2.0/default/service.cpp5
-rw-r--r--graphics/composer/2.1/default/Android.bp8
-rw-r--r--graphics/composer/2.1/default/android.hardware.graphics.composer@2.1-service.rc2
-rw-r--r--graphics/composer/2.1/default/service.cpp5
-rw-r--r--graphics/composer/2.2/default/android.hardware.graphics.composer@2.2-service.rc1
-rw-r--r--graphics/composer/2.3/default/android.hardware.graphics.composer@2.3-service.rc1
-rw-r--r--graphics/composer/2.3/utils/passthrough/include/composer-passthrough/2.3/HwcHal.h4
-rw-r--r--graphics/composer/2.4/default/android.hardware.graphics.composer@2.4-service.rc1
-rw-r--r--keymaster/4.0/support/include/keymasterV4_0/keymaster_tags.h3
-rw-r--r--light/2.0/default/Android.bp8
-rw-r--r--light/2.0/default/service.cpp4
-rw-r--r--power/1.0/default/Android.bp6
-rw-r--r--power/1.0/default/service.cpp6
-rw-r--r--sensors/1.0/default/Android.bp7
-rw-r--r--sensors/1.0/default/android.hardware.sensors@1.0-service.rc2
-rw-r--r--sensors/1.0/default/service.cpp20
-rw-r--r--usb/1.0/default/Usb.cpp15
-rw-r--r--usb/gadget/1.1/default/lib/UsbGadgetUtils.cpp3
-rw-r--r--usb/gadget/1.2/default/lib/UsbGadgetUtils.cpp3
-rw-r--r--vibrator/1.0/default/Android.bp8
-rw-r--r--vibrator/1.0/default/service.cpp4
-rw-r--r--wifi/1.5/default/Android.mk11
-rw-r--r--wifi/1.5/default/hidl_struct_util.cpp10
-rw-r--r--wifi/1.5/default/service.cpp16
-rw-r--r--wifi/1.5/default/wifi_chip.cpp99
-rw-r--r--wifi/1.5/default/wifi_chip.h5
-rw-r--r--wifi/1.5/default/wifi_feature_flags.cpp54
-rw-r--r--wifi/1.5/default/wifi_iface_util.cpp35
-rw-r--r--wifi/1.5/default/wifi_iface_util.h7
-rw-r--r--wifi/1.5/default/wifi_legacy_hal.cpp4
61 files changed, 620 insertions, 110 deletions
diff --git a/audio/common/all-versions/default/service/Android.bp b/audio/common/all-versions/default/service/Android.bp
index 0d4775c6a8..71952c8545 100644
--- a/audio/common/all-versions/default/service/Android.bp
+++ b/audio/common/all-versions/default/service/Android.bp
@@ -13,11 +13,7 @@ cc_binary {
init_rc: ["android.hardware.audio.service.rc"],
relative_install_path: "hw",
vendor: true,
- // Prefer 32 bit as the binary must always be installed at the same
- // location for init to start it and the build system does not support
- // having two binaries installable to the same location even if they are
- // not installed in the same build.
- compile_multilib: "prefer32",
+ compile_multilib: "32",
srcs: ["service.cpp"],
cflags: [
@@ -29,6 +25,40 @@ cc_binary {
shared_libs: [
"libcutils",
"libbinder",
+ "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: [
+ "-Wall",
+ "-Wextra",
+ "-Werror",
+ ],
+
+ shared_libs: [
+ "libcutils",
+ "libbinder",
+ "libhwbinder",
"libhidlbase",
"liblog",
"libutils",
@@ -41,3 +71,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 bbc14adc6c..eab9c3ef94 100644
--- a/audio/common/all-versions/default/service/service.cpp
+++ b/audio/common/all-versions/default/service/service.cpp
@@ -30,6 +30,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.
@@ -45,6 +57,10 @@ static bool registerPassthroughServiceImplementations(Iter first, Iter last) {
}
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
::android::ProcessState::self()->startThreadPool();
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 4cff1b79a1..18149e5ccc 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 3b8ee2198e..3fb0260199 100644
--- a/compatibility_matrices/compatibility_matrix.4.xml
+++ b/compatibility_matrices/compatibility_matrix.4.xml
@@ -499,6 +499,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 0fb21a7443..1233ed6590 100644
--- a/compatibility_matrices/compatibility_matrix.5.xml
+++ b/compatibility_matrices/compatibility_matrix.5.xml
@@ -548,6 +548,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 aee2c5164b..1c51dea9ef 100644
--- a/compatibility_matrices/compatibility_matrix.6.xml
+++ b/compatibility_matrices/compatibility_matrix.6.xml
@@ -638,6 +638,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.current.xml b/compatibility_matrices/compatibility_matrix.current.xml
index 8b6e8414d0..55d4f973da 100644
--- a/compatibility_matrices/compatibility_matrix.current.xml
+++ b/compatibility_matrices/compatibility_matrix.current.xml
@@ -638,6 +638,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 cbd589afca..5b8a46f9e9 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
writepid /dev/cpuset/system-background/tasks
+ 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 efe6dadbc2..289a91ca3d 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
writepid /dev/cpuset/system-background/tasks
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 81ce89059c..5cc19bb82c 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
writepid /dev/cpuset/system-background/tasks
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 a296b0aace..802b99e7de 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
writepid /dev/cpuset/system-background/tasks
+ 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/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/usb/gadget/1.1/default/lib/UsbGadgetUtils.cpp b/usb/gadget/1.1/default/lib/UsbGadgetUtils.cpp
index 8402853b99..4c40bf88af 100644
--- a/usb/gadget/1.1/default/lib/UsbGadgetUtils.cpp
+++ b/usb/gadget/1.1/default/lib/UsbGadgetUtils.cpp
@@ -178,6 +178,9 @@ Status addGenericAndroidFunctions(MonitorFfs* monitorFfs, uint64_t functions, bo
Status addAdb(MonitorFfs* monitorFfs, int* functionCount) {
ALOGI("setCurrentUsbFunctions Adb");
+ if (!WriteStringToFile("1", DESC_USE_PATH))
+ return Status::ERROR;
+
if (!monitorFfs->addInotifyFd("/dev/usb-ffs/adb/")) return Status::ERROR;
if (linkFunction("ffs.adb", (*functionCount)++)) return Status::ERROR;
diff --git a/usb/gadget/1.2/default/lib/UsbGadgetUtils.cpp b/usb/gadget/1.2/default/lib/UsbGadgetUtils.cpp
index 898655651c..fa50821b5b 100644
--- a/usb/gadget/1.2/default/lib/UsbGadgetUtils.cpp
+++ b/usb/gadget/1.2/default/lib/UsbGadgetUtils.cpp
@@ -190,6 +190,9 @@ Status addGenericAndroidFunctions(MonitorFfs* monitorFfs, uint64_t functions, bo
Status addAdb(MonitorFfs* monitorFfs, int* functionCount) {
ALOGI("setCurrentUsbFunctions Adb");
+ if (!WriteStringToFile("1", DESC_USE_PATH))
+ return Status::ERROR;
+
if (!monitorFfs->addInotifyFd("/dev/usb-ffs/adb/")) return Status::ERROR;
if (linkFunction("ffs.adb", (*functionCount)++)) return Status::ERROR;
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/wifi/1.5/default/Android.mk b/wifi/1.5/default/Android.mk
index 1997b2209f..edb59bb085 100644
--- a/wifi/1.5/default/Android.mk
+++ b/wifi/1.5/default/Android.mk
@@ -42,6 +42,12 @@ endif
ifdef WIFI_AVOID_IFACE_RESET_MAC_CHANGE
LOCAL_CPPFLAGS += -DWIFI_AVOID_IFACE_RESET_MAC_CHANGE
endif
+ifdef QC_WIFI_HIDL_FEATURE_DUAL_AP
+LOCAL_CPPFLAGS += -DQC_WIFI_HIDL_FEATURE_DUAL_AP
+endif
+ifdef QC_WIFI_HIDL_FEATURE_DUAL_STA
+LOCAL_CPPFLAGS += -DQC_WIFI_HIDL_FEATURE_DUAL_STA
+endif
# Allow implicit fallthroughs in wifi_legacy_hal.cpp until they are fixed.
LOCAL_CFLAGS += -Wno-error=implicit-fallthrough
LOCAL_SRC_FILES := \
@@ -94,6 +100,10 @@ LOCAL_VINTF_FRAGMENTS := android.hardware.wifi@1.0-service.xml
LOCAL_MODULE_RELATIVE_PATH := hw
LOCAL_PROPRIETARY_MODULE := true
LOCAL_CPPFLAGS := -Wall -Werror -Wextra
+ifeq ($(TARGET_ARCH),arm)
+ LOCAL_CPPFLAGS += -DARCH_ARM_32
+endif
+
LOCAL_SRC_FILES := \
service.cpp
LOCAL_SHARED_LIBRARIES := \
@@ -103,6 +113,7 @@ LOCAL_SHARED_LIBRARIES := \
liblog \
libnl \
libutils \
+ libhwbinder \
libwifi-hal \
libwifi-system-iface \
libxml2 \
diff --git a/wifi/1.5/default/hidl_struct_util.cpp b/wifi/1.5/default/hidl_struct_util.cpp
index 338a8f13c1..ec8e0759a4 100644
--- a/wifi/1.5/default/hidl_struct_util.cpp
+++ b/wifi/1.5/default/hidl_struct_util.cpp
@@ -52,7 +52,7 @@ IWifiChip::ChipCapabilityMask convertLegacyLoggerFeatureToHidlChipCapability(
case legacy_hal::WIFI_LOGGER_POWER_EVENT_SUPPORTED:
return HidlChipCaps::DEBUG_RING_BUFFER_POWER_EVENT;
case legacy_hal::WIFI_LOGGER_WAKE_LOCK_SUPPORTED:
- return HidlChipCaps::DEBUG_RING_BUFFER_WAKELOCK_EVENT;
+ return HidlChipCaps::DEBUG_HOST_WAKE_REASON_STATS;
};
CHECK(false) << "Unknown legacy feature: " << feature;
return {};
@@ -158,10 +158,8 @@ bool convertLegacyFeaturesToHidlChipCapabilities(
}
}
- // There are no flags for these 3 in the legacy feature set. Adding them to
+ // There are no flags for these in the legacy feature set. Adding this to
// the set because all the current devices support it.
- *hidl_caps |= HidlChipCaps::DEBUG_RING_BUFFER_VENDOR_DATA;
- *hidl_caps |= HidlChipCaps::DEBUG_HOST_WAKE_REASON_STATS;
*hidl_caps |= HidlChipCaps::DEBUG_ERROR_ALERTS;
return true;
}
@@ -2102,7 +2100,7 @@ bool convertHidlNanDataPathInitiatorRequestToLegacy(
"ifaceName too long";
return false;
}
- strncpy(legacy_request->ndp_iface, hidl_request.ifaceName.c_str(),
+ strlcpy(legacy_request->ndp_iface, hidl_request.ifaceName.c_str(),
IFNAMSIZ + 1);
legacy_request->ndp_cfg.security_cfg =
(hidl_request.securityConfig.securityType !=
@@ -2189,7 +2187,7 @@ bool convertHidlNanDataPathIndicationResponseToLegacy(
"ifaceName too long";
return false;
}
- strncpy(legacy_request->ndp_iface, hidl_request.ifaceName.c_str(),
+ strlcpy(legacy_request->ndp_iface, hidl_request.ifaceName.c_str(),
IFNAMSIZ + 1);
legacy_request->ndp_cfg.security_cfg =
(hidl_request.securityConfig.securityType !=
diff --git a/wifi/1.5/default/service.cpp b/wifi/1.5/default/service.cpp
index 3de49b29bb..4c089d86ea 100644
--- a/wifi/1.5/default/service.cpp
+++ b/wifi/1.5/default/service.cpp
@@ -20,6 +20,8 @@
#include <signal.h>
#include <utils/Looper.h>
#include <utils/StrongPointer.h>
+#include <hwbinder/ProcessState.h>
+#include <cutils/properties.h>
#include "wifi.h"
#include "wifi_feature_flags.h"
@@ -38,6 +40,17 @@ using android::hardware::wifi::V1_5::implementation::legacy_hal::
using android::hardware::wifi::V1_5::implementation::mode_controller::
WifiModeController;
+#ifdef ARCH_ARM_32
+#define DEFAULT_WIFIHAL_HW_BINDER_SIZE_KB 16
+size_t getHWBinderMmapSize() {
+ size_t value = 0;
+ value = property_get_int32("persist.vendor.wifi.wifihal.hw.binder.size", DEFAULT_WIFIHAL_HW_BINDER_SIZE_KB);
+ if (!value) value = DEFAULT_WIFIHAL_HW_BINDER_SIZE_KB; // deafult to 1 page of 4 Kb
+
+ return 1024 * value;
+}
+#endif /* ARCH_ARM_32 */
+
#ifdef LAZY_SERVICE
const bool kLazyService = true;
#else
@@ -46,6 +59,9 @@ const bool kLazyService = false;
int main(int /*argc*/, char** argv) {
signal(SIGPIPE, SIG_IGN);
+#ifdef ARCH_ARM_32
+ android::hardware::ProcessState::initWithMmapSize(getHWBinderMmapSize());
+#endif /* ARCH_ARM_32 */
android::base::InitLogging(
argv, android::base::LogdLogger(android::base::SYSTEM));
LOG(INFO) << "Wifi Hal is booting up...";
diff --git a/wifi/1.5/default/wifi_chip.cpp b/wifi/1.5/default/wifi_chip.cpp
index 6bdff42149..d8e0a60133 100644
--- a/wifi/1.5/default/wifi_chip.cpp
+++ b/wifi/1.5/default/wifi_chip.cpp
@@ -22,6 +22,7 @@
#include <net/if.h>
#include <sys/stat.h>
#include <sys/sysmacros.h>
+#include <net/if.h>
#include "hidl_return_util.h"
#include "hidl_struct_util.h"
@@ -137,8 +138,10 @@ std::string getPredefinedP2pIfaceName() {
strlen(P2P_MGMT_DEVICE_PREFIX)) == 0) {
/* Get the p2p parent interface name from p2p device interface name set
* in property */
- strncpy(p2pParentIfname, buffer.data() + strlen(P2P_MGMT_DEVICE_PREFIX),
- strlen(buffer.data()) - strlen(P2P_MGMT_DEVICE_PREFIX));
+
+ strlcpy(p2pParentIfname, buffer.data() + strlen(P2P_MGMT_DEVICE_PREFIX),
+ sizeof(p2pParentIfname));
+
if (property_get(kActiveWlanIfaceNameProperty, primaryIfaceName.data(),
nullptr) == 0) {
return buffer.data();
@@ -232,7 +235,7 @@ bool cpioWriteHeader(int out_fd, struct stat& st, const char* file_name,
size_t file_name_len) {
std::array<char, 32 * 1024> read_buf;
ssize_t llen =
- sprintf(read_buf.data(),
+ snprintf(read_buf.data(), read_buf.size(),
"%s%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X%08X",
kCpioMagic, static_cast<int>(st.st_ino), st.st_mode, st.st_uid,
st.st_gid, static_cast<int>(st.st_nlink),
@@ -300,8 +303,8 @@ bool cpioWriteFileTrailer(int out_fd) {
std::array<char, 4096> read_buf;
read_buf.fill(0);
if (write(out_fd, read_buf.data(),
- sprintf(read_buf.data(), "070701%040X%056X%08XTRAILER!!!", 1,
- 0x0b, 0) +
+ snprintf(read_buf.data(), read_buf.size(),
+ "070701%040X%056X%08XTRAILER!!!", 1, 0x0b, 0) +
4) == -1) {
PLOG(ERROR) << "Error writing trailing bytes";
return false;
@@ -785,7 +788,36 @@ Return<void> WifiChip::triggerSubsystemRestart(
hidl_status_cb);
}
+void WifiChip::QcRemoveAndClearDynamicIfaces() {
+ for (const auto& iface : created_ap_ifaces_) {
+ std::string ifname = iface->getName();
+ legacy_hal::wifi_error legacy_status =
+ legacy_hal_.lock()->deleteVirtualInterface(ifname);
+ if (legacy_status != legacy_hal::WIFI_SUCCESS) {
+ LOG(ERROR) << "Failed to remove interface: " << ifname << " "
+ << legacyErrorToString(legacy_status);
+ }
+ }
+
+ for (const auto& iface : created_sta_ifaces_) {
+ std::string ifname = iface->getName();
+ legacy_hal::wifi_error legacy_status =
+ legacy_hal_.lock()->deleteVirtualInterface(ifname);
+ if (legacy_status != legacy_hal::WIFI_SUCCESS) {
+ LOG(ERROR) << "Failed to remove interface: " << ifname << " "
+ << legacyErrorToString(legacy_status);
+ }
+ }
+
+ // created_ap/sta_ifaces are also part of sta/ap_ifaces.
+ // Do no invalidate here.
+
+ created_ap_ifaces_.clear();
+ created_sta_ifaces_.clear();
+}
+
void WifiChip::invalidateAndRemoveAllIfaces() {
+ QcRemoveAndClearDynamicIfaces();
invalidateAndClearBridgedApAll();
invalidateAndClearAll(ap_ifaces_);
invalidateAndClearAll(nan_ifaces_);
@@ -975,6 +1007,7 @@ sp<WifiApIface> WifiChip::newWifiApIface(std::string& ifname) {
ap_instances = it.second;
}
}
+ iface_util_->setRandomMacAddressIndex(ap_ifaces_.size());
sp<WifiApIface> iface =
new WifiApIface(ifname, ap_instances, legacy_hal_, iface_util_);
ap_ifaces_.push_back(iface);
@@ -992,12 +1025,17 @@ WifiChip::createApIfaceInternal() {
if (!canCurrentModeSupportIfaceOfTypeWithCurrentIfaces(IfaceType::AP)) {
return {createWifiStatus(WifiStatusCode::ERROR_NOT_AVAILABLE), {}};
}
+ bool iface_created = false;
std::string ifname = allocateApIfaceName();
- WifiStatus status = createVirtualApInterface(ifname);
- if (status.code != WifiStatusCode::SUCCESS) {
- return {status, {}};
+ if (!if_nametoindex(ifname.c_str())) {
+ WifiStatus status = createVirtualApInterface(ifname);
+ if (status.code != WifiStatusCode::SUCCESS) {
+ return {status, {}};
+ }
+ iface_created = true;
}
sp<WifiApIface> iface = newWifiApIface(ifname);
+ if (iface_created) created_ap_ifaces_.push_back(iface);
return {createWifiStatus(WifiStatusCode::SUCCESS), iface};
}
@@ -1069,6 +1107,15 @@ WifiStatus WifiChip::removeApIfaceInternal(const std::string& ifname) {
// nan/rtt objects over AP iface. But, there is no harm to do it
// here and not make that assumption all over the place.
invalidateAndRemoveDependencies(ifname);
+ if (findUsingName(created_ap_ifaces_, ifname) != nullptr) {
+ legacy_hal::wifi_error legacy_status =
+ legacy_hal_.lock()->deleteVirtualInterface(ifname);
+ if (legacy_status != legacy_hal::WIFI_SUCCESS) {
+ LOG(ERROR) << "Failed to remove interface: " << ifname << " "
+ << legacyErrorToString(legacy_status);
+ }
+ invalidateAndClear(created_ap_ifaces_, iface);
+ }
// Clear the bridge interface and the iface instance.
invalidateAndClearBridgedAp(ifname);
invalidateAndClear(ap_ifaces_, iface);
@@ -1230,18 +1277,23 @@ WifiChip::createStaIfaceInternal() {
if (!canCurrentModeSupportIfaceOfTypeWithCurrentIfaces(IfaceType::STA)) {
return {createWifiStatus(WifiStatusCode::ERROR_NOT_AVAILABLE), {}};
}
+ bool iface_created = false;
std::string ifname = allocateStaIfaceName();
- legacy_hal::wifi_error legacy_status =
- legacy_hal_.lock()->createVirtualInterface(
- ifname,
- hidl_struct_util::convertHidlIfaceTypeToLegacy(IfaceType::STA));
- if (legacy_status != legacy_hal::WIFI_SUCCESS) {
- LOG(ERROR) << "Failed to add interface: " << ifname << " "
- << legacyErrorToString(legacy_status);
- return {createWifiStatusFromLegacyError(legacy_status), {}};
+ if (!if_nametoindex(ifname.c_str())) {
+ legacy_hal::wifi_error legacy_status =
+ legacy_hal_.lock()->createVirtualInterface(
+ ifname,
+ hidl_struct_util::convertHidlIfaceTypeToLegacy(IfaceType::STA));
+ if (legacy_status != legacy_hal::WIFI_SUCCESS) {
+ LOG(ERROR) << "Failed to add interface: " << ifname << " "
+ << legacyErrorToString(legacy_status);
+ return {createWifiStatusFromLegacyError(legacy_status), {}};
+ }
+ iface_created = true;
}
sp<WifiStaIface> iface = new WifiStaIface(ifname, legacy_hal_, iface_util_);
sta_ifaces_.push_back(iface);
+ if (iface_created) created_sta_ifaces_.push_back(iface);
for (const auto& callback : event_cb_handler_.getCallbacks()) {
if (!callback->onIfaceAdded(IfaceType::STA, ifname).isOk()) {
LOG(ERROR) << "Failed to invoke onIfaceAdded callback";
@@ -1275,11 +1327,14 @@ WifiStatus WifiChip::removeStaIfaceInternal(const std::string& ifname) {
}
// Invalidate & remove any dependent objects first.
invalidateAndRemoveDependencies(ifname);
- legacy_hal::wifi_error legacy_status =
- legacy_hal_.lock()->deleteVirtualInterface(ifname);
- if (legacy_status != legacy_hal::WIFI_SUCCESS) {
- LOG(ERROR) << "Failed to remove interface: " << ifname << " "
- << legacyErrorToString(legacy_status);
+ if (findUsingName(created_sta_ifaces_, ifname) != nullptr) {
+ legacy_hal::wifi_error legacy_status =
+ legacy_hal_.lock()->deleteVirtualInterface(ifname);
+ if (legacy_status != legacy_hal::WIFI_SUCCESS) {
+ LOG(ERROR) << "Failed to remove interface: " << ifname << " "
+ << legacyErrorToString(legacy_status);
+ }
+ invalidateAndClear(created_sta_ifaces_, iface);
}
invalidateAndClear(sta_ifaces_, iface);
for (const auto& callback : event_cb_handler_.getCallbacks()) {
@@ -1937,7 +1992,7 @@ uint32_t WifiChip::startIdxOfApIface() {
}
// AP iface names start with idx 1 for modes supporting
-// concurrent STA and not dual AP, else start with idx 0.
+// concurrent STA, else start with idx 0.
std::string WifiChip::allocateApIfaceName() {
// Check if we have a dedicated iface for AP.
std::vector<std::string> ifnames = getPredefinedApIfaceNames(false);
diff --git a/wifi/1.5/default/wifi_chip.h b/wifi/1.5/default/wifi_chip.h
index bd40ead35a..51ade5d810 100644
--- a/wifi/1.5/default/wifi_chip.h
+++ b/wifi/1.5/default/wifi_chip.h
@@ -306,6 +306,7 @@ class WifiChip : public V1_5::IWifiChip {
void invalidateAndClearBridgedAp(const std::string& br_name);
bool findUsingNameFromBridgedApInstances(const std::string& name);
WifiStatus triggerSubsystemRestartInternal();
+ void QcRemoveAndClearDynamicIfaces();
ChipId chip_id_;
std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal_;
@@ -331,6 +332,10 @@ class WifiChip : public V1_5::IWifiChip {
const std::function<void(const std::string&)> subsystemCallbackHandler_;
std::map<std::string, std::vector<std::string>> br_ifaces_ap_instances_;
+
+ std::vector<sp<WifiApIface>> created_ap_ifaces_;
+ std::vector<sp<WifiStaIface>> created_sta_ifaces_;
+
DISALLOW_COPY_AND_ASSIGN(WifiChip);
};
diff --git a/wifi/1.5/default/wifi_feature_flags.cpp b/wifi/1.5/default/wifi_feature_flags.cpp
index 124ba32e9f..84697f80e8 100644
--- a/wifi/1.5/default/wifi_feature_flags.cpp
+++ b/wifi/1.5/default/wifi_feature_flags.cpp
@@ -84,14 +84,54 @@ constexpr ChipModeId kMainModeId = chip_mode_ids::kV3;
# define WIFI_HAL_INTERFACE_COMBINATIONS {{{STA}, 1}, {{P2P}, 1}}
# endif
# else
-# ifdef WIFI_HIDL_FEATURE_AWARE
-// (1 STA + 1 AP) or (1 STA + 1 of (P2P or NAN))
-# define WIFI_HAL_INTERFACE_COMBINATIONS {{{STA}, 1}, {{AP}, 1}},\
- {{{STA}, 1}, {{P2P, NAN}, 1}}
+# if defined(QC_WIFI_HIDL_FEATURE_DUAL_AP) && defined(QC_WIFI_HIDL_FEATURE_DUAL_STA)
+# ifdef WIFI_HIDL_FEATURE_AWARE
+// (1 STA + 1 AP) or (1 STA + 1 of (P2P or NAN)) or (2 AP) or (2 STA)
+# define WIFI_HAL_INTERFACE_COMBINATIONS {{{STA}, 1}, {{AP}, 1}},\
+ {{{STA}, 1}, {{P2P, NAN}, 1}},\
+ {{{AP}, 2}},\
+ {{{STA}, 2}}
+# else
+// (1 STA + 1 AP) or (1 STA + 1 P2P) or (2 AP) or (2 STA)
+# define WIFI_HAL_INTERFACE_COMBINATIONS {{{STA}, 1}, {{AP}, 1}},\
+ {{{STA}, 1}, {{P2P}, 1}},\
+ {{{AP}, 2}},\
+ {{{STA}, 2}}
+# endif
+# elif defined(QC_WIFI_HIDL_FEATURE_DUAL_AP)
+# ifdef WIFI_HIDL_FEATURE_AWARE
+// (1 STA + 1 AP) or (1 STA + 1 of (P2P or NAN)) or (2 AP)
+# define WIFI_HAL_INTERFACE_COMBINATIONS {{{STA}, 1}, {{AP}, 1}},\
+ {{{STA}, 1}, {{P2P, NAN}, 1}},\
+ {{{AP}, 2}}
+# else
+// (1 STA + 1 AP) or (1 STA + 1 P2P) or (2 AP)
+# define WIFI_HAL_INTERFACE_COMBINATIONS {{{STA}, 1}, {{AP}, 1}},\
+ {{{STA}, 1}, {{P2P}, 1}},\
+ {{{AP}, 2}}
+# endif
+# elif defined(QC_WIFI_HIDL_FEATURE_DUAL_STA)
+# ifdef WIFI_HIDL_FEATURE_AWARE
+// (1 STA + 1 AP) or (1 STA + 1 of (P2P or NAN)) or (2 STA)
+# define WIFI_HAL_INTERFACE_COMBINATIONS {{{STA}, 1}, {{AP}, 1}},\
+ {{{STA}, 1}, {{P2P, NAN}, 1}},\
+ {{{STA}, 2}}
+# else
+// (1 STA + 1 AP) or (1 STA + 1 P2P) or (2 STA)
+# define WIFI_HAL_INTERFACE_COMBINATIONS {{{STA}, 1}, {{AP}, 1}},\
+ {{{STA}, 1}, {{P2P}, 1}},\
+ {{{STA}, 2}}
+# endif
# else
-// (1 STA + 1 AP) or (1 STA + 1 P2P)
-# define WIFI_HAL_INTERFACE_COMBINATIONS {{{STA}, 1}, {{AP}, 1}},\
- {{{STA}, 1}, {{P2P}, 1}}
+# ifdef WIFI_HIDL_FEATURE_AWARE
+// (1 STA + 1 AP) or (1 STA + 1 of (P2P or NAN))
+# define WIFI_HAL_INTERFACE_COMBINATIONS {{{STA}, 1}, {{AP}, 1}},\
+ {{{STA}, 1}, {{P2P, NAN}, 1}}
+# else
+// (1 STA + 1 AP) or (1 STA + 1 P2P)
+# define WIFI_HAL_INTERFACE_COMBINATIONS {{{STA}, 1}, {{AP}, 1}},\
+ {{{STA}, 1}, {{P2P}, 1}}
+# endif
# endif
# endif
#else
diff --git a/wifi/1.5/default/wifi_iface_util.cpp b/wifi/1.5/default/wifi_iface_util.cpp
index 7bf830b875..f1c182fc7d 100644
--- a/wifi/1.5/default/wifi_iface_util.cpp
+++ b/wifi/1.5/default/wifi_iface_util.cpp
@@ -45,8 +45,11 @@ WifiIfaceUtil::WifiIfaceUtil(
const std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal)
: iface_tool_(iface_tool),
legacy_hal_(legacy_hal),
- random_mac_address_(nullptr),
- event_handlers_map_() {}
+ random_mac_address_index_(0),
+ event_handlers_map_() {
+ for (int i=0; i < MAX_RANDOM_MAC_ADDR_INDEX; i++)
+ random_mac_address_[i] = nullptr;
+}
std::array<uint8_t, 6> WifiIfaceUtil::getFactoryMacAddress(
const std::string& iface_name) {
@@ -56,14 +59,21 @@ std::array<uint8_t, 6> WifiIfaceUtil::getFactoryMacAddress(
bool WifiIfaceUtil::setMacAddress(const std::string& iface_name,
const std::array<uint8_t, 6>& mac) {
#ifndef WIFI_AVOID_IFACE_RESET_MAC_CHANGE
- if (!iface_tool_.lock()->SetUpState(iface_name.c_str(), false)) {
+ legacy_hal::wifi_error legacy_status;
+ uint64_t legacy_feature_set;
+ std::tie(legacy_status, legacy_feature_set) =
+ legacy_hal_.lock()->getSupportedFeatureSet(iface_name);
+
+ if (!(legacy_feature_set & WIFI_FEATURE_DYNAMIC_SET_MAC) &&
+ !iface_tool_.lock()->SetUpState(iface_name.c_str(), false)) {
LOG(ERROR) << "SetUpState(false) failed.";
return false;
}
#endif
bool success = iface_tool_.lock()->SetMacAddress(iface_name.c_str(), mac);
#ifndef WIFI_AVOID_IFACE_RESET_MAC_CHANGE
- if (!iface_tool_.lock()->SetUpState(iface_name.c_str(), true)) {
+ if (!(legacy_feature_set & WIFI_FEATURE_DYNAMIC_SET_MAC) &&
+ !iface_tool_.lock()->SetUpState(iface_name.c_str(), true)) {
LOG(ERROR) << "SetUpState(true) failed. Wait for driver ready.";
// Wait for driver ready and try to set iface UP again
if (legacy_hal_.lock()->waitForDriverReady() !=
@@ -93,13 +103,22 @@ bool WifiIfaceUtil::setMacAddress(const std::string& iface_name,
return success;
}
+void WifiIfaceUtil::setRandomMacAddressIndex(int idx) {
+ if (idx >= MAX_RANDOM_MAC_ADDR_INDEX) {
+ LOG(ERROR) << "Requested random mac address index crossed max limit!!";
+ return;
+ }
+
+ random_mac_address_index_ = idx;
+}
+
std::array<uint8_t, 6> WifiIfaceUtil::getOrCreateRandomMacAddress() {
- if (random_mac_address_) {
- return *random_mac_address_.get();
+ if (random_mac_address_[random_mac_address_index_]) {
+ return *random_mac_address_[random_mac_address_index_].get();
}
- random_mac_address_ =
+ random_mac_address_[random_mac_address_index_] =
std::make_unique<std::array<uint8_t, 6>>(createRandomMacAddress());
- return *random_mac_address_.get();
+ return *random_mac_address_[random_mac_address_index_].get();
}
void WifiIfaceUtil::registerIfaceEventHandlers(const std::string& iface_name,
diff --git a/wifi/1.5/default/wifi_iface_util.h b/wifi/1.5/default/wifi_iface_util.h
index 544f575d41..cb30ca8f9e 100644
--- a/wifi/1.5/default/wifi_iface_util.h
+++ b/wifi/1.5/default/wifi_iface_util.h
@@ -17,6 +17,8 @@
#ifndef WIFI_IFACE_UTIL_H_
#define WIFI_IFACE_UTIL_H_
+#define MAX_RANDOM_MAC_ADDR_INDEX 5
+
#include <wifi_system/interface_tool.h>
#include <android/hardware/wifi/1.0/IWifi.h>
@@ -55,6 +57,7 @@ class WifiIfaceUtil {
// daemon. (So, changes on every reboot)
virtual std::array<uint8_t, 6> getOrCreateRandomMacAddress();
+ virtual void setRandomMacAddressIndex(int idx);
// Register for any iface event callbacks for the provided interface.
virtual void registerIfaceEventHandlers(const std::string& iface_name,
IfaceEventHandlers handlers);
@@ -77,7 +80,9 @@ class WifiIfaceUtil {
private:
std::weak_ptr<wifi_system::InterfaceTool> iface_tool_;
std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal_;
- std::unique_ptr<std::array<uint8_t, 6>> random_mac_address_;
+ std::unique_ptr<std::array<uint8_t, 6>> random_mac_address_[MAX_RANDOM_MAC_ADDR_INDEX];
+
+ int random_mac_address_index_;
std::map<std::string, IfaceEventHandlers> event_handlers_map_;
};
diff --git a/wifi/1.5/default/wifi_legacy_hal.cpp b/wifi/1.5/default/wifi_legacy_hal.cpp
index 5074252d3d..109c482cb2 100644
--- a/wifi/1.5/default/wifi_legacy_hal.cpp
+++ b/wifi/1.5/default/wifi_legacy_hal.cpp
@@ -37,8 +37,8 @@ static constexpr uint32_t kLinkLayerStatsDataMpduSizeThreshold = 128;
static constexpr uint32_t kMaxWakeReasonStatsArraySize = 32;
static constexpr uint32_t kMaxRingBuffers = 10;
static constexpr uint32_t kMaxWifiUsableChannels = 256;
-// need a long timeout (1000ms) for chips that unload their driver.
-static constexpr uint32_t kMaxStopCompleteWaitMs = 1000;
+// need a long timeout (2000ms) for chips that unload their driver.
+static constexpr uint32_t kMaxStopCompleteWaitMs = 2000;
static constexpr char kDriverPropName[] = "wlan.driver.status";
// Helper function to create a non-const char* for legacy Hal API's.