diff --git a/common/fmq/aidl/Android.bp b/common/fmq/aidl/Android.bp index 004adab514..9389712733 100644 --- a/common/fmq/aidl/Android.bp +++ b/common/fmq/aidl/Android.bp @@ -9,6 +9,9 @@ aidl_interface { srcs: [ "android/hardware/common/fmq/*.aidl", ], + imports: [ + "android.hardware.common", + ], stability: "vintf", backend: { java: { diff --git a/common/fmq/aidl/aidl_api/android.hardware.common.fmq/current/android/hardware/common/fmq/GrantorDescriptor.aidl b/common/fmq/aidl/aidl_api/android.hardware.common.fmq/current/android/hardware/common/fmq/GrantorDescriptor.aidl index 7ac1930715..03277964ae 100644 --- a/common/fmq/aidl/aidl_api/android.hardware.common.fmq/current/android/hardware/common/fmq/GrantorDescriptor.aidl +++ b/common/fmq/aidl/aidl_api/android.hardware.common.fmq/current/android/hardware/common/fmq/GrantorDescriptor.aidl @@ -2,13 +2,14 @@ // THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. // /////////////////////////////////////////////////////////////////////////////// -// This file is a snapshot of an AIDL interface (or parcelable). Do not try to -// edit this file. It looks like you are doing that because you have modified -// an AIDL interface in a backward-incompatible way, e.g., deleting a function -// from an interface or a field from a parcelable and it broke the build. That -// breakage is intended. +// This file is a snapshot of an AIDL file. Do not edit it manually. There are +// two cases: +// 1). this is a frozen version file - do not edit this in any case. +// 2). this is a 'current' file. If you make a backwards compatible change to +// the interface (from the latest frozen version), the build system will +// prompt you to update this file with `m -update-api`. // -// You must not make a backward incompatible changes to the AIDL files built +// You must not make a backward incompatible change to any AIDL file built // with the aidl_interface module type with versions property set. The module // type is used to build AIDL files in a way that they can be used across // independently updatable components of the system. If a device is shipped @@ -18,6 +19,7 @@ package android.hardware.common.fmq; @VintfStability parcelable GrantorDescriptor { + int fdIndex; int offset; long extent; } diff --git a/common/fmq/aidl/aidl_api/android.hardware.common.fmq/current/android/hardware/common/fmq/MQDescriptor.aidl b/common/fmq/aidl/aidl_api/android.hardware.common.fmq/current/android/hardware/common/fmq/MQDescriptor.aidl index 26073691f1..56f1de3cd8 100644 --- a/common/fmq/aidl/aidl_api/android.hardware.common.fmq/current/android/hardware/common/fmq/MQDescriptor.aidl +++ b/common/fmq/aidl/aidl_api/android.hardware.common.fmq/current/android/hardware/common/fmq/MQDescriptor.aidl @@ -2,13 +2,14 @@ // THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. // /////////////////////////////////////////////////////////////////////////////// -// This file is a snapshot of an AIDL interface (or parcelable). Do not try to -// edit this file. It looks like you are doing that because you have modified -// an AIDL interface in a backward-incompatible way, e.g., deleting a function -// from an interface or a field from a parcelable and it broke the build. That -// breakage is intended. +// This file is a snapshot of an AIDL file. Do not edit it manually. There are +// two cases: +// 1). this is a frozen version file - do not edit this in any case. +// 2). this is a 'current' file. If you make a backwards compatible change to +// the interface (from the latest frozen version), the build system will +// prompt you to update this file with `m -update-api`. // -// You must not make a backward incompatible changes to the AIDL files built +// You must not make a backward incompatible change to any AIDL file built // with the aidl_interface module type with versions property set. The module // type is used to build AIDL files in a way that they can be used across // independently updatable components of the system. If a device is shipped @@ -19,7 +20,7 @@ package android.hardware.common.fmq; @VintfStability parcelable MQDescriptor { android.hardware.common.fmq.GrantorDescriptor[] grantors; - ParcelFileDescriptor fileDescriptor; + android.hardware.common.NativeHandle handle; int quantum; int flags; } diff --git a/common/fmq/aidl/aidl_api/android.hardware.common.fmq/current/android/hardware/common/fmq/SynchronizedReadWrite.aidl b/common/fmq/aidl/aidl_api/android.hardware.common.fmq/current/android/hardware/common/fmq/SynchronizedReadWrite.aidl index 2142bdbd13..264171dca1 100644 --- a/common/fmq/aidl/aidl_api/android.hardware.common.fmq/current/android/hardware/common/fmq/SynchronizedReadWrite.aidl +++ b/common/fmq/aidl/aidl_api/android.hardware.common.fmq/current/android/hardware/common/fmq/SynchronizedReadWrite.aidl @@ -2,13 +2,14 @@ // THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. // /////////////////////////////////////////////////////////////////////////////// -// This file is a snapshot of an AIDL interface (or parcelable). Do not try to -// edit this file. It looks like you are doing that because you have modified -// an AIDL interface in a backward-incompatible way, e.g., deleting a function -// from an interface or a field from a parcelable and it broke the build. That -// breakage is intended. +// This file is a snapshot of an AIDL file. Do not edit it manually. There are +// two cases: +// 1). this is a frozen version file - do not edit this in any case. +// 2). this is a 'current' file. If you make a backwards compatible change to +// the interface (from the latest frozen version), the build system will +// prompt you to update this file with `m -update-api`. // -// You must not make a backward incompatible changes to the AIDL files built +// You must not make a backward incompatible change to any AIDL file built // with the aidl_interface module type with versions property set. The module // type is used to build AIDL files in a way that they can be used across // independently updatable components of the system. If a device is shipped diff --git a/common/fmq/aidl/aidl_api/android.hardware.common.fmq/current/android/hardware/common/fmq/UnsynchronizedWrite.aidl b/common/fmq/aidl/aidl_api/android.hardware.common.fmq/current/android/hardware/common/fmq/UnsynchronizedWrite.aidl index 1220674e13..eaf2ffdd16 100644 --- a/common/fmq/aidl/aidl_api/android.hardware.common.fmq/current/android/hardware/common/fmq/UnsynchronizedWrite.aidl +++ b/common/fmq/aidl/aidl_api/android.hardware.common.fmq/current/android/hardware/common/fmq/UnsynchronizedWrite.aidl @@ -2,13 +2,14 @@ // THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. // /////////////////////////////////////////////////////////////////////////////// -// This file is a snapshot of an AIDL interface (or parcelable). Do not try to -// edit this file. It looks like you are doing that because you have modified -// an AIDL interface in a backward-incompatible way, e.g., deleting a function -// from an interface or a field from a parcelable and it broke the build. That -// breakage is intended. +// This file is a snapshot of an AIDL file. Do not edit it manually. There are +// two cases: +// 1). this is a frozen version file - do not edit this in any case. +// 2). this is a 'current' file. If you make a backwards compatible change to +// the interface (from the latest frozen version), the build system will +// prompt you to update this file with `m -update-api`. // -// You must not make a backward incompatible changes to the AIDL files built +// You must not make a backward incompatible change to any AIDL file built // with the aidl_interface module type with versions property set. The module // type is used to build AIDL files in a way that they can be used across // independently updatable components of the system. If a device is shipped diff --git a/common/fmq/aidl/android/hardware/common/fmq/GrantorDescriptor.aidl b/common/fmq/aidl/android/hardware/common/fmq/GrantorDescriptor.aidl index ca69d94d55..672415e65a 100644 --- a/common/fmq/aidl/android/hardware/common/fmq/GrantorDescriptor.aidl +++ b/common/fmq/aidl/android/hardware/common/fmq/GrantorDescriptor.aidl @@ -21,6 +21,10 @@ package android.hardware.common.fmq; */ @VintfStability parcelable GrantorDescriptor { + /* + * Index of file descriptor for this grantor + */ + int fdIndex; /* * The offset of this descriptor in the shared memory in bytes. */ diff --git a/common/fmq/aidl/android/hardware/common/fmq/MQDescriptor.aidl b/common/fmq/aidl/android/hardware/common/fmq/MQDescriptor.aidl index 82917d6fbe..46622f00a9 100644 --- a/common/fmq/aidl/android/hardware/common/fmq/MQDescriptor.aidl +++ b/common/fmq/aidl/android/hardware/common/fmq/MQDescriptor.aidl @@ -16,6 +16,7 @@ package android.hardware.common.fmq; +import android.hardware.common.NativeHandle; import android.hardware.common.fmq.GrantorDescriptor; /* @@ -34,8 +35,11 @@ parcelable MQDescriptor { * for blocking operations in the shared memory. */ GrantorDescriptor[] grantors; - /* File descriptor for shared memory used in the message queue */ - ParcelFileDescriptor fileDescriptor; + /* + * NativeHandle that contains the file descriptors for shared memory used + * in the message queue + */ + NativeHandle handle; /* Size of each item, T, in bytes */ int quantum; /* EventFlag word for blocking operations */ diff --git a/tests/msgq/1.0/ITestMsgQ.hal b/tests/msgq/1.0/ITestMsgQ.hal index bd10237c90..0cf9c7c71e 100644 --- a/tests/msgq/1.0/ITestMsgQ.hal +++ b/tests/msgq/1.0/ITestMsgQ.hal @@ -41,12 +41,15 @@ interface ITestMsgQ { * * @param configureFmq The server sets up a new unsynchronized FMQ if * this parameter is true. + * @param userFd True to initialize the message queue with a user supplied + * file descriptor for the ring buffer. + * False to let the message queue use a single FD for everything. * * @return ret True if successful. * @return mqDesc This structure describes the unsynchronized FMQ that was * set up by the service. Client can use it to set up the FMQ at its end. */ - getFmqUnsyncWrite(bool configureFmq) generates(bool ret, fmq_unsync mqDesc); + getFmqUnsyncWrite(bool configureFmq, bool userFd) generates(bool ret, fmq_unsync mqDesc); /** * This method request the service to write into the synchronized read/write diff --git a/tests/msgq/1.0/default/Android.bp b/tests/msgq/1.0/default/Android.bp index 6e7cd4478b..a50206bb75 100644 --- a/tests/msgq/1.0/default/Android.bp +++ b/tests/msgq/1.0/default/Android.bp @@ -91,9 +91,10 @@ cc_test { // These are static libs only for testing purposes and portability. Shared // libs should be used on device. static_libs: [ + "android.hardware.common-unstable-ndk_platform", + "android.hardware.common.fmq-unstable-ndk_platform", "android.hardware.tests.msgq@1.0", "android.fmq.test-ndk_platform", - "android.hardware.common.fmq-unstable-ndk_platform", ], whole_static_libs: [ "android.hardware.tests.msgq@1.0-impl", diff --git a/tests/msgq/1.0/default/TestMsgQ.cpp b/tests/msgq/1.0/default/TestMsgQ.cpp index 44737378b3..4726ffe5e9 100644 --- a/tests/msgq/1.0/default/TestMsgQ.cpp +++ b/tests/msgq/1.0/default/TestMsgQ.cpp @@ -41,10 +41,19 @@ Return TestMsgQ::configureFmqSyncReadWrite( return true; } -Return TestMsgQ::getFmqUnsyncWrite(bool configureFmq, getFmqUnsyncWrite_cb _hidl_cb) { +Return TestMsgQ::getFmqUnsyncWrite(bool configureFmq, bool userFd, + getFmqUnsyncWrite_cb _hidl_cb) { if (configureFmq) { static constexpr size_t kNumElementsInQueue = 1024; - mFmqUnsynchronized.reset(new (std::nothrow) MessageQueueUnsync(kNumElementsInQueue)); + static constexpr size_t kElementSizeBytes = sizeof(int32_t); + android::base::unique_fd ringbufferFd; + if (userFd) { + ringbufferFd.reset( + ::ashmem_create_region("UnsyncWrite", kNumElementsInQueue * kElementSizeBytes)); + } + mFmqUnsynchronized.reset(new (std::nothrow) MessageQueueUnsync( + kNumElementsInQueue, false, std::move(ringbufferFd), + kNumElementsInQueue * kElementSizeBytes)); } if ((mFmqUnsynchronized == nullptr) || (mFmqUnsynchronized->isValid() == false)) { diff --git a/tests/msgq/1.0/default/TestMsgQ.h b/tests/msgq/1.0/default/TestMsgQ.h index 8a204b725d..49675fe306 100644 --- a/tests/msgq/1.0/default/TestMsgQ.h +++ b/tests/msgq/1.0/default/TestMsgQ.h @@ -56,7 +56,8 @@ struct TestMsgQ : public ITestMsgQ { // Methods from ::android::hardware::tests::msgq::V1_0::ITestMsgQ follow. Return configureFmqSyncReadWrite(const MQDescriptorSync& mqDesc) override; - Return getFmqUnsyncWrite(bool configureFmq, getFmqUnsyncWrite_cb _hidl_cb) override; + Return getFmqUnsyncWrite(bool configureFmq, bool userFd, + getFmqUnsyncWrite_cb _hidl_cb) override; Return requestWriteFmqSync(int32_t count) override; Return requestReadFmqSync(int32_t count) override; Return requestWriteFmqUnsync(int32_t count) override;