From 6329e731afde64849a926b21ea0e554c8654bde6 Mon Sep 17 00:00:00 2001 From: chris Date: Mon, 15 Jan 2024 16:08:08 +0800 Subject: [PATCH] =?UTF-8?q?TicketNo=EF=BC=9A=E6=97=A0=20=20=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E6=8F=8F=E8=BF=B0=EF=BC=9A=E6=9B=B4=E6=96=B0=E9=97=AD?= =?UTF-8?q?=E6=BA=90=E5=BA=93=E5=92=8C=E9=85=8D=E7=BD=AE=20Team=EF=BC=9AH?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Ia487848e877d12a26a44b8193378881ba158f4e5 --- uis7885/hardware/BUILD.gn | 2 +- uis7885/hardware/aosp/BUILD.gn | 1 + .../gralloc/types/lib/libgralloctypes.z.so | Bin 70168 -> 70168 bytes .../nativewindow/lib/libnativewindow.z.so | Bin 32104 -> 32096 bytes .../frameworks/native/libs/ui/lib/libui.z.so | Bin 179848 -> 179848 bytes .../graphics/allocator/2.0/BUILD.gn | 21 +- .../allocator/2.0/lib/liballocator2.0.z.so | Bin 75928 -> 75920 bytes .../graphics/allocator/3.0/BUILD.gn | 2 +- .../allocator/3.0/lib/liballocator3.0.z.so | Bin 75920 -> 75920 bytes .../allocator/4.0/lib/liballocator4.0.z.so | Bin 71568 -> 71568 bytes .../interfaces/graphics/common/1.0/BUILD.gn | 2 +- .../graphics/common/1.0/lib/libcommon1.0.z.so | Bin 4752 -> 4752 bytes .../graphics/common/1.1/lib/libcommon1.1.z.so | Bin 4752 -> 4752 bytes .../interfaces/graphics/common/1.2/BUILD.gn | 1 + .../graphics/common/1.2/lib/libcommon1.2.z.so | Bin 5480 -> 5480 bytes .../android/hardware/graphics/common/BUILD.gn | 1 + .../graphics/common/lib/libcommon-V3-ndk.z.so | Bin 31584 -> 31584 bytes .../interfaces/graphics/mapper/2.0/BUILD.gn | 5 +- .../graphics/mapper/2.0/default/Android.bp | 45 -- .../graphics/mapper/2.0/lib/libmapper2.0.z.so | Bin 90968 -> 90960 bytes .../interfaces/graphics/mapper/2.1/BUILD.gn | 4 +- .../graphics/mapper/2.1/lib/libmapper2.1.z.so | Bin 90688 -> 90688 bytes .../interfaces/graphics/mapper/3.0/BUILD.gn | 3 +- .../graphics/mapper/3.0/lib/libmapper3.0.z.so | Bin 104368 -> 104400 bytes .../interfaces/graphics/mapper/4.0/BUILD.gn | 3 +- .../graphics/mapper/4.0/lib/libmapper4.0.z.so | Bin 135776 -> 135792 bytes .../aosp/hardware/libhardware/BUILD.gn | 2 +- .../hardware/libhardware/lib/libhardware.z.so | Bin 8592 -> 8592 bytes .../libhardware/modules/gralloc/BUILD.gn | 2 +- .../hardware/libhardware/modules/gralloc/gr.h | 63 -- .../modules/gralloc/gralloc_priv.h | 114 ---- .../gralloc/lib/libgralloc.default.z.so | Bin 16280 -> 16280 bytes .../hardware/libhardware/vndksupport/linker.h | 41 -- .../aosp/system/core/libcutils/BUILD.gn | 2 +- .../core/libcutils/lib/libaosp_cutils.z.so | Bin 8272 -> 8272 bytes .../aosp/system/core/libgrallocusage/BUILD.gn | 1 + .../grallocusage/GrallocUsageConversion.h | 47 -- .../libgrallocusage/lib/libgrallocusage.z.so | Bin 5080 -> 5088 bytes .../aosp/system/core/libsync/BUILD.gn | 2 +- .../core/libsync/include/android/sync.h | 56 -- .../system/core/libsync/include/ndk/sync.h | 112 ---- .../system/core/libsync/include/sync/sync.h | 56 -- .../aosp/system/core/libsync/lib/libsync.z.so | Bin 8592 -> 8592 bytes .../aosp/system/core/libutils/BUILD.gn | 3 +- .../system/core/libutils/FuzzFormatTypes.h | 61 -- .../system/core/libutils/Looper_test_pipe.h | 55 -- .../aosp/system/core/libutils/SharedBuffer.h | 153 ----- .../system/core/libutils/Singleton_test.h | 41 -- .../core/libutils/lib/libaosp_utils.z.so | Bin 66240 -> 66240 bytes .../aosp/system/libbase/lib/libaosp_base.z.so | Bin 23896 -> 23904 bytes .../system/libfmq/base/fmq/MQDescriptorBase.h | 95 --- .../libfmq/tests/aidl/default/TestAidlMsgQ.h | 80 --- uis7885/hardware/aosp/system/libhidl/BUILD.gn | 2 +- .../aosp/system/libhidl/lib/libhidlbase.z.so | Bin 478480 -> 478352 bytes .../include/hidlmemory/HidlMemoryToken.h | 36 -- .../include/hidlmemory/mapping.h | 35 -- .../include/hwminijail/HardwareMinijail.h | 30 - .../system/libhidl/transport/InternalStatic.h | 42 -- .../allocator/1.0/default/AshmemAllocator.h | 51 -- .../utils/include/hidlmemory/FrameworkUtils.h | 34 -- .../memory/1.0/default/AshmemMapper.h | 52 -- .../memory/1.0/default/AshmemMemory.h | 69 --- .../transport/memory/1.0/default/HidlFetch.h | 36 -- .../1.0/utils/include/hidl/HybridInterface.h | 565 ------------------ .../hardware/aosp/system/libhwbinder/BUILD.gn | 2 +- .../system/libhwbinder/lib/libhwbinder.z.so | Bin 156528 -> 156536 bytes .../libhwbinder/vts/performance/PerfTest.h | 155 ----- .../aosp/system/memory/libdmabufheap/BUILD.gn | 3 +- .../libdmabufheap/lib/libaosp_dmabufheap.z.so | Bin 34376 -> 34376 bytes .../libdmabufheap/tests/dmabuf_heap_test.h | 32 - .../aosp/system/memory/libion/BUILD.gn | 3 +- .../system/memory/libion/include/ion/ion.h | 62 -- .../memory/libion/kernel-headers/linux/ion.h | 78 --- .../libion/kernel-headers/linux/ion_4.12.h | 50 -- .../libion/kernel-headers/linux/ion_4.19.h | 63 -- .../libion/kernel-headers/linux/ion_test.h | 38 -- .../aosp/system/memory/libion/lib/libion.z.so | Bin 11168 -> 11168 bytes .../original-kernel-headers/linux/ion.h | 196 ------ .../original-kernel-headers/linux/ion_4.12.h | 125 ---- .../original-kernel-headers/linux/ion_4.19.h | 160 ----- .../original-kernel-headers/linux/ion_test.h | 70 --- .../memory/libion/tests/ion_test_fixture.h | 36 -- .../aosp/system/memory/libmemion/BUILD.gn | 2 +- .../memory/libmemion/lib/libmemion.z.so | Bin 16344 -> 16344 bytes .../sprd/modules/minidump/bin/minidumpd | Bin 19968 -> 19960 bytes .../minidump/etc/init.uis7885.minidump.cfg | 2 + .../sprd/modules/minidump/minidump-new.h | 133 ----- .../vendor/sprd/modules/minidump/minidump.h | 189 ------ uis7885/hardware/aosp/wrapper/BUILD.gn | 1 + .../aosp/wrapper/lib/libutils_wrapper.z.so | Bin 4824 -> 4824 bytes uis7885/hardware/bundle.json | 35 +- uis7885/hardware/camera/BUILD.gn | 23 +- .../camera/lib/libcamv4l2adapter.z.so | Bin 64624 -> 0 bytes uis7885/hardware/display/BUILD.gn | 46 +- .../lib/libdisplay_buffer_vdi_impl.z.so | Bin 10000 -> 10000 bytes .../lib/libdisplay_composer_vdi_impl.z.so | Bin 33880 -> 32480 bytes .../display/lib/libdisplay_device.z.so | Bin 184664 -> 158008 bytes .../hardware/display/lib/libdisplay_gfx.z.so | Bin 23536 -> 20936 bytes .../display/lib/libdisplay_gralloc.z.so | Bin 50392 -> 44632 bytes uis7885/hardware/location/BUILD.gn | 218 +++---- uis7885/hardware/location/gnss/BUILD.gn | 3 +- .../location/gnss/lib/vendorGnssAdapter.so | Bin 19232 -> 19232 bytes .../location/gnss/vendorGnssAdapter.h | 382 ------------ uis7885/hardware/omx_il/components/BUILD.gn | 1 + .../components/video/avc/dec/hw/BUILD.gn | 34 +- .../hw/lib64/libstagefright_sprd_h264dec.z.so | Bin 83264 -> 83352 bytes .../components/video/vpp/deintl/BUILD.gn | 4 +- .../lib/libstagefright_sprd_deintl.z.so | Bin 25304 -> 25304 bytes uis7885/hardware/omx_il/core/BUILD.gn | 1 + .../hardware/omx_il/core/lib/libOMX_Core.z.so | Bin 12392 -> 12392 bytes .../hardware/omx_il/libstagefrighthw/BUILD.gn | 3 +- .../lib/libstagefrighthw.z.so | Bin 61104 -> 61104 bytes uis7885/hardware/omx_il/libutils/BUILD.gn | 11 +- .../omx_il/libutils/lib/libomx_utils.z.so | Bin 21128 -> 21128 bytes 114 files changed, 213 insertions(+), 3976 deletions(-) mode change 100755 => 100644 uis7885/hardware/BUILD.gn delete mode 100755 uis7885/hardware/aosp/hardware/interfaces/graphics/mapper/2.0/default/Android.bp delete mode 100755 uis7885/hardware/aosp/hardware/libhardware/modules/gralloc/gr.h delete mode 100755 uis7885/hardware/aosp/hardware/libhardware/modules/gralloc/gralloc_priv.h delete mode 100755 uis7885/hardware/aosp/hardware/libhardware/vndksupport/linker.h delete mode 100755 uis7885/hardware/aosp/system/core/libgrallocusage/include/grallocusage/GrallocUsageConversion.h delete mode 100755 uis7885/hardware/aosp/system/core/libsync/include/android/sync.h delete mode 100755 uis7885/hardware/aosp/system/core/libsync/include/ndk/sync.h delete mode 100755 uis7885/hardware/aosp/system/core/libsync/include/sync/sync.h delete mode 100755 uis7885/hardware/aosp/system/core/libutils/FuzzFormatTypes.h delete mode 100755 uis7885/hardware/aosp/system/core/libutils/Looper_test_pipe.h delete mode 100755 uis7885/hardware/aosp/system/core/libutils/SharedBuffer.h delete mode 100755 uis7885/hardware/aosp/system/core/libutils/Singleton_test.h delete mode 100755 uis7885/hardware/aosp/system/libfmq/base/fmq/MQDescriptorBase.h delete mode 100755 uis7885/hardware/aosp/system/libfmq/tests/aidl/default/TestAidlMsgQ.h delete mode 100755 uis7885/hardware/aosp/system/libhidl/libhidlmemory/include/hidlmemory/HidlMemoryToken.h delete mode 100755 uis7885/hardware/aosp/system/libhidl/libhidlmemory/include/hidlmemory/mapping.h delete mode 100755 uis7885/hardware/aosp/system/libhidl/minijail/include/hwminijail/HardwareMinijail.h delete mode 100755 uis7885/hardware/aosp/system/libhidl/transport/InternalStatic.h delete mode 100755 uis7885/hardware/aosp/system/libhidl/transport/allocator/1.0/default/AshmemAllocator.h delete mode 100755 uis7885/hardware/aosp/system/libhidl/transport/allocator/1.0/utils/include/hidlmemory/FrameworkUtils.h delete mode 100755 uis7885/hardware/aosp/system/libhidl/transport/memory/1.0/default/AshmemMapper.h delete mode 100755 uis7885/hardware/aosp/system/libhidl/transport/memory/1.0/default/AshmemMemory.h delete mode 100755 uis7885/hardware/aosp/system/libhidl/transport/memory/1.0/default/HidlFetch.h delete mode 100755 uis7885/hardware/aosp/system/libhidl/transport/token/1.0/utils/include/hidl/HybridInterface.h delete mode 100755 uis7885/hardware/aosp/system/libhwbinder/vts/performance/PerfTest.h delete mode 100755 uis7885/hardware/aosp/system/memory/libdmabufheap/tests/dmabuf_heap_test.h delete mode 100755 uis7885/hardware/aosp/system/memory/libion/include/ion/ion.h delete mode 100755 uis7885/hardware/aosp/system/memory/libion/kernel-headers/linux/ion.h delete mode 100755 uis7885/hardware/aosp/system/memory/libion/kernel-headers/linux/ion_4.12.h delete mode 100755 uis7885/hardware/aosp/system/memory/libion/kernel-headers/linux/ion_4.19.h delete mode 100755 uis7885/hardware/aosp/system/memory/libion/kernel-headers/linux/ion_test.h delete mode 100755 uis7885/hardware/aosp/system/memory/libion/original-kernel-headers/linux/ion.h delete mode 100755 uis7885/hardware/aosp/system/memory/libion/original-kernel-headers/linux/ion_4.12.h delete mode 100755 uis7885/hardware/aosp/system/memory/libion/original-kernel-headers/linux/ion_4.19.h delete mode 100755 uis7885/hardware/aosp/system/memory/libion/original-kernel-headers/linux/ion_test.h delete mode 100755 uis7885/hardware/aosp/system/memory/libion/tests/ion_test_fixture.h delete mode 100755 uis7885/hardware/aosp/vendor/sprd/modules/minidump/minidump-new.h delete mode 100755 uis7885/hardware/aosp/vendor/sprd/modules/minidump/minidump.h delete mode 100755 uis7885/hardware/camera/lib/libcamv4l2adapter.z.so delete mode 100755 uis7885/hardware/location/gnss/vendorGnssAdapter.h diff --git a/uis7885/hardware/BUILD.gn b/uis7885/hardware/BUILD.gn old mode 100755 new mode 100644 index c1ff2b2..af654c0 --- a/uis7885/hardware/BUILD.gn +++ b/uis7885/hardware/BUILD.gn @@ -16,7 +16,7 @@ import("//build/ohos.gni") group("hardware_group") { deps = [ "aosp:aosp", -# "gpu:gpu_vendor", + "gpu:gpu_vendor", "omx_il:lib_omx", "location:location_group", "display:display_buffer_model", diff --git a/uis7885/hardware/aosp/BUILD.gn b/uis7885/hardware/aosp/BUILD.gn index f0cfccc..f2a3645 100755 --- a/uis7885/hardware/aosp/BUILD.gn +++ b/uis7885/hardware/aosp/BUILD.gn @@ -33,6 +33,7 @@ group("aosp"){ "system/memory/libdmabufheap:libaosp_dmabufheap", "system/memory/libmemion:libmemion", "vendor/sprd/modules/minidump:group_minidump", + "frameworks/native/libs/ui:ui", ] } diff --git a/uis7885/hardware/aosp/frameworks/native/libs/gralloc/types/lib/libgralloctypes.z.so b/uis7885/hardware/aosp/frameworks/native/libs/gralloc/types/lib/libgralloctypes.z.so index 698be4889d530dc2cd4d798a75bb79cbfe3daf65..45760489166be1adc697bdbb656125e3a2196abc 100755 GIT binary patch delta 1245 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 bkXQf!xC$Xtlh<}lvnY2U1_JB@lS+6V$GMdL delta 864 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�!)#R1h)vd O0$>IL{1cZdxdI-#LAAyJ delta 4997 zcmV;06MF23{R)Wv3b4!q5Qbna@vW{v&0{N$ioB@^+mjIj9E11*hxh^kxA+1A?4SX? zm*t}ZzJDBXLIza$s5VtMpNUXs^hN~;E?hoB*!YFfA()2TlJqf&je3K^3Lg5>9)&n2 zD~b(t7;$hRs`4qPyA0bfO7j<^@WYcv^gGKp8G6)r{EhF?JXC~InSx*O*w z$wlT$7(&|#G9J4cAVI!JPy`_JR#oPBBn(e=<9`Mvp^bL=2Or0yMjEMC;oUP5-;%)K zE-BjFi{_hN2Z=##@4vNk#%!s;!Q=y>aUUE20)U69QT}BFgB`B)wLY>>DT=vV6SeZ4 z-G9a%;B~vE9|a}4rYRzSVY%?mcrQFjBYU*h3H);nuCB5R;3BC-2P%;h*1ybX#$E?;E5tdS8^st@R$XIW zp`;F|DkJOF9DZU_b-qxmNI&p)vBfgdc)P5&!6BzLmhhtRQ8{))R6!s145q?XoqvP_ zItip`RW5rH_OQ#F;-q165V@VV*ecgTGUncI;H$@-iOQjL`29nO89@q{ z?!~7C1*>p&;?+xR6oYVyv@-qAvg1U;V-wYO3|+Fonk|Cw@NE9Fb^JjvMG6Mx^v-q2 zdf~Np$373!(c{YORDhPh(Xj2TV>cWc9lvZ0t`*CY0*WsvD=!Zh7t3Zp3mRs0J|%aM1QG#D+n2$G z>@23@vH|1w2-dwtf)i8Qr(i{XKRlYn1eb!FCPEHQXs6gu%WE!_dP}_t?u-0xWS$>2 zBfC(0uFDulf*4wUb7V^92BGVw1|hH!Yw)iSPt{FtAnHV~qCk=#JPcoNNN3y?9ZFK)TCG zYdVZZz`IrW?J93|#2ZBajFI6mig+E_jJ@rdA)m&f;U+Zr-!q?%B<)C_%jmj)Np3bW zE6W6b0{*7i5si3C)qf6_T&)C66EJU5DeJ^-X1ktO!~i@Jf?v8Vqb881(U$yWii8MU zr7JixGctak=MIvmvv((4)>K{Z(jHTW>4KsKea>`0+q%d_$Jlcb(Kn9(G0=YGeZmfC zL?XL1M&Ca&eyi1_P!fOBpS4zjl)7{Rw=F0A0PGRH24WedCoH8>qo@5(zrz_I5XL_q)x1d3}+Tzv(l!|RcxA}7FWo?iiI-5 zUDS2J_T^ih*7|lkeI(pu8O7p)PLYCmUeqX>y#ALQ3>%^Nz-@*uj?5nrSLycaFQDx~ zQFY705pgmaOnmYs@oLBd$_3v?c1 z{dcApC*BQoDI!AeLcZp|wGBTjLA84)7-;3OxY0!D_Xb<7c%sN9S|#bMp3YY%t(?F} zoMg4pb|7#&@x5%%lonSg80|Ow7})g>Ot+TOk#}?GjDI@iABqqqWse_0yG#TL@lwCc z@C|+m>W(PZAi&f2H8=;%fEHR56-K$;detga5Rb8TfcBWb{Kzpy zQm>9?(DKT67kko2ad%;yJdl%NDN_&!tXx3*5SC! zXJ=k4bf>_gDx$1LXYG?9Ag)-ouaWG*vycDnaDOkWoki~5U=Q?NA`b65>}8}&W)ym} z*0cJ6-9Upx1QvM69460&7&|3LdKGCuQgx2NIR^mG_LqOlM<%Dj3&kF3t46grfB?VX zaMBV*HtK8^kDP(}Sn>c>2gARCW$wQg^-fDgbtyHAdX-M`*s2ywq!j5;3gwvs7<4ln z=zlL;NUS;o&xZ!{ZvIxVaF;(B5C7L1y!NYf_y#99Afe6iTHz>LTQb_YBSPy#{|(Z_ zo~`rs>aKT+hZX(Jt4;Zl*Za`(;}f>fse|yi-!fk4QG}Tqhv63yVq5cwKkzEe2oPFv z>&fTIyDLotfioomQEiwh6&>!t+%&-5JAZaVVl)A;>;`-tE_dQu-rFoUyqTZ0k?MXw z{*3&U2C;`wl!pD5cEWd!&>|YX>(iR!PJw@TE*Sru1C|w~4um9+UB8HG^g+{cwN$V6 zCu89RgEWdAsm-3)l9|S3`oi6XZYWx{xSSay`#88(tk^unqT)!voNK=lfwLz{vwy|O z68-Q0@*$!T8F-UYL5)Ca%8WT=n65xwaeyz6(RExVrapUe$T3}x7?2LP54X_N<6-H` z>G17~eS9j%{GXR6YGvqEXrR2JOYX&-8hX(@LDDGiCUK*|xlZ|~tyOui+N%Uvzb*Rr zM-OJB_`o4YaK#)P0UBI} zo5=&pPS}l>5=-}ro=~PLktWLwVCW(qqO4NM5`ayUX-MGfO?1yF6-}f`YHKmOYVFw; zCw{b6mI-Uqs&PNriw_~m4sg}ZNIA5VY1b;~;wz0~CkAoS0MnI_$7}=P+<&t}W(|8M z1>%w6{j5&oBA-6zwYY^cQok`0^4^1*iM4Ins;Rl3nNeNi7tj2$8z{UHNuh2TQ`QN( z8BSax(@twm(VeDNKz;MX-HcRc-gUk`??^g(qa74!l%`f9xtFuLOPPqUP ztwSf^DWOLQno+>cqBY(`{JetrnvRWOKOf>^~1co=M`+GXZM#s==h(jyUhdu}v zx^01m!>;l2f{s&38dLl)jB60gkd#-)9Ov7x!Petl%X0g^$kL|hHa#zqSQL@EFig|! z3ga~1R>H?vCqi!Ae329`IiRLn@xq6(Z#Ax{N|^l8`Tbyonqy_uvwtO70NHs4sEU4n zK0Df0%J>bI2JO6IJY=s5ZJXN8#hkc8Gum5x;9{eo>|fwZosUOba^xx}@+-0o9d148 z(~zz^7>v*(k*wVZvFAIDO+fHLuF*he)w`D*%DPB0;HG9%7J3Ku>?x!mfw$q<>7c@p z)E#$Wpak)lb60WN5q~reNE}@IcVkmsPrULTvlH5@h94bV*6_>V35TMCJ$+&tCtw`= zwWY`8KJT_&g_3rzph?vv0bKgnxCMjJU2#XJvfN4gu((mzjDCZAJYy2O{vN=;b2uEH z%P%MNp#xH^aX&>*?)z22a3Hafk0PIPJ5 zluD?-lmZnEWeF{s4Kzsdcp38gpp=xJtM>x1cmIk2F@NConXhkjr{Mi_pObGcs!x41 zM%l8In>Qh>FAJ2nHEULEQK06~dl#INdFvB>D>C8}+nk%^44z_fnFAL3sa6snR(kP9 z<8eZW`RB+6bRtY?ezx;_W$Gae|Lsial+kN~)vLNP%2q$3tMJL17I1Q|pE!0v&qLPa za^OBDj(-(Yzw(mQ;Rn`d^bc7CHBhNd2E|m#k@s%fRo)BBjG8qwcw(HyLxMvv`cuLO ztfK>RWqym^fx2tsI{{jHVk&;%Yg@~pbn-*SZ&F$!f33!SEMeOWcEt}~WwDJHDi~kT zS2jdzfCBbVI2RvCl{Z%`c*l`H&Q&d~j+1=PA%8YfGsM7CC~oU)z_E^lfaTiD+LL8w z@PeV={vYq&e@7Z~>lW3WSfcWWD-i(l&Tt)=3K{!ldGVbV!(({x=bo13>l#DUk19-k z5p&)7e0*u4jy!rsC~H^fhZc{;ULI;Yb5@Bof|_>7@h?i#fZG>SKFv#g(%OtHU4A)S zeSb*8V_u9C(1&AEt% zu{Y^yUU>~{`{jJTAGCl+S+nBjD9zU=$-QU*1jpb3F*2uy%P(?qyNTdrHLrYpp7yW8 zozY=njHuyf2&)PXUgly6VW_#ivGr8Ugnws>7w$1Oout~r6bbr-L)81#<)OK|Ji>6B zA4Y%x;Yji+{ucs>VTe>nku^|BLxW~^9Et;12M1Zs3}C^1)AqBK%j%U>6u!7{x)b;> zedp6mk7E+k9)(jP?b`k6HNq0NRkahkNt$LcIxvPxt}n$VY|rUg!VhIeQN$}gwSSo~ z!ucC!k1LI<19e+X&VPNIaN$ZBiyFxVBsI*M*Zxl+A*O>$0+JxHR4;zdPq+vG!l-G` zM#n&82?C`!@{K+XOiOD7k0yjdY_n+bW?cz1D48Vc%9A8v`vaX66MFANI^Ynmc&L-G zi&Lb_=Z4O7o_~JnFmqV>A^+);Re#ddFzmYTU!1ALgW(aJl78aVh_6IE1_pnL##>^1 z1~eZFkNZ0~Yo3V4H+N@&bOHykl{pi-E0XQCe-jY*IZwQi$G1(#FSvSsHs^uwbF?N= zC=DX57)}F^d_(nu>o?9OHN__ViUdjod-tbIb|myP&6T?kn^%4KA&v0`jDKTn*ebXY zQ;h=wTVk@Om+1;kjixKSL?)BWIx7okvtP>2Fsj zJM4ebqZjFk*-@IQO+kXr8`~<}*7fkCtlLai03!zQyB=Z5%i47D#SmdGrfy78 zyB0Z$kS@871`>c3!MwXGGBPWcE*(tPs~giOjDLbLCUIxuj0yq{L4QZ%4eG~htEOHZ zmsa|6%LtI1Yix~lBQ3Vda4xK91{B&cpOkrU*uIT6CsqkCq=u9ml+74mQMG1XN+@@oP)N< z&N26)EVsRIW<~mJ*nb6QdNcuF36M}kLys8nJ9LF)3DMS&1{)M{1#{I%nuZn5g5H<= z?4E=Ry!s)wMG7EAw9}swNraA%#1e^vF`xw`Tpth_`TSw0X~Pv;BLVGhqES&=KKvEZ z&Y*P55X!->+b-nYm>~2$%e?RqvSy%kn{SVZ%+8_8QnCYBR)3JmevkHY8JfU_^~=J{ zjCPVlW5LaN2yY94Etu*}P3t3BQy{t;(kbvQ_8&is^ry>hX1}EJGm(K7pjEL(rb-Dg zT$Ma(%U&giFD(b#k!PGS-iIv1<^={Cnh&?L7B#jq*0Z4NiE?kc;Re@Cu^k>|zJhw% zq8f;@!YZc7Z+{jjlr@w0Qe(dswYSUCj~;L1GeH;lLImC7tsypv(3=~%KJtSb!=3vt zb+8blhcMFxEM23MVkSa#N!$zIyh)osnV2L9M6U^1BNZ7pyfYx;b%OO)I-^JFKohKJ zR5S)6o~qKnT(0}%l>s&!%&@yr+@6Uit4_DuxGdK7em|zV)Be$YCW2E%1b+MeGU%yV zSP#x~>(h3<#hJ-d-;A2~VNtlR0ssI2056N^p8qiRbN~U_CzzrH0B`T%LzlR>0!+6E PxB_4X0ss`3D!Bq4Pv)3S diff --git a/uis7885/hardware/aosp/hardware/interfaces/graphics/allocator/2.0/BUILD.gn b/uis7885/hardware/aosp/hardware/interfaces/graphics/allocator/2.0/BUILD.gn index 75a7b16..8920198 100755 --- a/uis7885/hardware/aosp/hardware/interfaces/graphics/allocator/2.0/BUILD.gn +++ b/uis7885/hardware/aosp/hardware/interfaces/graphics/allocator/2.0/BUILD.gn @@ -22,15 +22,16 @@ ohos_prebuilt_shared_library( "allocator2.0") { subsystem_name = "${SUBSYSTEM_NAME}" } -ohos_prebuilt_shared_library( "allocator_passthrough2.0") { - source = "lib/liballocator_passthrough2.0.z.so" +# ohos_prebuilt_shared_library( "allocator_passthrough2.0") { +# source = "lib/liballocator_passthrough2.0.z.so" - relative_install_dir = "hw" - #output_name = "android.hardware.graphics.allocator@2.0-impl.so" - symlink_target_name = [ "android.hardware.graphics.allocator@2.0-impl.so" ] +# relative_install_dir = "hw" +# #output_name = "android.hardware.graphics.allocator@2.0-impl.so" +# symlink_target_name = [ "android.hardware.graphics.allocator@2.0-impl.so" ] + +# install_enable = true +# install_images = [ chipset_base_dir ] +# subsystem_name = "${SUBSYSTEM_NAME}" +# part_name = "${PART_NAME}" +# } - install_enable = true - install_images = [ chipset_base_dir ] - subsystem_name = "${SUBSYSTEM_NAME}" - part_name = "${PART_NAME}" -} diff --git a/uis7885/hardware/aosp/hardware/interfaces/graphics/allocator/2.0/lib/liballocator2.0.z.so b/uis7885/hardware/aosp/hardware/interfaces/graphics/allocator/2.0/lib/liballocator2.0.z.so index a526bd22682efc8b0ba587a1ab8e8e55a82ae392..7dbc3af669d2a78a1182754f208e389edf5ef56d 100755 GIT binary patch delta 3108 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 delta 3127 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 RM7Izk0bm9Jte0^p0Uz6+9Q*(P diff --git a/uis7885/hardware/aosp/hardware/interfaces/graphics/allocator/3.0/BUILD.gn b/uis7885/hardware/aosp/hardware/interfaces/graphics/allocator/3.0/BUILD.gn index 446ee04..1e4a6e6 100755 --- a/uis7885/hardware/aosp/hardware/interfaces/graphics/allocator/3.0/BUILD.gn +++ b/uis7885/hardware/aosp/hardware/interfaces/graphics/allocator/3.0/BUILD.gn @@ -14,7 +14,7 @@ import("//build/ohos.gni") import("../../../../../aosp.gni") -ohos_prebuilt_shared_library( "allocator3.0") { +ohos_prebuilt_shared_library("allocator3.0") { source = "lib/liballocator3.0.z.so" install_enable = true install_images = [ chipset_base_dir ] diff --git a/uis7885/hardware/aosp/hardware/interfaces/graphics/allocator/3.0/lib/liballocator3.0.z.so b/uis7885/hardware/aosp/hardware/interfaces/graphics/allocator/3.0/lib/liballocator3.0.z.so index 7bad62ebc8c48c99e161c417f7e6b06ba3732604..102f3e13778a1413720286439991528ce1d785ec 100755 GIT binary patch delta 3112 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 CWDd~) delta 3112 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 C_2P;E diff --git a/uis7885/hardware/aosp/hardware/interfaces/graphics/allocator/4.0/lib/liballocator4.0.z.so b/uis7885/hardware/aosp/hardware/interfaces/graphics/allocator/4.0/lib/liballocator4.0.z.so index f7529741c2e56c4eb73977b22f72eb12e5ca32ad..d51dc15c10e9cd372a3840b48c35b12f40453cf4 100755 GIT binary patch delta 2866 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 Q#Ao{g0002D$PfX@29->R>;M1& delta 2866 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 Q#Ao{g0002D$PfX@1~j{yRsaA1 diff --git a/uis7885/hardware/aosp/hardware/interfaces/graphics/common/1.0/BUILD.gn b/uis7885/hardware/aosp/hardware/interfaces/graphics/common/1.0/BUILD.gn index d15e457..9b8ae37 100755 --- a/uis7885/hardware/aosp/hardware/interfaces/graphics/common/1.0/BUILD.gn +++ b/uis7885/hardware/aosp/hardware/interfaces/graphics/common/1.0/BUILD.gn @@ -14,7 +14,7 @@ import("//build/ohos.gni") import("../../../../../aosp.gni") -ohos_prebuilt_shared_library( "common1.0") { +ohos_prebuilt_shared_library("common1.0") { source = "lib/libcommon1.0.z.so" install_enable = true install_images = [ chipset_base_dir ] diff --git a/uis7885/hardware/aosp/hardware/interfaces/graphics/common/1.0/lib/libcommon1.0.z.so b/uis7885/hardware/aosp/hardware/interfaces/graphics/common/1.0/lib/libcommon1.0.z.so index bf1f2a87eff03a355ca0494650aa8d09a33eac7b..602ef7461046fec84575fecebd802af5cfc745b4 100755 GIT binary patch delta 574 zcmV-E0>S-|C6FbslmZZid$Wgt=do`DWquu^8DZj+5ds{uzyb~j0hp7|38H`f(7!B% z;Ug(9lEK_-840e;+MNjZk<2%LmrtJ--zb_bio_37@zTpdh$C-({z+8hF@3einDGST z#nd{&&RpoI$rd#-#qYcV91#*+izCRNBOft}k{nCo1L#3C-GE~tl)~wSb-uC%zR-Dh9`)mVyMT=F7No^Ft zc$_L8lz>zb5}ra^Z()BTZ*-@$xp7uz`l_jf5n5sMR0AU|88R34Fmc$4a@|ADDpSJW zn&_A4K!xm4m5S5Ms(ivQ61RZc;~;!Seetz7VEnu>1j3tu0hRY@s}8U{_X;Gs2La?M zS&?43Rirbs{8Z?1?C(2wV&l0p#EnD33OFK#n@TVsU0ndX=syvYF%qHV00FcGs3HIW Ms;T%nvwjQ`2LFH*!2kdN delta 574 zcmV-E0>S-|C6FbslmZYLjHL(f*PnQ9X<-u2DL*ii5ds{uzyb~j0hg1{38H`clwR_2 z<#mvo^gUf1&({EE5x(sCRabEci)*-Zwi8PzBVDzV(!sRDis_ ziRIocS)KAVag^Q=f_G`ZwI%5jj*09&z*6W=cVq&0J;QNg=&i8zP;E7)^At^_T0UFDOycMK`G+BE5f>?T~Mr9Y4lR zYelD)Q;rt>dgm=#zAlHsbrEgoRdX&~G3J1H(qb4I0@?or-?WLSRnCHst_3&L%`F?rGF#&d8Q}8HFqSaa& z2n;&W*53|E?Q1`RyGn81JIJwVQOyj-$AU;3gOa`C5^>NvlnLzUoHuPPG;7JY%iGCr zEQ?fbCne*|asfX9>mOn(BN+f}?))fK%i@JhBreX_0001MuM-h&6hiZ;00FZFs3HIW M5}ExZvwjQ`1|awm}}`swPMY!)LP?s^6{lgUC%HJ-8ic=i8c7yQ4`*8hyak z;yO`8sikgS13X;p`m0Z={$o)Er4~BKA9BVgZp-u65C=w`f454vBzIID2P5~*9l&p7 zvZ6?SlZNjJQS!xEgtJY>yOoDDub+O3-GA!dZzbqvERJJ68_hzU5P>&G-zAlqOnbY| zV^v_d=j^T-lgixWMDS^Qs|RiUheE81Sssg%F^KpeO}Ik#Qurz2w8)&DH07Ped4n1S z?#>02QAa8ce_J9O+uvvR8fB@KHny4$JfS2wN?nJ4%D7L1Z68b}LWIKa|MPFO_WRgL zNK)a=l`aGmfCP#na*4OpbMX)86EmmhzAt*<(GF^N%m!}@p*tK4Bs(rss7TXjigcT*n`y{m3Rew~GP|Ugc3;cLw z>_nL0>{p+}{mH8fqSyEqto;{oAd^r|SN5)eKOHfU z&-^=EWsFv^^c){*f8=H9f1K0$Z3UtQr+}HEt`j6C|L*KUX;Lf-FK&d?AU++@;}$P% z31H<}P+=^3v#3W#*J zvV)*lymkT&@^h@$08;!$`hp*lKGU$#8aUBky|2?os*Zk?hZC6C*>uL$a}L$OA`>tS z7Vn|lyE^H+e^KkBrBa6*_C4qY!(Rqjw!6cz8_jXh=TaKUa&tit-woL^B^;GzYgwX+ zd`8W(aRCqeSV)1rGKG=cUVwMs@fhCc49P0S#NOE>;oldp%xa1jww$^^B7D7E>X98& uhBf#zPoB0rLo@6y48i-fFs1v~a3}+8-sd|}00ANC1+w~(_JOl<3?2ro1`mh; diff --git a/uis7885/hardware/aosp/hardware/interfaces/graphics/common/1.2/BUILD.gn b/uis7885/hardware/aosp/hardware/interfaces/graphics/common/1.2/BUILD.gn index 1eaa2b7..0565136 100755 --- a/uis7885/hardware/aosp/hardware/interfaces/graphics/common/1.2/BUILD.gn +++ b/uis7885/hardware/aosp/hardware/interfaces/graphics/common/1.2/BUILD.gn @@ -21,3 +21,4 @@ ohos_prebuilt_shared_library( "common1.2") { part_name = "${PART_NAME}" subsystem_name = "${SUBSYSTEM_NAME}" } + diff --git a/uis7885/hardware/aosp/hardware/interfaces/graphics/common/1.2/lib/libcommon1.2.z.so b/uis7885/hardware/aosp/hardware/interfaces/graphics/common/1.2/lib/libcommon1.2.z.so index a57f15ad563744da359786b4cb12e7f5833481d4..1989c05d14f986f4cd2ab1d0f8bac69e8876390d 100755 GIT binary patch delta 561 zcmV-10?z&DD(EV(lmZauP$8^sH$BV>6<9RTkXHwj5ds{uzygE{f9mxu=XCFHxW**I z0YG<#UI`I=yCSEazI+jgQhO+^93R-GgKmb@U)5yznNlflb0K9QzdDu#;&l+K))hoT zvsx#Gf$x)AU)YE|FoKbREqHHO{HGY12rTdgkdak)8|2!{R@`|^kkFXj<>l+OjFHzH zISTFJqKggc4b0Gue>iqKa^feFs9KRY)sa<82BY%H``(}dJu~AIMQ?2@(picr(XOj` zsF3;*wWBKzt|^UKNlqs;YXLIVh|uJq0yT-pcdWUyoVuwqkt4v$xw{J0_V;gDrtY8A z4$31PQ_p>jMD2z7_0QtEZY|c3n^jST<_Bhciyb5^%FnLWe}CW{1Qby;T5TuP@P zljvObbO7A^3XYnTzEF6hU%gTz!0#U;b{M!@&?U0tc+^M#S#qfb4HMJ|17U>nxM{rX z^COgVpI3BdRFGej5(iA1ET{+wX~(;{j6D+s^n>(vo?;Vg@*hqgdJ`K4MSZ>z`eRO- z#Y^n`E8q-re~wS3UTXkl=53U!I6MaEJICB2olB^xmXKA+C@giWc z2nF&i;`Zvf?ike~SFQ!n6d_$UWS^xYUttAT;|S(ers5TpAg-U`yeS;Jxb9JR@@PV} znkU{WO*4^l*X$Uot`MyXtFvUnA%ewoP8eHjd|xn|3V8rI5{L|I%7s6(N)H|ecvA|E delta 561 zcmV-10?z&DD(EV(lmZa(L|zEiM8lH*cxVyhJ8Vdk5ds{uzygE{f9r5Ju(hu%30}B% z@_`dwoS4Uo5g9Y0sXYb>%QvobmPf_tl8yM95mSv65I6kl)4O5s1-YB;kg<-lqSiz& zB)M_%|f3TKG5PT1Y8hMB{v-L z#zvRV1%H(-`yuZHo%@GI`0tqFejn}4>`XOtU-GeO?5H5}_1~~%oYMs&Ig+);sVhUW z{H$TD(>!o~SA3z0>Wg)cLbhU?_Q{4tAY$;)Oz5ND8Nm8ie_0RQ_5@=Td7O-}t1}JQ zFR}VSL8dtsMFLx}L)fkx_fiG{GV?-rCHAjBlJe5?Fq*3|{li}f*gvRy#k_1qVAJd7 zRnCWoY-JGO?{ z-JXzUN$?d6e?lDr^kyfnm(*Fz!^c%bDY{>qbO#C}IC~@nzdGZrP=#?LuNJ)|C?>$l zHISMrOgDd!36{k)r3VBCz_8+Zr*=3! zK2(Ue0{l`<15p2Gt$BQ<=_|eUCdOIeG@&0ODV`EX3IG7Yx?e^xnoNtcN)H|eFFg&) diff --git a/uis7885/hardware/aosp/hardware/interfaces/graphics/common/aidl/android/hardware/graphics/common/BUILD.gn b/uis7885/hardware/aosp/hardware/interfaces/graphics/common/aidl/android/hardware/graphics/common/BUILD.gn index 144e98e..ed8b4bf 100755 --- a/uis7885/hardware/aosp/hardware/interfaces/graphics/common/aidl/android/hardware/graphics/common/BUILD.gn +++ b/uis7885/hardware/aosp/hardware/interfaces/graphics/common/aidl/android/hardware/graphics/common/BUILD.gn @@ -21,3 +21,4 @@ ohos_prebuilt_shared_library("common-V3-ndk") { subsystem_name = "${SUBSYSTEM_NAME}" part_name = "${PART_NAME}" } + diff --git a/uis7885/hardware/aosp/hardware/interfaces/graphics/common/aidl/android/hardware/graphics/common/lib/libcommon-V3-ndk.z.so b/uis7885/hardware/aosp/hardware/interfaces/graphics/common/aidl/android/hardware/graphics/common/lib/libcommon-V3-ndk.z.so index a81bab15baf27c66ecda86926676e4221befa8ab..0a3e25e0b82bff29f3239fe9237d57fa874164a3 100755 GIT binary patch delta 1019 zcmV)z^n&g>EXel&4Ql4i^h1qd83_%64Tzss2LU~};)-#ZI zIlu`Yep_GF{fb7vza5$@_kvkVqajMx^w2r|5|evWE5g;ZMHdJgFwY_jJ+CVaYq@&1%Ox;n6Q6)lVi$HRk+`0O`zs@knHC?+T!K+Lm>l*wgkUQJf?UlSQED;I!uVW zsCbmlz?lUkveY~}JH2y9!Wk{0NjEvine2SjLxj_44ffX6S`%oOW{TXKk|BWlmL+Da z8x(>GAn{8`P{9_T7W1Xt?Hlyx(gTIM9!welZ7pRJobrE|g#z-5XzVK+rp9apLF}|Z z9`3A5NBoGTm7)KgL&^kvD-v@wNdmxN`lFUhC!B5T|64v16Z}iIB~^>H`J8B%C}iN^ z>OCMzI1Ey=z0^fW8YNrvBt8`{yWPcS`RIB$Ig~iqdKiRr<2 zb@=X1Xcd3u(oz1}@@A8CA$@z~JYkx~2?n6WfOA?MAi>|`+t^@T9H-WUSunlMj1FK6 zC?!30_yyw%=OqhuGd1jCqc`xn?y#Sr@)UaPBr3w=1DEm)+@F4<&sj@+%doHeV`4TY2y?Up-@s#*{@;Z%!{yyL}F?J34^v~#!sY1a@1?S@X^ p09=S?Fc^=P>NqR}pl{xbhP`mnHR}KX0O#4GnBFObeY3}OnFa;Q^b-I8 delta 1019 zcmVlTjEbL4}Ngl?01s{9g`6P9JBZW1a5!Nc1t-+-x8mj zPh3{|pDD=nRB?^qTx%OK!s?}Q-N%Us-H2WrL05Bv-}=tNr1O%t2I8b5l#@*Q!YQgZ z6U~3cA%_919aIX>Geo?m$@3`ohkHonG*(MAZjP1#pb2%F-$S8!Hb8jYxxdtu5r{C9 zB3%lCmW>%C?-b446(xTyKJ5eElWo*yV3>A`Y17-7R6)aNh!SxlzsISYQ@7Ob6L3vjW31b=>@3ifJQ}9K z-nBT~A=XTt90!yL0z{a|z$_c74F_^n#bhqWjm+;E25^`a9Q3S#*o-&bJ`G#(3VfZg zTUq70UZGk}M^1m>C^lQePGxhA@TbVNu}!N}vbOv$7l)f_0{3oA23+I4%Kh#+bqN^1 z5QLkmZ9FA!t`Wo|(y2(;!s7o8f07>!$Jz63J)8(_|F!uhyH!HV*H80ItZ0Ct(h7qh z_Wrzo$zO|bJrPl?T824+>X^kVrk0^PP3fpi24lyAsvUp(AfOrUku2M zk-lIF4aJRj1z$L9HQ2OiPEs&&q7;!r<#FZ1+we6K2M7-n_HsdXZYCMe@b1ZlTp(zl zofPm4(bWE(6E{k%THK(xsT&c3%Tb`IQ6Z401= zN4-Ny2ZG0!4ngd2vIV_o3a8SB!C};OM~}M6Z%bxF3SQ&0)HwrUaC9Jgn9wr~N5 zyWDtmeH3N3{PCaXxUE*|FK0ID5VT+$(S8ADG`KvSOxB4E7Sj9=J5OIMNxLZ=6XO*L zwj$_uzbn)=tt2@}HVHKCXVoCluM3N+XI_kW2b7H$g5qf-mq`KEX78mqn&NCIKSor8 zwpUV8O1`PocXm5L?Jno&T^n!{w6v79v%(Tm)8mG8%h9AY_oq9Q9k!>iF2)=m!m6G{ p)JZb{Y`AzlU6LCxa~>znn}i9AAkqK;01y#z`h~ws7qiE7nFc(d^c(;H diff --git a/uis7885/hardware/aosp/hardware/interfaces/graphics/mapper/2.0/BUILD.gn b/uis7885/hardware/aosp/hardware/interfaces/graphics/mapper/2.0/BUILD.gn index ecd844a..d7f8b07 100755 --- a/uis7885/hardware/aosp/hardware/interfaces/graphics/mapper/2.0/BUILD.gn +++ b/uis7885/hardware/aosp/hardware/interfaces/graphics/mapper/2.0/BUILD.gn @@ -14,7 +14,7 @@ import("//build/ohos.gni") import("../../../../../aosp.gni") -ohos_prebuilt_shared_library( "mapper2.0") { +ohos_prebuilt_shared_library("mapper2.0") { source = "lib/libmapper2.0.z.so" install_enable = true install_images = [ chipset_base_dir ] @@ -22,7 +22,7 @@ ohos_prebuilt_shared_library( "mapper2.0") { part_name = "${PART_NAME}" } -ohos_prebuilt_shared_library( "mapper_passthrough2.0") { +ohos_prebuilt_shared_library("mapper_passthrough2.0") { source = "lib/libmapper_passthrough2.0.z.so" relative_install_dir = "hw" @@ -34,3 +34,4 @@ ohos_prebuilt_shared_library( "mapper_passthrough2.0") { subsystem_name = "${SUBSYSTEM_NAME}" part_name = "${PART_NAME}" } + diff --git a/uis7885/hardware/aosp/hardware/interfaces/graphics/mapper/2.0/default/Android.bp b/uis7885/hardware/aosp/hardware/interfaces/graphics/mapper/2.0/default/Android.bp deleted file mode 100755 index fffea3b..0000000 --- a/uis7885/hardware/aosp/hardware/interfaces/graphics/mapper/2.0/default/Android.bp +++ /dev/null @@ -1,45 +0,0 @@ -// -// Copyright (C) 2016 The Android Open Source Project -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package { - // See: http://go/android-license-faq - // A large-scale-change added 'default_applicable_licenses' to import - // all of the 'license_kinds' from "hardware_interfaces_license" - // to get the below license kinds: - // SPDX-license-identifier-Apache-2.0 - default_applicable_licenses: ["hardware_interfaces_license"], -} - -cc_library_shared { - name: "android.hardware.graphics.mapper@2.0-impl", - defaults: ["hidl_defaults"], - vendor: true, - relative_install_path: "hw", - srcs: ["passthrough.cpp"], - header_libs: [ - "android.hardware.graphics.mapper@2.0-passthrough" - ], - shared_libs: [ - "android.hardware.graphics.mapper@2.0", - "libbase", - "libcutils", - "libhardware", - "libhidlbase", - "liblog", - "libsync", - "libutils", - ], - cflags: ["-DLOG_TAG=\"MapperHal\""], -} diff --git a/uis7885/hardware/aosp/hardware/interfaces/graphics/mapper/2.0/lib/libmapper2.0.z.so b/uis7885/hardware/aosp/hardware/interfaces/graphics/mapper/2.0/lib/libmapper2.0.z.so index 8166cd8b5454fbcbc9224e76b79a09fae74d7b35..ad8efc7d06ecbb8f3239bb73e44fb24ec2833252 100755 GIT binary patch delta 3910 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 UTmdz=*jxc%1_H1Tm-<}+9&XNioB#j- delta 3913 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 X005V`F#$cd&|Cpv1_88}F=GKAX~B~8 diff --git a/uis7885/hardware/aosp/hardware/interfaces/graphics/mapper/2.1/BUILD.gn b/uis7885/hardware/aosp/hardware/interfaces/graphics/mapper/2.1/BUILD.gn index f2ca086..ca78f6a 100755 --- a/uis7885/hardware/aosp/hardware/interfaces/graphics/mapper/2.1/BUILD.gn +++ b/uis7885/hardware/aosp/hardware/interfaces/graphics/mapper/2.1/BUILD.gn @@ -14,7 +14,7 @@ import("//build/ohos.gni") import("../../../../../aosp.gni") -ohos_prebuilt_shared_library( "mapper2.1") { +ohos_prebuilt_shared_library("mapper2.1") { source = "lib/libmapper2.1.z.so" install_enable = true install_images = [ chipset_base_dir ] @@ -22,7 +22,7 @@ ohos_prebuilt_shared_library( "mapper2.1") { part_name = "${PART_NAME}" } -ohos_prebuilt_shared_library( "mapper_passthrough2.1") { +ohos_prebuilt_shared_library("mapper_passthrough2.1") { source = "lib/libmapper_passthrough2.1.z.so" relative_install_dir = "hw" diff --git a/uis7885/hardware/aosp/hardware/interfaces/graphics/mapper/2.1/lib/libmapper2.1.z.so b/uis7885/hardware/aosp/hardware/interfaces/graphics/mapper/2.1/lib/libmapper2.1.z.so index 5dc73b6dbf1b0648f1b30061670008f040cfd77d..9ae9d96774728620ec3b21dd92b291822ffbbe60 100755 GIT binary patch delta 3744 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 K0U(zlVgVo5{ZNDe delta 3752 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 S0YtaJTLEAO0UVbhVgVoI|4XI- diff --git a/uis7885/hardware/aosp/hardware/interfaces/graphics/mapper/3.0/BUILD.gn b/uis7885/hardware/aosp/hardware/interfaces/graphics/mapper/3.0/BUILD.gn index 671bf01..46a6cad 100755 --- a/uis7885/hardware/aosp/hardware/interfaces/graphics/mapper/3.0/BUILD.gn +++ b/uis7885/hardware/aosp/hardware/interfaces/graphics/mapper/3.0/BUILD.gn @@ -14,10 +14,11 @@ import("//build/ohos.gni") import("../../../../../aosp.gni") -ohos_prebuilt_shared_library( "mapper3.0") { +ohos_prebuilt_shared_library("mapper3.0") { source = "lib/libmapper3.0.z.so" install_enable = true install_images = [ chipset_base_dir ] subsystem_name = "${SUBSYSTEM_NAME}" part_name = "${PART_NAME}" } + diff --git a/uis7885/hardware/aosp/hardware/interfaces/graphics/mapper/3.0/lib/libmapper3.0.z.so b/uis7885/hardware/aosp/hardware/interfaces/graphics/mapper/3.0/lib/libmapper3.0.z.so index e5e8d5d61ea120c408786edc8a7e6b88584b6b1d..942afbc01d3d79d176927aca68fb49df9abe4dcb 100755 GIT binary patch delta 4550 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 RZfj8s1cGxC+q3r?nFa)WP%Que delta 683 zcmV;c0#yBwLy$wT%mNTkh_=1)hUcH~OhP`@(k4EW5ds{u_yT|xe{Q5TbR_i-qeS}r zTb5cpCAcoy+wS19dQZo1N(W2h2A(bnUxK5KbbQaYsJ2*@?$OYFjNB{?IH!p88h zs^6}W{4}<#7=$jDe~uzOk8D#mmIv!OWNA8@;*3@{-#)vQ>Z%Q)3(p*RWfRde<)9ds zYNM&T`3eO)eB?h5hR zR0DRe!C}?PitdylN{o8Kf3p=q_#d8jNt#TO==tFOUFVpyi2+s$31}Bfp(3f8@C6mmJqeR`=qNk+u%WfVmfz z;&X{59|;{#ThN^#P(X0O8whIB?)DXb+Qsfc^|`xuW7O^&2)z?|Wh-d7B{>f9d=De -#include -#include -// #include -#include -#include -#include - -#include - -/*****************************************************************************/ -// zmy add -#define PAGE_SHIFT 12 -#define PAGE_SIZE (1UL << PAGE_SHIFT) - -struct private_module_t; -struct private_handle_t; - -inline size_t roundUpToPageSize(size_t x) { - return (x + (PAGE_SIZE-1)) & ~(PAGE_SIZE-1); -} - -int mapFrameBufferLocked(struct private_module_t* module, int format); -int terminateBuffer(gralloc_module_t const* module, private_handle_t* hnd); -int mapBuffer(gralloc_module_t const* module, private_handle_t* hnd); - -/*****************************************************************************/ - -class Locker { - pthread_mutex_t mutex; -public: - class Autolock { - Locker& locker; - public: - inline explicit Autolock(Locker& locker) : locker(locker) { locker.lock(); } - inline ~Autolock() { locker.unlock(); } - }; - inline Locker() { pthread_mutex_init(&mutex, 0); } - inline ~Locker() { pthread_mutex_destroy(&mutex); } - inline void lock() { pthread_mutex_lock(&mutex); } - inline void unlock() { pthread_mutex_unlock(&mutex); } -}; - -#endif /* GR_H_ */ diff --git a/uis7885/hardware/aosp/hardware/libhardware/modules/gralloc/gralloc_priv.h b/uis7885/hardware/aosp/hardware/libhardware/modules/gralloc/gralloc_priv.h deleted file mode 100755 index bf45ab7..0000000 --- a/uis7885/hardware/aosp/hardware/libhardware/modules/gralloc/gralloc_priv.h +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef GRALLOC_PRIV_H_ -#define GRALLOC_PRIV_H_ - -#include -#include -// #include -#include -#include -#include -#include - -#include - -#include - -/*****************************************************************************/ - -struct private_module_t; -struct private_handle_t; - -struct private_module_t { - gralloc_module_t base; - - private_handle_t* framebuffer; - uint32_t flags; - uint32_t numBuffers; - uint32_t bufferMask; - pthread_mutex_t lock; - buffer_handle_t currentBuffer; - int pmem_master; - void* pmem_master_base; - - struct fb_var_screeninfo info; - struct fb_fix_screeninfo finfo; - float xdpi; - float ydpi; - float fps; -}; - -/*****************************************************************************/ - -#ifdef __cplusplus -struct private_handle_t : public native_handle { -#else -struct private_handle_t { - struct native_handle nativeHandle; -#endif - - enum { - PRIV_FLAGS_FRAMEBUFFER = 0x00000001 - }; - - // file-descriptors - int fd; - // ints - int magic; - int flags; - int size; - int offset; - - // FIXME: the attributes below should be out-of-line - uint64_t base __attribute__((aligned(8))); - int pid; - -#ifdef __cplusplus - static inline int sNumInts() { - return (((sizeof(private_handle_t) - sizeof(native_handle_t))/sizeof(int)) - sNumFds); - } - static const int sNumFds = 1; - static const int sMagic = 0x3141592; - - private_handle_t(int fd, int size, int flags) : - fd(fd), magic(sMagic), flags(flags), size(size), offset(0), - base(0), pid(getpid()) - { - version = sizeof(native_handle); - numInts = sNumInts(); - numFds = sNumFds; - } - ~private_handle_t() { - magic = 0; - } - - static int validate(const native_handle* h) { - const private_handle_t* hnd = (const private_handle_t*)h; - if (!h || h->version != sizeof(native_handle) || - h->numInts != sNumInts() || h->numFds != sNumFds || - hnd->magic != sMagic) - { - ALOGE("invalid gralloc handle (at %p)", h); - return -EINVAL; - } - return 0; - } -#endif -}; - -#endif /* GRALLOC_PRIV_H_ */ diff --git a/uis7885/hardware/aosp/hardware/libhardware/modules/gralloc/lib/libgralloc.default.z.so b/uis7885/hardware/aosp/hardware/libhardware/modules/gralloc/lib/libgralloc.default.z.so index 55dd2977d4b685155202bf195cca881518d32771..d191c0bd375e1b330407ad6079d2d3339d9287ec 100755 GIT binary patch delta 865 zcmV-n1D^btf0%!;%mNVWBhpH?!9f0*?p0R@`>ETL5ds{u_yW^1e`W^`vzn(s!k?1M z)~_|Eb2?-SJqXH0&slsc(R*NC&7>WHHC1-Bx-Mtmxbcd z0LYdOdmUoD4T00`HE&56_g7p+BqD%zm|6Xl3Y`z(jm-E%z=_at8Gc{dekg#_}1)_Ur2lE+GOe#}6Ae;awly1wm44*&tTlA|+p#9pjH zZErDWcdi^5R`&}CRs4T4zFEtOwE6!-kpW(0@Q~kQq5=p$bYy7m&GpH+!W*Y25(I1w ztdwwE-@gk{(ob)BbwHx_(xcyj`GjEsVv)cvz6#zRii$$tFb4cFK0plCg<(0v0b@%^ zG(UHUf26r>;_VcmHM+AI5jC!VA4xNzhIJ;$vt|L5ds{u_yW^1e`R;d_zhEoY(w>z z4Yc)N`*ML|j@zK1VBut*v~#C-j03D*&xp;yk7iid?g_W+klc*A)OdWkK7FT;jKpk; z$ZKLN6R?9Nm#Pi3g)KemJ%eiq>Fy4}o=Gx7O7?w3tBsgL*=DP5o;I#b(~IcC;CA#8 zC8E}wWxqf0%prI-smcHs4drKsPLU%Gs)Xl<-W( z$CjtH78&YEaFl5LJK)1}=N~#4hOLB)brIBj&}PO_gnkkN^@-;yH4<0SQvvUwyOOg~ zMqlTx*f{o}{9Ql48qGZ$HYO<8%GXh>x#^S|f@J?McZw*{e}Xj~bMm=<;1%n$$8c;p zZenpK+u$JA9wnI#3G}##weIIer(oew!qO0u8XXrz$yJ$p(mvuDjsDXvY=!p{EtOw< zYYRhuqKe*1GfvKndjWE(@$nTutqjcWl%{0WC%Q zFP1k>PdvOe)HFc86I2xX>`TS0X!;xlSM$#PDLjv2LU5z)K(nx#;5b&hNZGs|W*vRP zHC!;x#5ogq}sc;?!(;Kl$80-Y~TVA-lWil>I_22 zAbulb51UQ(N;u~&>Fl-KZwGhK$nWksJqTc0y@#pO3>E8FM)sJTb=Wv1Yg+wRNmIzV(vTfAA0000GI*!rrM1KRb|2UZjBapdY diff --git a/uis7885/hardware/aosp/hardware/libhardware/vndksupport/linker.h b/uis7885/hardware/aosp/hardware/libhardware/vndksupport/linker.h deleted file mode 100755 index 5f48c39..0000000 --- a/uis7885/hardware/aosp/hardware/libhardware/vndksupport/linker.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2017 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef VNDKSUPPORT_LINKER_H_ -#define VNDKSUPPORT_LINKER_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Returns whether the current process is a vendor process. - * - * Note that this is only checking what process is running and has nothing to - * do with what namespace the caller is loaded at. For example, a VNDK-SP - * library loaded by SP-HAL calling this function may still get a 'false', - * because it is running in a system process. - */ -int android_is_in_vendor_process(); - -void* android_load_sphal_library(const char* name, int flag); - -int android_unload_sphal_library(void* handle); - -#ifdef __cplusplus -} -#endif - -#endif // VNDKSUPPORT_LINKER_H_ diff --git a/uis7885/hardware/aosp/system/core/libcutils/BUILD.gn b/uis7885/hardware/aosp/system/core/libcutils/BUILD.gn index 1742d42..e18cfcb 100755 --- a/uis7885/hardware/aosp/system/core/libcutils/BUILD.gn +++ b/uis7885/hardware/aosp/system/core/libcutils/BUILD.gn @@ -14,7 +14,7 @@ import("//build/ohos.gni") import("../../../aosp.gni") -ohos_prebuilt_shared_library( "aosp_cutils") { +ohos_prebuilt_shared_library("aosp_cutils") { source = "lib/libaosp_cutils.z.so" install_enable = true install_images = [ chipset_base_dir ] diff --git a/uis7885/hardware/aosp/system/core/libcutils/lib/libaosp_cutils.z.so b/uis7885/hardware/aosp/system/core/libcutils/lib/libaosp_cutils.z.so index 2d8b28d42cedd8208a5e3f6d57df585f536aa331..e00f8281ac9ded361548d1d36ea1f98f1bb5a178 100755 GIT binary patch delta 630 zcmV-+0*U?5K+r(2%mNTxdVuhKx270(^5Rno;A?Y}5ds{u_yW%p0o{|x7P5ajdx2M+ zp3O-qD9Xibj2b-8RLZJi0a?S%3LnH;(?iKy(||fVJ9H0QDyriwHAx^BHtz7`1#;(ov1)4$<_s9-V@K>E=mm?|Yh%I9n zRf{0U7#>NT$DyL)!W_UPp>Tg$YMT^1%smd|s>kPyE}b8aJV%wBJ?bafs+Oh|DQT1b zSs-X&O2-0uKz-vRwz(LRIHw~oJa)V%wBT4Vwwd6d1NqXZu{`QrJs4X!JssDrX)W+P zW{q(5;?*SG(K3>J`z)d;`C>{Dx7N6L)A}|(028X?`TrK$;*dJ5T9bbp9E2}xkage0 z9JeHK)O2BA`#5G?Go#*IVVz&{a6%FVOR|yH&hNWH$IF!gU8y!$$0xSM%X2UJNz{CW zgOi@u$rZfKpUhBZSPTr@UJpWj_jOdzViTViXE-j=oKyBA+{57y$VUPD*g;4`&1IP^ zav2;gAD?Zm%S(dzzLM-4Uz0M`yr(ne-T0Uj4U%RVB6@^e)hXJi?9#yainf->@6A93+U z`;^_|0fy2u*Y3-Biaie3FuQ00000&>?9E8}znX00H?0 QpgjNpx_t0hv%eXU1|QopVE_OC delta 630 zcmV-+0*U?5K+r(2%mNUklL~sYMD$$o-SninQ=W>G5ds{u_yW%p0p63y7P5bjhTXW1 z(r_2NsbIqT3!bL6yBpk;XD%h~A@cQ92eip6gtL22s!|Fv($Yy%b;`*Y{=bdLnW z@a#_H`JKLg;EttJkgzdU~y5#qzE5v1DN z7+^o^aLYa8(u?Soi0YSS%`kG%$#3CiYI)zqmlF*gq6hE;ys|Tyh_XL)wskT}GLVb* zJ#!@D5Tr*rfda`y$}BbD3lNZAP)2e{x=M&=)OB!i2v#)Op4Kn&mT|g(LLjR+=lA*) ze8kSX>T`7%Vuh*JGGvcubli1h z`l^9CuQ==+;qT2Fkq$A%_u0ipK?`e6oa#E8VW!FNI?KoS8QjR=Aa<+2MPXS6)#?b` z3)m9Mry))klB2G+HFpK%f>xGQs7Klm*ytS@Fmlt|dr+wf)=Wto;oT~->ak^gY8Zt- zqg%P+Tu5SI@w|1tx`A}NGVyT2=$Zx3 - -#ifdef __cplusplus -extern "C" { -#endif - -// Conversion functions are out-of-line so that users don't have to be exposed to -// android/hardware/graphics/allocator/2.0/types.h and link against -// android.hardware.graphics.allocator@2.0 to get that in their search path. - -// Convert a 32-bit gralloc0 usage mask to a producer/consumer pair of 64-bit usage masks as used -// by android.hardware.graphics.allocator@2.0 (and gralloc1). This conversion properly handles the -// mismatch between a.h.g.allocator@2.0's CPU_{READ,WRITE}_OFTEN and gralloc0's -// SW_{READ,WRITE}_OFTEN. -void android_convertGralloc0To1Usage(int32_t usage, uint64_t* producerUsage, - uint64_t* consumerUsage); - -// Convert a producer/consumer pair of 64-bit usage masks as used by -// android.hardware.graphics.allocator@2.0 (and gralloc1) to a 32-bit gralloc0 usage mask. This -// conversion properly handles the mismatch between a.h.g.allocator@2.0's CPU_{READ,WRITE}_OFTEN -// and gralloc0's SW_{READ,WRITE}_OFTEN. -int32_t android_convertGralloc1To0Usage(uint64_t producerUsage, uint64_t consumerUsage); - -#ifdef __cplusplus -} -#endif - -#endif // ANDROID_GRALLOCUSAGE_GRALLOC_USAGE_CONVERSION_H diff --git a/uis7885/hardware/aosp/system/core/libgrallocusage/lib/libgrallocusage.z.so b/uis7885/hardware/aosp/system/core/libgrallocusage/lib/libgrallocusage.z.so index a41705d12f54594f093eba9f52cb0ceb5e16ad3f..03bf8a29bdbd63147a70873751253a7eddad0394 100755 GIT binary patch delta 589 zcmV-T02Qs9X_~k#^b3?9wJjN*T!PoiL0?MQ z#A|#-oMhMiP}YPxfX9EYER3y(3GAFo>QAlsG_E0sDMx1Ild0$=;}KN%d|M|O66#wv z!1hRQ#|~q1cv1ypweLW9kaNqj5cukUW1?2Wg-x@xw##h106oYA<@ei1E&?F3aWt50 z%sjSyAxw+N%!$SuheG!W%9$OrBj(z+4me4j7%_%rqCiy@S#ZOorvepEo8-Hdl}z-W zi=1AfsgQv%Ft&omUSZb=Ep>F|ZmH$d6l2Ilg;#i=mMcFR)3%_wy_r7b99Q^%Vj!l# z5uL{bw1r8Ax=3Ta|6q4uxm$wV;S(tI!M^*8T_l(apVcKwHT;l!aiAJ9%(s#{Yfwsx z|7D>CD$K}ZlK;b8=g}QMiD6!UBEz(5(q)6t=k9|b3;a5R%Nwkf5-f#cgU1gm9bbI% zwB(%tM3Bgf#Kw6UUe(?bKFK$KhXlX==I`-R3LG%toP5W4$2pd#bDFuZkM5-}9E-EQ zT=?KLksXiupYMl?Hf3sm{gK>7oUcwtLR3_V#P>^onUM3O|5mvoC22Y0a6TM&{$oJ- zqoha{&2|cp>tUu=n-OtP!LSBhwL7Yxng5K6?toAqQR&m@X170{?E?T5cJtBCrEkp9 b00FoK_#^-T!5X@Ov&s$b1p?dxlR6I`AoL`3 delta 596 zcmV-a0;~PtC)g*DC;`~9DQf}{ykxzF&3w&-v!Ytd{@4c)lMwl?ZRI*l(}Tg44G#U|L`fYuQrOYH5ThwcBOqpR(#w%o4n(eyQ|sUB%Aw#Y5* z2If}(@04O#8r5zYBD3CSMu}&9KYcS(|;ICG}BfhSqYuw_?0ACtE;Rtl3^y zzap2F3hCJafhoJIotZ98?PrB=$TPZsV4%(_f2W>UVDTFppV(RN6UQ;e=>`7u9!6j@ zKJo{l{_(a6Kiwf28n`-i=SL!L z%&Me0H}>#CbWQ^U>fgH6Qq&eSZ7$j{wYQEI3E3g;h;C`jaS(dk_EKMKQ>vqXZ4Lv@ z)ZTbENYD{_hKRsna3x3|mF^J@eoehb1DBpUv&k7#NUFfcW<)$-#Bfo&dhl1r9dIon zt$dY75eg$Fsn6z8{vP$WDRta&Km@jf!$b3JI6;<17UaI^uVN|jx$p>yv58t`e@BQV zwvl{28eqB1L}Dl_&8Dn=xYzlA59lKb6G!v<5q8Q|i3xU5H?J})3iBfZp6r|<0U;|n z;VKl#+csF) - * instead of ndk/sync.h so the eventual rename is seamless, but should only - * use the things declared in ndk/sync.h. - * - * This file used to be called sync/sync.h, but we renamed to that both the - * platform and NDK call it android/sync.h. A symlink from the old name to this - * one exists temporarily to avoid having to change all sync clients - * simultaneously. It will be removed when they've been updated, and probably - * after this change has been delivered to AOSP so that integrations don't - * break builds. - */ - -#include "../ndk/sync.h" - -// __BEGIN_DECLS -#ifdef __cplusplus -extern "C" { -#endif - -/* timeout in msecs */ -int sync_wait(int fd, int timeout); - -// __END_DECLS - -#ifdef __cplusplus -} -#endif - -#endif /* __SYS_CORE_SYNC_H */ diff --git a/uis7885/hardware/aosp/system/core/libsync/include/ndk/sync.h b/uis7885/hardware/aosp/system/core/libsync/include/ndk/sync.h deleted file mode 100755 index 12c51e1..0000000 --- a/uis7885/hardware/aosp/system/core/libsync/include/ndk/sync.h +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright 2017 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @addtogroup Sync - * @{ - */ - -/** - * @file sync.h - */ - -#ifndef ANDROID_SYNC_H -#define ANDROID_SYNC_H - -#include -// #include - -#include - -// __BEGIN_DECLS -#ifdef __cplusplus -extern "C" { -#endif - -/* Fences indicate the status of an asynchronous task. They are initially - * in unsignaled state (0), and make a one-time transition to either signaled - * (1) or error (< 0) state. A sync file is a collection of one or more fences; - * the sync file's status is error if any of its fences are in error state, - * signaled if all of the child fences are signaled, or unsignaled otherwise. - * - * Sync files are created by various device APIs in response to submitting - * tasks to the device. Standard file descriptor lifetime syscalls like dup() - * and close() are used to manage sync file lifetime. - * - * The poll(), ppoll(), or select() syscalls can be used to wait for the sync - * file to change status, or (with a timeout of zero) to check its status. - * - * The functions below provide a few additional sync-specific operations. - */ - -/** - * Merge two sync files. - * - * This produces a new sync file with the given name which has the union of the - * two original sync file's fences; redundant fences may be removed. - * - * If one of the input sync files is signaled or invalid, then this function - * may behave like dup(): the new file descriptor refers to the valid/unsignaled - * sync file with its original name, rather than a new sync file. - * - * The original fences remain valid, and the caller is responsible for closing - * them. - * - * Available since API level 26. - */ -int32_t sync_merge(const char* name, int32_t fd1, int32_t fd2); - -/** - * Retrieve detailed information about a sync file and its fences. - * - * The returned sync_file_info must be freed by calling sync_file_info_free(). - * - * Available since API level 26. - */ -struct sync_file_info* sync_file_info(int32_t fd); - -/** - * Get the array of fence infos from the sync file's info. - * - * The returned array is owned by the parent sync file info, and has - * info->num_fences entries. - * - * Available since API level 26. - */ -static inline struct sync_fence_info* sync_get_fence_info(const struct sync_file_info* info) { -// This header should compile in C, but some C++ projects enable -// warnings-as-error for C-style casts. -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wold-style-cast" - return (struct sync_fence_info *)(uintptr_t)(info->sync_fence_info); -#pragma GCC diagnostic pop -} - -/** - * Free a struct sync_file_info structure - * - * Available since API level 26. - */ -void sync_file_info_free(struct sync_file_info* info); - -// __END_DECLS -#ifdef __cplusplus -} -#endif - -#endif /* ANDROID_SYNC_H */ - -/** @} */ diff --git a/uis7885/hardware/aosp/system/core/libsync/include/sync/sync.h b/uis7885/hardware/aosp/system/core/libsync/include/sync/sync.h deleted file mode 100755 index 774c3bb..0000000 --- a/uis7885/hardware/aosp/system/core/libsync/include/sync/sync.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * sync.h - * - * Copyright 2012 Google, Inc - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef __SYS_CORE_SYNC_H -#define __SYS_CORE_SYNC_H - -/* This file contains the legacy sync interface used by Android platform and - * device code. The direct contents will be removed over time as code - * transitions to using the updated interface in ndk/sync.h. When this file is - * empty other than the ndk/sync.h include, that file will be renamed to - * replace this one. - * - * New code should continue to include this file (#include ) - * instead of ndk/sync.h so the eventual rename is seamless, but should only - * use the things declared in ndk/sync.h. - * - * This file used to be called sync/sync.h, but we renamed to that both the - * platform and NDK call it android/sync.h. A symlink from the old name to this - * one exists temporarily to avoid having to change all sync clients - * simultaneously. It will be removed when they've been updated, and probably - * after this change has been delivered to AOSP so that integrations don't - * break builds. - */ - -#include "../ndk/sync.h" - -// __BEGIN_DECLS -#ifdef __cplusplus -extern "C" { -#endif - -/* timeout in msecs */ -int sync_wait(int fd, int timeout); - -// __END_DECLS - -#ifdef __cplusplus -} -#endif - -#endif /* __SYS_CORE_SYNC_H */ diff --git a/uis7885/hardware/aosp/system/core/libsync/lib/libsync.z.so b/uis7885/hardware/aosp/system/core/libsync/lib/libsync.z.so index a5fd406ab85fc53fc38754bcd024b20932461246..c25fd3d7487bf22d4ace509fa24b1eadffc23f45 100755 GIT binary patch delta 624 zcmV-$0+0QWLy$wT%mNU68!>58O62S{B(Wo~p(>M;5ds{u_yQLd0oIcc7_fh$8;LPD zsjaqGgX=IL@oBg%Li*u>vB#P6kuyS!7i-IuL{tnt`LzyXrz{Tszh^4yw>}M2V;Q|M zDVU~5SRV`<=ODnNTwq2ZgE$A`rCK{;FE7P|^vxQO)dlp&c)KTKv1gDWOADqob$y7cl;fZp(Lysv)^$RJ2ZM4f_^Y%u0?1o=~M1zGo}CLP3I%A}ULRQ=8I zpTIY?Hhw_Yy}wJ?8)vv|i>1`BaZz(=2t!Ze*)Qs^NK+-MQOygiMf@V<=)du`nYkiM z`VXMUICI?Cw9(WT0~&?_3h${^=nc`YHJYwVT4Q!+Q`m#5W?G-@?y7&FB3b!ZlH}Wo zW;#J|>r0Er7vhER+bqS)^Ji8N|8JoLe2w8ozI0r({QmZd$LEB(7l8ofmS5U)B zt(U^=42?YOUa&5own9fgO7K5Ohasg)0;Q006}Cp3XRkBi8@{@&)KW006}( K6K}Ks8j%J-jyAUd delta 624 zcmV-$0+0QWLy$wT%mNUs7A!xA7>|yllR>m zF3R2fvo{`qOpJ;7<5p*I!sq8&FmP&Jm2RQ(|kEKi_0SdxEs(7#Pf`{vdBbzBkd z@&@U{i-j0Iss|lfz%rIW15TPTtHA$48E|aDeXIj+a-ijIK|oc;*bvl#&a=gX3+4=V z?nWTffDl~kLc?Y39)evY7}4W8?mI?%8Q6*d`qRS7hzaKd-Z0nubibw$}$1$b}8k-#pjlsThC)0TKr0%w^Xs z*f6Pc#JP{y8fJe??gD2C#%qh?T+sn;bf5b+s98RHx!^Zmq^3g+FF32m^dRyQm<%r! z(apB)?N%853!XS7YMeHO)0wSckZX9fw1zZepnoiE006?t8+~dFWb^<5^9ATX003b7 KPo%T|8j%LiBrv)F diff --git a/uis7885/hardware/aosp/system/core/libutils/BUILD.gn b/uis7885/hardware/aosp/system/core/libutils/BUILD.gn index e049eea..9e5d148 100755 --- a/uis7885/hardware/aosp/system/core/libutils/BUILD.gn +++ b/uis7885/hardware/aosp/system/core/libutils/BUILD.gn @@ -14,10 +14,11 @@ import("//build/ohos.gni") import("../../../aosp.gni") -ohos_prebuilt_shared_library( "aosp_utils") { +ohos_prebuilt_shared_library("aosp_utils") { source = "lib/libaosp_utils.z.so" install_enable = true install_images = [ chipset_base_dir ] subsystem_name = "${SUBSYSTEM_NAME}" part_name = "${PART_NAME}" } + diff --git a/uis7885/hardware/aosp/system/core/libutils/FuzzFormatTypes.h b/uis7885/hardware/aosp/system/core/libutils/FuzzFormatTypes.h deleted file mode 100755 index aa9e503..0000000 --- a/uis7885/hardware/aosp/system/core/libutils/FuzzFormatTypes.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright 2020 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#pragma once -#include - -static const std::string kFormatChars = std::string("duoxXfFeEgGaAcsp"); -static constexpr int32_t kMaxFormatFlagValue = INT16_MAX; -enum FormatChar : uint8_t { - SIGNED_DECIMAL = 0, - UNSIGNED_DECIMAL = 1, - UNSIGNED_OCTAL = 2, - UNSIGNED_HEX_LOWER = 3, - UNSIGNED_HEX_UPPER = 4, - // Uppercase/lowercase floating point impacts 'inf', 'infinity', and 'nan' - FLOAT_LOWER = 5, - FLOAT_UPPER = 6, - // Upper/lower impacts the "e" in exponents. - EXPONENT_LOWER = 7, - EXPONENT_UPPER = 8, - // %g will use %e or %f, whichever is shortest - SHORT_EXP_LOWER = 9, - // %G will use %E or %F, whichever is shortest - SHORT_EXP_UPPER = 10, - HEX_FLOAT_LOWER = 11, - HEX_FLOAT_UPPER = 12, - CHAR = 13, - STRING = 14, - POINTER = 15, - // Used by libfuzzer - kMaxValue = POINTER -}; - -bool canApplyFlag(FormatChar formatChar, char modifier) { - if (modifier == '#') { - return formatChar == UNSIGNED_OCTAL || formatChar == UNSIGNED_HEX_LOWER || - formatChar == UNSIGNED_HEX_UPPER || formatChar == FLOAT_LOWER || - formatChar == FLOAT_UPPER || formatChar == SHORT_EXP_LOWER || - formatChar == SHORT_EXP_UPPER; - } else if (modifier == '.') { - return formatChar == SIGNED_DECIMAL || formatChar == UNSIGNED_DECIMAL || - formatChar == UNSIGNED_OCTAL || formatChar == UNSIGNED_HEX_LOWER || - formatChar == UNSIGNED_HEX_UPPER || formatChar == FLOAT_LOWER || - formatChar == FLOAT_UPPER || formatChar == SHORT_EXP_LOWER || - formatChar == SHORT_EXP_UPPER || formatChar == STRING; - } - return true; -} diff --git a/uis7885/hardware/aosp/system/core/libutils/Looper_test_pipe.h b/uis7885/hardware/aosp/system/core/libutils/Looper_test_pipe.h deleted file mode 100755 index 77b7b8b..0000000 --- a/uis7885/hardware/aosp/system/core/libutils/Looper_test_pipe.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright 2020 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#pragma once -#include -/** - * A pipe class for use when testing or fuzzing Looper - */ -class Pipe { - public: - int sendFd; - int receiveFd; - - Pipe() { - int fds[2]; - ::pipe(fds); - - receiveFd = fds[0]; - sendFd = fds[1]; - } - - ~Pipe() { - if (sendFd != -1) { - ::close(sendFd); - } - - if (receiveFd != -1) { - ::close(receiveFd); - } - } - - android::status_t writeSignal() { - ssize_t nWritten = ::write(sendFd, "*", 1); - return nWritten == 1 ? 0 : -errno; - } - - android::status_t readSignal() { - char buf[1]; - ssize_t nRead = ::read(receiveFd, buf, 1); - return nRead == 1 ? 0 : nRead == 0 ? -EPIPE : -errno; - } -}; diff --git a/uis7885/hardware/aosp/system/core/libutils/SharedBuffer.h b/uis7885/hardware/aosp/system/core/libutils/SharedBuffer.h deleted file mode 100755 index 80d43a4..0000000 --- a/uis7885/hardware/aosp/system/core/libutils/SharedBuffer.h +++ /dev/null @@ -1,153 +0,0 @@ -/* - * Copyright (C) 2005 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * DEPRECATED. DO NOT USE FOR NEW CODE. - */ - -#ifndef ANDROID_SHARED_BUFFER_H -#define ANDROID_SHARED_BUFFER_H - -#include -#include -#include - -// --------------------------------------------------------------------------- - -namespace OHOS { -namespace android { - -class SharedBuffer -{ -public: - - /* flags to use with release() */ - enum { - eKeepStorage = 0x00000001 - }; - - /*! allocate a buffer of size 'size' and acquire() it. - * call release() to free it. - */ - static SharedBuffer* alloc(size_t size); - - /*! free the memory associated with the SharedBuffer. - * Fails if there are any users associated with this SharedBuffer. - * In other words, the buffer must have been release by all its - * users. - */ - static void dealloc(const SharedBuffer* released); - - //! access the data for read - inline const void* data() const; - - //! access the data for read/write - inline void* data(); - - //! get size of the buffer - inline size_t size() const; - - //! get back a SharedBuffer object from its data - static inline SharedBuffer* bufferFromData(void* data); - - //! get back a SharedBuffer object from its data - static inline const SharedBuffer* bufferFromData(const void* data); - - //! get the size of a SharedBuffer object from its data - static inline size_t sizeFromData(const void* data); - - //! edit the buffer (get a writtable, or non-const, version of it) - SharedBuffer* edit() const; - - //! edit the buffer, resizing if needed - SharedBuffer* editResize(size_t size) const; - - //! like edit() but fails if a copy is required - SharedBuffer* attemptEdit() const; - - //! resize and edit the buffer, loose it's content. - SharedBuffer* reset(size_t size) const; - - //! acquire/release a reference on this buffer - void acquire() const; - - /*! release a reference on this buffer, with the option of not - * freeing the memory associated with it if it was the last reference - * returns the previous reference count - */ - int32_t release(uint32_t flags = 0) const; - - //! returns wether or not we're the only owner - inline bool onlyOwner() const; - - -private: - inline SharedBuffer() { } - inline ~SharedBuffer() { } - SharedBuffer(const SharedBuffer&); - SharedBuffer& operator = (const SharedBuffer&); - - // Must be sized to preserve correct alignment. - mutable std::atomic mRefs; - size_t mSize; - uint32_t mReserved; -public: - // mClientMetadata is reserved for client use. It is initialized to 0 - // and the clients can do whatever they want with it. Note that this is - // placed last so that it is adjcent to the buffer allocated. - uint32_t mClientMetadata; -}; - -static_assert(sizeof(SharedBuffer) % 8 == 0 - && (sizeof(size_t) > 4 || sizeof(SharedBuffer) == 16), - "SharedBuffer has unexpected size"); - -// --------------------------------------------------------------------------- - -const void* SharedBuffer::data() const { - return this + 1; -} - -void* SharedBuffer::data() { - return this + 1; -} - -size_t SharedBuffer::size() const { - return mSize; -} - -SharedBuffer* SharedBuffer::bufferFromData(void* data) { - return data ? static_cast(data)-1 : nullptr; -} - -const SharedBuffer* SharedBuffer::bufferFromData(const void* data) { - return data ? static_cast(data)-1 : nullptr; -} - -size_t SharedBuffer::sizeFromData(const void* data) { - return data ? bufferFromData(data)->mSize : 0; -} - -bool SharedBuffer::onlyOwner() const { - return (mRefs.load(std::memory_order_acquire) == 1); -} - -} // namespace android -} // namespace OHOS - -// --------------------------------------------------------------------------- - -#endif // ANDROID_VECTOR_H diff --git a/uis7885/hardware/aosp/system/core/libutils/Singleton_test.h b/uis7885/hardware/aosp/system/core/libutils/Singleton_test.h deleted file mode 100755 index c77d9ff..0000000 --- a/uis7885/hardware/aosp/system/core/libutils/Singleton_test.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2017 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef ANDROID_UTILS_SINGLETON_TEST_H -#define ANDROID_UTILS_SINGLETON_TEST_H - -#include - -#include "Singleton_test.h" - -namespace android { - -struct SingletonTestData : Singleton { - unsigned int contents; -}; - -__BEGIN_DECLS - -unsigned int singletonGetInstanceContents(); -void singletonSetInstanceContents(unsigned int); -bool singletonHasInstance(); - -__END_DECLS - -} - -#endif // ANDROID_UTILS_SINGLETON_TEST_H - diff --git a/uis7885/hardware/aosp/system/core/libutils/lib/libaosp_utils.z.so b/uis7885/hardware/aosp/system/core/libutils/lib/libaosp_utils.z.so index 5640449ddca8cdafa225ba3fdd13431f736b678e..f27602bb05982bddb52a5848e0fafb782b6a50be 100755 GIT binary patch delta 888 zcmV-;1Bd*;g#^Hb1hC8k51k)4;$q&=fo=Sp5$WcjlMw5;)c#+_ z>r^zQmcj&-by^WeJgqXF#%&3!_s<~C-;!8Ck+7yFr3@ufQHs*~Qp1A53Q-awx8#D= zzTah;tEJ$b2W~l*NNH4`7HK#l#@h99ZAyG4pVM@7HmEj)Hu=J0K_G3Qi4dQED0*S; zQ?}&fC`#~xwXSF1G=X@Z&JS9fx{d`8m!ha12lwx(5)Ik8HjZE3gKq%Zhnc8>NV%`T zhd0_V>dZ$q$MGQwPkf=y_FDCCkU+qSN#OCL8zJxkTqjWOBV+axx(q3p%SXYOb|2-; zRHh`_XTV{>#vh6%imBlj+QxIWfh*P$+=7%30z7lS+}`rXsj8p z;@R=a|Tlva367gr6n!*Vx@kwwbcQ3IdIPh!OQR9@XY_ zUzNHS&#KrmVH>oWO{W{1;rDT9uB9L#5U!#wG~|)aa$t_>hZCsICukMEM5FlW(XTlI z@18Cxi}uU~130fen0FTnfTLVB3pUViycECK6-7e;LfOX=W%b+(8AzUk%@=g)Vy!$} z88Y#?C|Z^fH4juhWn+?mYyQdqVA^X^J~bJLwnCVvh3~0joO@1!p|NnQkS1Io3xgwS zi{d|L%R%8Qa#5YGHhH~aK$)&44j}Y6TtBw4$yc8Zx~QU!RC9R-#Wh&wBb?tL%UxQ( zhNK0`{diigduF_eS=D9WV4*eFdmELeP<=4FAc-MmehM4*V}o8o`I5Acfu2PqXaEq+ zcL)Va8bR8b(g5U(W5z|iOQ}i#001ljJndEe&>{c<>IbMq007@4<~gy%XZr#G00004 OSz43v??AIa{D208j;xCS delta 889 zcmV-<1BU#-g#^Hb1hC8k5ci(of)^Sc(+)6^;U;1w1d|a09Fsu*1hf1C5cL7ilMVQ{ zf74YahJdDz;Ous^1w)U4yxpjp?U~s?os0dVho(2D+$rE2RsO*L$doIf9)l1m{gYH} z84Dnbyzv}y?E~0!=1c~*ZWdfV9z~+uc&~{c)6K(C=5lhDJ983g3AH=n z77_B&SnZVxU7#Pti_@)f9w0K zyTK-V1iLB~Mjb&T0Z!Z0QV2s%Do-1aPAN7h4;*I27Aqx2u1%i_A*_sS%c^JTF5@C!Bo-is5S_+>;qi#{6fhtpUm#lMD+%TY zW%R*10yTHJK^c7$?f0wrK{%v5`^(ChY~FQzjQ`X7)eoY)`{Gl4+XGqV4ll&A_+T&Y zq|YPyZX79<1H|i8^L*zXf7}jGG4~QHg|A%~XumN#0PE+#{z3oP$iOwDjGKjgb+3MJ z8SSXo>MtAGH2MugAj&~$r1Gk*JVZO5FtO3#1ho3Ge`SYw0?y)`6eIpc3h0v_w;^gr zq_k3bY~bPf`+AP~TUlf;4f9K|6dtBhOe*gebzng=pHn9=_0qX~-L;wJK_qy`2#Ao{g00000 P1X)^>@$W#hK>UCP2>P`0 diff --git a/uis7885/hardware/aosp/system/libbase/lib/libaosp_base.z.so b/uis7885/hardware/aosp/system/libbase/lib/libaosp_base.z.so index ac890ac6dcf1a9fd3d22a3975e07094b65d14d1c..480accf4d82ac3c4ee0a862031aa5b52ac082281 100755 GIT binary patch delta 1014 zcmV?A^Mw&QFnE&@0vxmW0yIwnOOq{9 zwtqNhTOXZrRw|F`3u}o(AXT5+8{`1)@^5%Uv{L;N;s}n)e6>O0pAbk-_~2_C$L+7# zl|Nf;Esr*qWrcJ+;1_R9Lj@CkDA#$FOa51J$JIHT*UwF_tRz%oTE5X*Imai_-|{ za3%N^fHF{=OE5!0zver%0yW`i;@n?r^e&mRlJFe&DC9rV%wzMrg}n3R3Jgr8>5WV- z9u*s|V#-3PLdG~l@9D7~)z8;pD1VeOb?J_}$PG_*e|39Ms$7*lN5w#zkc8QR1+=n^ z3yJ?q(N%%b;c8LBM%;Nc=YL~{)5Th_;3)H4+)obZl4AgwH$PA&dN*Ark5g=ZvR5&2 zKB@tsMhnlfXYs25r*@qRJ4U@KIRz)}Xsejyv(_m^0Mb;NM5w&ZI8*DQS$`CqF3(%f z;C;)W6CYlNQMUVTz=`)UxaE~QE=kP|d}3-&qI_!@iVR74Xke%`04qSbo=a74*&b}( z@h>mqNCLPE`srbYLHm6G>{e{rl$dM$9@|4^YfeEpf}MyYgmp?Bs7ab4gsSO!U0;eP z91FGZt+QFHsDaAJoASD!)_>di*o-|SebkFGjKe@xX)2!e$T@K@XVY%*&DgCS*xfQB zjX1@IMS$Qa{^3yi;Le4#SJJ6f6NRhslV^T2Fi@9nqYzZ4Sbw|G$=um1zgnNsU$^m4 zUEG}JG=M-obgeb&_?9-}N zVC{2DN;^jjYfkV;O*9cGKljDp8AppS6sqBF-#cG1{!7ZdB001#uI{cH2R!otQ1hd#yUE;4jaC9SApaWRz!>p4L0vxmW0yIwnN0Tj5 zwtqFF`9o*ukSaER+zuP%6Qz(uvj=eHdncM&nmqT5m*E=p#}w~?;`nhV0}rPaX6j1Y z%g=b1hGczXz3Hl(h?eqeD36)$e@_jyW=^@8{|Iyq$%BiKtgyCb3J86o|Q(wcbYZBwB(_ohgwoi2UFvI9k07qWPgrw z9eGj(76me+JuL)6E(#y1k8DNKQWxQqhh1bZt4k$}TzkogYjj6ogOhMz0T_zgioX%_ zzOMt^?Wu-{pz=m2la5mz)&L+$tvIzzozwq+Pmv_wOCQ!Hc4540 zsUTA~2R!%p)XWDQA6x{`dSlELO@9U%vGazj{t8z#0&e?a2mH5|7ar%Pb9yHUo;*&s z^Zb1u$}ihaZ1?8lU0Fa6zqUT6)D5-iz-dW6jUo|fxH80sA2snkx_c9UN?gMF6 zXg{;K#{$WXIfp+x47|*KDp4vW8EMu_a{CbPcY((w`McH+A}|xAUFckB=6^88pA!-x zxh&Z}i-jLE<4z}`CKgXHVSoLU)S=4j8S@`z01h83`?cx?{2kMcwB@^NTN1^#PLl*c zq(q2T|ChA|K`A)JqVJO?Z87Ns-aX~3o4Z|gR-WE~*dU3fw#Rex9=BnF3XOWM8m?kd9vZy)U{MQ!6HFS+=GvXAmR;<3O6 z4n>j$`(>csb0 -#include -namespace OHOS { -namespace android { -namespace hardware { - -enum MQFlavor : uint32_t { - /* - * kSynchronizedReadWrite represents the wait-free synchronized flavor of the - * FMQ. It is intended to be have a single reader and single writer. - * Attempts to overflow/underflow returns a failure. - */ - kSynchronizedReadWrite = 0x01, - /* - * kUnsynchronizedWrite represents the flavor of FMQ where writes always - * succeed. This flavor allows one writer and many readers. A read operation - * can detect an overwrite and reset the read counter. - */ - kUnsynchronizedWrite = 0x02 -}; - -struct GrantorDescriptor { - uint32_t flags __attribute__((aligned(4))); - uint32_t fdIndex __attribute__((aligned(4))); - uint32_t offset __attribute__((aligned(4))); - uint64_t extent __attribute__((aligned(8))); -}; - -static_assert(offsetof(GrantorDescriptor, flags) == 0, "wrong offset"); -static_assert(offsetof(GrantorDescriptor, fdIndex) == 4, "wrong offset"); -static_assert(offsetof(GrantorDescriptor, offset) == 8, "wrong offset"); -static_assert(offsetof(GrantorDescriptor, extent) == 16, "wrong offset"); -static_assert(sizeof(GrantorDescriptor) == 24, "wrong size"); -static_assert(__alignof(GrantorDescriptor) == 8, "wrong alignment"); - -namespace details { - -void logError(const std::string& message); -void errorWriteLog(int tag, const char* message); -void check(bool exp, const char* message); - -typedef uint64_t RingBufferPosition; -enum GrantorType : int { READPTRPOS = 0, WRITEPTRPOS, DATAPTRPOS, EVFLAGWORDPOS }; -/* - * There should at least be GrantorDescriptors for the read counter, write - * counter and data buffer. A GrantorDescriptor for an EventFlag word is - * not required if there is no need for blocking FMQ operations. - */ -static constexpr int32_t kMinGrantorCount = DATAPTRPOS + 1; - -/* - * Minimum number of GrantorDescriptors required if EventFlag support is - * needed for blocking FMQ operations. - */ -static constexpr int32_t kMinGrantorCountForEvFlagSupport = EVFLAGWORDPOS + 1; - -static inline size_t alignToWordBoundary(size_t length) { - constexpr size_t kAlignmentSize = 64; - static_assert(kAlignmentSize % sizeof(long) == 0, "Incompatible word size"); - - /* - * Check if alignment to word boundary would cause an overflow. - */ - check(length <= SIZE_MAX - kAlignmentSize / 8 + 1, "Queue size too large"); - - return (length + kAlignmentSize / 8 - 1) & ~(kAlignmentSize / 8 - 1U); -} - -static inline size_t isAlignedToWordBoundary(size_t offset) { - constexpr size_t kAlignmentSize = 64; - return (offset & (kAlignmentSize / 8 - 1)) == 0; -} - -} // namespace details -} // namespace hardware -} // namespace android -} // namespace OHOS diff --git a/uis7885/hardware/aosp/system/libfmq/tests/aidl/default/TestAidlMsgQ.h b/uis7885/hardware/aosp/system/libfmq/tests/aidl/default/TestAidlMsgQ.h deleted file mode 100755 index 6e7c859..0000000 --- a/uis7885/hardware/aosp/system/libfmq/tests/aidl/default/TestAidlMsgQ.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright (C) 2020 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#pragma once - -#include -#include -#include -#include - -namespace aidl { -namespace android { -namespace fmq { -namespace test { - -using ::aidl::android::fmq::test::EventFlagBits; -using ::aidl::android::fmq::test::ITestAidlMsgQ; - -using ::aidl::android::hardware::common::fmq::MQDescriptor; -using ::aidl::android::hardware::common::fmq::SynchronizedReadWrite; -using ::aidl::android::hardware::common::fmq::UnsynchronizedWrite; -using ::android::hardware::kSynchronizedReadWrite; -using ::android::hardware::kUnsynchronizedWrite; -using ::android::hardware::MQFlavor; - -using ::android::AidlMessageQueue; - -struct TestAidlMsgQ : public BnTestAidlMsgQ { - typedef AidlMessageQueue MessageQueueSync; - typedef AidlMessageQueue MessageQueueUnsync; - - TestAidlMsgQ() : mFmqSynchronized(nullptr), mFmqUnsynchronized(nullptr) {} - - // Methods from ::aidl::android::fmq::test::ITestAidlMsgQ follow. - ndk::ScopedAStatus configureFmqSyncReadWrite( - const MQDescriptor& mqDesc, - bool* _aidl_return) override; - ndk::ScopedAStatus getFmqUnsyncWrite(bool configureFmq, bool userFd, - MQDescriptor* mqDesc, - bool* _aidl_return) override; - ndk::ScopedAStatus requestBlockingRead(int32_t count) override; - ndk::ScopedAStatus requestBlockingReadDefaultEventFlagBits(int32_t count) override; - ndk::ScopedAStatus requestBlockingReadRepeat(int32_t count, int32_t numIter) override; - ndk::ScopedAStatus requestReadFmqSync(int32_t count, bool* _aidl_return) override; - ndk::ScopedAStatus requestReadFmqUnsync(int32_t count, bool* _aidl_return) override; - ndk::ScopedAStatus requestWriteFmqSync(int32_t count, bool* _aidl_return) override; - ndk::ScopedAStatus requestWriteFmqUnsync(int32_t count, bool* _aidl_return) override; - - private: - std::unique_ptr mFmqSynchronized; - std::unique_ptr mFmqUnsynchronized; - - /* - * Utility function to verify data read from the fast message queue. - */ - bool verifyData(int32_t* data, int count) { - for (int i = 0; i < count; i++) { - if (data[i] != i) return false; - } - return true; - } -}; - -} // namespace test -} // namespace fmq -} // namespace android -} // namespace aidl diff --git a/uis7885/hardware/aosp/system/libhidl/BUILD.gn b/uis7885/hardware/aosp/system/libhidl/BUILD.gn index cd770e7..6a8b616 100755 --- a/uis7885/hardware/aosp/system/libhidl/BUILD.gn +++ b/uis7885/hardware/aosp/system/libhidl/BUILD.gn @@ -14,7 +14,7 @@ import("//build/ohos.gni") import("../../aosp.gni") -ohos_prebuilt_shared_library( "hidlbase") { +ohos_prebuilt_shared_library("hidlbase") { source = "lib/libhidlbase.z.so" install_enable = true install_images = [ chipset_base_dir ] diff --git a/uis7885/hardware/aosp/system/libhidl/lib/libhidlbase.z.so b/uis7885/hardware/aosp/system/libhidl/lib/libhidlbase.z.so index 390a277eba9ac732992e8045885fa4efbea0a57d..38f1d34a242f32a5c7ffeabe55866c4345cb3804 100755 GIT binary patch delta 11930 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 delta 12051 zcmV+uFYM5enH`Xt9grvjP)4yTq5=@c<2Ytg>;M8*YVh8bX&&^K5rGCAgZKi6_yPfk z_yPil_yPlm_yPon_yPro_yPvE_yPw+6ans+Jr@VPe`E|6NJr<6E5-0_&aM9Nd80fS za%m)+*L~9Ha*7M(`#+`zGhG%JHj+zGa5-Dq@PH`iI=6tm~9ml|W=%R-~al+^?WNa)rOu?r(%g}zf_ngO5DfSeN1Es{7v(~Z z-?J!{e^x(CD-%lV0o%hFX?g>jEx?X)M00`eZJwQW?mH~mEracB9u)$5=J?$OlPAVcXDp;^}qIf7;5;!rEeI*v&-v(J0*0jd91*cae{? zu)A_Pbhs~~Y`}cAmksN5W&c!k^Mmh{kN6J*mJYqrQbuN-F32)4JD2Pp-}J)8-MZzW z3~dg%kQe8=;Mmc=Lz32ZAH)zu`w?haV3@$! zXDAW5yNjXq2mbWIYnGGb8}KUw9#G#@R3l9mx-jj4E+((O;INSZ#j)6saJxL~9MW;b zcF8B2!OvVo@74#UQr$0bERPE@|C=PkfArIr0k@Tywwq(67KM;cTWb%<;EG@BB@r@i zZSTn%G`B&3L9=D;dJ|Lh8&W{I6qY|l;NQQLGFdULm?hN(V%A|3G~KN34gpE&_52&> zF1>~=sQ2;4?Qiuf2Fy36mo@xh38ttLPw?f@UT$D@WGHUdugi~;e@HXO zkli8B+&c%dD_z+of$FB=+DE|kxu{?MwyhDY;AbW{z2=)pq@P>QMj&9WL5I|0m@0n= zu>>sVe*2ojkY*ZYmukO!s#jcOgPctJs<%oKNKX!=Ed?xa0?0@i(-I}N!x6mON4zDE zk~A|2kB_;t!{;+6;0C}K`!*%I%$afH&Iz6b z??rdf?xs{rG1g{z-WDVKMA3hS*HCHLIMNf6T%g~bPq;LLJHI@fdHn-Eo<2#D{d1gT z>#!ZPIVYbL(_v(LuTIo_@ahY}=4R{e&%?%DxL2t(5BaFje8`#eXR{5gf9fNIE?5d_ z>JlG#*G1yp*f}gwJu&>dkI6@HgyQmiOsLV^-`PNDtnCrmORJzNz>rUkarWF-*iuu& zRH7S$+<<#+rwLrvAFe%B6Q%f67l<+rlu@5)J8uRpm3b4KoNymon{DN*W}){3zy`XZ zrp%OVG+KId>J2V#pU%?Df54Dtd%qH+c~=;aOA30zkYzog38ds8mtHWs1ODgx;Vys; zKd6;ka!S2XefySXY_Eb>Z4*FOs* zR(36eTx!#XqW9MEMMAsUFIH}ff8R+{;vmNVK9id(IgToYaoQ?*f1h2ly?_dGI9jlk zh9t@26x?zCoeQ8s76+DzzQ~RpTJUiJ7le zOK`1n@*#CdFnJL?-KKURq`ZaF_mc&CA{%0|*#&?EmrLWnQ6U}jG@an?!fA48=}Y|A zmdMP^&;?hC)(fdke_iO}yrrb%5BRl8BuMW)UJj9&i(EO<3~B94CEZr2bswfhPz z`&oRAZ#=#a8U_l|&B4qsoi8~-TTFIwPxy!PVmR!rxAyDvf0v5*M;JHDZ}S>+U^aat z&_W@9%FGC#{1KXU6K7~9t+j2Z57^!^LRLfonp#@mhmNBgQN;M&qI`GD37g1lG9R>B zB8hUGZF;3-pkNoB2bWQDbLI~OuIW4%S z_Vp&%X+!RH6+n0+!sznqp*hS2DFnJe`Fq$BJ9HB3Z=pwqmI54S;%C|nMlwD{1e0{Yw&k; zA^W#9=Y8<*kNcXylW{(Y^eV!L@6|0SL13kj-M3~Q{{8A({*sSF;QxuRvWC|Z+xB`M zy@!)u;QYWg4J^=Gc}kA2iKHYmmpT0e9Af5$H7@fIKRSfLUr-KE_5WYCq$d1R?NL8Kd=Plfp}x0QD!3yANK)p%^yisqSY7UkF9!G?BPZnRb>Atl&#h=u1kq76Qc{IP%)<`=*5!f8*^u$@qROR&_It&V2rE7R{G|^chSENaEVz z`Tl~>8K8|INwNyk+!K-jWcXK5UH$PXkX*6g9L|stYsujyLn8f0G8%CNDoAHDo$NN@ zL-%>cp-cD(_X2cbC5$`ylQoV}p_??oZYrNwZXOP=nu%f2)jK zH>mHuVvu;}u{4)P(Y3J@mNs2^wp78D^1K@A>%H z8m%xoB;esY1ue+ZKc> zhMO8*2=vRes@L=z{=}U3m4U8W2j7!6cSfChFs3SLup!KEig!74HX2R4gTukLe#Y~yzcLhUvXWcs8ILhz3v8&Ma~h=Tq*`-Uw4e{a0}eEf}u zy_rrYMFxf|>U4n9vjmF!JHsI1OAZbRX#IgDn%Xcf0d9-b{9FiN5opZq#xma-MN1fc z@$xlq38p+}c|nY!eA7exw_+^h=APuh}I#h{jl+#Ie zeT^gWRQRD{%CD1sWK4S^a&CkHoG?FtPJ?C*{iFLslZL%glzP25h3o2iD-$u2Fg4EW z^&9@Mvt@_#a>pm->*AJmNX6hBwmuN=fAh<*Wu%HjjpB8xn2QM}1V6$D&_o&D-BF2M zaWPn?x{GiPdj#cGe-}GxJGsEE7*9E3LU?iSsJvU}`u0gZr=v#LTA1Z2WjO|)NQS&- z%wEv7U48wiohhy4)dnscEpo*UI)HdLmY3#zRGV@i3hrSQERT2Gpqz|jmZ}Re$5!HD zS6Erie{BDtiR1KDQn3GBhfKgi8t=oD`CO>TW?LteFkJ97e;r$U4;4kR5bm9<`qy9| z2w8B&2Vn3EdKC?H_mV)bkAr9BmG9>8kHO{I)AiIM79xYxB7P{1vlY#u2xt1TcMI$p z{lBYw#Ms%xa*jtXf73&C8l08UW4)w!tAX8HPb;iC{BRr# zrZ78O;p9z{f0hD`Big7eo$^p+(PO`&5Eq}rq^+gesxb8_81_28?;}UpG3YijAFHKj zQep9GFTZlEla@iu;t3UTRRo5d z*#*bS9Y93_>UiXNGWeP2xA~ZhJ1%!{MUoXgqGQgFe~|=!7J@t~FSqY|BhH^3pmy?N z?CEBbf9wCjuLzafFx^@k%iwPpfyC|E4>Yoyu*Ct9_~8`g#RVkiYY9rN}X|*Yt*6Awl9**bzgk zzfMhs`ZFRT5w2Y@L?~H(ANOm_h17mC68^9le}jX(!=6d|0l5;}>8F>I`{~T7kw8~$ zysTNUMJ(z9Mm8rlbC%)yg6p ze^_M?NmmP-qDFm{*g0ZaZgLnJ++EhcR252%&jS>5h)bj1>j)|D7`>qmwu;t{*-F!{ z@gZO&KfOl4IN zAzoiS(v)u_qCwmf9zENqQz234K07gcfA-8;{D}jldz-~F7nBkTW|+0NCV8uw)oWc? zY5M8NotAC9e1t&1?8}|IG|pxZZxDB|Bb_apnDB$Q28P5VaLC)RtubS5CPg#X-f|27 zyzek@5ee_b6*%57LcPq6evmKVEE6G~t@wFM(x6oxPVJ0Y{Hue~FX% zk3*aLV09tsc=%BTYi%Nr?+_6T$M_!ZQkN>tq@|(iDCvjH8H0S`y+C=t&Ui9ySwh~{ zO~eyjhefA$A6r{3F5CojNTj$8a$-jh{&1Wq{@r+#a9kH2T_}I(VagppnzMrw)Q;;} zuG2bZKF!t#Q-0=wjKf$(Xj6i-e_BnhB~jr*FfL5eo(t{gmtOwigiND9g7L-k|1!eE zsVeF2E_+IvFE<%QJ7J89JHI1O?PU(@4J=Y!AF@jQX;L}=y1&<3PJBSXC_+g7yt zGYt(+1gPeEcx0@q@p3h_zqjujuE}T?QWDpIG;()u8PqRL4Nz*v+~#hMv8uBTHd6g$ z8YhY6eE*k7lh2@MIK!l$e?Qo+TQGM1R}zR1Nn%^VCWCg2leW;H#l&}~v6YNRk`v?q zcF$yE@1y1TSDrQ13QVptD}3`A)J;fu@F<2)igj3B5F<4-V`wFuL4-rFywWHx`icRR z-AM?yy4^xyfTNDsDtBPIlr;+FVE=QarX{QCdIb_z94h1FZJh-ze+iq7LdN9%5KQZ8 zT#dpicNoG1)uPS3z7&%eLR&SOfJ@wHVZ&}rhhPKH7P~5aeYrMsYNT2Y5CTZ%^Vp}e znH&M9l3PYH{2>C)PpJK$RpNP=t@d=Mpf1phRCyG%`_BCI18`h)QDt{Ee=%4{#tXz$ ze#ux%$x?6+gukR&zg4eZ0Ukno13F|) z?L9*apgP-96-dF#Z$=M7nsHBEZN&3@G7`s;T@VGOWvd(xe`(p!DVdhZgDbz-a!co8 zCFJN}n4O4tN5FJ_CzL%A$ozuhPfj3$?jWJci z_>_gv`K&Y4Czq?pEfW8^0sR1ch|3YWO5V{b?G=+-^VJ6bqAWCA1EpR}h zkoT5ZK;JK_;Gj$K8K{*vn+SvEQy)aUY?nP5Ud$!4e~}QUe2P%~fol~qF$N8Vxz9&@ zoJsO}l~D|KppJ?#@lb z-y$4-3%M;`i|H0N^wN?X9jKItBPt#$EGtt}qPu4r=ei1)GA-xZb7_oo5->&$cA!u7 z2Vwzz(`_T4I_cVBIOPLSUgW+p$O1r&S%kO(dU(!%Y=OU}BEP207 zIIZ(?;8BPCBoDJIDNFDm8Wl!%n5MC}f9t#;1Bzs$6<7Mcb-gXx##*anqh)_^eM+_b zgfymoEZV%|J;~P3=loy^y^US983e*@n7S37v}X8vW`s8briLCOto;<;GfY2VO4Gi+ z^pE!&Bb0gOr^WTf%#N8MHJtqwpQi}MZrz!*CB9v{t%VZ4i=Lo)`Yljk%uPv=e;8(7 zIJo`+pz9U7DXO_ye~E0M!f7MtHZSRCyl+A;A^9UwFM))6mcEp7&~~lw8@`q%hr~l; zF8j#=P>^SsY3P9W1$31YJ%f56X8^iM_N3gvv{Q9C0;);TIfOBOKYefv7;iWzmB zdlVVp_Gq{8s?D3}*J*6)$0$^z5NgT|-3Q5bhL=spYd(Ar5Qa$JM9H9%V5$g%mGXFP zO_m!zP`CMZ@34PD>%L_BCMRXa@gfK#5RK_Z_sQRQOkqE{ zGqN^Hu`)*H>fnR2e#dYQf9=TXTtos31!5zyiWC{lvGOzjx4-B0ZKj|QHlRcB3k3TK ziVqVcLUm=G#au@mJRbe*eKcTLe?OdKHuO}@T||Vg05-4VyKgO!$FkMq&$r(qG3XS4 zcVpWZK5<7~_3Q`0_DlC7pL`R=^`1pmoeQ0d!n~;7Vl^m`-e?<@*kw*cA0-1PS z?c;XkQV(eMkv((V9TsV~*l1qW4s*3VeH0GVyPfxH-u1I3Q<=g$(Uc*!9J=)Ywv&V( z21_lJ$H!{kp4sAdz&~HrJdQO|v{W!&+>+mcpX>B3=pH9{u?M&;UwFPbB43+)1t=IK zwuj_y$Y{hD3~qAPf3HHS-I4U<+M*QG!pz_AT*Q^t<~HN`>FOP8H)f>`o!A%_og`d@Os+td+`Km_L3GT?>Z;FtcaljCOo4Kh86MoOag?bI37xxiFj z!qFPZT?8G)e}p>$H6fZj4?t0@4j|sD=k!ZmIZR z@PJ#|?f-0o{$daL`XpF{$0UE4or)1xL@C&hOkqP)zTWS2CaBh=xnb>-4K(k@pu2Q` z9K8Wn#?82r%IM6Hiz`Al6!G#=x0{e|1uBs_)D`91e>}#+y3*9e0i0Mtl@1oE&FO}> z7DMbqtb0cF)JdLq?~*K4ruuG&w_2fHba(2n5$fLZ5H305@{gmVgUk_ELQp*gwl?zW z(Y@#^;gzRxt(rG3q#agMX=9DaiBv-%2bs+46XHY8d(DOQDcb8{14|h1MF>9ZAh!o&SI`sJK@^Hy`}>#`s|w_GjJ$IcNb!LWPV3)^um?_nv9 ze}7iwT9a$d~oX7_VOXQp8EHkVh6eRde^BCw{KjJz)BBLqqsQ6dy@?s&fTCB- z)*F9XuMh@H8OQ>Mb8F>u&Z2s1mrZPQEfm-O(>y}%WOXcif25Sc9Q=q&ufo#wkmmqB zx3!am!T5+0ITQ4zD@N2U@ntcLKf`yuI0krmW8*ZwIi5XLB_*VwvFtRlJd!9!8LngH ze=ZpTeh3>u z49ip%E_7^vtCLd&b{W4TV0w*jiS6%ne-FJe-id+Uk6`Ppp2#?zeA!NdGAvy+8|Uq_ zpiQD9Y?f^xqNJ2lB#}yFw;IiAg>kdrTL#d&4qCJWWN2(d<7(rt=f0kW4 z`E|GlKLr$QJY5J%StA4V3)UX#8`!_l50rQVqG=&WXeY;ekb-FTBNBMxtsaQwT=QY| zFNqYt!$zzUl^6W!&PYSDut;1@5&f%u56r~T&Sc3|Lal0=Y9D%iwglu7MfX9NJGW3wL!Y;}4VvOJaBNNNF%~CGs-=ehf#$Jyvq(FEo@vpmqo_ zKHIfh02`M4*EZ%npQK72c0}3d%f{nN88UkZn!wR;%0u7SdZihHjYs`c}qlK zBbrnz*D}))YAp?G*k6elgHEFRv}m=q+2Kx~dC}gWf|Pfz&PPD(tUyaLSVR+hEb81< z-%MBz(RV;fgsksl%1w?W@;-=j-Rjs><5Qe9sG*;~GK08#nD4UFe{CFM2>{ahv(%)V z*oby^1%lX>(>a%H0C;m%-tf}N8B81S^GMSYT>ro2`ou{5K>El>pP{z)EqWW|QTWGw zXBa=Ce#)>s@n(32A5~P+o7AgoD3A>~{zRjm%+U;ESv62eu7Fr-)UU%4mOUS*ysz9y zszQ@BU0r6AZtjYoe}EkO-r7HLz`>fNqr9TG~Zfy=!LjHj=Mvj0cG8CJzvFB|z zJfRO&%B5TZPFoA}^0Zw?t2BCktHsw-&_b>YZm$eWk|Vja_}i9qiLH-;n{)9}M~{w4 zM3vW8QQ3vO>ow zwaJ6+PAQ)^GNgsH4cU-F?t8Zn`!-}{l>$d*zvRF_T^a4=b|A9%hOz1Pqm}R$2$Mmt z{pFiY|196Gf592CpvLBFvw!t$4w*gjmY!exmOAOJjz8t@@3&p3Gq_ zG@!6_e|fA!dEx=XI_BsaHJ}_XA~@!>LOqIcHfEmht-xp3u)uy^y03~uZ{Kbzvq{MZ zAg~STbj@(R?SB3ASXHlLTCgMZAuJB)f(d!!Mz07s-huE59&RGa&!s1xgp&+_$#An! z1d*X0F;50@Dydebude*-_}n3%FcE>n_{3%C`YTHE8U!7=^P%IKOf^X$nqf(6{a zwV4V#vh1;g8cSFV0HP9$t@gVvBhb__Y)`1^SI>LW-*H)8WA$1MksWHh=^gvW-dCdn zU(8{45oFt#E(ry<4O*c&`R+b6k^uc1mjj2NvQ%?va*rUs{IoBEv#caVkL8Xg9hXR~eSvd82hpo6_n19M;r+hZ{Y|aNmjN=)WMHgkqzXIy zsGVveH{oK#_S8Bzu>6_)gunrt-wO@#f1{J{(@Pc~lz>(NC-}<=j$)C&5=iev18G0G zUITO4fFFEV5?Ghz_)`DC_YY_rYGO=sihDr*h(#29Q`4Idt*VMH>--rr6wBxE!7_<7 z@(emWfm93ArhZ%1>Y}cltz2amGidWwqn>7vi&iar4#jx;zDYCTe{tO= zg!|mtDzFfil%(Olwe4^mb`QIbYe!^7Mc2g0M>SB|m_?F-o5Dy2j~}&q|8Au_9$MJv z7YWx7<9Oi-gIHQ-mvS|N+_vii$?TX!Yj0AX>rd&}){f@&L+e7lPL-9XPUcr7u^jc> zxQ>5ky7?rYb;UMy$k@4Gn}yNbe*$KZ?Ka~zQe%^ZG7kTE)G)3^MN-&1Q}&3o+6m^| zmXWauvB$2tL^_#h6Z96`b5F-me^D%G&}n_#VW0DjilVak;R!{j^W#3DRg_rL-)OYs zw+1Z@QBh{{r&!ZlM@wuuF&=94!4wqjV-LhVhun#xGga++E2ZIQrok6of5&X%LrNymrFC9vZ+8pAm&d8L3e`UtTdU;`+WxW5(L8k{3a~N0J-bRy!6%I&S~7^*tHt0WFUIW})pkFHcuNr8|JHLaZ1$+O?`x)7Gf- zUh1!v35P6W&J8#c2I^TShY`bENaP>O^C3VyANl)%1RT%nX4`LZf45XQO`d}@!P;QA z`4ZT%!pFm~HiE+!DpzLG;z%FW5a$7(UAL>G1S&v0SH}$dBoSF|Xc?(Jy|rt2ce*42 z{-Bl~q3yfqas7@cL9Upo*7AHV;(rVdfUks1g5EB;9ZOKK#XvHQW4E7WYB;%|EAmDG zoJlnO29VY8cj^P+b*sgG+JlzsOxT|t=SZh>2N?E9VFru_L14-$f470tM&w)j-Zxps<^3=+ z5vQN@IE?)(Fw1a*^j_X*!;N7<*J~6Ka)deAodYnWxmF;iL%V z!hVxBo*{U>!Z^$Xcj13Hwio+F_%-Mv4jLd9&zF{8e^+)=$TkN#VKTw!N`f12yR@)a>_zVhu9hd7{p&l^I$Gs;YyIrlCv$}+6GeKJ5^ z9Mk)U)ZqakO0Bh84d9}(*3^|B1T8MjtDCKgnEE>14;~Q?R_pkjBqs#6#Kda}VuDJC z17moiHFYo5a~s=%1C>pr^Da2cvyX%lf5-1ue_@LF;yDTA(hkcDOP88-Z^y4ru%j>|YK z;-sC=lXXpgj?CQ0K`p8oeUv|&FuN?IArDsavLxWn zU`&-Vl!#WB)eGOW=f@?LTdxwnfMjNLGP37{!82g#i|U11`;BCZ_+UFlxu{3&AKq>SF7dF+0e!v?m2Fe~L;-3YlOkkt0oBqnLem0})D zs{=}#`%^B-OAi89A-OApe>GxiMILW_ku#T0A?FkbcHzrXwNkPK657Zh$jST8=>e2UsxoZGg;z4*`-?I~}?t@~Y^e8hba<)o2E(9aX(6PY-=m4qd!Pnt!-)pUkM;N~%lh?+~+;OqxqlKG6Oe2@c_ zED!YiuvYo>RpE?f&z@73)o=2F^7}c9f!}mm`E?tzW@LLfZL)5 xM8w>J00D|#(6|c#GhMLtm%v2_Ot%n52Ve#bFfRZA00000000000GClr2NNh&T$um> diff --git a/uis7885/hardware/aosp/system/libhidl/libhidlmemory/include/hidlmemory/HidlMemoryToken.h b/uis7885/hardware/aosp/system/libhidl/libhidlmemory/include/hidlmemory/HidlMemoryToken.h deleted file mode 100755 index 4020377..0000000 --- a/uis7885/hardware/aosp/system/libhidl/libhidlmemory/include/hidlmemory/HidlMemoryToken.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (C) 2017 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef ANDROID_HARDWARE_HIDLMEMORYTOKEN_H -#define ANDROID_HARDWARE_HIDLMEMORYTOKEN_H - -#include - -namespace android { -namespace hardware { - -class HidlMemoryToken : public virtual ::android::hidl::memory::token::V1_0::IMemoryToken { - public: - Return get(get_cb _hidl_cb) override; - - HidlMemoryToken(sp memory); - - protected: - sp mMemory; -}; - -} // namespace hardware -} // namespace android -#endif diff --git a/uis7885/hardware/aosp/system/libhidl/libhidlmemory/include/hidlmemory/mapping.h b/uis7885/hardware/aosp/system/libhidl/libhidlmemory/include/hidlmemory/mapping.h deleted file mode 100755 index 352cbaf..0000000 --- a/uis7885/hardware/aosp/system/libhidl/libhidlmemory/include/hidlmemory/mapping.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (C) 2016 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef ANDROID_HARDWARE_MAPPING_H -#define ANDROID_HARDWARE_MAPPING_H -#include -#include - -namespace android { -namespace hardware { - -/** - * Returns the IMemory instance corresponding to a hidl_memory object. - * If the shared memory cannot be fetched, this returns nullptr. - * - * Note, this method call is relatively expensive and does not cache conversions. - * It should only be done when initializing a buffer and not on every buffer read. - */ -sp mapMemory(const hidl_memory &memory); - -} // namespace hardware -} // namespace android -#endif diff --git a/uis7885/hardware/aosp/system/libhidl/minijail/include/hwminijail/HardwareMinijail.h b/uis7885/hardware/aosp/system/libhidl/minijail/include/hwminijail/HardwareMinijail.h deleted file mode 100755 index 8fcf007..0000000 --- a/uis7885/hardware/aosp/system/libhidl/minijail/include/hwminijail/HardwareMinijail.h +++ /dev/null @@ -1,30 +0,0 @@ -// -// Copyright (C) 2017 The Android Open Source Project -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#ifndef ANDROID_HARDWARE_CONFIGSTORE_MINIJAIL_H -#define ANDROID_HARDWARE_CONFIGSTORE_MINIJAIL_H - -#include - -namespace android { -namespace hardware { - -void SetupMinijail(const std::string& seccomp_policy_path); - -} // namespace hardware -} // namespace android - -#endif // ANDROID_HARDWARE_CONFIGSTORE_UTILS_H diff --git a/uis7885/hardware/aosp/system/libhidl/transport/InternalStatic.h b/uis7885/hardware/aosp/system/libhidl/transport/InternalStatic.h deleted file mode 100755 index 859233a..0000000 --- a/uis7885/hardware/aosp/system/libhidl/transport/InternalStatic.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This file is for legacy static variables that we are trying to get rid of. -// TODO(b/69122224): remove this file - -#ifndef ANDROID_HARDWARE_HIDL_INTERNAL_STATIC_H -#define ANDROID_HARDWARE_HIDL_INTERNAL_STATIC_H - -#include // for SchedPrio -#include - -namespace OHOS { -namespace android { -namespace hardware { -namespace details { - -// TODO(b/69122224): remove this once no prebuilts reference it -extern DoNotDestruct, SchedPrio>> - gServicePrioMap; -// TODO(b/69122224): remove this once no prebuilts reference it -extern DoNotDestruct, bool>> gServiceSidMap; - -} // namespace details -} // namespace hardware -} // namespace android -} // namespace OHOS - -#endif diff --git a/uis7885/hardware/aosp/system/libhidl/transport/allocator/1.0/default/AshmemAllocator.h b/uis7885/hardware/aosp/system/libhidl/transport/allocator/1.0/default/AshmemAllocator.h deleted file mode 100755 index 131417d..0000000 --- a/uis7885/hardware/aosp/system/libhidl/transport/allocator/1.0/default/AshmemAllocator.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (C) 2016 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef ANDROID_HIDL_ASHMEM_ALLOCATOR_V1_0_ALLOCATOR_H -#define ANDROID_HIDL_ASHMEM_ALLOCATOR_V1_0_ALLOCATOR_H - -#include -#include -#include - -namespace android { -namespace hidl { -namespace allocator { -namespace V1_0 { -namespace implementation { - -using ::android::hidl::allocator::V1_0::IAllocator; -using ::android::hardware::hidl_array; -using ::android::hardware::hidl_memory; -using ::android::hardware::hidl_string; -using ::android::hardware::hidl_vec; -using ::android::hardware::Return; -using ::android::hardware::Void; -using ::android::sp; - -struct AshmemAllocator : public IAllocator { - // Methods from ::android::hidl::allocator::V1_0::IAllocator follow. - Return allocate(uint64_t size, allocate_cb _hidl_cb) override; - Return batchAllocate(uint64_t size, uint64_t count, batchAllocate_cb _hidl_cb) override; -}; - -} // namespace implementation -} // namespace V1_0 -} // namespace allocator -} // namespace hidl -} // namespace android - -#endif // ANDROID_HIDL_ASHMEM_ALLOCATOR_V1_0_ALLOCATOR_H diff --git a/uis7885/hardware/aosp/system/libhidl/transport/allocator/1.0/utils/include/hidlmemory/FrameworkUtils.h b/uis7885/hardware/aosp/system/libhidl/transport/allocator/1.0/utils/include/hidlmemory/FrameworkUtils.h deleted file mode 100755 index 0a62575..0000000 --- a/uis7885/hardware/aosp/system/libhidl/transport/allocator/1.0/utils/include/hidlmemory/FrameworkUtils.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (C) 2017 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include -#include - -namespace android { - -namespace hardware { - -/** - * Returns a new IMemory instance corresponding to a framework IMemoryHeap object. - * This encapsulates the idea that IMemoryHeap and the ashmem instance of hidl - * IMemory are backed by the same object. - * - * Return is never nullptr. May be an invalid hidl_memory object. - */ -sp fromHeap(const sp& heap); - -} // namespace hardware -} // namespace android diff --git a/uis7885/hardware/aosp/system/libhidl/transport/memory/1.0/default/AshmemMapper.h b/uis7885/hardware/aosp/system/libhidl/transport/memory/1.0/default/AshmemMapper.h deleted file mode 100755 index 3d3a7e1..0000000 --- a/uis7885/hardware/aosp/system/libhidl/transport/memory/1.0/default/AshmemMapper.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (C) 2016 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef ANDROID_HIDL_ASHMEM_MEMORY_V1_0_MAPPER_H -#define ANDROID_HIDL_ASHMEM_MEMORY_V1_0_MAPPER_H - -#include -#include -#include - -namespace android { -namespace hidl { -namespace memory { -namespace V1_0 { -namespace implementation { - -using ::android::hidl::memory::V1_0::IMapper; -using ::android::hidl::memory::V1_0::IMemory; -using ::android::hardware::hidl_array; -using ::android::hardware::hidl_memory; -using ::android::hardware::hidl_string; -using ::android::hardware::hidl_vec; -using ::android::hardware::Return; -using ::android::hardware::Void; -using ::android::sp; - -struct AshmemMapper : public IMapper { - // Methods from ::android::hidl::memory::V1_0::IMapper follow. - Return> mapMemory(const hidl_memory& mem) override; - -}; - -} // namespace implementation -} // namespace V1_0 -} // namespace memory -} // namespace hidl -} // namespace android - -#endif // ANDROID_HIDL_ASHMEM_MEMORY_V1_0_MAPPER_H diff --git a/uis7885/hardware/aosp/system/libhidl/transport/memory/1.0/default/AshmemMemory.h b/uis7885/hardware/aosp/system/libhidl/transport/memory/1.0/default/AshmemMemory.h deleted file mode 100755 index cf2d543..0000000 --- a/uis7885/hardware/aosp/system/libhidl/transport/memory/1.0/default/AshmemMemory.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (C) 2016 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef ANDROID_HIDL_ASHMEM_MEMORY_V1_0_MEMORY_H -#define ANDROID_HIDL_ASHMEM_MEMORY_V1_0_MEMORY_H - -#include -#include -#include - -namespace android { -namespace hidl { -namespace memory { -namespace V1_0 { -namespace implementation { - -using ::android::hidl::memory::V1_0::IMemory; -using ::android::hardware::hidl_array; -using ::android::hardware::hidl_memory; -using ::android::hardware::hidl_string; -using ::android::hardware::hidl_vec; -using ::android::hardware::Return; -using ::android::hardware::Void; -using ::android::sp; - -struct AshmemMemory : public IMemory { - - AshmemMemory(const hidl_memory& memory, void* mappedMemory); - ~AshmemMemory(); - - // Methods from ::android::hidl::memory::V1_0::IMemory follow. - Return update() override; - Return updateRange(uint64_t start, uint64_t length) override; - Return read() override; - Return readRange(uint64_t start, uint64_t length) override; - Return commit() override; - Return getPointer() override; - Return getSize() override; - -private: - // Holding onto hidl_memory reference because it contains - // handle and size, and handle will also be required for - // the remoted case. - hidl_memory mMemory; - - // Mapped memory in process. - void* mData; -}; - -} // namespace implementation -} // namespace V1_0 -} // namespace memory -} // namespace hidl -} // namespace android - -#endif // ANDROID_HIDL_ASHMEM_MEMORY_V1_0_MEMORY_H diff --git a/uis7885/hardware/aosp/system/libhidl/transport/memory/1.0/default/HidlFetch.h b/uis7885/hardware/aosp/system/libhidl/transport/memory/1.0/default/HidlFetch.h deleted file mode 100755 index b220be4..0000000 --- a/uis7885/hardware/aosp/system/libhidl/transport/memory/1.0/default/HidlFetch.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (C) 2016 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef HIDL_FETCH_H -#define HIDL_FETCH_H - -#include - -namespace android { -namespace hidl { -namespace memory { -namespace V1_0 { -namespace implementation { - -extern "C" IMapper* HIDL_FETCH_IMapper(const char* name); - -} // namespace implementation -} // namespace V1_0 -} // namespace memory -} // namespace hidl -} // namespace android - -#endif // HIDL_FETCH_H diff --git a/uis7885/hardware/aosp/system/libhidl/transport/token/1.0/utils/include/hidl/HybridInterface.h b/uis7885/hardware/aosp/system/libhidl/transport/token/1.0/utils/include/hidl/HybridInterface.h deleted file mode 100755 index d00a0a1..0000000 --- a/uis7885/hardware/aosp/system/libhidl/transport/token/1.0/utils/include/hidl/HybridInterface.h +++ /dev/null @@ -1,565 +0,0 @@ -/* - * Copyright (C) 2017 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef ANDROID_HYBRIDINTERFACE_H -#define ANDROID_HYBRIDINTERFACE_H - -#include -#include - -#include -#include - -#include -#include - -/** - * Hybrid Interfaces - * ================= - * - * A hybrid interface is a binder interface that - * 1. is implemented both traditionally and as a wrapper around a hidl - * interface, and allows querying whether the underlying instance comes from - * a hidl interface or not; and - * 2. allows efficient calls to a hidl interface (if the underlying instance - * comes from a hidl interface) by automatically creating the wrapper in the - * process that calls it. - * - * Terminology: - * - `HalToken`: The type for a "token" of a hidl interface. This is defined to - * be compatible with `ITokenManager.hal`. - * - `HInterface`: The base type for a hidl interface. Currently, it is defined - * as `::android::hidl::base::V1_0::IBase`. - * - `HALINTERFACE`: The hidl interface that will be sent through binders. - * - `INTERFACE`: The binder interface that will be the wrapper of - * `HALINTERFACE`. `INTERFACE` is supposed to be somewhat similar to - * `HALINTERFACE`. - * - * To demonstrate how this is done, here is an example. Suppose `INTERFACE` is - * `IFoo` and `HALINTERFACE` is `HFoo`. The required steps are: - * 1. Use `DECLARE_HYBRID_META_INTERFACE` instead of `DECLARE_META_INTERFACE` in - * the declaration of `IFoo`. `DECLARE_HYBRID_META_INTERFACE` takes an - * additional argument that is the hidl interface to be converted into a - * binder interface. Example: - * Change from `DECLARE_META_INTERFACE(Foo)` - * to `DECLARE_HYBRID_META_INTERFACE(Foo, HFoo)` - * 2. Create a converter class that derives from - * `H2BConverter`. Let us call this `H2BFoo`. - * 3. Add the following constructor in `H2BFoo` that call the corresponding - * constructors in `H2BConverter`: - * `H2BFoo(const sp& base) : CBase(base) {}` - * Note: `CBase = H2BConverter` and `HalInterface = HFoo` are - * member typedefs of `H2BConverter`, so the above line can be - * copied verbatim into `H2BFoo`. - * 4. Implement `IFoo` in `H2BFoo` on top of `HFoo`. `H2BConverter` provides a - * protected `mBase` of type `sp` that can be used to access the `HFoo` - * instance. (There is also a public function named `getBase()` that returns - * `mBase`.) - * 5. Create a hardware proxy class that derives from - * `HpInterface`. Name this class `HpFoo`. (This name cannot - * deviate. See step 8 below.) - * 6. Add the following constructor to `HpFoo`: - * `HpFoo(const sp& base): PBase(base) {}` - * Note: `PBase` a member typedef of `HpInterface` that is - * equal to `HpInterface` itself, so the above line can be - * copied verbatim into `HpFoo`. - * 7. Delegate all functions in `HpFoo` that come from `IFoo` (except those that - * are defined by the macro `DECLARE_HYBRID_META_INTERFACE`) to the protected - * member `mBase`. `mBase` is defined in `HpInterface` (hence - * in `HpFoo`) with type `IFoo`. There is also a public function named - * `getBase()` that returns `mBase`. - * 8. Replace the existing `IMPLEMENT_META_INTERFACE` for `IFoo` by - * `IMPLEMENT_HYBRID_META_INTERFACE`. This macro assumes that the subclass of - * `HpInterface` for `IFoo` is named `HpFoo`. - * - * After the hybrid interface has been put in place properly, it can be used to - * do the following tasks: - * 1. Create an `IFoo` instance from an `HFoo` by passing `sp` to - * the constructor of `H2BFoo`. - * 2. Retrieve an `HFoo` from an `HpFoo` instance by calling - * `HpFoo::getHalInterface()`. This function may return `nullptr` if - * the `HpFoo` object is not backed by `HFoo`. The template parameter is - * required because `HpFoo` in fact may be backed by multiple H2B converter - * classes. - * - * Multiple H2B Converters - * ======================= - * - * Because the system may support multiple versions of hidl interfaces for the - * same object, one binder interface may correspond to multiple H2B converters. - * The hybrid interface is designed to handle this as - * well---`DECLARE_HYBRID_META_INTERFACE` and `HpInterface` can take a variable - * number of arguments. - * - * As a concrete example, suppose `IFoo` is a binder interface that corresponds - * to two hidl interfaces `HFoo1` and `HFoo2`. That means `HpFoo`, the hybrid - * interface presenting `IFoo`, may be backed by `HFoo1` or `HFoo2`. This is - * achievable by - * - * - Replacing `DECLARE_META_INTERFACE(Foo)` by - * `DECLARE_HYBRID_META_INTERFACE(Foo, HFoo1, HFoo2)` in the declaration of - * `IFoo`. - * - Creating `H2BFoo1` as a subclass of `H2BConverter`; - * - Creating `H2BFoo2` as a subclass of `H2BConverter`; and - * - Creating `HpFoo` as a subclass of `HpInterface`. - * - * It is important that `HFoo1` and `HFoo2` are different hidl interfaces. [The - * actual requirement is that for each pair ``, there can be only - * one subclass of `H2BConverter`.] - * - * As mentioned in the previous section, `HpFoo::getHalInterface` requires a - * template argument because it must be able to return different hidl - * interface types based on which hidl interface is being used. The user of - * `HpFoo` can query the type of the underlying hidl interface by calling - * `HpFoo::getHalIndex()`. The return value is a 1-based index into the list of - * all the supported hidl interfaces. In the example with 2 hidl interfaces - * `HFoo1` and `HFoo2`, index 1 corresponds to `HFoo1` and index 2 corresponds - * to `HFoo2`. A typical code block that accesses the underlying hidl interface - * of would look like this: - * - * void someFunction(const sp &foo) { - * - * switch (foo->getHalIndex()) { - * case 1: { - * sp hFoo1 = foo->getHalInterface(); - * ... - * break; - * } - * case 2: { - * sp hFoo2 = foo->getHalInterface(); - * ... - * break; - * } - * default: // Not backed by a hidl interface. - * // Alternatively, "case 0:" can be used. - * } - * - * } - * - * Error State - * =========== - * - * A corrupted transaction may cause an `HpInterface` to be in an error state. - * This could cause `getHalInterface()` to return - * `nullptr` even though `getHalIndex()` returns a non-zero index and - * `ExpectedHalInterface` is the corresponding hidl interface. It is therefore - * recommended that a null check be performed on the return value of - * `getHalInterface` before using it. - * - * DECLARE_HYBRID_META_INTERFACE_WITH_CODE - * ======================================= - * - * `H2BConverter` and `HpInterface` use `transact()` to send over tokens with - * the transaction code (the first argument of `transact()`) equal to `_GHT`, - * which is defined as a global constant named - * `DEFAULT_GET_HAL_TOKEN_TRANSACTION_CODE`. - * - * In the rare occasion that this value clashes with other values already used - * by the `Bp` class and modifying the `Bp` class is difficult, the - * "GET_HAL_TOKEN" transaction code can be changed to a different value simply - * by replacing `DECLARE_HYBRID_META_INTERFACE` with - * `DECLARE_HYBRID_META_INTERFACE_WITH_CODE` in the declaration of the base - * interface and supplying the new transaction code in the first argument of - * this macro. - * - */ - -namespace android { - -typedef ::android::hardware::hidl_vec HalToken; -typedef ::android::hidl::base::V1_0::IBase HInterface; - -constexpr uint32_t DEFAULT_GET_HAL_TOKEN_TRANSACTION_CODE = - B_PACK_CHARS('_', 'G', 'H', 'T'); - -sp retrieveHalInterface(const HalToken& token); -bool createHalToken(const sp& interface, HalToken* token); -bool deleteHalToken(const HalToken& token); - -template -class H2BConverter : public BNINTERFACE { -public: - typedef H2BConverter CBase; // Converter Base - typedef typename BNINTERFACE::BaseInterface BaseInterface; - typedef HINTERFACE HalInterface; - typedef typename BaseInterface::HalVariant HalVariant; - using BaseInterface::sGetHalTokenTransactionCode; - - H2BConverter(const sp& base) : mBase{base} {} - virtual status_t onTransact(uint32_t code, - const Parcel& data, Parcel* reply, uint32_t flags = 0); - virtual status_t linkToDeath( - const sp& recipient, - void* cookie = nullptr, - uint32_t flags = 0); - virtual status_t unlinkToDeath( - const wp& recipient, - void* cookie = nullptr, - uint32_t flags = 0, - wp* outRecipient = nullptr); - virtual HalVariant getHalVariant() const override { return { mBase }; } - HalInterface* getBase() { return mBase.get(); } - -protected: - sp mBase; - -private: - struct Obituary : public hardware::hidl_death_recipient { - wp recipient; - void* cookie; - uint32_t flags; - wp who; - Obituary( - const wp& r, - void* c, uint32_t f, - const wp& w) : - recipient(r), cookie(c), flags(f), who(w) { - } - Obituary(const Obituary& o) : - recipient(o.recipient), - cookie(o.cookie), - flags(o.flags), - who(o.who) { - } - Obituary& operator=(const Obituary& o) { - recipient = o.recipient; - cookie = o.cookie; - flags = o.flags; - who = o.who; - return *this; - } - void serviceDied(uint64_t, const wp&) override { - sp dr = recipient.promote(); - if (dr != nullptr) { - dr->binderDied(who); - } - } - }; - std::mutex mObituariesLock; - std::vector > mObituaries; - - template - 1> - static constexpr size_t _findIndex() { - if constexpr (Index == 0) { - return Index; - } else if constexpr ( - std::is_same_v< - std::variant_alternative_t, - sp>) { - return Index; - } else { - return _findIndex(); - } - } - - static constexpr size_t sHalIndex = _findIndex<>(); - static_assert(sHalIndex != 0, - "H2BConverter from an unrecognized HAL interface."); -}; - -template -class HpInterface : public CONVERTER::BaseInterface { -public: - typedef HpInterface PBase; // Proxy Base - typedef typename CONVERTER::BaseInterface BaseInterface; - typedef typename BaseInterface::HalVariant HalVariant; - using BaseInterface::sGetHalTokenTransactionCode; - - explicit HpInterface(const sp& impl); - BaseInterface* getBase() { return mBase.get(); } - virtual HalVariant getHalVariant() const override { return mHalVariant; } - -protected: - IBinder* mBpBinder; - sp mBp; - sp mBase; - HalVariant mHalVariant; - bool mHasConverter{false}; - IBinder* onAsBinder() override { return mBpBinder; } - -private: - typedef std::variant _ConverterVar; - typedef std::variant _ConverterHalVar; - typedef std::variant, - sp...> _ConverterHalPointerVar; - - static_assert(std::is_same_v<_ConverterHalPointerVar, HalVariant>, - "Converter classes do not match HAL interfaces."); - - template - 1> - bool _castFromHalBaseAndConvert(size_t halIndex, - const sp& halBase) { - if constexpr (Index == 0) { - return false; - } else { - if (halIndex != Index) { - return _castFromHalBaseAndConvert(halIndex, halBase); - } - typedef std::variant_alternative_t - HalInterface; - sp halInterface = HalInterface::castFrom(halBase); - mHalVariant.template emplace(halInterface); - if (!halInterface) { - return false; - } - if (mHasConverter) { - typedef std::variant_alternative_t - Converter; - sp converter = new Converter(halInterface); - if (converter) { - mBase = converter; - } else { - ALOGW("HpInterface: Failed to create an H2B converter -- " - "index = %zu.", Index); - } - } - return true; - } - } - - bool castFromHalBaseAndConvert(size_t halIndex, - const sp& halBase) { - if (!_castFromHalBaseAndConvert<>(halIndex, halBase)) { - return false; - } - return true; - } - -}; - -// ---------------------------------------------------------------------- - -#define DECLARE_HYBRID_META_INTERFACE(INTERFACE, ...) \ - DECLARE_HYBRID_META_INTERFACE_WITH_CODE( \ - ::android::DEFAULT_GET_HAL_TOKEN_TRANSACTION_CODE, \ - INTERFACE, __VA_ARGS__) \ - - -#define DECLARE_HYBRID_META_INTERFACE_WITH_CODE(GTKCODE, INTERFACE, ...) \ -private: \ - typedef ::std::variant<::std::monostate, __VA_ARGS__> _HalVariant; \ - template \ - using _SpVariant = \ - ::std::variant<::std::monostate, ::android::sp...>; \ -public: \ - typedef _SpVariant<__VA_ARGS__> HalVariant; \ - virtual HalVariant getHalVariant() const; \ - size_t getHalIndex() const; \ - template \ - using HalInterface = ::std::variant_alternative_t;\ - template \ - sp getHalInterface() const { \ - HalVariant halVariant = getHalVariant(); \ - const sp* hal = std::get_if>(&halVariant); \ - return hal ? *hal : nullptr; \ - } \ - \ - static const ::android::String16 descriptor; \ - static ::android::sp asInterface( \ - const ::android::sp<::android::IBinder>& obj); \ - virtual const ::android::String16& getInterfaceDescriptor() const; \ - I##INTERFACE(); \ - virtual ~I##INTERFACE(); \ - static constexpr uint32_t sGetHalTokenTransactionCode = GTKCODE; \ - - -#define IMPLEMENT_HYBRID_META_INTERFACE(INTERFACE, NAME) \ - I##INTERFACE::HalVariant I##INTERFACE::getHalVariant() const { \ - return HalVariant{std::in_place_index<0>}; \ - } \ - size_t I##INTERFACE::getHalIndex() const { \ - return getHalVariant().index(); \ - } \ - constexpr uint32_t I##INTERFACE::sGetHalTokenTransactionCode; \ - static const ::android::StaticString16 I##INTERFACE##_desc_str16( \ - u##NAME); \ - const ::android::String16 I##INTERFACE::descriptor( \ - I##INTERFACE##_desc_str16); \ - const ::android::String16& \ - I##INTERFACE::getInterfaceDescriptor() const { \ - return I##INTERFACE::descriptor; \ - } \ - ::android::sp I##INTERFACE::asInterface( \ - const ::android::sp<::android::IBinder>& obj) \ - { \ - ::android::sp intr; \ - if (obj != nullptr) { \ - intr = static_cast( \ - obj->queryLocalInterface( \ - I##INTERFACE::descriptor).get()); \ - if (intr == nullptr) { \ - intr = new Hp##INTERFACE(obj); \ - } \ - } \ - return intr; \ - } \ - I##INTERFACE::I##INTERFACE() { } \ - I##INTERFACE::~I##INTERFACE() { } \ - -// ---------------------------------------------------------------------- - -template -status_t H2BConverter:: - onTransact( - uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) { - if (code == sGetHalTokenTransactionCode) { - if (!data.enforceInterface(BaseInterface::getInterfaceDescriptor())) { - return BAD_TYPE; - } - - HalToken token; - bool result; - result = createHalToken(mBase, &token); - // Write whether a HAL token is present. - reply->writeBool(result); - if (!result) { - ALOGE("H2BConverter: Failed to create HAL token."); - return NO_ERROR; - } - - // Write the HAL token. - reply->writeByteArray(token.size(), token.data()); - - // Write the HAL index. - reply->writeUint32(static_cast(sHalIndex)); - - // Write a flag indicating that a converter needs to be created. - reply->writeBool(true); - - return NO_ERROR; - } - return BNINTERFACE::onTransact(code, data, reply, flags); -} - -template -status_t H2BConverter::linkToDeath( - const sp& recipient, - void* cookie, uint32_t flags) { - LOG_ALWAYS_FATAL_IF( - recipient == nullptr, - "linkToDeath(): recipient must not be null."); - { - std::lock_guard lock(mObituariesLock); - mObituaries.push_back(new Obituary(recipient, cookie, flags, this)); - if (!mBase->linkToDeath(mObituaries.back(), 0)) { - return DEAD_OBJECT; - } - } - return NO_ERROR; -} - -template -status_t H2BConverter::unlinkToDeath( - const wp& recipient, - void* cookie, uint32_t flags, - wp* outRecipient) { - std::lock_guard lock(mObituariesLock); - for (auto i = mObituaries.begin(); i != mObituaries.end(); ++i) { - if ((flags = (*i)->flags) && ( - (recipient == (*i)->recipient) || - ((recipient == nullptr) && (cookie == (*i)->cookie)))) { - if (outRecipient != nullptr) { - *outRecipient = (*i)->recipient; - } - bool success = mBase->unlinkToDeath(*i); - mObituaries.erase(i); - return success ? NO_ERROR : DEAD_OBJECT; - } - } - return NAME_NOT_FOUND; -} - -template -HpInterface::HpInterface( - const sp& impl) - : mBpBinder{impl.get()}, - mBp{new BPINTERFACE(impl)} { - mBase = mBp; - if (!mBpBinder->remoteBinder()) { - return; - } - Parcel data, reply; - data.writeInterfaceToken(BaseInterface::getInterfaceDescriptor()); - if (mBpBinder->transact(sGetHalTokenTransactionCode, - data, &reply) == NO_ERROR) { - // Read whether a HAL token is present. - bool tokenCreated; - if (reply.readBool(&tokenCreated) != OK) { - ALOGW("HpInterface: Corrupted parcel from GET_HAL_TOKEN " - "(tokenCreated)."); - } - - if (!tokenCreated) { - ALOGW("HpInterface: No HAL token was created."); - return; - } - - // Read the HAL token. - std::vector tokenVector; - if (reply.readByteVector(&tokenVector) != OK) { - ALOGW("HpInterface: Corrupted parcel from GET_HAL_TOKEN " - "(halToken)."); - return; - } - - // Retrieve the HAL interface from the token. - HalToken token{tokenVector}; - sp halBase = retrieveHalInterface(token); - deleteHalToken(token); - - if (!halBase) { - ALOGW("HpInterface: Failed to retrieve HAL interface."); - return; - } - - uint32_t halIndex; - // Read the hal index. - if (reply.readUint32(&halIndex) != OK) { - ALOGW("HpInterface: Corrupted parcel from GET_HAL_TOKEN " - "(halIndex)."); - return; - } - - // Read the converter flag. - if (reply.readBool(&mHasConverter) != OK) { - ALOGW("HpInterface: Corrupted parcel from GET_HAL_TOKEN " - "(hasConverter)."); - return; - } - - // Call castFrom from the right HAL interface and create a converter if - // needed. - if (!castFromHalBaseAndConvert(static_cast(halIndex), - halBase)) { - ALOGW("HpInterface: Failed to cast to the correct HAL interface -- " - "HAL index = %" PRIu32 ".", halIndex); - } - } -} - -// ---------------------------------------------------------------------- - -} // namespace android - -#endif // ANDROID_HYBRIDINTERFACE_H diff --git a/uis7885/hardware/aosp/system/libhwbinder/BUILD.gn b/uis7885/hardware/aosp/system/libhwbinder/BUILD.gn index 7b4f6c3..58b6cbf 100755 --- a/uis7885/hardware/aosp/system/libhwbinder/BUILD.gn +++ b/uis7885/hardware/aosp/system/libhwbinder/BUILD.gn @@ -14,7 +14,7 @@ import("//build/ohos.gni") import("../../aosp.gni") -ohos_prebuilt_shared_library( "hwbinder") { +ohos_prebuilt_shared_library("hwbinder") { source = "lib/libhwbinder.z.so" install_enable = true install_images = [ chipset_base_dir ] diff --git a/uis7885/hardware/aosp/system/libhwbinder/lib/libhwbinder.z.so b/uis7885/hardware/aosp/system/libhwbinder/lib/libhwbinder.z.so index 3c153853b3a842d987b651829aca320665bc9042..99d81b3543582546665b2ccc1ef109c4808b9e2c 100755 GIT binary patch delta 2222 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 diff --git a/uis7885/hardware/aosp/system/libhwbinder/vts/performance/PerfTest.h b/uis7885/hardware/aosp/system/libhwbinder/vts/performance/PerfTest.h deleted file mode 100755 index 2ca1d89..0000000 --- a/uis7885/hardware/aosp/system/libhwbinder/vts/performance/PerfTest.h +++ /dev/null @@ -1,155 +0,0 @@ -/* - * Copyright (C) 2016 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef HWBINDER_PERF_TEST_H -#define HWBINDER_PERF_TEST_H - -#include -#include -#include -#include - -#define TRACE_PATH "/sys/kernel/debug/tracing" - -using std::list; -using std::tuple; - -// Pipe is a object used for IPC between parent process and child process. -// This IPC class is widely used in binder/hwbinder tests. -// The common usage is the main process to create the Pipe and forks. -// Both parent and child hold a object. Each recv() on one side requires -// a send() on the other side to unblock. -class Pipe { - public: - static tuple createPipePair(); - Pipe(Pipe&& rval) noexcept; - ~Pipe(); - inline void signal() { - bool val = true; - send(val); - } - inline void wait() { - bool val = false; - recv(val); - } - - // write a data struct - template - int send(const T& v) { - return write(fd_write_, &v, sizeof(T)); - } - // read a data struct - template - int recv(T& v) { - return read(fd_read_, &v, sizeof(T)); - } - - private: - int fd_read_; // file descriptor to read - int fd_write_; // file descriptor to write - Pipe(int read_fd, int write_fd) : fd_read_{read_fd}, fd_write_{write_fd} {} - Pipe(const Pipe&) = delete; - Pipe& operator=(const Pipe&) = delete; - Pipe& operator=(const Pipe&&) = delete; -}; - -// statistics of latency -// common usage: -// -// Results r; -// Tick sta, end; -// TICK_NOW(sta); -// ... do something ... -// TICK_NOW(end); -// r.addTime(tickDiffNS(sta, end)); -// -// r.dump(); -// r.dumpDistribution(); -// -class Results { - public: - // enable the deadline miss detection which stops the trace recording after - // a transaction latency > deadline_us_ is detected. - void setTracingMode(bool tracing, uint64_t deadline_us) { - tracing_ = tracing; - deadline_us_ = deadline_us; - } - inline uint64_t getTransactions() const { return transactions_; } - inline bool missDeadline(uint64_t nano) const { return nano > deadline_us_ * 1000; } - // Combine two sets of latency data points and update the aggregation info. - static Results combine(const Results& a, const Results& b); - // add a new transaction latency record - void addTime(uint64_t nano); - // prepare for raw data recording, it may allocate resources which requires - // a flushRawData() to release - void setupRawData(); - // dump the raw data and release the resource - void flushRawData(); - // dump average, best, worst latency in json - void dump() const; - // dump latency distribution in json - void dumpDistribution() const; - - private: - static const uint32_t kNumBuckets = 128; - static const uint64_t kMaxTimeBucket = 50ull * 1000000; - static const uint64_t kTimePerBucket = kMaxTimeBucket / kNumBuckets; - static constexpr float kTimePerBucketMS = kTimePerBucket / 1.0E6; - uint64_t best_ = 0xffffffffffffffffULL; // best transaction latency in ns. - uint64_t worst_ = 0; // worst transaction latency in ns. - uint64_t transactions_ = 0; // number of transactions - uint64_t total_time_ = 0; // total transaction time - uint64_t miss_ = 0; // number of transactions whose latency > deadline - uint32_t buckets_[kNumBuckets] = {0}; // statistics for the distribution - list* raw_data_ = nullptr; // list for raw-data - bool tracing_ = false; // halt the trace log on a deadline miss - bool raw_dump_ = false; // record the raw data for the dump after - uint64_t deadline_us_ = 2500; // latency deadline in us. -}; - -// statistics of a process pair -class PResults { - public: - static PResults combine(const PResults& a, const PResults& b); - int nNotInherent = 0; ///< #transactions that does not inherit priority - int nNotSync = 0; ///< #transactions that are not synced - Results other; ///< statistics of CFS-other transactions - Results fifo; ///< statistics of RT-fifo transactions - // dump and flush the raw data - inline void flushRawData() { fifo.flushRawData(); } - // dump in json - void dump() const; -}; - -// Tick keeps timestamp -typedef std::chrono::time_point Tick; - -// get current timestamp as a Tick -static inline Tick tickNow() { - return std::chrono::high_resolution_clock::now(); -} - -#define TICK_NOW(_tick) \ - do { \ - asm volatile("" ::: "memory"); \ - _tick = tickNow(); \ - asm volatile("" ::: "memory"); \ - } while (0) - -// get nano seconds between sta & end -static inline uint64_t tickDiffNS(Tick& sta, Tick& end) { - return uint64_t(std::chrono::duration_cast(end - sta).count()); -} -#endif diff --git a/uis7885/hardware/aosp/system/memory/libdmabufheap/BUILD.gn b/uis7885/hardware/aosp/system/memory/libdmabufheap/BUILD.gn index 73d319b..245b0a4 100755 --- a/uis7885/hardware/aosp/system/memory/libdmabufheap/BUILD.gn +++ b/uis7885/hardware/aosp/system/memory/libdmabufheap/BUILD.gn @@ -20,4 +20,5 @@ ohos_prebuilt_shared_library( "libaosp_dmabufheap") { install_images = [ chipset_base_dir ] subsystem_name = "${SUBSYSTEM_NAME}" part_name = "${PART_NAME}" -} \ No newline at end of file +} + diff --git a/uis7885/hardware/aosp/system/memory/libdmabufheap/lib/libaosp_dmabufheap.z.so b/uis7885/hardware/aosp/system/memory/libdmabufheap/lib/libaosp_dmabufheap.z.so index 0ca67562345f68bb40a62711859cf061110906fc..ec07b6150e740bd8e8a600981a299801fee06a26 100755 GIT binary patch delta 942 zcmV;f15y0Qi~`7v0i5Zkk3S+lSvoE(Vlp!{JGW0MgA9JBZWWOxAvlU;kZf2Smj z{Fpu<<|Y-0fdz|hOfR<)iY7#H(>S<9=O$#AJV-VU-FaJtr*9*BX6Cs{5OAZ3e&!}l zAb8o2grd}vsH(g4YzmeS7g~ix*oX`EFfDt}*olT9fbgrYPYjQeLzdR^sqk%a6}t^@ z{@XWpGu%v0=E(Ft3~|%dGUS@%r#>UDZM+!qaZr2@-Cq>3c<)ty40fR32Z^lSQY#c- zrZv<3WL34`@|1k1ySh12@SJ`=HVXiW3OoWT9sUG>NK7%ZJCoe)4F^`ee-tJ$J(KsD zWj9NxtgegqGJD*H<24sY37_9ME!>RmDu5u9%_9p}?j2+{rbO?Zy(zLC>u2gv3&#D_ zRhvGFhn7?iRr1o(l@h`(_uRzd_e-!-0NMkGd>yyud3t^I1MI4cf53QCiUL1trsN=Z zqjbjBlcjBl3kOg%ML7V~f8MY|H577W!c?ATw6mS`(!6P`IibYv5C}H)Bf%fO5M<4W z(ozde*ZU?QGN6ts!|H1DVt3ZeB7U_}VR#+`3GjZ`64*evywGsl$b3RMpExVB@Zgq< z6u5Spm06bv0`;4=$iM01ne5OpHd>p(TZHGG0`GfGi_`pq!VSBJe{fR1W;-WCeNOvWR9bJ*X@8j{Ka8QM7jv~4U1MQxcFfV!`|b}Gexx-J4svCz3E zL#$%^4<4x1jz z#FvC5Y;*lQ%^f%g$rX(P7eZ&VDuuD%Bj}woCY5)KL delta 942 zcmV;f15y0Qi~`7v0i5S$J_+Q-y1wtNjShTiEO(vuMa9JBZWWOxAwlU;kZf2P&q z(0dH=ZP^8P{fWo`-SBV76i|VJZ#;lW3V{nxeC80Q}sYFv~v_*$R^CJw%Tzuc1@E&77JgJVU4UJYM7)_GQQorqktsf9rWUlC%{^9k{9t6H@Q;&@W~ zNjh$PYbsvAkN37<^wQM~iVKE+`4aGm5n-vq-P&Rf87<8{vnqT-f7l;?D{4HBpeO4O z@Ym{H44nc95`_Oef3e4qKwBVOI-h`M)P>Bk&DRcJG=U!B!m+4!a|)Z0h#hYlhr%FJ z?6@s=_0W-g?eN^Dl=@?l9x6?L7=X>7gz>;B4KyDcG~y{(=QN_T$H8ns1_EW#m|Ya z2uUYj>ce00u0Tum3ytWwc^Vpltc}a-JC6olj`4xg?X(2wfBTLA%5ZIQMPCM zHtT#C47YtrT6xT)LFf<)&G-dxKur zgBu%R@oN$0y5es^Ix>{ktnKZ>ML+-m`Sh`e)<*;100E;2;7b4iMc*C9vBYQl0ssI2 Q00dcD00000vy6Yd250!jN&o-= diff --git a/uis7885/hardware/aosp/system/memory/libdmabufheap/tests/dmabuf_heap_test.h b/uis7885/hardware/aosp/system/memory/libdmabufheap/tests/dmabuf_heap_test.h deleted file mode 100755 index abb11a8..0000000 --- a/uis7885/hardware/aosp/system/memory/libdmabufheap/tests/dmabuf_heap_test.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (C) 2020 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#pragma once - -#include "BufferAllocator/BufferAllocator.h" - -#include - -#include - -using ::testing::Test; - -class DmaBufHeapTest : public virtual Test { - public: - DmaBufHeapTest(); - virtual ~DmaBufHeapTest(){} - std::unique_ptr allocator; -}; diff --git a/uis7885/hardware/aosp/system/memory/libion/BUILD.gn b/uis7885/hardware/aosp/system/memory/libion/BUILD.gn index 73dbd5f..0addd0a 100755 --- a/uis7885/hardware/aosp/system/memory/libion/BUILD.gn +++ b/uis7885/hardware/aosp/system/memory/libion/BUILD.gn @@ -14,10 +14,11 @@ import("//build/ohos.gni") import("../../../aosp.gni") -ohos_prebuilt_shared_library( "libion") { +ohos_prebuilt_shared_library("libion") { source = "lib/libion.z.so" install_enable = true install_images = [ chipset_base_dir ] subsystem_name = "${SUBSYSTEM_NAME}" part_name = "${PART_NAME}" } + diff --git a/uis7885/hardware/aosp/system/memory/libion/include/ion/ion.h b/uis7885/hardware/aosp/system/memory/libion/include/ion/ion.h deleted file mode 100755 index 60660d8..0000000 --- a/uis7885/hardware/aosp/system/memory/libion/include/ion/ion.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * ion.c - * - * Memory Allocator functions for ion - * - * Copyright 2011 Google, Inc - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef __SYS_CORE_ION_H -#define __SYS_CORE_ION_H - -// #include -#include - -// __BEGIN_DECLS -#ifdef __cplusplus -extern "C" { -#endif - -struct ion_handle; - -int ion_open(); -int ion_close(int fd); -int ion_alloc(int fd, size_t len, size_t align, unsigned int heap_mask, - unsigned int flags, ion_user_handle_t *handle); -int ion_alloc_fd(int fd, size_t len, size_t align, unsigned int heap_mask, - unsigned int flags, int *handle_fd); -int ion_sync_fd(int fd, int handle_fd); -int ion_free(int fd, ion_user_handle_t handle); -int ion_map(int fd, ion_user_handle_t handle, size_t length, int prot, - int flags, off_t offset, unsigned char **ptr, int *map_fd); -int ion_share(int fd, ion_user_handle_t handle, int *share_fd); -int ion_import(int fd, int share_fd, ion_user_handle_t *handle); - -/** - * Add 4.12+ kernel ION interfaces here for forward compatibility - * This should be needed till the pre-4.12+ ION interfaces are backported. - */ -int ion_query_heap_cnt(int fd, int* cnt); -int ion_query_get_heaps(int fd, int cnt, void* buffers); - -int ion_is_legacy(int fd); -int ion_is_using_modular_heaps(int fd); - -// __END_DECLS -#ifdef __cplusplus -} -#endif - -#endif /* __SYS_CORE_ION_H */ diff --git a/uis7885/hardware/aosp/system/memory/libion/kernel-headers/linux/ion.h b/uis7885/hardware/aosp/system/memory/libion/kernel-headers/linux/ion.h deleted file mode 100755 index 3c28080..0000000 --- a/uis7885/hardware/aosp/system/memory/libion/kernel-headers/linux/ion.h +++ /dev/null @@ -1,78 +0,0 @@ -/**************************************************************************** - **************************************************************************** - *** - *** This header was automatically generated from a Linux kernel header - *** of the same name, to make information necessary for userspace to - *** call into the kernel available to libc. It contains only constants, - *** structures, and macros generated from the original header, and thus, - *** contains no copyrightable information. - *** - *** To edit the content of this header, modify the corresponding - *** source file (e.g. under external/kernel-headers/original/) then - *** run bionic/libc/kernel/tools/update_all.py - *** - *** Any manual change here will be lost the next time this script will - *** be run. You've been warned! - *** - **************************************************************************** - ****************************************************************************/ -#ifndef _UAPI_LINUX_ION_H -#define _UAPI_LINUX_ION_H -#include -#include -/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ -typedef int ion_user_handle_t; -enum ion_heap_type { - ION_HEAP_TYPE_SYSTEM, - ION_HEAP_TYPE_SYSTEM_CONTIG, -/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ - ION_HEAP_TYPE_CARVEOUT, - ION_HEAP_TYPE_CHUNK, - ION_HEAP_TYPE_DMA, - ION_HEAP_TYPE_CUSTOM, -/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ - ION_NUM_HEAPS = 16, -}; -#define ION_HEAP_SYSTEM_MASK (1 << ION_HEAP_TYPE_SYSTEM) -#define ION_HEAP_SYSTEM_CONTIG_MASK (1 << ION_HEAP_TYPE_SYSTEM_CONTIG) -/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ -#define ION_HEAP_CARVEOUT_MASK (1 << ION_HEAP_TYPE_CARVEOUT) -#define ION_HEAP_TYPE_DMA_MASK (1 << ION_HEAP_TYPE_DMA) -#define ION_NUM_HEAP_IDS (sizeof(unsigned int) * 8) -#define ION_FLAG_CACHED 1 -/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ -#define ION_FLAG_CACHED_NEEDS_SYNC 2 -struct ion_allocation_data { - size_t len; - size_t align; -/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ - unsigned int heap_id_mask; - unsigned int flags; - ion_user_handle_t handle; -}; -/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ -struct ion_fd_data { - ion_user_handle_t handle; - int fd; -}; -/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ -struct ion_handle_data { - ion_user_handle_t handle; -}; -struct ion_custom_data { -/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ - unsigned int cmd; - unsigned long arg; -}; -#define ION_IOC_MAGIC 'I' -/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ -#define ION_IOC_ALLOC _IOWR(ION_IOC_MAGIC, 0, struct ion_allocation_data) -#define ION_IOC_FREE _IOWR(ION_IOC_MAGIC, 1, struct ion_handle_data) -#define ION_IOC_MAP _IOWR(ION_IOC_MAGIC, 2, struct ion_fd_data) -#define ION_IOC_SHARE _IOWR(ION_IOC_MAGIC, 4, struct ion_fd_data) -/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ -#define ION_IOC_IMPORT _IOWR(ION_IOC_MAGIC, 5, struct ion_fd_data) -#define ION_IOC_SYNC _IOWR(ION_IOC_MAGIC, 7, struct ion_fd_data) -#define ION_IOC_CUSTOM _IOWR(ION_IOC_MAGIC, 6, struct ion_custom_data) -#endif -/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ diff --git a/uis7885/hardware/aosp/system/memory/libion/kernel-headers/linux/ion_4.12.h b/uis7885/hardware/aosp/system/memory/libion/kernel-headers/linux/ion_4.12.h deleted file mode 100755 index 1af8284..0000000 --- a/uis7885/hardware/aosp/system/memory/libion/kernel-headers/linux/ion_4.12.h +++ /dev/null @@ -1,50 +0,0 @@ -/**************************************************************************** - **************************************************************************** - *** - *** This header was automatically generated from a Linux kernel header - *** of the same name, to make information necessary for userspace to - *** call into the kernel available to libc. It contains only constants, - *** structures, and macros generated from the original header, and thus, - *** contains no copyrightable information. - *** - *** To edit the content of this header, modify the corresponding - *** source file (e.g. under external/kernel-headers/original/) then - *** run bionic/libc/kernel/tools/update_all.py - *** - *** Any manual change here will be lost the next time this script will - *** be run. You've been warned! - *** - **************************************************************************** - ****************************************************************************/ -#ifndef _UAPI_LINUX_ION_NEW_H -#define _UAPI_LINUX_ION_NEW_H -#include -#include -#define ION_NUM_HEAP_IDS (sizeof(unsigned int) * 8) -struct ion_new_allocation_data { - __u64 len; - __u32 heap_id_mask; - __u32 flags; - __u32 fd; - __u32 unused; -}; -#define MAX_HEAP_NAME 32 -struct ion_heap_data { - char name[MAX_HEAP_NAME]; - __u32 type; - __u32 heap_id; - __u32 reserved0; - __u32 reserved1; - __u32 reserved2; -}; -struct ion_heap_query { - __u32 cnt; - __u32 reserved0; - __u64 heaps; - __u32 reserved1; - __u32 reserved2; -}; -#define ION_IOC_MAGIC 'I' -#define ION_IOC_NEW_ALLOC _IOWR(ION_IOC_MAGIC, 0, struct ion_new_allocation_data) -#define ION_IOC_HEAP_QUERY _IOWR(ION_IOC_MAGIC, 8, struct ion_heap_query) -#endif diff --git a/uis7885/hardware/aosp/system/memory/libion/kernel-headers/linux/ion_4.19.h b/uis7885/hardware/aosp/system/memory/libion/kernel-headers/linux/ion_4.19.h deleted file mode 100755 index cdbee85..0000000 --- a/uis7885/hardware/aosp/system/memory/libion/kernel-headers/linux/ion_4.19.h +++ /dev/null @@ -1,63 +0,0 @@ -/**************************************************************************** - **************************************************************************** - *** - *** This header was automatically generated from a Linux kernel header - *** of the same name, to make information necessary for userspace to - *** call into the kernel available to libc. It contains only constants, - *** structures, and macros generated from the original header, and thus, - *** contains no copyrightable information. - *** - *** To edit the content of this header, modify the corresponding - *** source file (e.g. under external/kernel-headers/original/) then - *** run bionic/libc/kernel/tools/update_all.py - *** - *** Any manual change here will be lost the next time this script will - *** be run. You've been warned! - *** - **************************************************************************** - ****************************************************************************/ -#ifndef _UAPI_LINUX_ION_NEW_H -#define _UAPI_LINUX_ION_NEW_H -#include -#include -#define ION_NUM_HEAP_IDS (sizeof(unsigned int) * 8) -enum ion_heap_type_ext { - ION_HEAP_TYPE_CUSTOM_EXT = 16, - ION_HEAP_TYPE_MAX = 31, -}; -enum ion_heap_id { - ION_HEAP_SYSTEM = (1 << ION_HEAP_TYPE_SYSTEM), - ION_HEAP_DMA_START = (ION_HEAP_SYSTEM << 1), - ION_HEAP_DMA_END = (ION_HEAP_DMA_START << 7), - ION_HEAP_CUSTOM_START = (ION_HEAP_DMA_END << 1), - ION_HEAP_CUSTOM_END = (ION_HEAP_CUSTOM_START << 22), -}; -#define ION_NUM_MAX_HEAPS (32) -struct ion_new_allocation_data { - __u64 len; - __u32 heap_id_mask; - __u32 flags; - __u32 fd; - __u32 unused; -}; -#define MAX_HEAP_NAME 32 -struct ion_heap_data { - char name[MAX_HEAP_NAME]; - __u32 type; - __u32 heap_id; - __u32 reserved0; - __u32 reserved1; - __u32 reserved2; -}; -struct ion_heap_query { - __u32 cnt; - __u32 reserved0; - __u64 heaps; - __u32 reserved1; - __u32 reserved2; -}; -#define ION_IOC_MAGIC 'I' -#define ION_IOC_NEW_ALLOC _IOWR(ION_IOC_MAGIC, 0, struct ion_new_allocation_data) -#define ION_IOC_HEAP_QUERY _IOWR(ION_IOC_MAGIC, 8, struct ion_heap_query) -#define ION_IOC_ABI_VERSION _IOR(ION_IOC_MAGIC, 9, __u32) -#endif diff --git a/uis7885/hardware/aosp/system/memory/libion/kernel-headers/linux/ion_test.h b/uis7885/hardware/aosp/system/memory/libion/kernel-headers/linux/ion_test.h deleted file mode 100755 index 6f3e2a7..0000000 --- a/uis7885/hardware/aosp/system/memory/libion/kernel-headers/linux/ion_test.h +++ /dev/null @@ -1,38 +0,0 @@ -/**************************************************************************** - **************************************************************************** - *** - *** This header was automatically generated from a Linux kernel header - *** of the same name, to make information necessary for userspace to - *** call into the kernel available to libc. It contains only constants, - *** structures, and macros generated from the original header, and thus, - *** contains no copyrightable information. - *** - *** To edit the content of this header, modify the corresponding - *** source file (e.g. under external/kernel-headers/original/) then - *** run bionic/libc/kernel/tools/update_all.py - *** - *** Any manual change here will be lost the next time this script will - *** be run. You've been warned! - *** - **************************************************************************** - ****************************************************************************/ -#ifndef _UAPI_LINUX_ION_TEST_H -#define _UAPI_LINUX_ION_TEST_H -#include -#include -/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ -struct ion_test_rw_data { - __u64 ptr; - __u64 offset; - __u64 size; -/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ - int write; - int __padding; -}; -#define ION_IOC_MAGIC 'I' -/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ -#define ION_IOC_TEST_SET_FD _IO(ION_IOC_MAGIC, 0xf0) -#define ION_IOC_TEST_DMA_MAPPING _IOW(ION_IOC_MAGIC, 0xf1, struct ion_test_rw_data) -#define ION_IOC_TEST_KERNEL_MAPPING _IOW(ION_IOC_MAGIC, 0xf2, struct ion_test_rw_data) -#endif -/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ diff --git a/uis7885/hardware/aosp/system/memory/libion/lib/libion.z.so b/uis7885/hardware/aosp/system/memory/libion/lib/libion.z.so index 50da4b38a1ab5d0f07cb6e2eeea75f30d21dbd74..5a05d920fda6a562bef6f311b72a0dcb5407b0e8 100755 GIT binary patch delta 633 zcmV-<0*3vdSD;t0%mNUj5tGDRL!BSCJ>&ZWy#4`+~B&d zy|cGHq?*&LyL}I`AqK<-=LKW`3Lo5ki#S{(Wzg{Z+P+Lqzv&qH(MwKo+S;vXfV)^2 zVmI2XNuZP0ftcYYVZlRCH6t%Mj;{H0{C+yHo(0k)=Kf6|NfXAHY&>)?za00ho6VhY z4Tjd3-~_a5N`z^3e{m?zqTV^hKUbR@eDaT?Ily@&IB%tG1g1%dVWT}@vBqLvyLYvW zRD^ZT;@*nn)o6j`qKRFYOR=`HSbURpCxZtSs+Yi3vf|-ryyPTtM+8PT*k1-{&UG(>v|i)N*mr5Ne-h#UldEm=O!giOrRaud zG7zhpQ%VP$pfId8rqQ#y+yaRI9CFzuYvuN3e{S!MH0LpbkBDl`Y&~!?bS;@>dIajC z|GauCJ^0He8KTpV$`*M^;ymZ6qY7iQcavLH`)I@LJm%F`;Mr;j`nN<5V|_bwC0% zv3?B`lB#b|b|<0lxs8r}2J-2!Xp;n}HJ@sfA#XzKQnJEHPlNJJ%x_K$bgDj=js+kh z^$u6czms}Or;Yet=Y~>g)jJ8bG@;#Cc#m?Qbpt-T@E36mO6`T5c5Q5aE;=Re*@~lI{2sH@whkf*!EufO?DDbIXpe!YJxQ%zUcE;a4_Zj#Co>_ zDn;v;MtxSekRn|ZZ^pZ8Jz+azyg_UbnzSZp1Dgf#(K!qWn&-)Bk(4J1Ne+3x{XC** zc|&LO!*Y`jWFZe{}#Nn`ijc--Dx0!)x%mO?!-6k3B}z)u&5u+DqK_bN*R1_2P_YNQ%D3 z|7Z;0%2cMD1GnMAtCw&z=cd^R7Jhd2L{~X7K(d~Jt`ep8;s!B0GU{%U2p_K= zz_O3cx#b_h8ft;?16}j9UJyyi%5%>X1u?#RlnEm>RUxjN4MCaTZ3GCT%IZ4SSX9GBskF{5}IJzcw1c7(_P T0001smziHNj;d<210|gXWfnCe diff --git a/uis7885/hardware/aosp/system/memory/libion/original-kernel-headers/linux/ion.h b/uis7885/hardware/aosp/system/memory/libion/original-kernel-headers/linux/ion.h deleted file mode 100755 index f09e7c1..0000000 --- a/uis7885/hardware/aosp/system/memory/libion/original-kernel-headers/linux/ion.h +++ /dev/null @@ -1,196 +0,0 @@ -/* - * drivers/staging/android/uapi/ion.h - * - * Copyright (C) 2011 Google, Inc. - * - * This software is licensed under the terms of the GNU General Public - * License version 2, as published by the Free Software Foundation, and - * may be copied, distributed, and modified under those terms. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - */ - -#ifndef _UAPI_LINUX_ION_H -#define _UAPI_LINUX_ION_H - -#include -#include - -typedef int ion_user_handle_t; - -/** - * enum ion_heap_types - list of all possible types of heaps - * @ION_HEAP_TYPE_SYSTEM: memory allocated via vmalloc - * @ION_HEAP_TYPE_SYSTEM_CONTIG: memory allocated via kmalloc - * @ION_HEAP_TYPE_CARVEOUT: memory allocated from a prereserved - * carveout heap, allocations are physically - * contiguous - * @ION_HEAP_TYPE_DMA: memory allocated via DMA API - * @ION_NUM_HEAPS: helper for iterating over heaps, a bit mask - * is used to identify the heaps, so only 32 - * total heap types are supported - */ -enum ion_heap_type { - ION_HEAP_TYPE_SYSTEM, - ION_HEAP_TYPE_SYSTEM_CONTIG, - ION_HEAP_TYPE_CARVEOUT, - ION_HEAP_TYPE_CHUNK, - ION_HEAP_TYPE_DMA, - ION_HEAP_TYPE_CUSTOM, /* must be last so device specific heaps always - are at the end of this enum */ - ION_NUM_HEAPS = 16, -}; - -#define ION_HEAP_SYSTEM_MASK (1 << ION_HEAP_TYPE_SYSTEM) -#define ION_HEAP_SYSTEM_CONTIG_MASK (1 << ION_HEAP_TYPE_SYSTEM_CONTIG) -#define ION_HEAP_CARVEOUT_MASK (1 << ION_HEAP_TYPE_CARVEOUT) -#define ION_HEAP_TYPE_DMA_MASK (1 << ION_HEAP_TYPE_DMA) - -#define ION_NUM_HEAP_IDS sizeof(unsigned int) * 8 - -/** - * allocation flags - the lower 16 bits are used by core ion, the upper 16 - * bits are reserved for use by the heaps themselves. - */ -#define ION_FLAG_CACHED 1 /* mappings of this buffer should be - cached, ion will do cache - maintenance when the buffer is - mapped for dma */ -#define ION_FLAG_CACHED_NEEDS_SYNC 2 /* mappings of this buffer will created - at mmap time, if this is set - caches must be managed manually */ - -/** - * DOC: Ion Userspace API - * - * create a client by opening /dev/ion - * most operations handled via following ioctls - * - */ - -/** - * struct ion_allocation_data - metadata passed from userspace for allocations - * @len: size of the allocation - * @align: required alignment of the allocation - * @heap_id_mask: mask of heap ids to allocate from - * @flags: flags passed to heap - * @handle: pointer that will be populated with a cookie to use to - * refer to this allocation - * - * Provided by userspace as an argument to the ioctl - */ -struct ion_allocation_data { - size_t len; - size_t align; - unsigned int heap_id_mask; - unsigned int flags; - ion_user_handle_t handle; -}; - -/** - * struct ion_fd_data - metadata passed to/from userspace for a handle/fd pair - * @handle: a handle - * @fd: a file descriptor representing that handle - * - * For ION_IOC_SHARE or ION_IOC_MAP userspace populates the handle field with - * the handle returned from ion alloc, and the kernel returns the file - * descriptor to share or map in the fd field. For ION_IOC_IMPORT, userspace - * provides the file descriptor and the kernel returns the handle. - */ -struct ion_fd_data { - ion_user_handle_t handle; - int fd; -}; - -/** - * struct ion_handle_data - a handle passed to/from the kernel - * @handle: a handle - */ -struct ion_handle_data { - ion_user_handle_t handle; -}; - -/** - * struct ion_custom_data - metadata passed to/from userspace for a custom ioctl - * @cmd: the custom ioctl function to call - * @arg: additional data to pass to the custom ioctl, typically a user - * pointer to a predefined structure - * - * This works just like the regular cmd and arg fields of an ioctl. - */ -struct ion_custom_data { - unsigned int cmd; - unsigned long arg; -}; - -#define ION_IOC_MAGIC 'I' - -/** - * DOC: ION_IOC_ALLOC - allocate memory - * - * Takes an ion_allocation_data struct and returns it with the handle field - * populated with the opaque handle for the allocation. - */ -#define ION_IOC_ALLOC _IOWR(ION_IOC_MAGIC, 0, \ - struct ion_allocation_data) - -/** - * DOC: ION_IOC_FREE - free memory - * - * Takes an ion_handle_data struct and frees the handle. - */ -#define ION_IOC_FREE _IOWR(ION_IOC_MAGIC, 1, struct ion_handle_data) - -/** - * DOC: ION_IOC_MAP - get a file descriptor to mmap - * - * Takes an ion_fd_data struct with the handle field populated with a valid - * opaque handle. Returns the struct with the fd field set to a file - * descriptor open in the current address space. This file descriptor - * can then be used as an argument to mmap. - */ -#define ION_IOC_MAP _IOWR(ION_IOC_MAGIC, 2, struct ion_fd_data) - -/** - * DOC: ION_IOC_SHARE - creates a file descriptor to use to share an allocation - * - * Takes an ion_fd_data struct with the handle field populated with a valid - * opaque handle. Returns the struct with the fd field set to a file - * descriptor open in the current address space. This file descriptor - * can then be passed to another process. The corresponding opaque handle can - * be retrieved via ION_IOC_IMPORT. - */ -#define ION_IOC_SHARE _IOWR(ION_IOC_MAGIC, 4, struct ion_fd_data) - -/** - * DOC: ION_IOC_IMPORT - imports a shared file descriptor - * - * Takes an ion_fd_data struct with the fd field populated with a valid file - * descriptor obtained from ION_IOC_SHARE and returns the struct with the handle - * filed set to the corresponding opaque handle. - */ -#define ION_IOC_IMPORT _IOWR(ION_IOC_MAGIC, 5, struct ion_fd_data) - -/** - * DOC: ION_IOC_SYNC - syncs a shared file descriptors to memory - * - * Deprecated in favor of using the dma_buf api's correctly (syncing - * will happend automatically when the buffer is mapped to a device). - * If necessary should be used after touching a cached buffer from the cpu, - * this will make the buffer in memory coherent. - */ -#define ION_IOC_SYNC _IOWR(ION_IOC_MAGIC, 7, struct ion_fd_data) - -/** - * DOC: ION_IOC_CUSTOM - call architecture specific ion ioctl - * - * Takes the argument of the architecture specific ioctl to call and - * passes appropriate userdata for that ioctl - */ -#define ION_IOC_CUSTOM _IOWR(ION_IOC_MAGIC, 6, struct ion_custom_data) - -#endif /* _UAPI_LINUX_ION_H */ diff --git a/uis7885/hardware/aosp/system/memory/libion/original-kernel-headers/linux/ion_4.12.h b/uis7885/hardware/aosp/system/memory/libion/original-kernel-headers/linux/ion_4.12.h deleted file mode 100755 index 6ae79d4..0000000 --- a/uis7885/hardware/aosp/system/memory/libion/original-kernel-headers/linux/ion_4.12.h +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Adapted from drivers/staging/android/uapi/ion.h - * - * Copyright (C) 2011 Google, Inc. - * - * This software is licensed under the terms of the GNU General Public - * License version 2, as published by the Free Software Foundation, and - * may be copied, distributed, and modified under those terms. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - */ - -#ifndef _UAPI_LINUX_ION_NEW_H -#define _UAPI_LINUX_ION_NEW_H - -#include -#include - -#define ION_NUM_HEAP_IDS (sizeof(unsigned int) * 8) - -/** - * DOC: Ion Userspace API - * - * create a client by opening /dev/ion - * most operations handled via following ioctls - * - */ - -/** - * struct ion_new_allocation_data - metadata passed from userspace for allocations - * @len: size of the allocation - * @heap_id_mask: mask of heap ids to allocate from - * @flags: flags passed to heap - * @handle: pointer that will be populated with a cookie to use to - * refer to this allocation - * - * Provided by userspace as an argument to the ioctl - added _new to denote - * this belongs to the new ION interface. - */ -struct ion_new_allocation_data { - __u64 len; - __u32 heap_id_mask; - __u32 flags; - __u32 fd; - __u32 unused; -}; - -#define MAX_HEAP_NAME 32 - -/** - * struct ion_heap_data - data about a heap - * @name - first 32 characters of the heap name - * @type - heap type - * @heap_id - heap id for the heap - */ -struct ion_heap_data { - char name[MAX_HEAP_NAME]; - __u32 type; - __u32 heap_id; - __u32 reserved0; - __u32 reserved1; - __u32 reserved2; -}; - -/** - * struct ion_heap_query - collection of data about all heaps - * @cnt - total number of heaps to be copied - * @heaps - buffer to copy heap data - */ -struct ion_heap_query { - __u32 cnt; /* Total number of heaps to be copied */ - __u32 reserved0; /* align to 64bits */ - __u64 heaps; /* buffer to be populated */ - __u32 reserved1; - __u32 reserved2; -}; - -#define ION_IOC_MAGIC 'I' - -/** - * DOC: ION_IOC_NEW_ALLOC - allocate memory - * - * Takes an ion_allocation_data struct and returns it with the handle field - * populated with the opaque handle for the allocation. - * TODO: This IOCTL will clash by design; however, only one of - * ION_IOC_ALLOC or ION_IOC_NEW_ALLOC paths will be exercised, - * so this should not conflict. - */ -#define ION_IOC_NEW_ALLOC _IOWR(ION_IOC_MAGIC, 0, struct ion_new_allocation_data) - -/** - * DOC: ION_IOC_FREE - free memory - * - * Takes an ion_handle_data struct and frees the handle. - * - * #define ION_IOC_FREE _IOWR(ION_IOC_MAGIC, 1, struct ion_handle_data) - * This will come from the older kernels, so don't redefine here - */ - -/** - * DOC: ION_IOC_SHARE - creates a file descriptor to use to share an allocation - * - * Takes an ion_fd_data struct with the handle field populated with a valid - * opaque handle. Returns the struct with the fd field set to a file - * descriptor open in the current address space. This file descriptor - * can then be passed to another process. The corresponding opaque handle can - * be retrieved via ION_IOC_IMPORT. - * - * #define ION_IOC_SHARE _IOWR(ION_IOC_MAGIC, 4, struct ion_fd_data) - * This will come from the older kernels, so don't redefine here - */ - -/** - * DOC: ION_IOC_HEAP_QUERY - information about available heaps - * - * Takes an ion_heap_query structure and populates information about - * available Ion heaps. - */ -#define ION_IOC_HEAP_QUERY _IOWR(ION_IOC_MAGIC, 8, struct ion_heap_query) - -#endif /* _UAPI_LINUX_ION_NEW_H */ diff --git a/uis7885/hardware/aosp/system/memory/libion/original-kernel-headers/linux/ion_4.19.h b/uis7885/hardware/aosp/system/memory/libion/original-kernel-headers/linux/ion_4.19.h deleted file mode 100755 index 9280926..0000000 --- a/uis7885/hardware/aosp/system/memory/libion/original-kernel-headers/linux/ion_4.19.h +++ /dev/null @@ -1,160 +0,0 @@ -/* - * Adapted from drivers/staging/android/uapi/ion.h - * - * Copyright (C) 2019 Google, Inc. - * - * This software is licensed under the terms of the GNU General Public - * License version 2, as published by the Free Software Foundation, and - * may be copied, distributed, and modified under those terms. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - */ - -#ifndef _UAPI_LINUX_ION_NEW_H -#define _UAPI_LINUX_ION_NEW_H - -#include -#include - -#define ION_NUM_HEAP_IDS (sizeof(unsigned int) * 8) - -enum ion_heap_type_ext { - ION_HEAP_TYPE_CUSTOM_EXT = 16, - ION_HEAP_TYPE_MAX = 31, -}; - -/** - * ion_heap_id - list of standard heap ids that Android can use - * - * @ION_HEAP_SYSTEM Id for the ION_HEAP_TYPE_SYSTEM - * @ION_HEAP_DMA_START Start of reserved id range for heaps of type - * ION_HEAP_TYPE_DMA - * @ION_HEAP_DMA_END End of reserved id range for heaps of type - * ION_HEAP_TYPE_DMA - * @ION_HEAP_CUSTOM_START Start of reserved id range for heaps of custom - * type - * @ION_HEAP_CUSTOM_END End of reserved id range for heaps of custom - * type - */ -enum ion_heap_id { - ION_HEAP_SYSTEM = (1 << ION_HEAP_TYPE_SYSTEM), - ION_HEAP_DMA_START = (ION_HEAP_SYSTEM << 1), - ION_HEAP_DMA_END = (ION_HEAP_DMA_START << 7), - ION_HEAP_CUSTOM_START = (ION_HEAP_DMA_END << 1), - ION_HEAP_CUSTOM_END = (ION_HEAP_CUSTOM_START << 22), -}; - -#define ION_NUM_MAX_HEAPS (32) - -/** - * DOC: Ion Userspace API - * - * create a client by opening /dev/ion - * most operations handled via following ioctls - * - */ - -/** - * struct ion_new_allocation_data - metadata passed from userspace for allocations - * @len: size of the allocation - * @heap_id_mask: mask of heap ids to allocate from - * @flags: flags passed to heap - * @handle: pointer that will be populated with a cookie to use to - * refer to this allocation - * - * Provided by userspace as an argument to the ioctl - added _new to denote - * this belongs to the new ION interface. - */ -struct ion_new_allocation_data { - __u64 len; - __u32 heap_id_mask; - __u32 flags; - __u32 fd; - __u32 unused; -}; - -#define MAX_HEAP_NAME 32 - -/** - * struct ion_heap_data - data about a heap - * @name - first 32 characters of the heap name - * @type - heap type - * @heap_id - heap id for the heap - */ -struct ion_heap_data { - char name[MAX_HEAP_NAME]; - __u32 type; - __u32 heap_id; - __u32 reserved0; - __u32 reserved1; - __u32 reserved2; -}; - -/** - * struct ion_heap_query - collection of data about all heaps - * @cnt - total number of heaps to be copied - * @heaps - buffer to copy heap data - */ -struct ion_heap_query { - __u32 cnt; /* Total number of heaps to be copied */ - __u32 reserved0; /* align to 64bits */ - __u64 heaps; /* buffer to be populated */ - __u32 reserved1; - __u32 reserved2; -}; - -#define ION_IOC_MAGIC 'I' - -/** - * DOC: ION_IOC_NEW_ALLOC - allocate memory - * - * Takes an ion_allocation_data struct and returns it with the handle field - * populated with the opaque handle for the allocation. - * TODO: This IOCTL will clash by design; however, only one of - * ION_IOC_ALLOC or ION_IOC_NEW_ALLOC paths will be exercised, - * so this should not conflict. - */ -#define ION_IOC_NEW_ALLOC _IOWR(ION_IOC_MAGIC, 0, struct ion_new_allocation_data) - -/** - * DOC: ION_IOC_FREE - free memory - * - * Takes an ion_handle_data struct and frees the handle. - * - * #define ION_IOC_FREE _IOWR(ION_IOC_MAGIC, 1, struct ion_handle_data) - * This will come from the older kernels, so don't redefine here - */ - -/** - * DOC: ION_IOC_SHARE - creates a file descriptor to use to share an allocation - * - * Takes an ion_fd_data struct with the handle field populated with a valid - * opaque handle. Returns the struct with the fd field set to a file - * descriptor open in the current address space. This file descriptor - * can then be passed to another process. The corresponding opaque handle can - * be retrieved via ION_IOC_IMPORT. - * - * #define ION_IOC_SHARE _IOWR(ION_IOC_MAGIC, 4, struct ion_fd_data) - * This will come from the older kernels, so don't redefine here - */ - -/** - * DOC: ION_IOC_HEAP_QUERY - information about available heaps - * - * Takes an ion_heap_query structure and populates information about - * available Ion heaps. - */ -#define ION_IOC_HEAP_QUERY _IOWR(ION_IOC_MAGIC, 8, struct ion_heap_query) - -/** - * DOC: ION_IOC_HEAP_ABI_VERSION - return ABI version - * - * Returns ABI version for this driver - */ -#define ION_IOC_ABI_VERSION _IOR(ION_IOC_MAGIC, 9, __u32) - -#endif /* _UAPI_LINUX_ION_NEW_H */ diff --git a/uis7885/hardware/aosp/system/memory/libion/original-kernel-headers/linux/ion_test.h b/uis7885/hardware/aosp/system/memory/libion/original-kernel-headers/linux/ion_test.h deleted file mode 100755 index ffef06f..0000000 --- a/uis7885/hardware/aosp/system/memory/libion/original-kernel-headers/linux/ion_test.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * drivers/staging/android/uapi/ion.h - * - * Copyright (C) 2011 Google, Inc. - * - * This software is licensed under the terms of the GNU General Public - * License version 2, as published by the Free Software Foundation, and - * may be copied, distributed, and modified under those terms. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - */ - -#ifndef _UAPI_LINUX_ION_TEST_H -#define _UAPI_LINUX_ION_TEST_H - -#include -#include - -/** - * struct ion_test_rw_data - metadata passed to the kernel to read handle - * @ptr: a pointer to an area at least as large as size - * @offset: offset into the ion buffer to start reading - * @size: size to read or write - * @write: 1 to write, 0 to read - */ -struct ion_test_rw_data { - __u64 ptr; - __u64 offset; - __u64 size; - int write; - int __padding; -}; - -#define ION_IOC_MAGIC 'I' - -/** - * DOC: ION_IOC_TEST_SET_DMA_BUF - attach a dma buf to the test driver - * - * Attaches a dma buf fd to the test driver. Passing a second fd or -1 will - * release the first fd. - */ -#define ION_IOC_TEST_SET_FD \ - _IO(ION_IOC_MAGIC, 0xf0) - -/** - * DOC: ION_IOC_TEST_DMA_MAPPING - read or write memory from a handle as DMA - * - * Reads or writes the memory from a handle using an uncached mapping. Can be - * used by unit tests to emulate a DMA engine as close as possible. Only - * expected to be used for debugging and testing, may not always be available. - */ -#define ION_IOC_TEST_DMA_MAPPING \ - _IOW(ION_IOC_MAGIC, 0xf1, struct ion_test_rw_data) - -/** - * DOC: ION_IOC_TEST_KERNEL_MAPPING - read or write memory from a handle - * - * Reads or writes the memory from a handle using a kernel mapping. Can be - * used by unit tests to test heap map_kernel functions. Only expected to be - * used for debugging and testing, may not always be available. - */ -#define ION_IOC_TEST_KERNEL_MAPPING \ - _IOW(ION_IOC_MAGIC, 0xf2, struct ion_test_rw_data) - - -#endif /* _UAPI_LINUX_ION_H */ diff --git a/uis7885/hardware/aosp/system/memory/libion/tests/ion_test_fixture.h b/uis7885/hardware/aosp/system/memory/libion/tests/ion_test_fixture.h deleted file mode 100755 index c78fe41..0000000 --- a/uis7885/hardware/aosp/system/memory/libion/tests/ion_test_fixture.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (C) 2013 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef ION_TEST_FIXTURE_H_ -#define ION_TEST_FIXTURE_H_ - -#include -#include -#include - -using ::testing::Test; - -class IonTest : public virtual Test { - public: - IonTest(); - virtual ~IonTest(){}; - virtual void SetUp(); - virtual void TearDown(); - int ionfd; - std::vector ion_heaps; -}; - -#endif /* ION_TEST_FIXTURE_H_ */ diff --git a/uis7885/hardware/aosp/system/memory/libmemion/BUILD.gn b/uis7885/hardware/aosp/system/memory/libmemion/BUILD.gn index a5f410d..30e343e 100755 --- a/uis7885/hardware/aosp/system/memory/libmemion/BUILD.gn +++ b/uis7885/hardware/aosp/system/memory/libmemion/BUILD.gn @@ -14,7 +14,7 @@ import("//build/ohos.gni") import("//device/soc/sprd/uis7885/hardware/aosp/aosp.gni") -ohos_prebuilt_shared_library( "libmemion") { +ohos_prebuilt_shared_library("libmemion") { source = "lib/libmemion.z.so" install_enable = true install_images = [chipset_base_dir] diff --git a/uis7885/hardware/aosp/system/memory/libmemion/lib/libmemion.z.so b/uis7885/hardware/aosp/system/memory/libmemion/lib/libmemion.z.so index e941247f523dfc215b4dcfb85babd1bd14d35dd6..ce180c43c7637618297a7f1b92c03458d3353753 100755 GIT binary patch delta 684 zcmV;d0#p6if7pMp%mNTRWnfHTidLjvA!*f%aAx_F5ds{u_yX)Q0S=SpHMD;>2mYY& zf5vJAMA7cA9_6p9!HG?pNa01i-BvJxJnWkYC2yI-_hmng+Ro?15%R_lcZcc0y^kcw7yI6qTLa$GHe7gO|MDGlTXXW#(8pSS}&tqlC0*a0JG+^>pVR+xpyUEfC_9EMxjf3Z$&icVNBnAkq*#cdsW=+2D@&!i=LoY z!M!w|amf#SCc8Lft>==>tfUv`@FS2h4r<% z@U~i7a40)Zuye3^Dxy5g#49^d@|9EhR_m_-XDNRfr6}7+&-0J46#`*>lg4i~!iCt( zH^1e&n5g&K{qBVt2We&C6${717(i~?Q-Iry@*IA||5L+^0*Y4f4yTCBcOPncj!uFe zBr0JrbXdu;N`7h#g`|H;=&fwY$*&8rHG@n=vOLoB5XyUQLX#8OXcb?W1P&-J_nn!6 zZ<5|^p%D%Z4tWmm4-WMUbk+Lwscn!AoS9o47z_N$vu0P;ws2pu{N~j{rnC{M>-A4` z&T->P!=t1tXX%5A4UDjM&z%!2@Z?cd2gNJnBXGx`DSeVMX-R)d!Xt#m^xyfCh|lS0|L4aD3IT9ne?^tH8l$S2NCAEN6f5nx>@`J3W#Cw4ue?NK;Vu_UJgk)Bhr))^9zn0ib@$?%)lRx={c41NW+83%Z zPE4qS)5gX*^JDl~!wmz2Eq{NH@;*X^k*RDW?e>pWvuOts*=1+2uM-2oBywV?ctf41GHGwu>TB}ffnQFP*_-B{5J3967zxOM50MFxYoaf~7@mGaf4 znuDez>tkV*RiZk$vLn|jj_FkLDscg%G{E)_=7sQWHU$AZV z7HKld!+ZRswl>X>r&vrzdoNwZFai1RVFR`a+y#pDIi&1rgN<>fJftS%w5*=3aharN z1Te0z8i2fl?}&g$h^2qsCc9G3jL@(uBy38;RNZD8%x7#ZI!J>H{|TEZA^0b9Z5~Kd zHvQ))(@FF||DRsRrFI0ND{oM2DkuIZL-f#^?mqd3L$OIhhhl+9LtlRCtkcrRWB+(= z+rHrNIcGym&P|c?ft|UD^8c#ForfJSktjt=l&pl~ln+XkEUSNtw!ul%dMPa0$064# z?&=w?l8Ap8syv3P|3jLhY$jHm{`afYl*j#UO+zaZx8-!N7ntyY~;4s;?q=Ldo z=w-aY4~c~}73_{hq%T-uBZkwMDf^#6F2F6D5gb4O008gtxTSc;yW9W)s|LtC002!I SMxn99XZr#G006TTIm8B^)>8!l diff --git a/uis7885/hardware/aosp/vendor/sprd/modules/minidump/bin/minidumpd b/uis7885/hardware/aosp/vendor/sprd/modules/minidump/bin/minidumpd index 36e06831e1d2cc8a79f0b4d541d956df9f516223..2bd792174832b1c8896f44fdd520b6753cefcc02 100755 GIT binary patch delta 901 zcmV;01A6>`oB{Zo0gxyH_(!oS_5u*`?(O9Zn_1BO5X z1OJoML)(9An85Z^*2Orlm3{IGHaOH09DN;!lLPafA#iw+G&9r;Rz^uOGS&5fs_`v4 zC5Oq{!n1{vS^|#*IZq0=Ev5lPc=f2|3z?nFIz_D&DqO|GA-0nW=BT_w>;{2l1@x8+ z`hpun_vXe5T}e)YNOMgw7Zs>+Zszacysz4{AH#pxiQ{D%yuTlUX~t1hs#LZ?3OC)Z zPQ^Sp=}yG)3SMBNsM*{?1a?S<&Tv}Kzr5_<2qhlY)8-$&cn{fjx$pwPC9;XS*AEeM zpU1(p3nGB77(gCOv}j|0Bf{1~m0DbsR#sK%S&m~BQ_z%J`8oliA|5CmAxsL6DR0qqP?yoad*d~)DDhNrZDtmkqxtR(~ z4fij(2)m;pEBJyVSn!R?k4+FTo*pXJZIORIVP4!*&iX|aKde0S{)30|@9ZW4k>Ys> zfe>H#=66@Tow)Jv0g-E3R$rtw`+&=w9Fs@=##mOS&k>YD0!-k8MMe0m@CUxPR>+>) z$aOO&r$0}(TEM;n0ZeOpdvG*0qG7l7dPlHu;Rr`sc?ozZ0gj5_UJ*Xtad|yWODKQo zY3SP^_E9!zRRVFrB^C!466&0k;a{L=CGsudFzj3~iD{SgRybw! z(Q`>>uj0P~kp z#Ro(lC|O0LSb$0-dm$tW^lZ(a6KU)UI0y2acwO-$q%iSs!FbULW#TkW4Ke#D74;9Z z=Xuu?P!eRd+Yae;e`8%$Uz<-jr{AWTO^rZu|N1;8tO?z&|Np8ZAuRVN>X$;lQSbBz zCMF)wITt}Ng9$D$?wU9#)*As6=ZZ>+2UWCY^MW2R-TXBU@eA(&031qvm9Wvv-2efb b2%tLv0O)Gb;gj!2O|w8qpalUyli^JtG`XxO delta 907 zcmV;619bfOn*o5F0gxyH07$Va_5u)V`@FNCS#M0t5k* z)I-~UY2DDPNSrPD2MYEK*Hj@c8We*uz^Y=rsYLCAP+tDEPZ`3eWm=Wf?#y=n|D%{?YW|poCeDfp{!UTsW?6lkIVSbr6Bm_Q zzFQvlUKgYKWaZbwG*W9g$R5rFngatYns4h&grF@e{^8DW4CMfbNL7pS3CYJ}b$|(f zGwd)^5=83?Y|tv`+V0Is`+nG-7UA6Wu6t)`>`tehL{+h<5uc{7}9JB^w ze5CQ8Mwrq*^$HOu3M0L`v~9PuBz097^8BR=?{azaXRqqjcX?)j57&Ot>teKZ^+3OJ z3q#QuTgGzn)$Q*o4x)Q5OmZN0_=kCapm9+_A&>|ci(bughE2xhj>7``DAqlm$B12D zEfB!@s;}_YRK~XdufGNS^?(KY7)lsE3?1gHL?|1THU0M^PZGwkDe0kcXBbkHv%YtL ztnZhZr%v(AKNmYk)-oF^+N&lKKD~ufu>2G~iMlFDtLzgT?srj@$pJ1}_rC;xv~($j z&*n{Y{PdTc2$}Wy`9J5tCvA{yh*nr^9BmhD^nEFmvK0i0qtgGsT?$f*S!`(Hfpceg!U)V z2%@?s^L5#0?+id6+wiqAsXzpp3r|;1{z|at$lZTnezd%X$yKeTdgwKIt-Uqf-hUFI ze_n}2vHH|l%Kz+nYY%K1Wt`i-O*tDEcCJZ;zQnZY{^udnkC)Th(Ce8-^seDJWcy&hP*M hod}>i008xgh&Pk#M@^GZ0tB--NT3A*L - -/* sysdumpdb */ -#define SYSDUMPDB_PARTITION_NAME "sysdumpdb" -#define SYSDUMPDB_SIZE (10 * 1024 * 1024) /* 10M */ -#define MINIDUMP_DATA_OFFSET 256 /* minidump start offset in sysdumpdb partition */ -#define MINIDUMP_DATA_SPACE (SYSDUMPDB_SIZE - MINIDUMP_DATA_OFFSET -1) -// #define MINIDUMP_FILE_PATH "/data/minidump" -#define MINIDUMP_FILE_PATH "/data/log/bbox" - -/* compress */ -#define SRC_DATA_MAX (500 * 1024) -#define MALLOC_LIMIT (512 * 1024) -#define COMP_SUFFIX_MAX 10 - -/* minidump func */ -#define MINIDUMP_FUNC_MAX 10 /* sysdump enter check func max num*/ -#define DIR_MAX_NUM 10 -typedef int (*MINIDUMP_FUNC) (void); - - -uint64_t minidump_pos; /* available position for new area in sysdumpdb */ - -#define MINI_NOTE 0 /* note info type */ -#define MINI_SECTION 1 /* section info type */ - -#define AREA_NUM_MAX 20 /* area max number for minidump */ -#define SECTION_NUM_MAX 200 /* sections max number for each area:note, section */ -#define NOTE_NUM_MAX AREA_NUM_MAX -#define AREA_NAME_LEN_MAX 40 -#define SECTION_NAME_LEN_MAX 40 -#define PARTITION_NAME_MAX_SIZE 128 -#define PARTITION_PATH "/dev/block/by-name/" -#define DE_COMPRESSION_SCRIPT_FILE "ana.py" -#define MINIDUMP_DATA_MAGIC "MINIDUMP" - -struct mini_data_header { - char data_magic[12]; /* minidump: data valid */ - uint32_t area_num; /* the number of area */ - uint32_t arch_info; /* 0:arm, 1: arm64; 2:x86 */ - uint32_t h_size; /* the size of area_info_header*/ - uint32_t ainfo_size; /* the size of area_info */ -}; - -struct mini_area_info { - char a_name[AREA_NAME_LEN_MAX]; /* area name */ - uint8_t data_flag; /* 0: area data invalid, 1: area data valid*/ - uint32_t area_type; /* AREA_NOTE */ - uint32_t a_size; /* area size */ - uint32_t a_offset; /* area offset in sysdumpdb */ -}; - -struct mini_area_header { - uint32_t section_num; /* section number */ - uint32_t section_start_index; /* valid section index */ - uint32_t ah_size; /* the size of struct mini_section_info_header */ - uint32_t sinfo_size; /* the size of struct mini_section_info */ - uint8_t comp_type; /* enum compress_type */ - char comp_suffix[COMP_SUFFIX_MAX]; -}; - -struct mini_section_info { - char s_name[SECTION_NAME_LEN_MAX]; /* section name */ - uint64_t s_paddr; /* physical address */ - uint64_t s_vaddr; /* vritual address */ - uint32_t s_size; /* section size */ - uint32_t s_offset; /* offset in sysdumpdb partition */ -}; - -/*area info */ -#define AREA_NOTE_NAME "notes" -#define AREA_BOOTLOADER_NAME "bootloader" -#define AREA_KERENL_NAME "kernel" -#define AREA_MODEM_NAME "modem" -#define AREA_TOS_NAME "trusty" - -const char *area_name_g[] = { - "notes", /* AREA_NOTE */ - "bootloader", /* AREA_BOOTLOADER */ - "kernel", /* AREA_KERENL */ - "modem", /* AREA_MODEM */ - "trusty", /* AREA_TOS */ - "undefined" /* AREA_END_NUM */ -}; - -enum area_type { - AREA_NOTE = 0, - AREA_BOOTLOADER, - AREA_KERENL, - AREA_MODEM, - AREA_TOS, - - AREA_END_NUM, -}; - -#define FIRST_AREA_OFFSET (MINIDUMP_DATA_OFFSET + \ - sizeof(struct mini_data_header) + \ - AREA_END_NUM * sizeof(struct mini_area_info)) - - -/* compressed type */ -#define COMPRESS_GZIP_SUF ".gz" -#define COMPRESS_ZLIB_SUF ".zlib" - -#define COMPRESS_RECORD_NAME "compress_record_file" -#define COMPRESSED_LEN_MALLOC_MAX (4 * 1024) - -enum compress_type { - NO_COMPRESS = 0, - COMPRESS_GZIP, - COMPRESS_ZLIB, -}; - -const char *compress_suffix_g[] = { - "null", /* NO_COMPRESS */ - COMPRESS_GZIP_SUF, /* COMPRESS_GZIP */ - COMPRESS_ZLIB_SUF, /* COMPRESS_ZLIB */ -}; - -/* note info */ -const char *note_file[NOTE_NUM_MAX] = { - "dump_report.txt", -}; - -#define DUMP_TIME_LEN 32 - -enum error_code { - COMP_ERROR, - WRITE_ERROR, - NO_SPACE_ERROR, - - NO_ERROR = 0, -}; diff --git a/uis7885/hardware/aosp/vendor/sprd/modules/minidump/minidump.h b/uis7885/hardware/aosp/vendor/sprd/modules/minidump/minidump.h deleted file mode 100755 index a0ad53e..0000000 --- a/uis7885/hardware/aosp/vendor/sprd/modules/minidump/minidump.h +++ /dev/null @@ -1,189 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2018 Spreadtrum Communications Inc. - * SPDX-FileCopyrightText: 2018-2022 Unisoc (Shanghai) Technologies Co., Ltd - * SPDX-License-Identifier: LicenseRef-Unisoc-General-1.0 - * - * Copyright 2018 Spreadtrum Communications Inc. - * Copyright 2018-2022 Unisoc (Shanghai) Technologies Co., Ltd. - * Licensed under the Unisoc General Software License, version 1.0 (the License); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * https://www.unisoc.com/en_us/license/UNISOC_GENERAL_LICENSE_V1.0-EN_US - * Software distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OF ANY KIND, either express or implied. - * See the Unisoc General Software License, version 1.0 for more details. - * - */ - -#ifndef __SYSDUMPDB_H__ -#define __SYSDUMPDB_H__ -#if 1 /* only for native app*/ -#include "dirent.h" -#include -#include -#ifdef CONFIG_NAND -#include -#endif -#define DIR_MAX_NUM 5 -#define MINIDUMP_FILE_PATH "/data/minidump" -#define MINIDUMP_FILE_NAME "%02d_minidump_%s" -#define EXCEPTION_FILE_NAME "dump_report.txt" -#define EXCEPTION_FILE_NUM_MAX 3 -#define RESET_COUNT_FILE_NAME "reset_count.txt" -#define REBOOT_HISTORY_FILE_NAME "reboot_history.txt" -#define PARTITION_NAME_MAX_SIZE 128 -#define PARTITION_PATH "/dev/block/by-name/" -#endif /* only for native app end */ - -#define PROC_DIR "/proc" -#define MINIDUMP_INFO_DIR "sprd_minidump" -#define MINIDUMP_INFO_PROC "minidump_info" -#define SYSDUMPDB_LOG_TAG "sysdumpdb" -#define SYSDUMPDB_PARTITION_NAME "sysdumpdb" -#define UBOOT_MAGIC "U2.0" -#define KERNEL_MAGIC "K2.0" -#define APP_MAGIC "A2.0" - -/* minidump description macro */ -#define OSRELEASE_SIZE 300 /* Linux version 4.4.83+ (builder@shhud14) (gcc version 4.9.x 20150123 (prerelease) (GCC) ) #1 SMP PREEMPT Tue Sep 11 12:47:50 CST 2018*/ -#define TIME_SIZE 50 /* 2018-12-12-20-24-24 */ -#define REBOOT_REASON_SIZE 50 /* kernel crash */ -#define CONTENTS_DESC_SIZE (1024 - OSRELEASE_SIZE - TIME_SIZE - REBOOT_REASON_SIZE) - -/* minidump contents description macro */ -#define REGS_NUM_MAX 50 /* max dump regs num in minidump,real num in regs_info_item */ -#define SECTION_NUM_MAX 200 /* max dump section num in minidump */ -#define SECTION_NAME_MAX 40 -#define MINIDUMP_MEM_MAX (SECTION_NUM_MAX + REGS_NUM_MAX + 1) -#define PT_BUF_SIZE (2 * 1024 * 1024) - -#define COMPRESSED_LEN_MALLOC_MAX (4 * 1024) -#define COMPRESSED_LEN_NAME "compressed_info" - - -enum minidump_info_type { - MINIDUMP_INFO_PADDR, - MINIDUMP_INFO_SIZE, -}; -char *minidump_info_proc_name[] = { - "minidump_info_paddr", - "minidump_info_size", -}; - -#define GET_MINIDUMP_INFO_NAME(x) minidump_info_proc_name[(x)] -/* the struct to save minidump info description */ -struct info_desc{ - unsigned long long paddr; - int size; -}; -/* the struct to save dump header info */ -struct dumpdb_header{ - char uboot_magic[4]; /* for uboot lable,type: "U2.0" ,means uboot saved minidump data*/ - char app_magic[4]; /* for app lable,type:"A2.0" ,means app read minidump description ok */ - /* Bit[0] : first boot indicate . 0: first boot ,not init . 1: no first boot , has init - Bit[1] : sysdump status , 0: disable 1:enable - Bit[2] : minidump status, 0:disable 1:enable - Bit[3] : boot from sysdump status , 0:not from sysdump 1:from sysdump; when undefined mode , do not check this status - others : reserved. - */ - int dump_flag; - int reset_mode; /*record which reset mode enter sysdump*/ - struct info_desc minidump_info_desc; -}; - -/* the struct to save minidump contents description (1024Bytes)*/ -struct minidump_data_desc{ - char osrelease[OSRELEASE_SIZE]; - char time[TIME_SIZE]; - char reboot_reason[REBOOT_REASON_SIZE]; - char minidump_data[CONTENTS_DESC_SIZE]; -}; - -#define DEVICE_NAME_YLOG "ylog_buffer" -#define YLOG_BUF_SIZE 1 * 1024 * 1024 -#define EXCEPTION_INFO_SIZE_SHORT 256 -#define EXCEPTION_INFO_SIZE_MID 512 -#define EXCEPTION_INFO_SIZE_LONG 0x2000 -#define MAX_STACK_TRACE_DEPTH 32 -#ifdef __aarch64__ -#define reg_pc pc -#define reg_lr regs[30] -#define reg_sp sp -#define reg_fp regs[29] -#else -#define reg_pc ARM_pc -#define reg_lr ARM_lr -#define reg_sp ARM_sp -#define reg_ip ARM_ip -#define reg_fp ARM_fp -#endif - -struct exception_info_item{ - char kernel_magic[8]; /* "K2.0" :make sure excep data valid */ - char exception_serialno[EXCEPTION_INFO_SIZE_SHORT]; - char exception_kernel_version[EXCEPTION_INFO_SIZE_MID]; - char exception_reboot_reason[EXCEPTION_INFO_SIZE_SHORT]; - char exception_panic_reason[EXCEPTION_INFO_SIZE_SHORT]; - char exception_time[EXCEPTION_INFO_SIZE_SHORT]; - char exception_file_info[EXCEPTION_INFO_SIZE_SHORT]; - int exception_task_id; - char exception_task_family[EXCEPTION_INFO_SIZE_SHORT]; - char exception_pc_symbol[EXCEPTION_INFO_SIZE_SHORT]; - char exception_stack_info[EXCEPTION_INFO_SIZE_LONG]; -}; -enum reg_arch_type { - ARM, - ARM64, - X86, - X86_64 -}; -struct regs_info_native{ - int arch; /* 32bit reg unsigned int and 64bit unsigned long, we need use type to mark*/ - int num; /* the num of regs will save memery amount */ - unsigned long long vaddr; /* struct pt_regs vaddr */ - unsigned long long paddr; /* struct pt_regs paddr */ - int size; /* sizeof(struct pt_regs) */ - int size_comp; /* size after compressed */ -}; - -struct regs_memory_info_native{ - unsigned long long reg_vaddr[REGS_NUM_MAX - 1]; /* if vaddr invalid set it as 0*/ - unsigned long long reg_paddr[REGS_NUM_MAX - 1]; /* if paddr invalid set it as 0*/ - int per_reg_memory_size; /* memory size amount reg */ - int per_mem_size_comp[REGS_NUM_MAX - 1]; /* size after compressed */ - int valid_reg_num; /* maybe some regs value not a valid addr */ - int size; /* memory size amount reg */ -}; -struct section_info_native{ - char section_name[SECTION_NAME_MAX]; - /*Get teh value in kernel use to record elfhdr info in uboot*/ - unsigned long long section_start_vaddr; - unsigned long long section_end_vaddr; - /*Get the value in kernel by __pa use to get memory contents in uboot */ - unsigned long long section_start_paddr; - unsigned long long section_end_paddr; - int section_size; - int section_size_comp; /* size after compressed */ -}; - -struct section_info_total_native{ - struct section_info_native section_info_native[SECTION_NUM_MAX]; - int total_size; - int total_num; -}; - -/* the struct to save minidump all infomation */ -struct minidump_info_native{ - char kernel_magic[6]; /* make sure minidump data valid */ - struct regs_info_native regs_info_native; /* | struct pt_regs | */ - struct regs_memory_info_native regs_memory_info_native; /* | memory amount regs | , need paddr and size, if paddr invalid set it as 0 */ - struct section_info_total_native section_info_total_native; /* | sections | , text,rodata,page_table ....,may be logbuf in here */ - int minidump_elfhdr_size; /* minidump elfhdr data size: update in uboot */ - int minidump_elfhdr_size_comp; /* minidump elfhdr data size,after compressed */ - struct minidump_data_desc desc; /* minidump contents description */ - int minidump_data_size; /* minidump data total size: regs_all_size + reg_memory_all_size + section_all_size */ - int compressed; /* indicate if minidump data compressed */ - struct exception_info_item exception_info; /* exception info */ -}; - -#endif /* __SYSDUMPDB_H__ */ diff --git a/uis7885/hardware/aosp/wrapper/BUILD.gn b/uis7885/hardware/aosp/wrapper/BUILD.gn index 34d688e..7b65eba 100755 --- a/uis7885/hardware/aosp/wrapper/BUILD.gn +++ b/uis7885/hardware/aosp/wrapper/BUILD.gn @@ -21,3 +21,4 @@ ohos_prebuilt_shared_library("utils_wrapper") { subsystem_name = "${SUBSYSTEM_NAME}" part_name = "${PART_NAME}" } + diff --git a/uis7885/hardware/aosp/wrapper/lib/libutils_wrapper.z.so b/uis7885/hardware/aosp/wrapper/lib/libutils_wrapper.z.so index 5302a0ddda4e731e947621b9647e528b68222d9c..c6315db2a069030bbb1f03ebf6b64da97b34c59e 100755 GIT binary patch delta 555 zcmV+`0@VH3CDq{_S=efV;5O`u!!JD=^mO0sXuPx->z=d)m+JqrOC1F||3Y-2pG;WT?STvSl z4q7JHw&6fnBA>H=7Xgj_Z258ym53?gRgKuzMsH#drr3O4Kk-yD2l1{1!*remf^XKH z#1(x(`dI)%hGOLne_Img_5x*^z-hJX*no2OmgEMH=(3Dj1S#^e%t^X$_pdN!FabQ4 ztyk@Nv|SI<9rOo~dpGEaVbMIDz+y-BLVGYydF1HY?< zmHBH@Dbt@KOi=^7|Iu`{i{V#reJpf-+ku|T15 z;!6^qy?)aif2-|Q9Yy_+QMq$E$}{yL$02=<9HA|O96QB3fSn$kmDWmO04rflbR~2d zv#2wac3Ni+-#t$=KS*1$U>BU=SD1Y@vHZ3f6e?L+%M3Se2+&s;QoX+ZFzh@6m#e2C tv9UG{vv!4_2+k&$%D;h+JCh4>+K@~F00000h|fQY1Y!4lWV5;q9tJ<$2f_dV delta 555 zcmV+`0@VH3CD7Rb0AsL9^Fxr2|Qn_%4B@}+TyVSl&I#byVc&blQ(0Q9DIP!;q0G%zDO^3m>Cct{ZcvN z^V3@Go@V$GZcxjGe_#j9^@R$9gPrEt*yYb62qTz2xm3oEiAZNuRm_2*z{HB@ORdwu zszkCxE=8g$aSHdoO2_Z?Um=E1*>zD3DQ}pW8Ju1a@w%;$7I_46?fEQHe;6pVM@{m zMY3Obpau!lif~8%pFlU-O+#O0u2;&H)rl5<=>7Qqc4qd^`1>rHLvwJDu&igXWhyKp zzHF)x&Zk{6f68*&SVR{RPxUj-BZT9YIKS2VM+s#7!hG9ZT@W>+k^*HrF6VpAcF*ZI z-A$eqXfPu1AL;GW tcKw*@O0_QA=R)JLJue+b-Yb+#r!)<700000q-d$r1Xk|FJ+rzD9tMmU8oK}h diff --git a/uis7885/hardware/bundle.json b/uis7885/hardware/bundle.json index de3bc71..2c37e11 100644 --- a/uis7885/hardware/bundle.json +++ b/uis7885/hardware/bundle.json @@ -58,40 +58,7 @@ "//device/soc/sprd/uis7885/hardware/aosp/hardware/interfaces/graphics/common:common-impl", "//device/soc/sprd/uis7885/hardware/omx_il:lib_omx" ], - "inner_kits": [ - { - "header": { - "header_base": "//device/soc/sprd/uis7885/hardware/aosp/system/memory/libdmabufheap/include", - "header_files": [ - "BufferAllocator/BufferAllocator.h", - "BufferAllocator/BufferAllocatorWrapper.h", - "BufferAllocator/dmabufheap-defs.h" - ] - }, - "name": "//device/soc/sprd/uis7885/hardware/aosp/system/memory/libdmabufheap:libaosp_dmabufheap" - }, - { - "header": { - "header_base": "//device/soc/sprd/uis7885/hardware/aosp/system/memory/libion/include", - "header_files": [ - "ion/ion.h" - ] - }, - "name": "//device/soc/sprd/uis7885/hardware/aosp/system/memory/libion:libion" - }, - { - "header": { - "header_base": "//device/soc/sprd/uis7885/hardware/aosp/system/memory/libmemion/include", - "header_files": [ - "C2UnisocDmaBuffer.h", - "dmaphyaddr-defs.h", - "VideoMemAllocator.h" - ] - }, - "name": "//device/soc/sprd/uis7885/hardware/aosp/system/memory/libmemion:libmemion" - } - ], "test": [] } } -} \ No newline at end of file +} diff --git a/uis7885/hardware/camera/BUILD.gn b/uis7885/hardware/camera/BUILD.gn index 15e9507..26e766b 100644 --- a/uis7885/hardware/camera/BUILD.gn +++ b/uis7885/hardware/camera/BUILD.gn @@ -17,23 +17,14 @@ import("//device/soc/sprd/uis7885/soc.gni") group("camera_group") { deps = [ - ":camv4l2adapter", - #":jpeg_hw_sprd", + ":jpeg_hw_sprd", ] } -ohos_prebuilt_shared_library("camv4l2adapter") { - source = "lib/libcamv4l2adapter.z.so" - install_enable = true - install_images = [ chipset_base_dir ] - subsystem_name = "${SUBSYSTEM_NAME}" - part_name = "${PART_NAME}" +ohos_prebuilt_shared_library("jpeg_hw_sprd") { + source = "lib/libjpeg_hw_sprd.z.so" + install_enable = true + install_images = [ chipset_base_dir ] + subsystem_name = "${SUBSYSTEM_NAME}" + part_name = "${PART_NAME}" } - -# ohos_prebuilt_shared_library("jpeg_hw_sprd") { -# source = "lib/libjpeg_hw_sprd.z.so" -# install_enable = true -# install_images = [ chipset_base_dir ] -# subsystem_name = "${SUBSYSTEM_NAME}" -# part_name = "${PART_NAME}" -# } diff --git a/uis7885/hardware/camera/lib/libcamv4l2adapter.z.so b/uis7885/hardware/camera/lib/libcamv4l2adapter.z.so deleted file mode 100755 index f330bc42a9ea0e84274a5b91a7eded379b9f2b85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64624 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 z 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 diff --git a/uis7885/hardware/display/BUILD.gn b/uis7885/hardware/display/BUILD.gn index ce12fee..a76edcb 100755 --- a/uis7885/hardware/display/BUILD.gn +++ b/uis7885/hardware/display/BUILD.gn @@ -22,39 +22,31 @@ group("display_buffer_model") { } ohos_prebuilt_shared_library("libdisplay_buffer_vdi_impl") { - source = "lib/libdisplay_buffer_vdi_impl.z.so" + source = "lib/libdisplay_buffer_vdi_impl.z.so" + install_enable = true + install_images = [ chipset_base_dir ] + innerapi_tags = [ "chipsetsdk" ] + subsystem_name = "soc_sprd" + part_name = "soc_uis7885" +} + +ohos_prebuilt_shared_library("display_gralloc") { + source = "lib/libdisplay_gralloc.z.so" install_enable = true install_images = [ chipset_base_dir ] - innerapi_tags = [ "chipsetsdk" ] subsystem_name = "soc_sprd" part_name = "soc_uis7885" } -ohos_prebuilt_shared_library( "display_gralloc") { - source = "lib/libdisplay_gralloc.z.so" +ohos_prebuilt_shared_library("libdisplay_composer_vdi_impl") { + source = "lib/libdisplay_composer_vdi_impl.z.so" install_enable = true install_images = [ chipset_base_dir ] subsystem_name = "soc_sprd" part_name = "soc_uis7885" } -group("display_composer_model") { - deps = [ - ":display_device", - ":display_gfx", - ":libdisplay_composer_vdi_impl", - ] -} - -ohos_prebuilt_shared_library( "libdisplay_composer_vdi_impl") { - source = "lib/libdisplay_composer_vdi_impl.z.so" - install_enable = true - install_images = [ chipset_base_dir ] - subsystem_name = "soc_sprd" - part_name = "soc_uis7885" -} - -ohos_prebuilt_shared_library( "display_gfx") { +ohos_prebuilt_shared_library("display_gfx") { source = "lib/libdisplay_gfx.z.so" install_enable = true install_images = [ chipset_base_dir ] @@ -62,12 +54,20 @@ ohos_prebuilt_shared_library( "display_gfx") { part_name = "soc_uis7885" } -ohos_prebuilt_shared_library( "display_device") { +ohos_prebuilt_shared_library("display_device") { source = "lib/libdisplay_device.z.so" - symlink_target_name = [ "libdisplay_layer.z.so" ] install_enable = true install_images = [ chipset_base_dir ] subsystem_name = "soc_sprd" part_name = "soc_uis7885" } + +group("display_composer_model") { + deps = [ + ":display_device", + ":display_gfx", + ":libdisplay_composer_vdi_impl", + "//third_party/libdrm:libdrm", + ] +} diff --git a/uis7885/hardware/display/lib/libdisplay_buffer_vdi_impl.z.so b/uis7885/hardware/display/lib/libdisplay_buffer_vdi_impl.z.so index 8f19dec7eb5ddc722a7c6cfdb4f8583c34714315..cf418e8089848bb93cd65555b07724ec4a510bfa 100755 GIT binary patch delta 694 zcmV;n0!jUlPLNKplmZZ%OPPu-aYbdw1kF))y@9Ng5ds{uzygyR0TGi_9jAY@>&m$1 zL%&iwgfiflC(XY_VD|ln!t~>bJH!;X&vGWlA}DrVlvGao1H;K&HP=k(^ft?08TQj2 zI*sJ;BgtF>FarPm2C?EhWxhvVGdFH!%@C3S8Q5X~6VIj3AQlQ%4vFT8-qa zxczpQP600X=UhF}!*O^QKUjbC@7CAjTB?s|Q!f4CJ8^`{(r&~t@OyxC?q1gzMe&rN zFnY6N%Xl_N4QUtXT9!#XdbjYR7VCCjAGInoto)rK_99d>wQoos3ETNe-6#BxhB_>5 zDm|_lE`l@o@}2RbMHy&aB;ksuDSUj&oDs@xuE~l~!a6d4h$;P3p$kPqCy9mm7M2YEjwV@;K= zrja06u9}18WRLvIK|y~nWb`RY1>c2OL;Hczdt*0<c5G4s{xBjpz>l8K9r@gK-j=j z$f8|jh`{bt@}^;r-e2=l6Wie1cPoPGT5_uZKSUv*Fs0?Ac1FsCYSz4ySLQ(g0000% cGzIPNvMV+K0j&uJ@Javx{5|{VvJFxJRM_R`)e2e++Ln|-3MD>V3A0qv>s9Lpn}=fBYwLTP(-zH6@db<*Jl zj3ReLH2~3DEjJ?}ASvb{LPYUU9h1n(MuP3^bdekZU%qBB`MHFmc>_{Tl+?RGyt~uE z&tTINwas=sF7T+SRcHpk-=wsHv~@A&Ah64OyWSV?o9-BrFd4b}dI^6ieA zE^<8MMG0OQyJUk5?lOWq9Iw4B4>6BtmR9iSCV%-!vhqhI)OL8)8%Ixiy;PGsB>#+fHEEy@?woE z)+b>m+ay_^iSNax%7TBSEC;{)FA=h0eRsst-AuZK2bymoIRXX~WM3I)pK3(GA_~Mm zi@-oK#vhU9Sk*`7YlVg7?0&tZ!~Ne5`LzlDvb_HSt3pxKGs3$5^fS_HRLO6Av!-1z zNW)M~FXFKNrfIr~3b8Z!@pt`7_3!=%6~qRlt}e9WdQYeVnbm(|zxtY9&oYg7EvSvc zz6B|Fu*E1q3aW>dNlR+(%GRwgA?IfQVxWf(CqiR7N3RfBnh%v5NPoG|)-_V*Y~OV| z2PQnSB6BVOdhh(7`6e4>SEr(v5jxR9LS?Wsk*sWbpu)l!v>1d;(pG_&QKod5t- cMI%jfINd`40j~)L@Javx_nb6evwt9w25K=-lK=n! diff --git a/uis7885/hardware/display/lib/libdisplay_composer_vdi_impl.z.so b/uis7885/hardware/display/lib/libdisplay_composer_vdi_impl.z.so index d067ad367585ceb9069b56851dba52675e0d256b..336d46b82b8c00ab86dab8467c66eda938d3267a 100755 GIT binary patch literal 32480 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 z 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 D(PFTy literal 50392 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 diff --git a/uis7885/hardware/location/BUILD.gn b/uis7885/hardware/location/BUILD.gn index 03bf641..90a99ae 100755 --- a/uis7885/hardware/location/BUILD.gn +++ b/uis7885/hardware/location/BUILD.gn @@ -20,23 +20,23 @@ import("//device/soc/sprd/uis7885/soc.gni") group("location_group") { deps = [ ":gnssmodem", - #":libasnsupl", - #":libgnssmgt", - #":libgps.default", - #":liblcsagent", - #":liblcscp", - #":liblcsmgt", - #":liblcsmos", - #":liblcspkcs15", - #":liblcssc", - #":liblcswbxml2", - #":libsupl", + ":libasnsupl", + ":libgnssmgt", + ":libgps.default", + ":liblcsagent", + ":liblcscp", + ":liblcsmgt", + ":liblcsmos", + ":liblcspkcs15", + ":liblcssc", + ":liblcswbxml2", + ":libsupl", ":sprd_gnss_config_xml", ":sprd_gnss_spirentroot_cer", ":sprd_gnss_supl_xml", ":sprd_gnss_prop_ini", "gnss:vendorGnssAdapter", -# "test:gnss_test", + # "test:gnss_test", ] } @@ -50,105 +50,105 @@ ohos_prebuilt_executable("gnssmodem") { } -# ohos_prebuilt_shared_library("libasnsupl") { -# source = "lib64/libasnsupl.z.so" -# install_enable = true -# install_images = [ chipset_base_dir ] -# module_install_dir = "lib64" -# subsystem_name = "${SUBSYSTEM_NAME}" -# part_name = "${PART_NAME}" +ohos_prebuilt_shared_library("libasnsupl") { + source = "lib64/libasnsupl.z.so" + install_enable = true + install_images = [ chipset_base_dir ] + module_install_dir = "lib64" + subsystem_name = "${SUBSYSTEM_NAME}" + part_name = "${PART_NAME}" -# } - -# ohos_prebuilt_shared_library("libgnssmgt") { -# source = "lib64/libgnssmgt.z.so" -# install_enable = true -# install_images = [ chipset_base_dir ] -# module_install_dir = "lib64" -# subsystem_name = "${SUBSYSTEM_NAME}" -# part_name = "${PART_NAME}" +} + +ohos_prebuilt_shared_library("libgnssmgt") { + source = "lib64/libgnssmgt.z.so" + install_enable = true + install_images = [ chipset_base_dir ] + module_install_dir = "lib64" + subsystem_name = "${SUBSYSTEM_NAME}" + part_name = "${PART_NAME}" -# } - -# ohos_prebuilt_shared_library("libgps.default") { -# source = "lib64/libgps.default.z.so" -# install_enable = true -# install_images = [ chipset_base_dir ] -# module_install_dir = "lib64" -# subsystem_name = "${SUBSYSTEM_NAME}" -# part_name = "${PART_NAME}" +} + +ohos_prebuilt_shared_library("libgps.default") { + source = "lib64/libgps.default.z.so" + install_enable = true + install_images = [ chipset_base_dir ] + module_install_dir = "lib64" + subsystem_name = "${SUBSYSTEM_NAME}" + part_name = "${PART_NAME}" -# } - -# ohos_prebuilt_shared_library("liblcsagent") { -# source = "lib64/liblcsagent.z.so" -# install_enable = true -# install_images = [ chipset_base_dir ] -# module_install_dir = "lib64" -# subsystem_name = "${SUBSYSTEM_NAME}" -# part_name = "${PART_NAME}" +} + +ohos_prebuilt_shared_library("liblcsagent") { + source = "lib64/liblcsagent.z.so" + install_enable = true + install_images = [ chipset_base_dir ] + module_install_dir = "lib64" + subsystem_name = "${SUBSYSTEM_NAME}" + part_name = "${PART_NAME}" -# } - -# ohos_prebuilt_shared_library("liblcscp") { -# source = "lib64/liblcscp.z.so" -# install_enable = true -# install_images = [ chipset_base_dir ] -# module_install_dir = "lib64" -# subsystem_name = "${SUBSYSTEM_NAME}" -# part_name = "${PART_NAME}" +} + +ohos_prebuilt_shared_library("liblcscp") { + source = "lib64/liblcscp.z.so" + install_enable = true + install_images = [ chipset_base_dir ] + module_install_dir = "lib64" + subsystem_name = "${SUBSYSTEM_NAME}" + part_name = "${PART_NAME}" -# } - -# ohos_prebuilt_shared_library("liblcsmgt") { -# source = "lib64/liblcsmgt.z.so" -# install_enable = true -# install_images = [ chipset_base_dir ] -# module_install_dir = "lib64" -# subsystem_name = "${SUBSYSTEM_NAME}" -# part_name = "${PART_NAME}" +} + +ohos_prebuilt_shared_library("liblcsmgt") { + source = "lib64/liblcsmgt.z.so" + install_enable = true + install_images = [ chipset_base_dir ] + module_install_dir = "lib64" + subsystem_name = "${SUBSYSTEM_NAME}" + part_name = "${PART_NAME}" -# } - -# ohos_prebuilt_shared_library("liblcsmos") { -# source = "lib64/liblcsmos.z.so" -# install_enable = true -# install_images = [ chipset_base_dir ] -# module_install_dir = "lib64" -# subsystem_name = "${SUBSYSTEM_NAME}" -# part_name = "${PART_NAME}" +} + +ohos_prebuilt_shared_library("liblcsmos") { + source = "lib64/liblcsmos.z.so" + install_enable = true + install_images = [ chipset_base_dir ] + module_install_dir = "lib64" + subsystem_name = "${SUBSYSTEM_NAME}" + part_name = "${PART_NAME}" -# } - -# ohos_prebuilt_shared_library("liblcspkcs15") { -# source = "lib64/liblcspkcs15.z.so" -# install_enable = true -# install_images = [ chipset_base_dir ] -# module_install_dir = "lib64" -# subsystem_name = "${SUBSYSTEM_NAME}" -# part_name = "${PART_NAME}" +} + +ohos_prebuilt_shared_library("liblcspkcs15") { + source = "lib64/liblcspkcs15.z.so" + install_enable = true + install_images = [ chipset_base_dir ] + module_install_dir = "lib64" + subsystem_name = "${SUBSYSTEM_NAME}" + part_name = "${PART_NAME}" -# } - -# ohos_prebuilt_shared_library("liblcssc") { -# source = "lib64/liblcssc.z.so" -# install_enable = true -# install_images = [ chipset_base_dir ] -# module_install_dir = "lib64" -# subsystem_name = "${SUBSYSTEM_NAME}" -# part_name = "${PART_NAME}" +} + +ohos_prebuilt_shared_library("liblcssc") { + source = "lib64/liblcssc.z.so" + install_enable = true + install_images = [ chipset_base_dir ] + module_install_dir = "lib64" + subsystem_name = "${SUBSYSTEM_NAME}" + part_name = "${PART_NAME}" -# } - -# ohos_prebuilt_shared_library("liblcswbxml2") { -# source = "lib64/liblcswbxml2.z.so" -# install_enable = true -# install_images = [ chipset_base_dir ] -# module_install_dir = "lib64" -# subsystem_name = "${SUBSYSTEM_NAME}" -# part_name = "${PART_NAME}" +} + +ohos_prebuilt_shared_library("liblcswbxml2") { + source = "lib64/liblcswbxml2.z.so" + install_enable = true + install_images = [ chipset_base_dir ] + module_install_dir = "lib64" + subsystem_name = "${SUBSYSTEM_NAME}" + part_name = "${PART_NAME}" -# } +} ohos_prebuilt_shared_library("librilutils") { source = "lib64/librilutils.z.so" @@ -160,15 +160,15 @@ ohos_prebuilt_shared_library("librilutils") { } -# ohos_prebuilt_shared_library("libsupl") { -# source = "lib64/libsupl.z.so" -# install_enable = true -# install_images = [ chipset_base_dir ] -# module_install_dir = "lib64" -# subsystem_name = "${SUBSYSTEM_NAME}" -# part_name = "${PART_NAME}" +ohos_prebuilt_shared_library("libsupl") { + source = "lib64/libsupl.z.so" + install_enable = true + install_images = [ chipset_base_dir ] + module_install_dir = "lib64" + subsystem_name = "${SUBSYSTEM_NAME}" + part_name = "${PART_NAME}" -# } +} ohos_prebuilt_etc("sprd_gnss_config_xml") { source = "etc/config.xml" diff --git a/uis7885/hardware/location/gnss/BUILD.gn b/uis7885/hardware/location/gnss/BUILD.gn index 9aaa9a1..7f83495 100755 --- a/uis7885/hardware/location/gnss/BUILD.gn +++ b/uis7885/hardware/location/gnss/BUILD.gn @@ -4,10 +4,9 @@ import("//device/soc/sprd/uis7885/soc.gni") ohos_prebuilt_shared_library("vendorGnssAdapter") { source = "lib/vendorGnssAdapter.so" + module_install_dir = "lib64" install_enable = true install_images = [ chipset_base_dir ] - module_install_dir = "lib64" subsystem_name = "${SUBSYSTEM_NAME}" part_name = "${PART_NAME}" } - diff --git a/uis7885/hardware/location/gnss/lib/vendorGnssAdapter.so b/uis7885/hardware/location/gnss/lib/vendorGnssAdapter.so index e9906e2c198e42d51547b62242423aa9b5045d33..24d667cdc47fa48803628af47dd3a57dcd3e5d03 100755 GIT binary patch delta 977 zcmV;?11|iamI0ua0kF&h5c-;T&zc1XY97SclnG;(mXi?z9Fw3(1hf1C7(D?elNCU? zf1g)|t6k7HGCELKo6+t2p(I$ZArKh8JXm`b!TIj7>c(J4krRh$UOj${XiV{ zcWPFysl77S>mO829lTo)Gn!E*6+{QP2};s41T770&YJ1*)`}P* zFfCNG{Ji8~r#V{Ya9O&>UW=ZKw03|CLwOwJnro3S2`-fC4t!jc@gt1UJpt=Z4p>j- zyW&9DTYLO#Uw+bTIq#CD;C9*;)CM`Xn0beDAUzB{EUw+DElkgP;elo-ogOKG1l65{;QpS=UCK4fZ zVOdbx?3im~_wxaa>Y@Mv2B?P4G6uY}3MxReLS<653l^oG_&O_gHVwE=f0wLr{y|XK z#z62V_GpLsa=wdXDtOtwW68D}{EiwVM`9dFQQq4#AIg0yq}l^>h2^A~psJa6ihMG0 zC5J5ruX5rFFvHzikejwzBI^iB`f4#kt@91uvB+Dw1$TN-u^iORdld6g3Y_0U9i#ZG zFdTySKi+{Xi_ce22h?FGf0o;_Hxb1jG@A%~f*2W7Rop zu@+aXdh?phSQM`V-q* delta 977 zcmV;?11|iamI0ua0kF&h5R6VB11PnpPo+*scd_l)_mdF<9Fw3(1hf1C7(D?dlNCU? ze~cGOXgf0P^n*orIvo=UQ6pjWY?AzJ=;iU7bI#gW4X8RZ)uA-6LV_Z(;-BOP!!3Ws zeOre9dkbucnLM4u8qlHKKGX>3A98KjQiMZNaJn` ztyq@7iJ`^KLdSY0tU-@TAdc?-*-Nr5>hwiQzIKN--AY<+i62Frv#9K_!b6pFIXGTp4=+-G zC?6NDEGzDHOm<@iup5?aciemd=+T3nx<=|C=C<|L7?!kn+>o{UMN!;&FpowzHBO2S zR!(b5$Ba|MgL9tAJ-1bHsnurgf5@y{5#dU6+Fz<5ki`#j`3{rrx z^X~RXUOdiOjFtdKO{O^US}%1uQlPF;Pm6F?zUr3ma?phc!plm;;FY0eQm6)2sKj)> zWY3|10dydCxUYq%F+VJ9GM9r_Y~aqF`<~Z%rJ}<;>%sv z#cnew*lY^hGpYv9mC0e+dv`?vw8wMpfjJL@0|QW7Tz z1f_u{Q*qLiTp3+UXy>nmnbYsRXNiF;v#<`$%D*dEFokt&(_g-JfBQoZOO{i7#%03R zoAQPgX%3uX?`%7b#2Z3p@3+-9gXvvg(fxmVv68P$|Jce{vV4x}n7TSNih|BvN#PQp zjc+XxQmH>1#@3wl{_wzBD3$Yv``xQ8I1KDEDhXE|wrrhFP3b)@Xx$*;944CGHb}Bd z2)^I|005^wIatuq8mvPA0m2B7H2?s7=H)Q4#Ao{g000001X)^>aXdh?phSQMlOElI diff --git a/uis7885/hardware/location/gnss/vendorGnssAdapter.h b/uis7885/hardware/location/gnss/vendorGnssAdapter.h deleted file mode 100755 index 2e1f7a3..0000000 --- a/uis7885/hardware/location/gnss/vendorGnssAdapter.h +++ /dev/null @@ -1,382 +0,0 @@ -/* - * Copyright 2023 Shenzhen Kaihong DID Co., Ltd.. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "location_vendor_lib.h" -#include "location_log.h" -//#define GNSS OHOS::Location::GNSS -#define GPS_MAX_SVS 32 -#define GNSS_MAX_SVS 64 - -enum DL_RET { - SO_OK = 0, - LOAD_NOK = -1, - FUNC_NOK = -2, -}; - -const int AGMI = 1; -const int GMI = 2; -const int GVI = 3; - -typedef int64_t GpsUtcTime; -typedef struct { - size_t size; - uint16_t flags; - double latitude; - double longitude; - double altitude; - float speed; - float bearing; - float accuracy; - GpsUtcTime timestamp; - float veraccuracy; - float speedaccuracy; - float bearaccuracy; -} GpsLocation; - -typedef struct { - size_t size; - int prn; - float snr; - float elevation; - float azimuth; -} GpsSvInfo; - -typedef struct { - size_t size; - GpsSvInfo sv_list[GPS_MAX_SVS]; - uint32_t ephemeris_mask; - uint32_t almanac_mask; - uint32_t used_in_fix_mask; -} GpsSvStatus; - -typedef uint8_t GnssConstellationType; -typedef uint8_t GnssSvFlags; - -typedef struct { - size_t size; - int16_t svid; - GnssConstellationType constellation; - float c_n0_dbhz; - float elevation; - float zaimuth; - GnssSvFlags flags; - float carrier_freq; -} GnssSvInfo; - -typedef struct { - size_t size; - int numb_svs; - GnssSvInfo gnss_sv_list[GNSS_MAX_SVS]; -} GnssSvStatus; - -typedef uint16_t GpsStatusValue; - -typedef struct { - size_t size; - GpsStatusValue status; -} GpsStatus; - -typedef struct { - size_t size; - uint16_t year_of_hw; -} GnssSystemInfo; - -//read data; -GpsLocation GPSloc; -GpsSvStatus SvState; - -typedef unsigned long int pthread_t; - -typedef void (*gps_location_callback)(GpsLocation *location); -typedef void (*gps_status_callback)(GpsStatus *status); -typedef void (*gps_sv_status_callback)(GpsSvStatus *sv_info); -typedef void (*gnss_sv_status_callback)(GnssSvStatus *sv_info); -typedef void (*gps_nmea_callback)(GpsUtcTime timestamp, const char *nmea, - int length); -typedef void (*gps_set_capabilities)(uint32_t capbilities); -typedef void (*gps_acquire_wakelock)(); -typedef void (*gps_release_wakelock)(); -typedef void (*gps_request_utc_time)(); -typedef pthread_t (*gps_create_thread)(const char *name, void (*start)(void *), - void *arg); -typedef void (*gnss_set_system_info)(const GnssSystemInfo *info); - -/* sprd so callback */ -static void location_callback(GpsLocation *location); -static void status_callback(GpsStatus *status); -static void sv_status_callback(GpsSvStatus *sv_status); -static void nmea_callback(GpsUtcTime timestamp, const char *nmea, int length); -static void set_capabilities_callback(uint32_t capabilities); -static void acquire_wakelock_callback(); -static void release_wakelock_callback(); -static void request_utc_time_callback(); -static void gnss_set_system_info_test(const GnssSystemInfo *info); -static void gnss_sv_status_callback_test(GnssSvStatus *sv_info); -pthread_t create_thread_callback(const char *name, void (*start)(void *), - void *arg); -typedef struct { - size_t size; - gps_location_callback location_cb; - gps_status_callback status_cb; - gps_sv_status_callback sv_status_cb; - gps_nmea_callback nmea_cb; - gps_set_capabilities set_capabilities_cb; - gps_acquire_wakelock acquire_wakelock_cb; - gps_release_wakelock release_wakelock_cb; - gps_create_thread create_thread_cb; - gps_request_utc_time request_utc_time_cb; - gnss_set_system_info set_system_info_cb; - gnss_sv_status_callback gnss_sv_status_cb; -} GpsCallbacks; // sprd callback; - -GpsCallbacks sGpsCallbacks = {sizeof(GpsCallbacks), - location_callback, - status_callback, - sv_status_callback, - nmea_callback, - set_capabilities_callback, - acquire_wakelock_callback, - release_wakelock_callback, - create_thread_callback, - request_utc_time_callback, - gnss_set_system_info_test, - gnss_sv_status_callback_test}; - -typedef int (*pGnssmgt_init)(GpsCallbacks *callbacks); -typedef int (*pGnssmgt_start)(void); -typedef int (*pGnssmgt_stop)(void); -typedef int (*pGnssmgt_cleanup)(void); - -/* AGPS PART */ -typedef uint16_t ApnIpType; -#define APN_IP_INVALID 0 -#define APN_IP_IPV4 1 -#define APN_IP_IPV6 2 -#define APN_IP_IPV4V6 3 - -typedef uint16_t AGpsSetIDType; -#define AGPS_SETID_TYPE_NONE 0 -#define AGPS_SETID_TYPE_IMSI 1 -#define AGPS_SETID_TYPE_MSISDN 2 - -typedef uint16_t AGpsRefLocationType; -#define AGPS_REF_LOCATION_TYPE_GSM_CELLID 1 -#define AGPS_REF_LOCATION_TYPE_UMTS_CELLID 2 -#define AGPS_REF_LOCATION_TYPE_MAC 3 -#define AGPS_REF_LOCATION_TYPE_LTE_CELLID 4 -#define AGPS_REF_LOCATION_TYPE_LTE_CELLID_EX 5 -#define AGPS_REF_LOCATION_TYPE_NR_CELLID 8 - -/* Deprecated, to be removed in the next Android release. */ -#define AGPS_REG_LOCATION_TYPE_MAC 3 - -/** Network types for update_network_state "type" parameter */ -#define AGPS_RIL_NETWORK_TYPE_MOBILE 0 -#define AGPS_RIL_NETWORK_TYPE_WIFI 1 -#define AGPS_RIL_NETWORK_TYPE_MOBILE_MMS 2 -#define AGPS_RIL_NETWORK_TYPE_MOBILE_SUPL 3 -#define AGPS_RIL_NETWORK_TTYPE_MOBILE_DUN 4 -#define AGPS_RIL_NETWORK_TTYPE_MOBILE_HIPRI 5 -#define AGPS_RIL_NETWORK_TTYPE_WIMAX 6 - -/** Requested operational mode for GPS operation. */ -typedef uint32_t GpsPositionMode; -/* IMPORTANT: Note that the following values must match -* constants in GpsLocationProvider.java. */ -/** Mode for running GPS standalone (no assistance). */ -#define GPS_POSITION_MODE_STANDALONE 0 -/** AGPS MS-Based mode. */ -#define GPS_POSITION_MODE_MS_BASED 1 -/** -* AGPS MS-Assisted mode. This mode is not maintained by the platform anymore. -* It is strongly recommended to use GPS_POSITION_MODE_MS_BASED instead. -*/ -#define GPS_POSITION_MODE_MS_ASSISTED 2 - -/** Requested recurrence mode for GPS operation. */ -typedef uint32_t GpsPositionRecurrence; -/* IMPORTANT: Note that the following values must match -* constants in GpsLocationProvider.java. */ -/** Receive GPS fixes on a recurring basis at a specified period. */ -#define GPS_POSITION_RECURRENCE_PERIODIC 0 -/** Request a single shot GPS fix. */ -#define GPS_POSITION_RECURRENCE_SINGLE 1 - - -/** AGPS type */ -typedef uint16_t AGpsType; -#define AGPS_TYPE_SUPL 1 -#define AGPS_TYPE_C2K 2 - -/** AGPS status event values. */ -typedef uint16_t AGpsStatusValue; -/** GPS requests data connection for AGPS. */ -#define GPS_REQUEST_AGPS_DATA_CONN 1 -/** GPS releases the AGPS data connection. */ -#define GPS_RELEASE_AGPS_DATA_CONN 2 -/** AGPS data connection initiated */ -#define GPS_AGPS_DATA_CONNECTED 3 -/** AGPS data connection completed */ -#define GPS_AGPS_DATA_CONN_DONE 4 -/** AGPS data connection failed */ -#define GPS_AGPS_DATA_CONN_FAILED 5 - -typedef struct { - /** set to sizeof(AGpsStatus) */ - size_t size; - - AGpsType type; - AGpsStatusValue status; - - /** - * Must be set to a valid IPv4 address if the field 'addr' contains an IPv4 - * address, or set to INADDR_NONE otherwise. - */ - uint32_t ipaddr; - - /** - * Must contain the IPv4 (AF_INET) or IPv6 (AF_INET6) address to report. - * Any other value of addr.ss_family will be rejected. - */ - // struct sockaddr_storage addr; -} AGpsStatus; - -/** - * Callback with AGPS status information. Can only be called from a thread - * created by create_thread_cb. - */ -typedef void (* agps_status_callback)(AGpsStatus* status); -typedef void (*agps_ril_request_set_id)(uint32_t flags); -typedef void (*agps_ril_request_ref_loc)(uint32_t flags); -typedef pthread_t (* gps_create_thread)(const char* name,void (*start)(void *),void* arg); - -/* CellID for 2G, 3G and LTE, used in AGPS. */ -typedef struct { - AGpsRefLocationType type; - /** Mobile Country Code. */ - uint16_t mcc; - /** Mobile Network Code .*/ - uint16_t mnc; - /** Location Area Code in 2G, 3G and LTE. In 3G lac is discarded. In LTE, - * lac is populated with tac, to ensure that we don't break old clients that - * might rely in the old (wrong) behavior. - */ - uint16_t lac; - /** Cell id in 2G. Utran Cell id in 3G. Cell Global Id EUTRA in LTE. */ - uint32_t cid; - - /** Tracking Area Code in LTE. */ - uint16_t tac; - /** Physical Cell id in LTE (not used in 2G and 3G) */ - uint16_t pcid; -} AGpsRefLocationCellID; - -typedef struct { - uint8_t mac[6]; -} AGpsRefLocationMac; - -typedef struct { - /** Mobile Country Code. */ - uint16_t mcc; - /** Mobile Network Code .*/ - uint16_t mnc; - /** Cell id in 2G. Utran Cell id in 3G. Cell Global Id EUTRA in LTE. */ - uint64_t cid; - /** Tracking Area Code in LTE. */ - uint32_t tac; - /** Physical Cell id in LTE (not used in 2G and 3G) */ - uint16_t pcid; - /** ARFCN used for SSB or CSI-RS measurements, 0..3279165. */ - uint32_t arfcn_nr; -} AGpsRefLocationCellID_NR_t; - -/** Represents ref locations */ -typedef struct { - AGpsRefLocationType type; - union { - AGpsRefLocationCellID cellID; - AGpsRefLocationMac mac; - AGpsRefLocationCellID_NR_t cellID_nr; - } u; -} AGpsRefLocation; - -/** Callback structure for the AGPS interface. */ -typedef struct { - agps_status_callback status_cb; - gps_create_thread create_thread_cb; -} AGpsCallbacks; - -typedef struct { - agps_ril_request_set_id request_setid; - agps_ril_request_ref_loc request_refloc; - gps_create_thread create_thread_cb; -} AGpsRilCallbacks; - -/* AGMI interface*/ -void gnssmgt_agps_ril_setRefLoc( - const AGpsRefLocation *refLocation, size_t szStruct); -void gnssmgt_agps_ril_setSetID(AGpsSetIDType type, const char *setid); - -/* sprd so callback */ -static void agnss_status_callback(AGpsStatus* status); -static void agnss_ril_request_set_id_callback(uint32_t flags); -static void agnss_ril_request_ref_loc_callback(uint32_t flags); -pthread_t agnss_create_thread_cb(const char* name, void (*start)(void *), void* arg); - -typedef int (*pAGnssmgt_init)(AGpsCallbacks* callbacks); -typedef int (*pAGnssmgt_setPosMode)( - GpsPositionMode mode, - GpsPositionRecurrence recurrence, - uint32_t minInterval, - uint32_t prefAccuracy, - uint32_t prefTime); -typedef int (*pAGnssmgt_agps_closeConn)(void); -typedef int (*pAGnssmgt_agps_openFailed)(void); -typedef int (*pAGnssmgt_set_server)(AGpsType type, const char* hostname, int port); -typedef int (*pAGnssmgt_open_conn)(const char* apn); -typedef int (*pAGnssmgt_agps_openWithApnIpType)(const char *apn, ApnIpType apnIpType); -typedef int (*pAGnssmgt_ril_init)(AGpsRilCallbacks *callbacks); -typedef int (*pAGnssmgt_ril_ref_location)(const AGpsRefLocation *refLocation, size_t szStruct); -typedef int (*pAGnssmgt_set_setid)(AGpsSetIDType type, const char *setid); -typedef int (*pAGnssmgt_set_RefLoc)(const AGpsRefLocation *refLocation, size_t szStruct); -typedef int (*pAGnssmgt_updateNwState)(int connected, int type, int roaming, const char* extraInfo); -typedef int (*pAGnssmgt_updateNwAvailability)(int avaiable, const char *apn); -typedef int (*pAGnssmgt_ril_set_id)(AGpsSetIDType type, const char *setid); -typedef int (*pAGnssmgt_ril_update_network_availability)(int avaiable, const char *apn); -typedef int (*pAGnssmgt_ril_update_network_state)(int connected, int type, int roaming, const char* extraInfo); - -pGnssmgt_init gps_init=NULL; -pGnssmgt_start gps_start=NULL; -pGnssmgt_stop gps_stop=NULL; -pGnssmgt_cleanup gps_cleanup=NULL; -pAGnssmgt_init agps_init=NULL; -pAGnssmgt_setPosMode agps_setPosMode=NULL; -pAGnssmgt_set_server agps_set_server=NULL; -pAGnssmgt_open_conn agps_open_conn=NULL; -pAGnssmgt_updateNwState agps_updateNwState=NULL; -pAGnssmgt_updateNwAvailability agps_updateNwAvailability=NULL; -pAGnssmgt_set_setid agps_set_setid=NULL; -pAGnssmgt_set_RefLoc agps_set_RefLoc=NULL; -pAGnssmgt_agps_closeConn agps_close_conn=NULL; -pAGnssmgt_agps_openFailed agps_open_failed=NULL; -pAGnssmgt_agps_openWithApnIpType agps_open_with_apn=NULL; -pAGnssmgt_ril_init agps_ril_init=NULL; -pAGnssmgt_ril_ref_location agps_ril_ref_location=NULL; -pAGnssmgt_ril_set_id agps_ril_set_id=NULL; -pAGnssmgt_ril_update_network_availability agps_ril_net_ability=NULL; -pAGnssmgt_ril_update_network_state agps_ril_net_state=NULL; - - - diff --git a/uis7885/hardware/omx_il/components/BUILD.gn b/uis7885/hardware/omx_il/components/BUILD.gn index 0836418..0f741db 100644 --- a/uis7885/hardware/omx_il/components/BUILD.gn +++ b/uis7885/hardware/omx_il/components/BUILD.gn @@ -21,5 +21,6 @@ import("//drivers/hdf_core/adapter/uhdf2/uhdf.gni") group("libstagefright_components") { deps = [ "//device/soc/sprd/uis7885/hardware/omx_il/components/video/avc/dec/hw:libstagefright_sprd_avc_dec", + "//device/soc/sprd/uis7885/hardware/omx_il/components/video/vpp/deintl:libstagefright_sprd_deintl", ] } diff --git a/uis7885/hardware/omx_il/components/video/avc/dec/hw/BUILD.gn b/uis7885/hardware/omx_il/components/video/avc/dec/hw/BUILD.gn index 0d27f21..648bbad 100644 --- a/uis7885/hardware/omx_il/components/video/avc/dec/hw/BUILD.gn +++ b/uis7885/hardware/omx_il/components/video/avc/dec/hw/BUILD.gn @@ -19,33 +19,33 @@ import("//device/soc/sprd/uis7885/soc.gni") ohos_prebuilt_shared_library("libstagefright_sprd_h264dec") { source = "lib64/libstagefright_sprd_h264dec.z.so" + install_enable = true install_images = [ chipset_base_dir ] subsystem_name = "${SUBSYSTEM_NAME}" - install_enable = true part_name = "${PART_NAME}" } -# ohos_prebuilt_shared_library( "libomx_avcdec_hw_sprd" ){ -# source = "lib64/libomx_avcdec_hw_sprd.z.so" -# install_enable = true -# install_images = [chipset_base_dir] -# subsystem_name = "${SUBSYSTEM_NAME}" -# part_name = "${PART_NAME}" -# } +ohos_prebuilt_shared_library("libomx_avcdec_hw_sprd"){ + source = "lib64/libomx_avcdec_hw_sprd.z.so" + install_enable = true + install_images = [chipset_base_dir] + subsystem_name = "${SUBSYSTEM_NAME}" + part_name = "${PART_NAME}" +} -# ohos_prebuilt_shared_library( "libomx_avcenc_hw_sprd" ){ -# source = "lib64/libomx_avcenc_hw_sprd.z.so" -# install_enable = true -# install_images = [chipset_base_dir] -# subsystem_name = "${SUBSYSTEM_NAME}" -# part_name = "${PART_NAME}" -# } +ohos_prebuilt_shared_library("libomx_avcenc_hw_sprd"){ + source = "lib64/libomx_avcenc_hw_sprd.z.so" + install_enable = true + install_images = [chipset_base_dir] + subsystem_name = "${SUBSYSTEM_NAME}" + part_name = "${PART_NAME}" +} group( "libstagefright_sprd_avc_dec" ) { deps = [ ":libstagefright_sprd_h264dec", -# ":libomx_avcdec_hw_sprd", -# ":libomx_avcenc_hw_sprd", + ":libomx_avcdec_hw_sprd", + ":libomx_avcenc_hw_sprd", ] } diff --git a/uis7885/hardware/omx_il/components/video/avc/dec/hw/lib64/libstagefright_sprd_h264dec.z.so b/uis7885/hardware/omx_il/components/video/avc/dec/hw/lib64/libstagefright_sprd_h264dec.z.so index 36b7f11c29798384f3df9bbd0f94aa339c49e2cf..d07f8186919f0ec9171567e0830391372ecf8a7d 100755 GIT binary patch delta 15320 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 Ol(EET`vS8KT+0U0zezO! diff --git a/uis7885/hardware/omx_il/core/BUILD.gn b/uis7885/hardware/omx_il/core/BUILD.gn index ff0f7ca..c51a601 100644 --- a/uis7885/hardware/omx_il/core/BUILD.gn +++ b/uis7885/hardware/omx_il/core/BUILD.gn @@ -24,3 +24,4 @@ ohos_prebuilt_shared_library("libOMX_Core") { subsystem_name = "${SUBSYSTEM_NAME}" part_name = "${PART_NAME}" } + diff --git a/uis7885/hardware/omx_il/core/lib/libOMX_Core.z.so b/uis7885/hardware/omx_il/core/lib/libOMX_Core.z.so index 2f34ef9a481a5d38aabf4bd93afc438cfa160a61..49b7f92479212fdac98a8797bd512bee2bf727b1 100755 GIT binary patch delta 726 zcmV;{0xA9IVCZ15%mNU{n4X=d&2FAbng7&$}A000000RR9100000yR#7^rUL;6lei|Yf9LrCJq?h<2fqcZiRA5f z8)~4r8~L5&X1PATx?Bjt$*)r0eglMmj(1#azbN$vI)PtBwmjz=|KWUNjPu0ESC|+u zwowKC<}}P!(4i=hcg<9DNhXT=Dt{b4)ivb}TjI_s^06!o*3>Sh$`QYkSVuU+vqa+0 zk?nKRWEURVe+Y1>(vz?=EM$P6J%TMW#rO0Bqb791Boo>M5gY{Q-rI^k&|cgN$MFS% z?AtkOcwZ)Nz5g&Agw{bgDC`*{X4+Y9@K5I31G3AKS`qyZJNAYT!9eI~eSy2K2G_h{2@v5NzIA?l zwT87&A0Eawj4__z{s&&2a&lg*j-TuguQ)Md-K8AQ?UBc8HTTT56|h;GDRsa)RVxTb z$mr-fB#Y$*3i6OoTvg(;@H$lq+U;8Xx9I)!)_&z`)&X-bV^Q&xidjmZQXr8&jA?QH zxk%KEe|_g+U4qZNVJL!d=#+Znso)3^W__ue7q}gG!AuuY zfv`&5Vv&F1JKvYn?v}=8EG>KFS&WuF*%p7yqi@}`l$k6rQAO|gf~8S1mwe%pG93!+ z$b3y`qpbdOfZz!nW^)g^Mv4_Yt^fc405Sw=X`(k>lmG#u2Ebha0DZ#f3bDjz`vL#}000D8 Iv*Ia+24e_arvLx| delta 726 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 YR<;BH00000B2-xdbzO7av)Jd@2Eg$DD*ylh diff --git a/uis7885/hardware/omx_il/libutils/BUILD.gn b/uis7885/hardware/omx_il/libutils/BUILD.gn index 0e7a10f..43277ac 100644 --- a/uis7885/hardware/omx_il/libutils/BUILD.gn +++ b/uis7885/hardware/omx_il/libutils/BUILD.gn @@ -18,9 +18,10 @@ import("//device/soc/sprd/uis7885/hardware/omx_il/sprd_omx.gni") import("//device/soc/sprd/uis7885/soc.gni") ohos_prebuilt_shared_library("libomx_utils") { - source = "lib/libomx_utils.z.so" - install_enable = true - install_images = [chipset_base_dir] - subsystem_name = "${SUBSYSTEM_NAME}" - part_name = "${PART_NAME}" + source = "lib/libomx_utils.z.so" + install_enable = true + install_images = [chipset_base_dir] + subsystem_name = "${SUBSYSTEM_NAME}" + part_name = "${PART_NAME}" } + diff --git a/uis7885/hardware/omx_il/libutils/lib/libomx_utils.z.so b/uis7885/hardware/omx_il/libutils/lib/libomx_utils.z.so index d550488c7473aee7fed028ca9db99bdc41f96f19..f63afdc17cdbeb41c30dbc17392559bac4d7f0db 100755 GIT binary patch delta 804 zcmV+<1Ka$Fr2&Yg0kF&h5WWrGc_F0HVnf|-@DiIPZIclK9JBZW@B;xMlj#Q60UNWy z2SW}DX>MtB0AFTlZfTPt7B!O+78A2p7HTa4Gn2tX9}!Lp000000003100000003CC z@k0j%e*_%(vtn2}L~Kje@22!PQ|<$iXA%kK(q1mg)27;}7M>^Q+|!-pBT0z9-IV&s zn{CHw&k~A!w0TG|$D4vuu|}FEM086B5dp}L^j#pO*=clI?CDCns!vuVwWm#O#do;m zww1MCcY%U{l-|N24P2*;t$2c8`1O?O1N=pje{Xs1TRLgSX;rwI00go*$VC3NHs8LU zXZ@k8>#MV0@3M2B{ISO#Ks@45;#VpA%-DcwmW#TPu~&LyN&PD-!z#$2v}t|+R8AeEnmpUtb=Yfycr)&3GgRoWUjy_} zkeP;U#Oy$IObj;#@q~P~fb8w2hsX#@cz*dc&GPD=9X+_x#!y}u!fJY)pua^*S)W!s zRix6gupi|Zg>qsxaE6jt1f&MYEESb3f3#ZXg=#=!tR{l`gv~6(XheA_>9Zq!i0{b7 zH>e4N{+J3^y0#ow`$4N3&{0mM{G}ivhVZ+kN#3-V2@}MtY7D~ulB@<|6URP~KtBEl z%ID9g$14}4I3Wz3MiW_*K;!*02W8zbdeOt}6%n4XNKix{Nywzv7NnN)IdlIsf7tzp z0_V3f4KQ8L)Gr9Yn!}=@R5CVCJYZ{i0v_B#^M=m!3P84OdsFK|5bYh}6R3MD@D4jf zO6oGq);XkPE6|c5L0`CH+PJYZ}@a1em0%pO9i`xEB4yf^*9%!&D*vF2 z2HdI&#O&qg&}Buz*;2*~IQfbfIje(!+)SUfX?7=KvcVsaDY;w~8zY&%dCfIu!kpv_ i`r&*9@qhq^XOEr^nwo=SDgZTa=xAw-Qvb88OWX#0LxflW delta 804 zcmV+<1Ka$Fr2&Yg0kF&h5TzzA%{fh|9PtkIjACd3gp&~h9JBZW@B;xGlj#Q60U@)& z2SW}DW@&C|0AFctX>^l678jEe7BRC{7HTa4I+MXe9}!s!000000003100000003dL z@k0j%e*?6bnl)Mee!lH$9ML9X?r6nJpmN&+~s&6%yojR#`U8sD>{{X++s}lxvtfeoU&TN~Qe? z=H8fB;#W78Y;L+FUmNpAr*)lJ_Ln_VtX6#kA-7m&%G^L;^9 z>)EpSJ2JMhJA!i$=4HNIcG|N0)>*||!S05?A&xgA?fO0LH=V?|l)A2NoQ0f32M?z% zFU%e%Me)kj|B%EMPVh8ST_dQ}p+Tfma9>ukoFv}&BK3J{Ihk|sg<@eh@9XVF*YcrM1q$XRww%heRDQC5RF9)tM45}Z_$&j% z56oWjlI#?N{%SRbZOh;5-b!lJ(13;k#_TSLk%(h`OMDFbj_+@a6|q`x=@%-|`iee8 z{q(P~gI$NNtRUFUeQrT$3!=O4vk}@Me{!$UvIhpX*87GvVt*Aqxpu-9PSo`~lPr9~ zl=v-~9t3(1N=$LyhL;GDl4b5yU{}taEnmRav zoeybe&cE<#O5Hrb+d5xb*EuR4m}v5(ctqX{Si!y{_87sinLi@qwptO$Q8>%&f4WMq z53}x;ngX^~ppd9_jHewo^EuGbL@Em#4O4oRsBY#ja#B@2uMqq3fNw0LXKtWu$Sw2K)wyjOIF zFjOflTxs~XZt}>A^D-zg5sZc&IqC#Mme`gyaZ(l5v8{;ahjiP#%sa~fk7>ErTexHd i$w^{^E60?UytyZF=gmRZ001Ig=iDuVH?Xs;OWX#_!hvJ} -- Gitee