From 7a2d075d1dfd0ec00ad4f900b0c5fbea1d0b2425 Mon Sep 17 00:00:00 2001 From: Jinkun Jang Date: Sat, 16 Mar 2013 21:25:53 +0900 Subject: [PATCH 02/15] sync with master Change-Id: I729ca3fa73bd16089fd7a64f1d9b687615189744 --- AUTHORS | 3 + COPYING | 18 +++ ChangeLog | 0 INSTALL | 291 +++++++++++++++++++++++++++++++++++++++ Makefile.am | 2 + NEWS | 0 README | 0 autogen.sh | 12 ++ configure.ac | 28 ++++ lib/libtbm_exynos4412.so | 1 + lib/libtbm_exynos4412.so.0 | 1 + lib/libtbm_exynos4412.so.0.0.0 | Bin 0 -> 39838 bytes packaging/libtbm-exynos4412.spec | 37 +++++ 13 files changed, 393 insertions(+) create mode 100644 AUTHORS create mode 100644 COPYING create mode 100644 ChangeLog create mode 100644 INSTALL create mode 100644 Makefile.am create mode 100644 NEWS create mode 100644 README create mode 100755 autogen.sh create mode 100644 configure.ac create mode 120000 lib/libtbm_exynos4412.so create mode 120000 lib/libtbm_exynos4412.so.0 create mode 100755 lib/libtbm_exynos4412.so.0.0.0 create mode 100644 packaging/libtbm-exynos4412.spec diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..edf3b5c --- /dev/null +++ b/AUTHORS @@ -0,0 +1,3 @@ +SooChan Lim +SangJin Lee +Boram Park diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..bf8f898 --- /dev/null +++ b/COPYING @@ -0,0 +1,18 @@ +Copyright (C) 2010 - 2011 Samsung Electronics co., Ltd. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is fur- +nished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT- +NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +XFREE86 PROJECT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CON- +NECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..e69de29 diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..8b82ade --- /dev/null +++ b/INSTALL @@ -0,0 +1,291 @@ +Installation Instructions +************************* + +Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, +2006, 2007, 2008 Free Software Foundation, Inc. + + This file is free documentation; the Free Software Foundation gives +unlimited permission to copy, distribute and modify it. + +Basic Installation +================== + + Briefly, the shell commands `./configure; make; make install' should +configure, build, and install this package. The following +more-detailed instructions are generic; see the `README' file for +instructions specific to this package. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, and a +file `config.log' containing compiler output (useful mainly for +debugging `configure'). + + It can also use an optional file (typically called `config.cache' +and enabled with `--cache-file=config.cache' or simply `-C') that saves +the results of its tests to speed up reconfiguring. Caching is +disabled by default to prevent problems with accidental use of stale +cache files. + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If you are using the cache, and at +some point `config.cache' contains results you don't want to keep, you +may remove or edit it. + + The file `configure.ac' (or `configure.in') is used to create +`configure' by a program called `autoconf'. You need `configure.ac' if +you want to change it or regenerate `configure' using a newer version +of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. + + Running `configure' might take a while. While running, it prints + some messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package. + + 4. Type `make install' to install the programs and any data files and + documentation. + + 5. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + + 6. Often, you can also type `make uninstall' to remove the installed + files again. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. Run `./configure --help' +for details on some of the pertinent environment variables. + + You can give `configure' initial values for configuration parameters +by setting variables in the command line or in the environment. Here +is an example: + + ./configure CC=c99 CFLAGS=-g LIBS=-lposix + + *Note Defining Variables::, for more details. + +Compiling For Multiple Architectures +==================================== + + You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you can use GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + With a non-GNU `make', it is safer to compile the package for one +architecture at a time in the source code directory. After you have +installed the package for one architecture, use `make distclean' before +reconfiguring for another architecture. + + On MacOS X 10.5 and later systems, you can create libraries and +executables that work on multiple system types--known as "fat" or +"universal" binaries--by specifying multiple `-arch' options to the +compiler but only a single `-arch' option to the preprocessor. Like +this: + + ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ + CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ + CPP="gcc -E" CXXCPP="g++ -E" + + This is not guaranteed to produce working output in all cases, you +may have to build one architecture at a time and combine the results +using the `lipo' tool if you have problems. + +Installation Names +================== + + By default, `make install' installs the package's commands under +`/usr/local/bin', include files under `/usr/local/include', etc. You +can specify an installation prefix other than `/usr/local' by giving +`configure' the option `--prefix=PREFIX'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +pass the option `--exec-prefix=PREFIX' to `configure', the package uses +PREFIX as the prefix for installing programs and libraries. +Documentation and other data files still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=DIR' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + + Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Particular systems +================== + + On HP-UX, the default C compiler is not ANSI C compatible. If GNU +CC is not installed, it is recommended to use the following options in +order to use an ANSI C compiler: + + ./configure CC="cc -Ae" + +and if that doesn't work, install pre-built binaries of GCC for HP-UX. + + On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot +parse its `' header file. The option `-nodtk' can be used as +a workaround. If GNU CC is not installed, it is therefore recommended +to try + + ./configure CC="cc" + +and if that doesn't work, try + + ./configure CC="cc -nodtk" + +Specifying the System Type +========================== + + There may be some features `configure' cannot figure out +automatically, but needs to determine by the type of machine the package +will run on. Usually, assuming the package is built to be run on the +_same_ architectures, `configure' can figure that out, but if it prints +a message saying it cannot guess the machine type, give it the +`--build=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name which has the form: + + CPU-COMPANY-SYSTEM + +where SYSTEM can have one of these forms: + + OS KERNEL-OS + + See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the machine type. + + If you are _building_ compiler tools for cross-compiling, you should +use the option `--target=TYPE' to select the type of system they will +produce code for. + + If you want to _use_ a cross compiler, that generates code for a +platform different from the build platform, you should specify the +"host" platform (i.e., that on which the generated programs will +eventually be run) with `--host=TYPE'. + +Sharing Defaults +================ + + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Defining Variables +================== + + Variables not defined in a site shell script can be set in the +environment passed to `configure'. However, some packages may run +configure again during the build, and the customized values of these +variables may be lost. In order to avoid this problem, you should set +them in the `configure' command line, using `VAR=value'. For example: + + ./configure CC=/usr/local2/bin/gcc + +causes the specified `gcc' to be used as the C compiler (unless it is +overridden in the site shell script). + +Unfortunately, this technique does not work for `CONFIG_SHELL' due to +an Autoconf bug. Until the bug is fixed you can use this workaround: + + CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash + +`configure' Invocation +====================== + + `configure' recognizes the following options to control how it +operates. + +`--help' +`-h' + Print a summary of all of the options to `configure', and exit. + +`--help=short' +`--help=recursive' + Print a summary of the options unique to this package's + `configure', and exit. The `short' variant lists options used + only in the top level, while the `recursive' variant lists options + also present in any nested packages. + +`--version' +`-V' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`--cache-file=FILE' + Enable the cache: use and save the results of the tests in FILE, + traditionally `config.cache'. FILE defaults to `/dev/null' to + disable caching. + +`--config-cache' +`-C' + Alias for `--cache-file=config.cache'. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`--prefix=DIR' + Use DIR as the installation prefix. *Note Installation Names:: + for more details, including other options available for fine-tuning + the installation locations. + +`--no-create' +`-n' + Run the configure checks, but stop before creating any output + files. + +`configure' also accepts some other, not widely useful, options. Run +`configure --help' for more details. + diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..93659bd --- /dev/null +++ b/Makefile.am @@ -0,0 +1,2 @@ +tbm_libdir = ${bufmgr_dir} +tbm_lib_DATA = $(top_srcdir)/lib/* diff --git a/NEWS b/NEWS new file mode 100644 index 0000000..e69de29 diff --git a/README b/README new file mode 100644 index 0000000..e69de29 diff --git a/autogen.sh b/autogen.sh new file mode 100755 index 0000000..218197d --- /dev/null +++ b/autogen.sh @@ -0,0 +1,12 @@ +#! /bin/sh + +srcdir=`dirname $0` +test -z "$srcdir" && srcdir=. + +ORIGDIR=`pwd` +cd $srcdir + +autoreconf -v --install || exit 1 +cd $ORIGDIR || exit $? + +#$srcdir/configure --enable-maintainer-mode "$@" diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..fb2632e --- /dev/null +++ b/configure.ac @@ -0,0 +1,28 @@ +# -*- Autoconf -*- +# Process this file with autoconf to produce a configure script. + +AC_PREREQ(2.61) +AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS) + +# Checks for programs. +AC_PROG_INSTALL +AC_PROG_MAKE_SET + +AC_CONFIG_SRCDIR([Makefile.am]) +AM_CONFIG_HEADER([config.h]) +AC_CONFIG_AUX_DIR(.) + +AM_INIT_AUTOMAKE([dist-bzip2]) + +AM_MAINTAINER_MODE + +# Checks for programs. +AC_DISABLE_STATIC +AC_PROG_LIBTOOL +AC_PROG_CC + +bufmgr_dir=${libdir} +AC_SUBST(bufmgr_dir) + +AC_CONFIG_FILES([Makefile]) +AC_OUTPUT diff --git a/lib/libtbm_exynos4412.so b/lib/libtbm_exynos4412.so new file mode 120000 index 0000000..caff059 --- /dev/null +++ b/lib/libtbm_exynos4412.so @@ -0,0 +1 @@ +libtbm_exynos4412.so.0.0.0 \ No newline at end of file diff --git a/lib/libtbm_exynos4412.so.0 b/lib/libtbm_exynos4412.so.0 new file mode 120000 index 0000000..caff059 --- /dev/null +++ b/lib/libtbm_exynos4412.so.0 @@ -0,0 +1 @@ +libtbm_exynos4412.so.0.0.0 \ No newline at end of file diff --git a/lib/libtbm_exynos4412.so.0.0.0 b/lib/libtbm_exynos4412.so.0.0.0 new file mode 100755 index 0000000000000000000000000000000000000000..74b94e1a96de03797f01df2fd6f21928d90372d5 GIT binary patch literal 39838 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 GHvb3vf3^ky literal 0 HcmV?d00001 diff --git a/packaging/libtbm-exynos4412.spec b/packaging/libtbm-exynos4412.spec new file mode 100644 index 0000000..566c7e6 --- /dev/null +++ b/packaging/libtbm-exynos4412.spec @@ -0,0 +1,37 @@ +Name: libtbm-exynos4412 +Version: 1.0.2 +Release: 2 +License: MIT +Summary: Tizen Buffer Manager - exynos4412 backend +Group: System/Libraries +ExcludeArch: i586 +Source0: %{name}-%{version}.tar.gz + +%description +descriptionion: ${summary} + +%prep +%setup -q + +%build + +autoreconf -vfi +./configure --prefix=%{_prefix} --libdir=%{_libdir}/bufmgr + +make %{?jobs:-j%jobs} + +%install +%make_install + + +%post +if [ -f %{_libdir}/bufmgr/libtbm_default.so ]; then + rm -rf %{_libdir}/bufmgr/libtbm_default.so +fi +ln -s libtbm_exynos4412.so %{_libdir}/bufmgr/libtbm_default.so + +%postun -p /sbin/ldconfig + +%files +%{_libdir}/bufmgr/libtbm_*.so* + -- 2.7.4 From c9c45addd85f1c3442e3b854246ca8136f7b4b24 Mon Sep 17 00:00:00 2001 From: SooChan Lim Date: Mon, 17 Jun 2013 14:30:38 +0900 Subject: [PATCH 03/15] version up Change-Id: Icb0192f5c2f00d9eb8e96f9deba8dd443d5991cd --- lib/libtbm_exynos4412.so.0.0.0 | Bin 39838 -> 15088 bytes packaging/libtbm-exynos4412.spec | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/libtbm_exynos4412.so.0.0.0 b/lib/libtbm_exynos4412.so.0.0.0 index 74b94e1a96de03797f01df2fd6f21928d90372d5..edfb7d44b11c0326f0326a28339e74cfcb6974d4 100755 GIT binary patch literal 15088 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 YpfgfIdgM03G^YFrplg#Wz%t$c0vGQcvH$=8 literal 39838 zcmcJ23tUxI+V|dPAK)m6sHB*v2SFu8I4GGJ8aGdhsD!BKSO?_dp%93RX{nK8WtVZZ zw9Il%lz{V9>^Bv7}cY8m(z6 ztO6f{(+pkGfWVbDMus2)4VsWIaJzv=XhMc#2*D;D`V-cwPCAY1&~pLVtul2(&|Q*8m`C*T5?Vh!7hx)RtDsa3m;~<*;t# z*WK>42F-nUU#Fga;F2^qX_Q5s{a*|pq5U@HWX6oYpZ&w9_pf>N_@ZG=ZGU_H*i8k| zFaGR&_{#j$t!v&`^{dl=I~RW6J@-Gp_}oLQk*&wIkrl#an5{B%w}J<1f0Rk_OZ(3a zfK@va&9?Yi0R8y@xKQsxP+ol(DBAZW8%$f?X@kjc%dWWr?+Tz_W@8}#(*g7=0_a-< z=*I%!83Fw31Kc=iqnkK>&ULddWG!QGj_x zXy-fM0UTk29T+I=^wt3WD!^x-lKqhKjt1m!fL!G-1K}^t0rV?DzZ}l}J@5myFwvh& z=(M;7q9@)A{4vPqm_Yg80k-R-`FzV)R8{(F>xydXd_K)rR$f^SWbvvZCW|V{Zzq=`fD~f7sOKUZ-)%og{t?(_YFI%y^##dcazEUeLs;H9>HwfXsZ zzInO%BF>tza8~9FZAE?MilS<*xT307*lJEyNqt3WR#9D%R#CnTrb?`>N=#-NDlk2f z>E*@6zFLb?%+zGfS6aesKHsw1TG^uZG+S3t*bq#cF(R`hU+JpVl~uJVDajKl(4$?G zGbi<{ z3~dDZ4lm|<-lP*=FlIG8-l4^tbk5J5gR;!{DEyr;{hsj$X54JXpPBJVGiLuIUz-_! zWyT$5{Jj}#=-1?9|7ZL%@Rwi`Jir(e?3;`+*&bpXuW5%FkHXr4F$V517BOpc3XP0 zExpl}Zm^|S+0xavwBMF4w51Dd>0DcSrY)UjOHZ+-J+^ebE$z0YqipF2TiRtyYe+|W z9{)Vj{rKmG=jY81&jT%(p*|hanWP`;>^!~kQM5J8Hs$${oRB$dvWl9 z&NUWxwm*3;NKhVZ_{r=k-k)U8YtvkxMmZkX6}5Qw=_1FDPos+jm!@YU$vbQ=C8pjvE)sfQhR>u@*aj`W7i-)c&t@(zuz))w(f4peXk`NoFl>cY^&SkoC40*1?N4G`^T0@Q`XMbD4VQj!STBm z?X?KBS^7<#ou4o7?EJ8_vopD>v-63v&dwthot+cvIy;Bo(AoLNn$FJi{?5+pz>~A8 zv$F#2djO#X=>~+Tm7SfDh?{Tj?A(b^{d|yjY|e&8w0nGfQ)m17R<>+PQ-eQ#-zez) zX#uUKA8|HTzcLcqje!1nts{hXQ4_WM|K8y`Ff99>4(EYgQGdtpJAe%@t+Noe{Iq4@ zY&|A2`$R|nf#!l;Q4zC0jne#4lS;C*t)1;&)cL)ZzTgN0M~dJG>Bf;FtP-_D)`4}Q z{vSa9ClOvoID~MbBlSSU^WSH!Z*+Ry`#Rg*t!d?s#)wxaxi2IqG%xKiv}IX+W*28^ ze$S+@vfk;?4s^B$x4ONjVb_HZV?2dyC6i^eJ%3kY@ZNr2?}fhUT3kkl>$<}iTzU|+ zcDIJlU6&Q{V$k-G#7g%C&HDR`OYMO+Wryn?u`2E4~1dr(nIbSBChpmDil$TG)*0=16dfM;UQtmgl zoGN#2dAdAkiykArA@|FVTQvXE^q$UOufI@>KYC<@>FwiSyE@ozIAoP%tx8F|P?Ml- zm6l^)n)s#1`$o$k)NL^8R$%j_Rc7tosN1u`llp-p)mD4O5dn@T*oRPm_6OxltI!5n z2+AJH78yAk8^bvo#$N|(d~=r8C~s=&h-h}~ZR&_Tpv5@OhZ%!m6V0F5;T#6PZ)R+4 z8CvLiEx0Yhc&8)cK;)6ZZI1q7M~3YSdL*+g#0Yv|U`$kOXZwY-4KM0$7c4pKcci$D zb1j3BC#K02!yG|dK5shTGRm~ij#I;**lwNOqPN_eLw z!j$nw(_e+p41!H^g-!YkkJxHj?as6D-j{{Xgo48(I54N6hboRbaQv#p@lcn&_6OJs zbH@y)_whMf8vA?K!dhC}_ZTzRoRu?2$nE{kNA>M@J|V2{d8ZMv*Lxu}9a9tfQ`Fj= z4(IH{7b0|6Z8p=44|iy3(S^b2WtC?eVDYrJUp9OQZ+6Cb{CVDp*mp1^bhhW8C8e=J zcgJCtI)26pPOa^ehR}y6`9pTxUN{h~685lB82OqOtH%y(bM{|flwK6|T4tNmxTer~ zWFRc;0_1>3js7dWn7zV2Ez0O{zSG%$`V425^d>z%tLcW>XT*4S{7l+~g)#o@y_hcw z{rZ-&S&q#fZ+X<=WDWk^+5X9yVsNs5xL$L6-Azl)e6OBaUarR+?Qk|9?T9{bv?Hov ziICy(?)K{sEtuzc@XMj^bc8h@zMQ_IZF{F961IEkjN3babI=|AAGy@8PrS77uPsiL zQg)`uZ+IL1mwNj@FtV_-edif1{`KSOW?37d7XPt&)aIW7J8i-w_Xx)J#rJf-ivHofmq z_*B$u*=^3g&LcyGH)Xdu`i4Bb@9PHNVR)SZZf$(&k$&gn!#?bYZbrV)DgMP?`1v1P zdn01u=Z$sVd8b?J-|2|o`OYcVjL!Cxr?vR9BUAl)T<9Yq4@Y<>7XGgArlO(VgB{VE z4|YWD>}-GjduPl~y>4Kfjac!WUhFlz`{57K@P-}8?fK6|vkN*5kMu;3cT`ipfZ2wt zPQQ;8l^*jx=I43Y8CeG8)cIk{X3V@FbJjkXWo!*Ue=;1txEZ!?hBuIg3|>gDnvAlsCOcK&eWfJ^o--Prv;6>S zsAXi0oSlie{N$u&&gE=5@a}DiviwVO4G!Q6J3YnwP)oR_)!9>nOfSpGdJ|rDQh3?C zuig^cNi8m%@_5&_L_g3qZ_u|mf79P0Ztdw`LuXY#zdCCJRwK>(8vJ|q8NYG-I;7dL zy|ewnQ#<{}!=3F%5hr`cp?05~(&Ep5uoL#&bV`f;MIr0G;S^U}eP*BNh&#|H`%poj z+4n^K1%0U~%lNvXR*pG)PMvKzv|0LnfvE#^f^Vm9Zd{r(#H+;yVg3sDhCk5%0cTRe zu@fgl+Tvs5jUn0s%qwic%2V^c`q@qTmb_W>vx}niuQ%VcD~i(PdS&IQe_`$)(-i)| zho{10--34W-Uxca?fuKOBu`WLLl;`^^@l%jt|i@E4R}wbT}U2~j&;EFS-YYf50yme zG0v|y*J)ejs51A|KU?5`&Hc`M!Z;U9NJoFT>hOgy-Q&;bi2M@0!qeGaeJbJ){T}&O z;p;8^&PRqF0sj$5O|wxRdv5rVsorF7@Se{0p`F2xgzUgL(sV=N_`-N^A2BOrfDd;j z=$o5Pre&wm(qBJXquqaXc2U8ug1nBgZq5?==4(6RBdYzz{Zq3Yn{&NRtj#!A-FNb@ zExfl8?SImfopxbgjE*)}Qj$y?(H_zdYAl<)(h`gQ6^~xHQ>+!-vo$~N^uB(yR<7r- zw>bBRo;VzwYXs+Dv8o{FDclh#{S!|{p!`?6l|RTV-*^bED#irEn+sccEZMiT{AN>E zU!=WPVZ5(H*bbW)BB=46Yq>*!*(ZX$bFsP|BCNkaSU*fyzeHF+sp*<-)_21COD;Me z34-+tP3s2>-=8kEZ@Ae0?zvQ~#~fepf$gu#-iNt)XTj9$+>WstEWPC>zp**Z>wsl1 zw!e4oXbV@&BmEcKpF5X?I&ZS-%-jnl|4fY<>}U z;)?UvEknRL44ies=9ic@-vgWDUP0W=UTm*B*B|9S(yjafHk-56)4UhkS6OmzZ}H&8 z!2#G;t(j@-=(RmeQ)cgmU4e1^loeo*?zITqBZ29o6)ZZXMYS288F+0UKu&d_Hn z^>mnz)8%99p7>h6G0=Q`eqLF$0?A(TlDNF0YFSZ*@5a*AVCjXYbX9c~o~`#vD=sSb zm-@;o>TCH-%&wT7(o?tc6+bMq>(zw4p7ISqNvU{E5l|M4;K%!eir(wUhx)zMi*>iM z^-^!~azp!xeD*(~OP8smORjU{jYn0@RJXUNyuw{q#^UxCRW%7Lvb7@+B#vI>_g2i*^&F7l~U)GF_1=su#e%k0-k>>~MH@encR)U&J zp3$|}xu?3vj;RD>%3cXsPdXVE>}b^cPf=oF^yq(lE$o7v@>b*ZW@t)z}_R!ErQN7&J32WBm= zEUS`M{1JKC^p>;Zg`%j^vMM*}uA*>@&-%;@LP; zN3TjyO~)3ZQp!7jMBPl8^|dwCbu~Z2w{9+~sVuKtF1;&$!JJ$--K(~~n&TS!hdZyd zuD+(yoi!&tV}bWF+2%i9kCGKd7)<^b{yo=Ty1S%wWqC23_P{Jpe2yRaO0r<$@7x)e@uS5?;u#eZ044;}s=mjB=N?cT=*XoH?2{ci!9?9EbA&FUn)gUrp;8 zVDQGPXhm&(<#Mg!^Um8Ef9q^0Y(c!&Xoxb~Ma9MS4&}&S}OW z4b^8lZ}V-4XozkF{M)dGx;EmChLen+>EBRyfpk~H*?$oZYRLT>@vmGB3GJP?;kB_g zAXL*n78cgfztLP;I%Bi&yeqx zoABKlqMrZ1f+{00 zK8m_;9F2F@2%8bMB5X%^6yZsPJqXVrJcn=qfi3hs^6riIcSS ziNK1_Kr}rb$)GDHq-()_L(*M(A4gwfpfggxL?2>A=|lBP9m9+fjs%_UM*GRu#CL>f z7!QqYUipY6y$G!Fp!T{lz6?Zu(_wzgag_=36OTDaV+CsaoP(mT1J*28e+><){{=tM zK~e$r;f|vcoI!u{;MZ`541rr2x@$j}3`fWYG&Ya}1v2<0feiW3 zk=*X;uh&45>o)kUD?(oaf+JRQk->F|{;&X@t|JiY8f=0tS2pce?fpLt_#$8j9H^8uCb`CYn%zDx)!j~3HmLff@!YnDA}V= z7hsla5_-2QS?5C35$koWrR0e^ySpRy8rKVyJXt?1z?rVa6m_+JpJ2{){f44u>Ua$U z<^tFA1ZSDxQrF7_vrVwjb$|uUHo+3t8>HswqeWi7D~USKHFd6V9V0bYe@~QKt@ZhW zs4sc=U@@ABEuk*DZ~uX9KQ!w-xSJpyaKMiSNWM- z3_U`JioDao9D1o>I04?!5o8F-WUGheI95{qMEr!!b)+DIWA?Ac*IZ%qOwg%?41r3n zu=$Q%7ViSZ>)Odm6m;B)u^of%b;Mr<1#a+qZl>nciAZ93wFliH)0tOy5l0z*{ya-M|dQ!cprtjeaz+cG5(x-}En`)WCWsucnm;)=o~*`lWRUER*RYfYlsX`01B1 z10n_$z*C+5u6YsZNFRxj?;xp1W+0CvatEnU>owpm(f@+q!7NR4Y(Wc!=f4j`u#-bc z-_1begfICQTaMKYUn<>53q4Eddg<)W(5KOe;iW9j5$g)AMk(PH25^qpu+VMftdA8? zMChxe-FmrzB16ArzMtj_C@S!9zhvoul+cvWPs#b_n<8Io=$C}vl2BS` zJE4OT$_mw4!k;8GQyU_BCZ!BcM3rGI8fb{<&9MqQn3fVhp!Wgx5}mbHIW9w5=3wmw zcChG#!Op7$i2zNZGAtBWItWc7Gq4Cqudqn8PZvp*ewUz=nKtU8BkNN@MCrlK*AWj5 z3xD_Dh(jw__a=@2=y{)L`}=smxGU_=od>3jG{e!cQ>CGM**W>=FdA=zMpe zYR<@f{2Gx&g+xw=i-u@}-T>h2|NMGpxEvW=k=L^1NZQgJc>^*W&?3J<<>MneQOzbT z@*vux1HJt_a69|I@gj3R1a2+zBZ$-^?*OwFSqm;l-nZCnj;jN>I-3#WYB8@feUIehvU+%(Ky>llC-`FZ4~S1R zgpy))&Ra2D`*3R(w;Tx&IZ`AbIhu{0Xi%w@2xFpXBacBZdV%mZ+B(_b+;sx**h`W4 zBjo5oMg?x};(^oJpv-0b3SF-=xS$;b{m12@^1)z?0zzMH{2e^wtAWb{aXcP9XZd(fPexyl&-AmDYRND1*krvcE{8$*y35}r~LUL&62r`Y(#v`{;ZY!g_!L!j*>+m%KlYZh#Lg?&Mf zC$e%nc3X(m8f_(3Ymt~Mkxrt4^n(u3I36_2R|xYV^De}rmsOF*x$ZWggt3W-u{Xfj zWA?$j^tT=CtiJ1Cas z1MMW)-f@_9>KKVS39eb>(!vcyNku3@uay0OHJFLJ|LZ{bFQi2+Ds|T4ZlFXhLP19@ z9<^#wqq7!Ifi7$r&Zh@x3B6jkm+PS|O-oXQu;gGZoW&$RLLHtJ{ei_dBD@57_adH1 zuYQ(J{RJ=+#jx`%d&jo`Cl%E!*YxMO_;qY46zV;KJW%gBsF%W~y#+9zN$4+{+7!60 zmR)4(!#qNtK3X`-OsZq+oRTd|Wv1Y%0=wB{#KI=0M9XFZB?|Qdk3tVvHu+Mt?9HHy zmi-7aJXGS0qd!ej-kP0~23y38SLM>Vq| zH0=}cPeLqIT_#iwN9Px+W&#gYKeJRV6RKu_E>x|Cj6&*hv*T4Hg{rrMDE#JOBqZAl zpsgZXwc~Te#t~Jpy=k$10NQ4$;a;4AT097U;ms?Mo@3Lflf`ZU3RCC5X` z&?(jI9Md_5{!=;vEnAI8QXKH#L@ccPPw5Ci#fdWh>7c9L3|LtEDEMG)Ogm+a z8|dR^Lf-WV2Uv+u94o;({wBb@yYrMHF@6btxU8Gn43?|b0&;9ANWB~JSWIYFZ9^i+ za6`5*;`;!xe1NTWVdoj(5zWCHc3h%)2cncHGX1CHKUg3~yK2R_k&HrC3TPg(HTP_g zM};^sB(i#_tAsu)IHeE7!>*aEW~yT!lH*SSH;U!?flU1h&=r78(=7zYMl$C+ zj**$B%LZB4cp3SGg*SmFmP(5qorvi(};wj;rIr(%1|V%q`QDzfd+rztirHiWc4TWrTc+f24KdWmBD zK(T#gv2jQA93koi#%$DE)G3^FLJ z5wKM7FgTB~6kV;)#9GF_reJ|$D2mp?sa5h$4CneAI`96e?N+Q_--N*1kj@lS!y8<- zoChlNF^YbJUN;&Ob=EV?`4%&(Ma9pN3AMQowTW*7a|a5LYmXzmzvg%&7905}B#OEJ zVJ1e>C@!pVmX~7b}!ULEOHhYpDAT0WngC<=Mx*W>)h@pH3 zV9`NZ!M~YWKkv8#Nnw}IKooZQ9tp{oI27Y1*?#M|Ua|GZI3w7`atajE3c=PywqH8# zP;65bTb{+X5^N{Q_AAFTimgnsts|ST=x@O0!fFMNwatc&jH!b8J>@dlcINi|r`b3dpwJ@q5MgH^p|wVml4CYO-x~ ze5BYq726O@YSLn(Pv2+5e#Hv=ra_j7R>}NDFKILCgz_ zfReR;MU3+egvHX}RWZ)L23S~+`Cz>dXuW!mMq%yA|6L7TaTBJ4UvD>Q3k- zq&=tD4qI%8z}7}Khhw~AJE7RxEw=B$=3@7JQ_oXueL2@qw^2w)n@7WfZnFJJ4dY#R ze3Qu~@3v;N!RjHuL=|BT2LGDtVVLqm}%NC$|CQ%DG!HE0U#-bV@Kqc_DEO2$x=5kklq zrt7l?5#KLHn>8p2C4`Sb0*?g2=c07U7cmI(Q!#fB7}8DLK$A`AG|1VF78#E`(U`+7 zxkMiu#zL@{nzDxwmc>S0qK$>rp@Vc$7op;%T{5ZSFiWbaX>_7~b(pjkg}6gggy`Wx zHWQA(aH);77=t7uHNcRh?1V>MiO`p3@1l=Nv5AT8E`hC;7ECE|T~ZuqzR>_pTM-;% z%7EzzjwLv2P)e8sm5C447YGrT0c*=MZn&O2C=axP(8Z#fxWWOMFN;S+E6RRl;Y5ShO!;{e}(tM2qVru z0<0(DL$Rdt%HoRpl2XkMBrPkitCbjhl$eCmA(Dz}R;;|DVnQ80E3BM=PZ#S~O;}!8 z&$BX;#8(r&%c)&$iZM$`Dym&EVR>m~X-#=?_YzSKz8me1lVAO4;;YskU!^7%qucP< z4&+SqYp4&>54j&a`tV$ecPk*VxxI=s#9mu07)WkxL*X9#TaG48{e!h1J6C=L7K(g8=N|Anz4kk zAHJmkh?XD{AHIdelR>G|jERZytmY!JY!WON1j{DD@-MO!llHWr{X@{67PMnQsm9N4 zb4<{aM#iK~^CZU(pGzIbnF?;c70L*u+nlJgNNuJ)Ox!aT4!Q{3znr4pMlH${h#j{o z(ib#g51bOa!xH<2RaCdU%sI&vu+0*B#u94BDWTgep=T_icD`(5*IJi*(1e(g?wB}F zj8Ja1()_|&rTHd@()_|&RryU0RY>o+uDk`t8|w}w504u^DrtPICm}w@U=haCx7DHj z{-HrM()6)^XaypTtj2LI)%cC`F*M7>X`?(bBgc-LBec6omD9%X`2gdcVmm`V>c;*7cF;KZ@GgVr_{b^xx;$P z9qfGBc3XUF3BAh_YR4&|-&#WNvV_|CvW@fjcqj=TmNw1!bWI{!AH6lv7?^5oH4=^E zYuuLuh2S;@x{Z~o7_H*7lBUl#erjM`y09iO#<)3q+UUzh8{u@Di)(3`^$wcmBE1o5 zn&u+C)wmt~xdUaaDu^8)E4K{^sQAPJ6|^|t+#|;w1nDm zO6Yn^=tWDYoiE$?^|}kwV5E7|uAY$OiJ1~Re&YBENfVNiE0bm=aVR$Wq>hXoVVqgx zHXbw*M;K?VZjDH*JG1M=eK4Mft zOiT_m*(NkRBQ)G5G(00T?4G8EFBxp=gKOvlFA4sGYwUQ|?iE;~4=ebRU^^(-UJ`5v zMfR6O5q~!1K+TCkRN|;rv1gd22ToP&C`AeCGe#Fq83lPsOECq!YYBbU5^BdO0q=RY`E7^g^K^R zCc#GIS~V9oIZO`$PSv}~nj#vlDWVBaS)?89e5%TV&v@Ul*;tZl3}bhGo+TK6p(LbP zi@#7pK$`8nUv&9HYcY-@&Af*M|9%H8a7YXb`-PlCYw7)eaHLKXO?JJ~=nG5p9hT-_ zSeoy!Cb!;ks@6Lk1r&R^SYJBZ*)eRcSdEDsl_KC_asF;>4Yh9#j{joK_Jb!RPP-j zUh*7)$VzvDCuV%|RSC(N#-7_!JxNK?6Qd`N^CwNqOg7%qDCE_398F%=IkLPegugC? zzq*bBUl#%;{w;iq(RdsA?iFj7uSNcQg%wnqdA=6w7>R$~=^BV(Jt=**Cu?c_?TDj)U!b@O9yoDu1@}{@z*=+i}Ww|7=y`_tu059PUM+;cl_2IW9EcEi^yw z#IyoDYxkiu)yQzY#5u5cV>R9Sm}#s=tCS|Ic6J;aVXyNLM87YLwO17Rz9@39FxLB` z$X^E3W^z;IrciJ^U(XEtu;VoK3R-xrhJuZ+ZNc?&fu zdMwsiaTwvJ8DVt(Gi&Hf+YC0(88L}$Gw4iMWtg^Zu|~3o*KW3OYBlh%HRAotkvbO{ z?-t{2yBL%27Nb+U7`5&eqm~`NQ%uawVn$PG`oT^yqcsb?RhkW|(&X7>WY3mETb}A7 zk6D_0VvV!^cQ_O(ddBA*YDMZ1tBlXBGXC#yiH>1-q9XS9U=K|v3S1K&)=z!{hMRoe z;`1!kjPSVhP5Ql#dyKoC8-wl&zBA+w*M>eB;ZwkaN7CZrhfi-Jl^z}e-a8$47#o}! z;coG<7#a9U5ndr`nc=Ps!Lq@jxkEkE(or^AZMKyO$qt(fQRzLJzt}!`ldP@hgSr@aQEYJR0)vacng1 za^4wqNAQM_jPOEm#7j2uB}1X$i%SnLfUbdN0iV)|Z%EewMulMt%PdyC#rsI;gqlDW z=o=k(8FxDG2-*;A>BU!Y4T7hqUTKi+M&QL4O%s##eVRNc|LDW`Ze=y zaw*QXS=&@qZsIr1j$C#Li!wFyBw($~e6)!D-Z)|SM!R0QIq7rL^L&{ZqRzrTJkqvH zB=#s~&YPP*>l&VJTv1wCrIpv_RN<^*#X}EJQu6qyP?%Ee_wJ^#x#Jk7zo{OrP^W6j z0^mLA896gFUsXkkud1x97N1wK^`+ioV?1;hha+@ph6;88-K6l80C9W*GSyd#D)*Eo zjta0jKvi|E4@V`Vfw2EoTUk_5kF%TM2P=wdZY-^lPe)aOtg~!4@BEoQ_&O^iH>=SN z%d0A9VUxBn2CBWHRGnGi!@p7Xax-x+WZMA>;*<&VNiC)M%4(`su+#OvTaU`t7OgDp z(J8tNk(WOA8Z@HMyI^i+{;YX(c~G*@6IESNg{SUjdv%#_*4%}{d^SQ(vN@VqCKbmy z3vJnoU8766ga_6t>%lFo4kN59+RQdus%P=m zf!RfMRXmowk|UorKw-44Q6jq{z=T%U9`o7;#CVy2;!*awbor;xDa zCruPBk9{dA8a>AJ4QWf$sn9{O-HT1oOJ&THP*%b?RW+Kl%`BYkkz0fF+if~^smme4 zS6RBMuBZ3NNvF27LaQmoq3u=m9O;YeYmls{Us2gLE{n;?>V<3=*%Vfb+NK=(h&gKe z%2v?NQQKr0p)(SiB%{l1qY!0cz^tz=EtzPqhuONEzij(;;r1M-1G*nir?6%L9(U1; z{mj#8)LbD?Z|`9@jt#PzF?NXIJg{Y}#Gqh13rBb@PFJa~mZQ|NtkPxm%hhyk^9uf1 z5O=1z1Dayt>pY0R%Wv?)t)>(Q)UPas-BfC#m6~LwQnXwgTOn2@y$T965RT2S?!_k3 z4djH*YRGv(w7Jc~)fGi}nqZM#n{R z5u?vVaz68vh&;KBSXEoyn!!Ycf;D45w>tn7S2KPoz@gnNVE!CJ_-~6+oZlnCdkhFY zY8R^THudAd#>#=!Z)a6_U2JXskeZQb_!%wc$)#(1Q!wLQjDFr zXF)oG@d253TlE6HA8@cWqX>~)z>^#J{WGwP)=8|&L#Dx!$|z1!;}J0*bSD2jBALsG zW!h?z2at@Yi3fUE?W6FzW_b_UC=9IPJ0_(8m8wQ?hz&pz%aZO7z_Da*wWB2%zb(@) z#*zH;3szAw$$JC=b!J4eE^b=|!+Ss-l~k319D}705%Y6t2#jRBMy5S>-X!24+>UY! z)U}M5!)7Fc>kz0p;|($$#@LB*0(jm6i;KMXB0xB!O(MB~AN@Wjv5el9Se1uN_e(0H z9g@nAI>pDr+5+;wFR;0cSf))qGLa*&VaWOsg1upwHCU=F;xL(xU>t$_d{jljU(bHnT}wbiqAJ- zG|Rcj8;by=F&ZP13qC+}QeqihlvvgNU3so$9*VS8lp@6Uq8PQ2TqX0aLG+kR9z?_f zP-6=2E3)S@l9H^(>B_#4*<~K9f0HUU+T!mqk-QxNwdj&=^_DtNq#C(odO|X)+Pn;q znPBa(7+V`EyscrV0aXrc7}}@}!QKe0&p-q_j`d3uxV0ko%5*g2HW$8&(bhIAwS+O| zgMd0Qsu9V2Zf?#;0G82xBFP72;$i_Z&$Wyq_)Vj>=p-VFw+-{$+FmUr<}w-~7#D6w z^twzkPpeFFXAFx)8{dFvrAX#7x?f^d>90f5MJbfg{UUolg;E*@L~6@(MxZ<+sgtEV zce6i>;LvK;FlHu)wq>aj&)UQwAUC6>BDsj-pORQcvLtJ*(h5EL0c~hoUcOBU`p!h^ z+I)pd08a)2TGl!EMDp4SM9gJ#T;@3~^5il4MkE(8&qR@D(NsjtXKSZ{ z0HY9K(68+6r0_P@5;HegSH;>!PKCE=auKW=lmly;omJs&Qdx%*1TJA2-yqY`jGOUF z2Ua6l2r$}N zyU`RLomv%oDRNULSf8`AD!i>$WXq7O-DZQyz@;MCdl&Vq?1h)g`U7~W{AU8UR>Y@e zI*M^lglJEXQkT5#2xzOv@D^?tg00!QsCi_H6Vycsh;EQc=6O;i^B7UOt%9R~B6DEF zdE0YscH(~*pMW*<75^{9xv*CD`p z8C8npf`fR|`2~V)Jxof2WMp(qGIB#2nZZc@3nH1zhy~fQ7lP3*^5imlK_nM4JCANe z1B^p-k4!#iWw#n&Cm6}h^i*DN;w<8d%|NBU>I=x#a+?C+)tV@U{kC4>oED)+oDFg}1Rj12*av$g1!*1z2Ai z8?4>j<}h&YBRI61RJF9TfWHaAO*hEHi$^s=FZHUm3Q6l#-7NyZOA$OczfYyb3zFS{ z#9NUXNa1r!^KA(az9VS9J=@1j00k@0SW}PTJ7ikO;(=?{^Z5}bASgWPO}-aN5h=br zhYGV>pcbUD1LxkRju(*tsYeC6&X*@2vEg(>(0}$ zY&7$QELZY2toa0-r#sjz+x6UDyH`={hns6$^xB^8i@#^fzpu+fpw#nw9%H52*d~yN zWZ7HGMuJysFClz^P>6@3e5kCh_mDV>(2PL(afFW$-bd)VF~U6*;O`LlP?%4k)#XNd z3<943C))5ck)Dgd$Gr<}_!^{nvI?K=HrVi6k=}vuD8eoqej<8aEVQjR<^X`ltwK8nDn zfhTSFRCJc>5!9nKC1*WwI}rFBZ5M*N_8{Gez=vjU+VF29{T>1zoPA-#kHhnu=?Hw3 z#OFNf;ggd0Khbv~4^NU+kBwBmkAV9EfzOD(L$EG%a&F4ybE0Sjb$x{NCkT9U!3Pyz zAe==|*Z)Kxh0Z(r@D)hcA@JG3MjQS?q@P824&fym{tI-ouMpI|s4AEHOw$n5U8Ta8 z0e24qZy|ResB1UUzd_*r;z1k!Fw#d6cyD;thW{SvDBK%eir_|2*LI{IL)eMHTPbz% z{_H3M|A;VeF}CC8<|x8(;6AYNxj{=sm~Qf^{NI5m0{rThO5wACTZX{NpOlKn$BJi$YA;R?t>beE##}IZR?6%?gpnZj=cZZCpbj4Avf;NC{y%8M&9b)7`|Gy+#&_CvC@#M;#>@IeG({N;8L z`&9~mm!LEe8%`6&mm?GKS(1SGxtW$&vbqvEWsDCx1Vw!-Vh4Pn)s$9{UnZ(6>a;}h zw^$PE_$fl7_;dA%HC5sdpC_j0%}Fd>RbH}6GWm*XYKm4%CY8RS7&0NRXhnH33a)|- znHPUET}v#+pM)>P*9$^YQ62WAE~~G@U%O8%;ahmfD5_lE1yPB_TQGObXg7mERM+rbEzbjohk{zVppqz&0HzJ!%*Q#lo1=GeaDLy4373 z5eSa#ob`BC90T8hD>`F_M1*h5Gv_(gG8CFLM1qHWyb>&tTa_Z9NTYFY!*>LMS*K?KFezeR8qe5s1bw|@|tFiLtrTAh4_|DCQ585iM_>uzn@|VE=bVl=H zTkuLX`IP+%mTKBsc0lu@JO+N7!&qH^FU7PRsh}7Qk1u7GoG4 z&AgNhR?U`Od-$hlL`4KmB^leQr+t49#v=4#bSdpF1lBhKfmO51`(PXFtehD%B@f9S z7sqm5hRMY-Tf(wrj?EI5C2$Ouu(USES_#Vp$5aW+igWCguuQmJ3YH0ug_15Ch-03F zQBhnR-*_2fCXi#8gym?$u}Z>nEypoQ!g9^U@khdPO~i3V!nB+mPb4fIj^l=ex$SSHM0gPRp>mtpPfkVr!tYNN8gmj=L`g}W}p+9e@z zhGtgWWD#d&cCkYqzKyb7hUT_GEH5Si9wj`2bB4Uaguf}+fzg~6;O&E=({)t)@gqFK zs(tvvgYagvJr&(=sok%eg`C>?&Qai3?V;nZ*RVWgZyeR5B>`rCkXM+-^~c91tn@S8 z29z*uCVtsI)I-Oaew4@gL|y~LmwgJ>G2&8wgmnuOrmX|aa}0SY`8;-7UeX@Qzt}VH z0YSk!V3w!+1B-F(X)`Ay)|cgR&yc*NJf23V;6Ea6)O?p1y+u>%PAtrny;+xPdxUYxs2EdoV zExAvI@DqqK@d_4CMXij=J1Q5#G;_c_T+(s}EpVA8qQ zNx{u1Zx&!b5Y&g|@pemIVWK?ldr~mzZrDq~l*ijK1q-?y7J!oZx$ntN&$s3!N$0*N zJN+v;OaLY6JgU=9FR+FMNf)O;3I?hF*#LT1rwG$dqrN(Z5kA6F^&MdiD`t5%m_@IG zzsO6{xgScwq<>}&JCe?QP*dHyw3COjE151eKfCOi``&w`FI;U$1S15A}kuK>&=f$?9!{K}EX_$v9E0rLo4 z#lH(M&pTCg`ZZ71gh-K}UpMk>N;U!I^B6atyQtvPfO)E*;{P5n&&gBz)1EwBOqBmX=4}GVFl88AiBK51@fP2vflm9P()%Y0!ef}9hKLt3-v=`}L1@QkD z;L9<-^4s2lXq5;UTFp-bF+U9kY|qaxA=Sn5lLO!k8_Z!K-v*Pv%m%vw*V|yy?*dGJ zp&eQO`vd4Z1K@pt?fUWPa~|DCpJ0CeStL9CU_gF8>QxuZ{}Qm>p5F%02iVq-~C{PQD^}3fiG-?_J{L$y2z=ryFMC6@eJh;N5s|CSX9W$vxyu zxiXMvVh^6ndth*iVSwZ-d&o)VHl=R*T+u`4$vtwVT;9u8V72{6bb=Xkv$!A8S5j-e z!S!V=o|`^r7Iq?ElQSzzL%-*B_XQ~ssiENpVDsah@Hn99FCEjp>W z+tpqaTn>N7#g6gWh8HLRhU)SXJA-Xcm|0#}70 z3j=HJTE-6T8||goEYwXf`v?XOVF0VT9L=;9Vsx;}FzK1*7SZgLzP!@q<+XLCHJKGf zwY7K{ZE|?aYp^X;*w-|dC`Jw}s;Epn@5Y}nU&I}}dDvO5Nt=r8YyqXtsw%Fl=q68& GHvb3vf3^ky diff --git a/packaging/libtbm-exynos4412.spec b/packaging/libtbm-exynos4412.spec index 566c7e6..853ba31 100644 --- a/packaging/libtbm-exynos4412.spec +++ b/packaging/libtbm-exynos4412.spec @@ -1,6 +1,6 @@ Name: libtbm-exynos4412 -Version: 1.0.2 -Release: 2 +Version: 1.0.4 +Release: 6 License: MIT Summary: Tizen Buffer Manager - exynos4412 backend Group: System/Libraries -- 2.7.4 From 73fa2861d459e42153417250691e241d65a0f12b Mon Sep 17 00:00:00 2001 From: SooChan Lim Date: Mon, 24 Jun 2013 16:41:22 +0900 Subject: [PATCH 04/15] update the binary Change-Id: If652fd091586a6139336c874db71d049587ba6d7 --- lib/libtbm_exynos4412.so.0.0.0 | Bin 15088 -> 19388 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/lib/libtbm_exynos4412.so.0.0.0 b/lib/libtbm_exynos4412.so.0.0.0 index edfb7d44b11c0326f0326a28339e74cfcb6974d4..dd76265eceeae7cce6a5d4cd58f9982aa95a9f8a 100755 GIT binary patch literal 19388 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 QAHWZE|HDh9ABD&N0ebthzyJUM literal 15088 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 YpfgfIdgM03G^YFrplg#Wz%t$c0vGQcvH$=8 -- 2.7.4 From d30dd17ee3d030b5d72b9de401ec03f26f973953 Mon Sep 17 00:00:00 2001 From: Sung-Jin Park Date: Mon, 30 Sep 2013 01:26:38 -0400 Subject: [PATCH 05/15] Modify a spec file to install license file under /usr/share/license directory Change-Id: Idbcdceadcec6afc32de09485ee2e36956b3661ae --- packaging/libtbm-exynos4412.spec | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packaging/libtbm-exynos4412.spec b/packaging/libtbm-exynos4412.spec index 853ba31..b70d25b 100644 --- a/packaging/libtbm-exynos4412.spec +++ b/packaging/libtbm-exynos4412.spec @@ -21,6 +21,8 @@ autoreconf -vfi make %{?jobs:-j%jobs} %install +mkdir -p %{buildroot}/usr/share/license +cp -af COPYING %{buildroot}/usr/share/license/%{name} %make_install @@ -33,5 +35,6 @@ ln -s libtbm_exynos4412.so %{_libdir}/bufmgr/libtbm_default.so %postun -p /sbin/ldconfig %files +/usr/share/license/%{name} %{_libdir}/bufmgr/libtbm_*.so* -- 2.7.4 From d21068e5564b1022c369b3ae11c286ecad709c5f Mon Sep 17 00:00:00 2001 From: SooChan Lim Date: Tue, 5 Aug 2014 08:52:19 +0900 Subject: [PATCH 06/15] add the initial source code Change-Id: Ib7b5b2847c3a6bb3b9e005bfc7b1c46fdcbe3494 --- COPYING | 2 +- Makefile.am | 3 +- autogen.sh | 2 +- configure.ac | 77 ++- lib/libtbm_exynos4412.so | 1 - lib/libtbm_exynos4412.so.0 | 1 - lib/libtbm_exynos4412.so.0.0.0 | Bin 19388 -> 0 bytes libtbm-exynos4412.manifest | 5 + packaging/libtbm-exynos4412.spec | 23 +- src/Makefile.am | 11 + src/tbm_bufmgr_exynos4412.c | 1129 ++++++++++++++++++++++++++++++++++++++ 11 files changed, 1223 insertions(+), 31 deletions(-) mode change 100755 => 100644 autogen.sh delete mode 120000 lib/libtbm_exynos4412.so delete mode 120000 lib/libtbm_exynos4412.so.0 delete mode 100755 lib/libtbm_exynos4412.so.0.0.0 create mode 100644 libtbm-exynos4412.manifest create mode 100644 src/Makefile.am create mode 100755 src/tbm_bufmgr_exynos4412.c diff --git a/COPYING b/COPYING index bf8f898..52fd458 100644 --- a/COPYING +++ b/COPYING @@ -1,4 +1,4 @@ -Copyright (C) 2010 - 2011 Samsung Electronics co., Ltd. All Rights Reserved. +Copyright (C) 2000 - 2012 Samsung Electronics co., Ltd. All Rights Reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/Makefile.am b/Makefile.am index 93659bd..af437a6 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,2 +1 @@ -tbm_libdir = ${bufmgr_dir} -tbm_lib_DATA = $(top_srcdir)/lib/* +SUBDIRS = src diff --git a/autogen.sh b/autogen.sh old mode 100755 new mode 100644 index 218197d..904cd67 --- a/autogen.sh +++ b/autogen.sh @@ -9,4 +9,4 @@ cd $srcdir autoreconf -v --install || exit 1 cd $ORIGDIR || exit $? -#$srcdir/configure --enable-maintainer-mode "$@" +$srcdir/configure --enable-maintainer-mode "$@" diff --git a/configure.ac b/configure.ac index fb2632e..a0d26ed 100644 --- a/configure.ac +++ b/configure.ac @@ -1,28 +1,71 @@ -# -*- Autoconf -*- -# Process this file with autoconf to produce a configure script. - -AC_PREREQ(2.61) -AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS) - -# Checks for programs. -AC_PROG_INSTALL -AC_PROG_MAKE_SET +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# on the rights to use, copy, modify, merge, publish, distribute, sub +# license, and/or sell copies of the Software, and to permit persons to whom +# the Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice (including the next +# paragraph) shall be included in all copies or substantial portions of the +# Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL +# ADAM JACKSON BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +AC_PREREQ(2.60) +AC_INIT(libtbm-exynos4412, 1.0.0) +AC_USE_SYSTEM_EXTENSIONS AC_CONFIG_SRCDIR([Makefile.am]) -AM_CONFIG_HEADER([config.h]) -AC_CONFIG_AUX_DIR(.) - AM_INIT_AUTOMAKE([dist-bzip2]) -AM_MAINTAINER_MODE +AM_CONFIG_HEADER([config.h]) -# Checks for programs. AC_DISABLE_STATIC AC_PROG_LIBTOOL AC_PROG_CC -bufmgr_dir=${libdir} +AC_HEADER_STDC +AC_SYS_LARGEFILE +AC_FUNC_ALLOCA + +# Enable quiet compiles on automake 1.11. +m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) + +PKG_CHECK_MODULES(LIBDRM, libdrm) +PKG_CHECK_MODULES(LIBDRM_EXYNOS, libdrm_exynos) +PKG_CHECK_MODULES(LIBTBM, libtbm) + +AC_ARG_ENABLE(cachectrl, + AS_HELP_STRING([--enable-cache-crtl], + [Enable cache control (default: enable)]), + [CACHE_CTRL=$enableval], [CACHE_CTRL=yes]) + +if test "x$CACHE_CTRL" = xyes; then + AC_DEFINE(ENABLE_CACHECRTL, 1, [Enable cache control]) +fi + +LIBTBM_EXYNOS4412_CFLAGS="$LIBDRM_CFLAGS $LIBDRM_EXYNOS_CFLAGS $LIBTBM_CFLAGS " +LIBTBM_EXYNOS4412_LIBS="$LIBDRM_LIBS $LIBDRM_EXYNOS_LIBS $LIBTBM_LIBS " +AC_SUBST(LIBTBM_EXYNOS4412_CFLAGS) +AC_SUBST(LIBTBM_EXYNOS4412_LIBS) + +bufmgr_dir=${libdir#*/} AC_SUBST(bufmgr_dir) -AC_CONFIG_FILES([Makefile]) -AC_OUTPUT +AC_OUTPUT([ + Makefile + src/Makefile]) + +echo "" +echo "CFLAGS : $CFLAGS" +echo "LDFLAGS : $LDFLAGS" +echo "LIBTBM_EXYNOS4412_CFLAGS : $LIBTBM_EXYNOS4412_CFLAGS" +echo "LIBTBM_EXYNOS4412_LIBS : $LIBTBM_EXYNOS4412_LIBS" +echo "bufmgr_dir : $bufmgr_dir" +echo "" + diff --git a/lib/libtbm_exynos4412.so b/lib/libtbm_exynos4412.so deleted file mode 120000 index caff059..0000000 --- a/lib/libtbm_exynos4412.so +++ /dev/null @@ -1 +0,0 @@ -libtbm_exynos4412.so.0.0.0 \ No newline at end of file diff --git a/lib/libtbm_exynos4412.so.0 b/lib/libtbm_exynos4412.so.0 deleted file mode 120000 index caff059..0000000 --- a/lib/libtbm_exynos4412.so.0 +++ /dev/null @@ -1 +0,0 @@ -libtbm_exynos4412.so.0.0.0 \ No newline at end of file diff --git a/lib/libtbm_exynos4412.so.0.0.0 b/lib/libtbm_exynos4412.so.0.0.0 deleted file mode 100755 index dd76265eceeae7cce6a5d4cd58f9982aa95a9f8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19388 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 QAHWZE|HDh9ABD&N0ebthzyJUM diff --git a/libtbm-exynos4412.manifest b/libtbm-exynos4412.manifest new file mode 100644 index 0000000..97e8c31 --- /dev/null +++ b/libtbm-exynos4412.manifest @@ -0,0 +1,5 @@ + + + + + diff --git a/packaging/libtbm-exynos4412.spec b/packaging/libtbm-exynos4412.spec index b70d25b..1ef54df 100644 --- a/packaging/libtbm-exynos4412.spec +++ b/packaging/libtbm-exynos4412.spec @@ -1,26 +1,32 @@ Name: libtbm-exynos4412 -Version: 1.0.4 -Release: 6 +Version: 1.0.5 +Release: 1 License: MIT -Summary: Tizen Buffer Manager - exynos4412 backend +Summary: The exynos4412 tbm backend Group: System/Libraries ExcludeArch: i586 Source0: %{name}-%{version}.tar.gz +BuildRequires: pkgconfig(pthread-stubs) +BuildRequires: pkgconfig(libdrm) +BuildRequires: pkgconfig(libdrm_exynos) +BuildRequires: pkgconfig(libtbm) + %description -descriptionion: ${summary} +descriptionion: Tizen Buffer manager backend module for exynos4412 %prep %setup -q %build -autoreconf -vfi -./configure --prefix=%{_prefix} --libdir=%{_libdir}/bufmgr +%reconfigure --prefix=%{_prefix} --libdir=%{_libdir}/bufmgr --disable-cachectrl \ + CFLAGS="${CFLAGS} -Wall -Werror" LDFLAGS="${LDFLAGS} -Wl,--hash-style=both -Wl,--as-needed" -make %{?jobs:-j%jobs} +make %{?_smp_mflags} %install +rm -rf %{buildroot} mkdir -p %{buildroot}/usr/share/license cp -af COPYING %{buildroot}/usr/share/license/%{name} %make_install @@ -35,6 +41,7 @@ ln -s libtbm_exynos4412.so %{_libdir}/bufmgr/libtbm_default.so %postun -p /sbin/ldconfig %files -/usr/share/license/%{name} +%manifest libtbm-exynos4412.manifest %{_libdir}/bufmgr/libtbm_*.so* +/usr/share/license/%{name} diff --git a/src/Makefile.am b/src/Makefile.am new file mode 100644 index 0000000..704e030 --- /dev/null +++ b/src/Makefile.am @@ -0,0 +1,11 @@ +AM_CFLAGS = \ + @LIBTBM_EXYNOS4412_CFLAGS@ \ + -I$(top_srcdir) \ + -I$(top_srcdir)/src + +libtbm_exynos4412_la_LTLIBRARIES = libtbm_exynos4412.la +libtbm_exynos4412_ladir = /${bufmgr_dir} +libtbm_exynos4412_la_LIBADD = @LIBTBM_EXYNOS4412_LIBS@ + +libtbm_exynos4412_la_SOURCES = \ + tbm_bufmgr_exynos4412.c diff --git a/src/tbm_bufmgr_exynos4412.c b/src/tbm_bufmgr_exynos4412.c new file mode 100755 index 0000000..259edee --- /dev/null +++ b/src/tbm_bufmgr_exynos4412.c @@ -0,0 +1,1129 @@ +/************************************************************************** + +libtbm_exynos4412 + +Copyright 2012 Samsung Electronics co., Ltd. All Rights Reserved. + +Contact: SooChan Lim , Sangjin Lee + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sub license, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice (including the +next paragraph) shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +**************************************************************************/ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "exynos_drm.h" +#include + +#define DEBUG +#define USE_DMAIMPORT +#define TBM_EXYNOS4412_LOG(...) fprintf (stderr, __VA_ARGS__) + +#ifdef DEBUG +static int bDebug = 0; +#define DBG(...) if(bDebug&0x1) TBM_EXYNOS4412_LOG (__VA_ARGS__) +#else +#define DBG(...) +#endif + +/* check condition */ +#define EXYNOS4412_RETURN_IF_FAIL(cond) {\ + if (!(cond)) {\ + TBM_EXYNOS4412_LOG ("[%s] : '%s' failed.\n", __FUNCTION__, #cond);\ + return;\ + }\ +} +#define EXYNOS4412_RETURN_VAL_IF_FAIL(cond, val) {\ + if (!(cond)) {\ + TBM_EXYNOS4412_LOG ("[%s] : '%s' failed.\n", __FUNCTION__, #cond);\ + return val;\ + }\ +} + +struct dma_buf_info { + unsigned long size; + unsigned int fence_supported; + unsigned int padding; +}; + +#define DMA_BUF_ACCESS_READ 0x1 +#define DMA_BUF_ACCESS_WRITE 0x2 +#define DMA_BUF_ACCESS_DMA 0x4 +#define DMA_BUF_ACCESS_MAX 0x8 + +#define DMA_FENCE_LIST_MAX 5 + +struct dma_buf_fence { + unsigned long ctx; + unsigned int type; +}; + +#define DMABUF_IOCTL_BASE 'F' +#define DMABUF_IOWR(nr, type) _IOWR(DMABUF_IOCTL_BASE, nr, type) + +#define DMABUF_IOCTL_GET_INFO DMABUF_IOWR(0x00, struct dma_buf_info) +#define DMABUF_IOCTL_GET_FENCE DMABUF_IOWR(0x01, struct dma_buf_fence) +#define DMABUF_IOCTL_PUT_FENCE DMABUF_IOWR(0x02, struct dma_buf_fence) + +typedef struct _tbm_bufmgr_exynos4412 *tbm_bufmgr_exynos4412; +typedef struct _tbm_bo_exynos4412 *tbm_bo_exynos4412; + +typedef struct _exynos4412_private +{ + int ref_count; +} PrivGem; + +/* tbm buffor object for exynos4412 */ +struct _tbm_bo_exynos4412 +{ + int fd; + + unsigned int name; /* FLINK ID */ + + unsigned int gem; /* GEM Handle */ + + unsigned int dmabuf; /* fd for dmabuf */ + + void *pBase; /* virtual address */ + + unsigned int size; + + unsigned int flags_exynos; + unsigned int flags_tbm; + + PrivGem* private; + + pthread_mutex_t mutex; + struct dma_buf_fence dma_fence[DMA_FENCE_LIST_MAX]; + int device; + int opt; +}; + +/* tbm bufmgr private for exynos4412 */ +struct _tbm_bufmgr_exynos4412 +{ + int fd; + int isLocal; + void* hashBos; + + int use_dma_fence; +}; + +char *STR_DEVICE[]= +{ + "DEF", + "CPU", + "2D", + "3D", + "MM" +}; + +char *STR_OPT[]= +{ + "NONE", + "RD", + "WR", + "RDWR" +}; + +static unsigned int +_get_exynos_flag_from_tbm (unsigned int ftbm) +{ + unsigned int flags = 0; + + if (ftbm & TBM_BO_SCANOUT) + flags |= EXYNOS_BO_CONTIG; + else + flags |= EXYNOS_BO_NONCONTIG; + + if (ftbm & TBM_BO_WC) + flags |= EXYNOS_BO_WC; + else if (ftbm & TBM_BO_NONCACHABLE) + flags |= EXYNOS_BO_NONCACHABLE; + else + flags |= EXYNOS_BO_CACHABLE; + + return flags; +} + +static unsigned int +_get_tbm_flag_from_exynos (unsigned int fexynos) +{ + unsigned int flags = 0; + + if (fexynos & EXYNOS_BO_NONCONTIG) + flags |= TBM_BO_DEFAULT; + else + flags |= TBM_BO_SCANOUT; + + if (fexynos & EXYNOS_BO_WC) + flags |= TBM_BO_WC; + else if (fexynos & EXYNOS_BO_CACHABLE) + flags |= TBM_BO_DEFAULT; + else + flags |= TBM_BO_NONCACHABLE; + + return flags; +} + +static unsigned int +_get_name (int fd, unsigned int gem) +{ + struct drm_gem_flink arg = {0,}; + + arg.handle = gem; + if (drmIoctl (fd, DRM_IOCTL_GEM_FLINK, &arg)) + { + TBM_EXYNOS4412_LOG ("[libtbm-exynos4412:%d] " + "error %s:%d fail to get flink gem=%d\n", + getpid(), __FUNCTION__, __LINE__, gem); + return 0; + } + + return (unsigned int)arg.name; +} + +static tbm_bo_handle +_exynos4412_bo_handle (tbm_bo_exynos4412 bo_exynos4412, int device) +{ + tbm_bo_handle bo_handle; + memset (&bo_handle, 0x0, sizeof (uint64_t)); + + switch(device) + { + case TBM_DEVICE_DEFAULT: + case TBM_DEVICE_2D: + bo_handle.u32 = (uint32_t)bo_exynos4412->gem; + break; + case TBM_DEVICE_CPU: + if (!bo_exynos4412->pBase) + { + struct drm_exynos_gem_mmap arg = {0,}; + + arg.handle = bo_exynos4412->gem; + arg.size = bo_exynos4412->size; + if (drmCommandWriteRead (bo_exynos4412->fd, DRM_EXYNOS_GEM_MMAP, &arg, sizeof(arg))) + { + TBM_EXYNOS4412_LOG ("[libtbm-exynos4412:%d] " + "error %s:%d Cannot usrptr gem=%d\n", + getpid(), __FUNCTION__, __LINE__, bo_exynos4412->gem); + return (tbm_bo_handle) NULL; + } + bo_exynos4412->pBase = (void*)((uint32_t)arg.mapped); + } + + bo_handle.ptr = (void *)bo_exynos4412->pBase; + break; + case TBM_DEVICE_3D: +#ifdef USE_DMAIMPORT + if (bo_exynos4412->dmabuf) + { + bo_handle.u32 = (uint32_t)bo_exynos4412->dmabuf; + break; + } + + if (!bo_exynos4412->dmabuf) + { + struct drm_prime_handle arg = {0, }; + + arg.handle = bo_exynos4412->gem; + if (drmIoctl (bo_exynos4412->fd, DRM_IOCTL_PRIME_HANDLE_TO_FD, &arg)) + { + TBM_EXYNOS4412_LOG ("[libtbm-exynos4412:%d] " + "error %s:%d Cannot dmabuf=%d\n", + getpid(), __FUNCTION__, __LINE__, bo_exynos4412->gem); + return (tbm_bo_handle) NULL; + } + bo_exynos4412->dmabuf = arg.fd; + } + + bo_handle.u32 = (uint32_t)bo_exynos4412->dmabuf; +#endif + break; + case TBM_DEVICE_MM: + if (!bo_exynos4412->dmabuf) + { + struct drm_prime_handle arg = {0, }; + + arg.handle = bo_exynos4412->gem; + if (drmIoctl (bo_exynos4412->fd, DRM_IOCTL_PRIME_HANDLE_TO_FD, &arg)) + { + TBM_EXYNOS4412_LOG ("[libtbm-exynos4412:%d] " + "error %s:%d Cannot dmabuf=%d\n", + getpid(), __FUNCTION__, __LINE__, bo_exynos4412->gem); + return (tbm_bo_handle) NULL; + } + bo_exynos4412->dmabuf = arg.fd; + } + + bo_handle.u32 = (uint32_t)bo_exynos4412->dmabuf; + break; + default: + TBM_EXYNOS4412_LOG ("[libtbm-exynos4412:%d] " + "error %s:%d Not supported device:%d\n", + getpid(), __FUNCTION__, __LINE__, device); + bo_handle.ptr = (void *) NULL; + break; + } + + return bo_handle; +} + +static int +_exynos4412_cache_flush (int fd, tbm_bo_exynos4412 bo_exynos4412, int flags) +{ +#ifdef ENABLE_CACHECRTL + struct drm_exynos_gem_cache_op cache_op = {0, }; + int ret; + + /* if bo_exynos4412 is null, do cache_flush_all */ + if(bo_exynos4412) + { + cache_op.flags = 0; + cache_op.usr_addr = (uint64_t)((uint32_t)bo_exynos4412->pBase); + cache_op.size = bo_exynos4412->size; + } + else + { + flags = TBM_CACHE_FLUSH_ALL; + cache_op.flags = 0; + cache_op.usr_addr = 0; + cache_op.size = 0; + } + + if (flags & TBM_CACHE_INV) + { + if(flags & TBM_CACHE_ALL) + cache_op.flags |= EXYNOS_DRM_CACHE_INV_ALL; + else + cache_op.flags |= EXYNOS_DRM_CACHE_INV_RANGE; + } + + if (flags & TBM_CACHE_CLN) + { + if(flags & TBM_CACHE_ALL) + cache_op.flags |= EXYNOS_DRM_CACHE_CLN_ALL; + else + cache_op.flags |= EXYNOS_DRM_CACHE_CLN_RANGE; + } + + if(flags & TBM_CACHE_ALL) + cache_op.flags |= EXYNOS_DRM_ALL_CACHES_CORES; + + ret = drmCommandWriteRead (fd, DRM_EXYNOS_GEM_CACHE_OP, &cache_op, sizeof(cache_op)); + if (ret) + { + TBM_EXYNOS4412_LOG ("[libtbm-exynos4412:%d] " + "error %s:%d fail to flush the cache.\n", + getpid(), __FUNCTION__, __LINE__); + return 0; + } +#else + TBM_EXYNOS4412_LOG ("[libtbm-exynos4412:%d] " + "warning %s:%d fail to enable the cache flush.\n", + getpid(), __FUNCTION__, __LINE__); +#endif + return 1; +} + +static int +tbm_exynos4412_bo_size (tbm_bo bo) +{ + EXYNOS4412_RETURN_VAL_IF_FAIL (bo!=NULL, 0); + + tbm_bo_exynos4412 bo_exynos4412; + + bo_exynos4412 = (tbm_bo_exynos4412)tbm_backend_get_bo_priv(bo); + + return bo_exynos4412->size; +} + +static void * +tbm_exynos4412_bo_alloc (tbm_bo bo, int size, int flags) +{ + EXYNOS4412_RETURN_VAL_IF_FAIL (bo!=NULL, 0); + + tbm_bo_exynos4412 bo_exynos4412; + tbm_bufmgr_exynos4412 bufmgr_exynos4412; + unsigned int exynos_flags; + + bufmgr_exynos4412 = (tbm_bufmgr_exynos4412)tbm_backend_get_bufmgr_priv(bo); + EXYNOS4412_RETURN_VAL_IF_FAIL (bufmgr_exynos4412!=NULL, 0); + + bo_exynos4412 = calloc (1, sizeof(struct _tbm_bo_exynos4412)); + if (!bo_exynos4412) + { + TBM_EXYNOS4412_LOG ("[libtbm-exynos4412:%d] " + "error %s:%d fail to allocate the bo private\n", + getpid(), __FUNCTION__, __LINE__); + return 0; + } + + exynos_flags = _get_exynos_flag_from_tbm (flags); + if((flags & TBM_BO_SCANOUT) && + size <= 4*1024) + { + exynos_flags |= EXYNOS_BO_NONCONTIG; + } + + struct drm_exynos_gem_create arg = {0, }; + arg.size = size; + arg.flags = exynos_flags; + if (drmCommandWriteRead(bufmgr_exynos4412->fd, DRM_EXYNOS_GEM_CREATE, &arg, sizeof(arg))) + { + TBM_EXYNOS4412_LOG ("[libtbm-exynos4412:%d] " + "error %s:%d Cannot create bo(flag:%x, size:%d)\n", + getpid(), __FUNCTION__, __LINE__, arg.flags, (unsigned int)arg.size); + free (bo_exynos4412); + return 0; + } + + bo_exynos4412->fd = bufmgr_exynos4412->fd; + bo_exynos4412->gem = arg.handle; + bo_exynos4412->size = size; + bo_exynos4412->flags_tbm = flags; + bo_exynos4412->flags_exynos = exynos_flags; + bo_exynos4412->name = _get_name (bo_exynos4412->fd, bo_exynos4412->gem); + + pthread_mutex_init(&bo_exynos4412->mutex, NULL); + + if (bufmgr_exynos4412->use_dma_fence + && !bo_exynos4412->dmabuf) + { + struct drm_prime_handle arg = {0, }; + + arg.handle = bo_exynos4412->gem; + if (drmIoctl (bo_exynos4412->fd, DRM_IOCTL_PRIME_HANDLE_TO_FD, &arg)) + { + TBM_EXYNOS4412_LOG ("[libtbm-exynos4412:%d] " + "error %s:%d Cannot dmabuf=%d\n", + getpid(), __FUNCTION__, __LINE__, bo_exynos4412->gem); + free (bo_exynos4412); + return 0; + } + bo_exynos4412->dmabuf = arg.fd; + } + + /* add bo to hash */ + PrivGem* privGem = calloc (1, sizeof(PrivGem)); + privGem->ref_count = 1; + if (drmHashInsert(bufmgr_exynos4412->hashBos, bo_exynos4412->name, (void *)privGem) < 0) + { + TBM_EXYNOS4412_LOG ("[libtbm-exynos4412:%d] " + "error %s:%d Cannot insert bo to Hash(%d)\n", + getpid(), __FUNCTION__, __LINE__, bo_exynos4412->name); + } + + DBG ("[libtbm-exynos4412:%d] %s size:%d, gem:%d(%d), flags:%d(%d)\n", getpid(), + __FUNCTION__, bo_exynos4412->size, + bo_exynos4412->gem, bo_exynos4412->name, + flags, exynos_flags); + + return (void *)bo_exynos4412; +} + +static void +tbm_exynos4412_bo_free(tbm_bo bo) +{ + tbm_bo_exynos4412 bo_exynos4412; + tbm_bufmgr_exynos4412 bufmgr_exynos4412; + + if (!bo) + return; + + bufmgr_exynos4412 = (tbm_bufmgr_exynos4412)tbm_backend_get_bufmgr_priv(bo); + EXYNOS4412_RETURN_IF_FAIL (bufmgr_exynos4412!=NULL); + + bo_exynos4412 = (tbm_bo_exynos4412)tbm_backend_get_bo_priv(bo); + EXYNOS4412_RETURN_IF_FAIL (bo_exynos4412!=NULL); + + DBG ("[libtbm-exynos4412:%d] %s size:%d, gem:%d(%d)\n", + getpid(), __FUNCTION__, bo_exynos4412->size, bo_exynos4412->gem, bo_exynos4412->name); + + if (bo_exynos4412->pBase) + { + if (munmap(bo_exynos4412->pBase, bo_exynos4412->size) == -1) + { + TBM_EXYNOS4412_LOG ("[libtbm-exynos4412:%d] " + "error %s:%d\n", + getpid(), __FUNCTION__, __LINE__); + } + } + + /* close dmabuf */ + if (bo_exynos4412->dmabuf) + { + close (bo_exynos4412->dmabuf); + bo_exynos4412->dmabuf = 0; + } + + /* delete bo from hash */ + PrivGem *privGem = NULL; + int ret; + + ret = drmHashLookup (bufmgr_exynos4412->hashBos, bo_exynos4412->name, (void**)&privGem); + if (ret == 0) + { + privGem->ref_count--; + if (privGem->ref_count == 0) + { + drmHashDelete (bufmgr_exynos4412->hashBos, bo_exynos4412->name); + free (privGem); + privGem = NULL; + } + } + else + { + TBM_EXYNOS4412_LOG ("[libtbm-exynos4412:%d] " + "warning %s:%d Cannot find bo to Hash(%d), ret=%d\n", + getpid(), __FUNCTION__, __LINE__, bo_exynos4412->name, ret); + } + + /* Free gem handle */ + struct drm_gem_close arg = {0, }; + memset (&arg, 0, sizeof(arg)); + arg.handle = bo_exynos4412->gem; + if (drmIoctl (bo_exynos4412->fd, DRM_IOCTL_GEM_CLOSE, &arg)) + { + TBM_EXYNOS4412_LOG ("[libtbm-exynos4412:%d] " + "error %s:%d\n", + getpid(), __FUNCTION__, __LINE__); + } + + free (bo_exynos4412); +} + + +static void * +tbm_exynos4412_bo_import (tbm_bo bo, unsigned int key) +{ + EXYNOS4412_RETURN_VAL_IF_FAIL (bo!=NULL, 0); + + tbm_bufmgr_exynos4412 bufmgr_exynos4412; + tbm_bo_exynos4412 bo_exynos4412; + + bufmgr_exynos4412 = (tbm_bufmgr_exynos4412)tbm_backend_get_bufmgr_priv(bo); + EXYNOS4412_RETURN_VAL_IF_FAIL (bufmgr_exynos4412!=NULL, 0); + + struct drm_gem_open arg = {0, }; + struct drm_exynos_gem_info info = {0, }; + + arg.name = key; + if (drmIoctl(bufmgr_exynos4412->fd, DRM_IOCTL_GEM_OPEN, &arg)) + { + TBM_EXYNOS4412_LOG ("[libtbm-exynos4412:%d] " + "error %s:%d Cannot open gem name=%d\n", + getpid(), __FUNCTION__, __LINE__, key); + return 0; + } + + info.handle = arg.handle; + if (drmCommandWriteRead(bufmgr_exynos4412->fd, + DRM_EXYNOS_GEM_GET, + &info, + sizeof(struct drm_exynos_gem_info))) + { + TBM_EXYNOS4412_LOG ("[libtbm-exynos4412:%d] " + "error %s:%d Cannot get gem info=%d\n", + getpid(), __FUNCTION__, __LINE__, key); + return 0; + } + + bo_exynos4412 = calloc (1, sizeof(struct _tbm_bo_exynos4412)); + if (!bo_exynos4412) + { + TBM_EXYNOS4412_LOG ("[libtbm-exynos4412:%d] " + "error %s:%d fail to allocate the bo private\n", + getpid(), __FUNCTION__, __LINE__); + return 0; + } + + bo_exynos4412->fd = bufmgr_exynos4412->fd; + bo_exynos4412->gem = arg.handle; + bo_exynos4412->size = arg.size; + bo_exynos4412->flags_exynos = info.flags; + bo_exynos4412->name = key; + bo_exynos4412->flags_tbm = _get_tbm_flag_from_exynos (bo_exynos4412->flags_exynos); + + if (!bo_exynos4412->dmabuf) + { + struct drm_prime_handle arg = {0, }; + + arg.handle = bo_exynos4412->gem; + if (drmIoctl (bo_exynos4412->fd, DRM_IOCTL_PRIME_HANDLE_TO_FD, &arg)) + { + TBM_EXYNOS4412_LOG ("[libtbm-exynos4412:%d] " + "error %s:%d Cannot dmabuf=%d\n", + getpid(), __FUNCTION__, __LINE__, bo_exynos4412->gem); + free (bo_exynos4412); + return 0; + } + bo_exynos4412->dmabuf = arg.fd; + } + + /* add bo to hash */ + PrivGem *privGem = NULL; + int ret; + + ret = drmHashLookup (bufmgr_exynos4412->hashBos, bo_exynos4412->name, (void**)&privGem); + if (ret == 0) + { + privGem->ref_count++; + } + else if (ret == 1) + { + privGem = calloc (1, sizeof(PrivGem)); + privGem->ref_count = 1; + if (drmHashInsert (bufmgr_exynos4412->hashBos, bo_exynos4412->name, (void *)privGem) < 0) + { + TBM_EXYNOS4412_LOG ("[libtbm-exynos4412:%d] " + "error %s:%d Cannot insert bo to Hash(%d)\n", + getpid(), __FUNCTION__, __LINE__, bo_exynos4412->name); + } + } + else + { + TBM_EXYNOS4412_LOG ("[libtbm-exynos4412:%d] " + "error %s:%d Cannot insert bo to Hash(%d)\n", + getpid(), __FUNCTION__, __LINE__, bo_exynos4412->name); + } + + DBG ("[libtbm-exynos4412:%d] %s size:%d, gem:%d(%d), flags:%d(%d)\n", getpid(), + __FUNCTION__, bo_exynos4412->size, + bo_exynos4412->gem, bo_exynos4412->name, + bo_exynos4412->flags_tbm, bo_exynos4412->flags_exynos); + + return (void *)bo_exynos4412; +} + +static unsigned int +tbm_exynos4412_bo_export (tbm_bo bo) +{ + EXYNOS4412_RETURN_VAL_IF_FAIL (bo!=NULL, 0); + + tbm_bo_exynos4412 bo_exynos4412; + + bo_exynos4412 = (tbm_bo_exynos4412)tbm_backend_get_bo_priv(bo); + EXYNOS4412_RETURN_VAL_IF_FAIL (bo_exynos4412!=NULL, 0); + + if (!bo_exynos4412->name) + { + bo_exynos4412->name = _get_name(bo_exynos4412->fd, bo_exynos4412->gem); + if (!bo_exynos4412->name) + { + TBM_EXYNOS4412_LOG ("[libtbm-exynos4412:%d] " + "error %s:%d Cannot get name\n", + getpid(), __FUNCTION__, __LINE__); + return 0; + } + } + + DBG ("[libtbm-exynos4412:%d] %s size:%d, gem:%d(%d), flags:%d(%d)\n", getpid(), + __FUNCTION__, bo_exynos4412->size, + bo_exynos4412->gem, bo_exynos4412->name, + bo_exynos4412->flags_tbm, bo_exynos4412->flags_exynos); + + return (unsigned int)bo_exynos4412->name; +} + +static tbm_bo_handle +tbm_exynos4412_bo_get_handle (tbm_bo bo, int device) +{ + EXYNOS4412_RETURN_VAL_IF_FAIL (bo!=NULL, (tbm_bo_handle) NULL); + + tbm_bo_handle bo_handle; + tbm_bo_exynos4412 bo_exynos4412; + + bo_exynos4412 = (tbm_bo_exynos4412)tbm_backend_get_bo_priv(bo); + EXYNOS4412_RETURN_VAL_IF_FAIL (bo_exynos4412!=NULL, (tbm_bo_handle) NULL); + + if (!bo_exynos4412->gem) + { + TBM_EXYNOS4412_LOG ("[libtbm-exynos4412:%d] " + "error %s:%d Cannot map gem=%d\n", + getpid(), __FUNCTION__, __LINE__, bo_exynos4412->gem); + return (tbm_bo_handle) NULL; + } + + DBG ("[libtbm-exynos4412:%d] %s gem:%d(%d), %s\n", getpid(), + __FUNCTION__, bo_exynos4412->gem, bo_exynos4412->name, STR_DEVICE[device]); + + /*Get mapped bo_handle*/ + bo_handle = _exynos4412_bo_handle (bo_exynos4412, device); + if (bo_handle.ptr == NULL) + { + TBM_EXYNOS4412_LOG ("[libtbm-exynos4412:%d] " + "error %s:%d Cannot get handle: gem:%d, device:%d\n", + getpid(), __FUNCTION__, __LINE__, bo_exynos4412->gem, device); + return (tbm_bo_handle) NULL; + } + + return bo_handle; +} + +static tbm_bo_handle +tbm_exynos4412_bo_map (tbm_bo bo, int device, int opt) +{ + EXYNOS4412_RETURN_VAL_IF_FAIL (bo!=NULL, (tbm_bo_handle) NULL); + + tbm_bo_handle bo_handle; + tbm_bo_exynos4412 bo_exynos4412; + + bo_exynos4412 = (tbm_bo_exynos4412)tbm_backend_get_bo_priv(bo); + EXYNOS4412_RETURN_VAL_IF_FAIL (bo_exynos4412!=NULL, (tbm_bo_handle) NULL); + + if (!bo_exynos4412->gem) + { + TBM_EXYNOS4412_LOG ("[libtbm-exynos4412:%d] " + "error %s:%d Cannot map gem=%d\n", + getpid(), __FUNCTION__, __LINE__, bo_exynos4412->gem); + return (tbm_bo_handle) NULL; + } + + DBG ("[libtbm-exynos4412:%d] %s gem:%d(%d), %s, %s\n", getpid(), + __FUNCTION__, bo_exynos4412->gem, bo_exynos4412->name, STR_DEVICE[device], STR_OPT[opt]); + + /*Get mapped bo_handle*/ + bo_handle = _exynos4412_bo_handle (bo_exynos4412, device); + if (bo_handle.ptr == NULL) + { + TBM_EXYNOS4412_LOG ("[libtbm-exynos4412:%d] " + "error %s:%d Cannot get handle: gem:%d, device:%d, opt:%d\n", + getpid(), __FUNCTION__, __LINE__, bo_exynos4412->gem, device, opt); + return (tbm_bo_handle) NULL; + } + + return bo_handle; +} + +static int +tbm_exynos4412_bo_unmap (tbm_bo bo) +{ + EXYNOS4412_RETURN_VAL_IF_FAIL (bo!=NULL, 0); + + tbm_bo_exynos4412 bo_exynos4412; + + bo_exynos4412 = (tbm_bo_exynos4412)tbm_backend_get_bo_priv(bo); + EXYNOS4412_RETURN_VAL_IF_FAIL (bo_exynos4412!=NULL, 0); + + if (!bo_exynos4412->gem) + return 0; + + DBG ("[libtbm-exynos4412:%d] %s gem:%d(%d) \n", getpid(), + __FUNCTION__, bo_exynos4412->gem, bo_exynos4412->name); + + return 1; +} + +static int +tbm_exynos4412_bo_cache_flush (tbm_bo bo, int flags) +{ + tbm_bufmgr_exynos4412 bufmgr_exynos4412 = (tbm_bufmgr_exynos4412)tbm_backend_get_bufmgr_priv(bo); + EXYNOS4412_RETURN_VAL_IF_FAIL (bufmgr_exynos4412!=NULL, 0); + + /* cache flush is managed by kernel side when using dma-fence. */ + if (bufmgr_exynos4412->use_dma_fence) + return 1; + + EXYNOS4412_RETURN_VAL_IF_FAIL (bo!=NULL, 0); + + tbm_bo_exynos4412 bo_exynos4412; + + bo_exynos4412 = (tbm_bo_exynos4412)tbm_backend_get_bo_priv(bo); + EXYNOS4412_RETURN_VAL_IF_FAIL (bo_exynos4412!=NULL, 0); + + if (!_exynos4412_cache_flush(bo_exynos4412->fd, bo_exynos4412, flags)) + return 0; + + return 1; +} + +static int +tbm_exynos4412_bo_get_global_key (tbm_bo bo) +{ + EXYNOS4412_RETURN_VAL_IF_FAIL (bo!=NULL, 0); + + tbm_bo_exynos4412 bo_exynos4412; + + bo_exynos4412 = (tbm_bo_exynos4412)tbm_backend_get_bo_priv(bo); + EXYNOS4412_RETURN_VAL_IF_FAIL (bo_exynos4412!=NULL, 0); + + if (!bo_exynos4412->name) + { + if (!bo_exynos4412->gem) + return 0; + + bo_exynos4412->name = _get_name(bo_exynos4412->fd, bo_exynos4412->gem); + } + + return bo_exynos4412->name; +} + +static int +tbm_exynos4412_bo_lock(tbm_bo bo, int device, int opt) +{ + EXYNOS4412_RETURN_VAL_IF_FAIL (bo!=NULL, 0); + + tbm_bufmgr_exynos4412 bufmgr_exynos4412; + tbm_bo_exynos4412 bo_exynos4412; + struct dma_buf_fence fence; + struct flock filelock; + int ret=0; + + if (device != TBM_DEVICE_3D && device != TBM_DEVICE_CPU) + { + DBG ("[libtbm-exynos4412:%d] %s not support device type,\n", getpid(), __FUNCTION__); + return 0; + } + + bo_exynos4412 = (tbm_bo_exynos4412)tbm_backend_get_bo_priv(bo); + EXYNOS4412_RETURN_VAL_IF_FAIL (bo_exynos4412!=NULL, 0); + + bufmgr_exynos4412 = (tbm_bufmgr_exynos4412)tbm_backend_get_bufmgr_priv(bo); + EXYNOS4412_RETURN_VAL_IF_FAIL (bufmgr_exynos4412!=NULL, 0); + + memset(&fence, 0, sizeof(struct dma_buf_fence)); + + /* Check if the given type is valid or not. */ + if (opt & TBM_OPTION_WRITE) + { + if (device == TBM_DEVICE_3D) + fence.type = DMA_BUF_ACCESS_WRITE | DMA_BUF_ACCESS_DMA; + } + else if (opt & TBM_OPTION_READ) + { + if (device == TBM_DEVICE_3D) + fence.type = DMA_BUF_ACCESS_READ | DMA_BUF_ACCESS_DMA; + } + else + { + TBM_EXYNOS4412_LOG ("[libtbm-exynos4412:%d] error %s:%d Invalid argument\n", getpid(), __FUNCTION__, __LINE__); + return 0; + } + + /* Check if the tbm manager supports dma fence or not. */ + if (!bufmgr_exynos4412->use_dma_fence) + { + TBM_EXYNOS4412_LOG ("[libtbm-exynos4412:%d] " + "error %s:%d Not support DMA FENCE(%s)\n", + getpid(), __FUNCTION__, __LINE__, strerror(errno) ); + return 0; + + } + + if (device == TBM_DEVICE_3D) + { + ret = ioctl(bo_exynos4412->dmabuf, DMABUF_IOCTL_GET_FENCE, &fence); + if (ret < 0) + { + TBM_EXYNOS4412_LOG ("[libtbm-exynos4412:%d] " + "error %s:%d Can not set GET FENCE(%s)\n", + getpid(), __FUNCTION__, __LINE__, strerror(errno) ); + return 0; + } + } else + { + if (opt & TBM_OPTION_WRITE) + filelock.l_type = F_WRLCK; + else + filelock.l_type = F_RDLCK; + + filelock.l_whence = SEEK_CUR; + filelock.l_start = 0; + filelock.l_len = 0; + + if (-1 == fcntl(bo_exynos4412->dmabuf, F_SETLKW, &filelock)) + { + return 0; + } + } + + pthread_mutex_lock(&bo_exynos4412->mutex); + + if (device == TBM_DEVICE_3D) + { + int i; + for (i = 0; i < DMA_FENCE_LIST_MAX; i++) + { + if (bo_exynos4412->dma_fence[i].ctx == 0) + { + bo_exynos4412->dma_fence[i].type = fence.type; + bo_exynos4412->dma_fence[i].ctx = fence.ctx; + break; + } + } + + if (i == DMA_FENCE_LIST_MAX) + { + //TODO: if dma_fence list is full, it needs realloc. I will fix this. by minseok3.kim + TBM_EXYNOS4412_LOG ("[libtbm-exynos4412:%d] " + "error %s:%d fence list is full\n", + getpid(), __FUNCTION__, __LINE__); + } + } + + pthread_mutex_unlock(&bo_exynos4412->mutex); + + DBG ("[libtbm-exynos4412:%d] %s DMABUF_IOCTL_GET_FENCE! flink_id=%d dmabuf=%d\n", getpid(), + __FUNCTION__, bo_exynos4412->name, bo_exynos4412->dmabuf); + + return 1; +} + +static int +tbm_exynos4412_bo_unlock(tbm_bo bo) +{ + EXYNOS4412_RETURN_VAL_IF_FAIL (bo!=NULL, 0); + + tbm_bo_exynos4412 bo_exynos4412; + struct dma_buf_fence fence; + struct flock filelock; + unsigned int dma_type = 0; + int ret=0; + + bo_exynos4412 = (tbm_bo_exynos4412)tbm_backend_get_bo_priv(bo); + EXYNOS4412_RETURN_VAL_IF_FAIL (bo_exynos4412!=NULL, 0); + + if (bo_exynos4412->dma_fence[0].type & DMA_BUF_ACCESS_DMA) + dma_type = 1; + + if (!bo_exynos4412->dma_fence[0].ctx && dma_type) + { + DBG ("[libtbm-exynos4412:%d] %s FENCE not support or ignored,\n", getpid(), __FUNCTION__); + return 0; + } + + if (!bo_exynos4412->dma_fence[0].ctx && dma_type) + { + DBG ("[libtbm-exynos4412:%d] %s device type is not 3D/CPU,\n", getpid(), __FUNCTION__); + return 0; + } + + pthread_mutex_lock(&bo_exynos4412->mutex); + + if (dma_type) + { + fence.type = bo_exynos4412->dma_fence[0].type; + fence.ctx = bo_exynos4412->dma_fence[0].ctx; + int i; + for (i = 1; i < DMA_FENCE_LIST_MAX; i++) + { + bo_exynos4412->dma_fence[i-1].type = bo_exynos4412->dma_fence[i].type; + bo_exynos4412->dma_fence[i-1].ctx = bo_exynos4412->dma_fence[i].ctx; + } + bo_exynos4412->dma_fence[DMA_FENCE_LIST_MAX-1].type = 0; + bo_exynos4412->dma_fence[DMA_FENCE_LIST_MAX-1].ctx = 0; + } + pthread_mutex_unlock(&bo_exynos4412->mutex); + + if (dma_type) + { + ret = ioctl(bo_exynos4412->dmabuf, DMABUF_IOCTL_PUT_FENCE, &fence); + if (ret < 0) + { + TBM_EXYNOS4412_LOG ("[libtbm-exynos4412:%d] " + "error %s:%d Can not set PUT FENCE(%s)\n", + getpid(), __FUNCTION__, __LINE__, strerror(errno) ); + return 0; + } + } else + { + filelock.l_type = F_UNLCK; + filelock.l_whence = SEEK_CUR; + filelock.l_start = 0; + filelock.l_len = 0; + + if (-1 == fcntl(bo_exynos4412->dmabuf, F_SETLKW, &filelock)) + { + return 0; + } + } + + DBG ("[libtbm-exynos4412:%d] %s DMABUF_IOCTL_PUT_FENCE! flink_id=%d dmabuf=%d\n", getpid(), + __FUNCTION__, bo_exynos4412->name, bo_exynos4412->dmabuf); + + return 1; +} + +static void +tbm_exynos4412_bufmgr_deinit (void *priv) +{ + EXYNOS4412_RETURN_IF_FAIL (priv!=NULL); + + tbm_bufmgr_exynos4412 bufmgr_exynos4412; + + bufmgr_exynos4412 = (tbm_bufmgr_exynos4412)priv; + + if (bufmgr_exynos4412->hashBos) + { + unsigned long key; + void *value; + + while (drmHashFirst(bufmgr_exynos4412->hashBos, &key, &value) > 0) + { + free (value); + drmHashDelete (bufmgr_exynos4412->hashBos, key); + } + + drmHashDestroy (bufmgr_exynos4412->hashBos); + bufmgr_exynos4412->hashBos = NULL; + } + + free (bufmgr_exynos4412); +} + +MODULEINITPPROTO (init_tbm_bufmgr_priv); + +static TBMModuleVersionInfo Exynos4412VersRec = +{ + "exynos4412", + "Samsung", + TBM_ABI_VERSION, +}; + +TBMModuleData tbmModuleData = { &Exynos4412VersRec, init_tbm_bufmgr_priv}; + +int +init_tbm_bufmgr_priv (tbm_bufmgr bufmgr, int fd) +{ + tbm_bufmgr_exynos4412 bufmgr_exynos4412; + tbm_bufmgr_backend bufmgr_backend; + + if (!bufmgr) + return 0; + + bufmgr_exynos4412 = calloc (1, sizeof(struct _tbm_bufmgr_exynos4412)); + if (!bufmgr_exynos4412) + { + TBM_EXYNOS4412_LOG ("[libtbm-exynos4412:%d] error: Fail to alloc bufmgr_exynos4412!\n", getpid()); + return 0; + } + + bufmgr_exynos4412->fd = fd; + if (bufmgr_exynos4412->fd < 0) + { + TBM_EXYNOS4412_LOG ("[libtbm-exynos4412:%d] error: Fail to create drm!\n", getpid()); + free (bufmgr_exynos4412); + return 0; + } + + //Create Hash Table + bufmgr_exynos4412->hashBos = drmHashCreate (); + + //Check if the tbm manager supports dma fence or not. + int fp = open("/sys/module/dmabuf_sync/parameters/enabled", O_RDONLY); + int length; + char buf[1]; + if (fp != -1) + { + length = read(fp, buf, 1); + + if (length == 1 && buf[0] == '1') + bufmgr_exynos4412->use_dma_fence = 1; + + close(fp); + } + + bufmgr_backend = tbm_backend_alloc(); + if (!bufmgr_backend) + { + TBM_EXYNOS4412_LOG ("[libtbm-exynos4412:%d] error: Fail to create drm!\n", getpid()); + free (bufmgr_exynos4412); + return 0; + } + + bufmgr_backend->priv = (void *)bufmgr_exynos4412; + bufmgr_backend->bufmgr_deinit = tbm_exynos4412_bufmgr_deinit, + bufmgr_backend->bo_size = tbm_exynos4412_bo_size, + bufmgr_backend->bo_alloc = tbm_exynos4412_bo_alloc, + bufmgr_backend->bo_free = tbm_exynos4412_bo_free, + bufmgr_backend->bo_import = tbm_exynos4412_bo_import, + bufmgr_backend->bo_export = tbm_exynos4412_bo_export, + bufmgr_backend->bo_get_handle = tbm_exynos4412_bo_get_handle, + bufmgr_backend->bo_map = tbm_exynos4412_bo_map, + bufmgr_backend->bo_unmap = tbm_exynos4412_bo_unmap, + bufmgr_backend->bo_cache_flush = tbm_exynos4412_bo_cache_flush, + bufmgr_backend->bo_get_global_key = tbm_exynos4412_bo_get_global_key; + + if (bufmgr_exynos4412->use_dma_fence) + { + bufmgr_backend->flags = (TBM_LOCK_CTRL_BACKEND | TBM_CACHE_CTRL_BACKEND); + bufmgr_backend->bo_lock = NULL; + bufmgr_backend->bo_lock2 = tbm_exynos4412_bo_lock; + bufmgr_backend->bo_unlock = tbm_exynos4412_bo_unlock; + } + else + { + bufmgr_backend->flags = 0; + bufmgr_backend->bo_lock = NULL; + bufmgr_backend->bo_unlock = NULL; + } + + if (!tbm_backend_init (bufmgr, bufmgr_backend)) + { + TBM_EXYNOS4412_LOG ("[libtbm-exynos4412:%d] error: Fail to init backend!\n", getpid()); + tbm_backend_free (bufmgr_backend); + free (bufmgr_exynos4412); + return 0; + } + +#ifdef DEBUG + { + char* env; + env = getenv ("TBM_EXYNOS4412_DEBUG"); + if (env) + { + bDebug = atoi (env); + TBM_EXYNOS4412_LOG ("TBM_EXYNOS4412_DEBUG=%s\n", env); + } + else + { + bDebug = 0; + } + } +#endif + + DBG ("[libtbm-exynos4412:%d] %s DMABUF FENCE is %s\n", getpid(), + __FUNCTION__, bufmgr_exynos4412->use_dma_fence ? "supported!" : "NOT supported!"); + + DBG ("[libtbm-exynos4412:%d] %s fd:%d\n", getpid(), + __FUNCTION__, bufmgr_exynos4412->fd); + + return 1; +} + + -- 2.7.4 From a7e2978cf6107b783a8b665db0c8acf701a1e4e7 Mon Sep 17 00:00:00 2001 From: SooChan Lim Date: Mon, 18 Aug 2014 10:47:11 +0900 Subject: [PATCH 07/15] version up Change-Id: I0ade6bddf13d74766692b84b66903543be94d63f --- configure.ac | 2 +- packaging/libtbm-exynos4412.spec | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index a0d26ed..112e12a 100644 --- a/configure.ac +++ b/configure.ac @@ -18,7 +18,7 @@ # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. AC_PREREQ(2.60) -AC_INIT(libtbm-exynos4412, 1.0.0) +AC_INIT(libtbm-exynos4412, 1.0.5) AC_USE_SYSTEM_EXTENSIONS AC_CONFIG_SRCDIR([Makefile.am]) AM_INIT_AUTOMAKE([dist-bzip2]) diff --git a/packaging/libtbm-exynos4412.spec b/packaging/libtbm-exynos4412.spec index 1ef54df..539741c 100644 --- a/packaging/libtbm-exynos4412.spec +++ b/packaging/libtbm-exynos4412.spec @@ -2,7 +2,7 @@ Name: libtbm-exynos4412 Version: 1.0.5 Release: 1 License: MIT -Summary: The exynos4412 tbm backend +Summary: Tizen Buffer Manager - exynos4412 backend Group: System/Libraries ExcludeArch: i586 Source0: %{name}-%{version}.tar.gz -- 2.7.4 From c97911394517d41659619e0bb0a355acf1c1cabc Mon Sep 17 00:00:00 2001 From: SooChan Lim Date: Mon, 25 Aug 2014 15:19:21 +0900 Subject: [PATCH 08/15] add the code for supporting the tbm_surface Change-Id: I6b3280a882cf07ec4b2c2c3ba1bb275ff7027474 --- configure.ac | 5 +- packaging/libtbm-exynos4412.spec | 1 + src/tbm_bufmgr_exynos4412.c | 515 ++++++++++++++++++++++++++++++++++++++- 3 files changed, 515 insertions(+), 6 deletions(-) diff --git a/configure.ac b/configure.ac index 112e12a..37bf4f4 100644 --- a/configure.ac +++ b/configure.ac @@ -39,6 +39,7 @@ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) PKG_CHECK_MODULES(LIBDRM, libdrm) PKG_CHECK_MODULES(LIBDRM_EXYNOS, libdrm_exynos) PKG_CHECK_MODULES(LIBTBM, libtbm) +PKG_CHECK_MODULES(DLOG, dlog) AC_ARG_ENABLE(cachectrl, AS_HELP_STRING([--enable-cache-crtl], @@ -49,8 +50,8 @@ if test "x$CACHE_CTRL" = xyes; then AC_DEFINE(ENABLE_CACHECRTL, 1, [Enable cache control]) fi -LIBTBM_EXYNOS4412_CFLAGS="$LIBDRM_CFLAGS $LIBDRM_EXYNOS_CFLAGS $LIBTBM_CFLAGS " -LIBTBM_EXYNOS4412_LIBS="$LIBDRM_LIBS $LIBDRM_EXYNOS_LIBS $LIBTBM_LIBS " +LIBTBM_EXYNOS4412_CFLAGS="$LIBDRM_CFLAGS $LIBDRM_EXYNOS_CFLAGS $LIBTBM_CFLAGS $DLOG_CFLAGS " +LIBTBM_EXYNOS4412_LIBS="$LIBDRM_LIBS $LIBDRM_EXYNOS_LIBS $LIBTBM_LIBS $DLOG_LIBS " AC_SUBST(LIBTBM_EXYNOS4412_CFLAGS) AC_SUBST(LIBTBM_EXYNOS4412_LIBS) diff --git a/packaging/libtbm-exynos4412.spec b/packaging/libtbm-exynos4412.spec index 539741c..5e7b391 100644 --- a/packaging/libtbm-exynos4412.spec +++ b/packaging/libtbm-exynos4412.spec @@ -11,6 +11,7 @@ BuildRequires: pkgconfig(pthread-stubs) BuildRequires: pkgconfig(libdrm) BuildRequires: pkgconfig(libdrm_exynos) BuildRequires: pkgconfig(libtbm) +BuildRequires: pkgconfig(dlog) %description descriptionion: Tizen Buffer manager backend module for exynos4412 diff --git a/src/tbm_bufmgr_exynos4412.c b/src/tbm_bufmgr_exynos4412.c index 259edee..9f47379 100755 --- a/src/tbm_bufmgr_exynos4412.c +++ b/src/tbm_bufmgr_exynos4412.c @@ -46,20 +46,71 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include #include #include -#include "exynos_drm.h" +#include #include +#include +#include #define DEBUG #define USE_DMAIMPORT -#define TBM_EXYNOS4412_LOG(...) fprintf (stderr, __VA_ARGS__) +#define TBM_COLOR_FORMAT_COUNT 8 #ifdef DEBUG -static int bDebug = 0; -#define DBG(...) if(bDebug&0x1) TBM_EXYNOS4412_LOG (__VA_ARGS__) +#define LOG_TAG "TBM_BACKEND" +#include +static int bDebug=0; + +char* target_name() +{ + FILE *f; + char *slash; + static int initialized = 0; + static char app_name[128]; + + if ( initialized ) + return app_name; + + /* get the application name */ + f = fopen("/proc/self/cmdline", "r"); + + if ( !f ) + { + return 0; + } + + memset(app_name, 0x00, sizeof(app_name)); + + if ( fgets(app_name, 100, f) == NULL ) + { + fclose(f); + return 0; + } + + fclose(f); + + if ( (slash=strrchr(app_name, '/')) != NULL ) + { + memmove(app_name, slash+1, strlen(slash)); + } + + initialized = 1; + + return app_name; +} +#define TBM_EXYNOS4412_LOG(fmt, args...) LOGE("\033[31m" "[%s]" fmt "\033[0m", target_name(), ##args) +#define DBG(fmt, args...) if(bDebug&01) LOGE("[%s]" fmt, target_name(), ##args) #else +#define TBM_EXYNOS4412_LOG(...) #define DBG(...) #endif +#define SIZE_ALIGN( value, base ) (((value) + ((base) - 1)) & ~((base) - 1)) + +#define TBM_SURFACE_ALIGNMENT_PLANE (64) +#define TBM_SURFACE_ALIGNMENT_PITCH_RGB (64) +#define TBM_SURFACE_ALIGNMENT_PITCH_YUV (16) + + /* check condition */ #define EXYNOS4412_RETURN_IF_FAIL(cond) {\ if (!(cond)) {\ @@ -160,6 +211,17 @@ char *STR_OPT[]= "RDWR" }; + +uint32_t tbm_exynos4412_color_format_list[TBM_COLOR_FORMAT_COUNT] = { TBM_FORMAT_RGBA8888, + TBM_FORMAT_BGRA8888, + TBM_FORMAT_RGBX8888, + TBM_FORMAT_RGB888, + TBM_FORMAT_NV12, + TBM_FORMAT_NV21, + TBM_FORMAT_YUV420, + TBM_FORMAT_YVU420 }; + + static unsigned int _get_exynos_flag_from_tbm (unsigned int ftbm) { @@ -1006,6 +1068,448 @@ tbm_exynos4412_bufmgr_deinit (void *priv) free (bufmgr_exynos4412); } +int +tbm_exynos4412_surface_supported_format(uint32_t **formats, uint32_t *num) +{ + uint32_t* color_formats=NULL; + + color_formats = (uint32_t*)calloc (1,sizeof(uint32_t)*TBM_COLOR_FORMAT_COUNT); + + if( color_formats == NULL ) + { + return 0; + } + memcpy( color_formats, tbm_exynos4412_color_format_list , sizeof(uint32_t)*TBM_COLOR_FORMAT_COUNT ); + + + *formats = color_formats; + *num = TBM_COLOR_FORMAT_COUNT; + + fprintf (stderr, "tbm_exynos4412_surface_supported_format count = %d \n",*num); + + return 1; +} + + +/** + * @brief get the plane data of the surface. + * @param[in] surface : the surface + * @param[in] width : the width of the surface + * @param[in] height : the height of the surface + * @param[in] format : the format of the surface + * @param[in] plane_idx : the format of the surface + * @param[out] size : the size of the plane + * @param[out] offset : the offset of the plane + * @param[out] pitch : the pitch of the plane + * @param[out] padding : the padding of the plane + * @return 1 if this function succeeds, otherwise 0. + */ +int +tbm_exynos4412_surface_get_plane_data(tbm_surface_h surface, int width, int height, tbm_format format, int plane_idx, uint32_t *size, uint32_t *offset, uint32_t *pitch) +{ + int ret = 1; + int bpp; + int _offset =0; + int _pitch =0; + int _size =0; + + + switch(format) + { + /* 16 bpp RGB */ + case TBM_FORMAT_XRGB4444: + case TBM_FORMAT_XBGR4444: + case TBM_FORMAT_RGBX4444: + case TBM_FORMAT_BGRX4444: + case TBM_FORMAT_ARGB4444: + case TBM_FORMAT_ABGR4444: + case TBM_FORMAT_RGBA4444: + case TBM_FORMAT_BGRA4444: + case TBM_FORMAT_XRGB1555: + case TBM_FORMAT_XBGR1555: + case TBM_FORMAT_RGBX5551: + case TBM_FORMAT_BGRX5551: + case TBM_FORMAT_ARGB1555: + case TBM_FORMAT_ABGR1555: + case TBM_FORMAT_RGBA5551: + case TBM_FORMAT_BGRA5551: + case TBM_FORMAT_RGB565: + bpp = 16; + _offset = 0; + _pitch = SIZE_ALIGN((width*bpp)>>3,TBM_SURFACE_ALIGNMENT_PITCH_RGB); + _size = SIZE_ALIGN(_pitch*height,TBM_SURFACE_ALIGNMENT_PLANE); + break; + /* 24 bpp RGB */ + case TBM_FORMAT_RGB888: + case TBM_FORMAT_BGR888: + bpp = 24; + _offset = 0; + _pitch = SIZE_ALIGN((width*bpp)>>3,TBM_SURFACE_ALIGNMENT_PITCH_RGB); + _size = SIZE_ALIGN(_pitch*height,TBM_SURFACE_ALIGNMENT_PLANE); + break; + /* 32 bpp RGB */ + case TBM_FORMAT_XRGB8888: + case TBM_FORMAT_XBGR8888: + case TBM_FORMAT_RGBX8888: + case TBM_FORMAT_BGRX8888: + case TBM_FORMAT_ARGB8888: + case TBM_FORMAT_ABGR8888: + case TBM_FORMAT_RGBA8888: + case TBM_FORMAT_BGRA8888: + bpp = 32; + _offset = 0; + _pitch = SIZE_ALIGN((width*bpp)>>3,TBM_SURFACE_ALIGNMENT_PITCH_RGB); + _size = SIZE_ALIGN(_pitch*height,TBM_SURFACE_ALIGNMENT_PLANE); + break; + + /* packed YCbCr */ + case TBM_FORMAT_YUYV: + case TBM_FORMAT_YVYU: + case TBM_FORMAT_UYVY: + case TBM_FORMAT_VYUY: + case TBM_FORMAT_AYUV: + bpp = 32; + _offset = 0; + _pitch = SIZE_ALIGN((width*bpp)>>3,TBM_SURFACE_ALIGNMENT_PITCH_YUV); + _size = SIZE_ALIGN(_pitch*height,TBM_SURFACE_ALIGNMENT_PLANE); + break; + + /* + * 2 plane YCbCr + * index 0 = Y plane, [7:0] Y + * index 1 = Cr:Cb plane, [15:0] Cr:Cb little endian + * or + * index 1 = Cb:Cr plane, [15:0] Cb:Cr little endian + */ + case TBM_FORMAT_NV12: + case TBM_FORMAT_NV21: + bpp = 12; + if(plane_idx == 0) + { + _offset = 0; + _pitch = SIZE_ALIGN( width ,TBM_SURFACE_ALIGNMENT_PITCH_YUV); + _size = SIZE_ALIGN(_pitch*height,TBM_SURFACE_ALIGNMENT_PLANE); + } + else if( plane_idx ==1 ) + { + _offset = width*height; + _pitch = SIZE_ALIGN( width ,TBM_SURFACE_ALIGNMENT_PITCH_YUV/2); + _size = SIZE_ALIGN(_pitch*(height/2),TBM_SURFACE_ALIGNMENT_PLANE); + } + break; + + case TBM_FORMAT_NV16: + case TBM_FORMAT_NV61: + bpp = 16; + //if(plane_idx == 0) + { + _offset = 0; + _pitch = SIZE_ALIGN(width,TBM_SURFACE_ALIGNMENT_PITCH_YUV); + _size = SIZE_ALIGN(_pitch*height,TBM_SURFACE_ALIGNMENT_PLANE); + if(plane_idx == 0) + break; + } + //else if( plane_idx ==1 ) + { + _offset += _size; + _pitch = SIZE_ALIGN(width,TBM_SURFACE_ALIGNMENT_PITCH_YUV/2); + _size = SIZE_ALIGN(_pitch*height,TBM_SURFACE_ALIGNMENT_PLANE); + } + break; + + /* + * 3 plane YCbCr + * index 0: Y plane, [7:0] Y + * index 1: Cb plane, [7:0] Cb + * index 2: Cr plane, [7:0] Cr + * or + * index 1: Cr plane, [7:0] Cr + * index 2: Cb plane, [7:0] Cb + */ + /* + NATIVE_BUFFER_FORMAT_YV12 + NATIVE_BUFFER_FORMAT_I420 + */ + case TBM_FORMAT_YUV410: + case TBM_FORMAT_YVU410: + bpp = 9; + break; + case TBM_FORMAT_YUV411: + case TBM_FORMAT_YVU411: + case TBM_FORMAT_YUV420: + case TBM_FORMAT_YVU420: + bpp = 12; + //if(plane_idx == 0) + { + _offset = 0; + _pitch = SIZE_ALIGN(width,TBM_SURFACE_ALIGNMENT_PITCH_YUV); + _size = SIZE_ALIGN(_pitch*height,TBM_SURFACE_ALIGNMENT_PLANE); + if(plane_idx == 0) + break; + } + //else if( plane_idx == 1 ) + { + _offset += _size; + _pitch = SIZE_ALIGN(width/2,TBM_SURFACE_ALIGNMENT_PITCH_YUV/2); + _size = SIZE_ALIGN(_pitch*(height/2),TBM_SURFACE_ALIGNMENT_PLANE); + if(plane_idx == 1) + break; + } + //else if (plane_idx == 2 ) + { + _offset += _size; + _pitch = SIZE_ALIGN(width/2,TBM_SURFACE_ALIGNMENT_PITCH_YUV/2); + _size = SIZE_ALIGN(_pitch*(height/2),TBM_SURFACE_ALIGNMENT_PLANE); + } + break; + case TBM_FORMAT_YUV422: + case TBM_FORMAT_YVU422: + bpp = 16; + //if(plane_idx == 0) + { + _offset = 0; + _pitch = SIZE_ALIGN(width,TBM_SURFACE_ALIGNMENT_PITCH_YUV); + _size = SIZE_ALIGN(_pitch*height,TBM_SURFACE_ALIGNMENT_PLANE); + if(plane_idx == 0) + break; + } + //else if( plane_idx == 1 ) + { + _offset += _size; + _pitch = SIZE_ALIGN(width/2,TBM_SURFACE_ALIGNMENT_PITCH_YUV/2); + _size = SIZE_ALIGN(_pitch*(height),TBM_SURFACE_ALIGNMENT_PLANE); + if(plane_idx == 1) + break; + } + //else if (plane_idx == 2 ) + { + _offset += _size; + _pitch = SIZE_ALIGN(width/2,TBM_SURFACE_ALIGNMENT_PITCH_YUV/2); + _size = SIZE_ALIGN(_pitch*(height),TBM_SURFACE_ALIGNMENT_PLANE); + } + break; + case TBM_FORMAT_YUV444: + case TBM_FORMAT_YVU444: + bpp = 24; + //if(plane_idx == 0) + { + _offset = 0; + _pitch = SIZE_ALIGN(width,TBM_SURFACE_ALIGNMENT_PITCH_YUV); + _size = SIZE_ALIGN(_pitch*height,TBM_SURFACE_ALIGNMENT_PLANE); + if(plane_idx == 0) + break; + } + //else if( plane_idx == 1 ) + { + _offset += _size; + _pitch = SIZE_ALIGN(width,TBM_SURFACE_ALIGNMENT_PITCH_YUV); + _size = SIZE_ALIGN(_pitch*height,TBM_SURFACE_ALIGNMENT_PLANE); + if(plane_idx == 1) + break; + } + //else if (plane_idx == 2 ) + { + _offset += _size; + _pitch = SIZE_ALIGN(width,TBM_SURFACE_ALIGNMENT_PITCH_YUV); + _size = SIZE_ALIGN(_pitch*height,TBM_SURFACE_ALIGNMENT_PLANE); + } + break; + default: + bpp = 0; + break; + } + + *size = _size; + *offset = _offset; + *pitch = _pitch; + + return ret; +} +/** +* @brief get the size of the surface with a format. +* @param[in] surface : the surface +* @param[in] width : the width of the surface +* @param[in] height : the height of the surface +* @param[in] format : the format of the surface +* @return size of the surface if this function succeeds, otherwise 0. +*/ + +int +tbm_exynos4412_surface_get_size(tbm_surface_h surface, int width, int height, tbm_format format) +{ + int ret = 0; + int bpp = 0; + int _pitch =0; + int _size =0; + int align =TBM_SURFACE_ALIGNMENT_PLANE; + + switch(format) + { + /* 16 bpp RGB */ + case TBM_FORMAT_XRGB4444: + case TBM_FORMAT_XBGR4444: + case TBM_FORMAT_RGBX4444: + case TBM_FORMAT_BGRX4444: + case TBM_FORMAT_ARGB4444: + case TBM_FORMAT_ABGR4444: + case TBM_FORMAT_RGBA4444: + case TBM_FORMAT_BGRA4444: + case TBM_FORMAT_XRGB1555: + case TBM_FORMAT_XBGR1555: + case TBM_FORMAT_RGBX5551: + case TBM_FORMAT_BGRX5551: + case TBM_FORMAT_ARGB1555: + case TBM_FORMAT_ABGR1555: + case TBM_FORMAT_RGBA5551: + case TBM_FORMAT_BGRA5551: + case TBM_FORMAT_RGB565: + bpp = 16; + _pitch = SIZE_ALIGN((width*bpp)>>3,TBM_SURFACE_ALIGNMENT_PITCH_RGB); + _size = SIZE_ALIGN(_pitch*height,TBM_SURFACE_ALIGNMENT_PLANE); + break; + /* 24 bpp RGB */ + case TBM_FORMAT_RGB888: + case TBM_FORMAT_BGR888: + bpp = 24; + _pitch = SIZE_ALIGN((width*bpp)>>3,TBM_SURFACE_ALIGNMENT_PITCH_RGB); + _size = SIZE_ALIGN(_pitch*height,TBM_SURFACE_ALIGNMENT_PLANE); + break; + /* 32 bpp RGB */ + case TBM_FORMAT_XRGB8888: + case TBM_FORMAT_XBGR8888: + case TBM_FORMAT_RGBX8888: + case TBM_FORMAT_BGRX8888: + case TBM_FORMAT_ARGB8888: + case TBM_FORMAT_ABGR8888: + case TBM_FORMAT_RGBA8888: + case TBM_FORMAT_BGRA8888: + bpp = 32; + _pitch = SIZE_ALIGN((width*bpp)>>3,TBM_SURFACE_ALIGNMENT_PITCH_RGB); + _size = SIZE_ALIGN(_pitch*height,TBM_SURFACE_ALIGNMENT_PLANE); + break; + /* packed YCbCr */ + case TBM_FORMAT_YUYV: + case TBM_FORMAT_YVYU: + case TBM_FORMAT_UYVY: + case TBM_FORMAT_VYUY: + case TBM_FORMAT_AYUV: + bpp = 32; + _pitch = SIZE_ALIGN((width*bpp)>>3,TBM_SURFACE_ALIGNMENT_PITCH_YUV); + _size = SIZE_ALIGN(_pitch*height,TBM_SURFACE_ALIGNMENT_PLANE); + break; + /* + * 2 plane YCbCr + * index 0 = Y plane, [7:0] Y + * index 1 = Cr:Cb plane, [15:0] Cr:Cb little endian + * or + * index 1 = Cb:Cr plane, [15:0] Cb:Cr little endian + */ + case TBM_FORMAT_NV12: + case TBM_FORMAT_NV21: + bpp = 12; + //plane_idx == 0 + { + _pitch = SIZE_ALIGN( width ,TBM_SURFACE_ALIGNMENT_PITCH_YUV); + _size = SIZE_ALIGN(_pitch*height,TBM_SURFACE_ALIGNMENT_PLANE); + } + //plane_idx ==1 + { + _pitch = SIZE_ALIGN( width ,TBM_SURFACE_ALIGNMENT_PITCH_YUV/2); + _size += SIZE_ALIGN(_pitch*(height/2),TBM_SURFACE_ALIGNMENT_PLANE); + } + break; + + break; + case TBM_FORMAT_NV16: + case TBM_FORMAT_NV61: + bpp = 16; + //plane_idx == 0 + { + _pitch = SIZE_ALIGN(width,TBM_SURFACE_ALIGNMENT_PITCH_YUV); + _size = SIZE_ALIGN(_pitch*height,TBM_SURFACE_ALIGNMENT_PLANE); + } + //plane_idx ==1 + { + _pitch = SIZE_ALIGN(width,TBM_SURFACE_ALIGNMENT_PITCH_YUV/2); + _size += SIZE_ALIGN(_pitch*height,TBM_SURFACE_ALIGNMENT_PLANE); + } + + break; + /* + * 3 plane YCbCr + * index 0: Y plane, [7:0] Y + * index 1: Cb plane, [7:0] Cb + * index 2: Cr plane, [7:0] Cr + * or + * index 1: Cr plane, [7:0] Cr + * index 2: Cb plane, [7:0] Cb + */ + case TBM_FORMAT_YUV410: + case TBM_FORMAT_YVU410: + bpp = 9; + align = TBM_SURFACE_ALIGNMENT_PITCH_YUV; + break; + case TBM_FORMAT_YUV411: + case TBM_FORMAT_YVU411: + case TBM_FORMAT_YUV420: + case TBM_FORMAT_YVU420: + bpp = 12; + //plane_idx == 0 + { + _pitch = SIZE_ALIGN(width,TBM_SURFACE_ALIGNMENT_PITCH_YUV); + _size = SIZE_ALIGN(_pitch*height,TBM_SURFACE_ALIGNMENT_PLANE); + } + //plane_idx == 1 + { + _pitch = SIZE_ALIGN(width/2,TBM_SURFACE_ALIGNMENT_PITCH_YUV/2); + _size += SIZE_ALIGN(_pitch*(height/2),TBM_SURFACE_ALIGNMENT_PLANE); + } + //plane_idx == 2 + { + _pitch = SIZE_ALIGN(width/2,TBM_SURFACE_ALIGNMENT_PITCH_YUV/2); + _size += SIZE_ALIGN(_pitch*(height/2),TBM_SURFACE_ALIGNMENT_PLANE); + } + + break; + case TBM_FORMAT_YUV422: + case TBM_FORMAT_YVU422: + bpp = 16; + //plane_idx == 0 + { + _pitch = SIZE_ALIGN(width,TBM_SURFACE_ALIGNMENT_PITCH_YUV); + _size = SIZE_ALIGN(_pitch*height,TBM_SURFACE_ALIGNMENT_PLANE); + } + //plane_idx == 1 + { + _pitch = SIZE_ALIGN(width/2,TBM_SURFACE_ALIGNMENT_PITCH_YUV/2); + _size += SIZE_ALIGN(_pitch*height,TBM_SURFACE_ALIGNMENT_PLANE); + } + //plane_idx == 2 + { + _pitch = SIZE_ALIGN(width/2,TBM_SURFACE_ALIGNMENT_PITCH_YUV/2); + _size += SIZE_ALIGN(_pitch*height,TBM_SURFACE_ALIGNMENT_PLANE); + } + break; + case TBM_FORMAT_YUV444: + case TBM_FORMAT_YVU444: + bpp = 24; + align = TBM_SURFACE_ALIGNMENT_PITCH_YUV; + break; + + default: + bpp = 0; + break; + } + + if(_size > 0) + ret = _size; + else + ret = SIZE_ALIGN( (width * height * bpp) >> 3, align); + + return ret; + +} + MODULEINITPPROTO (init_tbm_bufmgr_priv); static TBMModuleVersionInfo Exynos4412VersRec = @@ -1078,6 +1582,9 @@ init_tbm_bufmgr_priv (tbm_bufmgr bufmgr, int fd) bufmgr_backend->bo_unmap = tbm_exynos4412_bo_unmap, bufmgr_backend->bo_cache_flush = tbm_exynos4412_bo_cache_flush, bufmgr_backend->bo_get_global_key = tbm_exynos4412_bo_get_global_key; + bufmgr_backend->surface_get_plane_data = tbm_exynos4412_surface_get_plane_data; + bufmgr_backend->surface_get_size = tbm_exynos4412_surface_get_size; + bufmgr_backend->surface_supported_format = tbm_exynos4412_surface_supported_format; if (bufmgr_exynos4412->use_dma_fence) { -- 2.7.4 From 4b9a8fb58812df1b185874f98f606867445a412b Mon Sep 17 00:00:00 2001 From: Roman Marchenko Date: Fri, 26 Sep 2014 16:38:58 +0300 Subject: [PATCH 09/15] add the code for supporting the tbm_fd Change-Id: I4b1db124e57228f6ea1f8696b17ca7e03fb37209 Signed-off-by: Roman Marchenko --- src/tbm_bufmgr_exynos4412.c | 151 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 149 insertions(+), 2 deletions(-) mode change 100755 => 100644 src/tbm_bufmgr_exynos4412.c diff --git a/src/tbm_bufmgr_exynos4412.c b/src/tbm_bufmgr_exynos4412.c old mode 100755 new mode 100644 index 9f47379..24214c2 --- a/src/tbm_bufmgr_exynos4412.c +++ b/src/tbm_bufmgr_exynos4412.c @@ -684,9 +684,121 @@ tbm_exynos4412_bo_import (tbm_bo bo, unsigned int key) getpid(), __FUNCTION__, __LINE__, bo_exynos4412->name); } - DBG ("[libtbm-exynos4412:%d] %s size:%d, gem:%d(%d), flags:%d(%d)\n", getpid(), + DBG ("[libtbm-exynos4412:%d] %s size:%d, gem:%d(%d, %d), flags:%d(%d)\n", getpid(), __FUNCTION__, bo_exynos4412->size, - bo_exynos4412->gem, bo_exynos4412->name, + bo_exynos4412->gem, bo_exynos4412->name, bo_exynos4412->dmabuf, + bo_exynos4412->flags_tbm, bo_exynos4412->flags_exynos); + + return (void *)bo_exynos4412; +} + +static void * +tbm_exynos4412_bo_import_fd (tbm_bo bo, tbm_fd key) +{ + EXYNOS4412_RETURN_VAL_IF_FAIL (bo!=NULL, 0); + + tbm_bufmgr_exynos4412 bufmgr_exynos4412; + tbm_bo_exynos4412 bo_exynos4412; + + bufmgr_exynos4412 = (tbm_bufmgr_exynos4412)tbm_backend_get_bufmgr_priv(bo); + EXYNOS4412_RETURN_VAL_IF_FAIL (bufmgr_exynos4412!=NULL, 0); + + unsigned int gem = 0; + unsigned int real_size = -1; + struct drm_exynos_gem_info info = {0, }; + + //getting handle from fd + struct drm_prime_handle arg = {0, }; + + arg.fd = key; + arg.flags = 0; + if (drmIoctl (bufmgr_exynos4412->fd, DRM_IOCTL_PRIME_FD_TO_HANDLE, &arg)) + { + TBM_EXYNOS4412_LOG ("[libtbm-exynos4412:%d] " + "error %s:%d Cannot getting gem from prime fd=%d\n", + getpid(), __FUNCTION__, __LINE__, arg.fd); + return NULL; + } + gem = arg.handle; + + /* Determine size of bo. The fd-to-handle ioctl really should + * return the size, but it doesn't. If we have kernel 3.12 or + * later, we can lseek on the prime fd to get the size. Older + * kernels will just fail, in which case we fall back to the + * provided (estimated or guess size). */ + real_size = lseek(key, 0, SEEK_END); + + info.handle = gem; + if (drmCommandWriteRead(bufmgr_exynos4412->fd, + DRM_EXYNOS_GEM_GET, + &info, + sizeof(struct drm_exynos_gem_info))) + { + TBM_EXYNOS4412_LOG ("[libtbm-exynos4412:%d] " + "error %s:%d Cannot get gem info=%d\n", + getpid(), __FUNCTION__, __LINE__, key); + return 0; + } + + if (real_size == -1) + real_size = info.size; + + bo_exynos4412 = calloc (1, sizeof(struct _tbm_bo_exynos4412)); + if (!bo_exynos4412) + { + TBM_EXYNOS4412_LOG ("[libtbm-exynos4412:%d] " + "error %s:%d fail to allocate the bo private\n", + getpid(), __FUNCTION__, __LINE__); + return 0; + } + + bo_exynos4412->fd = bufmgr_exynos4412->fd; + bo_exynos4412->gem = gem; + bo_exynos4412->size = real_size; + bo_exynos4412->flags_exynos = info.flags; + bo_exynos4412->flags_tbm = _get_tbm_flag_from_exynos (bo_exynos4412->flags_exynos); + + bo_exynos4412->name = _get_name(bo_exynos4412->fd, bo_exynos4412->gem); + if (!bo_exynos4412->name) + { + TBM_EXYNOS4412_LOG ("[libtbm-exynos4412:%d] " + "error %s:%d Cannot get name\n", + getpid(), __FUNCTION__, __LINE__); + return 0; + } + + bo_exynos4412->dmabuf = (unsigned int)key; + + /* add bo to hash */ + PrivGem *privGem = NULL; + int ret; + + ret = drmHashLookup (bufmgr_exynos4412->hashBos, bo_exynos4412->name, (void**)&privGem); + if (ret == 0) + { + privGem->ref_count++; + } + else if (ret == 1) + { + privGem = calloc (1, sizeof(PrivGem)); + privGem->ref_count = 1; + if (drmHashInsert (bufmgr_exynos4412->hashBos, bo_exynos4412->name, (void *)privGem) < 0) + { + TBM_EXYNOS4412_LOG ("[libtbm-exynos4412:%d] " + "error %s:%d Cannot insert bo to Hash(%d)\n", + getpid(), __FUNCTION__, __LINE__, bo_exynos4412->name); + } + } + else + { + TBM_EXYNOS4412_LOG ("[libtbm-exynos4412:%d] " + "error %s:%d Cannot insert bo to Hash(%d)\n", + getpid(), __FUNCTION__, __LINE__, bo_exynos4412->name); + } + + DBG ("[libtbm-exynos4412:%d] %s size:%d, gem:%d(%d,%d), flags:%d(%d)\n", getpid(), + __FUNCTION__, bo_exynos4412->size, + bo_exynos4412->gem, bo_exynos4412->name, bo_exynos4412->dmabuf, bo_exynos4412->flags_tbm, bo_exynos4412->flags_exynos); return (void *)bo_exynos4412; @@ -722,6 +834,39 @@ tbm_exynos4412_bo_export (tbm_bo bo) return (unsigned int)bo_exynos4412->name; } +tbm_fd +tbm_exynos4412_bo_export_fd (tbm_bo bo) +{ + EXYNOS4412_RETURN_VAL_IF_FAIL (bo!=NULL, 0); + + tbm_bo_exynos4412 bo_exynos4412; + + bo_exynos4412 = (tbm_bo_exynos4412)tbm_backend_get_bo_priv(bo); + EXYNOS4412_RETURN_VAL_IF_FAIL (bo_exynos4412!=NULL, 0); + + if (!bo_exynos4412->dmabuf) + { + struct drm_prime_handle arg = {0, }; + + arg.handle = bo_exynos4412->gem; + if (drmIoctl (bo_exynos4412->fd, DRM_IOCTL_PRIME_HANDLE_TO_FD, &arg)) + { + TBM_EXYNOS4412_LOG ("[libtbm-exynos4412:%d] " + "error %s:%d Cannot dmabuf=%d\n", + getpid(), __FUNCTION__, __LINE__, bo_exynos4412->gem); + return (tbm_fd) NULL; + } + bo_exynos4412->dmabuf = arg.fd; + } + + DBG ("[libtbm-exynos4412:%d] %s size:%d, gem:%d(%d, %d), flags:%d(%d)\n", getpid(), + __FUNCTION__, bo_exynos4412->size, + bo_exynos4412->gem, bo_exynos4412->name, bo_exynos4412->dmabuf, + bo_exynos4412->flags_tbm, bo_exynos4412->flags_exynos); + + return (tbm_fd)bo_exynos4412->dmabuf; +} + static tbm_bo_handle tbm_exynos4412_bo_get_handle (tbm_bo bo, int device) { @@ -1576,7 +1721,9 @@ init_tbm_bufmgr_priv (tbm_bufmgr bufmgr, int fd) bufmgr_backend->bo_alloc = tbm_exynos4412_bo_alloc, bufmgr_backend->bo_free = tbm_exynos4412_bo_free, bufmgr_backend->bo_import = tbm_exynos4412_bo_import, + bufmgr_backend->bo_import_fd = tbm_exynos4412_bo_import_fd, bufmgr_backend->bo_export = tbm_exynos4412_bo_export, + bufmgr_backend->bo_export_fd = tbm_exynos4412_bo_export_fd, bufmgr_backend->bo_get_handle = tbm_exynos4412_bo_get_handle, bufmgr_backend->bo_map = tbm_exynos4412_bo_map, bufmgr_backend->bo_unmap = tbm_exynos4412_bo_unmap, -- 2.7.4 From 705d30370726a7f25dec9d726a0b0591a04332b6 Mon Sep 17 00:00:00 2001 From: SooChan Lim Date: Wed, 17 Dec 2014 14:47:49 +0900 Subject: [PATCH 10/15] fix -Werror=int-to-pointer-cast, -Werror=pointer-to-int-cast error at 64bits system Change-Id: Ib4ae382e5e34c700d13568c2080c331304881fc1 --- packaging/libtbm-exynos4412.spec | 2 +- src/tbm_bufmgr_exynos4412.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packaging/libtbm-exynos4412.spec b/packaging/libtbm-exynos4412.spec index 5e7b391..4142fee 100644 --- a/packaging/libtbm-exynos4412.spec +++ b/packaging/libtbm-exynos4412.spec @@ -1,6 +1,6 @@ Name: libtbm-exynos4412 Version: 1.0.5 -Release: 1 +Release: 2 License: MIT Summary: Tizen Buffer Manager - exynos4412 backend Group: System/Libraries diff --git a/src/tbm_bufmgr_exynos4412.c b/src/tbm_bufmgr_exynos4412.c index 24214c2..cd6b28d 100644 --- a/src/tbm_bufmgr_exynos4412.c +++ b/src/tbm_bufmgr_exynos4412.c @@ -305,7 +305,7 @@ _exynos4412_bo_handle (tbm_bo_exynos4412 bo_exynos4412, int device) getpid(), __FUNCTION__, __LINE__, bo_exynos4412->gem); return (tbm_bo_handle) NULL; } - bo_exynos4412->pBase = (void*)((uint32_t)arg.mapped); + bo_exynos4412->pBase = (void*)((uint64_t)arg.mapped); } bo_handle.ptr = (void *)bo_exynos4412->pBase; @@ -854,7 +854,7 @@ tbm_exynos4412_bo_export_fd (tbm_bo bo) TBM_EXYNOS4412_LOG ("[libtbm-exynos4412:%d] " "error %s:%d Cannot dmabuf=%d\n", getpid(), __FUNCTION__, __LINE__, bo_exynos4412->gem); - return (tbm_fd) NULL; + return (tbm_fd) 0; } bo_exynos4412->dmabuf = arg.fd; } -- 2.7.4 From d2e9b801c2546ef35dafd21363f0485815c3c5cb Mon Sep 17 00:00:00 2001 From: Changyeon Lee Date: Wed, 17 Dec 2014 19:19:20 +0900 Subject: [PATCH 11/15] Fix type cast Change-Id: I76585a1f8f6f2fb49dbe5c14facda147798788fb --- src/tbm_bufmgr_exynos4412.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tbm_bufmgr_exynos4412.c b/src/tbm_bufmgr_exynos4412.c index cd6b28d..2ceabc2 100644 --- a/src/tbm_bufmgr_exynos4412.c +++ b/src/tbm_bufmgr_exynos4412.c @@ -305,7 +305,7 @@ _exynos4412_bo_handle (tbm_bo_exynos4412 bo_exynos4412, int device) getpid(), __FUNCTION__, __LINE__, bo_exynos4412->gem); return (tbm_bo_handle) NULL; } - bo_exynos4412->pBase = (void*)((uint64_t)arg.mapped); + bo_exynos4412->pBase = (void*)((unsigned int)arg.mapped); } bo_handle.ptr = (void *)bo_exynos4412->pBase; -- 2.7.4 From ebfe781ab02c30d1811d8f97b5a704ffe8a33dcb Mon Sep 17 00:00:00 2001 From: Changyeon Lee Date: Wed, 17 Dec 2014 20:21:04 +0900 Subject: [PATCH 12/15] Fix type casting error at 64bit system Change-Id: Ic942460148bbb758d07734df6a0f40a77d64f032 --- src/tbm_bufmgr_exynos4412.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tbm_bufmgr_exynos4412.c b/src/tbm_bufmgr_exynos4412.c index 2ceabc2..7cf4a6e 100644 --- a/src/tbm_bufmgr_exynos4412.c +++ b/src/tbm_bufmgr_exynos4412.c @@ -305,7 +305,7 @@ _exynos4412_bo_handle (tbm_bo_exynos4412 bo_exynos4412, int device) getpid(), __FUNCTION__, __LINE__, bo_exynos4412->gem); return (tbm_bo_handle) NULL; } - bo_exynos4412->pBase = (void*)((unsigned int)arg.mapped); + bo_exynos4412->pBase = (void*)((unsigned long)arg.mapped); } bo_handle.ptr = (void *)bo_exynos4412->pBase; -- 2.7.4 From a7e69c25a2c97df27732c008de813ae7f7aca9c1 Mon Sep 17 00:00:00 2001 From: Changyeon Lee Date: Fri, 19 Dec 2014 16:00:05 +0900 Subject: [PATCH 13/15] Fix cache control configuration Change-Id: Id46aef7e7503a2748fd2de37f88c813f0eb81cd4 Signed-off-by: Changyeon Lee --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 37bf4f4..d2c8030 100644 --- a/configure.ac +++ b/configure.ac @@ -42,7 +42,7 @@ PKG_CHECK_MODULES(LIBTBM, libtbm) PKG_CHECK_MODULES(DLOG, dlog) AC_ARG_ENABLE(cachectrl, - AS_HELP_STRING([--enable-cache-crtl], + AS_HELP_STRING([--enable-cachecrtl], [Enable cache control (default: enable)]), [CACHE_CTRL=$enableval], [CACHE_CTRL=yes]) -- 2.7.4 From 89adceef2c29073fcadc033fe1d16be89bad1f25 Mon Sep 17 00:00:00 2001 From: Changyeon Lee Date: Wed, 7 Jan 2015 18:57:41 +0900 Subject: [PATCH 14/15] Fix cache control configure name Change-Id: Id58c9954eff46121cdb60f3f5bb6be5a3735bc66 --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index d2c8030..37b3f99 100644 --- a/configure.ac +++ b/configure.ac @@ -42,7 +42,7 @@ PKG_CHECK_MODULES(LIBTBM, libtbm) PKG_CHECK_MODULES(DLOG, dlog) AC_ARG_ENABLE(cachectrl, - AS_HELP_STRING([--enable-cachecrtl], + AS_HELP_STRING([--enable-cachectrl], [Enable cache control (default: enable)]), [CACHE_CTRL=$enableval], [CACHE_CTRL=yes]) -- 2.7.4 From d4734dbead1ab3dfab42cfc8e21a45e42856f1a7 Mon Sep 17 00:00:00 2001 From: Changyeon Lee Date: Wed, 7 Jan 2015 19:12:06 +0900 Subject: [PATCH 15/15] Pacakge version up Change-Id: I1d22ab4b99a4ac2f7a3caa586f275cb7e9fc7239 --- packaging/libtbm-exynos4412.spec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packaging/libtbm-exynos4412.spec b/packaging/libtbm-exynos4412.spec index 4142fee..924aec4 100644 --- a/packaging/libtbm-exynos4412.spec +++ b/packaging/libtbm-exynos4412.spec @@ -1,6 +1,6 @@ Name: libtbm-exynos4412 -Version: 1.0.5 -Release: 2 +Version: 1.0.6 +Release: 1 License: MIT Summary: Tizen Buffer Manager - exynos4412 backend Group: System/Libraries -- 2.7.4