aboutsummaryrefslogtreecommitdiffstats
path: root/extras/recipes-ti
diff options
context:
space:
mode:
Diffstat (limited to 'extras/recipes-ti')
-rw-r--r--extras/recipes-ti/bios/ti-biosutils.inc18
-rw-r--r--extras/recipes-ti/bios/ti-biosutils_1.02.02.bb8
-rw-r--r--extras/recipes-ti/bios/ti-dspbios.inc25
-rw-r--r--extras/recipes-ti/bios/ti-dspbios_5.41.11.38.bb7
-rw-r--r--extras/recipes-ti/bios/ti-sysbios.inc21
-rw-r--r--extras/recipes-ti/bios/ti-sysbios_6.33.00.19.bb9
-rw-r--r--extras/recipes-ti/c6accel/ti-c6accel.inc89
-rw-r--r--extras/recipes-ti/c6accel/ti-c6accel/0001-soc-honour-buildsystem-CFLAGS-and-LDFLAGS-when-set.patch82
-rw-r--r--extras/recipes-ti/c6accel/ti-c6accel/fix-loadmodule.patch81
-rw-r--r--extras/recipes-ti/c6accel/ti-c6accel_1.01.00.06.bb16
-rw-r--r--extras/recipes-ti/codec-engine/ti-codec-engine.inc199
-rw-r--r--extras/recipes-ti/codec-engine/ti-codec-engine/bypass-GCArmv5T-used-is-sealed.patch22
-rw-r--r--extras/recipes-ti/codec-engine/ti-codec-engine/ce-2-26-00-08-Examples-Add-LPM_INSTALL_DIR-packages.patch60
-rw-r--r--extras/recipes-ti/codec-engine/ti-codec-engine/dm365-evm/loadmodules.sh49
-rw-r--r--extras/recipes-ti/codec-engine/ti-codec-engine/loadmodules-ti-codec-engine-apps.sh37
-rw-r--r--extras/recipes-ti/codec-engine/ti-codec-engine/unloadmodules-ti-codec-engine-apps.sh12
-rw-r--r--extras/recipes-ti/codec-engine/ti-codec-engine_2.26.02.11.bb10
-rw-r--r--extras/recipes-ti/codec-engine/ti-codecs-omap3530/disable-c6accel.diff47
-rw-r--r--extras/recipes-ti/codec-engine/ti-codecs-omap3530/mp3dec_cs1omap3530.patch41
-rw-r--r--extras/recipes-ti/codec-engine/ti-codecs-omap3530_4.00.00.00.bb208
-rw-r--r--extras/recipes-ti/devtools/ti-cgt470.inc24
-rw-r--r--extras/recipes-ti/devtools/ti-cgt470_4.6.6.bb8
-rw-r--r--extras/recipes-ti/devtools/ti-cgt6x.inc24
-rw-r--r--extras/recipes-ti/devtools/ti-cgt6x_6.1.20.bb11
-rw-r--r--extras/recipes-ti/devtools/ti-cgt6x_7.2.7.bb11
-rw-r--r--extras/recipes-ti/devtools/ti-xdctools.inc62
-rw-r--r--extras/recipes-ti/devtools/ti-xdctools/arm-linker-hack.diff19
-rw-r--r--extras/recipes-ti/devtools/ti-xdctools/fix-hardcoded-paths.diff21
-rw-r--r--extras/recipes-ti/devtools/ti-xdctools_3.23.00.32.bb11
-rw-r--r--extras/recipes-ti/dmai/ti-dmai.inc161
-rw-r--r--extras/recipes-ti/dmai/ti-dmai/arago-tdox210
-rw-r--r--extras/recipes-ti/dmai/ti-dmai/doxygen_templates.tar.gzbin0 -> 8012 bytes
-rwxr-xr-xextras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-apps.sh37
-rwxr-xr-xextras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-dm355_al.sh23
-rw-r--r--extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-dm365_al.sh25
-rwxr-xr-xextras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-dm6446_al.sh19
-rwxr-xr-xextras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-dm6467_al.sh19
-rwxr-xr-xextras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-o3530_al.sh42
-rwxr-xr-xextras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-ol137_al.sh19
-rwxr-xr-xextras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-ol138_al.sh19
-rw-r--r--extras/recipes-ti/dmai/ti-dmai/omap3530-r642-remove-include-videodev.diff64
-rw-r--r--extras/recipes-ti/dmai/ti-dmai/r642-fix-config-bld.diff48
-rw-r--r--extras/recipes-ti/dmai/ti-dmai/unloadmodules-ti-dmai-apps.sh12
-rw-r--r--extras/recipes-ti/dmai/ti-dmai_svn.bb38
-rw-r--r--extras/recipes-ti/dsplink/ti-dsplink.inc211
-rw-r--r--extras/recipes-ti/dsplink/ti-dsplink/0001-remove-check-for-make-version-3.85-works-fine.patch28
-rw-r--r--extras/recipes-ti/dsplink/ti-dsplink/dsplink-BKL-fix.patch71
-rw-r--r--extras/recipes-ti/dsplink/ti-dsplink/dsplink_1_64_add_dm6446_build_support.patch337
-rw-r--r--extras/recipes-ti/dsplink/ti-dsplink/dsplink_1_64_add_omapl137_build_support.patch288
-rw-r--r--extras/recipes-ti/dsplink/ti-dsplink/dsplink_1_64_kernel_2_6_33_autoconf.patch335
-rwxr-xr-xextras/recipes-ti/dsplink/ti-dsplink/ti-dsplink-examples-loadmodules.sh25
-rwxr-xr-xextras/recipes-ti/dsplink/ti-dsplink/ti-dsplink-examples-run.sh25
-rwxr-xr-xextras/recipes-ti/dsplink/ti-dsplink/ti-dsplink-examples-unloadmodules.sh5
-rw-r--r--extras/recipes-ti/dsplink/ti-dsplink_1.65.00.03.bb16
-rw-r--r--extras/recipes-ti/edma3lld/ti-edma3lld.inc23
-rw-r--r--extras/recipes-ti/edma3lld/ti-edma3lld_01.11.01.04.bb9
-rw-r--r--extras/recipes-ti/framework-components/ti-framework-components.inc21
-rw-r--r--extras/recipes-ti/framework-components/ti-framework-components_2.26.00.01.bb8
-rw-r--r--extras/recipes-ti/gstreamer-ti/gstreamer-ti.inc164
-rw-r--r--extras/recipes-ti/gstreamer-ti/gstreamer-ti/0001-add-omapdmaifbsink.patch1336
-rw-r--r--extras/recipes-ti/gstreamer-ti/gstreamer-ti/0003-Support-setting-the-display-framerate-directly-when-.patch86
-rw-r--r--extras/recipes-ti/gstreamer-ti/gstreamer-ti/0004-Cosmetic-cleanup-clarify-some-comments.patch73
-rw-r--r--extras/recipes-ti/gstreamer-ti/gstreamer-ti/0005-Enable-setting-the-framerate-directly-on-DM365.patch33
-rw-r--r--extras/recipes-ti/gstreamer-ti/gstreamer-ti/0006-Remove-the-repeat_with_refresh-feature.patch132
-rw-r--r--extras/recipes-ti/gstreamer-ti/gstreamer-ti/0007-Add-support-for-pad-allocated-buffers-in-TIDmaiVideo.patch313
-rw-r--r--extras/recipes-ti/gstreamer-ti/gstreamer-ti/0008-Add-support-for-pad-allocated-buffers-in-TIViddec2.patch302
-rw-r--r--extras/recipes-ti/gstreamer-ti/gstreamer-ti/0009-dmaisink-compilation-fix.patch26
-rw-r--r--extras/recipes-ti/gstreamer-ti/gstreamer-ti/0009-update-dm365-cfg-to-work-with-platinum-codecs.patch26
-rw-r--r--extras/recipes-ti/gstreamer-ti/gstreamer-ti/0010-replace-omap3530_dv400-platform-support-with-omap353.patch119
-rw-r--r--extras/recipes-ti/gstreamer-ti/gstreamer-ti/dm355-evm/gst-ti.sh12
-rw-r--r--extras/recipes-ti/gstreamer-ti/gstreamer-ti/dm365-evm/loadmodules.sh37
-rw-r--r--extras/recipes-ti/gstreamer-ti/gstreamer-ti/gstreamer-ti-rc.sh28
-rw-r--r--extras/recipes-ti/gstreamer-ti/gstreamer-ti/gstti-init.service10
-rw-r--r--extras/recipes-ti/gstreamer-ti/gstreamer-ti/omap3/loadmodules.sh22
-rw-r--r--extras/recipes-ti/gstreamer-ti/gstreamer-ti/omapl137/loadmodules.sh12
-rw-r--r--extras/recipes-ti/gstreamer-ti/gstreamer-ti/omapl138/da850-omapl138-evm/loadmodules.sh16
-rw-r--r--extras/recipes-ti/gstreamer-ti/gstreamer-ti/omapl138/loadmodules.sh15
-rw-r--r--extras/recipes-ti/gstreamer-ti/gstreamer-ti/r962-remove-include-videodev.diff22
-rw-r--r--extras/recipes-ti/gstreamer-ti/gstreamer-ti_svn.bb26
-rw-r--r--extras/recipes-ti/hdvpss/ti-hdvpss.inc20
-rw-r--r--extras/recipes-ti/hdvpss/ti-hdvpss_01.00.01.27.bb6
-rw-r--r--extras/recipes-ti/ipc/ti-ipc.inc36
-rw-r--r--extras/recipes-ti/ipc/ti-ipc/ipc.pc8
-rw-r--r--extras/recipes-ti/ipc/ti-ipc_1.24.00.16.bb8
-rw-r--r--extras/recipes-ti/linuxutils/ti-linuxutils.inc93
-rw-r--r--extras/recipes-ti/linuxutils/ti-linuxutils/linuxutils-BKL-fix-2.patch22
-rw-r--r--extras/recipes-ti/linuxutils/ti-linuxutils/linuxutils-BKL-fix.patch73
-rw-r--r--extras/recipes-ti/linuxutils/ti-linuxutils_2.26.01.02.bb10
-rw-r--r--extras/recipes-ti/local-power-manager/ti-local-power-manager.inc133
-rw-r--r--extras/recipes-ti/local-power-manager/ti-local-power-manager/lpm-1_24_01-replace-define-OPT.patch24
-rw-r--r--extras/recipes-ti/local-power-manager/ti-local-power-manager/lpm-BKL-fix.patch72
-rw-r--r--extras/recipes-ti/local-power-manager/ti-local-power-manager_1.24.02.09.bb10
-rw-r--r--extras/recipes-ti/msp430/ti-msp430-chronos_1.05.00.00.bb55
-rw-r--r--extras/recipes-ti/syslink/ti-syslink.inc241
-rw-r--r--extras/recipes-ti/syslink/ti-syslink/syslink.pc10
-rw-r--r--extras/recipes-ti/syslink/ti-syslink_2.00.00.78.bb8
-rw-r--r--extras/recipes-ti/xdais/ti-xdais.inc21
-rw-r--r--extras/recipes-ti/xdais/ti-xdais_6.26.01.03.bb8
98 files changed, 7038 insertions, 0 deletions
diff --git a/extras/recipes-ti/bios/ti-biosutils.inc b/extras/recipes-ti/bios/ti-biosutils.inc
new file mode 100644
index 00000000..d562c2dd
--- /dev/null
+++ b/extras/recipes-ti/bios/ti-biosutils.inc
@@ -0,0 +1,18 @@
+DESCRIPTION = "TI DSP/BIOS Utilities"
+HOMEPAGE = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/Bios_Utils"
+SECTION = "devel"
+LICENSE = "TI"
+LIC_FILES_CHKSUM = "file://packages/ti/bios/utils/Load.c;md5=e666d585907c3456e82b7e10f7a09a73"
+
+require ../includes/ti-paths.inc
+require ../includes/ti-staging.inc
+
+S = "${WORKDIR}/biosutils_${PV}"
+
+SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/Bios_Utils/${PV}${PVsuffix}/exports/biosutils_${PV}.tar.gz;name=biosutilstarball"
+
+do_install() {
+ install -d ${D}${BIOSUTILS_INSTALL_DIR_RECIPE}
+ cp -pPrf ${S}/* ${D}${BIOSUTILS_INSTALL_DIR_RECIPE}
+}
+
diff --git a/extras/recipes-ti/bios/ti-biosutils_1.02.02.bb b/extras/recipes-ti/bios/ti-biosutils_1.02.02.bb
new file mode 100644
index 00000000..918f1240
--- /dev/null
+++ b/extras/recipes-ti/bios/ti-biosutils_1.02.02.bb
@@ -0,0 +1,8 @@
+require ti-biosutils.inc
+
+PV = "1_02_02"
+PVsuffix = "_02"
+
+SRC_URI[biosutilstarball.md5sum] = "0654e9e72b0a6fc7a6575829c0cd90c9"
+SRC_URI[biosutilstarball.sha256sum] = "df486500bdc8dbe3800fc7efe4241e6fa5b1827ba7c0dc17a71b41d42ef921e1"
+
diff --git a/extras/recipes-ti/bios/ti-dspbios.inc b/extras/recipes-ti/bios/ti-dspbios.inc
new file mode 100644
index 00000000..0e3fa62d
--- /dev/null
+++ b/extras/recipes-ti/bios/ti-dspbios.inc
@@ -0,0 +1,25 @@
+DESCRIPTION = "TI DSP/BIOS v5 Kernel"
+HOMEPAGE = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/bios/dspbios"
+SECTION = "devel"
+LICENSE = "TI"
+
+# We can't depend on license files to be present, so just use the TI logo
+LIC_FILES_CHKSUM = "file://docs/tilogo.gif;md5=f049a774c576a5cef3fca4932d707b39"
+
+require ../includes/ti-paths.inc
+require ../includes/ti-staging.inc
+require ../includes/ti-eula-unpack.inc
+
+TI_BIN_UNPK_WDEXT="/bios_${PV}"
+S = "${WORKDIR}${TI_BIN_UNPK_WDEXT}"
+
+SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/bios/dspbios/${PV}/exports/bios_setuplinux_${PV}.bin;name=biosbin"
+
+BINFILE="bios_setuplinux_${PV}.bin"
+TI_BIN_UNPK_CMDS="Y: qY:workdir:Y"
+
+do_install() {
+ install -d ${D}${BIOS_INSTALL_DIR_RECIPE}
+ cp -pPrf ${S}/* ${D}${BIOS_INSTALL_DIR_RECIPE}
+}
+
diff --git a/extras/recipes-ti/bios/ti-dspbios_5.41.11.38.bb b/extras/recipes-ti/bios/ti-dspbios_5.41.11.38.bb
new file mode 100644
index 00000000..9e3b695a
--- /dev/null
+++ b/extras/recipes-ti/bios/ti-dspbios_5.41.11.38.bb
@@ -0,0 +1,7 @@
+require ti-dspbios.inc
+
+PV = "5_41_11_38"
+
+SRC_URI[biosbin.md5sum] = "7fab13740c25f5b34b331bcdc759536e"
+SRC_URI[biosbin.sha256sum] = "96b8e090f79420a4c11d9c0c10d182d1d3b4afb48f11ec375c97b4c91970d0a0"
+
diff --git a/extras/recipes-ti/bios/ti-sysbios.inc b/extras/recipes-ti/bios/ti-sysbios.inc
new file mode 100644
index 00000000..d04a1581
--- /dev/null
+++ b/extras/recipes-ti/bios/ti-sysbios.inc
@@ -0,0 +1,21 @@
+DESCRIPTION = "TI SYS/BIOS v6 Kernel"
+HOMEPAGE = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/bios/sysbios"
+SECTION = "devel"
+LICENSE = "BSD"
+
+require ../includes/ti-paths.inc
+require ../includes/ti-staging.inc
+require ../includes/ti-eula-unpack.inc
+
+S = "${WORKDIR}/bios_${PV}"
+
+SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/bios/sysbios/${PV}/exports/bios_setuplinux_${PV}.bin;name=sysbiosbin"
+
+BINFILE="bios_setuplinux_${PV}.bin"
+TI_BIN_UNPK_CMDS="Y: q:workdir:Y"
+
+do_install() {
+ install -d ${D}${SYSBIOS_INSTALL_DIR_RECIPE}
+ cp -pPrf ${S}/* ${D}${SYSBIOS_INSTALL_DIR_RECIPE}
+}
+
diff --git a/extras/recipes-ti/bios/ti-sysbios_6.33.00.19.bb b/extras/recipes-ti/bios/ti-sysbios_6.33.00.19.bb
new file mode 100644
index 00000000..4e2b4456
--- /dev/null
+++ b/extras/recipes-ti/bios/ti-sysbios_6.33.00.19.bb
@@ -0,0 +1,9 @@
+require ti-sysbios.inc
+
+PV = "6_33_00_19"
+LIC_FILES_CHKSUM = "file://sysbios_${PV}_manifest.html;md5=94136ca9815f76603b7202a41f1d6f5e"
+
+SRC_URI[sysbiosbin.md5sum] = "e1a2f28a8b3087896bbd986696e1a908"
+SRC_URI[sysbiosbin.sha256sum] = "b7e096662f5d928eb818bbb14474deb1e3e038fea34b516b248de637835121ec"
+
+S = "${WORKDIR}/ti/bios_${PV}"
diff --git a/extras/recipes-ti/c6accel/ti-c6accel.inc b/extras/recipes-ti/c6accel/ti-c6accel.inc
new file mode 100644
index 00000000..638c9be3
--- /dev/null
+++ b/extras/recipes-ti/c6accel/ti-c6accel.inc
@@ -0,0 +1,89 @@
+DESCRIPTION = "TI C6Accel - DSP Software Libraries on ARM"
+HOMEPAGE = "https://gforge01.dal.design.ti.com/gf/project/dsplib4arm/"
+
+SECTION = "devel"
+LICENSE = "TI TSPA"
+
+require recipes-ti/includes/ti-paths.inc
+require recipes-ti/includes/ti-staging.inc
+require recipes-ti/includes/ti-eula-unpack.inc
+
+PLATFORM_omapl138 = "omapl138"
+PLATFORM_omap3 = "omap3530"
+PLATFORM ?= "UNDEFINED_PLATFORM"
+
+COMPATIBLE_MACHINE = "(omapl138|omap3)"
+
+PROVIDES += "ti-c6accel-apps"
+
+# This recipe links statically against kernel dependant stuff, use kernel PR as base and append a local version
+PR = "${MACHINE_KERNEL_PR}"
+PR_append = "a"
+
+S = "${WORKDIR}/c6accel_${PV}"
+
+# http://software-dl.ti.com/dsps/dsps_public_sw/c6000/web/c6accel/latest/index_FDS.html
+SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/c6000/web/c6accel/latest/exports//c6accel_${PV}_Linux-x86_Setup.bin;name=c6accelbin "
+
+BINFILE="c6accel_${PV}_Linux-x86_Setup.bin"
+TI_BIN_UNPK_CMDS="Y:workdir"
+
+DEPENDS = "ti-codec-engine ti-xdais ti-dsplink ti-dspbios"
+DEPENDS += "ti-edma3lld ti-cgt6x ti-xdctools ti-framework-components"
+DEPENDS += "ti-biosutils"
+
+TIARGS = ' \
+ PLATFORM="${PLATFORM}" \
+ CE_INSTALL_DIR="${CE_INSTALL_DIR}" \
+ XDAIS_INSTALL_DIR="${XDAIS_INSTALL_DIR}" \
+ LINK_INSTALL_DIR="${LINK_INSTALL_DIR}" \
+ CMEM_INSTALL_DIR="${CMEM_INSTALL_DIR}" \
+ EDMA3_LLD_INSTALL_DIR="${EDMA3_LLD_INSTALL_DIR}" \
+ CODEGEN_INSTALL_DIR="${CODEGEN_INSTALL_DIR}" \
+ XDC_INSTALL_DIR="${XDC_INSTALL_DIR}" \
+ FC_INSTALL_DIR="${FC_INSTALL_DIR}" \
+ BIOS_INSTALL_DIR="${BIOS_INSTALL_DIR}" \
+ BIOSUTILS_INSTALL_DIR="${BIOSUTILS_INSTALL_DIR}" \
+ LPM_INSTALL_DIR="${LPM_INSTALL_DIR}" \
+ SERVER_INSTALL_DIR="${CODEC_INSTALL_DIR}" \
+ C6ACCEL_INSTALL_DIR="${S}" \
+ CSTOOL_DIR="${TOOLCHAIN_PATH}" \
+ CSTOOL_PREFIX="${TOOLCHAIN_PATH}/${TARGET_PREFIX}" \
+ LINUXLIBS_INSTALL_DIR="${STAGING_DIR_TARGET}" \
+ CFLAGS=" ${TARGET_CC_ARCH} ${CFLAGS}" LDFLAGS="${LDFLAGS}" \
+'
+
+do_configure() {
+ unset VERBOSE
+ make ${TIARGS} clean
+ sed -i -e 's:-L$(LINUXLIBS_INSTALL_DIR)/lib:-L$(LINUXLIBS_INSTALL_DIR)/lib -L$(LINUXLIBS_INSTALL_DIR)/usr/lib ${LDFLAGS}:' ${S}/soc/app/Makefile
+}
+
+do_compile() {
+ unset VERBOSE
+ make ${TIARGS} all
+}
+
+do_install() {
+ install -d ${D}${C6ACCEL_INSTALL_DIR_RECIPE}
+ cp -pPrf ${S}/* ${D}${C6ACCEL_INSTALL_DIR_RECIPE}
+
+ # update linker.cmd file to point to sysroot
+ sed -i ${i} -e s=${S}=${C6ACCEL_INSTALL_DIR}=g ${D}${C6ACCEL_INSTALL_DIR_RECIPE}/soc/app/c6accel_app_config/linker.cmd
+
+ cd ${S}
+ make \
+ PLATFORM="${PLATFORM}" \
+ CMEM_INSTALL_DIR="${CMEM_INSTALL_DIR}" \
+ LINK_INSTALL_DIR="${LINK_INSTALL_DIR}" \
+ LPM_INSTALL_DIR="${LPM_INSTALL_DIR}" \
+ C6ACCEL_INSTALL_DIR="${S}" \
+ EXEC_DIR_C6ACCEL="${D}/${installdir}/c6accel-apps" \
+ install
+}
+
+PACKAGES += "ti-c6accel-apps"
+FILES_ti-c6accel-apps = "${installdir}/c6accel-apps/*"
+INSANE_SKIP_ti-c6accel-apps = "1"
+RDEPENDS_ti-c6accel-apps += "ti-cmem-module ti-dsplink-module"
+
diff --git a/extras/recipes-ti/c6accel/ti-c6accel/0001-soc-honour-buildsystem-CFLAGS-and-LDFLAGS-when-set.patch b/extras/recipes-ti/c6accel/ti-c6accel/0001-soc-honour-buildsystem-CFLAGS-and-LDFLAGS-when-set.patch
new file mode 100644
index 00000000..a108c6e0
--- /dev/null
+++ b/extras/recipes-ti/c6accel/ti-c6accel/0001-soc-honour-buildsystem-CFLAGS-and-LDFLAGS-when-set.patch
@@ -0,0 +1,82 @@
+From 192b19046a67263da44203bf50a5b51d0a655fec Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Fri, 31 Dec 2010 15:26:37 +0100
+Subject: [PATCH] soc: honour buildsystem CFLAGS and LDFLAGS when set
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+---
+ soc/app/Makefile | 13 ++++---------
+ soc/c6accelw/Makefile | 14 ++++----------
+ 2 files changed, 8 insertions(+), 19 deletions(-)
+
+diff --git a/soc/app/Makefile b/soc/app/Makefile
+index 2647746..bed937e 100755
+--- a/soc/app/Makefile
++++ b/soc/app/Makefile
+@@ -53,15 +53,10 @@ CONFIGURO = $(XDC_INSTALL_DIR)/xs xdc.tools.configuro
+ CONFIG_BLD = ../../config.bld
+
+ ifeq ($(BUILD_TYPE), release)
+-ifeq ($(ARM_ISA),armv7-a)
+- C_FLAGS += -O3 -march=armv7-a -mtune=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=softfp
+-endif
+-ifeq ($(ARM_ISA),armv5t)
+- C_FLAGS += -mlittle-endian -march=armv5t -mtune=arm9tdmi -mabi=aapcs-linux -O
+-endif
++C_FLAGS += $(CFLAGS)
+ else
+ CPP_FLAGS += -DNDEBUG
+- C_FLAGS += -Wall -g
++ C_FLAGS += $(CFLAGS) -Wall -g
+ endif
+
+
+@@ -72,7 +67,7 @@ ifeq ($(PLATFORM),omapl138)
+ C_FLAGS += -DPLATFORM=138
+ endif
+
+-LD_FLAGS += -L$(LINUXLIBS_INSTALL_DIR)/lib -lm -lpthread
++LD_FLAGS += $(LDFLAGS) -L$(LINUXLIBS_INSTALL_DIR)/lib -lm -lpthread
+ C6ACCEL_LIB += ../c6accelw/lib/c6accelw_$(PLATFORM).a470MV
+
+ COMPILE.c = $(VERBOSE) $(CSTOOL_PREFIX)gcc $(CPP_FLAGS) $(C_FLAGS) $(CPP_FLAGS) -c
+@@ -102,7 +97,7 @@ $(TARGET): $(OBJFILES) $(C6ACCEL_LIB) $(XDC_LFILE)
+
+ $(OBJFILES): %.o: %.c $(HEADERS) $(XDC_CFLAGS)
+ @echo Compiling $@ from $<..
+- $(COMPILE.c) $(shell cat $(XDC_CFLAGS)) -o $@ $<
++ $(COMPILE.c) $(shell cat $(XDC_CFLAGS) | sed 's:-march=armv5t::g') -o $@ $<
+
+ $(XDC_LFILE) $(XDC_CFLAGS): $(XDC_CFGFILE)
+ @echo
+diff --git a/soc/c6accelw/Makefile b/soc/c6accelw/Makefile
+index cc58acf..298ab3b 100755
+--- a/soc/c6accelw/Makefile
++++ b/soc/c6accelw/Makefile
+@@ -21,19 +21,13 @@ BUILD_TYPE=release
+ CPP_FLAGS += -I../packages -I$(XDC_INSTALL_DIR)/packages -I$(CE_INSTALL_DIR)/packages -I$(XDAIS_INSTALL_DIR)/packages -Dxdc_target_name__=arm/GCArmv5T -Dxdc_target_types__=gnu/targets/std.h
+
+ ifeq ($(BUILD_TYPE), release)
+-ifeq ($(ARM_ISA),armv7-a)
+- C_FLAGS += -O3 -march=armv7-a -mtune=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=softfp
+- endif
+-ifeq ($(ARM_ISA),armv5t)
+- C_FLAGS += -mlittle-endian -march=armv5t -mtune=arm9tdmi -mabi=aapcs-linux -O
+- endif
+-
++C_FLAGS += $(CFLAGS)
+ else
+- CPP_FLAGS += -DNDEBUG
+- C_FLAGS += -Wall -g
++ CPP_FLAGS += -DNDEBUG
++ C_FLAGS += $(CFLAGS) -Wall -g
+ endif
+
+-LD_FLAGS += -L$(LINUXLIBS_INSTALL_DIR)/lib
++LD_FLAGS += $(LDFLAGS) -L$(LINUXLIBS_INSTALL_DIR)/lib
+ AR_FLAGS +=
+
+ COMPILE.c = $(VERBOSE) $(CSTOOL_PREFIX)gcc $(CPP_FLAGS) $(C_FLAGS) -c
+--
+1.6.6.1
+
diff --git a/extras/recipes-ti/c6accel/ti-c6accel/fix-loadmodule.patch b/extras/recipes-ti/c6accel/ti-c6accel/fix-loadmodule.patch
new file mode 100644
index 00000000..9921f29e
--- /dev/null
+++ b/extras/recipes-ti/c6accel/ti-c6accel/fix-loadmodule.patch
@@ -0,0 +1,81 @@
+diff -uNr c6accel_1_00_00_04_orig/soc/app/omap3530/loadmodules_omap3530_c6accel.sh c6accel_1_00_00_04/soc/app/omap3530/loadmodules_omap3530_c6accel.sh
+--- c6accel_1_00_00_04_orig/soc/app/omap3530/loadmodules_omap3530_c6accel.sh 2010-07-26 16:18:35.000000000 -0500
++++ c6accel_1_00_00_04/soc/app/omap3530/loadmodules_omap3530_c6accel.sh 2010-09-12 11:50:46.129159981 -0500
+@@ -1,4 +1,4 @@
+-# loadmodules.sh
++#!/bin/sh
+ #
+ # Copyright (C) $year Texas Instruments Incorporated - http://www.ti.com/
+ #
+@@ -11,34 +11,16 @@
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ # Lesser General Public License for more details.
+
+-#
+-# Default Memory Map
+-#
+-# Start Addr Size Description
+-# -------------------------------------------
+-# 0x80000000 88 MB Linux
+-# 0x85800000 08 MB CMEM
+-# 0x86800000 24 MB DDRALGHEAP
+-# 0x87800000 6 MB DDR2 (BIOS, Codecs, Applications)
+-# 0x87E00000 1 MB DSPLINK (MEM)
+-# 0x87F00000 4 KB DSPLINK (RESET)
+-# 0x87F01000 1020 KB unused
+-rmmod cmemk.ko
+-rmmod lpm_omap3530.ko
+-rmmod dsplinkk
+-# Allocate 15MB for CMEM
+-insmod cmemk.ko phys_start=0x86300000 phys_end=0x87200000 pools=20x4096
++# remove previously loaded cmem to ensure that it configured to use our pool configuration
++rmmod cmemk 2>/dev/null
+
+-# insert DSP/BIOS Link driver
+-#
+-insmod dsplinkk.ko
++# Allocate 15MB for CMEM
++modprobe cmemk phys_start=0x86300000 phys_end=0x87200000 pools=20x4096 allowOverlap=1
++modprobe dsplinkk
++modprobe lpm_omap3530
+
+ # make /dev/dsplink
+ rm -rf /dev/dsplink
+ mknod /dev/dsplink c `awk "\\$2==\"dsplink\" {print \\$1}" /proc/devices` 0
+
+
+-# insert Local Power Manager driver
+-#
+-insmod lpm_omap3530.ko
+-
+diff -uNr c6accel_1_00_00_04_orig/soc/app/omapl138/loadmodules_omapl138_c6accel.sh c6accel_1_00_00_04/soc/app/omapl138/loadmodules_omapl138_c6accel.sh
+--- c6accel_1_00_00_04_orig/soc/app/omapl138/loadmodules_omapl138_c6accel.sh 2010-07-27 09:45:37.000000000 -0500
++++ c6accel_1_00_00_04/soc/app/omapl138/loadmodules_omapl138_c6accel.sh 2010-09-12 11:52:07.193160179 -0500
+@@ -1,4 +1,4 @@
+-#
++#!/bin/sh
+ # Copyright (c) 2008, Texas Instruments Incorporated
+ # All rights reserved.
+ #
+@@ -29,15 +29,14 @@
+ # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ # EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ #
+-rmmod dsplinkk.ko
+-rmmod cmemk.ko
++
++# remove previously loaded cmem to ensure that its configured to use our pool configuration.
++rmmod cmemk 2>/dev/null
++
+ # insert cmemk, tell it to occupy physical 120MB-128MB, create
+ # 20 4K buffers, 10 128K buffers and two 1MB buffers
+-insmod cmemk.ko phys_start=0xC2000000 phys_end=0xC4000000 pools=20x4096
+-
+-# insert DSP/BIOS Link driver
+-#
+-insmod dsplinkk.ko
++modprobe cmemk phys_start=0xC2000000 phys_end=0xC4000000 pools=20x4096 allowOverlap=1
++modprobe dsplinkk
+
+ # make /dev/dsplink
+ rm -f /dev/dsplink
diff --git a/extras/recipes-ti/c6accel/ti-c6accel_1.01.00.06.bb b/extras/recipes-ti/c6accel/ti-c6accel_1.01.00.06.bb
new file mode 100644
index 00000000..61263c53
--- /dev/null
+++ b/extras/recipes-ti/c6accel/ti-c6accel_1.01.00.06.bb
@@ -0,0 +1,16 @@
+require ti-c6accel.inc
+
+SRC_URI[c6accelbin.md5sum] = "4cfb9ae9d1b69954a22b454726d4d6cb"
+SRC_URI[c6accelbin.sha256sum] = "9fac3295c5c8533535e18f96c9a31c446f5a275798ace8c145f9ed51fa3e3ece"
+
+LIC_FILES_CHKSUM = "file://docs/ReleaseNotes_C6Accel.txt;md5=28fbd64e0ba4a1af1a2f1179024f38a9"
+
+SSRC_URI_append = " \
+ file://0001-soc-honour-buildsystem-CFLAGS-and-LDFLAGS-when-set.patch \
+ "
+
+PV = "1_01_00_06"
+
+
+CFLAGS += "-fPIC"
+
diff --git a/extras/recipes-ti/codec-engine/ti-codec-engine.inc b/extras/recipes-ti/codec-engine/ti-codec-engine.inc
new file mode 100644
index 00000000..15bd4642
--- /dev/null
+++ b/extras/recipes-ti/codec-engine/ti-codec-engine.inc
@@ -0,0 +1,199 @@
+DESCRIPTION = "Codec Engine for TI ARM/DSP processors"
+HOMEPAGE = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/ce"
+SECTION = "devel"
+LICENSE = "BSD"
+
+# TODO :: Add Codec Engine Library Rebuild
+# TODO :: Add Examples APP_LOCAL build as well?
+# TODO :: Check DEPENDS - are the DSP side packages required for ARM-only products?
+
+require recipes-ti/includes/ti-paths.inc
+require recipes-ti/includes/ti-staging.inc
+
+PROVIDES += "ti-codec-engine-examples"
+
+PR = "${MACHINE_KERNEL_PR}"
+
+S = "${WORKDIR}/codec_engine_${PV}"
+
+SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/ce/${PV}/exports/codec_engine_${PV},lite.tar.gz;name=cetarball "
+
+DEPENDS = "ti-framework-components ti-xdais ti-xdctools ti-linuxutils"
+DEPENDS_append_dm6446 = " ti-dspbios ti-dsplink ti-local-power-manager ti-cgt6x ti-biosutils ti-edma3lld"
+DEPENDS_append_dm6467 = " ti-dspbios ti-dsplink ti-cgt6x ti-biosutils ti-edma3lld"
+DEPENDS_append_omap3 = " ti-dspbios ti-dsplink ti-local-power-manager ti-cgt6x ti-biosutils ti-edma3lld"
+DEPENDS_append_omapl137 = " ti-dspbios ti-dsplink ti-cgt6x ti-biosutils ti-edma3lld"
+DEPENDS_append_omapl138 = " ti-dspbios ti-dsplink ti-cgt6x ti-biosutils ti-edma3lld"
+
+# SOC_FAMILY configuration
+
+# Define DEVICES variable
+CEEXAMPLESDEVICES_dm6446 = "DM6446"
+CEEXAMPLESDEVICES_dm6467 = "DM6467"
+CEEXAMPLESDEVICES_omap3 = "OMAP3530"
+CEEXAMPLESDEVICES_dm355 = "DM355"
+CEEXAMPLESDEVICES_dm365 = "DM365"
+CEEXAMPLESDEVICES_omapl137 = "OMAPL137"
+CEEXAMPLESDEVICES_omapl138 = "OMAPL138"
+CEEXAMPLESDEVICES ?= "<UNDEFINED_CEEXAMPLESDEVICES>"
+
+# Define GPPOS variable
+CEEXAMPLESGPPOS_dm6446 = "LINUX_GCC"
+CEEXAMPLESGPPOS_dm6467 = "LINUX_GCC"
+CEEXAMPLESGPPOS_omap3 = "LINUX_GCC"
+CEEXAMPLESGPPOS_dm355 = "LINUX_GCC"
+CEEXAMPLESGPPOS_dm365 = "LINUX_GCC"
+CEEXAMPLESGPPOS_omapl137 = "LINUX_GCC"
+CEEXAMPLESGPPOS_omapl138 = "LINUX_GCC"
+CEEXAMPLESGPPOS ?= "<UNDEFINED_CEEXAMPLESGPPOS>"
+
+# Define PROGRAM variable
+CEEXAMPLESPROGRAMS_dm6446 = "APP_CLIENT DSP_SERVER"
+CEEXAMPLESPROGRAMS_dm6467 = "APP_CLIENT DSP_SERVER"
+CEEXAMPLESPROGRAMS_omap3 = "APP_CLIENT DSP_SERVER"
+CEEXAMPLESPROGRAMS_dm355 = "APP_LOCAL"
+CEEXAMPLESPROGRAMS_dm365 = "APP_LOCAL"
+CEEXAMPLESPROGRAMS_omapl137 = "APP_CLIENT DSP_SERVER"
+CEEXAMPLESPROGRAMS_omapl138 = "APP_CLIENT DSP_SERVER"
+CEEXAMPLESPROGRAMS ?= "<UNDEFINED_CEEXAMPLESPROGRAMS>"
+
+do_configure() {
+
+ # No way to pass this via ENV?
+ sed -i \
+ -e s:arm-none-linux-gnueabi-:${TARGET_PREFIX}:g \
+ ${S}/examples/xdcpaths.mak
+
+ # compiler is not under ${TOOLCHAIN_PATH}/bin anymore...
+ sed -i \
+ -e s:bin/${TARGET_PREFIX}gcc:${TARGET_PREFIX}gcc:g \
+ ${S}/examples/xdcpaths.mak
+
+ # ... and ar is not there too
+# sed -i \
+# -e s:/arm-angstrom-linux-gnueabi/bin/ar:/arm-angstrom-linux-gnueabi-ar:g \
+# ${S}/examples/ti/xdais/dm/examples/viddec1_copy/package.mak
+}
+
+do_prepsources() {
+
+ for i in codecs extensions servers apps ; do
+ cd ${S}/examples/ti/sdo/ce/examples/$i
+ make DEVICES="${CEEXAMPLESDEVICES}" \
+ GPPOS="${CEEXAMPLESGPPOS}" \
+ PROGRAMS="${CEEXAMPLESPROGRAMS}" \
+ CE_INSTALL_DIR="${S}" \
+ XDC_INSTALL_DIR="${XDC_INSTALL_DIR}" \
+ BIOS_INSTALL_DIR="${BIOS_INSTALL_DIR}" \
+ BIOSUTILS_INSTALL_DIR="${BIOSUTILS_INSTALL_DIR}" \
+ DSPLINK_INSTALL_DIR="${LINK_INSTALL_DIR}" \
+ XDAIS_INSTALL_DIR="${XDAIS_INSTALL_DIR}" \
+ FC_INSTALL_DIR="${FC_INSTALL_DIR}" \
+ CMEM_INSTALL_DIR="${CMEM_INSTALL_DIR}" \
+ LPM_INSTALL_DIR="${LPM_INSTALL_DIR}" \
+ EDMA3_LLD_INSTALL_DIR="${EDMA3_LLD_INSTALL_DIR}" \
+ CGTOOLS_V5T="${TOOLCHAIN_PATH}" \
+ CGTOOLS_C64P="${CODEGEN_INSTALL_DIR}" \
+ CGTOOLS_C674="${CODEGEN_INSTALL_DIR}" \
+ clean
+ # '.make' target was used in CE < 2.26, but its no longer
+ # supported in CE >= 2.26. Now we are moved to >=2.26
+ # hence commenting out the .make target.
+ # .make clean
+ done
+}
+
+addtask prepsources after do_configure before do_compile
+
+do_compile () {
+
+ for i in codecs extensions servers apps ; do
+ cd ${S}/examples/ti/sdo/ce/examples/$i
+ make DEVICES="${CEEXAMPLESDEVICES}" \
+ GPPOS="${CEEXAMPLESGPPOS}" \
+ PROGRAMS="${CEEXAMPLESPROGRAMS}" \
+ CE_INSTALL_DIR="${S}" \
+ XDC_INSTALL_DIR="${XDC_INSTALL_DIR}" \
+ BIOS_INSTALL_DIR="${BIOS_INSTALL_DIR}" \
+ BIOSUTILS_INSTALL_DIR="${BIOSUTILS_INSTALL_DIR}" \
+ DSPLINK_INSTALL_DIR="${LINK_INSTALL_DIR}" \
+ XDAIS_INSTALL_DIR="${XDAIS_INSTALL_DIR}" \
+ FC_INSTALL_DIR="${FC_INSTALL_DIR}" \
+ CMEM_INSTALL_DIR="${CMEM_INSTALL_DIR}" \
+ LPM_INSTALL_DIR="${LPM_INSTALL_DIR}" \
+ EDMA3_LLD_INSTALL_DIR="${EDMA3_LLD_INSTALL_DIR}" \
+ CGTOOLS_V5T="${TOOLCHAIN_PATH}" \
+ CGTOOLS_C64P="${CODEGEN_INSTALL_DIR}" \
+ CGTOOLS_C674="${CODEGEN_INSTALL_DIR}" \
+ all
+ done
+}
+
+do_install() {
+
+ install -d ${D}/${installdir}/ti-codec-engine-examples
+ if [ -e ${S}/examples/apps/system_files/${CEEXAMPLESDEVICES}/loadmodules.sh ]; then
+ cp ${S}/examples/apps/system_files/${CEEXAMPLESDEVICES}/loadmodules.sh ${D}/${installdir}/ti-codec-engine-examples
+ elif [ -e ${WORKDIR}/loadmodules.sh ]; then
+ cp ${WORKDIR}/loadmodules.sh ${D}/${installdir}/ti-codec-engine-examples
+ fi
+
+ cd ${S}/examples/ti/sdo/ce/examples
+
+ # Install the apps, servers and test data, mirroring the source directory structure
+ # - Put the servers inside the same folder as the executable
+ # - TODO - Check nested dirs (e.g. dualcpu_separateconfig)
+
+ # Put all servers in separate tree.
+ for i in $(find . -name "*.${DSPSUFFIX}"); do
+ install -d ${D}/${installdir}/ti-codec-engine-examples/servers/`dirname ${i} | cut -f3 -d /`
+ install ${i} ${D}/${installdir}/ti-codec-engine-examples/servers/`dirname ${i} | cut -f3 -d /`
+ done
+
+ for i in $(find . -name "*.xv5T"); do
+ install -d ${D}/${installdir}/ti-codec-engine-examples/`dirname ${i} | cut -f3 -d /`
+ install ${i} ${D}/${installdir}/ti-codec-engine-examples/`dirname ${i} | cut -f3 -d /`
+ done
+
+ for i in $(find . -name "*.dat"); do
+ install -d ${D}/${installdir}/ti-codec-engine-examples/`dirname ${i} | cut -f3 -d /`
+ install ${i} ${D}/${installdir}/ti-codec-engine-examples/`dirname ${i} | cut -f3 -d /`
+ done
+
+ # For each directory, softlink to the app server, except special cases
+ cd ${D}/${installdir}/ti-codec-engine-examples
+ for i in $(find . -type d | grep -v servers); do
+ {
+ pwd
+ cd ${D}/${installdir}/ti-codec-engine-examples/$i
+ if [ $(basename $i) = "audio1_ires" ] ; then
+ ln -s ../servers/audio1_ires/audio1_ires.${DSPSUFFIX}
+ elif [ $(basename $i) = "server_api_example" ] ; then
+ ln -s ../servers/server_api_example/audio_copy.${DSPSUFFIX}
+ elif [ $(basename $i) != "." ] ; then
+ ln -s ../servers/all_codecs/all.${DSPSUFFIX}
+ else
+ echo Skipping $i
+ fi
+ }
+ done
+
+ # Install/Stage the Source Tree
+ install -d ${D}${CE_INSTALL_DIR_RECIPE}
+ cp -pPrf ${S}/* ${D}${CE_INSTALL_DIR_RECIPE}
+}
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+PACKAGES += "ti-codec-engine-examples"
+
+RDEPENDS_ti-codec-engine-examples = " ti-cmem-module"
+RDEPENDS_ti-codec-engine-examples_append_dm6446 = " ti-dsplink-module ti-lpm-module"
+RDEPENDS_ti-codec-engine-examples_append_dm6467 = " ti-dsplink-module"
+RDEPENDS_ti-codec-engine-examples_append_omap3 = " ti-dsplink-module ti-lpm-module"
+RDEPENDS_ti-codec-engine-examples_append_omapl137 = " ti-dsplink-module"
+RDEPENDS_ti-codec-engine-examples_append_omapl138 = " ti-dsplink-module"
+FILES_ti-codec-engine-examples = "${installdir}/ti-codec-engine-examples/*"
+INSANE_SKIP_ti-codec-engine-examples = "1"
+
+FILES_${PN}-dbg += "${installdir}/ti-codec-engine-examples/*/.debug"
diff --git a/extras/recipes-ti/codec-engine/ti-codec-engine/bypass-GCArmv5T-used-is-sealed.patch b/extras/recipes-ti/codec-engine/ti-codec-engine/bypass-GCArmv5T-used-is-sealed.patch
new file mode 100644
index 00000000..b93161f4
--- /dev/null
+++ b/extras/recipes-ti/codec-engine/ti-codec-engine/bypass-GCArmv5T-used-is-sealed.patch
@@ -0,0 +1,22 @@
+do_compile produces:
+
+js: "/prj/oe/bb/build/tmp-eglibc/work/beagleboard-angstrom-linux-gnueabi/ti-codec-engine-2_26_02_11-r114a/codec_engine_2_26_02_11/packages/ti/sdo/ce/osal/linux/package.xs", line 50: XDC runtime error: gnu.targets.arm.GCArmv5T: '$used' is sealed
+
+Fix per suggestion in http://e2e.ti.com/support/dsp/omap_applications_processors/f/447/t/110920.aspx
+
+--- ./packages/ti/sdo/ce/osal/linux/package.xs.orig 2010-12-01 23:24:48.000000000 -0600
++++ ./packages/ti/sdo/ce/osal/linux/package.xs 2011-12-27 14:59:39.382423341 -0600
+@@ -47,10 +47,10 @@
+ }
+
+ /* Conditionally load CMEM here */
+- var targetMod = xdc.useModule(prog.build.target.$name);
+- if ((":"+targetMod.getISAChain().join(":")+":").match(/:v5T:/i)) {
++ //var targetMod = xdc.useModule(prog.build.target.$name);
++ //if ((":"+targetMod.getISAChain().join(":")+":").match(/:v5T:/i)) {
+ xdc.useModule('ti.sdo.linuxutils.cmem.CMEM');
+- }
++ //}
+
+ var osalGlobal = xdc.useModule('ti.sdo.ce.osal.Global');
+
diff --git a/extras/recipes-ti/codec-engine/ti-codec-engine/ce-2-26-00-08-Examples-Add-LPM_INSTALL_DIR-packages.patch b/extras/recipes-ti/codec-engine/ti-codec-engine/ce-2-26-00-08-Examples-Add-LPM_INSTALL_DIR-packages.patch
new file mode 100644
index 00000000..1eb81086
--- /dev/null
+++ b/extras/recipes-ti/codec-engine/ti-codec-engine/ce-2-26-00-08-Examples-Add-LPM_INSTALL_DIR-packages.patch
@@ -0,0 +1,60 @@
+diff --git a/examples/ti/sdo/ce/examples/apps/audio1_ires/rtcfg_local_evm3530_linux/makefile b/examples/ti/sdo/ce/examples/apps/audio1_ires/rtcfg_local_evm3530_linux/makefile
+index 2bbfb72..2a00d0d 100644
+--- a/examples/ti/sdo/ce/examples/apps/audio1_ires/rtcfg_local_evm3530_linux/makefile
++++ b/examples/ti/sdo/ce/examples/apps/audio1_ires/rtcfg_local_evm3530_linux/makefile
+@@ -80,6 +80,7 @@ REPO_PATH = \
+ $(FC_INSTALL_DIR)/packages \
+ $(FC_INSTALL_DIR)/examples \
+ $(CMEM_INSTALL_DIR)/packages \
++ $(LPM_INSTALL_DIR)/packages \
+ $(BIOSUTILS_INSTALL_DIR)/packages \
+ $(EXAMPLES_ROOTDIR)
+
+diff --git a/examples/ti/sdo/ce/examples/apps/speech1_copy/rtcfg_local_evm3530_linux/makefile b/examples/ti/sdo/ce/examples/apps/speech1_copy/rtcfg_local_evm3530_linux/makefile
+index f2b187a..827f6bc 100644
+--- a/examples/ti/sdo/ce/examples/apps/speech1_copy/rtcfg_local_evm3530_linux/makefile
++++ b/examples/ti/sdo/ce/examples/apps/speech1_copy/rtcfg_local_evm3530_linux/makefile
+@@ -74,6 +74,7 @@ REPO_PATH = \
+ $(XDAIS_INSTALL_DIR)/packages \
+ $(FC_INSTALL_DIR)/packages \
+ $(CMEM_INSTALL_DIR)/packages \
++ $(LPM_INSTALL_DIR)/packages \
+ $(BIOSUTILS_INSTALL_DIR)/packages \
+ $(EXAMPLES_ROOTDIR)
+
+diff --git a/examples/ti/sdo/ce/examples/apps/speech1_copy/rtcfg_remote_evm3530_linux/makefile b/examples/ti/sdo/ce/examples/apps/speech1_copy/rtcfg_remote_evm3530_linux/makefile
+index a4fe4dc..a23f991 100644
+--- a/examples/ti/sdo/ce/examples/apps/speech1_copy/rtcfg_remote_evm3530_linux/makefile
++++ b/examples/ti/sdo/ce/examples/apps/speech1_copy/rtcfg_remote_evm3530_linux/makefile
+@@ -76,6 +76,7 @@ REPO_PATH = \
+ $(XDAIS_INSTALL_DIR)/packages \
+ $(FC_INSTALL_DIR)/packages \
+ $(CMEM_INSTALL_DIR)/packages \
++ $(LPM_INSTALL_DIR)/packages \
+ $(BIOSUTILS_INSTALL_DIR)/packages \
+ $(EXAMPLES_ROOTDIR)
+
+diff --git a/examples/ti/sdo/ce/examples/apps/video1_copy/rtcfg_local_evm3530_linux/makefile b/examples/ti/sdo/ce/examples/apps/video1_copy/rtcfg_local_evm3530_linux/makefile
+index 8baa9dd..3c01c04 100644
+--- a/examples/ti/sdo/ce/examples/apps/video1_copy/rtcfg_local_evm3530_linux/makefile
++++ b/examples/ti/sdo/ce/examples/apps/video1_copy/rtcfg_local_evm3530_linux/makefile
+@@ -74,6 +74,7 @@ REPO_PATH = \
+ $(XDAIS_INSTALL_DIR)/packages \
+ $(FC_INSTALL_DIR)/packages \
+ $(CMEM_INSTALL_DIR)/packages \
++ $(LPM_INSTALL_DIR)/packages \
+ $(BIOSUTILS_INSTALL_DIR)/packages \
+ $(EXAMPLES_ROOTDIR)
+
+diff --git a/examples/ti/sdo/ce/examples/apps/video1_copy/rtcfg_remote_evm3530_linux/makefile b/examples/ti/sdo/ce/examples/apps/video1_copy/rtcfg_remote_evm3530_linux/makefile
+index 3319c06..09a6357 100644
+--- a/examples/ti/sdo/ce/examples/apps/video1_copy/rtcfg_remote_evm3530_linux/makefile
++++ b/examples/ti/sdo/ce/examples/apps/video1_copy/rtcfg_remote_evm3530_linux/makefile
+@@ -75,6 +75,7 @@ REPO_PATH = \
+ $(XDAIS_INSTALL_DIR)/packages \
+ $(FC_INSTALL_DIR)/packages \
+ $(CMEM_INSTALL_DIR)/packages \
++ $(LPM_INSTALL_DIR)/packages \
+ $(BIOSUTILS_INSTALL_DIR)/packages \
+ $(EXAMPLES_ROOTDIR)
+
diff --git a/extras/recipes-ti/codec-engine/ti-codec-engine/dm365-evm/loadmodules.sh b/extras/recipes-ti/codec-engine/ti-codec-engine/dm365-evm/loadmodules.sh
new file mode 100644
index 00000000..60a40f0c
--- /dev/null
+++ b/extras/recipes-ti/codec-engine/ti-codec-engine/dm365-evm/loadmodules.sh
@@ -0,0 +1,49 @@
+#
+# Copyright (c) 2008, Texas Instruments Incorporated
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# * Neither the name of Texas Instruments Incorporated nor the names of
+# its contributors may be used to endorse or promote products derived
+# from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+# insert cmemk, tell it to occupy physical 120MB-128MB, create
+# 20 4K buffers, 10 128K buffers and two 1MB buffers
+CMEM_MODPARAMS="phys_start=0x87800000 phys_end=0x88000000 pools=20x4096,10x131072,2x1048576"
+
+if [ -e cmemk.ko ]
+ then
+ insmod cmemk.ko $CMEM_MODPARAMS
+ else
+ modprobe cmemk $CMEM_MODPARAMS
+fi
+
+# Allow cmem driver to be used by all users
+if [ -e /dev/cmem ]
+ then
+ chmod 666 /dev/cmem
+fi
+
diff --git a/extras/recipes-ti/codec-engine/ti-codec-engine/loadmodules-ti-codec-engine-apps.sh b/extras/recipes-ti/codec-engine/ti-codec-engine/loadmodules-ti-codec-engine-apps.sh
new file mode 100644
index 00000000..9f9233d1
--- /dev/null
+++ b/extras/recipes-ti/codec-engine/ti-codec-engine/loadmodules-ti-codec-engine-apps.sh
@@ -0,0 +1,37 @@
+#
+# Default Memory Map - for OMAP3530 CE 2.21 examples
+#
+# Start Addr Size Description
+# -------------------------------------------
+# 0x80000000 80 MB Linux
+# 0x85000000 08 MB CMEM
+# 0x86000000 24 MB DDRALGHEAP
+# 0x87800000 6 MB DDR2 (BIOS, Codecs, Applications)
+# 0x87E00000 1 MB DSPLINK (MEM)
+# 0x87F00000 4 KB DSPLINK (RESET)
+# 0x87F01000 1020 KB unused
+
+# sanity check to verify that we're using the right mem=xxM (80M in this case)
+awk '/MemTotal:/ {
+ mem=$2
+
+ if (mem > 80 * 1024)
+ print "Warning! You need to use mem=80M or less on the kernel cmdline"
+
+ printf "You have %dkB total memory for Linux\n", mem
+}' /proc/meminfo
+
+# Select cmemk parameters for best fit, i.e. starting at 0x85000000
+modprobe cmemk phys_start=0x85000000 phys_end=0x86000000 pools=20x4096,8x131072,5x1048576,1x1429440,1x256000,1x3600000,5x829440
+
+# insert DSP/BIOS Link driver
+#
+modprobe dsplinkk
+
+# make /dev/dsplink
+#rm -f /dev/dsplink
+#mknod /dev/dsplink c `awk "\\$2==\"dsplink\" {print \\$1}" /proc/devices` 0
+
+# insert Local Power Manager driver
+#
+modprobe lpm_omap3530
diff --git a/extras/recipes-ti/codec-engine/ti-codec-engine/unloadmodules-ti-codec-engine-apps.sh b/extras/recipes-ti/codec-engine/ti-codec-engine/unloadmodules-ti-codec-engine-apps.sh
new file mode 100644
index 00000000..f990d997
--- /dev/null
+++ b/extras/recipes-ti/codec-engine/ti-codec-engine/unloadmodules-ti-codec-engine-apps.sh
@@ -0,0 +1,12 @@
+# Unload modules - CODEC ENGINE - OMAP3530
+
+# remove lpm module
+rmmod lpm_omap3530
+
+# remove DSP/BIOS Link driver
+rmmod dsplinkk
+#rm -f /dev/dsplink
+
+# remove cmem module
+rmmod cmemk
+
diff --git a/extras/recipes-ti/codec-engine/ti-codec-engine_2.26.02.11.bb b/extras/recipes-ti/codec-engine/ti-codec-engine_2.26.02.11.bb
new file mode 100644
index 00000000..bcb89b77
--- /dev/null
+++ b/extras/recipes-ti/codec-engine/ti-codec-engine_2.26.02.11.bb
@@ -0,0 +1,10 @@
+require ti-codec-engine.inc
+
+LIC_FILES_CHKSUM = "file://codec_engine_${PV}_manifest.html;md5=912535f1b02ecf329a3979bf313f91e0"
+PV = "2_26_02_11"
+PR_append = "b"
+
+SRC_URI += "file://bypass-GCArmv5T-used-is-sealed.patch"
+
+SRC_URI[cetarball.md5sum] = "4f755f77119e4da19ab5cc7ae7ccfdb4"
+SRC_URI[cetarball.sha256sum] = "17fa053719265e0901fe3c3f90c9204957c6d0f5351d6b3ba4900df58cb7300f"
diff --git a/extras/recipes-ti/codec-engine/ti-codecs-omap3530/disable-c6accel.diff b/extras/recipes-ti/codec-engine/ti-codecs-omap3530/disable-c6accel.diff
new file mode 100644
index 00000000..6e2ed7e4
--- /dev/null
+++ b/extras/recipes-ti/codec-engine/ti-codecs-omap3530/disable-c6accel.diff
@@ -0,0 +1,47 @@
+diff -ur a/packages/ti/sdo/server/cs/codec.cfg b/packages/ti/sdo/server/cs/codec.cfg
+--- a/packages/ti/sdo/server/cs/codec.cfg 2011-08-07 20:08:57.000000000 +0200
++++ b/packages/ti/sdo/server/cs/codec.cfg 2011-08-07 20:08:10.000000000 +0200
+@@ -7,7 +7,7 @@
+ * which we'll use to initialize config params and add the codecs to
+ * the Server.algs array.
+ */
+- var C6ACCEL = xdc.useModule('ti.c6accel.ce.C6ACCEL');
++/* var C6ACCEL = xdc.useModule('ti.c6accel.ce.C6ACCEL');
+
+ C6ACCEL.serverFxns = "UNIVERSAL_SKEL";
+ C6ACCEL.stubFxns = "UNIVERSAL_STUBS";
+@@ -17,7 +17,7 @@
+ C6ACCEL.alg.codeSection = codeSection;
+ C6ACCEL.alg.udataSection = udataSection;
+ C6ACCEL.alg.dataSection = dataSection;
+-
++*/
+ var AACHEDEC = xdc.useModule('ti.sdo.codecs.aachedec.ce.AACHEDEC');
+
+ AACHEDEC.serverFxns = "AUDDEC1_SKEL";
+@@ -151,11 +151,11 @@
+ * algorithms (e.g. stack sizes, priorities, etc.).
+ */
+ Server.algs = [
+- {name: "c6accel", mod: C6ACCEL , threadAttrs: {
++/* {name: "c6accel", mod: C6ACCEL , threadAttrs: {
+ stackMemId: 0, priority: Server.MINPRI + 3},
+ groupId : 2,
+ },
+-
++*/
+ {name: "aachedec", mod: AACHEDEC , threadAttrs: {
+ stackMemId: 0, priority: Server.MINPRI + 3},
+ groupId : 2,
+diff -ur a/packages/ti/sdo/server/cs/package.xs b/packages/ti/sdo/server/cs/package.xs
+--- a/packages/ti/sdo/server/cs/package.xs 2011-08-07 20:09:31.000000000 +0200
++++ b/packages/ti/sdo/server/cs/package.xs 2011-08-07 20:08:21.000000000 +0200
+@@ -7,7 +7,7 @@
+ // Each codec is validated with the following call:
+ // validate_one_codec(<package name>, <module name>);
+
+- validate_one_codec( "ti.c6accel", "C6ACCEL" );
++// validate_one_codec( "ti.c6accel", "C6ACCEL" );
+ validate_one_codec( "ti.sdo.codecs.aachedec", "AACHEDEC" );
+ validate_one_codec( "ti.sdo.codecs.deinterlacer", "I2P" );
+ validate_one_codec( "ti.sdo.codecs.g711dec", "G711DEC" );
diff --git a/extras/recipes-ti/codec-engine/ti-codecs-omap3530/mp3dec_cs1omap3530.patch b/extras/recipes-ti/codec-engine/ti-codecs-omap3530/mp3dec_cs1omap3530.patch
new file mode 100644
index 00000000..4ed9267e
--- /dev/null
+++ b/extras/recipes-ti/codec-engine/ti-codecs-omap3530/mp3dec_cs1omap3530.patch
@@ -0,0 +1,41 @@
+diff -uNr -x .xdcenv.mak -x mp3dec cs1omap3530_1_00_01/packages/ti/sdo/server/cs/codec.cfg cs1omap3530_1_00_01_patches/packages/ti/sdo/server/cs/codec.cfg
+--- cs1omap3530_1_00_01/packages/ti/sdo/server/cs/codec.cfg 2009-10-26 14:19:21.000000000 -0500
++++ cs1omap3530_1_00_01_patches/packages/ti/sdo/server/cs/codec.cfg 2009-10-26 14:36:03.000000000 -0500
+@@ -92,6 +92,14 @@
+ MPEG4ENC.alg.udataSection = "DDR2";
+ MPEG4ENC.alg.dataSection = "DDR2";
+
++ var MP3DEC = xdc.useModule('ti.sdo.codecs.mp3dec.ce.MP3DEC');
++
++ // Module Config
++ MP3DEC.alg.watermark = false;
++ MP3DEC.alg.codeSection = "DDR2";
++ MP3DEC.alg.udataSection = "DDR2";
++ MP3DEC.alg.dataSection = "DDR2";
++
+ /*
+ * The array of algorithms this server can serve up. This array also
+ * configures details about the threads which will be created to run the
+@@ -103,6 +111,11 @@
+ groupId : 1,
+ },
+
++ {name: "mp3dec", mod: MP3DEC , threadAttrs: {
++ stackMemId: 0, priority: Server.MINPRI + 3},
++ groupId : 1,
++ },
++
+ {name: "g711dec", mod: G711DEC , threadAttrs: {
+ stackMemId: 0, priority: Server.MINPRI + 3},
+ groupId : 1,
+diff -uNr -x .xdcenv.mak -x mp3dec cs1omap3530_1_00_01/packages/ti/sdo/server/cs/package.xs cs1omap3530_1_00_01_patches/packages/ti/sdo/server/cs/package.xs
+--- cs1omap3530_1_00_01/packages/ti/sdo/server/cs/package.xs 2009-10-26 14:19:20.000000000 -0500
++++ cs1omap3530_1_00_01_patches/packages/ti/sdo/server/cs/package.xs 2009-10-26 14:53:40.000000000 -0500
+@@ -17,6 +17,7 @@
+ validate_one_codec( "ti.sdo.codecs.mpeg2dec", "MPEG2DEC" );
+ validate_one_codec( "ti.sdo.codecs.mpeg4dec", "MPEG4DEC" );
+ validate_one_codec( "ti.sdo.codecs.mpeg4enc", "MPEG4ENC" );
++ validate_one_codec( "ti.sdo.codecs.mp3dec", "MP3DEC" );
+ }
+
+ function validate_one_codec( packageName, moduleName ) {
diff --git a/extras/recipes-ti/codec-engine/ti-codecs-omap3530_4.00.00.00.bb b/extras/recipes-ti/codec-engine/ti-codecs-omap3530_4.00.00.00.bb
new file mode 100644
index 00000000..ea9f3890
--- /dev/null
+++ b/extras/recipes-ti/codec-engine/ti-codecs-omap3530_4.00.00.00.bb
@@ -0,0 +1,208 @@
+DESCRIPTION = "TI Codecs and Server Combo for OMAP3530"
+SECTION = "multimedia"
+LICENSE = "TI"
+
+require recipes-ti/includes/ti-paths.inc
+require recipes-ti/includes/ti-staging.inc
+
+PR="${MACHINE_KERNEL_PR}"
+PR_append = "a"
+
+PV="4_00_00_00"
+
+LIC_FILES_CHKSUM = "file://packages/ti/sdo/server/cs/docs/cs1omap3530_software_manifest.pdf;md5=84444ba7c7abe117c30f9c960d1930ec"
+
+CODEC_SUITE_NAME="${WORKDIR}/${PN}_${PV}"
+
+SRCREV = "8393c892b09e0ac42b19ff1531e232478c3b1a6c"
+
+require recipes-ti/includes/ti-eula-unpack.inc
+
+SRC_URI="http://software-dl.ti.com/dsps/dsps_public_sw/codecs/OMAP35xx//OMAP35xx_latest/omap3530_h264enc_2_01_013_production.bin;name=h264enc \
+ http://software-dl.ti.com/dsps/dsps_public_sw/codecs/OMAP35xx//OMAP35xx_latest/omap3530_h264dec_2_01_007_production.bin;name=h264dec \
+ http://software-dl.ti.com/dsps/dsps_public_sw/codecs/OMAP35xx//OMAP35xx_latest/omap3530_jpegenc_02_01_01_00_production.bin;name=jpegenc \
+ http://software-dl.ti.com/dsps/dsps_public_sw/codecs/C64XPlus_Video//C64XPlus_Video_latest/c64xplus_jpegdec_02_00_01_01_production.bin;name=jpegdec \
+ http://software-dl.ti.com/dsps/dsps_public_sw/codecs/C64XPlus_Video//C64XPlus_Video_latest/c64xplus_mpeg2dec_02_00_02_00_production.bin;name=mpeg2dec \
+ http://software-dl.ti.com/dsps/dsps_public_sw/codecs/OMAP35xx//OMAP35xx_latest/omap3530_mpeg4enc_02_04_00_00_production.bin;name=mpeg4enc \
+ http://software-dl.ti.com/dsps/dsps_public_sw/codecs/C64XPlus_Video//C64XPlus_Video_latest/c64xplus_mpeg4dec_02_01_00_00_production.bin;name=mpeg4dec \
+ http://software-dl.ti.com/dsps/dsps_public_sw/codecs/C64XPlus_Audio//C64XPlus_Audio_latest/c64xplus_aachedec_01_30_03_00_production.bin;name=aachedec \
+ http://software-dl.ti.com/dsps/dsps_public_sw/codecs/C64XPlus_Speech//C64XPlus_Speech_latest/c64xplus_g711_1_12_00_000_production.bin;name=g711 \
+ http://software-dl.ti.com/dsps/dsps_public_sw/sdo_tii/OMAP35xx_DM37xx_C64xPLUS_Algorithms/01_00_00_07//exports/c64xplus_deinterlacer_01_00_00_07_production.bin;name=i2p \
+ git://arago-project.org/git/projects/codec-servers.git;protocol=git \
+ \
+ file://disable-c6accel.diff \
+"
+
+SRC_URI[h264enc.md5sum] = "4a7a4698b1db360fe103aae76127a4ec"
+SRC_URI[h264enc.sha256sum] = "8fd970d83004bb099f51420b0eecd660b4ba9dccc87b2759d0b5a0be46f8f1a0"
+
+SRC_URI[h264dec.md5sum] = "81980df2d9dbedc5b64789c4e5575819"
+SRC_URI[h264dec.sha256sum] = "19d65e71ba0342670cb217e0fa6617263ff68a513e8444a8dfd5f34bd641b24f"
+
+SRC_URI[jpegenc.md5sum] = "c2e8ad88e90c04d2de7b199517019ac8"
+SRC_URI[jpegenc.sha256sum] = "6525e067cb5dd00cfc0b38045c44dcbed05866f8ad20188ceac630812502d473"
+
+SRC_URI[jpegdec.md5sum] = "cf2886c3406ab41409a586e5d550918d"
+SRC_URI[jpegdec.sha256sum] = "6b0c9f1b8f023070c6a59af690f015f84f2c7f3143235f788ddd1a4a7b229089"
+
+SRC_URI[mpeg2dec.md5sum] = "da3d0561f3073352be43dce96ce1ea62"
+SRC_URI[mpeg2dec.sha256sum] = "06cdb31242b8649bdd46bc07b9276de0ccd5f4e1c137d3cb79e0866c1ed04264"
+
+SRC_URI[mpeg4enc.md5sum] = "07c36e5d03368e1326df75a1f0c4934d"
+SRC_URI[mpeg4enc.sha256sum] = "a9566c8978f7230936053de9b1f3bfe8820ae555262ceba87243abdf60e5193f"
+
+SRC_URI[mpeg4dec.md5sum] = "4a27cda2d5a859e6322680a4855b6b88"
+SRC_URI[mpeg4dec.sha256sum] = "ca35db6841586fc2c22dd9c07a7f5b8557f480fa907e8a3471b660d4ada76e40"
+
+SRC_URI[aachedec.md5sum] = "649f2e79b4950719295cfecbff2ea82b"
+SRC_URI[aachedec.sha256sum] = "34d19e40d624ccdc1b371f9a5d6594b4793bdf3b7223ac65912d15d75320e020"
+
+SRC_URI[g711.md5sum] = "fd8e9f939cc505dc5761705ed17a726c"
+SRC_URI[g711.sha256sum] = "c87021e8df2a3f494f47e5bdce8a5fad04d667aa1b792fd9b3ecff634867b48d"
+
+SRC_URI[i2p.md5sum] = "f67c04eec9ee49c7a686eecf5d54be33"
+SRC_URI[i2p.sha256sum] = "3fbf8801f3ce2aabb6d31eb18e1e24e41ca861696b3140536f1d66adc76f0323"
+
+
+TI_BIN_UNPK_CMDS = "Y:workdir"
+
+S = "${CODEC_SUITE_NAME}"
+
+DEPENDS = "ti-cgt6x ti-xdctools ti-dspbios ti-codec-engine ti-linuxutils"
+
+#generic codec
+DSPSUFFIX_omap3530 = "x64P"
+
+python do_unpack () {
+ bb.build.exec_func('base_do_unpack', d)
+
+ bb.data.setVar("BINFILE", "omap3530_h264enc_2_01_013_production.bin", d)
+ bb.data.setVar("TARFILE", "omap3530_h264enc_2_01_013_production.tar", d)
+ bb.build.exec_func('ti_bin_do_unpack', d)
+
+ bb.data.setVar("BINFILE", "omap3530_h264dec_2_01_007_production.bin", d)
+ bb.data.setVar("TARFILE", "omap3530_h264dec_2_01_007_production.tar", d)
+ bb.build.exec_func('ti_bin_do_unpack', d)
+
+ bb.data.setVar("BINFILE", "omap3530_jpegenc_02_01_01_00_production.bin", d)
+ bb.data.setVar("TARFILE", "omap3530_jpegenc_02_01_01_00_production.tar", d)
+ bb.build.exec_func('ti_bin_do_unpack', d)
+
+ bb.data.setVar("BINFILE", "c64xplus_jpegdec_02_00_01_01_production.bin", d)
+ bb.data.setVar("TARFILE", "c64xplus_jpegdec_02_00_01_01_production.tar", d)
+ bb.build.exec_func('ti_bin_do_unpack', d)
+
+ bb.data.setVar("BINFILE", "c64xplus_mpeg2dec_02_00_02_00_production.bin", d)
+ bb.data.setVar("TARFILE", "c64xplus_mpeg2dec_02_00_02_00_production.tar", d)
+ bb.build.exec_func('ti_bin_do_unpack', d)
+
+ bb.data.setVar("BINFILE", "omap3530_mpeg4enc_02_04_00_00_production.bin", d)
+ bb.data.setVar("TARFILE", "omap3530_mpeg4enc_02_04_00_00_production.tar", d)
+ bb.build.exec_func('ti_bin_do_unpack', d)
+
+ bb.data.setVar("BINFILE", "c64xplus_mpeg4dec_02_01_00_00_production.bin", d)
+ bb.data.setVar("TARFILE", "c64xplus_mpeg4dec_02_01_00_00_production.tar", d)
+ bb.build.exec_func('ti_bin_do_unpack', d)
+
+ bb.data.setVar("BINFILE", "c64xplus_aachedec_01_30_03_00_production.bin", d)
+ bb.data.setVar("TARFILE", "dm6446_aachedec_01_30_03_00_production.tar", d)
+ bb.build.exec_func('ti_bin_do_unpack', d)
+
+ bb.data.setVar("BINFILE", "c64xplus_g711_1_12_00_000_production.bin", d)
+ bb.data.setVar("TARFILE", "dm6446_g711enc_1_12_00_000_production.tar", d)
+ bb.build.exec_func('ti_bin_do_unpack', d)
+
+ bb.data.setVar("BINFILE", "c64xplus_g711_1_12_00_000_production.bin", d)
+ bb.data.setVar("TARFILE", "dm6446_g711dec_1_12_00_000_production.tar", d)
+ bb.build.exec_func('ti_bin_do_unpack', d)
+
+ bb.data.setVar("BINFILE", "c64xplus_deinterlacer_01_00_00_07_production.bin", d)
+ bb.data.setVar("TARFILE", "c64xplus_deinterlacer_01_00_00_07/c64xplus_deinterlacer_01_00_00_07_production.tar", d)
+ bb.data.setVar("TI_BIN_UNPK_CMDS", "y: :q: ", d)
+ bb.build.exec_func('ti_bin_do_unpack', d)
+
+}
+
+addtask prepsources after do_unpack before do_patch
+
+do_prepsources () {
+
+ mkdir -p ${CODEC_SUITE_NAME}/packages/ti/sdo/server/cs
+ cp ${WORKDIR}/git/omap3530/cs1omap3530/rel-files/* ${CODEC_SUITE_NAME}/
+ cp ${WORKDIR}/git/omap3530/cs1omap3530/source/* ${CODEC_SUITE_NAME}/packages/ti/sdo/server/cs
+ cp -a "${WORKDIR}/git/omap3530/cs1omap3530/docs" ${CODEC_SUITE_NAME}/packages/ti/sdo/server/cs
+
+ mkdir -p ${CODEC_SUITE_NAME}/packages/ti/sdo/codecs
+ cp -a "${WORKDIR}/omap3530_h264enc_2_01_013_production/packages/ti/sdo/codecs/h264enc" "${CODEC_SUITE_NAME}/packages/ti/sdo/codecs"
+ cp -a "${WORKDIR}/omap3530_h264dec_2_01_007_production/packages/ti/sdo/codecs/h264dec" "${CODEC_SUITE_NAME}/packages/ti/sdo/codecs"
+ cp -a "${WORKDIR}/omap3530_jpegenc_02_01_01_00_production/packages/ti/sdo/codecs/jpegenc" "${CODEC_SUITE_NAME}/packages/ti/sdo/codecs"
+ cp -a "${WORKDIR}/c64xplus_jpegdec_02_00_01_01_production/packages/ti/sdo/codecs/jpegdec" "${CODEC_SUITE_NAME}/packages/ti/sdo/codecs"
+ cp -a "${WORKDIR}/c64xplus_mpeg2dec_02_00_02_00_production/packages/ti/sdo/codecs/mpeg2dec" "${CODEC_SUITE_NAME}/packages/ti/sdo/codecs"
+ cp -a "${WORKDIR}/omap3530_mpeg4enc_02_04_00_00_production/packages/ti/sdo/codecs/mpeg4enc" "${CODEC_SUITE_NAME}/packages/ti/sdo/codecs"
+ cp -a "${WORKDIR}/c64xplus_mpeg4dec_02_01_00_00_production/packages/ti/sdo/codecs/mpeg4dec" "${CODEC_SUITE_NAME}/packages/ti/sdo/codecs"
+ chmod -R +w "${WORKDIR}/dm6446_aachedec_01_30_03_00_production/packages/ti/sdo/codecs/aachedec/docs"
+ cp -a "${WORKDIR}/dm6446_aachedec_01_30_03_00_production/packages/ti/sdo/codecs/aachedec" "${CODEC_SUITE_NAME}/packages/ti/sdo/codecs"
+ cp -a "${WORKDIR}/dm6446_g711enc_1_12_00_000_production/packages/ti/sdo/codecs/g711enc" "${CODEC_SUITE_NAME}/packages/ti/sdo/codecs"
+ cp -a "${WORKDIR}/dm6446_g711dec_1_12_00_000_production/packages/ti/sdo/codecs/g711dec" "${CODEC_SUITE_NAME}/packages/ti/sdo/codecs"
+ cp -a "${WORKDIR}/c64xplus_deinterlacer_01_00_00_07_production/packages/ti/sdo/codecs/deinterlacer" "${CODEC_SUITE_NAME}/packages/ti/sdo/codecs"
+ chmod 755 -R ${CODEC_SUITE_NAME}
+}
+
+do_compile() {
+
+ cd "${S}"
+
+ make \
+ CE_INSTALL_DIR=${CE_INSTALL_DIR} \
+ FC_INSTALL_DIR=${FC_INSTALL_DIR} \
+ LINK_INSTALL_DIR=${LINK_INSTALL_DIR} \
+ CMEM_INSTALL_DIR=${CMEM_INSTALL_DIR} \
+ LPM_INSTALL_DIR=${LPM_INSTALL_DIR} \
+ BIOS_INSTALL_DIR=${BIOS_INSTALL_DIR} \
+ CODEGEN_INSTALL_DIR=${CODEGEN_INSTALL_DIR} \
+ XDC_INSTALL_DIR=${XDC_INSTALL_DIR} \
+ CODEC_INSTALL_DIR="${S}" \
+ XDCARGS="prod" \
+ C6ACCEL_INSTALL_DIR=${C6ACCEL_INSTALL_DIR} \
+ clean
+
+ make \
+ CE_INSTALL_DIR=${CE_INSTALL_DIR} \
+ FC_INSTALL_DIR=${FC_INSTALL_DIR} \
+ LINK_INSTALL_DIR=${LINK_INSTALL_DIR} \
+ CMEM_INSTALL_DIR=${CMEM_INSTALL_DIR} \
+ LPM_INSTALL_DIR=${LPM_INSTALL_DIR} \
+ BIOS_INSTALL_DIR=${BIOS_INSTALL_DIR} \
+ CODEGEN_INSTALL_DIR=${CODEGEN_INSTALL_DIR} \
+ XDC_INSTALL_DIR=${XDC_INSTALL_DIR} \
+ CODEC_INSTALL_DIR="${S}" \
+ XDCARGS="prod" \
+ C6ACCEL_INSTALL_DIR=${C6ACCEL_INSTALL_DIR} \
+ all
+}
+
+do_install() {
+
+ install -d ${D}/${installdir}/ti-codecs-server
+ cd ${S}
+
+ # Install the DSP Server Binary
+ for file in `find . -name *.${DSPSUFFIX}`; do
+ cp ${file} ${D}/${installdir}/ti-codecs-server
+ done
+
+ # Install docs (codec qualiTI test reports, server config datasheet, etc)
+ for file in `find . -name *.html`; do
+ cp ${file} ${D}/${installdir}/ti-codecs-server
+ done
+
+ install -d ${D}${CODEC_INSTALL_DIR_RECIPE}
+ cp -pPrf ${CODEC_SUITE_NAME}/* ${D}${CODEC_INSTALL_DIR_RECIPE}
+}
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+PACKAGES += "ti-codecs-omap3530-server"
+FILES_ti-codecs-omap3530-server = "${installdir}/ti-codecs-server/*"
+
+
diff --git a/extras/recipes-ti/devtools/ti-cgt470.inc b/extras/recipes-ti/devtools/ti-cgt470.inc
new file mode 100644
index 00000000..f0992aa7
--- /dev/null
+++ b/extras/recipes-ti/devtools/ti-cgt470.inc
@@ -0,0 +1,24 @@
+DESCRIPTION = "TI ARM Code Generation Tools"
+HOMEPAGE = "https://www-a.ti.com/downloads/sds_support/CodeGenerationTools.htm"
+SECTION = "devel"
+LICENSE = "TI"
+
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=62f46f1125a152a2e213b414db7ac600"
+
+require ../includes/ti-paths.inc
+require ../includes/ti-staging.inc
+require ../includes/ti-eula-unpack.inc
+
+S = "${WORKDIR}/cgt470_${PV}"
+
+SRC_URI = "http://install.source.dir.local/ti_cgt_tms470_${PVwithdots}_setup_linux_x86.bin;name=cgt470bin"
+
+BINFILE="ti_cgt_tms470_${PVwithdots}_setup_linux_x86.bin"
+TI_BIN_UNPK_CMDS="Y:qY:workdir: : "
+TI_BIN_UNPK_WDEXT="/cgt470_${PV}"
+
+do_install() {
+ install -d ${D}${CODEGEN_ARM_INSTALL_DIR_RECIPE}
+ cp -pPrf ${S}/* ${D}${CODEGEN_ARM_INSTALL_DIR_RECIPE}
+}
+
diff --git a/extras/recipes-ti/devtools/ti-cgt470_4.6.6.bb b/extras/recipes-ti/devtools/ti-cgt470_4.6.6.bb
new file mode 100644
index 00000000..6ff2cc48
--- /dev/null
+++ b/extras/recipes-ti/devtools/ti-cgt470_4.6.6.bb
@@ -0,0 +1,8 @@
+require ti-cgt470.inc
+
+PV = "4_6_6"
+PVwithdots = "4.6.6"
+
+SRC_URI[cgt470bin.md5sum] = "29a316dc6b8c8c3a53e0d6c956acb62b"
+SRC_URI[cgt470bin.sha256sum] = "a17bc7139f450672503c932ef53b00c425522890e031b4a7c9135fdf90815740"
+
diff --git a/extras/recipes-ti/devtools/ti-cgt6x.inc b/extras/recipes-ti/devtools/ti-cgt6x.inc
new file mode 100644
index 00000000..1d00a553
--- /dev/null
+++ b/extras/recipes-ti/devtools/ti-cgt6x.inc
@@ -0,0 +1,24 @@
+DESCRIPTION = "TI DSP Code Generation Tools"
+HOMEPAGE = "https://www-a.ti.com/downloads/sds_support/TICodegenerationTools/download.htm"
+SECTION = "devel"
+LICENSE = "TI"
+
+require ../includes/ti-paths.inc
+require ../includes/ti-staging.inc
+require ../includes/ti-eula-unpack.inc
+
+PR = "r4"
+
+S = "${WORKDIR}/cgt6x_${PV}"
+
+SRC_URI = "http://install.source.dir.local/ti_cgt_c6000_${PVwithdots}_setup_linux_x86.bin;name=cgt6xbin"
+
+BINFILE="ti_cgt_c6000_${PVwithdots}_setup_linux_x86.bin"
+TI_BIN_UNPK_CMDS="Y:qY:workdir: : "
+TI_BIN_UNPK_WDEXT="/cgt6x_${PV}"
+
+do_install() {
+ install -d ${D}${CODEGEN_INSTALL_DIR_RECIPE}
+ cp -pPrf ${S}/* ${D}${CODEGEN_INSTALL_DIR_RECIPE}
+}
+
diff --git a/extras/recipes-ti/devtools/ti-cgt6x_6.1.20.bb b/extras/recipes-ti/devtools/ti-cgt6x_6.1.20.bb
new file mode 100644
index 00000000..1d6609c8
--- /dev/null
+++ b/extras/recipes-ti/devtools/ti-cgt6x_6.1.20.bb
@@ -0,0 +1,11 @@
+require ti-cgt6x.inc
+
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=62f46f1125a152a2e213b414db7ac600"
+
+PE = "1"
+PV = "6_1_20"
+PVwithdots = "6.1.20"
+
+SRC_URI[cgt6xbin.md5sum] = "39485ea8211960de0a958ab27106ab9b"
+SRC_URI[cgt6xbin.sha256sum] = "a020142011c8160e24f6386f7696ecfbfe02dab2a6c83af74ce6b67eb1da9900"
+
diff --git a/extras/recipes-ti/devtools/ti-cgt6x_7.2.7.bb b/extras/recipes-ti/devtools/ti-cgt6x_7.2.7.bb
new file mode 100644
index 00000000..aab1b96c
--- /dev/null
+++ b/extras/recipes-ti/devtools/ti-cgt6x_7.2.7.bb
@@ -0,0 +1,11 @@
+require ti-cgt6x.inc
+
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=62f46f1125a152a2e213b414db7ac600"
+
+PE = "1"
+PV = "7_2_7"
+PVwithdots = "7.2.7"
+
+SRC_URI[cgt6xbin.md5sum] = "71a0768a541fdebd9c35d44301019d1d"
+SRC_URI[cgt6xbin.sha256sum] = "211477f0142d603975544abe3c45cc3b77a3b38038158676c60812806378738b"
+
diff --git a/extras/recipes-ti/devtools/ti-xdctools.inc b/extras/recipes-ti/devtools/ti-xdctools.inc
new file mode 100644
index 00000000..547a5554
--- /dev/null
+++ b/extras/recipes-ti/devtools/ti-xdctools.inc
@@ -0,0 +1,62 @@
+DESCRIPTION = "TI XDCtools (RTSC - Real Time Software Components - http://rtsc.eclipse.org)"
+HOMEPAGE = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/rtsc"
+SECTION = "devel"
+LICENSE = "BSD & GPLv2"
+
+require ../includes/ti-paths.inc
+require ../includes/ti-staging.inc
+require ../includes/ti-eula-unpack.inc
+
+S = "${WORKDIR}/xdctools_${PV}"
+
+SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/rtsc/${PV}/exports/xdctools_setuplinux_${PV}.bin;name=xdcbin"
+
+BINFILE="xdctools_setuplinux_${PV}.bin"
+TI_BIN_UNPK_CMDS="Y:workdir:Y"
+TI_BIN_UNPK_WDEXT="/ti"
+
+do_install() {
+ install -d ${D}${XDC_INSTALL_DIR_RECIPE}
+ cp -pPrf ${S}/* ${D}${XDC_INSTALL_DIR_RECIPE}
+}
+
+# Prevent internal libs from getting picked up
+PRIVATE_LIBS = " \
+libncdb.so \
+libcdb.so \
+libjavaplugin_oji.so \
+libjavaplugin_jni.so \
+libjsound.so \
+libinstrument.so \
+libjawt.so \
+libzip.so \
+libjava_crw_demo.so \
+libjavaplugin_nscp_gcc29.so \
+libhprof.so \
+libcmm.so \
+libjdwp.so \
+libmlib_image.so \
+libjpeg.so \
+libverify.so \
+libjavaplugin_nscp.so \
+libmanagement.so \
+libunpack.so \
+librmi.so \
+libJdbcOdbc.so \
+libawt.so \
+libnet.so \
+libjaas_unix.so \
+libnio.so \
+libdcpr.so \
+libioser12.so \
+libjsoundalsa.so \
+libjava.so \
+libfontmanager.so \
+libdt_socket.so \
+libmawt.so \
+libjvm.so \
+libhpi.so \
+lib.so \
+libcairo.so.2 \
+"
+
diff --git a/extras/recipes-ti/devtools/ti-xdctools/arm-linker-hack.diff b/extras/recipes-ti/devtools/ti-xdctools/arm-linker-hack.diff
new file mode 100644
index 00000000..26debf8f
--- /dev/null
+++ b/extras/recipes-ti/devtools/ti-xdctools/arm-linker-hack.diff
@@ -0,0 +1,19 @@
+--- a/packages/gnu/targets/arm/linkcmd.xdt 2010-12-30 19:33:53.000000000 +0100
++++ b/packages/gnu/targets/arm/linkcmd.xdt 2010-12-30 19:42:55.000000000 +0100
+@@ -40,12 +40,13 @@
+
+ %if ("BINVERS" in prog.build.target) {
+ % var _utils = xdc.loadCapsule("gnu/targets/linkUtils.xs");
++% if (prog.build.target.GCCVERS < "4.3.3") {
+ SECTIONS {
+ `_utils.genSections(prog)`
+ }
+-
+-% if (!prog.build.target.noStdLinkScript
+-% && prog.build.target.BINVERS >= "2.19") {
++% }
++% if (prog.build.target.noStdLinkScript
++% && prog.build.target.BINVERS >= "2.19") {
+ INSERT BEFORE .gnu.attributes
+ % }
+
diff --git a/extras/recipes-ti/devtools/ti-xdctools/fix-hardcoded-paths.diff b/extras/recipes-ti/devtools/ti-xdctools/fix-hardcoded-paths.diff
new file mode 100644
index 00000000..36142c47
--- /dev/null
+++ b/extras/recipes-ti/devtools/ti-xdctools/fix-hardcoded-paths.diff
@@ -0,0 +1,21 @@
+diff -ur a/packages/gnu/targets/ITarget.xs b/packages/gnu/targets/ITarget.xs
+--- a/packages/gnu/targets/ITarget.xs 2011-08-06 13:24:44.000000000 +0200
++++ b/packages/gnu/targets/ITarget.xs 2011-08-06 13:23:37.000000000 +0200
+@@ -251,7 +251,7 @@
+
+ function askLd(target)
+ {
+- var ldCmd = target.rootDir + "/" + target.GCCTARG + "/bin/ld";
++ var ldCmd = target.rootDir + "/" + target.GCCTARG + "-ld";
+ /* If the ld executable cannot be found, and the prefix is not used,
+ * it's probably a misspelled directory path.
+ */
+@@ -486,7 +486,7 @@
+ tool2cmd["link"] = cmd;
+
+ /* define the ar command template */
+- cmd = prefix + target.ar.cmd
++ cmd = prefix + target.GCCTARG + "-ar"
+ + " $(AROPTS_P) " + target.ar.opts
+ + " $@ $(AROPTS_S) $(aropts) $(files)";
+ tool2cmd["ar"] = cmd;
diff --git a/extras/recipes-ti/devtools/ti-xdctools_3.23.00.32.bb b/extras/recipes-ti/devtools/ti-xdctools_3.23.00.32.bb
new file mode 100644
index 00000000..b2db76c9
--- /dev/null
+++ b/extras/recipes-ti/devtools/ti-xdctools_3.23.00.32.bb
@@ -0,0 +1,11 @@
+require ti-xdctools.inc
+
+PV = "3_23_00_32"
+LIC_FILES_CHKSUM = "file://docs/license/xdc/shelf/package.html;md5=49b2dfbf48860a0da844709c3ce63a9c"
+
+SRC_URI += "file://fix-hardcoded-paths.diff"
+
+SRC_URI[xdcbin.md5sum] = "263aa11795670265551d36a8c77ad27d"
+SRC_URI[xdcbin.sha256sum] = "880b4e263850f2a3c0ea7352c5b6e0a86692361e26634c3b70dddc42c71231a5"
+
+S = "${WORKDIR}/ti/xdctools_${PV}"
diff --git a/extras/recipes-ti/dmai/ti-dmai.inc b/extras/recipes-ti/dmai/ti-dmai.inc
new file mode 100644
index 00000000..23481b7f
--- /dev/null
+++ b/extras/recipes-ti/dmai/ti-dmai.inc
@@ -0,0 +1,161 @@
+DESCRIPTION = "Davinci Multimedia Application Interface (DMAI) for TI ARM/DSP processors"
+HOMEPAGE = "https://gforge.ti.com/gf/project/dmai/"
+SECTION = "multimedia"
+LICENSE = "BSD"
+
+# TODO ::
+
+require recipes-ti/includes/ti-paths.inc
+require recipes-ti/includes/ti-staging.inc
+
+PROVIDES += "ti-dmai-apps"
+
+PE = "1"
+
+SRCREV ?= "UNDEFINED_SRCREV"
+DMAIBRANCH ?= "UNDEFINED_DMAIBRANCH"
+
+S = "${WORKDIR}/${DMAIBRANCH}/davinci_multimedia_application_interface/dmai_${PV}/dmai"
+
+SRC_URI = "svn://gforge.ti.com/svn/dmai/;module=${DMAIBRANCH};proto=https;user=anonymous;pswd='' \
+ file://loadmodules-ti-dmai-dm6446_al.sh \
+ file://loadmodules-ti-dmai-dm6467_al.sh \
+ file://loadmodules-ti-dmai-o3530_al.sh \
+ file://loadmodules-ti-dmai-dm355_al.sh \
+ file://loadmodules-ti-dmai-dm365_al.sh \
+ file://loadmodules-ti-dmai-ol137_al.sh \
+ file://loadmodules-ti-dmai-ol138_al.sh \
+ file://doxygen_templates.tar.gz \
+ file://arago-tdox \
+ "
+
+DEPENDS = "virtual/kernel alsa-lib ti-framework-components ti-codec-engine ti-xdctools"
+
+DEPENDS_append_dm6446 = " ti-codecs-dm6446 ti-dspbios ti-cgt6x ti-linuxutils"
+DEPENDS_append_dm6467 = " ti-codecs-dm6467 ti-dspbios ti-cgt6x ti-linuxutils"
+DEPENDS_append_omap3 = " ti-codecs-omap3530 ti-dspbios ti-cgt6x ti-linuxutils"
+DEPENDS_append_dm355 = " ti-codecs-dm355"
+DEPENDS_append_dm365 = " ti-codecs-dm365"
+DEPENDS_append_omapl137 = " ti-codecs-omapl137 ti-dspbios ti-cgt6x ti-linuxutils"
+DEPENDS_append_omapl138 = " ti-codecs-omapl138 ti-dspbios ti-cgt6x ti-linuxutils"
+
+# Define DMAI build time variables
+DMAIPLATFORM_dm6446 = "dm6446_al"
+DMAIPLATFORM_dm6467 = "dm6467_al"
+DMAIPLATFORM_omap3 = "o3530_al"
+DMAIPLATFORM_dm355 = "dm355_al"
+DMAIPLATFORM_dm365 = "dm365_al"
+DMAIPLATFORM_omapl137 = "ol137_al"
+DMAIPLATFORM_omapl138 = "ol138_al"
+DMAIPLATFORM ?= "UNDEFINED_DMAIPLATFORM"
+
+# Need to set this for other platforms as well
+#GPPOS_dm355 = "LINUX_GCC"
+#GPPOS_dm365 = "LINUX_GCC"
+#GPPOS ?= "UNDEFINEDGPPOS"
+
+# Need to re-define this for OMAP-L137/L138
+DSPSUFFIX_omapl137 = "x64P"
+DSPSUFFIX_omapl138 = "x64P"
+DSPSUFFIX ?= "x64p"
+
+# This is needed for dm355/dm365 targets in order to find ti.sdo.codecs.g711
+# TODO :: review - should we just pass this in do_compile?
+USER_XDC_PATH = "${CE_INSTALL_DIR}/examples"
+
+PARALLEL_MAKE = ""
+
+do_prepsources() {
+ # run the release steps - this will delete .svn file and run doxygen to
+ # generate proper documentation of the source etc.
+ find ${WORKDIR}/${DMAIBRANCH} -name .svn -type d | xargs rm -rf
+ cp -pPrf ${WORKDIR}/doxygen_templates ${WORKDIR}/${DMAIBRANCH}/davinci_multimedia_application_interface
+ cp -pPrf ${WORKDIR}/arago-tdox ${WORKDIR}/${DMAIBRANCH}/davinci_multimedia_application_interface/tdox
+ chmod a+x ${WORKDIR}/${DMAIBRANCH}/davinci_multimedia_application_interface/release.sh
+ chmod a+x ${WORKDIR}/${DMAIBRANCH}/davinci_multimedia_application_interface/tdox
+ sed -i 's|tdox|./tdox|g' ${WORKDIR}/${DMAIBRANCH}/davinci_multimedia_application_interface/release.sh
+ (cd ${WORKDIR}/${DMAIBRANCH}/davinci_multimedia_application_interface; ./release.sh ${PV})
+}
+
+# run prepare sources before do_patch to ensure that sourceipk picks the right sources.
+addtask prepsources after do_unpack before do_patch
+
+do_compile () {
+ # Recent kernel headers warn against inclusion from userspace
+ for makefile in $(find ${S} -name "Makefile") ; do
+ sed -i -e s:-Werror::g $makefile
+ done
+
+ # Angstrom 2008 breaks with -Wl,-T, while angstrom 2010 needs it
+ if [ $(${TARGET_PREFIX}gcc -dumpversion | awk -F. '{print $2}') -gt 3 ] ; then
+ # Fix up linkerscripts, recent toolchains need -T to prepend the default script to the custom one
+ for appmakefile in $(find ${S} -name "Makefile.app") ; do
+ sed -i -e 's: $(XDC_CFG)/linker.cmd: -Wl,-T,$(XDC_CFG)/linker.cmd:g' $appmakefile
+ done
+ fi
+
+ # TODO :: Why do we do this?
+ unset DMAI_INSTALL_DIR
+ cd ${S}
+
+ make XDC_INSTALL_DIR="${XDC_INSTALL_DIR}" PLATFORM="${DMAIPLATFORM}" clean
+
+ for dir in ${S}; do
+ cd $dir
+ # TODO: Figure out how to pass the alsa require location, currently
+ # LINUXLIBS_INSTALL_DIR is hard-coded for armv5te
+ make \
+ CE_INSTALL_DIR="${CE_INSTALL_DIR}" \
+ CODEC_INSTALL_DIR="${CODEC_INSTALL_DIR}" \
+ FC_INSTALL_DIR="${FC_INSTALL_DIR}" \
+ LINUXKERNEL_INSTALL_DIR="${STAGING_KERNEL_DIR}" \
+ XDC_INSTALL_DIR="${XDC_INSTALL_DIR}" \
+ CODEGEN_INSTALL_DIR="${CODEGEN_INSTALL_DIR}" \
+ BIOS_INSTALL_DIR="${BIOS_INSTALL_DIR}"\
+ LINUXLIBS_INSTALL_DIR="${STAGING_DIR_TARGET}/usr" \
+ USER_XDC_PATH="${USER_XDC_PATH}" \
+ CROSS_COMPILE="${TOOLCHAIN_PATH}/${TARGET_PREFIX}" \
+ CSTOOL_DIR="${TOOLCHAIN_PATH}" \
+ VERBOSE="true" \
+ XDAIS_INSTALL_DIR="${XDAIS_INSTALL_DIR}" \
+ LINK_INSTALL_DIR="${LINK_INSTALL_DIR}" \
+ CMEM_INSTALL_DIR="${CMEM_INSTALL_DIR}" \
+ LPM_INSTALL_DIR="${LPM_INSTALL_DIR}" \
+ C6ACCEL_INSTALL_DIR=${C6ACCEL_INSTALL_DIR} \
+ MVTOOL_PREFIX="${TARGET_PREFIX}" \
+ PLATFORM="${DMAIPLATFORM}"
+ done
+}
+
+do_install () {
+
+ # TODO :: Why do we do this?
+ unset DMAI_INSTALL_DIR
+
+ install -d ${D}/${installdir}/ti-dmai-apps
+ cd ${S}
+ make PLATFORM="${DMAIPLATFORM}" EXEC_DIR=${D}/${installdir}/ti-dmai-apps install
+ install -m 0755 ${WORKDIR}/loadmodules-ti-dmai-${DMAIPLATFORM}.sh ${D}/${installdir}/ti-dmai-apps/loadmodules.sh
+
+ install -d ${D}${DMAI_INSTALL_DIR_RECIPE}
+ cp -pPrf ${S}/* ${D}${DMAI_INSTALL_DIR_RECIPE}
+}
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+PACKAGES += "ti-dmai-apps"
+FILES_ti-dmai-apps = "${installdir}/ti-dmai-apps/*"
+INSANE_SKIP_ti-dmai-apps = "1"
+
+RDEPENDS_ti-dmai-apps_dm6446 += "ti-codecs-dm6446-server ti-cmem-module ti-dsplink-module"
+RDEPENDS_ti-dmai-apps_dm6467 += "ti-codecs-dm6467 ti-cmem-module ti-dsplink-module"
+RDEPENDS_ti-dmai-apps_omap3 += "ti-codecs-omap3530-server ti-cmem-module ti-dsplink-module ti-lpm-module ti-sdma-module"
+RDEPENDS_ti-dmai-apps_dm355 += "ti-codecs-dm355 ti-cmem-module ti-dm355mm-module"
+RDEPENDS_ti-dmai-apps_dm365 += "ti-codecs-dm365 ti-cmem-module ti-dm365mm-module ti-edma-module ti-irq-module"
+RDEPENDS_ti-dmai-apps_omapl137 += "ti-codecs-omapl137-server ti-cmem-module ti-dsplink-module"
+RDEPENDS_ti-dmai-apps_omapl138 += "ti-codecs-omapl138-server ti-cmem-module ti-dsplink-module"
+
+pkg_postinst_ti-dmai-apps () {
+ ln -sf ${installdir}/ti-codecs-server/*.${DSPSUFFIX} ${installdir}/ti-dmai-apps/
+}
+
diff --git a/extras/recipes-ti/dmai/ti-dmai/arago-tdox b/extras/recipes-ti/dmai/ti-dmai/arago-tdox
new file mode 100644
index 00000000..81538cf3
--- /dev/null
+++ b/extras/recipes-ti/dmai/ti-dmai/arago-tdox
@@ -0,0 +1,210 @@
+#!/bin/bash
+#
+#
+# This script sets a series of environment variable that are referenced
+# in a doxygen configuration file. The values passed in here are simply
+# plugged into the file locations and doxygen proceeds normaly.
+#
+# template location is ${VENDORS}/opensource/doxygen/templates/<version>
+#
+#
+
+# Revision history
+#! 02 Jul 2009 cring: Added cmd line args for doxygendir (-x) and template (-t)
+#! 13 Jul 2006 ada: New template smaller pdf generation
+#! 16 May 2006 ada: Added -p file to pdf for space in project names
+#! 08 May 2006 ada: Added pdf generation to tdox (Solaris/Linux only).
+#! 23 Jan 2006 ada: Overide file to change default doxyfile behaivior
+#! 19 Jan 2006 ada: 1093, ENUM_VALUES_PER_LINE set to 1, ref doxyfile via vers
+#! 05 Oct 2005 ada: 933, doxyfile in tools, removed win and unix vendors path
+#! 24 Aug 2005 ada: Added 897 changes, optional css c or jave optimization
+#! 18 Aug 2005 ada: inital version from AR 887
+
+# Set these defaults here as the usage statement uses them
+TDOX_TEMPLATEDIR=${TOOLS}/default/doxygen_templates
+DOXYGEN_EXECUTABLE=doxygen
+
+function usage
+{
+ OPTIONS="`basename $0` code_location out_doc_location [-x doxygen_exe ] [-t tdox_templatedir] [-n project_name] [-v version] [-f FILE_PATTERNS ] [-s strip_dir] [-c css location] [-e exclude dirs] [-b enabled sections] [-m generate chm] [-p pdf_file] [-o override doxyfile] [-j]"
+ echo "`basename $1` $OPTIONS"
+ echo "Where: "
+ echo "\tcode_location: Top of tree(s) to search for code (required as 1st param)"
+ echo "\tout_doc_location: Output location for generated files (required as 2nd param)"
+ echo "\t[-n project_name]: title of generated documentation (defaults to Project)"
+ echo "\t[-x doxygen_exe]: location of doxygen executable (defaults to $DOXYGEN_EXECUTABLE)"
+ echo "\t[-t tdox_templatedir]: location of tdox templates (defaults to $TDOX_TEMPLATEDIR)"
+ echo "\t[-v version]: version number or string (defaults to 1.0)"
+ echo "\t[-f FILE_PATTERNS]: Optional list of files to document (defaults to all)"
+ echo "\t[-s strip_dirs]: Remove directory prefix from generated files (defaults to not remove)"
+ echo "\t[-c path_to_css]: Path to a user suplied CSS style sheet"
+ echo "\t[-e exclude dirs]: List of directories to exclude"
+ echo "\t[-b enabled sections]: List of sections to enable"
+ echo "\t[-m generate chm]: chm file name (required)"
+ echo "\t[-p generate pdf <file>]: create <file>.pdf in html/pdf (Linux only)"
+ echo "\t[-o override doxyfile]: file (advanced) Overide any doxyfile default"
+ echo "\t[-j]: Optimize for Java (Generate class files) defaults to C"
+ echo "\t[-r]: Call rshd to windows for chm generation (defaults to wine)"
+ echo
+ exit
+}
+
+function optimizeForJava
+{
+ DOX_OPTIMIZE_OUTPUT_JAVA="YES"
+ DOX_OPTIMIZE_OUTPUT_FOR_C="NO"
+}
+
+if [ "$#" -lt 2 ]; then
+ echo "Invalid number of parameters"
+ usage $0
+fi
+
+# get the required parameters then shift for the getopts parameters
+export DOX_INPUT="$1"
+shift
+export DOX_OUTPUT_DIRECTORY="$1"
+shift
+
+#set the global defaults
+DOX_QUIET="YES"
+DOX_OPTIMIZE_OUTPUT_JAVA="NO"
+DOX_OPTIMIZE_OUTPUT_FOR_C="YES"
+DOX_CHM_FILE=
+DOX_GENERATE_HTMLHELP="NO"
+OVERRIDE_FILE=""
+PDF=""
+
+# Process the rest of the arguments as getopts
+# parameters
+while getopts b:c:e:f:m:n:o:p:s:t:v:x:dhjr arg
+do
+ case $arg in
+ b) DOX_ENABLED_SECTIONS=${OPTARG};;
+ c) DOX_HTML_STYLESHEET=${OPTARG};;
+ d) DEBUG=1;;
+ e) DOX_EXCLUDE=${OPTARG};;
+ f) DOX_FILE_PATTERNS=${OPTARG};;
+ h) usage;exit 0;;
+ j) optimizeForJava;;
+ r) USERSHD=1;;
+ m) DOX_CHM_FILE=${OPTARG};DOX_GENERATE_HTMLHELP="YES";;
+ n) DOX_PROJECT_NAME=${OPTARG};;
+ s) DOX_STRIP_FROM_PATH=${OPTARG};;
+ t) TDOX_TEMPLATEDIR=${OPTARG};;
+ v) DOX_PROJECT_NUMBER=${OPTARG};;
+ x) DOXYGEN_EXECUTABLE=${OPTARG};;
+ o) OVERRIDE_FILE=${OPTARG};;
+ p) PDF=${OPTARG};;
+ \?) usage
+ exit 2;;
+ esac
+done
+
+if [ "$DEBUG" = "1" ]; then
+ DOX_QUIET="NO"
+ set -x
+fi
+
+if [ "$DOX_PROJECT_NAME" = "" ]; then
+ DOX_PROJECT_NAME="Project"
+fi
+
+if [ "$DOX_PROJECT_NUMBER" = "" ]; then
+ DOX_PROJECT_NUMBER="1.0"
+fi
+
+if [ "$DOX_FILE_PATTERNS" = "" ]; then
+ DOX_FILE_PATTERNS="*.c \
+ *.cc \
+ *.cxx \
+ *.cpp \
+ *.c++ \
+ *.d \
+ *.java \
+ *.ii \
+ *.ixx \
+ *.ipp \
+ *.i++ \
+ *.inl \
+ *.h \
+ *.hh \
+ *.hxx \
+ *.hpp \
+ *.h++ \
+ *.idl \
+ *.odl \
+ *.cs \
+ *.php \
+ *.php3 \
+ *.inc \
+ *.m \
+ *.mm \
+ *.dox"
+fi
+
+export DOX_INPUT
+export DOX_OUTPUT_DIRECTORY
+export DOX_PROJECT_NAME
+export DOX_PROJECT_NUMBER
+export DOX_FILE_PATTERNS
+export DOX_STRIP_FROM_PATH
+export DOX_QUIET
+export DOX_HTML_STYLESHEET
+export DOX_OPTIMIZE_OUTPUT_FOR_C
+export DOX_OPTIMIZE_OUTPUT_JAVA
+export DOX_EXCLUDE
+export DOX_ENABLED_SECTIONS
+export DOX_CHM_FILE
+export DOX_GENERATE_HTMLHELP
+export TDOX_TEMPLATEDIR
+
+
+# Make sure the dir exists
+mkdir -p $DOX_OUTPUT_DIRECTORY
+
+# Create temp file copy of doxyfile and append overrides to the end of the file
+cp ${TDOX_TEMPLATEDIR}/doxyfile /tmp/doxyfile$$
+
+chmod +w /tmp/doxyfile$$
+if [ "$OVERRIDE_FILE" != "" ]; then
+ cat $OVERRIDE_FILE >> /tmp/doxyfile$$
+fi
+
+# Run doxygen and clean up temp file
+${DOXYGEN_EXECUTABLE} /tmp/doxyfile$$
+rm -f /tmp/doxyfile$$
+
+# Copy the TI banner gifs to the html directory.
+cp -p ${TDOX_TEMPLATEDIR}/*gif $DOX_OUTPUT_DIRECTORY/html
+
+# Generate PDF files
+if [ "$PDF" != "" ]; then
+ if [ "$BUILD_HOST_OS" = "Linux" ]; then
+ rm -rf $DOX_OUTPUT_DIRECTORY/html/pdf
+ mkdir -p $DOX_OUTPUT_DIRECTORY/html/pdf
+ cwd=`pwd`
+ cd $DOX_OUTPUT_DIRECTORY/latex
+ latex refman.tex
+ makeindex refman.idx
+ latex refman.tex
+ latex_count=5
+ while egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $$latex_count -gt 0 ]
+ do
+ latex refman.tex
+ latex_count=`expr $$latex_count - 1`
+ done
+ dvips -o refman.ps refman.dvi
+ ps2pdf refman.ps refman.pdf
+ cd $cwd
+ mv $DOX_OUTPUT_DIRECTORY/latex/refman.pdf $DOX_OUTPUT_DIRECTORY/html/pdf/${PDF}.pdf
+ else
+ echo "Sorry... pdf generation supported under Linux only"
+ fi
+fi
+
+# Generate Windows compressed help
+if [ "$DOX_GENERATE_HTMLHELP" = "YES" ]; then
+
+ echo "chm generation is not supported"
+fi
diff --git a/extras/recipes-ti/dmai/ti-dmai/doxygen_templates.tar.gz b/extras/recipes-ti/dmai/ti-dmai/doxygen_templates.tar.gz
new file mode 100644
index 00000000..6d613bf5
--- /dev/null
+++ b/extras/recipes-ti/dmai/ti-dmai/doxygen_templates.tar.gz
Binary files differ
diff --git a/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-apps.sh b/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-apps.sh
new file mode 100755
index 00000000..7120b744
--- /dev/null
+++ b/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-apps.sh
@@ -0,0 +1,37 @@
+#
+# Default Memory Map - for OMAP3530 dvsdk examples from 3.00.00.29 - this memory map is used for DMAI apps
+#
+# Start Addr Size Description
+# -------------------------------------------
+# 0x80000000 88 MB Linux
+# 0x85800000 08 MB CMEM
+# 0x86800000 16 MB DDRALGHEAP
+# 0x87800000 6 MB DDR2 (BIOS, Codecs, Applications)
+# 0x87E00000 1 MB DSPLINK (MEM)
+# 0x87F00000 4 KB DSPLINK (RESET)
+# 0x87F01000 1020 KB unused
+
+# sanity check to verify that we're using the right mem=xxM (88M in this case)
+awk '/MemTotal:/ {
+ mem=$2
+
+ if (mem > 88 * 1024)
+ print "Warning! You need to use mem=88M or less on the kernel cmdline"
+
+ printf "You have %dkB total memory for Linux\n", mem
+}' /proc/meminfo
+
+# Select cmemk parameters for best fit, i.e. starting at 0x85000000
+modprobe cmemk phys_start=0x85800000 phys_end=0x86800000 pools=20x4096,8x131072,5x1048576,1x1429440,1x256000,1x3600000,5x829440
+
+# insert DSP/BIOS Link driver
+#
+modprobe dsplinkk
+
+# make /dev/dsplink
+#rm -f /dev/dsplink
+#mknod /dev/dsplink c `awk "\\$2==\"dsplink\" {print \\$1}" /proc/devices` 0
+
+# insert Local Power Manager driver
+#
+modprobe lpm_omap3530
diff --git a/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-dm355_al.sh b/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-dm355_al.sh
new file mode 100755
index 00000000..ca357e20
--- /dev/null
+++ b/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-dm355_al.sh
@@ -0,0 +1,23 @@
+#!/bin/sh
+#
+# loadmodules.sh
+#
+# Copyright (C) $year Texas Instruments Incorporated - http://www.ti.com/
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as
+# published by the Free Software Foundation version 2.1 of the License.
+#
+# This program is distributed #as is# WITHOUT ANY WARRANTY of any kind,
+# whether express or implied; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+
+# 12MB
+modprobe cmemk phys_start=0x87400000 phys_end=0x88000000 pools=1x2903040,1x1529856,7x829440,1x524288,1x108680,1x81920,2x8192,6x4096
+
+./mapdmaq
+
+modprobe dm350mmap
+rm -f /dev/dm350mmap
+mknod /dev/dm350mmap c `awk "\\$2==\"dm350mmap\" {print \\$1}" /proc/devices` 0
diff --git a/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-dm365_al.sh b/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-dm365_al.sh
new file mode 100644
index 00000000..36dc78ec
--- /dev/null
+++ b/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-dm365_al.sh
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+# This loadmodules script is provided to support 1920x1080 resolution file based encode/decode DMAI unit test applications
+
+# Sample bootargs is given below
+# mem=60M console=ttyS0,115200n8 root=/dev/nfs rw nfsroot=<nfsroot> ip=dhcp video=davincifb:vid0=OFF:vid1=OFF:osd0=720x576x16,2025K dm365_imp.oper_mode=0
+
+depmod -a
+rmmod cmemk 2>/dev/null
+rmmod irqk 2>/dev/null
+rmmod edmak 2>/dev/null
+rmmod dm365mmap 2>/dev/null
+
+# Pools configuration
+modprobe cmemk phys_start=0x83C00000 phys_end=0x88000000 pools=1x384,2x5984,2x3133440,1x16384,1x48952,1x20480,1x60288,1x74,1x28,1x2048,1x6785280,1x146,1x896,1x65536,1x98,1x296,29x56,2x24,1x624,4x62,1x1456,1x18321120,1x65792,5x3523584,1x4194304,1x8355840
+
+#VC1 decode pool configuration
+# insmod cmemk.ko phys_start=0x83C00000 phys_end=0x88000000 pools=1x384,1x112665,3x7680,1x319264,2x1024,5x7208960,1x80,1x116,1x29184,1x2688,1x30720,1x551680,2x128,1x74,1x28,1x10240,1x47232,1x448,2x1152,1x8192,2x272896,18x56,2x24,1x86,4x62,2x7808,1x2097152
+
+modprobe irqk
+modprobe edmak
+modprobe dm365mmap
+
+rm -f /dev/dm365mmap
+mknod /dev/dm365mmap c `awk "\\$2==\"dm365mmap\" {print \\$1}" /proc/devices` 0
diff --git a/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-dm6446_al.sh b/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-dm6446_al.sh
new file mode 100755
index 00000000..b4a230d5
--- /dev/null
+++ b/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-dm6446_al.sh
@@ -0,0 +1,19 @@
+#
+# loadmodules.sh
+#
+# Copyright (C) $year Texas Instruments Incorporated - http://www.ti.com/
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as
+# published by the Free Software Foundation version 2.1 of the License.
+#
+# This program is distributed #as is# WITHOUT ANY WARRANTY of any kind,
+# whether express or implied; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+
+modprobe cmemk phys_start=0x87800000 phys_end=0x88E00000 pools=20x4096,8x202752,10x131072,2x1048576,1x2097152,10x829440,1x6750000
+modprobe dsplinkk ddr_start=0x8F800000 ddr_size=0x600000
+
+rm -rf /dev/dsplink
+mknod /dev/dsplink c `awk "\\$2==\"dsplink\" {print \\$1}" /proc/devices` 0
diff --git a/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-dm6467_al.sh b/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-dm6467_al.sh
new file mode 100755
index 00000000..b4a230d5
--- /dev/null
+++ b/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-dm6467_al.sh
@@ -0,0 +1,19 @@
+#
+# loadmodules.sh
+#
+# Copyright (C) $year Texas Instruments Incorporated - http://www.ti.com/
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as
+# published by the Free Software Foundation version 2.1 of the License.
+#
+# This program is distributed #as is# WITHOUT ANY WARRANTY of any kind,
+# whether express or implied; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+
+modprobe cmemk phys_start=0x87800000 phys_end=0x88E00000 pools=20x4096,8x202752,10x131072,2x1048576,1x2097152,10x829440,1x6750000
+modprobe dsplinkk ddr_start=0x8F800000 ddr_size=0x600000
+
+rm -rf /dev/dsplink
+mknod /dev/dsplink c `awk "\\$2==\"dsplink\" {print \\$1}" /proc/devices` 0
diff --git a/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-o3530_al.sh b/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-o3530_al.sh
new file mode 100755
index 00000000..076af072
--- /dev/null
+++ b/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-o3530_al.sh
@@ -0,0 +1,42 @@
+# loadmodules.sh
+#
+# Copyright (C) $year Texas Instruments Incorporated - http://www.ti.com/
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as
+# published by the Free Software Foundation version 2.1 of the License.
+#
+# This program is distributed #as is# WITHOUT ANY WARRANTY of any kind,
+# whether express or implied; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+
+#
+# Default Memory Map
+#
+# Start Addr Size Description
+# -------------------------------------------
+# 0x80000000 88 MB Linux
+# 0x85800000 08 MB CMEM
+# 0x86800000 24 MB DDRALGHEAP
+# 0x87800000 6 MB DDR2 (BIOS, Codecs, Applications)
+# 0x87E00000 1 MB DSPLINK (MEM)
+# 0x87F00000 4 KB DSPLINK (RESET)
+# 0x87F01000 1020 KB unused
+
+modprobe cmemk phys_start=0x85800000 phys_end=0x86800000 pools=20x4096,8x131072,4x829440,1x5250000,1x1429440,1x256000
+
+
+# insert DSP/BIOS Link driver
+#
+modprobe dsplinkk
+
+# make /dev/dsplink
+rm -f /dev/dsplink
+mknod /dev/dsplink c `awk "\\$2==\"dsplink\" {print \\$1}" /proc/devices` 0
+
+
+# insert Local Power Manager driver
+#
+modprobe lpm_omap3530
+
diff --git a/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-ol137_al.sh b/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-ol137_al.sh
new file mode 100755
index 00000000..2c98c787
--- /dev/null
+++ b/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-ol137_al.sh
@@ -0,0 +1,19 @@
+#
+# loadmodules.sh
+#
+# Copyright (C) $year Texas Instruments Incorporated - http://www.ti.com/
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as
+# published by the Free Software Foundation version 2.1 of the License.
+#
+# This program is distributed #as is# WITHOUT ANY WARRANTY of any kind,
+# whether express or implied; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+
+modprobe cmemk phys_start=0xC2200000 phys_end=0xC3200000 pools=1x5250000,3x1048576,3x829440,1x256000,4x131072
+modprobe dsplinkk
+
+rm -rf /dev/dsplink
+mknod /dev/dsplink c `awk "\\$2==\"dsplink\" {print \\$1}" /proc/devices` 0
diff --git a/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-ol138_al.sh b/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-ol138_al.sh
new file mode 100755
index 00000000..2c98c787
--- /dev/null
+++ b/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-ol138_al.sh
@@ -0,0 +1,19 @@
+#
+# loadmodules.sh
+#
+# Copyright (C) $year Texas Instruments Incorporated - http://www.ti.com/
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as
+# published by the Free Software Foundation version 2.1 of the License.
+#
+# This program is distributed #as is# WITHOUT ANY WARRANTY of any kind,
+# whether express or implied; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+
+modprobe cmemk phys_start=0xC2200000 phys_end=0xC3200000 pools=1x5250000,3x1048576,3x829440,1x256000,4x131072
+modprobe dsplinkk
+
+rm -rf /dev/dsplink
+mknod /dev/dsplink c `awk "\\$2==\"dsplink\" {print \\$1}" /proc/devices` 0
diff --git a/extras/recipes-ti/dmai/ti-dmai/omap3530-r642-remove-include-videodev.diff b/extras/recipes-ti/dmai/ti-dmai/omap3530-r642-remove-include-videodev.diff
new file mode 100644
index 00000000..63f9cc68
--- /dev/null
+++ b/extras/recipes-ti/dmai/ti-dmai/omap3530-r642-remove-include-videodev.diff
@@ -0,0 +1,64 @@
+From 06c4cfeec98f4f1e31543878ceb74c5fff1907e4 Mon Sep 17 00:00:00 2001
+From: Enrico Butera <ebutera@users.berlios.de>
+Date: Thu, 22 Dec 2011 11:01:58 +0100
+Subject: [PATCH 1/2] adjust videdev headers for recent kernels
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+---
+ .../packages/ti/sdo/dmai/linux/omap3530/Capture.c | 1 -
+ .../ti/sdo/dmai/linux/omap3530/Display_v4l2.c | 1 -
+ .../ti/sdo/dmai/linux/omap3530/_VideoBuf.c | 1 -
+ .../ti/sdo/dmai/linux/omap3530/priv/_VideoBuf.h | 1 -
+ 4 files changed, 0 insertions(+), 4 deletions(-)
+
+diff --git a/davinci_multimedia_application_interface/dmai/packages/ti/sdo/dmai/linux/omap3530/Capture.c b/davinci_multimedia_application_interface/dmai/packages/ti/sdo/dmai/linux/omap3530/Capture.c
+index a924169..c2b45d2 100644
+--- a/davinci_multimedia_application_interface/dmai/packages/ti/sdo/dmai/linux/omap3530/Capture.c
++++ b/davinci_multimedia_application_interface/dmai/packages/ti/sdo/dmai/linux/omap3530/Capture.c
+@@ -40,7 +40,6 @@
+ #include <sys/mman.h>
+ #include <sys/ioctl.h>
+ #include <asm/types.h>
+-#include <linux/videodev.h>
+ #include <linux/videodev2.h>
+
+ #include <xdc/std.h>
+diff --git a/davinci_multimedia_application_interface/dmai/packages/ti/sdo/dmai/linux/omap3530/Display_v4l2.c b/davinci_multimedia_application_interface/dmai/packages/ti/sdo/dmai/linux/omap3530/Display_v4l2.c
+index 0d01b39..0c35efe 100644
+--- a/davinci_multimedia_application_interface/dmai/packages/ti/sdo/dmai/linux/omap3530/Display_v4l2.c
++++ b/davinci_multimedia_application_interface/dmai/packages/ti/sdo/dmai/linux/omap3530/Display_v4l2.c
+@@ -38,7 +38,6 @@
+ #include <sys/ioctl.h>
+ #include <sys/mman.h>
+ #include <errno.h>
+-#include <linux/videodev.h>
+ #include <linux/videodev2.h>
+
+ #include <xdc/std.h>
+diff --git a/davinci_multimedia_application_interface/dmai/packages/ti/sdo/dmai/linux/omap3530/_VideoBuf.c b/davinci_multimedia_application_interface/dmai/packages/ti/sdo/dmai/linux/omap3530/_VideoBuf.c
+index 5615e2f..5cb712d 100644
+--- a/davinci_multimedia_application_interface/dmai/packages/ti/sdo/dmai/linux/omap3530/_VideoBuf.c
++++ b/davinci_multimedia_application_interface/dmai/packages/ti/sdo/dmai/linux/omap3530/_VideoBuf.c
+@@ -38,7 +38,6 @@
+ #include <sys/ioctl.h>
+ #include <sys/mman.h>
+ #include <errno.h>
+-#include <linux/videodev.h>
+ #include <linux/videodev2.h>
+
+ #include <xdc/std.h>
+diff --git a/davinci_multimedia_application_interface/dmai/packages/ti/sdo/dmai/linux/omap3530/priv/_VideoBuf.h b/davinci_multimedia_application_interface/dmai/packages/ti/sdo/dmai/linux/omap3530/priv/_VideoBuf.h
+index b2128a3..dbaa4eb 100644
+--- a/davinci_multimedia_application_interface/dmai/packages/ti/sdo/dmai/linux/omap3530/priv/_VideoBuf.h
++++ b/davinci_multimedia_application_interface/dmai/packages/ti/sdo/dmai/linux/omap3530/priv/_VideoBuf.h
+@@ -34,7 +34,6 @@
+ #ifndef ti_sdo_dai_linux_priv__VideoBuf_h_
+ #define ti_sdo_dai_linux_priv__VideoBuf_h_
+
+-#include <linux/videodev.h>
+ #include <linux/videodev2.h>
+
+ #include <ti/sdo/dmai/BufferGfx.h>
+--
+1.7.2.5
+
diff --git a/extras/recipes-ti/dmai/ti-dmai/r642-fix-config-bld.diff b/extras/recipes-ti/dmai/ti-dmai/r642-fix-config-bld.diff
new file mode 100644
index 00000000..2f328c0e
--- /dev/null
+++ b/extras/recipes-ti/dmai/ti-dmai/r642-fix-config-bld.diff
@@ -0,0 +1,48 @@
+From 86e89bb160cfe67c173f1260b93066b12dd73580 Mon Sep 17 00:00:00 2001
+From: Enrico Butera <ebutera@users.berlios.de>
+Date: Thu, 22 Dec 2011 11:03:58 +0100
+Subject: [PATCH 2/2] fix toolchain names in config.bld
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+---
+ .../dmai/packages/config.bld | 24 +------------------
+ 1 files changed, 2 insertions(+), 22 deletions(-)
+
+diff --git a/davinci_multimedia_application_interface/dmai/packages/config.bld b/davinci_multimedia_application_interface/dmai/packages/config.bld
+index 8c2e96e..566f907 100644
+--- a/davinci_multimedia_application_interface/dmai/packages/config.bld
++++ b/davinci_multimedia_application_interface/dmai/packages/config.bld
+@@ -44,28 +44,8 @@ var C6X = xdc.useModule('ti.targets.C64P');
+ C6X.rootDir = codegen;
+ C6X.platform = xdcplat;
+
+-/* User passes in $(CROSS_COMPILE) where $(CROSS_COMPILE)gcc is their compiler
+- Then the TOOLDIR and LONGNAME are derived based on a regex of CROSS_COMPILE
+-*/
+-var crosscompile = "" + java.lang.System.getenv("CROSS_COMPILE");
+-
+-var tooldir = "";
+-var longName = "";
+-
+-/* Search CROSS_COMPILE for bin/ If only 1 bin/ is found, set the tooldir to
+- the path prior to bin/ and the prefix to "bin/" + remainder of path,
+- else leave the tooldir as "" and set the LONGNAME to the full CROSS_COMPILE
+- path
+-*/
+-var regex = new RegExp("bin/");
+-var find = crosscompile.split( regex );
+-
+-if (find[0]!=crosscompile && find.length==2) {
+- tooldir = find[0];
+- longName = "bin/" + find[1] + "gcc";
+-} else {
+- longName = crosscompile + "gcc";
+-}
++var tooldir = "" + java.lang.System.getenv("CSTOOL_DIR");
++var longName = "" + java.lang.System.getenv("MVTOOL_PREFIX") + "gcc";
+
+ /* location of the GCC Arm9 tools */
+ var GCArmv5T = xdc.useModule('gnu.targets.arm.GCArmv5T');
+--
+1.7.2.5
+
diff --git a/extras/recipes-ti/dmai/ti-dmai/unloadmodules-ti-dmai-apps.sh b/extras/recipes-ti/dmai/ti-dmai/unloadmodules-ti-dmai-apps.sh
new file mode 100644
index 00000000..793d727f
--- /dev/null
+++ b/extras/recipes-ti/dmai/ti-dmai/unloadmodules-ti-dmai-apps.sh
@@ -0,0 +1,12 @@
+# Unload modules - DMAI - OMAP3530
+
+# remove lpm module
+rmmod lpm_omap3530
+
+# remove DSP/BIOS Link driver
+rmmod dsplinkk
+#rm -f /dev/dsplink
+
+# remove cmem module
+rmmod cmemk
+
diff --git a/extras/recipes-ti/dmai/ti-dmai_svn.bb b/extras/recipes-ti/dmai/ti-dmai_svn.bb
new file mode 100644
index 00000000..3ac7a81d
--- /dev/null
+++ b/extras/recipes-ti/dmai/ti-dmai_svn.bb
@@ -0,0 +1,38 @@
+require ti-dmai.inc
+
+# Need to descend one level more to find source
+S = "${WORKDIR}/${DMAIBRANCH}/davinci_multimedia_application_interface/dmai_${PV}/dmai"
+
+# Hack to be able to use recent kernel headers from userspace
+TARGET_CC_ARCH += " -D__EXPORTED_HEADERS__"
+
+PV = "2_10_00_01+svnr${SRCPV}"
+
+LIC_FILES_CHKSUM = "file://dmai_${PV}_License.html;md5=3302f728a5a42f97cabc26a54d7fa607"
+
+# This package has high dependence on kernel, use kernel PR as base and append a local version
+PR = "${MACHINE_KERNEL_PR}"
+PR_append = "o"
+
+DMAIBRANCH_dm6446 = "trunk"
+DMAIBRANCH_dm6467 = "branches/GITPSP_INT_101009"
+DMAIBRANCH_omap3 = "trunk"
+DMAIBRANCH_dm355 = "branches/GITPSP_INT_101009"
+DMAIBRANCH_dm365 = "trunk"
+DMAIBRANCH_omapl137 = "trunk"
+DMAIBRANCH_omapl138 = "trunk"
+DMAIBRANCH ?= "UNDEFINED_DMAIBRANCH"
+
+SRCREV_dm6446 = "482"
+SRCREV_dm6467 = "441"
+SRCREV_omap3 = "642"
+SRCREV_dm355 = "424"
+SRCREV_dm365 = "570"
+SRCREV_omapl137 = "482"
+SRCREV_omapl138 = "570"
+SRCREV ?= "UNDEFINED_SRCREV"
+
+SRC_URI_append = " file://omap3530-r642-remove-include-videodev.diff;striplevel=3 \
+ file://r642-fix-config-bld.diff;striplevel=3 \
+ "
+
diff --git a/extras/recipes-ti/dsplink/ti-dsplink.inc b/extras/recipes-ti/dsplink/ti-dsplink.inc
new file mode 100644
index 00000000..ce7cbf97
--- /dev/null
+++ b/extras/recipes-ti/dsplink/ti-dsplink.inc
@@ -0,0 +1,211 @@
+DESCRIPTION = "DSPLINK Inter-Processor Communications (IPC) for TI ARM/DSP processors"
+HOMEPAGE = "http://software-dl.ti.com/dsps/dsps_public_sw/DSPLink/index.html"
+SECTION = "devel"
+LICENSE = "GPLv2"
+
+LIC_FILES_CHKSUM = "file://dsplink/doc/gpl_2.0.pdf;md5=70996be607b61df78ce46093f4afe2bd"
+
+
+# TODO :: KERNEL_CC, should use for kernel cc for module build?
+# TODO :: Need to understand why OBJDUMP is required for kernel module
+# TODO :: Unset required since LDFLAGS gets picked up and used incorrectly - investigate
+# TODO :: Do we need to pass so many variables to each make step?
+
+inherit module
+
+require ../includes/ti-paths.inc
+require ../includes/ti-staging.inc
+
+PROVIDES = "ti-dsplink-module"
+PROVIDES += "ti-dsplink-examples"
+
+# This package builds a kernel module, use kernel PR as base and append a local version
+PR = "${MACHINE_KERNEL_PR}"
+PR_append = "j"
+
+S = "${WORKDIR}/dsplink_linux_${PV}"
+
+SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/${PV_DL_PATH}/dsplink_linux_${PV}.tar.gz;name=dsplinktarball \
+ file://ti-dsplink-examples-run.sh \
+ file://ti-dsplink-examples-loadmodules.sh \
+ file://ti-dsplink-examples-unloadmodules.sh "
+
+DEPENDS = "ti-dspbios ti-xdctools ti-cgt6x"
+DEPENDS += "virtual/kernel perl-native"
+
+# SOC_FAMILY configuration
+
+DSPLINKPLATFORM_dm6446 = "DAVINCI"
+DSPLINKPLATFORM_dm6467 = "DAVINCIHD"
+DSPLINKPLATFORM_omapl137 = "OMAPL1XX"
+DSPLINKPLATFORM_omapl138 = "OMAPL138"
+DSPLINKPLATFORM_omap3 = "OMAP3530"
+DSPLINKPLATFORM ?= "<UNDEFINED_DSPLINKPLATFORM>"
+
+DSPLINKDSPCFG_dm6446 = "DM6446GEMSHMEM"
+DSPLINKDSPCFG_dm6467 = "DM6467GEMSHMEM"
+DSPLINKDSPCFG_omapl137 = "OMAPL1XXGEMSHMEM"
+DSPLINKDSPCFG_omapl138 = "OMAPL138GEMSHMEM"
+DSPLINKDSPCFG_omap3 = "OMAP3530SHMEM"
+DSPLINKDSPCFG ?= "<UNDEFINED_DSPLINKDSPCFG>"
+
+DSPLINKDSP_dm6446 = "DM6446GEM_0"
+DSPLINKDSP_dm6467 = "DM6467GEM_0"
+DSPLINKDSP_omapl137 = "OMAPL1XXGEM_0"
+DSPLINKDSP_omapl138 = "OMAPL138GEM_0"
+DSPLINKDSP_omap3 = "OMAP3530_0"
+DSPLINKDSP ?= "<UNDEFINED_DSPLINKDSP>"
+
+DSPLINKGPPOS_dm6446 = "DM6446LSP"
+DSPLINKGPPOS_dm6467 = "DM6467LSP"
+DSPLINKGPPOS_omapl137 = "ARM"
+DSPLINKGPPOS_omapl138 = "ARM"
+DSPLINKGPPOS_omap3 = "OMAPLSP"
+DSPLINKGPPOS ?= "<DEFINED_DSPLINKGPPOS>"
+
+# Exported Variable needed by build
+DSPLINK = "${S}/dsplink"
+export DSPLINK
+
+do_configure() {
+
+ # Run perl script to create appropriate makefiles (v1.60 and up)
+ (
+ cd ${DSPLINK}
+ perl config/bin/dsplinkcfg.pl --platform=${DSPLINKPLATFORM} --nodsp=1 \
+ --dspcfg_0=${DSPLINKDSPCFG} --dspos_0=DSPBIOS5XX \
+ --gppos=${DSPLINKGPPOS} --comps=ponslrmc
+ )
+}
+
+do_prepsources () {
+
+ # Prepare the tree for rebuiling - clean and generate interfaces
+ XDCPATH=${DSPLINK} ${XDC_INSTALL_DIR}/xdc .make -PR .
+ XDCPATH=${DSPLINK} ${XDC_INSTALL_DIR}/xdc clean -PR .
+ XDCPATH=${DSPLINK} ${XDC_INSTALL_DIR}/xdc .interfaces -PR .
+}
+
+addtask prepsources after do_configure before do_compile
+
+do_compile() {
+ # TODO :: KERNEL_CC, should use for kernel module build?
+ # TODO :: Need to understand why OBJDUMP is required for kernel module
+ # Unset these since LDFLAGS gets picked up and used incorrectly.... need
+ # investigation
+
+ unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
+
+ # Build the gpp user space library
+ cd ${DSPLINK}/gpp/src/api && make \
+ CROSS_COMPILE="${TARGET_PREFIX}" \
+ CC="${TOOLCHAIN_PATH}/${TARGET_PREFIX}gcc" \
+ AR="${TOOLCHAIN_PATH}/${TARGET_PREFIX}ar" \
+ LD="${TOOLCHAIN_PATH}/${TARGET_PREFIX}ld" \
+ COMPILER="${TOOLCHAIN_PATH}/${TARGET_PREFIX}gcc" \
+ ARCHIVER="${TOOLCHAIN_PATH}/${TARGET_PREFIX}ar" \
+ KERNEL_DIR="${STAGING_KERNEL_DIR}" \
+ all
+
+ # Build the gpp kernel space (debug and release)
+ do_make_scripts
+ cd ${DSPLINK}/gpp/src && make \
+ OBJDUMP="${TARGET_PREFIX}objdump" \
+ CROSS_COMPILE="${TARGET_PREFIX}" \
+ CC="${TOOLCHAIN_PATH}/${TARGET_PREFIX}gcc" \
+ AR="${TOOLCHAIN_PATH}/${TARGET_PREFIX}ar" \
+ LD="${TOOLCHAIN_PATH}/${TARGET_PREFIX}ld" \
+ COMPILER="${TOOLCHAIN_PATH}/${TARGET_PREFIX}gcc" \
+ ARCHIVER="${TOOLCHAIN_PATH}/${TARGET_PREFIX}ar" \
+ KERNEL_DIR="${STAGING_KERNEL_DIR}" \
+ BASE_BUILDOS="${STAGING_KERNEL_DIR}" \
+ all
+
+ # Build the gpp samples
+ cd ${DSPLINK}/gpp/src/samples && make \
+ BASE_TOOLCHAIN="${TOOLCHAIN_PATH}" \
+ BASE_CGTOOLS="${BASE_TOOLCHAIN}/bin" \
+ OSINC_PLATFORM="${TOOLCHAIN_PATH}/lib/gcc/${TARGET_SYS}/$(${TARGET_PREFIX}gcc -dumpversion)/include" \
+ OSINC_TARGET="${BASE_TOOLCHAIN}/target/usr/include" \
+ CROSS_COMPILE="${TARGET_PREFIX}" \
+ CC="${TOOLCHAIN_PATH}/${TARGET_PREFIX}gcc" \
+ LD="${TOOLCHAIN_PATH}/${TARGET_PREFIX}gcc" \
+ AR="${TOOLCHAIN_PATH}/${TARGET_PREFIX}ar" \
+ COMPILER="${TOOLCHAIN_PATH}/${TARGET_PREFIX}gcc" \
+ LINKER="${TOOLCHAIN_PATH}/${TARGET_PREFIX}gcc" \
+ ARCHIVER="${TOOLCHAIN_PATH}/${TARGET_PREFIX}ar" \
+ KERNEL_DIR="${STAGING_KERNEL_DIR}" \
+ all
+
+ # Build the dsp library (debug and release)
+ cd ${DSPLINK}/dsp/src && make \
+ BASE_CGTOOLS="${CODEGEN_INSTALL_DIR}" \
+ BASE_SABIOS="${BIOS_INSTALL_DIR}" \
+ all
+
+ # Build the dsp samples (debug and release)
+ cd ${DSPLINK}/dsp/src/samples && make \
+ BASE_CGTOOLS="${CODEGEN_INSTALL_DIR}" \
+ BASE_SABIOS="${BIOS_INSTALL_DIR}" \
+ all
+}
+
+KERNEL_VERSION = "${@base_read_file('${STAGING_KERNEL_DIR}/kernel-abiversion')}"
+
+do_install () {
+
+ # Install the kernel module
+ install -d ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
+ install -m 0755 ${DSPLINK}/gpp/export/BIN/Linux/${DSPLINKPLATFORM}/RELEASE/dsplinkk.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/
+
+ # Install the example apps (gpp and dsp)
+ install -d ${D}/${installdir}/ti-dsplink-examples/
+ cp ${DSPLINK}/gpp/export/BIN/Linux/${DSPLINKPLATFORM}/RELEASE/*gpp ${D}/${installdir}/ti-dsplink-examples
+ cp ${DSPLINK}/dsp/export/BIN/DspBios/${DSPLINKPLATFORM}/${DSPLINKDSP}/RELEASE/*.out ${D}/${installdir}/ti-dsplink-examples
+
+ # Install the example apps module un/load scripts
+ install ${WORKDIR}/ti-dsplink-examples-loadmodules.sh ${D}/${installdir}/ti-dsplink-examples
+ install ${WORKDIR}/ti-dsplink-examples-unloadmodules.sh ${D}/${installdir}/ti-dsplink-examples
+ install ${WORKDIR}/ti-dsplink-examples-run.sh ${D}/${installdir}/ti-dsplink-examples
+
+ # Install/Stage the Source Tree
+ install -d ${D}${LINK_INSTALL_DIR_RECIPE}
+ cp -pPrf ${S}/* ${D}${LINK_INSTALL_DIR_RECIPE}
+ chmod -R +w ${D}${LINK_INSTALL_DIR_RECIPE}
+
+ # Changes path of include txt file to use LINK_INSTALL_DIR variable for GPP
+ for i in $(find ${D}${LINK_INSTALL_DIR_RECIPE}/dsplink/gpp/export/BIN/Linux/${DSPLINKPLATFORM}/*/ -name "*.txt"); do
+ sed -i ${i} -e s=${S}=\$\{LINK_INSTALL_DIR\}=g
+ done
+
+ # Changes path of include txt file to use LINK_INSTALL_DIR variable for DSP
+ for i in $(find ${D}${LINK_INSTALL_DIR_RECIPE}/dsplink/dsp/export/BIN/DspBios/${DSPLINKPLATFORM}/${DSPLINKDSP}/*/ -name "*.txt"); do
+ sed -i ${i} -e s=${S}=\$\{LINK_INSTALL_DIR\}=g
+ done
+
+}
+
+PACKAGES =+ "ti-dsplink-module"
+FILES_ti-dsplink-module = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/dsplinkk.ko"
+RDEPENDS_ti-dsplink-module += "update-modules"
+
+pkg_postinst_ti-dsplink-module () {
+#!/bin/sh
+if [ -n "$D" ]; then
+ exit 1
+fi
+
+depmod -a
+update-modules || true
+}
+
+pkg_postrm_ti-dsplink-module () {
+#!/bin/sh
+update-modules || true
+}
+
+PACKAGES += "ti-dsplink-examples"
+RDEPENDS_ti-dsplink-examples_append = " ti-dsplink-module"
+RDEPENDS_ti-dsplink-examples_append_omap3 += " ti-lpm-module ti-lpm-utils"
+FILES_ti-dsplink-examples = "${installdir}/ti-dsplink-examples/*"
+INSANE_SKIP_ti-dsplink-examples = "1"
diff --git a/extras/recipes-ti/dsplink/ti-dsplink/0001-remove-check-for-make-version-3.85-works-fine.patch b/extras/recipes-ti/dsplink/ti-dsplink/0001-remove-check-for-make-version-3.85-works-fine.patch
new file mode 100644
index 00000000..70596c5d
--- /dev/null
+++ b/extras/recipes-ti/dsplink/ti-dsplink/0001-remove-check-for-make-version-3.85-works-fine.patch
@@ -0,0 +1,28 @@
+From a96aa25518f306138c71b3fc074381f102092a13 Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Fri, 23 Dec 2011 10:58:47 +0100
+Subject: [PATCH] remove check for make version, 3.85 works fine
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+---
+ dsplink/make/start.mk | 4 ----
+ 1 files changed, 0 insertions(+), 4 deletions(-)
+
+diff --git a/dsplink/make/start.mk b/dsplink/make/start.mk
+index 0589f3c..a8f5740 100644
+--- a/dsplink/make/start.mk
++++ b/dsplink/make/start.mk
+@@ -39,10 +39,6 @@
+ # EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ # ============================================================================
+
+-
+-# Check for MAKE version
+-$(if $(filter $(MAKE_VERSION), 3.81 3.81beta1 3.90 3.92),,\
+-$(error This makefile requires one of GNU make version 3.81 3.81beta1 3.90 3.92))
+ # ============================================================================
+ # Export the directory separator
+ # ============================================================================
+--
+1.7.7.4
+
diff --git a/extras/recipes-ti/dsplink/ti-dsplink/dsplink-BKL-fix.patch b/extras/recipes-ti/dsplink/ti-dsplink/dsplink-BKL-fix.patch
new file mode 100644
index 00000000..eab3ec63
--- /dev/null
+++ b/extras/recipes-ti/dsplink/ti-dsplink/dsplink-BKL-fix.patch
@@ -0,0 +1,71 @@
+From e0931bf37628727903a567f1c7096ae0011edc3d Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Tue, 4 Jan 2011 13:49:05 +0100
+Subject: [PATCH] Adjust drv_pmgr for post 2.6.36 ioctl changes
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+---
+ dsplink/gpp/src/pmgr/Linux/2.6.18/drv_pmgr.c | 17 ++++++++++++++++-
+ 1 files changed, 16 insertions(+), 1 deletions(-)
+
+diff --git a/dsplink/gpp/src/pmgr/Linux/2.6.18/drv_pmgr.c b/dsplink/gpp/src/pmgr/Linux/2.6.18/drv_pmgr.c
+index a9b831c..e4a836d 100644
+--- a/dsplink/gpp/src/pmgr/Linux/2.6.18/drv_pmgr.c
++++ b/dsplink/gpp/src/pmgr/Linux/2.6.18/drv_pmgr.c
+@@ -399,10 +399,15 @@ DRV_Release (struct inode * inode, struct file * filp) ;
+ * @see None
+ * ----------------------------------------------------------------------------
+ */
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,36)
+ STATIC
+ int
+ DRV_Ioctl (struct inode * inode, struct file * filp,
+ unsigned int cmd, unsigned long args) ;
++#else
++STATIC
++int DRV_Ioctl (struct file *filp, unsigned int cmd, unsigned long args);
++#endif
+
+
+ /** ----------------------------------------------------------------------------
+@@ -495,7 +500,11 @@ STATIC struct file_operations driverOps = {
+ open: DRV_Open,
+ flush: DRV_Flush,
+ release: DRV_Release,
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,36)
+ ioctl: DRV_Ioctl,
++#else
++ unlocked_ioctl: DRV_Ioctl,
++#endif
+ mmap: DRV_Mmap,
+ read: DRV_Read,
+ .owner = THIS_MODULE
+@@ -817,10 +826,16 @@ DRV_Release (struct inode * inode, struct file * filp)
+ * @desc Function to invoke the APIs through ioctl.
+ * ----------------------------------------------------------------------------
+ */
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,36)
+ STATIC
+ NORMAL_API
+ int DRV_Ioctl (struct inode * inode, struct file * filp,
+ unsigned int cmd, unsigned long args)
++#else
++STATIC
++NORMAL_API
++int DRV_Ioctl (struct file *filp, unsigned int cmd, unsigned long args)
++#endif
+ {
+ DSP_STATUS status = DSP_SOK ;
+ int osStatus = 0 ;
+@@ -829,7 +844,7 @@ int DRV_Ioctl (struct inode * inode, struct file * filp,
+ CMD_Args apiArgs ;
+
+
+- TRC_4ENTER ("DRV_Ioctl", inode, filp, cmd, args) ;
++ TRC_3ENTER ("DRV_Ioctl", filp, cmd, args) ;
+
+ retVal = copy_from_user ((Pvoid) &apiArgs,
+ (const Pvoid) srcAddr,
+--
+1.6.6.1
+
diff --git a/extras/recipes-ti/dsplink/ti-dsplink/dsplink_1_64_add_dm6446_build_support.patch b/extras/recipes-ti/dsplink/ti-dsplink/dsplink_1_64_add_dm6446_build_support.patch
new file mode 100644
index 00000000..5a25dbb5
--- /dev/null
+++ b/extras/recipes-ti/dsplink/ti-dsplink/dsplink_1_64_add_dm6446_build_support.patch
@@ -0,0 +1,337 @@
+From 7b36e94dcb33892e1df7d3327db31bd41fb6167e Mon Sep 17 00:00:00 2001
+From: Roger Monk <r-monk@ti.com>
+Date: Fri, 5 Mar 2010 19:22:58 +0000
+Subject: [PATCH] dsplink_1_64: Add support for building with CS tools + against 2.6.30+
+
+ * Tweaked Patches from Niclas
+
+Signed-off-by: Roger Monk <r-monk@ti.com>
+---
+ dsplink/config/bin/dsplinkcfg.pl | 17 ++++-
+ dsplink/gpp/src/DIRS | 5 +
+ dslpink/gpp/src/Makefile | 8 ++-
+ dsplink/gpp/src/Rules.mk | 5 +
+ dsplink/make/Linux/davinci_2.6.mk | 211 +++++++++++++++++++++++++++++++++++++++++++++
+ 5 files changed, 244 insertions(+), 2 deletions(-)
+ create mode 100644 make/Linux/davinci_2.6.mk
+
+diff --git a/dsplink/config/bin/dsplinkcfg.pl b/dsplink/config/bin/dsplinkcfg.pl
+index 644aa38..e83c133 100644
+--- a/dsplink/config/bin/dsplinkcfg.pl
++++ b/dsplink/config/bin/dsplinkcfg.pl
+@@ -215,6 +215,18 @@ my %CFG_GPPOS_DM6467LSPuc =
+ 'OSPREFIX' => 'uc',
+ ) ;
+
++# DM6446 Linux
++my %CFG_GPPOS_DM6446LSP =
++(
++ 'NAME' => 'DM6446LSP',
++ 'PREFIX' => '2.6',
++ 'ID' => 'DM6446LSP',
++ 'DESC' => 'DM6446 LSP for DM6446',
++ 'VER' => '2.6.18',
++ 'TYPE' => 'Linux',
++ 'LOADERS'=> [\%CFG_LOADER_COFF, ],
++ 'COMPS' => 'ponslrmc',
++) ;
+
+ # OMAPL138 Linux with uCLibc filesystem
+ my %CFG_GPPOS_OMAPL138LSPuc =
+@@ -356,7 +368,7 @@ my %CFG_DSPCFG_DM6446GEMSHMEM =
+ 'PHYID' => 'DM6446GEMSHMEM',
+ 'PHYDESC' => 'Shared Memory Physical Interface',
+ 'PHYTYPE' => 'SHMEM',
+- 'GPPOS' => [\%CFG_GPPOS_MVL5U, \%CFG_GPPOS_MVL5G],
++ 'GPPOS' => [\%CFG_GPPOS_MVL5U, \%CFG_GPPOS_MVL5G, \%CFG_GPPOS_DM6446LSP],
+ 'DSPOS' => [\%CFG_DSPOS_5XX, \%CFG_DSPOS_6XX],
+ # DSP defines
+ 'DSPNAME' => 'DM6446GEM',
+@@ -2994,6 +3006,9 @@ sub main {
+ if ($platform {'ID'} eq 'DA850') {
+ print "GPP side distribution file: \$DSPLINK" . $DIRSEP . "gpp" . $DIRSEP. "src" . $DIRSEP. "Rules.mk\n" ;
+ }
++ if ($platform {'ID'} eq 'DAVINCI') {
++ print "GPP side distribution file: \$DSPLINK" . $DIRSEP . "gpp" . $DIRSEP. "src" . $DIRSEP. "Rules.mk\n" ;
++ }
+ if ($platform {'ID'} eq 'DAVINCIHD') {
+ print "GPP side distribution file: \$DSPLINK" . $DIRSEP . "gpp" . $DIRSEP. "src" . $DIRSEP. "Rules.mk\n" ;
+ }
+diff --git a/dsplink/gpp/src/DIRS b/dsplink/gpp/src/DIRS
+index e82969c..05bad2b 100644
+--- a/dsplink/gpp/src/DIRS
++++ b/dsplink/gpp/src/DIRS
+@@ -63,6 +63,10 @@ ifeq ("$(TI_DSPLINK_PLATFORM)", "DAVINCIHD")
+ DIRS += \
+ api
+ else # ifeq ("$(TI_DSPLINK_PLATFORM)", "DAVINCIHD")
++ifeq ("$(TI_DSPLINK_PLATFORM)", "DAVINCI")
++DIRS += \
++ api
++else # ifeq ("$(TI_DSPLINK_PLATFORM)", "DAVINCI")
+ ifeq ("$(TI_DSPLINK_PLATFORM)", "DA850")
+ DIRS += \
+ api
+@@ -77,6 +81,7 @@ DIRS += \
+ endif # ifeq ("$(TI_DSPLINK_PLATFORM)", "OMAP3530")
+ endif # ifeq ("$(TI_DSPLINK_PLATFORM)", "OMAPL138")
+ endif # ifeq ("$(TI_DSPLINK_PLATFORM)", "DAVINCIHD")
++endif # ifeq ("$(TI_DSPLINK_PLATFORM)", "DAVINCI")
+ endif # ifeq ("$(TI_DSPLINK_PLATFORM)", "DA850")
+ else # ifeq ("$(TI_DSPLINK_GPPOS)", "Linux")
+ DIRS += \
+diff --git a/dsplink/gpp/src/Makefile b/dsplink/gpp/src/Makefile
+index 9e6bbb1..49c3b97 100644
+--- a/dsplink/gpp/src/Makefile
++++ b/dsplink/gpp/src/Makefile
+@@ -78,7 +78,13 @@ ifeq ("$(TI_DSPLINK_GPPOS)", "Linux")
+ include $(DSPLINK)$(DIRSEP)gpp$(DIRSEP)src$(DIRSEP)Rules.mk
+ include $(DSPLINK)$(DIRSEP)gpp$(DIRSEP)src$(DIRSEP)Makefile_kbuild
+ else # else ("$(TI_DSPLINK_PLATFORM)", "DAVINCIHD")
+- include Makefile_bld
++ ifeq ("$(TI_DSPLINK_PLATFORM)", "DAVINCI")
++ include $(DSPLINK)$(DIRSEP)gpp$(DIRSEP)src$(DIRSEP)Makefile_bld
++ include $(DSPLINK)$(DIRSEP)gpp$(DIRSEP)src$(DIRSEP)Rules.mk
++ include $(DSPLINK)$(DIRSEP)gpp$(DIRSEP)src$(DIRSEP)Makefile_kbuild
++ else # else ("$(TI_DSPLINK_PLATFORM)", "DAVINCI")
++ include Makefile_bld
++ endif # ifeq ("$(TI_DSPLINK_PLATFORM)", "DAVINCI")
+ endif # ifeq ("$(TI_DSPLINK_PLATFORM)", "OMAP3530")
+ endif # ifeq ("$(TI_DSPLINK_PLATFORM)", "DA850")
+ endif # ifeq ("$(TI_DSPLINK_PLATFORM)", "OMAPL138")
+diff --git a/dsplink/gpp/src/Rules.mk b/dsplink/gpp/src/Rules.mk
+index 658ee8a..5a6f52a 100644
+--- a/dsplink/gpp/src/Rules.mk
++++ b/dsplink/gpp/src/Rules.mk
+@@ -63,6 +63,11 @@ KERNEL_DIR := ${HOME}/da850/DaVinci-PSP-SDK-03.20.00.01/src/kernel/linux-03.2
+ TOOL_PATH := ${HOME}/git/arm-2008q3/bin
+ endif #ifeq ("$(TI_DSPLINK_PLATFORM)", "DA850")
+
++ifeq ("$(TI_DSPLINK_PLATFORM)", "DAVINCI")
++KERNEL_DIR := ${HOME}/linux-davinci
++TOOL_PATH := ${HOME}/toolchains/git/arm-2009q1-203/bin
++endif #ifeq ("$(TI_DSPLINK_PLATFORM)", "DAVINCI")
++
+ ifeq ("$(TI_DSPLINK_PLATFORM)", "DAVINCIHD")
+ KERNEL_DIR := ${HOME}/linux-davinci
+ TOOL_PATH := ${HOME}/toolchains/git/arm-2009q1-203/bin
+diff --git a/dsplink/make/Linux/davinci_2.6.mk b/dsplink/make/Linux/davinci_2.6.mk
+new file mode 100644
+index 0000000..834fd74
+--- /dev/null
++++ b/dsplink/make/Linux/davinci_2.6.mk
+@@ -0,0 +1,211 @@
++# ============================================================================
++# @file davinci_2.6.mk
++#
++# @path $(DSPLINK)/make/Linux/
++#
++# @desc This makefile defines OS specific macros used by MAKE system for
++# the Montavista Pro 5.0 Linux distribution.
++#
++# @ver 1.64
++# ============================================================================
++# Copyright (C) 2002-2009, Texas Instruments Incorporated -
++# http://www.ti.com/
++#
++# Redistribution and use in source and binary forms, with or without
++# modification, are permitted provided that the following conditions
++# are met:
++#
++# * Redistributions of source code must retain the above copyright
++# notice, this list of conditions and the following disclaimer.
++#
++# * Redistributions in binary form must reproduce the above copyright
++# notice, this list of conditions and the following disclaimer in the
++# documentation and/or other materials provided with the distribution.
++#
++# * Neither the name of Texas Instruments Incorporated nor the names of
++# its contributors may be used to endorse or promote products derived
++# from this software without specific prior written permission.
++#
++# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
++# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
++# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
++# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
++# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
++# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
++# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
++# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
++# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
++# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
++# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++# ============================================================================
++
++
++ifndef DAVINCI_LINUX2_6_MK
++
++define DAVINCI_LINUX2_6_MK
++endef
++
++
++# ============================================================================
++# Let the make system know that a specific distribution for the GPP OS
++# is being used.
++# ============================================================================
++USE_DISTRIBUTION := 1
++
++
++# ============================================================================
++# Set the values of necessary variables to be used for the OS.
++# ============================================================================
++
++# ----------------------------------------------------------------------------
++# Base directory for the GPP OS
++# ----------------------------------------------------------------------------
++BASE_BUILDOS := ${HOME}/linux-davinci
++
++# ----------------------------------------------------------------------------
++# Base for toolchain
++# ----------------------------------------------------------------------------
++BASE_TOOLCHAIN := ${HOME}/toolchains/git/arm-2009q1-203
++
++# ----------------------------------------------------------------------------
++# Base for code generation tools - compiler, linker, archiver etc.
++# ----------------------------------------------------------------------------
++BASE_CGTOOLS := $(BASE_TOOLCHAIN)/bin
++
++# ----------------------------------------------------------------------------
++# Base directory for include files provided by GPP OS
++# ----------------------------------------------------------------------------
++BASE_OSINC := $(BASE_BUILDOS)/include
++
++OSINC_GENERIC := $(BASE_OSINC)
++OSINC_PLATFORM := $(BASE_TOOLCHAIN)/lib/gcc/arm-none-linux-gnueabi/4.2.3/include
++OSINC_TARGET := $(BASE_TOOLCHAIN)/arm-none-linux-gnueabi/libc/usr/include
++
++ifneq ("$(VARIANT)", "")
++OSINC_VARIANT := $(BASE_OSINC)
++endif
++
++
++# ----------------------------------------------------------------------------
++# Base directory for libraries provided by GPP OS
++# ----------------------------------------------------------------------------
++BASE_OSLIB := $(BASE_TOOLCHAIN)/lib
++
++OSLIB_GENERIC := $(BASE_OSLIB)
++OSLIB_PLATFORM := $(BASE_OSLIB)
++
++
++ifneq ("$(VARIANT)", "")
++OSLIB_VARIANT := $(BASE_OSLIB)
++endif
++
++
++# ============================================================================
++# COMPILER
++# ============================================================================
++
++# ----------------------------------------------------------------------------
++# Name of the compiler
++# ----------------------------------------------------------------------------
++COMPILER := $(BASE_CGTOOLS)/arm-none-linux-gnueabi-gcc
++LD := $(BASE_CGTOOLS)/arm-none-linux-gnueabi-ld
++
++CROSS_COMPILE := arm-none-linux-gnueabi-
++export CROSS_COMPILE
++
++# ----------------------------------------------------------------------------
++# Command line switches used by the compiler
++#
++# CC_SW_DEF Command line defines
++# CC_SW_INC Search path for header files
++# CC_SW_OBJ Create object file
++# CC_SW_DEB Include debug information
++# ----------------------------------------------------------------------------
++CC_SW_DEF := -D
++CC_SW_INC := -I
++CC_SW_OBJ := -o
++CC_SW_DEB := -g
++
++# ----------------------------------------------------------------------------
++# Standard flags for the compiler
++# ----------------------------------------------------------------------------
++STD_USER_FLAGS := -Wall -c
++
++# ----------------------------------------------------------------------------
++# Flags for the compiler when building a library
++# ----------------------------------------------------------------------------
++EXE_CC_FLAGS :=
++
++# ----------------------------------------------------------------------------
++# Standard flags for the compiler when building an executable
++# ----------------------------------------------------------------------------
++DRV_CC_FLAGS := -nostdinc
++
++# ----------------------------------------------------------------------------
++# Flags for the compiler when building a driver
++# ----------------------------------------------------------------------------
++LIB_CC_FLAGS :=
++
++# ----------------------------------------------------------------------------
++# Standard definitions for the compiler
++# ----------------------------------------------------------------------------
++STD_CC_DEFNS := -D_REENTRANT
++
++# ============================================================================
++# ARCHIVER2 - This denotes the archiver.
++# ============================================================================
++ARCHIVER := $(BASE_CGTOOLS)/arm-none-linux-gnueabi-ar
++
++# ----------------------------------------------------------------------------
++# Standard flags for the archiver
++# ----------------------------------------------------------------------------
++STD_AR_FLAGS := -rs
++
++
++# ============================================================================
++# LINKER used for Library & Driver build
++# ============================================================================
++LINKER := $(BASE_CGTOOLS)/arm-none-linux-gnueabi-gcc
++
++# ----------------------------------------------------------------------------
++# Command line switches used by the linker
++#
++# LD_SW_LIB Search path for libraries
++# LD_SW_OUT Output filename
++# LD_SW_RELOC Generate relocateable output
++# ----------------------------------------------------------------------------
++LD_SW_LIB := -L
++LD_SW_OUT := -o
++LD_SW_RELOC := -r
++
++# ----------------------------------------------------------------------------
++# Flags for the LD when building an executable
++# ----------------------------------------------------------------------------
++STD_LD_FLAGS :=
++
++# ----------------------------------------------------------------------------
++# Standard flags for the LD
++# ----------------------------------------------------------------------------
++EXE_LD_FLAGS := -lpthread -lc
++
++# ----------------------------------------------------------------------------
++# Standard flags for the archiver
++# ----------------------------------------------------------------------------
++DRV_LD_FLAGS :=
++
++
++# ============================================================================
++# Post processing utilities for Linux 2.6
++# ============================================================================
++ifneq ($(CONFIG_MODVERSIONS),)
++CMD_MODPOST_FLAGS := -m -i
++else
++CMD_MODPOST_FLAGS := -i
++endif
++
++CMD_MODPOST := $(BASE_BUILDOS)/scripts/mod/modpost \
++ $(CMD_MODPOST_FLAGS) $(BASE_BUILDOS)/Module.symvers \
++ $(BASE_BUILDOS)/vmlinux
++
++
++endif # ifndef DAVINCI_LINUX2_6_MK
+--
+1.6.0.6
+
diff --git a/extras/recipes-ti/dsplink/ti-dsplink/dsplink_1_64_add_omapl137_build_support.patch b/extras/recipes-ti/dsplink/ti-dsplink/dsplink_1_64_add_omapl137_build_support.patch
new file mode 100644
index 00000000..fa4cb2e6
--- /dev/null
+++ b/extras/recipes-ti/dsplink/ti-dsplink/dsplink_1_64_add_omapl137_build_support.patch
@@ -0,0 +1,288 @@
+From fd5858c3a247bc61a4de3af1a5097cb05042cfa4 Mon Sep 17 00:00:00 2001
+From: Roger Monk <r-monk@ti.com>
+Date: Sun, 14 Mar 2010 22:13:42 +0000
+Subject: [PATCH] omap1
+
+Signed-off-by: Roger Monk <r-monk@ti.com>
+---
+ dsplink/config/bin/dsplinkcfg.pl | 2 +-
+ dsplink/gpp/src/DIRS | 5 +
+ dsplink/gpp/src/Makefile | 8 ++-
+ dsplink/make/Linux/omapl1xx_arm.mk | 210 ++++++++++++++++++++++++++++++++++++
+ 4 files changed, 223 insertions(+), 2 deletions(-)
+ create mode 100644 dsplink/make/Linux/omapl1xx_arm.mk
+
+diff --git a/dsplink/config/bin/dsplinkcfg.pl b/dsplink/config/bin/dsplinkcfg.pl
+index e83c133..8151945 100644
+--- a/dsplink/config/bin/dsplinkcfg.pl
++++ b/dsplink/config/bin/dsplinkcfg.pl
+@@ -523,7 +523,7 @@ my %CFG_DSPCFG_OMAPL1XXGEMSHMEM =
+ 'PHYID' => 'OMAPL1XXGEMSHMEM',
+ 'PHYDESC' => 'Shared Memory Physical Interface',
+ 'PHYTYPE' => 'SHMEM',
+- 'GPPOS' => [\%CFG_GPPOS_MVL5U, \%CFG_GPPOS_MVL5G],
++ 'GPPOS' => [\%CFG_GPPOS_MVL5U, \%CFG_GPPOS_MVL5G, \%CFG_GPPOS_ARM],
+ 'DSPOS' => [\%CFG_DSPOS_5XX],
+ # DSP defines
+ 'DSPNAME' => 'OMAPL1XXGEM',
+diff --git a/dsplink/gpp/src/DIRS b/dsplink/gpp/src/DIRS
+index 05bad2b..af48904 100644
+--- a/dsplink/gpp/src/DIRS
++++ b/dsplink/gpp/src/DIRS
+@@ -55,6 +55,10 @@ ifeq ("$(TI_DSPLINK_PLATFORM)", "OMAPL138")
+ DIRS += \
+ api
+ else # ifeq ("$(TI_DSPLINK_PLATFORM)", "OMAPL138")
++ifeq ("$(TI_DSPLINK_PLATFORM)", "OMAPL1XX")
++DIRS += \
++ api
++else # ifeq ("$(TI_DSPLINK_PLATFORM)", "OMAPL1XX")
+ ifeq ("$(TI_DSPLINK_PLATFORM)", "OMAP3530")
+ DIRS += \
+ api
+@@ -83,6 +87,7 @@ endif # ifeq ("$(TI_DSPLINK_PLATFORM)", "OMAPL138")
+ endif # ifeq ("$(TI_DSPLINK_PLATFORM)", "DAVINCIHD")
+ endif # ifeq ("$(TI_DSPLINK_PLATFORM)", "DAVINCI")
+ endif # ifeq ("$(TI_DSPLINK_PLATFORM)", "DA850")
++endif
+ else # ifeq ("$(TI_DSPLINK_GPPOS)", "Linux")
+ DIRS += \
+ arch \
+diff --git a/dsplink/gpp/src/Makefile b/dsplink/gpp/src/Makefile
+index 49c3b97..0afd988 100644
+--- a/dsplink/gpp/src/Makefile
++++ b/dsplink/gpp/src/Makefile
+@@ -83,7 +83,13 @@ ifeq ("$(TI_DSPLINK_GPPOS)", "Linux")
+ include $(DSPLINK)$(DIRSEP)gpp$(DIRSEP)src$(DIRSEP)Rules.mk
+ include $(DSPLINK)$(DIRSEP)gpp$(DIRSEP)src$(DIRSEP)Makefile_kbuild
+ else # else ("$(TI_DSPLINK_PLATFORM)", "DAVINCI")
+- include Makefile_bld
++ ifeq ("$(TI_DSPLINK_PLATFORM)", "OMAPL1XX")
++ include $(DSPLINK)$(DIRSEP)gpp$(DIRSEP)src$(DIRSEP)Makefile_bld
++ include $(DSPLINK)$(DIRSEP)gpp$(DIRSEP)src$(DIRSEP)Rules.mk
++ include $(DSPLINK)$(DIRSEP)gpp$(DIRSEP)src$(DIRSEP)Makefile_kbuild
++ else # else ("$(TI_DSPLINK_PLATFORM)", "DAVINCI")
++ include Makefile_bld
++ endif
+ endif # ifeq ("$(TI_DSPLINK_PLATFORM)", "DAVINCI")
+ endif # ifeq ("$(TI_DSPLINK_PLATFORM)", "OMAP3530")
+ endif # ifeq ("$(TI_DSPLINK_PLATFORM)", "DA850")
+diff --git a/dsplink/make/Linux/omapl1xx_arm.mk b/dsplink/make/Linux/omapl1xx_arm.mk
+new file mode 100644
+index 0000000..3e42e87
+--- /dev/null
++++ b/dsplink/make/Linux/omapl1xx_arm.mk
+@@ -0,0 +1,210 @@
++# ============================================================================
++# @file omapl1xx_arm.mk
++#
++# @path $(DSPLINK)/make/Linux/
++#
++# @desc This makefile defines OS specific macros used by MAKE system for
++# the Montavista Pro 5.0 Linux distribution with mvlpro.
++#
++# @ver 1.64
++# ============================================================================
++# Copyright (C) 2002-2009, Texas Instruments Incorporated -
++# http://www.ti.com/
++#
++# Redistribution and use in source and binary forms, with or without
++# modification, are permitted provided that the following conditions
++# are met:
++#
++# * Redistributions of source code must retain the above copyright
++# notice, this list of conditions and the following disclaimer.
++#
++# * Redistributions in binary form must reproduce the above copyright
++# notice, this list of conditions and the following disclaimer in the
++# documentation and/or other materials provided with the distribution.
++#
++# * Neither the name of Texas Instruments Incorporated nor the names of
++# its contributors may be used to endorse or promote products derived
++# from this software without specific prior written permission.
++#
++# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
++# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
++# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
++# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
++# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
++# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
++# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
++# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
++# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
++# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
++# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++# ============================================================================
++
++ifndef OMAPL1XX_ARM_MK
++
++define OMAPL1XX_ARM_MK
++endef
++
++
++# ============================================================================
++# Let the make system know that a specific distribution for the GPP OS
++# is being used.
++# ============================================================================
++USE_DISTRIBUTION := 1
++
++
++# ============================================================================
++# Set the values of necessary variables to be used for the OS.
++# ============================================================================
++
++# ----------------------------------------------------------------------------
++# Base directory for the GPP OS
++# ----------------------------------------------------------------------------
++BASE_BUILDOS := ${HOME}/da850/DaVinci-PSP-SDK-03.20.00.01/src/kernel/linux-03.20.00.01
++
++# ----------------------------------------------------------------------------
++# Base for toolchain
++# ----------------------------------------------------------------------------
++BASE_TOOLCHAIN := ${HOME}/git/arm-2008q3
++
++# ----------------------------------------------------------------------------
++# Base for code generation tools - compiler, linker, archiver etc.
++# ----------------------------------------------------------------------------
++BASE_CGTOOLS := $(BASE_TOOLCHAIN)/bin
++
++# ----------------------------------------------------------------------------
++# Base directory for include files provided by GPP OS
++# ----------------------------------------------------------------------------
++BASE_OSINC := $(BASE_BUILDOS)/include
++
++OSINC_GENERIC := $(BASE_OSINC)
++OSINC_PLATFORM := $(BASE_TOOLCHAIN)/lib/gcc/arm-none-linux-gnueabi/4.3.2/include
++OSINC_TARGET := $(BASE_TOOLCHAIN)/arm-none-linux-gnueabi/libc/usr/include
++
++ifneq ("$(VARIANT)", "")
++OSINC_VARIANT := $(BASE_OSINC)
++endif
++
++
++# ----------------------------------------------------------------------------
++# Base directory for libraries provided by GPP OS
++# ----------------------------------------------------------------------------
++BASE_OSLIB := $(BASE_TOOLCHAIN)/lib
++
++OSLIB_GENERIC := $(BASE_OSLIB)
++OSLIB_PLATFORM := $(BASE_OSLIB)
++
++
++ifneq ("$(VARIANT)", "")
++OSLIB_VARIANT := $(BASE_OSLIB)
++endif
++
++
++# ============================================================================
++# COMPILER
++# ============================================================================
++
++# ----------------------------------------------------------------------------
++# Name of the compiler
++# ----------------------------------------------------------------------------
++COMPILER := $(BASE_CGTOOLS)/arm-none-linux-gnueabi-gcc
++LD := $(BASE_CGTOOLS)/arm-none-linux-gnueabi-ld
++
++CROSS_COMPILE := arm-none-linux-gnueabi-
++export CROSS_COMPILE
++
++# ----------------------------------------------------------------------------
++# Command line switches used by the compiler
++#
++# CC_SW_DEF Command line defines
++# CC_SW_INC Search path for header files
++# CC_SW_OBJ Create object file
++# CC_SW_DEB Include debug information
++# ----------------------------------------------------------------------------
++CC_SW_DEF := -D
++CC_SW_INC := -I
++CC_SW_OBJ := -o
++CC_SW_DEB := -g
++
++# ----------------------------------------------------------------------------
++# Standard flags for the compiler
++# ----------------------------------------------------------------------------
++STD_USER_FLAGS := -Wall -c
++
++# ----------------------------------------------------------------------------
++# Standard flags for the compiler when building an executable
++# ----------------------------------------------------------------------------
++EXE_CC_FLAGS :=
++
++# ----------------------------------------------------------------------------
++# Flags for the compiler when building a driver
++# ----------------------------------------------------------------------------
++DRV_CC_FLAGS := -nostdinc
++
++# ----------------------------------------------------------------------------
++# Flags for the compiler when building a library
++# ----------------------------------------------------------------------------
++LIB_CC_FLAGS :=
++
++# ----------------------------------------------------------------------------
++# Standard definitions for the compiler
++# ----------------------------------------------------------------------------
++STD_CC_DEFNS := -D_REENTRANT
++
++# ============================================================================
++# ARCHIVER2 - This denotes the archiver.
++# ============================================================================
++ARCHIVER := $(BASE_CGTOOLS)/arm-none-linux-gnueabi-ar
++
++# ----------------------------------------------------------------------------
++# Standard flags for the archiver
++# ----------------------------------------------------------------------------
++STD_AR_FLAGS := -rs
++
++
++# ============================================================================
++# LINKER - The compiler is used for linking purpose as well.
++# ============================================================================
++LINKER := $(BASE_CGTOOLS)/arm-none-linux-gnueabi-gcc
++
++# ----------------------------------------------------------------------------
++# Command line switches used by the linker
++#
++# LD_SW_LIB Search path for libraries
++# LD_SW_OUT Output filename
++# LD_SW_RELOC Generate relocateable output
++# ----------------------------------------------------------------------------
++LD_SW_LIB := -L
++LD_SW_OUT := -o
++LD_SW_RELOC := -r
++
++# ----------------------------------------------------------------------------
++# Standard flags for the linker
++# ----------------------------------------------------------------------------
++STD_LD_FLAGS :=
++
++# ----------------------------------------------------------------------------
++# Flags for the linker when building an executable
++# ----------------------------------------------------------------------------
++EXE_LD_FLAGS := -lpthread -lc
++
++# ----------------------------------------------------------------------------
++# Flags for the linker when building a driver
++# ----------------------------------------------------------------------------
++DRV_LD_FLAGS :=
++
++
++# ============================================================================
++# Post processing utilities for Linux 2.6
++# ============================================================================
++ifneq ($(CONFIG_MODVERSIONS),)
++CMD_MODPOST_FLAGS := -m -i
++else
++CMD_MODPOST_FLAGS := -i
++endif
++
++CMD_MODPOST := $(BASE_BUILDOS)/scripts/mod/modpost \
++ $(CMD_MODPOST_FLAGS) $(BASE_BUILDOS)/Module.symvers \
++ $(BASE_BUILDOS)/vmlinux
++
++
++endif # ifndef OMAPL1XX_ARM_MK
+--
+1.6.0.6
+
diff --git a/extras/recipes-ti/dsplink/ti-dsplink/dsplink_1_64_kernel_2_6_33_autoconf.patch b/extras/recipes-ti/dsplink/ti-dsplink/dsplink_1_64_kernel_2_6_33_autoconf.patch
new file mode 100644
index 00000000..271b3043
--- /dev/null
+++ b/extras/recipes-ti/dsplink/ti-dsplink/dsplink_1_64_kernel_2_6_33_autoconf.patch
@@ -0,0 +1,335 @@
+diff -uNr dsplink_linux_1_64a/dsplink/gpp/src/arch/DA8XXGEM/da8xxgem_hal_pwr.c dsplink_linux_1_64b/dsplink/gpp/src/arch/DA8XXGEM/da8xxgem_hal_pwr.c
+--- dsplink_linux_1_64a/dsplink/gpp/src/arch/DA8XXGEM/da8xxgem_hal_pwr.c 2009-11-13 12:12:47.000000000 +0000
++++ dsplink_linux_1_64b/dsplink/gpp/src/arch/DA8XXGEM/da8xxgem_hal_pwr.c 2010-02-09 17:42:37.000000000 +0000
+@@ -22,7 +22,12 @@
+
+
+ /* ----------------------------------- OSAL Headers */
++#include <linux/version.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
++#include <generated/autoconf.h>
++#else
+ #include <linux/autoconf.h>
++#endif
+ #include <asm/page.h>
+ #include <asm/io.h>
+
+diff -uNr dsplink_linux_1_64a/dsplink/gpp/src/arch/DA8XXGEM/shmem/Linux/da8xxgem_phy_shmem.c dsplink_linux_1_64b/dsplink/gpp/src/arch/DA8XXGEM/shmem/Linux/da8xxgem_phy_shmem.c
+--- dsplink_linux_1_64a/dsplink/gpp/src/arch/DA8XXGEM/shmem/Linux/da8xxgem_phy_shmem.c 2009-11-13 12:12:47.000000000 +0000
++++ dsplink_linux_1_64b/dsplink/gpp/src/arch/DA8XXGEM/shmem/Linux/da8xxgem_phy_shmem.c 2010-02-09 17:43:06.000000000 +0000
+@@ -22,7 +22,12 @@
+
+
+ /* ----------------------------------- OS Headers */
++#include <linux/version.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
++#include <generated/autoconf.h>
++#else
+ #include <linux/autoconf.h>
++#endif
+ #include <linux/module.h>
+ #include <linux/types.h>
+ #include <linux/kernel.h>
+diff -uNr dsplink_linux_1_64a/dsplink/gpp/src/arch/DM6437/pci/dm6437_hal_pci_dma.c dsplink_linux_1_64b/dsplink/gpp/src/arch/DM6437/pci/dm6437_hal_pci_dma.c
+--- dsplink_linux_1_64a/dsplink/gpp/src/arch/DM6437/pci/dm6437_hal_pci_dma.c 2009-11-13 12:12:46.000000000 +0000
++++ dsplink_linux_1_64b/dsplink/gpp/src/arch/DM6437/pci/dm6437_hal_pci_dma.c 2010-02-09 17:45:06.000000000 +0000
+@@ -21,7 +21,12 @@
+ */
+
+
++#include <linux/version.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
++#include <generated/autoconf.h>
++#else
+ #include <linux/autoconf.h>
++#endif
+ #include <asm/page.h>
+ #include <asm/io.h>
+
+diff -uNr dsplink_linux_1_64a/dsplink/gpp/src/arch/DM6437/pci/Linux/2.6.18/dm6437_phy_pci.c dsplink_linux_1_64b/dsplink/gpp/src/arch/DM6437/pci/Linux/2.6.18/dm6437_phy_pci.c
+--- dsplink_linux_1_64a/dsplink/gpp/src/arch/DM6437/pci/Linux/2.6.18/dm6437_phy_pci.c 2009-11-13 12:12:46.000000000 +0000
++++ dsplink_linux_1_64b/dsplink/gpp/src/arch/DM6437/pci/Linux/2.6.18/dm6437_phy_pci.c 2010-02-09 17:44:49.000000000 +0000
+@@ -22,7 +22,12 @@
+
+
+ /* ----------------------------------- OS Headers */
++#include <linux/version.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
++#include <generated/autoconf.h>
++#else
+ #include <linux/autoconf.h>
++#endif
+ #include <linux/module.h>
+ #include <linux/types.h>
+ #include <linux/kernel.h>
+diff -uNr dsplink_linux_1_64a/dsplink/gpp/src/arch/DM6446GEM/shmem/Linux/dm6446gem_phy_shmem.c dsplink_linux_1_64b/dsplink/gpp/src/arch/DM6446GEM/shmem/Linux/dm6446gem_phy_shmem.c
+--- dsplink_linux_1_64a/dsplink/gpp/src/arch/DM6446GEM/shmem/Linux/dm6446gem_phy_shmem.c 2009-11-13 12:12:46.000000000 +0000
++++ dsplink_linux_1_64b/dsplink/gpp/src/arch/DM6446GEM/shmem/Linux/dm6446gem_phy_shmem.c 2010-02-09 17:44:21.000000000 +0000
+@@ -22,7 +22,12 @@
+
+
+ /* ----------------------------------- OS Headers */
++#include <linux/version.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
++#include <generated/autoconf.h>
++#else
+ #include <linux/autoconf.h>
++#endif
+ #include <linux/module.h>
+ #include <linux/types.h>
+ #include <linux/kernel.h>
+diff -uNr dsplink_linux_1_64a/dsplink/gpp/src/arch/DM6467GEM/shmem/Linux/dm6467gem_phy_shmem.c dsplink_linux_1_64b/dsplink/gpp/src/arch/DM6467GEM/shmem/Linux/dm6467gem_phy_shmem.c
+--- dsplink_linux_1_64a/dsplink/gpp/src/arch/DM6467GEM/shmem/Linux/dm6467gem_phy_shmem.c 2009-11-13 12:12:46.000000000 +0000
++++ dsplink_linux_1_64b/dsplink/gpp/src/arch/DM6467GEM/shmem/Linux/dm6467gem_phy_shmem.c 2010-02-09 17:41:46.000000000 +0000
+@@ -22,7 +22,12 @@
+
+
+ /* ----------------------------------- OS Headers */
++#include <linux/version.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
++#include <generated/autoconf.h>
++#else
+ #include <linux/autoconf.h>
++#endif
+ #include <linux/module.h>
+ #include <linux/types.h>
+ #include <linux/kernel.h>
+diff -uNr dsplink_linux_1_64a/dsplink/gpp/src/arch/DM648/pci/dm648_hal_pci_dma.c dsplink_linux_1_64b/dsplink/gpp/src/arch/DM648/pci/dm648_hal_pci_dma.c
+--- dsplink_linux_1_64a/dsplink/gpp/src/arch/DM648/pci/dm648_hal_pci_dma.c 2009-11-13 12:12:46.000000000 +0000
++++ dsplink_linux_1_64b/dsplink/gpp/src/arch/DM648/pci/dm648_hal_pci_dma.c 2010-02-09 17:42:02.000000000 +0000
+@@ -20,7 +20,12 @@
+ * ============================================================================
+ */
+
++#include <linux/version.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
++#include <generated/autoconf.h>
++#else
+ #include <linux/autoconf.h>
++#endif
+ #include <asm/page.h>
+ #include <asm/io.h>
+
+diff -uNr dsplink_linux_1_64a/dsplink/gpp/src/arch/DM648/pci/Linux/2.6.18/dm648_phy_pci.c dsplink_linux_1_64b/dsplink/gpp/src/arch/DM648/pci/Linux/2.6.18/dm648_phy_pci.c
+--- dsplink_linux_1_64a/dsplink/gpp/src/arch/DM648/pci/Linux/2.6.18/dm648_phy_pci.c 2009-11-13 12:12:46.000000000 +0000
++++ dsplink_linux_1_64b/dsplink/gpp/src/arch/DM648/pci/Linux/2.6.18/dm648_phy_pci.c 2010-02-09 17:42:21.000000000 +0000
+@@ -22,7 +22,12 @@
+
+
+ /* ----------------------------------- OS Headers */
++#include <linux/version.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
++#include <generated/autoconf.h>
++#else
+ #include <linux/autoconf.h>
++#endif
+ #include <linux/module.h>
+ #include <linux/types.h>
+ #include <linux/kernel.h>
+diff -uNr dsplink_linux_1_64a/dsplink/gpp/src/arch/OMAP2530/shmem/Linux/omap2530_phy_shmem.c dsplink_linux_1_64b/dsplink/gpp/src/arch/OMAP2530/shmem/Linux/omap2530_phy_shmem.c
+--- dsplink_linux_1_64a/dsplink/gpp/src/arch/OMAP2530/shmem/Linux/omap2530_phy_shmem.c 2009-11-13 12:12:47.000000000 +0000
++++ dsplink_linux_1_64b/dsplink/gpp/src/arch/OMAP2530/shmem/Linux/omap2530_phy_shmem.c 2010-02-09 17:43:29.000000000 +0000
+@@ -25,7 +25,12 @@
+
+
+ /* ----------------------------------- OS Headers */
++#include <linux/version.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
++#include <generated/autoconf.h>
++#else
+ #include <linux/autoconf.h>
++#endif
+ #include <linux/module.h>
+ #include <linux/types.h>
+ #include <linux/kernel.h>
+diff -uNr dsplink_linux_1_64a/dsplink/gpp/src/arch/OMAP3530/shmem/Linux/omap3530_phy_shmem.c dsplink_linux_1_64b/dsplink/gpp/src/arch/OMAP3530/shmem/Linux/omap3530_phy_shmem.c
+--- dsplink_linux_1_64a/dsplink/gpp/src/arch/OMAP3530/shmem/Linux/omap3530_phy_shmem.c 2009-11-13 12:12:47.000000000 +0000
++++ dsplink_linux_1_64b/dsplink/gpp/src/arch/OMAP3530/shmem/Linux/omap3530_phy_shmem.c 2010-02-09 17:43:50.000000000 +0000
+@@ -22,7 +22,12 @@
+
+
+ /* ----------------------------------- OS Headers */
++#include <linux/version.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
++#include <generated/autoconf.h>
++#else
+ #include <linux/autoconf.h>
++#endif
+ #include <linux/module.h>
+ #include <linux/types.h>
+ #include <linux/kernel.h>
+diff -uNr dsplink_linux_1_64a/dsplink/gpp/src/arch/TNETV107XGEM/shmem/Linux/tnetv107xgem_phy_shmem.c dsplink_linux_1_64b/dsplink/gpp/src/arch/TNETV107XGEM/shmem/Linux/tnetv107xgem_phy_shmem.c
+--- dsplink_linux_1_64a/dsplink/gpp/src/arch/TNETV107XGEM/shmem/Linux/tnetv107xgem_phy_shmem.c 2009-11-13 12:12:47.000000000 +0000
++++ dsplink_linux_1_64b/dsplink/gpp/src/arch/TNETV107XGEM/shmem/Linux/tnetv107xgem_phy_shmem.c 2010-02-09 17:44:06.000000000 +0000
+@@ -22,7 +22,12 @@
+
+
+ /* ----------------------------------- OS Headers */
++#include <linux/version.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
++#include <generated/autoconf.h>
++#else
+ #include <linux/autoconf.h>
++#endif
+ #include <linux/module.h>
+ #include <linux/types.h>
+ #include <linux/kernel.h>
+diff -uNr dsplink_linux_1_64a/dsplink/gpp/src/osal/Linux/2.6.18/dpc.c dsplink_linux_1_64b/dsplink/gpp/src/osal/Linux/2.6.18/dpc.c
+--- dsplink_linux_1_64a/dsplink/gpp/src/osal/Linux/2.6.18/dpc.c 2009-11-13 12:12:47.000000000 +0000
++++ dsplink_linux_1_64b/dsplink/gpp/src/osal/Linux/2.6.18/dpc.c 2010-02-09 17:47:25.000000000 +0000
+@@ -22,7 +22,12 @@
+
+
+ /* ----------------------------------- OS Specific Headers */
++#include <linux/version.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
++#include <generated/autoconf.h>
++#else
+ #include <linux/autoconf.h>
++#endif
+ #include <linux/spinlock.h>
+ #include <linux/sched.h>
+ #include <linux/interrupt.h>
+diff -uNr dsplink_linux_1_64a/dsplink/gpp/src/osal/Linux/2.6.18/isr.c dsplink_linux_1_64b/dsplink/gpp/src/osal/Linux/2.6.18/isr.c
+--- dsplink_linux_1_64a/dsplink/gpp/src/osal/Linux/2.6.18/isr.c 2009-11-13 12:12:47.000000000 +0000
++++ dsplink_linux_1_64b/dsplink/gpp/src/osal/Linux/2.6.18/isr.c 2010-02-09 17:46:54.000000000 +0000
+@@ -22,7 +22,12 @@
+
+
+ /* ----------------------------------- OS Specific Headers */
++#include <linux/version.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
++#include <generated/autoconf.h>
++#else
+ #include <linux/autoconf.h>
++#endif
+ #include <linux/version.h>
+ #include <linux/spinlock.h>
+ #include <linux/sched.h>
+diff -uNr dsplink_linux_1_64a/dsplink/gpp/src/osal/Linux/2.6.18/kfiledef.c dsplink_linux_1_64b/dsplink/gpp/src/osal/Linux/2.6.18/kfiledef.c
+--- dsplink_linux_1_64a/dsplink/gpp/src/osal/Linux/2.6.18/kfiledef.c 2009-11-13 12:12:47.000000000 +0000
++++ dsplink_linux_1_64b/dsplink/gpp/src/osal/Linux/2.6.18/kfiledef.c 2010-02-09 17:46:39.000000000 +0000
+@@ -22,7 +22,12 @@
+
+
+ /* ----------------------------------- OS Specific Headers */
++#include <linux/version.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
++#include <generated/autoconf.h>
++#else
+ #include <linux/autoconf.h>
++#endif
+ #include <linux/spinlock.h>
+ #include <linux/kernel.h>
+ #include <linux/mm.h>
+diff -uNr dsplink_linux_1_64a/dsplink/gpp/src/osal/Linux/2.6.18/mem.c dsplink_linux_1_64b/dsplink/gpp/src/osal/Linux/2.6.18/mem.c
+--- dsplink_linux_1_64a/dsplink/gpp/src/osal/Linux/2.6.18/mem.c 2009-11-13 12:12:47.000000000 +0000
++++ dsplink_linux_1_64b/dsplink/gpp/src/osal/Linux/2.6.18/mem.c 2010-02-09 17:46:25.000000000 +0000
+@@ -22,7 +22,12 @@
+
+
+ /* ----------------------------------- OS Specific Headers */
++#include <linux/version.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
++#include <generated/autoconf.h>
++#else
+ #include <linux/autoconf.h>
++#endif
+ #include <linux/spinlock.h>
+ #include <linux/sched.h>
+ #include <linux/types.h>
+diff -uNr dsplink_linux_1_64a/dsplink/gpp/src/osal/Linux/2.6.18/notify_knl.c dsplink_linux_1_64b/dsplink/gpp/src/osal/Linux/2.6.18/notify_knl.c
+--- dsplink_linux_1_64a/dsplink/gpp/src/osal/Linux/2.6.18/notify_knl.c 2009-11-13 12:12:47.000000000 +0000
++++ dsplink_linux_1_64b/dsplink/gpp/src/osal/Linux/2.6.18/notify_knl.c 2010-02-09 17:47:12.000000000 +0000
+@@ -22,7 +22,12 @@
+
+
+ /* ----------------------------------- OS Specific Headers */
++#include <linux/version.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
++#include <generated/autoconf.h>
++#else
+ #include <linux/autoconf.h>
++#endif
+ #include <linux/spinlock.h>
+ #include <linux/signal.h>
+ #include <linux/kernel.h>
+diff -uNr dsplink_linux_1_64a/dsplink/gpp/src/osal/Linux/2.6.18/sync.c dsplink_linux_1_64b/dsplink/gpp/src/osal/Linux/2.6.18/sync.c
+--- dsplink_linux_1_64a/dsplink/gpp/src/osal/Linux/2.6.18/sync.c 2009-11-13 12:12:47.000000000 +0000
++++ dsplink_linux_1_64b/dsplink/gpp/src/osal/Linux/2.6.18/sync.c 2010-02-09 17:47:39.000000000 +0000
+@@ -22,7 +22,12 @@
+
+
+ /* ----------------------------------- OS Specific Headers */
++#include <linux/version.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
++#include <generated/autoconf.h>
++#else
+ #include <linux/autoconf.h>
++#endif
+ #include <linux/spinlock.h>
+ #include <linux/timer.h>
+ #include <linux/sched.h>
+diff -uNr dsplink_linux_1_64a/dsplink/gpp/src/osal/Linux/prcs.c dsplink_linux_1_64b/dsplink/gpp/src/osal/Linux/prcs.c
+--- dsplink_linux_1_64a/dsplink/gpp/src/osal/Linux/prcs.c 2009-11-13 12:12:47.000000000 +0000
++++ dsplink_linux_1_64b/dsplink/gpp/src/osal/Linux/prcs.c 2010-02-09 17:45:44.000000000 +0000
+@@ -22,7 +22,12 @@
+
+
+ /* ----------------------------------- OS Specific Headers */
++#include <linux/version.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
++#include <generated/autoconf.h>
++#else
+ #include <linux/autoconf.h>
++#endif
+ #include <linux/spinlock.h>
+ #include <linux/module.h>
+ #include <linux/mm.h>
+diff -uNr dsplink_linux_1_64a/dsplink/gpp/src/osal/Linux/print.c dsplink_linux_1_64b/dsplink/gpp/src/osal/Linux/print.c
+--- dsplink_linux_1_64a/dsplink/gpp/src/osal/Linux/print.c 2009-11-13 12:12:47.000000000 +0000
++++ dsplink_linux_1_64b/dsplink/gpp/src/osal/Linux/print.c 2010-02-09 17:45:30.000000000 +0000
+@@ -22,7 +22,12 @@
+
+
+ /* ----------------------------------- OS Specific Headers */
++#include <linux/version.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
++#include <generated/autoconf.h>
++#else
+ #include <linux/autoconf.h>
++#endif
+ #include <linux/spinlock.h>
+ #include <stdarg.h>
+ #include <linux/types.h>
+diff -uNr dsplink_linux_1_64a/dsplink/gpp/src/osal/Linux/user.c dsplink_linux_1_64b/dsplink/gpp/src/osal/Linux/user.c
+--- dsplink_linux_1_64a/dsplink/gpp/src/osal/Linux/user.c 2009-11-13 12:12:47.000000000 +0000
++++ dsplink_linux_1_64b/dsplink/gpp/src/osal/Linux/user.c 2010-02-09 17:46:07.000000000 +0000
+@@ -22,7 +22,12 @@
+
+
+ /* ----------------------------------- OS Specific Headers */
++#include <linux/version.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
++#include <generated/autoconf.h>
++#else
+ #include <linux/autoconf.h>
++#endif
+ #include <linux/spinlock.h>
+ #include <linux/timer.h>
+ #include <linux/sched.h>
+diff -uNr dsplink_linux_1_64a/dsplink/gpp/src/pmgr/Linux/2.6.18/drv_pmgr.c dsplink_linux_1_64b/dsplink/gpp/src/pmgr/Linux/2.6.18/drv_pmgr.c
+--- dsplink_linux_1_64a/dsplink/gpp/src/pmgr/Linux/2.6.18/drv_pmgr.c 2009-11-13 12:12:48.000000000 +0000
++++ dsplink_linux_1_64b/dsplink/gpp/src/pmgr/Linux/2.6.18/drv_pmgr.c 2010-02-09 17:40:59.000000000 +0000
+@@ -33,7 +33,11 @@
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)
+ #include <linux/device.h>
+ #endif
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
++#include <generated/autoconf.h>
++#else
+ #include <linux/autoconf.h>
++#endif
+ #include <linux/spinlock.h>
+ #include <linux/module.h>
+ #include <linux/init.h>
diff --git a/extras/recipes-ti/dsplink/ti-dsplink/ti-dsplink-examples-loadmodules.sh b/extras/recipes-ti/dsplink/ti-dsplink/ti-dsplink-examples-loadmodules.sh
new file mode 100755
index 00000000..9cfb19d5
--- /dev/null
+++ b/extras/recipes-ti/dsplink/ti-dsplink/ti-dsplink-examples-loadmodules.sh
@@ -0,0 +1,25 @@
+#
+# Default Memory Map - for OMAP3530 dsplink examples
+#
+# Start Addr Size Description
+# -------------------------------------------
+# 0x80000000 126 MB Linux
+# 0x87E00000 2 MB DSPLINK (MEM) + DDR + DSPLINK (RESET)
+
+# sanity check to verify that we're using the right mem=xxM (126M in this case)
+awk '/MemTotal:/ {
+ mem=$2
+
+ if (mem > 126 * 1024)
+ print "Warning! You need to use mem=126M or less on the kernel cmdline"
+
+ printf "You have %dkB total memory for Linux\n", mem
+}' /proc/meminfo
+
+# insert DSP/BIOS Link driver
+#
+modprobe dsplinkk
+
+# make /dev/dsplink
+#rm -f /dev/dsplink
+#mknod /dev/dsplink c `awk "\\$2==\"dsplink\" {print \\$1}" /proc/devices` 0
diff --git a/extras/recipes-ti/dsplink/ti-dsplink/ti-dsplink-examples-run.sh b/extras/recipes-ti/dsplink/ti-dsplink/ti-dsplink-examples-run.sh
new file mode 100755
index 00000000..b2f2faac
--- /dev/null
+++ b/extras/recipes-ti/dsplink/ti-dsplink/ti-dsplink-examples-run.sh
@@ -0,0 +1,25 @@
+#! /bin/sh
+
+echo "Running Loop Sample App"
+./loopgpp loop.out 1024 2000 0
+
+echo "Running Message Sample App"
+./messagegpp message.out 10000 0
+
+echo "Running Message Multi Sample App"
+./messagemultigpp messagemulti.out 128 1 0
+
+echo "Running MultiProcessor List Sample App"
+./mplistgpp mplist.out 128 128 0
+
+echo "Running MultiProcessorCriticalSection Transfer Sample App"
+./mpcsxfergpp mpcsxfer.out 128 1000 0
+
+echo "Running Ringio Sample App"
+./ringiogpp ringio.out 2048 128 0
+
+echo "Running Scale Sample App"
+./scalegpp scale.out 128 500 0
+
+#echo "Running Read/Write Sample App"
+#./readwritegpp readwrite.out
diff --git a/extras/recipes-ti/dsplink/ti-dsplink/ti-dsplink-examples-unloadmodules.sh b/extras/recipes-ti/dsplink/ti-dsplink/ti-dsplink-examples-unloadmodules.sh
new file mode 100755
index 00000000..48fa84b0
--- /dev/null
+++ b/extras/recipes-ti/dsplink/ti-dsplink/ti-dsplink-examples-unloadmodules.sh
@@ -0,0 +1,5 @@
+# Unload modules - DSPLINK - OMAP3530
+
+# remove DSP/BIOS Link driver
+rmmod dsplinkk
+#rm -f /dev/dsplink
diff --git a/extras/recipes-ti/dsplink/ti-dsplink_1.65.00.03.bb b/extras/recipes-ti/dsplink/ti-dsplink_1.65.00.03.bb
new file mode 100644
index 00000000..a124b21a
--- /dev/null
+++ b/extras/recipes-ti/dsplink/ti-dsplink_1.65.00.03.bb
@@ -0,0 +1,16 @@
+require ti-dsplink.inc
+
+PE = "1"
+PV = "1_65_00_03"
+PV_dot = "1.65.00.03"
+PV_major = "1_65"
+
+PV_DL_PATH = "DSPLink/${PV_major}/${PV}/${PV_dot}"
+
+SRC_URI += "file://dsplink-BKL-fix.patch \
+ file://0001-remove-check-for-make-version-3.85-works-fine.patch \
+ "
+
+SRC_URI[dsplinktarball.md5sum] = "1bda596b631bd2f517edc70f6be4f2ca"
+SRC_URI[dsplinktarball.sha256sum] = "4b1bda89bd8465b887f5bcdf7b95018bc1d1f8968c0c44f8cbad2a9e1c52bcb7"
+
diff --git a/extras/recipes-ti/edma3lld/ti-edma3lld.inc b/extras/recipes-ti/edma3lld/ti-edma3lld.inc
new file mode 100644
index 00000000..fb131b66
--- /dev/null
+++ b/extras/recipes-ti/edma3lld/ti-edma3lld.inc
@@ -0,0 +1,23 @@
+DESCRIPTION = "TI EDMA3 Low Level Driver (LLD)"
+HOMEPAGE = "http://software-dl.ti.com/dsps/dsps_public_sw/${SRC_URI_edma3lldsite}/edma3_lld"
+SECTION = "devel"
+LICENSE = "TI"
+LIC_FILES_CHKSUM = "file://packages/ti/sdo/edma3/drv/edma3_drv.h;md5=c1aa300aaf369a0a03e7922c1b0bbf8e"
+
+require ../includes/ti-paths.inc
+require ../includes/ti-staging.inc
+require ../includes/ti-eula-unpack.inc
+
+TI_BIN_UNPK_WDEXT="/edma3_lld_${PV}"
+S = "${WORKDIR}${TI_BIN_UNPK_WDEXT}"
+
+SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/${SRC_URI_edma3lldsite}/edma3_lld/edma3-lld-bios5/${PV}/exports/EDMA3_LLD_setuplinux_${PV}.bin;name=edma3lldbin"
+
+BINFILE="EDMA3_LLD_setuplinux_${PV}.bin"
+TI_BIN_UNPK_CMDS="Y:workdir"
+
+do_install() {
+ install -d ${D}${EDMA3_LLD_INSTALL_DIR_RECIPE}
+ cp -pPrf ${S}/* ${D}${EDMA3_LLD_INSTALL_DIR_RECIPE}
+}
+
diff --git a/extras/recipes-ti/edma3lld/ti-edma3lld_01.11.01.04.bb b/extras/recipes-ti/edma3lld/ti-edma3lld_01.11.01.04.bb
new file mode 100644
index 00000000..9b03e9b3
--- /dev/null
+++ b/extras/recipes-ti/edma3lld/ti-edma3lld_01.11.01.04.bb
@@ -0,0 +1,9 @@
+require ti-edma3lld.inc
+
+PV = "01_11_01_04"
+
+SRC_URI_edma3lldsite = "sdo_tii/psp"
+
+SRC_URI[edma3lldbin.md5sum] = "b3c41cb946e2e4b94348fc6bcbe30b16"
+SRC_URI[edma3lldbin.sha256sum] = "617db3eadff33a88e3d42818c204f379906da3b312bc120092408043e7e2aaeb"
+
diff --git a/extras/recipes-ti/framework-components/ti-framework-components.inc b/extras/recipes-ti/framework-components/ti-framework-components.inc
new file mode 100644
index 00000000..f2244db4
--- /dev/null
+++ b/extras/recipes-ti/framework-components/ti-framework-components.inc
@@ -0,0 +1,21 @@
+DESCRIPTION = "TI Framework Components"
+HOMEPAGE = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/fc"
+SECTION = "devel"
+LICENSE = "BSD"
+
+LIC_FILES_CHKSUM = "file://framework_components_2_26_00_01_manifest.html;md5=3250f9da7ee72284c07f8dd840400c75"
+
+require recipes-ti/includes/ti-paths.inc
+require recipes-ti/includes/ti-staging.inc
+
+PR = "r1"
+
+S = "${WORKDIR}/framework_components_${PV}"
+
+SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/fc/${PV}/exports/framework_components_${PV},lite.tar.gz;name=fctarball"
+
+do_install() {
+ install -d ${D}${FC_INSTALL_DIR_RECIPE}
+ cp -pPrf ${S}/* ${D}${FC_INSTALL_DIR_RECIPE}
+}
+
diff --git a/extras/recipes-ti/framework-components/ti-framework-components_2.26.00.01.bb b/extras/recipes-ti/framework-components/ti-framework-components_2.26.00.01.bb
new file mode 100644
index 00000000..b7ea9b83
--- /dev/null
+++ b/extras/recipes-ti/framework-components/ti-framework-components_2.26.00.01.bb
@@ -0,0 +1,8 @@
+require ti-framework-components.inc
+
+PV = "2_26_00_01"
+
+SRC_URI[fctarball.md5sum] = "40b51cade2f9ae6e6f6dca73c17065af"
+SRC_URI[fctarball.sha256sum] = "3f7a12a51dfe87310828a31518d7ef8f9039e59269c0ca24f74a68433c235048"
+
+
diff --git a/extras/recipes-ti/gstreamer-ti/gstreamer-ti.inc b/extras/recipes-ti/gstreamer-ti/gstreamer-ti.inc
new file mode 100644
index 00000000..cb032666
--- /dev/null
+++ b/extras/recipes-ti/gstreamer-ti/gstreamer-ti.inc
@@ -0,0 +1,164 @@
+DESCRIPTION = "GSTREAMER Plugin (gstreamer-ti) for TI ARM/DSP processors"
+HOMEPAGE = "https://gforge.ti.com/gf/project/gstreamer_ti/"
+SECTION = "multimedia"
+LICENSE = "LGPL"
+
+# TODO :: Replace omapl137 with official support in GST (currently linking to omapl138)
+# TODO :: Codec Server Environment Variables shouldn't be required
+# TODO :: Add (and check) rc scripts for all targets (just copied for now) (365,6467,omapl137)
+# TODO :: Check if CPPFLAGS_append is still required
+# TODO :: Remove ENCODE/DECODE combo exports - these are not used anymore (check?)
+
+inherit autotools
+inherit update-rc.d
+require recipes-ti/includes/ti-paths.inc
+require recipes-ti/includes/ti-staging.inc
+
+# Rebuild on kernel change since it links statically to ti-dmai, ti-codec-engine, etc
+PR = "r85+${MACHINE_KERNEL_PR}"
+
+DEPENDS = "ti-dmai gstreamer gst-plugins-base"
+
+# enable c6accel elements on omapl138 and omap3
+#DEPENDS_append_omapl138 = " ti-c6accel "
+#EXTRA_OECONF_omapl138 = "--enable-c6accel"
+#DEPENDS_append_omap3 = " ti-c6accel "
+#EXTRA_OECONF_omap3 = "--enable-c6accel"
+export C6ACCEL_INSTALL_DIR
+
+# gstreamer_ti picks up some config variables from the environment
+# - variables are used in the gstreamer makefile
+# - PLATFORM, XDC_PLATFORM, XDC_TARGET, MVTOOL_DIR
+# - others used by config.bld (which it gets from the dmai config.bld)
+# - CROSS_COMPILE, PLATFORM_XDC
+
+PLATFORM_dm6446 = "dm6446"
+PLATFORM_dm6467 = "dm6467"
+PLATFORM_dm6467t = "dm6467t"
+PLATFORM_omap3 = "omap3530"
+PLATFORM_dm355 = "dm355"
+PLATFORM_dm365 = "dm365"
+PLATFORM_omapl137 = "omapl137"
+PLATFORM_omapl138 = "omapl138"
+PLATFORM ?= "UNDEFINED_PLATFORM"
+GST_TI_PLATFORM = "${PLATFORM}"
+
+XDC_PLATFORM_dm6446 = "ti.platforms.evmDM6446"
+XDC_PLATFORM_dm6467 = "ti.platforms.evmDM6467"
+XDC_PLATFORM_omap3 = "ti.platforms.evm3530"
+XDC_PLATFORM_dm355 = "ti.platforms.evmDM355"
+XDC_PLATFORM_dm365 = "ti.platforms.evmDM365"
+XDC_PLATFORM_omapl137 = "ti.platforms.evmOMAPL137"
+XDC_PLATFORM_omapl138 = "ti.platforms.evmOMAPL138"
+XDC_PLATFORM ?= "UNDEFINED_XDC_PLATFORM"
+
+MEMARGS_omap3 = "99M@0x80000000"
+MEMARGS ?= "UNDEFINED_MEM_ARGS"
+
+export MEMARGS
+export PLATFORM
+export GST_TI_PLATFORM
+export XDC_PLATFORM
+export XDC_TARGET = "gnu.targets.arm.GCArmv5T"
+export PLATFORM_XDC = "${XDC_PLATFORM}"
+export CSTOOL_DIR = "${TOOLCHAIN_PATH}"
+export MVTOOL_DIR = "${TOOLCHAIN_PATH}"
+export MVTOOL_PREFIX = "${TARGET_PREFIX}"
+export CROSS_COMPILE = "${TOOLCHAIN_PATH}/${TARGET_PREFIX}"
+export LINK_XDC_ROOT = "${LINK_INSTALL_DIR}"
+
+# export codec combo (or server) locations
+# Why do we need to do this?? - These will get picked up from CODEC_INSTALL_DIR?
+# Sould only need this if we change from default server
+
+export CODEC_SERVER = "${installdir}/ti-codecs-server/cs.x64P"
+CPPFLAGS_append = " -DPlatform_${PLATFORM}"
+
+# We are still using encode/decode combo for DM6446
+export ENCODE_COMBO = "${installdir}/ti-codecs-server/encodeCombo.x64P"
+export DECODE_COMBO = "${installdir}/ti-codecs-server/decodeCombo.x64P"
+# Makefile also expects to be able to find the kernel headers from the envirionment
+export LINUXKERNEL_INSTALL_DIR = "${STAGING_KERNEL_DIR}"
+
+do_configure_prepend() {
+ # PSP kernel is based on older DSS. we need to replace linux/omapfb.h with mach/omapfb.h
+ if ! [ -e ${STAGING_KERNEL_DIR}/include/linux/omapfb.h ] ; then
+ sed -i -e s:linux/omapfb:mach/omapfb:g ${S}/src/omapfb.h || true
+ fi
+
+ # Angstrom 2008 breaks with -Wl,-T, while angstrom 2010 needs it
+ if [ $(${TARGET_PREFIX}gcc -dumpversion | awk -F. '{print $2}') -gt 3 ] ; then
+ # Fix up linkerscripts, recent toolchains need -T to prepend the default script to the custom one
+ for makefile in $(find ${S} -name "Makefile.am") ; do
+ sed -i -e 's:-Wl,$(XDC_CONFIG_BASENAME)/linker.cmd:-Wl,-T,$(XDC_CONFIG_BASENAME)/linker.cmd:g' $makefile
+ done
+ fi
+}
+
+do_compile() {
+ # Recent kernel headers warn against inclusion from userspace
+ for makefile in $(find ${S} -name "Makefile") ; do
+ sed -i -e s:-Werror::g $makefile
+ done
+
+ oe_runmake
+}
+
+do_install_prepend () {
+
+ install -d ${D}/${installdir}/gst/${PLATFORM}
+
+ # copy gstreamer demo scripts
+ cp -R ${WORKDIR}/gstreamer_ti/gstreamer_demo/shared ${D}/${installdir}/gst
+
+ # If we have loadmodules.sh in WORKDIR then give preference to this over
+ # the default gst-ti loadmdules.sh
+ if [ -f ${WORKDIR}/loadmodules.sh ]; then
+ cp ${WORKDIR}/loadmodules.sh ${D}/${installdir}/gst/${PLATFORM}
+ else
+ cp -R ${WORKDIR}/gstreamer_ti/gstreamer_demo/${PLATFORM} ${D}/${installdir}/gst
+ fi
+
+ # delete .svn files
+ find ${D}/${installdir}/gst -name .svn -type d | xargs rm -rf
+ chmod 0755 ${D}/${installdir}/gst -R
+
+ install -d ${D}${sysconfdir}/init.d/
+ install -m 0755 ${WORKDIR}/gstreamer-ti-rc.sh ${D}${sysconfdir}/init.d/gstti-init
+ sed -i -e 's|<platform>|${PLATFORM}|g' ${D}${sysconfdir}/init.d/gstti-init
+
+ install -d ${D}${base_libdir}/systemd/system
+ install -m 0644 ${WORKDIR}/gstti-init.service ${D}${base_libdir}/systemd/system/
+ sed -i -e 's|<platform>|${PLATFORM}|g' -e 's|MEMARGS|${MEMARGS}|' ${D}${base_libdir}/systemd/system/gstti-init.service
+}
+
+RRECOMMENDS_${PN}_append_dm6446 += "ti-codecs-dm6446-server ti-cmem-module ti-dsplink-module"
+RRECOMMENDS_${PN}_append_dm6467 += "ti-codecs-dm6467 ti-cmem-module ti-dsplink-module"
+RRECOMMENDS_${PN}_append_omap3 += "ti-codecs-omap3530-server ti-cmem-module ti-dsplink-module ti-lpm-module ti-sdma-module"
+RRECOMMENDS_${PN}_append_dm355 += "ti-codecs-dm355 ti-cmem-module ti-dm355mm-module"
+RRECOMMENDS_${PN}_append_dm365 += "ti-codecs-dm365 ti-cmem-module ti-dm365mm-module ti-edma-module ti-irq-module"
+RRECOMMENDS_${PN}_append_omapl137 += "ti-codecs-omapl137-server ti-cmem-module ti-dsplink-module"
+RRECOMMENDS_${PN}_append_omapl138 += "ti-codecs-omapl138-server ti-cmem-module ti-dsplink-module"
+
+FILES_${PN} += "${libdir}/gstreamer-0.10/*.so ${sysconfdir} ${installdir} ${base_libdir}/systemd"
+FILES_${PN}-dev += "${libdir}/gstreamer-0.10/*.a ${libdir}/gstreamer-0.10/*.la"
+FILES_${PN}-dbg += "${libdir}/gstreamer-0.10/.debug"
+
+pkg_postinst_${PN} () {
+if test "x$D" != "x"; then
+ echo "Can't run gstreamer-ti postinst offline"
+ exit 1
+fi
+ if [ -e ${base_bindir}/systemctl ] ; then
+ systemctl enable gstti-init.service
+ fi
+
+ if [ -d ${installdir}/ti-codecs-server/ ]; then
+ ln -sf ${installdir}/ti-codecs-server/* ${installdir}/gst/${PLATFORM}/
+ fi
+}
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+INITSCRIPT_NAME = "gstti-init"
+INITSCRIPT_PARAMS = "start 30 5 2 . stop 40 0 1 6 ."
diff --git a/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0001-add-omapdmaifbsink.patch b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0001-add-omapdmaifbsink.patch
new file mode 100644
index 00000000..bcf0d904
--- /dev/null
+++ b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0001-add-omapdmaifbsink.patch
@@ -0,0 +1,1336 @@
+diff -uNr ticodecplugin/configure.ac ticodecplugin.new/configure.ac
+--- ticodecplugin/configure.ac 2010-08-24 15:08:58.609410984 -0500
++++ ticodecplugin.new/configure.ac 2010-09-03 13:54:11.909410298 -0500
+@@ -25,6 +25,7 @@
+ AC_SUBST(ACLOCAL_AMFLAGS, "-I m4")
+
+ AM_CONFIG_HEADER(config.h)
++AM_PROG_AS
+
+ dnl check for tools
+ AC_PROG_CC
+diff -uNr ticodecplugin/src/gstticodecplugin.c ticodecplugin.new/src/gstticodecplugin.c
+--- ticodecplugin/src/gstticodecplugin.c 2010-08-24 15:08:58.609410984 -0500
++++ ticodecplugin.new/src/gstticodecplugin.c 2010-09-03 13:54:11.929409696 -0500
+@@ -42,6 +42,7 @@
+ #include "gsttiaudenc1.h"
+ #include "gsttividresize.h"
+ #include "gsttidmaiperf.h"
++#include "omapfb.h"
+
+ #ifdef HAVE_C6ACCEL
+ #include "gsttic6xcolorspace.h"
+@@ -134,6 +135,13 @@
+ return FALSE;
+ #endif
+
++ env_value = getenv("GST_omapdmaifbsink_DISABLE");
++
++ if ((!env_value || strcmp(env_value,"1")) && !gst_element_register(
++ TICodecPlugin, "omapdmaifbsink", GST_RANK_PRIMARY,
++ GST_OMAPFB_SINK_TYPE))
++ return FALSE;
++
+ return TRUE;
+ }
+
+diff -uNr ticodecplugin/src/Makefile.am ticodecplugin.new/src/Makefile.am
+--- ticodecplugin/src/Makefile.am 2010-08-24 22:01:30.989165985 -0500
++++ ticodecplugin.new/src/Makefile.am 2010-09-03 13:53:41.037663172 -0500
+@@ -12,16 +12,16 @@
+
+
+ # sources used to compile this plug-in
+-libgstticodecplugin_la_SOURCES = gstticodecplugin.c gsttiauddec1.c gsttividdec2.c gsttiimgenc1.c gsttiimgdec1.c gsttidmaibuffertransport.c gsttidmaibuftab.c gstticircbuffer.c gsttidmaivideosink.c gstticodecs.c gstticodecs_platform.c gsttiquicktime_aac.c gsttiquicktime_h264.c gsttividenc1.c gsttiaudenc1.c gstticommonutils.c gsttividresize.c gsttidmaiperf.c gsttiquicktime_mpeg4.c $(C6ACCEL_SRC)
++libgstticodecplugin_la_SOURCES = gstticodecplugin.c gsttiauddec1.c gsttividdec2.c gsttiimgenc1.c gsttiimgdec1.c gsttidmaibuffertransport.c gsttidmaibuftab.c gstticircbuffer.c gsttidmaivideosink.c gstticodecs.c gstticodecs_platform.c gsttiquicktime_aac.c gsttiquicktime_h264.c gsttividenc1.c gsttiaudenc1.c gstticommonutils.c gsttividresize.c gsttidmaiperf.c gsttiquicktime_mpeg4.c $(C6ACCEL_SRC) omapfb.c yuv.S
+
+ # flags used to compile this plugin
+ # add other _CFLAGS and _LIBS as needed
+-libgstticodecplugin_la_CFLAGS = $(GST_CFLAGS) $(shell cat $(XDC_CONFIG_BASENAME)/compiler.opt)
+-libgstticodecplugin_la_LIBADD = $(GST_LIBS) $(GST_BASE_LIBS) $(GST_PLUGINS_BASE_LIBS) -lgstvideo-0.10 -lgstaudio-0.10 -lm
++libgstticodecplugin_la_CFLAGS = $(GST_CFLAGS) $(shell cat $(XDC_CONFIG_BASENAME)/compiler.opt) -I$(LINUXKERNEL_INSTALL_DIR)/include
++libgstticodecplugin_la_LIBADD = $(GST_LIBS) $(GST_BASE_LIBS) $(GST_PLUGINS_BASE_LIBS) -lgstvideo-0.10 -lgstaudio-0.10 -lm -lX11
+ libgstticodecplugin_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -Wl,$(XDC_CONFIG_BASENAME)/linker.cmd -Wl,$(C6ACCEL_LIB)
+
+ # headers we need but don't want installed
+-noinst_HEADERS = gsttiauddec1.h gsttividdec2.h gsttiimgenc1.h gsttiimgdec1.h gsttidmaibuffertransport.h gsttidmaibuftab.h gstticircbuffer.h gsttidmaivideosink.h gsttithreadprops.h gstticodecs.h gsttiquicktime_aac.h gsttiquicktime_h264.h gsttividenc1.h gsttiaudenc1.h gstticommonutils.h gsttividresize.h gsttiquicktime_mpeg4.h $(C6ACCEL_HEAD)
++noinst_HEADERS = gsttiauddec1.h gsttividdec2.h gsttiimgenc1.h gsttiimgdec1.h gsttidmaibuffertransport.h gsttidmaibuftab.h gstticircbuffer.h gsttidmaivideosink.h gsttithreadprops.h gstticodecs.h gsttiquicktime_aac.h gsttiquicktime_h264.h gsttividenc1.h gsttiaudenc1.h gstticommonutils.h gsttividresize.h gsttiquicktime_mpeg4.h $(C6ACCEL_HEAD) omapfb.h
+
+ # XDC Configuration
+ CONFIGURO = $(XDC_INSTALL_DIR)/xs xdc.tools.configuro
+diff -uNr ticodecplugin/src/omapfb.c ticodecplugin.new/src/omapfb.c
+--- ticodecplugin/src/omapfb.c 1969-12-31 18:00:00.000000000 -0600
++++ ticodecplugin.new/src/omapfb.c 2010-09-03 13:54:11.929409696 -0500
+@@ -0,0 +1,1005 @@
++/*
++ * Copyright (C) 2008 Felipe Contreras <felipe.contreras@gmail.com>
++ * Copyright (C) 2009 Tim Yamin <plasm@roo.me.uk>
++ * Copyright (C) 2009 Brijesh Singh <brijesh.ksingh@gmail.com>
++ *
++ * X code largely copied from ximagesink by Julien Moutte and
++ * vo_omapfb.c by Gregoire Gentil.
++ *
++ * Use DMAI hw framecopy module to copy the dmai transport buffers.
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation
++ * version 2.1 of the License.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
++ */
++
++#include <fcntl.h>
++#include <sys/ioctl.h>
++#include <sys/mman.h>
++#include <unistd.h>
++#include <string.h>
++#include <sys/types.h>
++#include <malloc.h>
++#include <stdlib.h>
++
++#include "omapfb.h"
++#include <gst/interfaces/xoverlay.h>
++
++static GstVideoSinkClass *parent_class = NULL;
++
++extern void yuv420_to_yuv422(__uint8_t *yuv, __uint8_t *y, __uint8_t *u, __uint8_t *v,
++ int w, int h, int yw, int cw, int dw);
++
++static void x11_get_window_abs_position(Display *display, Window window,
++ int *wx, int *wy, int *ww, int *wh)
++{
++ Window root, parent;
++ Window *child;
++ unsigned int n_children;
++ XWindowAttributes attribs;
++
++ /* Get window attributes */
++ XGetWindowAttributes(display, window, &attribs);
++
++ /* Get relative position of given window */
++ *wx = attribs.x;
++ *wy = attribs.y;
++ if (ww)
++ *ww = attribs.width;
++ if (wh)
++ *wh = attribs.height;
++
++ /* Query window tree information */
++ XQueryTree(display, window, &root, &parent, &child, &n_children);
++ if (parent)
++ {
++ int x, y;
++
++ /* If we have a parent we must go there and discover his position */
++ x11_get_window_abs_position(display, parent, &x, &y, NULL, NULL);
++ *wx += x;
++ *wy += y;
++ }
++
++ /* If we had children, free them */
++ if(n_children)
++ XFree(child);
++}
++
++static GstXWindow *
++gst_omapfbsink_xwindow_new (GstOmapFbSink * omapfbsink, gint width, gint height)
++{
++ GstXWindow *xwindow = NULL;
++ XGCValues values;
++
++ if(!omapfbsink->xcontext)
++ return NULL;
++
++ xwindow = g_new0 (GstXWindow, 1);
++ xwindow->width = width;
++ xwindow->height = height;
++ xwindow->internal = TRUE;
++
++ g_mutex_lock (omapfbsink->x_lock);
++ xwindow->win = XCreateSimpleWindow (omapfbsink->xcontext->disp,
++ omapfbsink->xcontext->root,
++ 0, 0, xwindow->width, xwindow->height,
++ 0, 0, omapfbsink->colorKey);
++
++ /* We have to do that to prevent X from redrawing the background on
++ ConfigureNotify. This takes away flickering of video when resizing. */
++ XSetWindowBackgroundPixmap (omapfbsink->xcontext->disp, xwindow->win, None);
++
++ if (omapfbsink->handle_events) {
++ Atom wm_delete;
++
++ XSelectInput (omapfbsink->xcontext->disp, xwindow->win, ExposureMask |
++ StructureNotifyMask | PointerMotionMask | KeyPressMask |
++ KeyReleaseMask | ButtonPressMask | ButtonReleaseMask);
++
++ /* Tell the window manager we'd like delete client messages instead of
++ * being killed */
++ wm_delete = XInternAtom (omapfbsink->xcontext->disp,
++ "WM_DELETE_WINDOW", False);
++ (void) XSetWMProtocols (omapfbsink->xcontext->disp, xwindow->win,
++ &wm_delete, 1);
++ }
++
++ xwindow->gc = XCreateGC (omapfbsink->xcontext->disp, xwindow->win,
++ 0, &values);
++
++ XMapRaised (omapfbsink->xcontext->disp, xwindow->win);
++ XSync (omapfbsink->xcontext->disp, FALSE);
++
++ g_mutex_unlock (omapfbsink->x_lock);
++ gst_x_overlay_got_xwindow_id (GST_X_OVERLAY (omapfbsink), xwindow->win);
++
++ return xwindow;
++}
++
++static gboolean gst_omapfbsink_update_plane (GstOmapFbSink *omapfbsink)
++{
++ int wx, wy, ww, wh;
++ if (!omapfbsink->xcontext)
++ {
++ if (ioctl (omapfbsink->overlay_fd, OMAPFB_SETUP_PLANE, &omapfbsink->plane_info))
++ return FALSE;
++ return TRUE;
++ }
++
++ if (omapfbsink->plane_info.enabled != 1)
++ return FALSE;
++
++ x11_get_window_abs_position(omapfbsink->xcontext->disp,
++ omapfbsink->xwindow->win, &wx, &wy, &ww, &wh);
++
++ if (wx != omapfbsink->xwindow->wx || wy != omapfbsink->xwindow->wy ||
++ wh != omapfbsink->xwindow->height || ww != omapfbsink->xwindow->width) {
++ omapfbsink->plane_info.out_width = omapfbsink->xwindow->width = ww;
++ omapfbsink->plane_info.out_height = omapfbsink->xwindow->height = wh;
++ omapfbsink->plane_info.pos_x = omapfbsink->xwindow->wx = wx;
++ omapfbsink->plane_info.pos_y = omapfbsink->xwindow->wy = wy;
++
++ GST_DEBUG_OBJECT(omapfbsink, "updating geometry to: (%d,%d) %dx%d", wx, wy, ww, wh);
++
++ XSetForeground (omapfbsink->xcontext->disp, omapfbsink->xwindow->gc, omapfbsink->colorKey);
++ XFillRectangle (omapfbsink->xcontext->disp, omapfbsink->xwindow->win, omapfbsink->xwindow->gc, 0, 0, ww, wh);
++
++ if (ioctl (omapfbsink->overlay_fd, OMAPFB_SETUP_PLANE, &omapfbsink->plane_info))
++ return FALSE;
++ }
++
++ return TRUE;
++}
++
++static void
++gst_omapfbsink_expose (GstXOverlay * overlay)
++{
++ gst_omapfbsink_update_plane(GST_OMAPFB_SINK (overlay));
++}
++
++static void
++gst_omapfbsink_xwindow_destroy (GstOmapFbSink * omapfbsink,
++ GstXWindow * xwindow)
++{
++ g_return_if_fail (xwindow != NULL);
++ g_mutex_lock (omapfbsink->x_lock);
++
++ /* If we did not create that window we just free the GC and let it live */
++ if (xwindow->internal)
++ XDestroyWindow (omapfbsink->xcontext->disp, xwindow->win);
++ else
++ XSelectInput (omapfbsink->xcontext->disp, xwindow->win, 0);
++
++ XFreeGC (omapfbsink->xcontext->disp, xwindow->gc);
++ XSync (omapfbsink->xcontext->disp, FALSE);
++ g_mutex_unlock (omapfbsink->x_lock);
++ g_free (xwindow);
++}
++
++/* This function handles XEvents that might be in the queue. It generates
++ GstEvent that will be sent upstream in the pipeline to handle interactivity
++ and navigation.*/
++static void
++gst_omapfbsink_handle_xevents (GstOmapFbSink * omapfbsink)
++{
++ XEvent e;
++ g_mutex_lock (omapfbsink->flow_lock);
++ g_mutex_lock (omapfbsink->x_lock);
++
++ while (XCheckWindowEvent (omapfbsink->xcontext->disp,
++ omapfbsink->xwindow->win, ExposureMask | StructureNotifyMask, &e)) {
++ switch (e.type) {
++ case Expose:
++ case ConfigureNotify:
++ gst_omapfbsink_update_plane (omapfbsink);
++ break;
++ default:
++ break;
++ }
++ }
++
++ /* Handle Display events */
++ while (XPending (omapfbsink->xcontext->disp)) {
++ XNextEvent (omapfbsink->xcontext->disp, &e);
++
++ switch (e.type) {
++ case ClientMessage:{
++ Atom wm_delete;
++
++ wm_delete = XInternAtom (omapfbsink->xcontext->disp,
++ "WM_DELETE_WINDOW", False);
++ if (wm_delete == (Atom) e.xclient.data.l[0]) {
++ /* Handle window deletion by posting an error on the bus */
++ GST_ELEMENT_ERROR (omapfbsink, RESOURCE, NOT_FOUND,
++ ("Output window was closed"), (NULL));
++
++ g_mutex_unlock (omapfbsink->x_lock);
++ gst_omapfbsink_xwindow_destroy (omapfbsink, omapfbsink->xwindow);
++ omapfbsink->xwindow = NULL;
++ g_mutex_lock (omapfbsink->x_lock);
++ }
++ break;
++ }
++ default:
++ break;
++ }
++ }
++
++ g_mutex_unlock (omapfbsink->x_lock);
++ g_mutex_unlock (omapfbsink->flow_lock);
++}
++
++static gpointer
++gst_omapfbsink_event_thread (GstOmapFbSink * omapfbsink)
++{
++ GST_OBJECT_LOCK (omapfbsink);
++ while (omapfbsink->running) {
++ GST_OBJECT_UNLOCK (omapfbsink);
++
++ if (omapfbsink->xwindow)
++ gst_omapfbsink_handle_xevents (omapfbsink);
++ g_usleep (100000);
++
++ GST_OBJECT_LOCK (omapfbsink);
++ }
++ GST_OBJECT_UNLOCK (omapfbsink);
++
++ return NULL;
++}
++
++/* This function gets the X Display and global info about it. Everything is
++ stored in our object and will be cleaned when the object is disposed. */
++static GstXContext *
++gst_omapfbsink_xcontext_get (GstOmapFbSink * omapfbsink)
++{
++ GstXContext *xcontext = g_new0 (GstXContext, 1);
++ g_mutex_lock (omapfbsink->x_lock);
++
++ xcontext->disp = XOpenDisplay (omapfbsink->display_name);
++
++ if (!xcontext->disp) {
++ g_mutex_unlock (omapfbsink->x_lock);
++ g_free (xcontext);
++ GST_ELEMENT_WARNING (omapfbsink, RESOURCE, WRITE,
++ ("Could not initialise X output"),
++ ("Could not open display"));
++ return NULL;
++ }
++
++ xcontext->screen = DefaultScreenOfDisplay (xcontext->disp);
++ xcontext->screen_num = DefaultScreen (xcontext->disp);
++ xcontext->visual = DefaultVisual (xcontext->disp, xcontext->screen_num);
++ xcontext->root = DefaultRootWindow (xcontext->disp);
++
++ xcontext->width = DisplayWidth (xcontext->disp, xcontext->screen_num);
++ xcontext->height = DisplayHeight (xcontext->disp, xcontext->screen_num);
++
++ g_mutex_unlock (omapfbsink->x_lock);
++
++ /* Setup our event listening thread */
++ GST_OBJECT_LOCK (omapfbsink);
++ omapfbsink->running = TRUE;
++ omapfbsink->event_thread = g_thread_create (
++ (GThreadFunc) gst_omapfbsink_event_thread, omapfbsink, TRUE, NULL);
++ GST_OBJECT_UNLOCK (omapfbsink);
++
++ return xcontext;
++}
++
++static void
++gst_omapfbsink_set_xwindow_id (GstXOverlay * overlay, XID xwindow_id)
++{
++ GstOmapFbSink *omapfbsink = GST_OMAPFB_SINK (overlay);
++ GstXWindow *xwindow = NULL;
++ XWindowAttributes attr;
++
++ /* If we already use that window, return */
++ if (omapfbsink->xwindow && (xwindow_id == omapfbsink->xwindow->win))
++ return;
++
++ /* If the element has not initialized the X11 context try to do so */
++ if (!omapfbsink->xcontext &&
++ !(omapfbsink->xcontext = gst_omapfbsink_xcontext_get (omapfbsink))) {
++ g_mutex_unlock (omapfbsink->flow_lock);
++ return;
++ }
++
++ /* If a window is there already we destroy it */
++ if (omapfbsink->xwindow) {
++ gst_omapfbsink_xwindow_destroy (omapfbsink, omapfbsink->xwindow);
++ omapfbsink->xwindow = NULL;
++ }
++
++ /* If the xid is 0 we go back to an internal window */
++ if (xwindow_id == 0) {
++ /* If no width/height caps nego did not happen window will be created
++ during caps nego then */
++ if (GST_VIDEO_SINK_WIDTH (omapfbsink) && GST_VIDEO_SINK_HEIGHT (omapfbsink)) {
++ xwindow = gst_omapfbsink_xwindow_new (omapfbsink,
++ GST_VIDEO_SINK_WIDTH (omapfbsink),
++ GST_VIDEO_SINK_HEIGHT (omapfbsink));
++ }
++ } else {
++ xwindow = g_new0 (GstXWindow, 1);
++ xwindow->wx = xwindow->wy = -1;
++ xwindow->win = xwindow_id;
++
++ /* We get window geometry, set the event we want to receive,
++ and create a GC */
++ g_mutex_lock (omapfbsink->x_lock);
++ XGetWindowAttributes (omapfbsink->xcontext->disp, xwindow->win, &attr);
++ xwindow->width = attr.width;
++ xwindow->height = attr.height;
++ xwindow->internal = FALSE;
++ if (omapfbsink->handle_events) {
++ XSelectInput (omapfbsink->xcontext->disp, xwindow->win, ExposureMask |
++ StructureNotifyMask | PointerMotionMask | KeyPressMask |
++ KeyReleaseMask);
++ }
++
++ xwindow->gc = XCreateGC (omapfbsink->xcontext->disp, xwindow->win, 0, NULL);
++ g_mutex_unlock (omapfbsink->x_lock);
++ }
++
++ if (xwindow) {
++ omapfbsink->xwindow = xwindow;
++
++ g_mutex_lock (omapfbsink->x_lock);
++ gst_omapfbsink_update_plane(omapfbsink);
++ g_mutex_unlock (omapfbsink->x_lock);
++ }
++}
++
++static void
++gst_omapfbsink_xwindow_clear (GstOmapFbSink * omapfbsink,
++ GstXWindow * xwindow)
++{
++ g_return_if_fail (xwindow != NULL);
++ g_mutex_lock (omapfbsink->x_lock);
++
++ XSetForeground (omapfbsink->xcontext->disp, xwindow->gc,
++ XBlackPixel (omapfbsink->xcontext->disp,
++ omapfbsink->xcontext->screen_num));
++
++ XFillRectangle (omapfbsink->xcontext->disp, xwindow->win, xwindow->gc,
++ 0, 0, xwindow->width, xwindow->height);
++
++ XSync (omapfbsink->xcontext->disp, FALSE);
++ g_mutex_unlock (omapfbsink->x_lock);
++}
++
++static void
++gst_omapfbsink_set_event_handling (GstXOverlay * overlay,
++ gboolean handle_events)
++{
++ GstOmapFbSink *omapfbsink = GST_OMAPFB_SINK (overlay);
++ omapfbsink->handle_events = handle_events;
++
++ g_mutex_lock (omapfbsink->flow_lock);
++
++ if (G_UNLIKELY (!omapfbsink->xwindow)) {
++ g_mutex_unlock (omapfbsink->flow_lock);
++ return;
++ }
++
++ g_mutex_lock (omapfbsink->x_lock);
++
++ if (handle_events) {
++ if (omapfbsink->xwindow->internal) {
++ XSelectInput (omapfbsink->xcontext->disp, omapfbsink->xwindow->win,
++ ExposureMask | StructureNotifyMask | PointerMotionMask |
++ KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask);
++ } else {
++ XSelectInput (omapfbsink->xcontext->disp, omapfbsink->xwindow->win,
++ ExposureMask | StructureNotifyMask | PointerMotionMask |
++ KeyPressMask | KeyReleaseMask);
++ }
++ } else {
++ XSelectInput (omapfbsink->xcontext->disp, omapfbsink->xwindow->win, 0);
++ }
++
++ g_mutex_unlock (omapfbsink->x_lock);
++ g_mutex_unlock (omapfbsink->flow_lock);
++}
++
++static void
++gst_omapfbsink_xoverlay_init (GstXOverlayClass * iface)
++{
++ iface->set_xwindow_id = gst_omapfbsink_set_xwindow_id;
++ iface->expose = gst_omapfbsink_expose;
++ iface->handle_events = gst_omapfbsink_set_event_handling;
++}
++
++static GstCaps *
++generate_sink_template (void)
++{
++ GstCaps *caps;
++ GstStructure *struc;
++
++ caps = gst_caps_new_empty ();
++
++ struc = gst_structure_new ("video/x-raw-yuv",
++ "width", GST_TYPE_INT_RANGE, 16, 4096,
++ "height", GST_TYPE_INT_RANGE, 16, 4096,
++ "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, 30, 1,
++ NULL);
++
++ {
++ GValue list;
++ GValue val;
++
++ list.g_type = val.g_type = 0;
++
++ g_value_init (&list, GST_TYPE_LIST);
++ g_value_init (&val, GST_TYPE_FOURCC);
++
++#if 0
++ gst_value_set_fourcc (&val, GST_MAKE_FOURCC ('Y', 'U', 'Y', '2'));
++ gst_value_list_append_value (&list, &val);
++#else
++ gst_value_set_fourcc (&val, GST_MAKE_FOURCC ('I', '4', '2', '0'));
++ gst_value_list_append_value (&list, &val);
++
++ gst_value_set_fourcc (&val, GST_MAKE_FOURCC ('U', 'Y', 'V', 'Y'));
++ gst_value_list_append_value (&list, &val);
++#endif
++
++ gst_structure_set_value (struc, "format", &list);
++
++ g_value_unset (&val);
++ g_value_unset (&list);
++ }
++
++ gst_caps_append_structure (caps, struc);
++
++ return caps;
++}
++
++static GstFlowReturn
++buffer_alloc (GstBaseSink *bsink,
++ guint64 offset,
++ guint size,
++ GstCaps *caps,
++ GstBuffer **buf)
++{
++ GstOmapFbSink *self;
++ GstBuffer *buffer = NULL;
++ GstFlowReturn ret = GST_FLOW_OK;
++ self = GST_OMAPFB_SINK (bsink);
++
++ if(self->row_skip) {
++ buffer = gst_buffer_new ();
++ GST_BUFFER_DATA (buffer) = self->buffer = self->framebuffer;
++ GST_BUFFER_SIZE (buffer) = self->buffer_size = size;
++ gst_buffer_set_caps (buffer, caps);
++ } else {
++ if(self->buffer && size == self->buffer_size) {
++ buffer = gst_buffer_new ();
++ GST_BUFFER_DATA (buffer) = self->buffer;
++ GST_BUFFER_SIZE (buffer) = size;
++ gst_buffer_set_caps (buffer, caps);
++ } else {
++ if(self->buffer)
++ free(self->buffer);
++ if(posix_memalign(&self->buffer, 16, (size_t) size) == 0) {
++ buffer = gst_buffer_new ();
++ GST_BUFFER_DATA (buffer) = self->buffer;
++ GST_BUFFER_SIZE (buffer) = self->buffer_size = size;
++ gst_buffer_set_caps (buffer, caps);
++ } else {
++ GST_ELEMENT_ERROR (self, RESOURCE, WRITE, ("Could not allocate aligned buf!"),
++ ("Could not alloc aligned buf!"));
++ }
++ }
++ }
++
++ *buf = buffer;
++ return ret;
++}
++
++static void
++x_memcpy (GstOmapFbSink *omapfbsink, __uint8_t *outBuf, __uint8_t *inBuf)
++{
++ BufferGfx_Attrs gfxAttrs = BufferGfx_Attrs_DEFAULT;
++ Buffer_Handle hInBuf = NULL, hOutBuf = NULL;
++ Framecopy_Attrs fcAttrs = Framecopy_Attrs_DEFAULT;
++ int size;
++
++ if (omapfbsink->hFc == NULL) {
++ fcAttrs.accel = TRUE;
++ omapfbsink->hFc = Framecopy_create(&fcAttrs);
++ if (omapfbsink->hFc == NULL) {
++ GST_ELEMENT_ERROR(omapfbsink, RESOURCE, WRITE, ("failed to create dmai framecopy handle"), ("failed to create dmai framecopy handle"));
++ goto cleanup;
++ }
++ }
++
++ gfxAttrs.bAttrs.reference = TRUE;
++ gfxAttrs.dim.width = GST_VIDEO_SINK_WIDTH (omapfbsink);
++ gfxAttrs.dim.height = GST_VIDEO_SINK_HEIGHT (omapfbsink);
++ gfxAttrs.colorSpace = ColorSpace_UYVY;
++ gfxAttrs.dim.lineLength = omapfbsink->fixinfo.line_length;
++ size = gfxAttrs.dim.height * gfxAttrs.dim.width * 2;
++
++ hInBuf = Buffer_create(size, BufferGfx_getBufferAttrs(&gfxAttrs));
++ if (hInBuf == NULL) {
++ GST_ELEMENT_ERROR(omapfbsink, RESOURCE, WRITE, ("Could not allocate refer dmai buffer"), ("Could not allocate refer dmai buffer"));
++ goto cleanup;
++ }
++ Buffer_setUserPtr(hInBuf, (Int8*) inBuf);
++ Buffer_setNumBytesUsed(hInBuf,Buffer_getSize(hInBuf));
++
++ hOutBuf = Buffer_create(size, BufferGfx_getBufferAttrs(&gfxAttrs));
++ if (hOutBuf == NULL) {
++ GST_ELEMENT_ERROR(omapfbsink, RESOURCE, WRITE, ("Could not allocate refer dmai buffer"), ("Could not allocate refer dmai buffer"));
++ goto cleanup;
++ }
++ Buffer_setUserPtr(hOutBuf, (Int8*) outBuf);
++ Buffer_setNumBytesUsed(hOutBuf,Buffer_getSize(hOutBuf));
++
++
++ if (Framecopy_config(omapfbsink->hFc, hInBuf, hOutBuf) < 0) {
++ GST_ELEMENT_ERROR(omapfbsink, RESOURCE, WRITE, ("failed to configure dmai framecopy handle"), ("failed to configure dmai framecopy handle"));
++ goto cleanup;
++ }
++
++ if (Framecopy_execute(omapfbsink->hFc, hInBuf, hOutBuf) < 0) {
++ GST_ELEMENT_ERROR(omapfbsink, RESOURCE, WRITE, ("failed to execute dmai framecopy handle"), ("failed to configure dmai framecopy handle"));
++ goto cleanup;
++ }
++ cleanup:
++
++ if (hInBuf)
++ Buffer_delete(hInBuf);
++ if (hOutBuf)
++ Buffer_delete(hOutBuf);
++}
++
++static GstFlowReturn
++render (GstBaseSink * bsink, GstBuffer * buf)
++{
++ int i, w, h;
++ GstOmapFbSink *omapfbsink = GST_OMAPFB_SINK(bsink);
++ __uint8_t *fb = omapfbsink->framebuffer, *data = GST_BUFFER_DATA(buf);
++ gboolean useXcopy = FALSE;
++
++ if (GST_IS_TIDMAIBUFFERTRANSPORT(buf)) {
++ GST_LOG("found dmai transport buffer, enabling hw framecopy.\n");
++ useXcopy = TRUE;
++ }
++
++ if(omapfbsink->plane_info.enabled == 2)
++ {
++ omapfbsink->plane_info.enabled = 1;
++
++ g_mutex_lock (omapfbsink->x_lock);
++ gst_omapfbsink_update_plane(omapfbsink);
++ g_mutex_unlock (omapfbsink->x_lock);
++ }
++
++ /* If a buffer which wasn't supplied by us is given to us to render with,
++ we need to copy to our buffer first so that memory alignment constraints
++ are met. */
++ if((data != omapfbsink->buffer && GST_BUFFER_SIZE(buf) <= omapfbsink->buffer_size) && !useXcopy)
++ {
++ memcpy(omapfbsink->buffer, data, GST_BUFFER_SIZE(buf));
++ data = omapfbsink->buffer;
++ }
++
++ /* buffer_alloc gave a direct buffer, so we have nothing to
++ do here... */
++ if(omapfbsink->row_skip)
++ return GST_FLOW_OK;
++
++ switch(omapfbsink->image_format) {
++ case GST_MAKE_FOURCC('I', '4', '2', '0'):
++ /* Convert to YUV422 and send to FB */
++
++ h = GST_VIDEO_SINK_HEIGHT (omapfbsink);
++ w = GST_VIDEO_SINK_WIDTH (omapfbsink);
++
++ __uint8_t *y, *u, *v;
++ y = data;
++ u = y + w * h;
++ v = u + w / 2 * h / 2;
++ yuv420_to_yuv422(fb, y, u, v, w & ~15, h, w, w / 2, omapfbsink->fixinfo.line_length);
++ break;
++
++ case GST_MAKE_FOURCC('U', 'Y', 'V', 'Y'):
++ /* Send to FB, taking into account line_length */
++ if (useXcopy) {
++ x_memcpy(omapfbsink, fb, data);
++ }
++ else {
++
++ w = 2 * GST_VIDEO_SINK_WIDTH (omapfbsink);
++ for(i = 0; i < GST_VIDEO_SINK_HEIGHT (omapfbsink); i++)
++ {
++ memcpy(fb, data, w);
++
++ fb += omapfbsink->fixinfo.line_length;
++ data += w;
++ }
++ }
++ break;
++ }
++
++ return GST_FLOW_OK;
++}
++
++static gboolean
++setcaps (GstBaseSink *bsink,
++ GstCaps *vscapslist)
++{
++ GstOmapFbSink *self;
++ GstStructure *structure;
++
++ gint width, height;
++ struct omapfb_color_key color_key;
++
++ self = GST_OMAPFB_SINK (bsink);
++
++ structure = gst_caps_get_structure (vscapslist, 0);
++
++ gst_structure_get_int (structure, "width", &width);
++ gst_structure_get_int (structure, "height", &height);
++
++ self->overlay_info.xres = MIN (self->varinfo.xres, width) & ~15;
++ self->overlay_info.yres = MIN (self->varinfo.yres, height) & ~15;
++ self->overlay_info.xres_virtual = self->overlay_info.xres;
++ self->overlay_info.yres_virtual = self->overlay_info.yres;
++
++ self->overlay_info.xoffset = 0;
++ self->overlay_info.yoffset = 0;
++
++ gst_structure_get_fourcc (structure, "format", &self->image_format);
++ switch(self->image_format) {
++ case GST_MAKE_FOURCC('I', '4', '2', '0'):
++ self->row_skip = FALSE; /* Colorspace conversion required */
++ self->overlay_info.nonstd = OMAPFB_COLOR_YUY422;
++ break;
++ case GST_MAKE_FOURCC('U', 'Y', 'V', 'Y'):
++ /* Can data be pushed straight to the FB or do we need to interleave? */
++ if (self->fixinfo.line_length != 2 * width)
++ self->row_skip = FALSE;
++ else
++ self->row_skip = TRUE;
++ self->overlay_info.nonstd = OMAPFB_COLOR_YUV422;
++ break;
++ }
++
++ if (ioctl (self->overlay_fd, FBIOPUT_VSCREENINFO, &self->overlay_info))
++ return FALSE;
++
++ GST_VIDEO_SINK_WIDTH (self) = width;
++ GST_VIDEO_SINK_HEIGHT (self) = height;
++ if (!self->xwindow) {
++ self->xwindow = gst_omapfbsink_xwindow_new (self,
++ GST_VIDEO_SINK_WIDTH (self), GST_VIDEO_SINK_HEIGHT (self));
++ }
++
++ color_key.channel_out = OMAPFB_CHANNEL_OUT_LCD;
++ color_key.background = 0x0;
++ color_key.trans_key = self->colorKey;
++ if (self->xwindow)
++ color_key.key_type = OMAPFB_COLOR_KEY_GFX_DST;
++ else
++ color_key.key_type = OMAPFB_COLOR_KEY_DISABLED;
++
++ if (ioctl (self->overlay_fd, OMAPFB_SET_COLOR_KEY, &color_key))
++ return FALSE;
++
++ self->plane_info.pos_x = 0;
++ self->plane_info.pos_y = 0;
++ self->plane_info.out_width = self->overlay_info.xres;
++ self->plane_info.out_height = self->overlay_info.yres;
++ self->plane_info.enabled = 2;
++
++ if (ioctl (self->overlay_fd, FBIOGET_FSCREENINFO, &self->fixinfo))
++ return FALSE;
++
++ self->enabled = TRUE;
++ return TRUE;
++}
++
++static gboolean
++start (GstBaseSink *bsink)
++{
++ GstOmapFbSink *self;
++ int fd;
++
++ self = GST_OMAPFB_SINK (bsink);
++
++ fd = open ("/dev/fb0", O_RDWR);
++
++ if (fd == -1)
++ return FALSE;
++
++ if (ioctl (fd, FBIOGET_VSCREENINFO, &self->varinfo))
++ {
++ close (fd);
++ return FALSE;
++ }
++
++ if (close (fd))
++ return FALSE;
++
++ self->overlay_fd = open ("/dev/fb1", O_RDWR);
++
++ if (self->overlay_fd == -1)
++ return FALSE;
++
++ if (ioctl (self->overlay_fd, FBIOGET_VSCREENINFO, &self->overlay_info))
++ return FALSE;
++
++ if (ioctl (self->overlay_fd, OMAPFB_QUERY_PLANE, &self->plane_info))
++ return FALSE;
++
++ if (ioctl (self->overlay_fd, OMAPFB_QUERY_MEM, &self->mem_info))
++ return FALSE;
++
++ self->framebuffer = mmap (NULL, self->mem_info.size, PROT_WRITE, MAP_SHARED, self->overlay_fd, 0);
++ if (self->framebuffer == MAP_FAILED)
++ return FALSE;
++
++ return TRUE;
++}
++
++static gboolean
++stop (GstBaseSink *bsink)
++{
++ GstOmapFbSink *self;
++
++ self = GST_OMAPFB_SINK (bsink);
++
++ if (self->enabled)
++ {
++ self->plane_info.enabled = 0;
++
++ if (ioctl (self->overlay_fd, OMAPFB_SETUP_PLANE, &self->plane_info))
++ return FALSE;
++ }
++
++ if (munmap (self->framebuffer, self->mem_info.size))
++ return FALSE;
++
++ if (close (self->overlay_fd))
++ return FALSE;
++
++ if (self->hFc)
++ Framecopy_delete(self->hFc);
++
++ return TRUE;
++}
++
++/* This function cleans the X context. Closing the Display and unrefing the
++ caps for supported formats. */
++static void
++gst_omapfbsink_xcontext_clear (GstOmapFbSink * omapfbsink)
++{
++ GstXContext *xcontext;
++ GST_OBJECT_LOCK (omapfbsink);
++ if (omapfbsink->xcontext == NULL) {
++ GST_OBJECT_UNLOCK (omapfbsink);
++ return;
++ }
++
++ xcontext = omapfbsink->xcontext;
++ omapfbsink->xcontext = NULL;
++
++ GST_OBJECT_UNLOCK (omapfbsink);
++ g_mutex_lock (omapfbsink->x_lock);
++
++ XCloseDisplay (xcontext->disp);
++ g_mutex_unlock (omapfbsink->x_lock);
++ g_free (xcontext);
++}
++
++static void
++gst_omapfbsink_reset (GstOmapFbSink *omapfbsink)
++{
++ GThread *thread;
++
++ GST_OBJECT_LOCK (omapfbsink);
++ omapfbsink->running = FALSE;
++ /* grab thread and mark it as NULL */
++ thread = omapfbsink->event_thread;
++ omapfbsink->event_thread = NULL;
++ GST_OBJECT_UNLOCK (omapfbsink);
++
++ /* Wait for our event thread to finish before we clean up our stuff. */
++ if (thread)
++ g_thread_join (thread);
++
++ g_mutex_lock (omapfbsink->flow_lock);
++ if (omapfbsink->xwindow) {
++ gst_omapfbsink_xwindow_clear (omapfbsink, omapfbsink->xwindow);
++ gst_omapfbsink_xwindow_destroy (omapfbsink, omapfbsink->xwindow);
++ omapfbsink->xwindow = NULL;
++ }
++ g_mutex_unlock (omapfbsink->flow_lock);
++ gst_omapfbsink_xcontext_clear (omapfbsink);
++}
++
++static GstStateChangeReturn
++gst_omapfbsink_change_state (GstElement * element, GstStateChange transition)
++{
++ GstOmapFbSink *omapfbsink;
++ GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
++ GstXContext *xcontext = NULL;
++
++ omapfbsink = GST_OMAPFB_SINK (element);
++
++ switch (transition) {
++ case GST_STATE_CHANGE_NULL_TO_READY:
++
++ /* Initializing the XContext */
++ if (omapfbsink->xcontext == NULL) {
++ xcontext = gst_omapfbsink_xcontext_get (omapfbsink);
++
++ GST_OBJECT_LOCK (omapfbsink);
++ omapfbsink->xcontext = xcontext;
++ GST_OBJECT_UNLOCK (omapfbsink);
++ }
++ break;
++ case GST_STATE_CHANGE_READY_TO_PAUSED:
++ g_mutex_lock (omapfbsink->flow_lock);
++ if (omapfbsink->xwindow)
++ gst_omapfbsink_xwindow_clear (omapfbsink, omapfbsink->xwindow);
++ g_mutex_unlock (omapfbsink->flow_lock);
++ break;
++ case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
++ break;
++ default:
++ break;
++ }
++
++ ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
++
++ switch (transition) {
++ case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
++ break;
++ case GST_STATE_CHANGE_PAUSED_TO_READY:
++ GST_VIDEO_SINK_WIDTH (omapfbsink) = 0;
++ GST_VIDEO_SINK_HEIGHT (omapfbsink) = 0;
++ break;
++ case GST_STATE_CHANGE_READY_TO_NULL:
++ gst_omapfbsink_reset (omapfbsink);
++ break;
++ default:
++ break;
++ }
++
++ return ret;
++}
++
++static void
++type_class_init (gpointer g_class,
++ gpointer class_data)
++{
++ GstElementClass *element_class;
++ GstBaseSinkClass *base_sink_class;
++
++ element_class = (GstElementClass *) g_class;
++ base_sink_class = (GstBaseSinkClass *) g_class;
++
++ parent_class = g_type_class_peek_parent (g_class);
++
++ base_sink_class->set_caps = GST_DEBUG_FUNCPTR (setcaps);
++ base_sink_class->buffer_alloc = GST_DEBUG_FUNCPTR (buffer_alloc);
++ base_sink_class->render = GST_DEBUG_FUNCPTR (render);
++ base_sink_class->start = GST_DEBUG_FUNCPTR (start);
++ base_sink_class->stop = GST_DEBUG_FUNCPTR (stop);
++
++ element_class->change_state = gst_omapfbsink_change_state;
++}
++
++static void
++type_base_init (gpointer g_class)
++{
++ GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
++
++ {
++ GstElementDetails details;
++
++ details.longname = "Linux OMAP framebuffer sink";
++ details.klass = "Sink/Video";
++ details.description = "Renders video with omapfb";
++ details.author = "Felipe Contreras";
++
++ gst_element_class_set_details (element_class, &details);
++ }
++
++ {
++ GstPadTemplate *template;
++
++ template = gst_pad_template_new ("sink", GST_PAD_SINK,
++ GST_PAD_ALWAYS,
++ generate_sink_template ());
++
++ gst_element_class_add_pad_template (element_class, template);
++ }
++}
++
++static gboolean
++gst_omapfbsink_interface_supported (GstImplementsInterface * iface, GType type)
++{
++ g_assert (type == GST_TYPE_X_OVERLAY);
++ return TRUE;
++}
++
++static void
++gst_omapfbsink_interface_init (GstImplementsInterfaceClass * klass)
++{
++ klass->supported = gst_omapfbsink_interface_supported;
++}
++
++static void
++gst_omapfbsink_init (GstOmapFbSink * omapfbsink)
++{
++ omapfbsink->display_name = NULL;
++ omapfbsink->xcontext = NULL;
++ omapfbsink->xwindow = NULL;
++
++ omapfbsink->event_thread = NULL;
++ omapfbsink->running = FALSE;
++
++ omapfbsink->x_lock = g_mutex_new ();
++ omapfbsink->flow_lock = g_mutex_new ();
++
++ omapfbsink->handle_events = TRUE;
++ omapfbsink->colorKey = 0xff0;
++
++ omapfbsink->plane_info.enabled = 0;
++ omapfbsink->row_skip = FALSE;
++
++ omapfbsink->buffer = NULL;
++ omapfbsink->buffer_size = 0;
++ omapfbsink->hFc = NULL;
++}
++
++GType
++gst_omapfbsink_get_type (void)
++{
++ static GType type = 0;
++
++ if (G_UNLIKELY (type == 0))
++ {
++ GTypeInfo *type_info;
++ static const GInterfaceInfo iface_info = {
++ (GInterfaceInitFunc) gst_omapfbsink_interface_init,
++ NULL,
++ NULL,
++ };
++ static const GInterfaceInfo overlay_info = {
++ (GInterfaceInitFunc) gst_omapfbsink_xoverlay_init,
++ NULL,
++ NULL,
++ };
++ type_info = g_new0 (GTypeInfo, 1);
++ type_info->class_size = sizeof (GstOmapFbSinkClass);
++ type_info->base_init = type_base_init;
++ type_info->class_init = type_class_init;
++ type_info->instance_size = sizeof (GstOmapFbSink);
++ type_info->instance_init = (GInstanceInitFunc) gst_omapfbsink_init;
++
++ type = g_type_register_static (GST_TYPE_BASE_SINK, "GstOmapFbSink", type_info, 0);
++ g_type_add_interface_static (type, GST_TYPE_IMPLEMENTS_INTERFACE, &iface_info);
++ g_type_add_interface_static (type, GST_TYPE_X_OVERLAY, &overlay_info);
++
++ g_free (type_info);
++ }
++
++ return type;
++}
+diff -uNr ticodecplugin/src/omapfb.h ticodecplugin.new/src/omapfb.h
+--- ticodecplugin/src/omapfb.h 1969-12-31 18:00:00.000000000 -0600
++++ ticodecplugin.new/src/omapfb.h 2010-09-03 13:54:11.929409696 -0500
+@@ -0,0 +1,142 @@
++/*
++ * Copyright (C) 2008 Felipe Contreras <felipe.contreras@gmail.com>
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation
++ * version 2.1 of the License.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
++ */
++
++#ifndef GST_OMAPFB_H
++#define GST_OMAPFB_H
++
++#include <ti/sdo/dmai/BufferGfx.h>
++#include <ti/sdo/dmai/Framecopy.h>
++
++#include "gsttidmaibuffertransport.h"
++#include <gst/gst.h>
++#include <gst/video/gstvideosink.h>
++#include <gst/video/video.h>
++
++#include <X11/Xlib.h>
++#include <X11/Xutil.h>
++
++#include <linux/fb.h>
++#include <linux/omapfb.h>
++
++
++G_BEGIN_DECLS
++
++#define GST_OMAPFB_SINK_TYPE (gst_omapfbsink_get_type ())
++#define GST_OMAPFB_SINK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_OMAPFB_SINK_TYPE, GstOmapFbSink))
++
++typedef struct GstXContext GstXContext;
++typedef struct GstXWindow GstXWindow;
++typedef struct GstOmapFbSink GstOmapFbSink;
++typedef struct GstOmapFbSinkClass GstOmapFbSinkClass;
++
++/**
++ * GstXWindow:
++ * @win: the Window ID of this X11 window
++ * @width: the width in pixels of Window @win
++ * @height: the height in pixels of Window @win
++ * @internal: used to remember if Window @win was created internally or passed
++ * through the #GstXOverlay interface
++ * @gc: the Graphical Context of Window @win
++ *
++ * Structure used to store informations about a Window.
++ */
++struct GstXWindow {
++ Window win;
++ gint width, height;
++ gboolean internal;
++ GC gc;
++
++ gint wx, wy;
++};
++
++/**
++ * GstXContext:
++ * @disp: the X11 Display of this context
++ * @screen: the default Screen of Display @disp
++ * @screen_num: the Screen number of @screen
++ * @visual: the default Visual of Screen @screen
++ * @root: the root Window of Display @disp
++ * @white: the value of a white pixel on Screen @screen
++ * @black: the value of a black pixel on Screen @screen
++ * @depth: the color depth of Display @disp
++ * @bpp: the number of bits per pixel on Display @disp
++ * @endianness: the endianness of image bytes on Display @disp
++ * @width: the width in pixels of Display @disp
++ * @height: the height in pixels of Display @disp
++ *
++ * Structure used to store various informations collected/calculated for a
++ * Display.
++ */
++struct GstXContext {
++ Display *disp;
++ Screen *screen;
++ gint screen_num;
++
++ Visual *visual;
++ Window root;
++
++ gint depth;
++ gint bpp;
++
++ gint width, height;
++};
++
++struct GstOmapFbSink
++{
++ GstVideoSink videosink;
++
++ struct fb_fix_screeninfo fixinfo;
++ struct fb_var_screeninfo varinfo;
++ struct fb_var_screeninfo overlay_info;
++ struct omapfb_mem_info mem_info;
++ struct omapfb_plane_info plane_info;
++
++ int overlay_fd;
++ unsigned char *framebuffer;
++ gboolean enabled;
++
++ GMutex *x_lock;
++ GMutex *flow_lock;
++
++ GstXContext *xcontext;
++ GstXWindow *xwindow;
++
++ gulong colorKey;
++ char *display_name;
++ GThread *event_thread;
++
++ void *buffer;
++ guint buffer_size;
++ guint image_format;
++
++ gboolean row_skip;
++ gboolean handle_events;
++ gboolean running;
++ Framecopy_Handle hFc;
++};
++
++struct GstOmapFbSinkClass
++{
++ GstBaseSinkClass parent_class;
++};
++
++GType gst_omapfbsink_get_type (void);
++
++G_END_DECLS
++
++#endif /* GST_OMAPFB_H */
+diff -uNr ticodecplugin/src/yuv.S ticodecplugin.new/src/yuv.S
+--- ticodecplugin/src/yuv.S 1969-12-31 18:00:00.000000000 -0600
++++ ticodecplugin.new/src/yuv.S 2010-09-03 13:54:11.929409696 -0500
+@@ -0,0 +1,117 @@
++/*
++ Copyright (C) 2008 Mans Rullgard
++
++ 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
++ furnished 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, FITNESS FOR A PARTICULAR PURPOSE AND
++ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
++ HOLDERS 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.
++*/
++
++ .fpu neon
++ .text
++
++@ yuv420_to_yuv422(uint8_t *yuv, uint8_t *y, uint8_t *u, uint8_t *v,
++@ int w, int h, int yw, int cw, int dw)
++
++#define yuv r0
++#define y r1
++#define u r2
++#define v r3
++#define w r4
++#define h r5
++#define yw r6
++#define cw r7
++#define dw r8
++
++#define tyuv r9
++#define ty r10
++#define tu r11
++#define tv r12
++#define i lr
++
++ .global yuv420_to_yuv422
++ .func yuv420_to_yuv422
++yuv420_to_yuv422:
++ push {r4-r11,lr}
++ add r4, sp, #36
++ ldm r4, {r4-r8}
++1:
++ mov tu, u
++ mov tv, v
++ vld1.64 {d2}, [u,:64], cw @ u0
++ vld1.64 {d3}, [v,:64], cw @ v0
++ mov tyuv, yuv
++ mov ty, y
++ vzip.8 d2, d3 @ u0v0
++ mov i, #16
++2:
++ pld [y, #64]
++ vld1.64 {d0, d1}, [y,:128], yw @ y0
++ pld [u, #64]
++ subs i, i, #4
++ vld1.64 {d6}, [u,:64], cw @ u2
++ pld [y, #64]
++ vld1.64 {d4, d5}, [y,:128], yw @ y1
++ pld [v, #64]
++ vld1.64 {d7}, [v,:64], cw @ v2
++ pld [y, #64]
++ vld1.64 {d16,d17}, [y,:128], yw @ y2
++ vzip.8 d6, d7 @ u2v2
++ pld [u, #64]
++ vld1.64 {d22}, [u,:64], cw @ u4
++ pld [v, #64]
++ vld1.64 {d23}, [v,:64], cw @ v4
++ pld [y, #64]
++ vld1.64 {d20,d21}, [y,:128], yw @ y3
++ vmov q9, q3 @ u2v2
++ vzip.8 d22, d23 @ u4v4
++ vrhadd.u8 q3, q1, q3 @ u1v1
++ vzip.8 q0, q1 @ y0u0y0v0
++ vmov q12, q11 @ u4v4
++ vzip.8 q2, q3 @ y1u1y1v1
++ vrhadd.u8 q11, q9, q11 @ u3v3
++ vst1.64 {d0-d3}, [yuv,:128], dw @ y0u0y0v0
++ vzip.8 q8, q9 @ y2u2y2v2
++ vst1.64 {d4-d7}, [yuv,:128], dw @ y1u1y1v1
++ vzip.8 q10, q11 @ y3u3y3v3
++ vst1.64 {d16-d19}, [yuv,:128], dw @ y2u2y2v2
++ vmov q1, q12
++ vst1.64 {d20-d23}, [yuv,:128], dw @ y3u3y3v3
++ bgt 2b
++ subs w, w, #16
++ add yuv, tyuv, #32
++ add y, ty, #16
++ add u, tu, #8
++ add v, tv, #8
++ bgt 1b
++
++ ldr w, [sp, #36]
++ subs h, h, #16
++ add yuv, yuv, dw, lsl #4
++ sub yuv, yuv, w, lsl #1
++ add y, y, yw, lsl #4
++ sub y, y, w
++ add u, u, cw, lsl #3
++ sub u, u, w, asr #1
++ add v, v, cw, lsl #3
++ sub v, v, w, asr #1
++ bgt 1b
++
++ pop {r4-r11,pc}
++ .endfunc
++
diff --git a/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0003-Support-setting-the-display-framerate-directly-when-.patch b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0003-Support-setting-the-display-framerate-directly-when-.patch
new file mode 100644
index 00000000..eb7181be
--- /dev/null
+++ b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0003-Support-setting-the-display-framerate-directly-when-.patch
@@ -0,0 +1,86 @@
+From fb4dabcac144fcf1a7e9b1eba0114b2eed594d05 Mon Sep 17 00:00:00 2001
+From: Don Darling <don.osc2@gmail.com>
+Date: Thu, 26 Aug 2010 11:12:39 -0500
+Subject: [PATCH 3/8] Support setting the display framerate directly when possible.
+
+If can_set_display_framerate is set to true, TIDmaiVideoSink will attempt to
+set the display framerate directly in DMAI, instead of trying to simulate the
+desired framerate by occasionally repeating frames.
+
+Platforms that support this will need to enable it explicitly.
+---
+ .../ticodecplugin/src/gsttidmaivideosink.c | 24 ++++++++++++++++++++
+ .../ticodecplugin/src/gsttidmaivideosink.h | 1 +
+ 2 files changed, 25 insertions(+), 0 deletions(-)
+
+diff --git a/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.c b/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.c
+index c87b89c..4e327ae 100644
+--- a/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.c
++++ b/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.c
+@@ -442,6 +442,7 @@ static void gst_tidmaivideosink_init(GstTIDmaiVideoSink * dmaisink,
+ dmaisink->numBufs = -1;
+ dmaisink->framerepeat = 0;
+ dmaisink->repeat_with_refresh = FALSE;
++ dmaisink->can_set_display_framerate = FALSE;
+ dmaisink->rotation = -1;
+ dmaisink->tempDmaiBuf = NULL;
+ dmaisink->accelFrameCopy = TRUE;
+@@ -952,6 +953,9 @@ static void gst_tidmaivideosink_check_set_framerate(GstTIDmaiVideoSink * sink)
+ * then 1 is returned to indicate that there will be no frame
+ * repeating.
+ *
++ * If the driver supports explicit configuration of the framerate, we
++ * don't ever need to repeat frames, and 1 is returned.
++ *
+ ******************************************************************************/
+ static int gst_tidmaivideosink_get_framerepeat(GstTIDmaiVideoSink * sink)
+ {
+@@ -959,6 +963,13 @@ static int gst_tidmaivideosink_get_framerepeat(GstTIDmaiVideoSink * sink)
+
+ GST_DEBUG("Begin\n");
+
++ /* If the display allows you to configure the frame rate, we never need
++ * to repeat a frame.
++ */
++ if (sink->can_set_display_framerate) {
++ return 1;
++ }
++
+ /* Divide the native framerate by the desired framerate. If the result
+ * is a whole number, return it. Otherwise return 1 -- we don't support
+ * fractional repeat rates. */
+@@ -1151,6 +1162,19 @@ static gboolean gst_tidmaivideosink_set_display_attrs(GstTIDmaiVideoSink *sink,
+ sink->dAttrs.displayDevice = sink->displayDevice == NULL ?
+ sink->dAttrs.displayDevice : sink->displayDevice;
+
++ /* Specify framerate if supported by DMAI and the display driver */
++ if (sink->can_set_display_framerate) {
++ #if defined (Platform_dm365)
++ sink->dAttrs.forceFrameRateNum =
++ gst_value_get_fraction_numerator(&sink->iattrs.framerate);
++ sink->dAttrs.forceFrameRateDen =
++ gst_value_get_fraction_denominator(&sink->iattrs.framerate);
++ #else
++ GST_ERROR("setting driver framerate is not supported\n");
++ return FALSE;
++ #endif
++ }
++
+ /* Set rotation on OMAP35xx */
+ if (sink->cpu_dev == Cpu_Device_OMAP3530) {
+ sink->dAttrs.rotation = sink->rotation == -1 ?
+diff --git a/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.h b/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.h
+index 5d13e08..4800fcd 100644
+--- a/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.h
++++ b/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.h
+@@ -124,6 +124,7 @@ struct _GstTIDmaiVideoSink {
+ */
+ int framerepeat;
+ gboolean repeat_with_refresh;
++ gboolean can_set_display_framerate;
+ gboolean signal_handoffs;
+
+ /* Hardware accelerated copy */
+--
+1.7.0.4
+
diff --git a/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0004-Cosmetic-cleanup-clarify-some-comments.patch b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0004-Cosmetic-cleanup-clarify-some-comments.patch
new file mode 100644
index 00000000..229c4521
--- /dev/null
+++ b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0004-Cosmetic-cleanup-clarify-some-comments.patch
@@ -0,0 +1,73 @@
+From 03ab3ad3f790dde2dbddfeb62001e8610dbb919a Mon Sep 17 00:00:00 2001
+From: Don Darling <don.osc2@gmail.com>
+Date: Thu, 26 Aug 2010 18:25:56 -0500
+Subject: [PATCH 4/8] Cosmetic cleanup / clarify some comments.
+
+---
+ .../ticodecplugin/src/gsttidmaivideosink.c | 42 ++++++++-----------
+ 1 files changed, 18 insertions(+), 24 deletions(-)
+
+diff --git a/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.c b/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.c
+index 4e327ae..1d04e1c 100644
+--- a/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.c
++++ b/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.c
+@@ -434,23 +434,23 @@ static void gst_tidmaivideosink_init(GstTIDmaiVideoSink * dmaisink,
+ * Anything that has a NULL value will be initialized with DMAI defaults
+ * in the gst_tidmaivideosink_init_display function.
+ */
+- dmaisink->displayStd = NULL;
+- dmaisink->displayDevice = NULL;
+- dmaisink->dGfxAttrs = defaultGfxAttrs;
+- dmaisink->videoStd = NULL;
+- dmaisink->videoOutput = NULL;
+- dmaisink->numBufs = -1;
+- dmaisink->framerepeat = 0;
+- dmaisink->repeat_with_refresh = FALSE;
++ dmaisink->displayStd = NULL;
++ dmaisink->displayDevice = NULL;
++ dmaisink->dGfxAttrs = defaultGfxAttrs;
++ dmaisink->videoStd = NULL;
++ dmaisink->videoOutput = NULL;
++ dmaisink->numBufs = -1;
++ dmaisink->framerepeat = 0;
++ dmaisink->repeat_with_refresh = FALSE;
+ dmaisink->can_set_display_framerate = FALSE;
+- dmaisink->rotation = -1;
+- dmaisink->tempDmaiBuf = NULL;
+- dmaisink->accelFrameCopy = TRUE;
+- dmaisink->autoselect = FALSE;
+- dmaisink->prevVideoStd = 0;
+- dmaisink->useUserptrBufs = FALSE;
+- dmaisink->hideOSD = FALSE;
+- dmaisink->hDispBufTab = NULL;
++ dmaisink->rotation = -1;
++ dmaisink->tempDmaiBuf = NULL;
++ dmaisink->accelFrameCopy = TRUE;
++ dmaisink->autoselect = FALSE;
++ dmaisink->prevVideoStd = 0;
++ dmaisink->useUserptrBufs = FALSE;
++ dmaisink->hideOSD = FALSE;
++ dmaisink->hDispBufTab = NULL;
+
+ dmaisink->signal_handoffs = DEFAULT_SIGNAL_HANDOFFS;
+
+@@ -947,14 +947,8 @@ static void gst_tidmaivideosink_check_set_framerate(GstTIDmaiVideoSink * sink)
+ /******************************************************************************
+ * gst_tidmaivideosink_get_framerepeat
+ *
+- * This function will look at the output display frame rate and the
+- * input frame rate and determine how many times a frame should be
+- * repeated. If the output is not an integer multiple of the input
+- * then 1 is returned to indicate that there will be no frame
+- * repeating.
+- *
+- * If the driver supports explicit configuration of the framerate, we
+- * don't ever need to repeat frames, and 1 is returned.
++ * Return how many times a frame should be repeated to support a
++ * framerate lower than the display's native speed.
+ *
+ ******************************************************************************/
+ static int gst_tidmaivideosink_get_framerepeat(GstTIDmaiVideoSink * sink)
+--
+1.7.0.4
+
diff --git a/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0005-Enable-setting-the-framerate-directly-on-DM365.patch b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0005-Enable-setting-the-framerate-directly-on-DM365.patch
new file mode 100644
index 00000000..e4059577
--- /dev/null
+++ b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0005-Enable-setting-the-framerate-directly-on-DM365.patch
@@ -0,0 +1,33 @@
+From 1cffa12c9ceb07558d2e4b35cc674070c7a3b8ee Mon Sep 17 00:00:00 2001
+From: Don Darling <don.osc2@gmail.com>
+Date: Thu, 26 Aug 2010 18:27:50 -0500
+Subject: [PATCH 5/8] Enable setting the framerate directly on DM365.
+
+This is supported by recent changes to the display driver. DM365 will no
+longer use the "repeat_with_refresh" method to display frames more than once.
+---
+ .../ticodecplugin/src/gsttidmaivideosink.c | 7 ++-----
+ 1 files changed, 2 insertions(+), 5 deletions(-)
+
+diff --git a/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.c b/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.c
+index 1d04e1c..3615bfd 100644
+--- a/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.c
++++ b/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.c
+@@ -475,12 +475,9 @@ static void gst_tidmaivideosink_init(GstTIDmaiVideoSink * dmaisink,
+ g_assert(GST_VALUE_HOLDS_FRACTION(&dmaisink->oattrs.framerate));
+ gst_value_set_fraction(&dmaisink->oattrs.framerate, 0, 1);
+
+- /* On DM365, we don't have the bandwidth to copy a frame multiple times to
+- * display them more than once. We must put a frame to the display once
+- * and let it be refreshed multiple times.
+- */
++ /* DM365 supports setting the display framerate */
+ #if defined(Platform_dm365)
+- dmaisink->repeat_with_refresh = TRUE;
++ dmaisink->can_set_display_framerate = TRUE;
+ #endif
+
+ gst_tidmaivideosink_init_env(dmaisink);
+--
+1.7.0.4
+
diff --git a/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0006-Remove-the-repeat_with_refresh-feature.patch b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0006-Remove-the-repeat_with_refresh-feature.patch
new file mode 100644
index 00000000..4055d0b5
--- /dev/null
+++ b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0006-Remove-the-repeat_with_refresh-feature.patch
@@ -0,0 +1,132 @@
+From c1205a792fd519cdebc32c00a5f604ccd78d3eac Mon Sep 17 00:00:00 2001
+From: Don Darling <don.osc2@gmail.com>
+Date: Thu, 26 Aug 2010 18:30:13 -0500
+Subject: [PATCH 6/8] Remove the "repeat_with_refresh" feature.
+
+No platforms are using it any longer.
+---
+ .../ticodecplugin/src/gsttidmaivideosink.c | 67 +-------------------
+ .../ticodecplugin/src/gsttidmaivideosink.h | 1 -
+ 2 files changed, 1 insertions(+), 67 deletions(-)
+
+diff --git a/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.c b/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.c
+index 3615bfd..0125ed2 100644
+--- a/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.c
++++ b/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.c
+@@ -170,8 +170,6 @@ static gboolean
+ gst_tidmaivideosink_event(GstBaseSink * bsink, GstEvent * event);
+ static void
+ gst_tidmaivideosink_init_env(GstTIDmaiVideoSink *sink);
+-static int
+- gst_tidmaivideosink_videostd_get_refresh_latency(VideoStd_Type videoStd);
+ static gboolean
+ gst_tidmaivideosink_alloc_display_buffers(GstTIDmaiVideoSink * sink,
+ Int32 bufSize);
+@@ -441,7 +439,6 @@ static void gst_tidmaivideosink_init(GstTIDmaiVideoSink * dmaisink,
+ dmaisink->videoOutput = NULL;
+ dmaisink->numBufs = -1;
+ dmaisink->framerepeat = 0;
+- dmaisink->repeat_with_refresh = FALSE;
+ dmaisink->can_set_display_framerate = FALSE;
+ dmaisink->rotation = -1;
+ dmaisink->tempDmaiBuf = NULL;
+@@ -755,55 +752,6 @@ static int gst_tidmaivideosink_videostd_get_attrs(VideoStd_Type videoStd,
+
+
+ /*******************************************************************************
+- * gst_tidmaivideosink_videostd_get_refresh_latency
+- *
+- * Return the refresh latency in us for the given display standard.
+-*******************************************************************************/
+-static int gst_tidmaivideosink_videostd_get_refresh_latency(
+- VideoStd_Type videoStd)
+-{
+- switch (videoStd) {
+- case VideoStd_1080P_24:
+- return 41667;
+-
+- case VideoStd_SIF_PAL:
+- case VideoStd_D1_PAL:
+- case VideoStd_1080P_25:
+- case VideoStd_1080I_25:
+- return 40000;
+-
+- case VideoStd_CIF:
+- case VideoStd_SIF_NTSC:
+- case VideoStd_D1_NTSC:
+- return 33367;
+-
+- case VideoStd_1080I_30:
+- case VideoStd_1080P_30:
+- return 33333;
+-
+- case VideoStd_576P:
+- case VideoStd_720P_50:
+- return 20000;
+-
+- case VideoStd_480P:
+- case VideoStd_720P_60:
+- #if defined(Platform_dm6467t)
+- case VideoStd_1080P_60:
+- #endif
+- return 16667;
+-
+- case VideoStd_VGA:
+- return 16667;
+-
+- default:
+- break;
+- }
+- GST_ERROR("Unknown videoStd entered (VideoStd = %d)\n", videoStd);
+- return 0;
+-}
+-
+-
+-/*******************************************************************************
+ * gst_tidmaivideosink_find_videostd
+ *
+ * This function will take in a VideoStd_Attrs structure and find the
+@@ -1580,10 +1528,7 @@ static GstFlowReturn gst_tidmaivideosink_render(GstBaseSink * bsink,
+
+ /* Display the frame as many times as specified by framerepeat. By
+ * default, the input buffer is copied to a display buffer for each time
+- * it is to be repeated. However, if repeat_with_refresh is TRUE, then
+- * the platform doesn't have the bandwidth for multiple copies. In this
+- * case we copy and display the input buffer only once, but let it refresh
+- * multiple times.
++ * it is to be repeated.
+ */
+ for (i = 0; i < sink->framerepeat; i++) {
+
+@@ -1594,16 +1539,6 @@ static GstFlowReturn gst_tidmaivideosink_render(GstBaseSink * bsink,
+ goto cleanup;
+ }
+
+- /* If repeat_with_refresh was specified, wait for the display to
+- * refresh framerepeat-1 times to make sure it has finished displaying
+- * this buffer before we write new data into it.
+- */
+- while (sink->repeat_with_refresh && i < (sink->framerepeat-1)) {
+- usleep(gst_tidmaivideosink_videostd_get_refresh_latency(
+- sink->dAttrs.videoStd) + 1);
+- i++;
+- }
+-
+ /* Retrieve the dimensions of the display buffer */
+ BufferGfx_getDimensions(hDispBuf, &dim);
+ GST_LOG("Display size %dx%d pitch %d\n",
+diff --git a/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.h b/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.h
+index 4800fcd..2a28e4f 100644
+--- a/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.h
++++ b/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.h
+@@ -123,7 +123,6 @@ struct _GstTIDmaiVideoSink {
+ * should be repeated to match the display output frame rate.
+ */
+ int framerepeat;
+- gboolean repeat_with_refresh;
+ gboolean can_set_display_framerate;
+ gboolean signal_handoffs;
+
+--
+1.7.0.4
+
diff --git a/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0007-Add-support-for-pad-allocated-buffers-in-TIDmaiVideo.patch b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0007-Add-support-for-pad-allocated-buffers-in-TIDmaiVideo.patch
new file mode 100644
index 00000000..863bd34d
--- /dev/null
+++ b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0007-Add-support-for-pad-allocated-buffers-in-TIDmaiVideo.patch
@@ -0,0 +1,313 @@
+From 108fa0bb550f9b7355bfd5ae5340220fd1a4c9b5 Mon Sep 17 00:00:00 2001
+From: Don Darling <don.osc2@gmail.com>
+Date: Thu, 5 Aug 2010 15:09:54 -0500
+Subject: [PATCH 7/8] Add support for pad-allocated buffers in TIDmaiVideoSink.
+
+This feature is currently only tested and enabled for DM365.
+---
+ .../ticodecplugin/src/gsttidmaibuffertransport.c | 4 +-
+ .../ticodecplugin/src/gsttidmaibuffertransport.h | 6 +-
+ .../ticodecplugin/src/gsttidmaivideosink.c | 197 ++++++++++++++++++--
+ 3 files changed, 191 insertions(+), 16 deletions(-)
+
+diff --git a/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaibuffertransport.c b/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaibuffertransport.c
+index 5fad371..9c69285 100644
+--- a/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaibuffertransport.c
++++ b/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaibuffertransport.c
+@@ -136,8 +136,8 @@ static void gst_tidmaibuffertransport_finalize(GstBuffer *gstbuffer)
+ */
+ if (Buffer_getBufTab(self->dmaiBuffer) != NULL) {
+ GST_LOG("clearing GStreamer useMask bit\n");
+- Buffer_freeUseMask(self->dmaiBuffer,
+- gst_tidmaibuffer_GST_FREE);
++ Buffer_freeUseMask(self->dmaiBuffer, gst_tidmaibuffer_GST_FREE);
++ Buffer_freeUseMask(self->dmaiBuffer, gst_tidmaibuffer_VIDEOSINK_FREE);
+ } else {
+ GST_LOG("calling Buffer_delete()\n");
+ Buffer_delete(self->dmaiBuffer);
+diff --git a/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaibuffertransport.h b/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaibuffertransport.h
+index 0265e70..20945f3 100644
+--- a/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaibuffertransport.h
++++ b/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaibuffertransport.h
+@@ -52,8 +52,10 @@ G_BEGIN_DECLS
+ GstTIDmaiBufferTransportClass))
+
+ /* Use mask flags that keep track of where buffer is in use */
+-#define gst_tidmaibuffer_GST_FREE 0x1
+-#define gst_tidmaibuffer_CODEC_FREE 0x2
++#define gst_tidmaibuffer_GST_FREE 0x1
++#define gst_tidmaibuffer_CODEC_FREE 0x2
++#define gst_tidmaibuffer_VIDEOSINK_FREE 0x4
++#define gst_tidmaibuffer_DISPLAY_FREE 0x8
+
+ typedef struct _GstTIDmaiBufferTransport GstTIDmaiBufferTransport;
+ typedef struct _GstTIDmaiBufferTransportClass GstTIDmaiBufferTransportClass;
+diff --git a/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.c b/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.c
+index 0125ed2..7b84a8e 100644
+--- a/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.c
++++ b/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.c
+@@ -151,6 +151,9 @@ static GstStateChangeReturn
+ gst_tidmaivideosink_change_state(GstElement * element,
+ GstStateChange transition);
+ static GstFlowReturn
++ gst_tidmaivideosink_buffer_alloc(GstBaseSink * bsink, guint64 offset,
++ guint size, GstCaps * caps, GstBuffer ** buf);
++static GstFlowReturn
+ gst_tidmaivideosink_preroll(GstBaseSink * bsink, GstBuffer * buffer);
+ static int
+ gst_tidmaivideosink_videostd_get_attrs(VideoStd_Type videoStd,
+@@ -353,6 +356,13 @@ static void gst_tidmaivideosink_class_init(GstTIDmaiVideoSinkClass * klass)
+ GST_DEBUG_FUNCPTR(gst_tidmaivideosink_preroll);
+ gstbase_sink_class->render =
+ GST_DEBUG_FUNCPTR(gst_tidmaivideosink_render);
++ gstbase_sink_class->buffer_alloc =
++ GST_DEBUG_FUNCPTR(gst_tidmaivideosink_buffer_alloc);
++
++ /* Pad-buffer allocation is currently only supported for DM365 */
++ #if !defined(Platform_dm365)
++ gstbase_sink_class->buffer_alloc = NULL;
++ #endif
+ }
+
+
+@@ -663,6 +673,132 @@ static gboolean gst_tidmaivideosink_event(GstBaseSink * bsink,
+
+
+ /******************************************************************************
++ * gst_tidmaivideosink_buffer_alloc
++ ******************************************************************************/
++static GstFlowReturn gst_tidmaivideosink_buffer_alloc(GstBaseSink * bsink,
++ guint64 offset, guint size, GstCaps * caps,
++ GstBuffer ** buf)
++{
++ GstTIDmaiVideoSink *dmaisink = GST_TIDMAIVIDEOSINK(bsink);
++ BufferGfx_Attrs gfxAttrs = BufferGfx_Attrs_DEFAULT;
++ gboolean alloc_unref = FALSE;
++ Buffer_Handle hDispBuf = NULL;
++ GstCaps *alloc_caps;
++
++ *buf = NULL;
++
++ GST_LOG_OBJECT(dmaisink,
++ "a buffer of %d bytes was requested with caps %" GST_PTR_FORMAT
++ " and offset %" G_GUINT64_FORMAT, size, caps, offset);
++
++ /* assume we're going to alloc what was requested, keep track of wheter we
++ * need to unref or not. When we suggest a new format upstream we will
++ * create a new caps that we need to unref. */
++ alloc_caps = caps;
++
++ /* Process the buffer caps */
++ if (!gst_tidmaivideosink_process_caps(bsink, alloc_caps)) {
++ return GST_FLOW_UNEXPECTED;
++ }
++
++ /* Pad buffer allocation requires that we use user-allocated display
++ * buffers.
++ */
++ if (!dmaisink->useUserptrBufs && dmaisink->hDisplay) {
++ GST_ELEMENT_ERROR(dmaisink, RESOURCE, FAILED,
++ ("Cannot use pad buffer allocation after mmap buffers already "
++ "in use\n"), (NULL));
++ return GST_FLOW_UNEXPECTED;
++ }
++ else {
++ dmaisink->useUserptrBufs = TRUE;
++ }
++
++ /* Allocate the display buffers */
++ if (!dmaisink->hDispBufTab && dmaisink->useUserptrBufs) {
++
++ /* Set the display attributes now so we can allocate display buffers */
++ if (!gst_tidmaivideosink_set_display_attrs(dmaisink,
++ dmaisink->dGfxAttrs.colorSpace)) {
++ GST_ERROR("Error while trying to set the display attributes\n");
++ return GST_FLOW_UNEXPECTED;
++ }
++
++ if (!gst_tidmaivideosink_alloc_display_buffers(dmaisink, size)) {
++ GST_ERROR("Failed to allocate display buffers");
++ return GST_FLOW_UNEXPECTED;
++ }
++ }
++
++ /* Get a buffer from the BufTab or display driver */
++ if (!(hDispBuf = gst_tidmaibuftab_get_buf(dmaisink->hDispBufTab))) {
++ if (dmaisink->hDisplay &&
++ Display_get(dmaisink->hDisplay, &hDispBuf) < 0) {
++ GST_ELEMENT_ERROR(dmaisink, RESOURCE, FAILED,
++ ("Failed to get display buffer\n"), (NULL));
++ return GST_FLOW_UNEXPECTED;
++ }
++ }
++
++ /* If the geometry doesn't match, generate a new caps for it */
++ Buffer_getAttrs(hDispBuf, BufferGfx_getBufferAttrs(&gfxAttrs));
++
++ if (gfxAttrs.dim.width != dmaisink->dGfxAttrs.dim.width ||
++ gfxAttrs.dim.height != dmaisink->dGfxAttrs.dim.height ||
++ gfxAttrs.colorSpace != dmaisink->dGfxAttrs.colorSpace) {
++
++ GstCaps *desired_caps;
++ GstStructure *desired_struct;
++
++ /* make a copy of the incomming caps to create the new suggestion. We
++ * can't use make_writable because we might then destroy the original
++ * caps which we still need when the peer does not accept the
++ * suggestion.
++ */
++ desired_caps = gst_caps_copy (caps);
++ desired_struct = gst_caps_get_structure (desired_caps, 0);
++
++ GST_DEBUG ("we prefer to receive a %ldx%ld video; %ldx%ld was requested",
++ gfxAttrs.dim.width, gfxAttrs.dim.height,
++ dmaisink->dGfxAttrs.dim.width, dmaisink->dGfxAttrs.dim.height);
++ gst_structure_set (desired_struct, "width", G_TYPE_INT,
++ gfxAttrs.dim.width, NULL);
++ gst_structure_set (desired_struct, "height", G_TYPE_INT,
++ gfxAttrs.dim.height, NULL);
++
++ if (gst_pad_peer_accept_caps (GST_VIDEO_SINK_PAD (dmaisink),
++ desired_caps)) {
++ alloc_caps = desired_caps;
++ alloc_unref = TRUE;
++
++ if (!gst_tidmaivideosink_process_caps(bsink, alloc_caps)) {
++ return GST_FLOW_UNEXPECTED;
++ }
++ GST_DEBUG ("peer pad accepts our desired caps %" GST_PTR_FORMAT,
++ desired_caps);
++ }
++ else {
++ GST_DEBUG ("peer pad does not accept our desired caps %"
++ GST_PTR_FORMAT, desired_caps);
++ }
++ }
++
++ /* Return the display buffer */
++ BufferGfx_resetDimensions(hDispBuf);
++ Buffer_freeUseMask(hDispBuf, gst_tidmaibuffer_DISPLAY_FREE);
++ *buf = gst_tidmaibuffertransport_new(hDispBuf, NULL);
++ gst_buffer_set_caps(*buf, alloc_caps);
++
++ /* If we allocated new caps, unref them now */
++ if (alloc_unref) {
++ gst_caps_unref (alloc_caps);
++ }
++
++ return GST_FLOW_OK;
++}
++
++
++/******************************************************************************
+ * gst_tidmaivideosink_preroll
+ ******************************************************************************/
+ static GstFlowReturn gst_tidmaivideosink_preroll(GstBaseSink * bsink,
+@@ -1282,6 +1418,18 @@ static gboolean gst_tidmaivideosink_init_display(GstTIDmaiVideoSink * sink)
+ return FALSE;
+ }
+
++ /* If we own the display buffers, tell DMAI to delay starting the
++ * display until we call Display_put for the first time.
++ */
++ if (sink->hDispBufTab) {
++ #if defined(Platform_dm365)
++ sink->dAttrs.delayStreamon = TRUE;
++ #else
++ GST_ERROR("delayed V4L2 streamon not supported\n");
++ return FALSE;
++ #endif
++ }
++
+ /* Allocate user-allocated display buffers, if requested */
+ if (!sink->hDispBufTab && sink->useUserptrBufs) {
+ if (!gst_tidmaivideosink_alloc_display_buffers(sink, 0)) {
+@@ -1416,9 +1564,6 @@ static gboolean gst_tidmaivideosink_process_caps(GstBaseSink * bsink,
+ gst_structure_get_fraction(structure, "framerate", &framerateNum,
+ &framerateDen);
+
+- /* Error check new values against existing ones */
+- /* TBD */
+-
+ /* Populate the display graphics attributes */
+ dmaisink->dGfxAttrs.bAttrs.reference = dmaisink->contiguousInputFrame;
+ dmaisink->dGfxAttrs.dim.width = width;
+@@ -1445,9 +1590,10 @@ static gboolean gst_tidmaivideosink_process_caps(GstBaseSink * bsink,
+ static GstFlowReturn gst_tidmaivideosink_render(GstBaseSink * bsink,
+ GstBuffer * buf)
+ {
+- Buffer_Handle hDispBuf = NULL;
+- Buffer_Handle inBuf = NULL;
+- GstTIDmaiVideoSink *sink = GST_TIDMAIVIDEOSINK(bsink);
++ Buffer_Handle hDispBuf = NULL;
++ Buffer_Handle inBuf = NULL;
++ gboolean inBufIsOurs = FALSE;
++ GstTIDmaiVideoSink *sink = GST_TIDMAIVIDEOSINK(bsink);
+ BufferGfx_Dimensions dim;
+ gchar dur_str[64];
+ gchar ts_str[64];
+@@ -1470,7 +1616,10 @@ static GstFlowReturn gst_tidmaivideosink_render(GstBaseSink * bsink,
+ * generated via videotestsrc plugin.
+ */
+ if (GST_IS_TIDMAIBUFFERTRANSPORT(buf)) {
+- inBuf = GST_TIDMAIBUFFERTRANSPORT_DMAIBUF(buf);
++ inBuf = GST_TIDMAIBUFFERTRANSPORT_DMAIBUF(buf);
++ inBufIsOurs = (sink->hDispBufTab &&
++ GST_TIDMAIBUFTAB_BUFTAB(sink->hDispBufTab) ==
++ Buffer_getBufTab(inBuf));
+ } else {
+ /* allocate DMAI buffer */
+ if (sink->tempDmaiBuf == NULL) {
+@@ -1532,11 +1681,33 @@ static GstFlowReturn gst_tidmaivideosink_render(GstBaseSink * bsink,
+ */
+ for (i = 0; i < sink->framerepeat; i++) {
+
+- /* Get a buffer from the display driver */
+- if (Display_get(sink->hDisplay, &hDispBuf) < 0) {
+- GST_ELEMENT_ERROR(sink, RESOURCE, FAILED,
+- ("Failed to get display buffer\n"), (NULL));
+- goto cleanup;
++ /* If the input buffer originated from this element via pad allocation,
++ * simply give it back to the display and continue.
++ */
++ if (inBufIsOurs) {
++
++ /* Mark buffer as in-use by the display so it can't be re-used
++ * until it comes back from Display_get */
++ Buffer_setUseMask(inBuf, Buffer_getUseMask(inBuf) |
++ gst_tidmaibuffer_DISPLAY_FREE);
++
++ if (Display_put(sink->hDisplay, inBuf) < 0) {
++ GST_ELEMENT_ERROR(sink, RESOURCE, FAILED,
++ ("Failed to put display buffer\n"), (NULL));
++ goto cleanup;
++ }
++ continue;
++ }
++
++ /* Otherwise, our input buffer originated from up-stream. Retrieve a
++ * display buffer to copy the contents into.
++ */
++ else {
++ if (Display_get(sink->hDisplay, &hDispBuf) < 0) {
++ GST_ELEMENT_ERROR(sink, RESOURCE, FAILED,
++ ("Failed to get display buffer\n"), (NULL));
++ goto cleanup;
++ }
+ }
+
+ /* Retrieve the dimensions of the display buffer */
+@@ -1844,8 +2015,10 @@ static gboolean gst_tidmaivideosink_alloc_display_buffers(
+ gfxAttrs.dim.height, gfxAttrs.dim.lineLength, gfxAttrs.colorSpace);
+ }
+
++ gfxAttrs.bAttrs.useMask = gst_tidmaibuffer_VIDEOSINK_FREE;
+ sink->hDispBufTab = gst_tidmaibuftab_new(sink->dAttrs.numBufs, bufSize,
+ BufferGfx_getBufferAttrs(&gfxAttrs));
++ gst_tidmaibuftab_set_blocking(sink->hDispBufTab, FALSE);
+
+ return TRUE;
+ }
+--
+1.7.0.4
+
diff --git a/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0008-Add-support-for-pad-allocated-buffers-in-TIViddec2.patch b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0008-Add-support-for-pad-allocated-buffers-in-TIViddec2.patch
new file mode 100644
index 00000000..9ceb30f5
--- /dev/null
+++ b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0008-Add-support-for-pad-allocated-buffers-in-TIViddec2.patch
@@ -0,0 +1,302 @@
+From e5a264465c1c77d5fc18eeb51b99c79fc3f28a3e Mon Sep 17 00:00:00 2001
+From: Don Darling <don.osc2@gmail.com>
+Date: Tue, 8 Jun 2010 13:48:51 -0500
+Subject: [PATCH 8/8] Add support for pad-allocated buffers in TIViddec2.
+
+When padAllocOutbufs=TRUE is specified to the TIViddec2 element, it will
+attempt to allocate buffers from downstream instead of allocating its own.
+
+Downstream buffers will only be used if it can be determined that they are
+all members of a DMAI BufTab, which means they are CMEM-based, and will work
+with the codecs. Currently, the only known downstream element that can provide
+these buffers is TIDmaiVideoSink, and it is only supported for DM365.
+
+There is currently no support for centering small clips in the middle of the
+display screen -- this would require additional support in the display driver.
+As a result, pad-allocation can currently only be used with clips that are at
+least as large as the display, and this feature not enabled by default because
+of these strict clip-size requirements.
+
+On DM365, there are known issues with the MPEG-2 decoder's output buffer size
+calculation that cause it not to work with D1 resolutions unless you hard-code
+the size. H.264 and MPEG-4 decoders work as expected, and MPEG-2 works as
+expected for 720p.
+---
+ .../ti_build/ticodecplugin/src/gsttividdec2.c | 159 ++++++++++++++++----
+ .../ti_build/ticodecplugin/src/gsttividdec2.h | 1 +
+ 2 files changed, 127 insertions(+), 33 deletions(-)
+
+diff --git a/gstreamer_ti/ti_build/ticodecplugin/src/gsttividdec2.c b/gstreamer_ti/ti_build/ticodecplugin/src/gsttividdec2.c
+index c39208f..ec3cb05 100644
+--- a/gstreamer_ti/ti_build/ticodecplugin/src/gsttividdec2.c
++++ b/gstreamer_ti/ti_build/ticodecplugin/src/gsttividdec2.c
+@@ -73,7 +73,8 @@ enum
+ PROP_FRAMERATE, /* framerate (GstFraction) */
+ PROP_DISPLAY_BUFFER, /* displayBuffer (boolean) */
+ PROP_GEN_TIMESTAMPS, /* genTimeStamps (boolean) */
+- PROP_RTCODECTHREAD /* rtCodecThread (boolean) */
++ PROP_RTCODECTHREAD, /* rtCodecThread (boolean) */
++ PROP_PAD_ALLOC_OUTBUFS /* padAllocOutbufs (boolean) */
+ };
+
+ /* Define sink (input) pad capabilities. Currently, MPEG and H264 are
+@@ -170,8 +171,8 @@ static GstClockTime
+ gst_tividdec2_frame_duration(GstTIViddec2 *viddec2);
+ static gboolean
+ gst_tividdec2_resizeBufTab(GstTIViddec2 *viddec2);
+-static gboolean
+- gst_tividdec2_codec_start (GstTIViddec2 *viddec2);
++static gboolean
++ gst_tividdec2_codec_start (GstTIViddec2 *viddec2, GstBuffer **padBuffer);
+ static gboolean
+ gst_tividdec2_codec_stop (GstTIViddec2 *viddec2);
+ static void
+@@ -324,6 +325,11 @@ static void gst_tividdec2_class_init(GstTIViddec2Class *klass)
+ g_param_spec_boolean("genTimeStamps", "Generate Time Stamps",
+ "Set timestamps on output buffers",
+ TRUE, G_PARAM_WRITABLE));
++
++ g_object_class_install_property(gobject_class, PROP_PAD_ALLOC_OUTBUFS,
++ g_param_spec_boolean("padAllocOutbufs", "Use pad allocation",
++ "Try to allocate buffers with pad allocation",
++ FALSE, G_PARAM_WRITABLE));
+ }
+
+ /******************************************************************************
+@@ -448,6 +454,7 @@ static void gst_tividdec2_init(GstTIViddec2 *viddec2, GstTIViddec2Class *gclass)
+
+ viddec2->numOutputBufs = 0UL;
+ viddec2->hOutBufTab = NULL;
++ viddec2->padAllocOutbufs = FALSE;
+ viddec2->circBuf = NULL;
+
+ viddec2->sps_pps_data = NULL;
+@@ -548,6 +555,10 @@ static void gst_tividdec2_set_property(GObject *object, guint prop_id,
+ viddec2->rtCodecThread = g_value_get_boolean(value);
+ GST_LOG("setting \"RTCodecThread\" to \"%s\"\n",
+ viddec2->rtCodecThread ? "TRUE" : "FALSE");
++ case PROP_PAD_ALLOC_OUTBUFS:
++ viddec2->padAllocOutbufs = g_value_get_boolean(value);
++ GST_LOG("setting \"padAllocOutbufs\" to \"%s\"\n",
++ viddec2->padAllocOutbufs ? "TRUE" : "FALSE");
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+@@ -1079,9 +1090,9 @@ static gboolean gst_tividdec2_init_video(GstTIViddec2 *viddec2)
+ */
+ Rendezvous_meet(viddec2->waitOnDecodeThread);
+
+- if (viddec2->circBuf == NULL || viddec2->hOutBufTab == NULL) {
++ if (viddec2->circBuf == NULL) {
+ GST_ELEMENT_ERROR(viddec2, RESOURCE, FAILED,
+- ("decode thread failed to create circbuf or display buffer handles\n"),
++ ("decode thread failed to create circbuf handles\n"),
+ (NULL));
+ return FALSE;
+ }
+@@ -1260,11 +1271,13 @@ static gboolean gst_tividdec2_codec_stop (GstTIViddec2 *viddec2)
+ * gst_tividdec2_codec_start
+ * Initialize codec engine
+ *****************************************************************************/
+-static gboolean gst_tividdec2_codec_start (GstTIViddec2 *viddec2)
++static gboolean gst_tividdec2_codec_start (GstTIViddec2 *viddec2,
++ GstBuffer **padBuffer)
+ {
+- VIDDEC2_Params params = Vdec2_Params_DEFAULT;
+- VIDDEC2_DynamicParams dynParams = Vdec2_DynamicParams_DEFAULT;
+- BufferGfx_Attrs gfxAttrs = BufferGfx_Attrs_DEFAULT;
++ VIDDEC2_Params params = Vdec2_Params_DEFAULT;
++ VIDDEC2_DynamicParams dynParams = Vdec2_DynamicParams_DEFAULT;
++ BufferGfx_Attrs gfxAttrs = BufferGfx_Attrs_DEFAULT;
++ BufTab_Handle codecBufTab = NULL;
+ Cpu_Device device;
+ ColorSpace_Type colorSpace;
+ Int defaultNumBufs;
+@@ -1364,30 +1377,77 @@ static gboolean gst_tividdec2_codec_start (GstTIViddec2 *viddec2)
+ viddec2->numOutputBufs = defaultNumBufs;
+ }
+
+- /* Create codec output buffers */
+- GST_LOG("creating output buffer table\n");
+- gfxAttrs.colorSpace = colorSpace;
+- gfxAttrs.dim.width = params.maxWidth;
+- gfxAttrs.dim.height = params.maxHeight;
+- gfxAttrs.dim.lineLength = BufferGfx_calcLineLength(
+- gfxAttrs.dim.width, gfxAttrs.colorSpace);
++ /* Try to allocate a buffer from downstream. To do this, we must first
++ * set the framerate to a reasonable default if one hasn't been specified,
++ * and we need to set the source pad caps with the stream information we
++ * have so far.
++ */
++ gst_tividdec2_frame_duration(viddec2);
++ gst_tividdec2_set_source_caps_base(viddec2, params.maxWidth,
++ params.maxHeight, colorSpace);
++
++ *padBuffer = NULL;
++ if (viddec2->padAllocOutbufs) {
++ if (gst_pad_alloc_buffer(viddec2->srcpad, 0,
++ Vdec2_getOutBufSize(viddec2->hVd), GST_PAD_CAPS(viddec2->srcpad),
++ padBuffer) != GST_FLOW_OK) {
++ GST_LOG("failed to allocate a downstream buffer\n");
++ *padBuffer = NULL;
++ }
++
++ if (*padBuffer && !GST_IS_TIDMAIBUFFERTRANSPORT(*padBuffer)) {
++ GST_LOG("downstream buffer is not a DMAI buffer; disabling use of "
++ "pad-allocated buffers\n");
++ gst_buffer_unref(*padBuffer);
++ *padBuffer = NULL;
++ }
++
++ if (*padBuffer) {
++ codecBufTab = Buffer_getBufTab(
++ GST_TIDMAIBUFFERTRANSPORT_DMAIBUF(*padBuffer));
++
++ if (!codecBufTab) {
++ GST_LOG("downstream buffer is not a BufTab member; disabling "
++ "use of pad-allocated buffers\n");
++ gst_buffer_unref(*padBuffer);
++ *padBuffer = NULL;
++ }
++ }
++ }
++
++ /* If we can't use pad-allocated buffers, allocate our own BufTab for
++ * output buffers to push downstream.
++ */
++ if (!(*padBuffer)) {
++
++ GST_LOG("creating output buffer table\n");
++ gfxAttrs.colorSpace = colorSpace;
++ gfxAttrs.dim.width = params.maxWidth;
++ gfxAttrs.dim.height = params.maxHeight;
++ gfxAttrs.dim.lineLength = BufferGfx_calcLineLength(
++ gfxAttrs.dim.width, gfxAttrs.colorSpace);
+
+- /* By default, new buffers are marked as in-use by the codec */
+- gfxAttrs.bAttrs.useMask = gst_tidmaibuffer_CODEC_FREE;
++ /* By default, new buffers are marked as in-use by the codec */
++ gfxAttrs.bAttrs.useMask = gst_tidmaibuffer_CODEC_FREE;
+
+- viddec2->hOutBufTab = gst_tidmaibuftab_new(
+- viddec2->numOutputBufs, Vdec2_getOutBufSize(viddec2->hVd),
+- BufferGfx_getBufferAttrs(&gfxAttrs));
++ viddec2->hOutBufTab = gst_tidmaibuftab_new(
++ viddec2->numOutputBufs, Vdec2_getOutBufSize(viddec2->hVd),
++ BufferGfx_getBufferAttrs(&gfxAttrs));
++
++ codecBufTab = GST_TIDMAIBUFTAB_BUFTAB(viddec2->hOutBufTab);
++ }
+
+- if (viddec2->hOutBufTab == NULL) {
++ /* The value of codecBufTab should now either point to a downstream
++ * BufTab or our own BufTab.
++ */
++ if (codecBufTab == NULL) {
+ GST_ELEMENT_ERROR(viddec2, RESOURCE, NO_SPACE_LEFT,
+- ("failed to create output buffers\n"), (NULL));
++ ("no BufTab available for codec output\n"), (NULL));
+ return FALSE;
+ }
+
+- /* Tell the Vdec module that hOutBufTab will be used for display buffers */
+- Vdec2_setBufTab(viddec2->hVd,
+- GST_TIDMAIBUFTAB_BUFTAB(viddec2->hOutBufTab));
++ /* Tell the Vdec module what BufTab it will be using for its output */
++ Vdec2_setBufTab(viddec2->hVd, codecBufTab);
+
+ return TRUE;
+ }
+@@ -1403,8 +1463,10 @@ static void* gst_tividdec2_decode_thread(void *arg)
+ {
+ GstTIViddec2 *viddec2 = GST_TIVIDDEC2(gst_object_ref(arg));
+ GstBuffer *encDataWindow = NULL;
++ GstBuffer *padBuffer = NULL;
+ Buffer_Attrs bAttrs = Buffer_Attrs_DEFAULT;
+ gboolean codecFlushed = FALSE;
++ gboolean usePadBufs = FALSE;
+ void *threadRet = GstTIThreadSuccess;
+ Buffer_Handle hDummyInputBuf = NULL;
+ Buffer_Handle hDstBuf;
+@@ -1420,7 +1482,8 @@ static void* gst_tividdec2_decode_thread(void *arg)
+ GST_LOG("init video decode_thread \n");
+
+ /* Initialize codec engine */
+- ret = gst_tividdec2_codec_start(viddec2);
++ ret = gst_tividdec2_codec_start(viddec2, &padBuffer);
++ usePadBufs = (padBuffer != NULL);
+
+ /* Notify main thread that is ok to continue initialization */
+ Rendezvous_meet(viddec2->waitOnDecodeThread);
+@@ -1476,7 +1539,34 @@ static void* gst_tividdec2_decode_thread(void *arg)
+ }
+
+ /* Obtain a free output buffer for the decoded data */
+- if (!(hDstBuf = gst_tidmaibuftab_get_buf(viddec2->hOutBufTab))) {
++ if (usePadBufs) {
++
++ /* First time through this loop, padBuffer will already be set
++ * to the buffer we got in codec_start. It will be NULL for every
++ * frame after that.
++ */
++ if (G_LIKELY(!padBuffer)) {
++ if (gst_pad_alloc_buffer(viddec2->srcpad, 0, 0,
++ GST_PAD_CAPS(viddec2->srcpad), &padBuffer)
++ != GST_FLOW_OK) {
++ GST_ELEMENT_ERROR(viddec2, RESOURCE, READ,
++ ("failed to allocate a downstream buffer\n"), (NULL));
++ padBuffer = NULL;
++ goto thread_exit;
++ }
++ }
++ hDstBuf = GST_TIDMAIBUFFERTRANSPORT_DMAIBUF(padBuffer);
++ gst_buffer_unref(padBuffer);
++ padBuffer = NULL;
++
++ /* Set the CODEC_FREE flag -- this isn't done automatically when
++ * allocating buffers from downstream.
++ */
++ Buffer_setUseMask(hDstBuf, Buffer_getUseMask(hDstBuf) |
++ gst_tidmaibuffer_CODEC_FREE);
++
++ }
++ else if (!(hDstBuf = gst_tidmaibuftab_get_buf(viddec2->hOutBufTab))) {
+ GST_ELEMENT_ERROR(viddec2, RESOURCE, READ,
+ ("failed to get a free contiguous buffer from BufTab\n"),
+ (NULL));
+@@ -1623,12 +1713,15 @@ thread_failure:
+ thread_exit:
+
+ /* Re-claim any buffers owned by the codec */
+- bufIdx = BufTab_getNumBufs(GST_TIDMAIBUFTAB_BUFTAB(viddec2->hOutBufTab));
++ if (viddec2->hOutBufTab) {
++ bufIdx =
++ BufTab_getNumBufs(GST_TIDMAIBUFTAB_BUFTAB(viddec2->hOutBufTab));
+
+- while (bufIdx-- > 0) {
+- Buffer_Handle hBuf = BufTab_getBuf(
+- GST_TIDMAIBUFTAB_BUFTAB(viddec2->hOutBufTab), bufIdx);
+- Buffer_freeUseMask(hBuf, gst_tidmaibuffer_CODEC_FREE);
++ while (bufIdx-- > 0) {
++ Buffer_Handle hBuf = BufTab_getBuf(
++ GST_TIDMAIBUFTAB_BUFTAB(viddec2->hOutBufTab), bufIdx);
++ Buffer_freeUseMask(hBuf, gst_tidmaibuffer_CODEC_FREE);
++ }
+ }
+
+ /* Release the last buffer we retrieved from the circular buffer */
+diff --git a/gstreamer_ti/ti_build/ticodecplugin/src/gsttividdec2.h b/gstreamer_ti/ti_build/ticodecplugin/src/gsttividdec2.h
+index b16e9c5..6b09d2a 100644
+--- a/gstreamer_ti/ti_build/ticodecplugin/src/gsttividdec2.h
++++ b/gstreamer_ti/ti_build/ticodecplugin/src/gsttividdec2.h
+@@ -91,6 +91,7 @@ struct _GstTIViddec2
+ UInt32 numOutputBufs;
+ GstTIDmaiBufTab *hOutBufTab;
+ GstTICircBuffer *circBuf;
++ gboolean padAllocOutbufs;
+
+ /* Quicktime h264 header */
+ GstBuffer *sps_pps_data;
+--
+1.7.0.4
+
diff --git a/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0009-dmaisink-compilation-fix.patch b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0009-dmaisink-compilation-fix.patch
new file mode 100644
index 00000000..b8525b79
--- /dev/null
+++ b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0009-dmaisink-compilation-fix.patch
@@ -0,0 +1,26 @@
+From 721970f80e6bff0f231625f00301fa37473a2bb3 Mon Sep 17 00:00:00 2001
+From: Brijesh Singh <bksingh@ti.com>
+Date: Wed, 7 Jul 2010 19:21:01 -0500
+Subject: [PATCH 9/9] dmaisink compilation fix
+
+temporary fix - should go in svn trunk
+---
+ src/gsttidmaivideosink.c | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/src/gsttidmaivideosink.c b/src/gsttidmaivideosink.c
+index 99ca25d..2fb5aad 100644
+--- a/src/gsttidmaivideosink.c
++++ b/src/gsttidmaivideosink.c
+@@ -1817,7 +1817,7 @@ static gboolean gst_tidmaivideosink_alloc_display_buffers(
+ return FALSE;
+ }
+
+- GST_INFO("Allocating %ld display buffers", sink->dAttrs.numBufs);
++ GST_INFO("Allocating %d display buffers", sink->dAttrs.numBufs);
+
+ /* Set the dimensions for the display */
+ if (VideoStd_getResolution(sink->dAttrs.videoStd, &gfxAttrs.dim.width,
+--
+1.7.0.4
+
diff --git a/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0009-update-dm365-cfg-to-work-with-platinum-codecs.patch b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0009-update-dm365-cfg-to-work-with-platinum-codecs.patch
new file mode 100644
index 00000000..0d36bf10
--- /dev/null
+++ b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0009-update-dm365-cfg-to-work-with-platinum-codecs.patch
@@ -0,0 +1,26 @@
+From d5601a8beec6144fb39ebdc93778c081028a7fdd Mon Sep 17 00:00:00 2001
+From: Brijesh Singh <bksingh@ti.com>
+Date: Tue, 28 Sep 2010 19:35:14 -0500
+Subject: [PATCH] update dm365 cfg to work with platinum codecs
+
+---
+ src/gstticodecplugin_dm365.cfg | 3 +++
+ 1 files changed, 3 insertions(+), 0 deletions(-)
+
+diff --git a/src/gstticodecplugin_dm365.cfg b/src/gstticodecplugin_dm365.cfg
+index d682643..43174b1 100644
+--- a/src/gstticodecplugin_dm365.cfg
++++ b/src/gstticodecplugin_dm365.cfg
+@@ -86,6 +86,9 @@ var ADDRSPACE = xdc.useModule('ti.sdo.fc.ires.addrspace.ADDRSPACE');
+
+ var CMEM = xdc.useModule('ti.sdo.linuxutils.cmem.CMEM');
+
++var MEMTCM = xdc.useModule('ti.sdo.fc.ires.memtcm.MEMTCM');
++MEMTCM.cmemBlockId = 1; //Since we use _1 in our insmod command.
++
+ /* Uncomment these lines if you wish to debug FC and enable FC trace */
+ /*
+ /*
+--
+1.7.0.4
+
diff --git a/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0010-replace-omap3530_dv400-platform-support-with-omap353.patch b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0010-replace-omap3530_dv400-platform-support-with-omap353.patch
new file mode 100644
index 00000000..85550e6c
--- /dev/null
+++ b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0010-replace-omap3530_dv400-platform-support-with-omap353.patch
@@ -0,0 +1,119 @@
+From 0f2ef84ad320ec141a7ba6727cf18817ac42e413 Mon Sep 17 00:00:00 2001
+From: Brijesh Singh <bksingh@ti.com>
+Date: Mon, 4 Oct 2010 14:11:39 -0500
+Subject: [PATCH] replace omap3530_dv400 platform support with omap3530
+
+---
+ Makefile.external | 19 +++----------
+ src/gstticodecplugin_omap3530_dv400.cfg | 44 -------------------------------
+ 2 files changed, 5 insertions(+), 58 deletions(-)
+ delete mode 100644 src/gstticodecplugin_omap3530_dv400.cfg
+
+diff --git a/Makefile.external b/Makefile.external
+index 6d118d8..2a85108 100644
+--- a/Makefile.external
++++ b/Makefile.external
+@@ -8,7 +8,7 @@
+ # Copyright (C) 2009 Ridgerun
+ #
+
+-.PHONY: default configure dm6446 omap3530 dm355 dm6467 dm365 omapl138 omap3530_dv400
++.PHONY: default configure dm6446 omap3530 dm355 dm6467 dm365 omapl138
+
+ DVSDK_PATH=undefined
+ DMAI_INSTALL_DIR=undefined
+@@ -23,7 +23,7 @@ $(error You need to define the environment variable DMAI_INSTALL_DIR)
+ endif
+
+ default:
+- @echo "Please specify the target: dm6446, omap3530, dm355, dm6467, dm6467t, dm365 omapl138 omap3530_dv400"
++ @echo "Please specify the target: dm6446, omap3530, dm355, dm6467, dm6467t, dm365 omapl138"
+
+ export GST_TI_PLATFORM=$(MAKECMDGOALS)
+ export BIOS_INSTALL_DIR
+@@ -87,6 +87,9 @@ ifeq ($(GST_TI_PLATFORM), omap3530)
+ export MVTOOL_DIR = $(CSTOOL_DIR)
+ export PLATFORM_XDC = ${XDC_PLATFORM}
+ export CROSS_COMPILE = ${CSTOOL_PREFIX}
++ export LINK_XDC_ROOT = $(LINK_INSTALL_DIR)
++ export C6ACCEL_INSTALL_DIR
++ export ENABLE_C6ACCEL ="--enable-c6accel"
+ endif
+
+ ifeq ($(GST_TI_PLATFORM), omapl138)
+@@ -101,16 +104,6 @@ ifeq ($(GST_TI_PLATFORM), omapl138)
+ export ENABLE_C6ACCEL ="--enable-c6accel"
+ endif
+
+-ifeq ($(GST_TI_PLATFORM), omap3530_dv400)
+- export XDC_TARGET = gnu.targets.arm.GCArmv5T
+- export XDC_PLATFORM = ti.platforms.evm3530
+- export MVTOOL_PREFIX = $(CSTOOL_PREFIX)
+- export MVTOOL_DIR = $(CSTOOL_DIR)
+- export PLATFORM_XDC = ${XDC_PLATFORM}
+- export CROSS_COMPILE = ${CSTOOL_PREFIX}
+- export LINK_XDC_ROOT = $(LINK_INSTALL_DIR)
+-endif
+-
+ CPPFLAGS=-DPlatform_$(GST_TI_PLATFORM)
+ HOST=arm-none-linux-gnueabi
+
+@@ -141,5 +134,3 @@ dm365: Makefile
+ omapl138: Makefile
+ $(MAKE) -f Makefile
+
+-omap3530_dv400: Makefile
+- $(MAKE) -f Makefile
+diff --git a/src/gstticodecplugin_omap3530_dv400.cfg b/src/gstticodecplugin_omap3530_dv400.cfg
+deleted file mode 100644
+index 90f4edf..0000000
+--- a/src/gstticodecplugin_omap3530_dv400.cfg
++++ /dev/null
+@@ -1,44 +0,0 @@
+-/*
+- * Copyright (C) 2008-2010 Texas Instruments Incorporated - http://www.ti.com/
+- *
+- * This program is free software; you can redistribute it and/or modify
+- * it under the terms of the GNU Lesser General Public License as
+- * published by the Free Software Foundation version 2.1 of the License.
+- *
+- * This program is distributed #as is# WITHOUT ANY WARRANTY of any kind,
+- * whether express or implied; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- * Lesser General Public License for more details.
+- *
+- */
+-
+-/* Load the Codec Engine 'Operating System Abstraction Layer' */
+-var osalGlobal = xdc.useModule('ti.sdo.ce.osal.Global');
+-
+-var os = xdc.useModule('ti.sdo.ce.osal.linux.Settings');
+-osalGlobal.os = os;
+-
+-/* Configure CE to use it's DSP Link Linux version */
+-var ipc = xdc.useModule('ti.sdo.ce.ipc.Settings');
+-ipc.commType = ipc.COMM_DSPLINK;
+-
+-/*
+- * ======== Engine Configuration ========
+- */
+-var Engine = xdc.useModule('ti.sdo.ce.Engine');
+-var demoEngine = Engine.createFromServer(
+- "codecServer",
+- "./bin/cs.x64P",
+- "ti.sdo.server.cs"
+- );
+-
+-var combopath = "" + java.lang.System.getenv("CODEC_SERVER");
+-if (combopath != "" && combopath != "null") {
+- demoEngine.server = java.lang.System.getenv("CODEC_SERVER");
+-}
+-
+-/* Load support for the DMAI module */
+-var DMAI = xdc.loadPackage('ti.sdo.dmai');
+-
+-var SCPY = xdc.useModule('ti.sdo.fc.scpy.SCPY');
+-var SDMA = xdc.useModule('ti.sdo.linuxutils.sdma.SDMA');
+--
+1.7.0.4
+
diff --git a/extras/recipes-ti/gstreamer-ti/gstreamer-ti/dm355-evm/gst-ti.sh b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/dm355-evm/gst-ti.sh
new file mode 100644
index 00000000..5467a67b
--- /dev/null
+++ b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/dm355-evm/gst-ti.sh
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+# Disable XDM 0.9 elements
+export GST_TI_TIViddec_DISABLE=1
+export GST_TI_TIAuddec_DISABLE=1
+export GST_TI_TIVidenc_DISABLE=1
+export GST_TI_TIImgdec_DISABLE=1
+export GST_TI_TIImgenc_DISABLE=1
+
+# Disable XDM 1.x audio decoder
+export GST_TI_TIAuddec1_DISABLE=1
+
diff --git a/extras/recipes-ti/gstreamer-ti/gstreamer-ti/dm365-evm/loadmodules.sh b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/dm365-evm/loadmodules.sh
new file mode 100644
index 00000000..c70bee1e
--- /dev/null
+++ b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/dm365-evm/loadmodules.sh
@@ -0,0 +1,37 @@
+#!/bin/sh
+#
+# Default DM365 Memory Map 128 MB
+#
+# Start Addr Size Description
+# ----------------------------------------------------------------
+# 0x00001000 32K ARM926 TCM memory used by platinum codec
+# 0x80000000 48 MB Linux
+# 0x83000000 12 MB Video driver memory (Linux)
+# 0x83C00000 68 MB CMEM
+# 0x88000000 BOTTOM ADDRESS
+#
+
+rmmod cmemk 2>/dev/null
+
+# Pools configuration
+modprobe cmemk phys_start=0x83C00000 phys_end=0x88000000 pools=1x16539648,1x4841472,4x1843200,14x1646592,1x282624,1x176128,1x147456,1x69632,1x61440,1x32768,2x20480,1x16384,1x12288,4x8192,69x4096 allowOverlap=1 phys_start_1=0x00001000 phys_end_1=0x00008000 pools_1=1x28672
+
+# Decode + Display
+#modprobe cmemk phys_start=0x83c00000 phys_end=0x88000000 pools=1x16539648,1x4841472,14x1646592,1x282624,1x176128,1x147456,1x69632,1x61440,1x32768,2x20480,1x12288,1x8192,64x4096
+
+# Capture + Encode
+#modprobe cmemk phys_start=0x83c00000 phys_end=0x88000000 pools=1x3112960,1x2764800,3x1536000,1x65536,1x61440,1x49152,1x20480,1x16384,2x8192,87x4096
+
+# Resizer
+#modprobe cmemk phys_start=0x83c00000 phys_end=0x88000000 pools=3x1843200
+
+# Non-accel display
+#modprobe cmemk phys_start=0x83c00000 phys_end=0x88000000 pools=1x1843200
+
+modprobe irqk
+modprobe edmak
+modprobe dm365mmap
+
+rm -f /dev/dm365mmap
+mknod /dev/dm365mmap c `awk "\\$2==\"dm365mmap\" {print \\$1}" /proc/devices` 0
+
diff --git a/extras/recipes-ti/gstreamer-ti/gstreamer-ti/gstreamer-ti-rc.sh b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/gstreamer-ti-rc.sh
new file mode 100644
index 00000000..35bf7818
--- /dev/null
+++ b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/gstreamer-ti-rc.sh
@@ -0,0 +1,28 @@
+#!/bin/sh
+#
+# configure kernel modules to run gst-ti plugins elements
+#
+
+load_module() {
+ echo
+ echo -n "Running /usr/share/ti/gst/<platform>/loadmodules.sh"
+ /usr/share/ti/gst/<platform>/loadmodules.sh
+}
+
+case "$1" in
+ start)
+ echo -n "Loading kernel modules for gstreamer-ti... "
+ load_module
+ echo " done"
+ ;;
+ stop)
+ echo "Nothing to do"
+ ;;
+ restart)
+ echo "Nothing to do"
+ ;;
+ *)
+ echo "$0 <start/stop/restart>"
+ ;;
+esac
+
diff --git a/extras/recipes-ti/gstreamer-ti/gstreamer-ti/gstti-init.service b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/gstti-init.service
new file mode 100644
index 00000000..cccf5343
--- /dev/null
+++ b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/gstti-init.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=TI Gstreamer plugins init
+ConditionKernelCommandLine=mem=MEMARGS
+
+[Service]
+ExecStart=/usr/share/ti/gst/<platform>/loadmodules.sh
+RemainAfterExit=yes
+
+[Install]
+WantedBy=multi-user.target
diff --git a/extras/recipes-ti/gstreamer-ti/gstreamer-ti/omap3/loadmodules.sh b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/omap3/loadmodules.sh
new file mode 100644
index 00000000..eb758834
--- /dev/null
+++ b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/omap3/loadmodules.sh
@@ -0,0 +1,22 @@
+#!/bin/sh
+#
+# CMEM Allocation
+# 1x5250000 Circular buffer
+# 6x829440,1x691200 Video buffers (max D1 PAL)
+# 1x345600 Underlying software components (codecs, etc.)
+# 1x1 Dummy buffer used during final flush
+
+rmmod cmemk 2>/dev/null
+
+modprobe cmemk allowOverlap=1 phys_start=0x86300000 phys_end=0x87300000 \
+ pools=1x5250000,6x829440,1x345600,1x691200,1x1
+
+# insert DSP/BIOS Link driver
+modprobe dsplinkk
+
+# insert Local Power Manager driver
+modprobe lpm_omap3530
+
+# insert SDMA driver
+modprobe sdmak
+
diff --git a/extras/recipes-ti/gstreamer-ti/gstreamer-ti/omapl137/loadmodules.sh b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/omapl137/loadmodules.sh
new file mode 100644
index 00000000..d0311881
--- /dev/null
+++ b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/omapl137/loadmodules.sh
@@ -0,0 +1,12 @@
+#!/bin/sh
+#
+# configure kernel modules for TI DSP based gstreamer plugin
+#
+
+# insert cmemk, tell it to occupy physical 34MB-64MB.
+#
+modprobe cmemk phys_start=0xC2200000 phys_end=0xC3200000 \
+ pools=1x5250000,3x1048576,3x829440,1x256000,4x131072
+
+modprobe dsplinkk
+
diff --git a/extras/recipes-ti/gstreamer-ti/gstreamer-ti/omapl138/da850-omapl138-evm/loadmodules.sh b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/omapl138/da850-omapl138-evm/loadmodules.sh
new file mode 100644
index 00000000..f4017251
--- /dev/null
+++ b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/omapl138/da850-omapl138-evm/loadmodules.sh
@@ -0,0 +1,16 @@
+#!/bin/sh
+#
+# configure kernel modules for TI DSP based gstreamer plugin
+#
+rmmod cmemk 2>/dev/null
+rmmod dsplink 2>/dev/null
+
+modprobe cmemk phys_start=0xC2200000 phys_end=0xC3200000 \
+ pools=1x5250000,3x1048576,3x829440,1x256000,4x131072 \
+ allowOverlap=1
+
+modprobe dsplinkk
+
+rm -f /dev/dsplink
+mknod /dev/dsplink c `awk "\\$2==\"dsplink\" {print \\$1}" /proc/devices` 0
+
diff --git a/extras/recipes-ti/gstreamer-ti/gstreamer-ti/omapl138/loadmodules.sh b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/omapl138/loadmodules.sh
new file mode 100644
index 00000000..95cfc3da
--- /dev/null
+++ b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/omapl138/loadmodules.sh
@@ -0,0 +1,15 @@
+#!/bin/sh
+#
+# configure kernel modules for TI DSP based gstreamer plugin
+#
+
+rmmod cmemk 2>/dev/null
+
+modprobe cmemk phys_start=0xC2200000 phys_end=0xC3200000 \
+ pools=1x5250000,3x1048576,3x829440,1x256000,4x131072
+
+modprobe dsplinkk
+
+rm -f /dev/dsplink
+mknod /dev/dsplink c `awk "\\$2==\"dsplink\" {print \\$1}" /proc/devices` 0
+
diff --git a/extras/recipes-ti/gstreamer-ti/gstreamer-ti/r962-remove-include-videodev.diff b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/r962-remove-include-videodev.diff
new file mode 100644
index 00000000..cb106fc4
--- /dev/null
+++ b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/r962-remove-include-videodev.diff
@@ -0,0 +1,22 @@
+diff -ur ticodecplugin_orig/src/gstticapturesrc.c ticodecplugin/src/gstticapturesrc.c
+--- ticodecplugin_orig/src/gstticapturesrc.c 2011-08-09 17:03:39.201308305 +0200
++++ ticodecplugin/src/gstticapturesrc.c 2011-08-09 17:02:35.177308274 +0200
+@@ -25,7 +25,6 @@
+ #include <gst/gst.h>
+ #include <string.h>
+ #include <gst/gstmarshal.h>
+-#include <linux/videodev.h>
+ #include <linux/videodev2.h>
+ #include <sys/ioctl.h>
+
+diff -ur ticodecplugin_orig/src/gsttidisplaysink2.c ticodecplugin/src/gsttidisplaysink2.c
+--- ticodecplugin_orig/src/gsttidisplaysink2.c 2011-08-09 17:03:53.329308312 +0200
++++ ticodecplugin/src/gsttidisplaysink2.c 2011-08-09 17:03:11.337308292 +0200
+@@ -28,7 +28,6 @@
+ #include <gst/video/video.h>
+ #include <string.h>
+ #include <gst/gstmarshal.h>
+-#include <linux/videodev.h>
+ #include <linux/videodev2.h>
+ #include <sys/ioctl.h>
+
diff --git a/extras/recipes-ti/gstreamer-ti/gstreamer-ti_svn.bb b/extras/recipes-ti/gstreamer-ti/gstreamer-ti_svn.bb
new file mode 100644
index 00000000..3d260ed5
--- /dev/null
+++ b/extras/recipes-ti/gstreamer-ti/gstreamer-ti_svn.bb
@@ -0,0 +1,26 @@
+require gstreamer-ti.inc
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=c8a292be1d17ba07ecbf7b49049cbf22"
+
+PV = "svnr${SRCREV}"
+
+S = "${WORKDIR}/gstreamer_ti/ti_build/ticodecplugin"
+
+SRCREV = "962"
+
+# apply patches from tracker 1208 to get zero copy support.
+# https://gstreamer.ti.com/gf/project/gstreamer_ti/tracker/?action=TrackerItemEdit&tracker_item_id=1208&start=175
+
+SRC_URI = "svn://gforge.ti.com/svn/gstreamer_ti/trunk;module=gstreamer_ti;proto=https;user=anonymous;pswd='' \
+ file://gstreamer-ti-rc.sh \
+ file://r962-remove-include-videodev.diff \
+ file://gstti-init.service \
+"
+
+# use local loadmodules.sh for these platform
+# TODO: must be removed onces these loadmodules goes in gstreamer.ti.com
+SRC_URI_append_dm365 = " file://loadmodules.sh"
+SRC_URI_append_omapl137 = " file://loadmodules.sh"
+SRC_URI_append_omapl138 = " file://loadmodules.sh "
+SRC_URI_append_omap3 = " file://loadmodules.sh "
+
diff --git a/extras/recipes-ti/hdvpss/ti-hdvpss.inc b/extras/recipes-ti/hdvpss/ti-hdvpss.inc
new file mode 100644
index 00000000..3c99b792
--- /dev/null
+++ b/extras/recipes-ti/hdvpss/ti-hdvpss.inc
@@ -0,0 +1,20 @@
+DESCRIPTION = "TI HDVPSS"
+SECTION = "devel"
+LICENSE = "TI"
+
+require ../includes/ti-paths.inc
+require ../includes/ti-staging.inc
+
+S = "${WORKDIR}/REL.HDVPSS_${PV}"
+
+SRC_URI = "http://install.source.dir.local/REL.HDVPSS.${PV}.zip"
+
+do_compile() {
+ :
+}
+
+do_install() {
+ install -d ${D}${HDVPSS_INSTALL_DIR_RECIPE}
+ cp -pPrf ${S}/* ${D}${HDVPSS_INSTALL_DIR_RECIPE}
+}
+
diff --git a/extras/recipes-ti/hdvpss/ti-hdvpss_01.00.01.27.bb b/extras/recipes-ti/hdvpss/ti-hdvpss_01.00.01.27.bb
new file mode 100644
index 00000000..e3b1c56f
--- /dev/null
+++ b/extras/recipes-ti/hdvpss/ti-hdvpss_01.00.01.27.bb
@@ -0,0 +1,6 @@
+require ti-hdvpss.inc
+
+SRC_URI[md5sum] = "6db908bef3b933dc8cea666564d5d4d8"
+SRC_URI[sha256sum] = "2caa9c859cfe348197e860f07d174a8ab7048d38d6d3a12ec576802122c9e91e"
+
+
diff --git a/extras/recipes-ti/ipc/ti-ipc.inc b/extras/recipes-ti/ipc/ti-ipc.inc
new file mode 100644
index 00000000..8d1b8020
--- /dev/null
+++ b/extras/recipes-ti/ipc/ti-ipc.inc
@@ -0,0 +1,36 @@
+DESCRIPTION = "TI Inter Process Ccommunication (IPC) Mechanisms (for Uni- and Multi- Processor Configurations)"
+HOMEPAGE = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/ipc/index.html"
+
+SECTION = "devel"
+LICENSE = "BSD"
+
+require ../includes/ti-paths.inc
+require ../includes/ti-staging.inc
+require ../includes/ti-eula-unpack.inc
+
+S = "${WORKDIR}/ipc_${PV}"
+
+SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/ipc/${PV}/exports/ipc_setuplinux_${PV}.bin;name=ipcbin"
+
+SRC_URI =+ "file://ipc.pc"
+
+DEPENDS = "ti-sysbios ti-cgt6x ti-xdctools"
+
+BINFILE="ipc_setuplinux_${PV}.bin"
+TI_BIN_UNPK_CMDS="Y: q:workdir:Y"
+
+do_configure() {
+ sed -i -e s:@VERSION@:${PV}:g ${WORKDIR}/ipc.pc
+
+ cp ${WORKDIR}/ipc.pc ${S}
+}
+
+do_install() {
+ install -d ${D}${IPC_INSTALL_DIR_RECIPE}
+ cp -pPrf ${S}/* ${D}${IPC_INSTALL_DIR_RECIPE}
+
+ install -d ${D}/${libdir}/pkgconfig
+ install ${S}/ipc.pc ${D}/${libdir}/pkgconfig/
+}
+
+FILES_ti-ipc-dev = "${libdir}/*"
diff --git a/extras/recipes-ti/ipc/ti-ipc/ipc.pc b/extras/recipes-ti/ipc/ti-ipc/ipc.pc
new file mode 100644
index 00000000..1a8c52df
--- /dev/null
+++ b/extras/recipes-ti/ipc/ti-ipc/ipc.pc
@@ -0,0 +1,8 @@
+prefix=/../../ipc_@VERSION@
+includedir=${prefix}/ti/ipc
+
+Name: TI IPC
+Description: TI ARM-DSP IPC (Inter Processor Communication)
+Version: @VERSION@
+Requires:
+Cflags: -I${includedir}
diff --git a/extras/recipes-ti/ipc/ti-ipc_1.24.00.16.bb b/extras/recipes-ti/ipc/ti-ipc_1.24.00.16.bb
new file mode 100644
index 00000000..e7ae7ef1
--- /dev/null
+++ b/extras/recipes-ti/ipc/ti-ipc_1.24.00.16.bb
@@ -0,0 +1,8 @@
+require ti-ipc.inc
+
+PV = "1_24_00_16"
+
+LIC_FILES_CHKSUM = "file://ipc_${PV}_manifest.html;md5=573f5a5c0448d28bf8db35f438244d7f"
+
+SRC_URI[ipcbin.md5sum] = "d2f7cc82310d555ca039dcd353bd94c5"
+SRC_URI[ipcbin.sha256sum] = "96df7835e920c7dabcd63d30ec8bc2aea7cd0c6197c9fb9ca0f8a9b681aa5396"
diff --git a/extras/recipes-ti/linuxutils/ti-linuxutils.inc b/extras/recipes-ti/linuxutils/ti-linuxutils.inc
new file mode 100644
index 00000000..dba485b8
--- /dev/null
+++ b/extras/recipes-ti/linuxutils/ti-linuxutils.inc
@@ -0,0 +1,93 @@
+DESCRIPTION = "MFP Linux utils for TI ARM/DSP processors"
+SECTION = "devel"
+LICENSE = "GPLv2 & BSD"
+
+BASE_SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/linuxutils/${PV}/exports"
+SRC_URI = "${BASE_SRC_URI}/linuxutils_${PV}.tar.gz "
+
+LIC_FILES_CHKSUM = "file://gpl_2.0.txt;md5=1298794fc2eed3df92a89f3c9d317440"
+
+S = "${WORKDIR}/linuxutils_${PV}"
+
+require recipes-ti/includes/ti-paths.inc
+require recipes-ti/includes/ti-staging.inc
+
+PR = "${MACHINE_KERNEL_PR}"
+
+#This is a kernel module, don't set PR directly
+MACHINE_KERNEL_PR_append = "e"
+
+inherit module
+
+do_compile() {
+ do_make_scripts
+ unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
+
+ case "${SOC_FAMILY}" in
+ "dm365")
+ modules="cmem edma irq";;
+ "omap3")
+ modules="cmem sdma";;
+ "dm355")
+ modules="cmem edma irq";;
+ *)
+ modules="cmem"
+ esac
+
+ for module in $modules ; do
+ cd ${S}/packages/ti/sdo/linuxutils/$module
+ make \
+ LINUXKERNEL_INSTALL_DIR="${STAGING_KERNEL_DIR}" \
+ MVTOOL_PREFIX="${TARGET_PREFIX}" \
+ UCTOOL_PREFIX="${TARGET_PREFIX}" \
+ clean debug release
+ done
+}
+
+do_install () {
+ install -d ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
+ # Install CMEM
+ for module in $(find ${S}/packages/ti/sdo/linuxutils/ -name "*.ko") ; do
+ install -m 0755 $module ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
+ done
+ cd ${S}/packages/ti/sdo/linuxutils/cmem/apps
+ make \
+ LINUXKERNEL_INSTALL_DIR="${STAGING_KERNEL_DIR}" \
+ MVTOOL_PREFIX="${TARGET_PREFIX}" \
+ UCTOOL_PREFIX="${TARGET_PREFIX}" \
+ EXEC_DIR="${D}${installdir}/ti-linuxutils-app/cmem-app" \
+ install
+ # Install EDMA
+ if [ "${SOC_FAMILY}" = "dm365" ] ; then
+ cd ${S}/packages/ti/sdo/linuxutils/edma/apps
+ make \
+ LINUXKERNEL_INSTALL_DIR="${STAGING_KERNEL_DIR}" \
+ MVTOOL_PREFIX="${TARGET_PREFIX}" \
+ UCTOOL_PREFIX="${TARGET_PREFIX}" \
+ EXEC_DIR="${D}${installdir}/ti-linuxutils-app/edma-app" \
+ install
+ fi
+
+ # stage tree - other packages may need this
+ install -d ${D}${LINUXUTILS_INSTALL_DIR_RECIPE}
+ cp -pPrf ${S}/* ${D}${LINUXUTILS_INSTALL_DIR_RECIPE}
+}
+
+
+
+
+PACKAGES =+ " ti-cmem-module \
+ ti-sdma-module \
+ ti-edma-module \
+ ti-irq-module \
+ ti-linuxutils-app"
+
+FILES_ti-cmem-module = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/cmem*.ko"
+FILES_ti-sdma-module = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/sdma*.ko"
+FILES_ti-edma-module = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/edma*.ko"
+FILES_ti-irq-module = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/irq*.ko"
+
+FILES_ti-linuxutils-app = "${installdir}/ti-linuxutils-app/*/*"
+
+INSANE_SKIP_ti-linuxutils-app = "True"
+INHIBIT_PACKAGE_STRIP = "1"
diff --git a/extras/recipes-ti/linuxutils/ti-linuxutils/linuxutils-BKL-fix-2.patch b/extras/recipes-ti/linuxutils/ti-linuxutils/linuxutils-BKL-fix-2.patch
new file mode 100644
index 00000000..1438003c
--- /dev/null
+++ b/extras/recipes-ti/linuxutils/ti-linuxutils/linuxutils-BKL-fix-2.patch
@@ -0,0 +1,22 @@
+From: Koen Kooi <k-kooi@ti.com>
+Subject: linuxutils: fix build with 2.6.37rcX
+
+---
+
+--- /tmp/sdmak.c 2010-12-05 18:43:55.000000000 +0100
++++ linuxutils_2_25_05_11/packages/ti/sdo/linuxutils/sdma/src/module/sdmak.c 2010-12-05 18:48:31.000000000 +0100
+@@ -208,9 +208,12 @@
+ }
+
+ up_read(&current->mm->mmap_sem);
+-
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36)
++ sema_init(&(channels[channel].mutex),1);
++#else
+ init_MUTEX_LOCKED(&(channels[channel].mutex));
+- channels[channel].owner = filp;
++#endif
++ channels[channel].owner = filp;
+
+ if (copy_to_user(argp, &channel, sizeof(channel))) {
+ return -EFAULT;
diff --git a/extras/recipes-ti/linuxutils/ti-linuxutils/linuxutils-BKL-fix.patch b/extras/recipes-ti/linuxutils/ti-linuxutils/linuxutils-BKL-fix.patch
new file mode 100644
index 00000000..29b0a444
--- /dev/null
+++ b/extras/recipes-ti/linuxutils/ti-linuxutils/linuxutils-BKL-fix.patch
@@ -0,0 +1,73 @@
+From: Koen Kooi <k-kooi@ti.com>
+Subject: linuxutils: fix build with 2.6.37rcX
+
+---
+
+--- /tmp/cmemk.c 2010-12-05 18:41:00.000000000 +0100
++++ linuxutils_2_25_05_11/packages/ti/sdo/linuxutils/cmem/src/module/cmemk.c 2010-12-05 18:43:24.000000000 +0100
+@@ -31,6 +31,7 @@
+ #include <linux/seq_file.h>
+ #include <linux/vmalloc.h>
+ #include <linux/sched.h>
++#include <linux/slab.h>
+ #include <asm/cacheflush.h>
+ #include <asm/uaccess.h>
+ #include <asm/pgtable.h>
+@@ -204,7 +205,11 @@
+ "\n\t\t fall back to a heap-based allocation attempt");
+ module_param(useHeapIfPoolUnavailable, int, S_IRUGO);
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36)
++static DEFINE_SEMAPHORE(cmem_mutex);
++#else
+ static DECLARE_MUTEX(cmem_mutex);
++#endif
+
+ /* Describes a pool buffer */
+ typedef struct pool_buffer {
+@@ -243,8 +248,12 @@
+
+ static struct file_operations cmem_fxns = {
+ owner: THIS_MODULE,
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36)
++ unlocked_ioctl: ioctl,
++#else
+ ioctl: ioctl,
+- mmap: mmap,
++#endif
++ mmap: mmap,
+ open: open,
+ release: release
+ };
+--- /tmp/sdmak.c 2010-12-05 18:43:55.000000000 +0100
++++ linuxutils_2_25_05_11/packages/ti/sdo/linuxutils/sdma/src/module/sdmak.c 2010-12-05 18:48:31.000000000 +0100
+@@ -208,9 +208,12 @@
+ }
+
+ up_read(&current->mm->mmap_sem);
+-
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36)
++ sema_init(&(channels[channel].mutex),1);
++#else
+ init_MUTEX_LOCKED(&(channels[channel].mutex));
+- channels[channel].owner = filp;
++#endif
++ channels[channel].owner = filp;
+
+ if (copy_to_user(argp, &channel, sizeof(channel))) {
+ return -EFAULT;
+@@ -286,8 +289,12 @@
+ }
+
+ static struct file_operations fops = {
+- .ioctl = dma_ioctl,
+- .release = dma_release,
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36)
++ .unlocked_ioctl = dma_ioctl,
++#else
++ .ioctl = dma_ioctl,
++#endif
++ .release = dma_release,
+ .owner = THIS_MODULE
+ };
+
diff --git a/extras/recipes-ti/linuxutils/ti-linuxutils_2.26.01.02.bb b/extras/recipes-ti/linuxutils/ti-linuxutils_2.26.01.02.bb
new file mode 100644
index 00000000..2a67e6a4
--- /dev/null
+++ b/extras/recipes-ti/linuxutils/ti-linuxutils_2.26.01.02.bb
@@ -0,0 +1,10 @@
+require ti-linuxutils.inc
+
+SRC_URI += "file://linuxutils-BKL-fix-2.patch"
+
+PE = "1"
+PV = "2_26_01_02"
+
+SRC_URI[md5sum] = "70b4918bc35c1bcfef34d6ba3fbce0c8"
+SRC_URI[sha256sum] = "51266dd928f8d629cd417c869789a6c0d596612120f165619119cbaadfd66ee2"
+
diff --git a/extras/recipes-ti/local-power-manager/ti-local-power-manager.inc b/extras/recipes-ti/local-power-manager/ti-local-power-manager.inc
new file mode 100644
index 00000000..9155c761
--- /dev/null
+++ b/extras/recipes-ti/local-power-manager/ti-local-power-manager.inc
@@ -0,0 +1,133 @@
+DESCRIPTION = "TI Local Power Manager (LPM)"
+HOMEPAGE = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/lpm"
+SECTION = "devel"
+LICENSE = "GPLv2"
+
+LIC_FILES_CHKSUM = "file://gpl_2.0.txt;md5=ebb5c50ab7cab4baeffba14977030c07"
+
+# TODO : Hardcoded path to evm3530 - need to fix when adding omap24xx/dm6446 (other lpm targets)
+
+require ../includes/ti-paths.inc
+require ../includes/ti-staging.inc
+
+PROVIDES = "ti-lpm-module"
+PROVIDES += "ti-lpm-utils"
+
+# This package builds a kernel module, use kernel PR as base and append a local version
+PR = "${MACHINE_KERNEL_PR}"
+PR_append = "e"
+
+S = "${WORKDIR}/local_power_manager_linux_${PV}"
+
+SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/lpm/${PV}/exports/local_power_manager_linux_${PV}.tar.gz;name=lpmtarball"
+
+DEPENDS = "ti-dsplink ti-xdctools"
+DEPENDS += "virtual/kernel"
+
+# SOC_FAMILY configuration
+
+LPMDSPPOWERSOC_omap3 = "omap3530"
+LPMDSPPOWERSOC_dm6446 = "dm6446"
+LPMDSPPOWERSOC ?= "UNDEFINED_LPMDSPPOWERSOC"
+
+XDC_PLATFORM_dm6446 = "ti.platforms.evmDM6446"
+XDC_PLATFORM_omap3 = "ti.platforms.evm3530"
+XDC_PLATFORM ?= "UNDEFINED_XDC_PLATFORM"
+
+do_configure () {
+
+ # Generate a config.bld for XDC
+
+ cat > ${S}/config.bld <<EOF
+
+/* Generated by ti-local-power-manager.inc OE recipe */
+
+var Build = xdc.useModule('xdc.bld.BuildEnvironment');
+
+var GCArmv5T = xdc.useModule('gnu.targets.arm.GCArmv5T');
+GCArmv5T.LONGNAME = "${TARGET_PREFIX}gcc";
+GCArmv5T.rootDir = "${TOOLCHAIN_PATH}";
+GCArmv5T.ccOpts.prefix += " -Wall -fno-strict-aliasing ";
+GCArmv5T.lnkOpts.suffix = GCArmv5T.lnkOpts.suffix.replace("-lstdc++", "");
+GCArmv5T.lnkOpts.suffix += " -lpthread ";
+GCArmv5T.platform = null;
+GCArmv5T.platforms = [
+ "${XDC_PLATFORM}"
+];
+
+/* remove profiles we don't use */
+delete GCArmv5T.profiles["coverage"];
+delete GCArmv5T.profiles["profile"];
+
+Build.targets.\$add(GCArmv5T);
+EOF
+
+}
+
+do_prepsources () {
+
+ # Prepare the tree for rebuiling - generate makefiles and clean
+ XDCPATH=${S} ${XDC_INSTALL_DIR}/xdc .make -PR .
+ XDCPATH=${S} ${XDC_INSTALL_DIR}/xdc clean -PR .
+}
+
+addtask prepsources after do_configure before do_compile
+
+do_compile () {
+
+ # Build the LPM kernel module
+ unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
+ cd ${S}/packages/ti/bios/power/modules/${LPMDSPPOWERSOC}/lpm
+ make \
+ DSPLINK_REPO="${LINK_INSTALL_DIR}" \
+ LINUXKERNEL_INSTALL_DIR="${STAGING_KERNEL_DIR}" \
+ MVTOOL_PREFIX="${TARGET_PREFIX}" \
+ clean default
+
+ # Build the user space library
+ # TODO
+
+ # Build the utilities (lpmON/OFF)
+ cd ${S}
+ XDCPATH=${S} ${XDC_INSTALL_DIR}/xdc -PR .
+}
+
+KERNEL_VERSION = "${@base_read_file('${STAGING_KERNEL_DIR}/kernel-abiversion')}"
+
+do_install () {
+
+ # Install the kernel module
+ install -d ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
+ install -m 0755 ${S}/packages/ti/bios/power/modules/${LPMDSPPOWERSOC}/lpm/*.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
+
+ # Install the Utilities
+ install -d ${D}/${installdir}/ti-lpm-utils
+ install -m 0755 ${S}/packages/ti/bios/power/utils/bin/$(echo ${XDC_PLATFORM} | tr . _)/linux/release/* ${D}/${installdir}/ti-lpm-utils
+
+ # Install/Stage the Source Tree
+ install -d ${D}${LPM_INSTALL_DIR_RECIPE}
+ cp -pPrf ${S}/* ${D}${LPM_INSTALL_DIR_RECIPE}
+}
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+PACKAGES += "ti-lpm-module"
+FILES_ti-lpm-module = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/*lpm*ko"
+RDEPENDS_ti-lpm-module += "ti-dsplink-module"
+RDEPENDS_ti-lpm-module += "update-modules"
+
+pkg_postinst_ti-lpm-module_append () {
+ if [ -n "$D" ]; then
+ exit 1
+ fi
+ depmod -a
+ update-modules || true
+}
+
+pkg_postrm_ti-lpm-module_append () {
+ update-modules || true
+}
+
+PACKAGES += "ti-lpm-utils"
+RDEPENDS_ti-lpm-utils += "ti-lpm-module"
+FILES_ti-lpm-utils = "${installdir}/ti-lpm-utils/*"
+INSANE_SKIP_ti-lpm-utils = "1"
diff --git a/extras/recipes-ti/local-power-manager/ti-local-power-manager/lpm-1_24_01-replace-define-OPT.patch b/extras/recipes-ti/local-power-manager/ti-local-power-manager/lpm-1_24_01-replace-define-OPT.patch
new file mode 100644
index 00000000..120792b8
--- /dev/null
+++ b/extras/recipes-ti/local-power-manager/ti-local-power-manager/lpm-1_24_01-replace-define-OPT.patch
@@ -0,0 +1,24 @@
+diff -uNr local_power_manager_linux_1_24_01_orig/packages/ti/bios/power/modules/dm6446/lpm/Makefile local_power_manager_linux_1_24_01/packages/ti/bios/power/modules/dm6446/lpm/Makefile
+--- local_power_manager_linux_1_24_01_orig/packages/ti/bios/power/modules/dm6446/lpm/Makefile 2009-07-22 23:10:04.000000000 -0500
++++ local_power_manager_linux_1_24_01/packages/ti/bios/power/modules/dm6446/lpm/Makefile 2010-04-16 15:26:14.000000000 -0500
+@@ -54,7 +54,7 @@
+ endif
+
+ MAKE_OPTS = ARCH=arm CROSS_COMPILE=$(MVTOOL_PREFIX)
+-CFLAGS = -DUSE_UDEV -DOS_LINUX -DLINUX_KERNEL \
++CFLAGS = -DUSE_UDEV -DOS_LINUX -DLINUX_KERNEL -DOPT="" \
+ $(LINK_DEFS) $(LINK_INCS) $(LINK_INCS_INTERNAL)
+
+ # Invoke the kernel build system
+diff -uNr local_power_manager_linux_1_24_01_orig/packages/ti/bios/power/modules/omap3530/lpm/Makefile local_power_manager_linux_1_24_01/packages/ti/bios/power/modules/omap3530/lpm/Makefile
+--- local_power_manager_linux_1_24_01_orig/packages/ti/bios/power/modules/omap3530/lpm/Makefile 2009-07-22 23:10:05.000000000 -0500
++++ local_power_manager_linux_1_24_01/packages/ti/bios/power/modules/omap3530/lpm/Makefile 2010-04-16 15:26:38.000000000 -0500
+@@ -54,7 +54,7 @@
+ endif
+
+ MAKE_OPTS = ARCH=arm CROSS_COMPILE=$(MVTOOL_PREFIX)
+-CFLAGS = -DUSE_UDEV -DOS_LINUX -DLINUX_KERNEL \
++CFLAGS = -DUSE_UDEV -DOS_LINUX -DLINUX_KERNEL -DOPT="" \
+ $(LINK_DEFS) $(LINK_INCS) $(LINK_INCS_INTERNAL)
+
+ # Invoke the kernel build system
diff --git a/extras/recipes-ti/local-power-manager/ti-local-power-manager/lpm-BKL-fix.patch b/extras/recipes-ti/local-power-manager/ti-local-power-manager/lpm-BKL-fix.patch
new file mode 100644
index 00000000..4b5a537a
--- /dev/null
+++ b/extras/recipes-ti/local-power-manager/ti-local-power-manager/lpm-BKL-fix.patch
@@ -0,0 +1,72 @@
+From b7e83000f316f5f109b9237fde4d1c576534aa1a Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Tue, 4 Jan 2011 14:21:02 +0100
+Subject: [PATCH] Fix build with 2.6.37rcX
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+---
+ .../bios/power/modules/omap3530/lpm/lpm_driver.c | 12 +++++++++---
+ 1 files changed, 9 insertions(+), 3 deletions(-)
+
+diff --git a/packages/ti/bios/power/modules/omap3530/lpm/lpm_driver.c b/packages/ti/bios/power/modules/omap3530/lpm/lpm_driver.c
+index fa22ea3..4663fc9 100644
+--- a/packages/ti/bios/power/modules/omap3530/lpm/lpm_driver.c
++++ b/packages/ti/bios/power/modules/omap3530/lpm/lpm_driver.c
+@@ -40,6 +40,7 @@
+ #include <asm/semaphore.h>
+ #endif
+ #include <linux/io.h>
++#include <linux/slab.h>
+
+ #include "lpm_driver.h"
+ #include "lpm_dev.h"
+@@ -95,7 +96,7 @@ static int enablevicp = -1;
+ module_param(enablevicp, int, S_IRUGO);
+
+ /* forward declaration of system calls (used by Linux driver) */
+-static int lpm_ioctl (struct inode *inode, struct file *filp,
++static long lpm_ioctl (struct file *filp,
+ unsigned int cmd, unsigned long args);
+ static int lpm_open (struct inode *inode, struct file *filp);
+ static int lpm_release (struct inode *inode, struct file *filp);
+@@ -111,7 +112,7 @@ static void lpm_os_trace (char *fmt, ...);
+
+ static struct file_operations lpm_fops = {
+ .owner = THIS_MODULE,
+- .ioctl = lpm_ioctl,
++ .unlocked_ioctl = lpm_ioctl,
+ .open = lpm_open,
+ .release = lpm_release,
+ };
+@@ -244,7 +245,11 @@ static int __init lpm_init(void)
+ lpm->inst[i].major = MAJOR(lpm->first);
+ lpm->inst[i].minor = MINOR(lpm->first) + i;
+ INIT_LIST_HEAD(&lpm->inst[i].clients);
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,36)
+ init_MUTEX(&lpm->inst[i].sem);
++#else
++ sema_init(&lpm->inst[i].sem,1);
++#endif
+ init_completion(&lpm->inst[i].event);
+ lpm_devAttrs.os_instance = (void *)&lpm->inst[i];
+ LPM_init(i, &lpm->inst[i].lpm, &lpm_devAttrs);
+@@ -320,7 +325,7 @@ fail_02:
+ /*
+ * ======== lpm_ioctl ========
+ */
+-static int lpm_ioctl(struct inode *inode, struct file *filp,
++static long lpm_ioctl(struct file *filp,
+ unsigned int cmd, unsigned long args)
+ {
+ struct LPM_Dev *dev;
+@@ -328,6 +333,7 @@ static int lpm_ioctl(struct inode *inode, struct file *filp,
+ LPM_Client *client;
+ LPM_Status lpmStat = LPM_SOK;
+ int stat = 0;
++ struct inode *inode = filp->f_dentry->d_inode;
+
+ TRACE(KERN_ALERT "--> lpm_ioctl, cmd: 0x%X\n", cmd);
+
+--
+1.6.6.1
+
diff --git a/extras/recipes-ti/local-power-manager/ti-local-power-manager_1.24.02.09.bb b/extras/recipes-ti/local-power-manager/ti-local-power-manager_1.24.02.09.bb
new file mode 100644
index 00000000..759561f3
--- /dev/null
+++ b/extras/recipes-ti/local-power-manager/ti-local-power-manager_1.24.02.09.bb
@@ -0,0 +1,10 @@
+require ti-local-power-manager.inc
+
+PV = "1_24_02_09"
+PE = "1"
+
+SRC_URI += "file://lpm-BKL-fix.patch"
+
+SRC_URI[lpmtarball.md5sum] = "3d05453df26dfc811de04839d74c2f2b"
+SRC_URI[lpmtarball.sha256sum] = "7335959a6217df17289f81839e6c6948f31cc0797ebc5389edef7190ed3ea589"
+
diff --git a/extras/recipes-ti/msp430/ti-msp430-chronos_1.05.00.00.bb b/extras/recipes-ti/msp430/ti-msp430-chronos_1.05.00.00.bb
new file mode 100644
index 00000000..0a48b177
--- /dev/null
+++ b/extras/recipes-ti/msp430/ti-msp430-chronos_1.05.00.00.bb
@@ -0,0 +1,55 @@
+DESCRIPTION = "eZ430 Chronos Tools - MSP430 Development Kit/Watch"
+HOMEPAGE = "http://processors.wiki.ti.com/index.php/EZ430-Chronos"
+LICENSE = "TI-BSD"
+# We can't use the actualy source file, since it has space in its name :(
+LIC_FILES_CHKSUM = "file://eZ430-Chronos_CC_1_1.tcl;md5=59ba6ee0a26650ec660a4e65a9462806"
+
+SECTION = "multimedia"
+
+inherit allarch
+
+PV = "1_05_00_00"
+
+SRC_URI = "http://focus.ti.com/lit/sw/slac388/slac388.zip;name=slac388zip"
+
+SRC_URI[slac388zip.md5sum] = "22d4104a07af584222828fb377793796"
+SRC_URI[slac388zip.sha256sum] = "1c9cd1e36015e8db3b36c98be41907628144b76002b3f76b27fd310f4bd35ad7"
+
+require ../includes/ti-paths.inc
+require ../includes/ti-staging.inc
+require ../includes/ti-eula-unpack.inc
+
+S = "${WORKDIR}/ti/eZ430-Chronos"
+
+BINFILE="Chronos-Setup"
+TI_BIN_UNPK_CMDS="Y:workdir:"
+
+do_unpack_append() {
+ os.system('mv "Texas Instruments" ti')
+}
+
+do_configure() {
+ cp Control\ Center/Chronos\ Control\ Center/eZ430-Chronos_CC_1_1.tcl ${S}
+}
+
+do_compile() {
+ echo "Do Nothing for Now"
+}
+
+do_install() {
+
+ install -d ${D}/${installdir}/ti-msp430-chronos-apps
+ cp -pPrf "${S}"/"Control Center"/* ${D}/${installdir}/ti-msp430-chronos-apps
+
+ # Remove dos formatting
+ dos2unix "${D}/${installdir}/ti-msp430-chronos-apps/Chronos Data Logger"/*
+ dos2unix "${D}/${installdir}/ti-msp430-chronos-apps/Chronos Control Center"/*
+
+ # Should probably also remove hardcoded script reference to tcl8.5
+}
+
+PACKAGES += "ti-msp430-chronos-apps"
+FILES_ti-msp430-chronos-apps = "${installdir}/ti-msp430-chronos-apps/*"
+
+RDEPENDS_ti-msp430-chronos-apps += " tcl tk xdotool"
+RRECOMMENDS_ti-msp430-chronos-apps = "kernel-module-cdc-acm"
diff --git a/extras/recipes-ti/syslink/ti-syslink.inc b/extras/recipes-ti/syslink/ti-syslink.inc
new file mode 100644
index 00000000..04c59c1f
--- /dev/null
+++ b/extras/recipes-ti/syslink/ti-syslink.inc
@@ -0,0 +1,241 @@
+DESCRIPTION = "SYSLINK Inter-Processor Communications (IPC) for TI ARM/DSP processors"
+HOMEPAGE = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/syslink/index.html"
+SECTION = "devel"
+LICENSE = "BSD"
+
+LIC_FILES_CHKSUM = "file://docs/bsd.pdf;md5=9f2edd962cd129f8c24e9ef1bd641029"
+
+# TODO :: multi-machine, add m3 build as well?
+# TODO :: proper staging?
+# TODO :: kernel module examples?
+# TODO :: smarter handling of config.bld
+# TODO :: review XDC parallel make - why not happening automatically?
+# TODO :: smarter suffix management
+
+require ../includes/ti-paths.inc
+require ../includes/ti-staging.inc
+
+PROVIDES = "ti-syslink-module"
+PROVIDES += "ti-syslink-examples"
+
+# This package builds a kernel module, use kernel PR as base and append a local version
+PR = "${MACHINE_KERNEL_PR}"
+PR_append = "a"
+PVExtra = ""
+
+inherit module pkgconfig
+
+S = "${WORKDIR}/syslink_${PV}${PVExtra}"
+
+SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/syslink/${PV}${PVExtra}/exports/syslink_${PV}${PVExtra}.tar.gz;name=syslinktarball \
+ file://syslink.pc \
+ "
+
+DEPENDS = "ti-sysbios ti-xdctools ti-cgt6x ti-ipc ti-cgt470"
+DEPENDS += "virtual/kernel"
+
+#common frameq gateMP heapBufMP heapMemMP knlNotify listMP messageQ notify ringIO ringIO_gpp sharedRegion slaveLoader tilerDaemon
+SYSLINKHLOSSAMPLES = "knlnotify slaveLoader frameq notify"
+#SYSLINKRTOSSAMPLES = "frameq gateMP heapBufMP heapMemMP listMP messageQ notify ringIO ringIO_gpp sharedRegion"
+
+# SOC_FAMILY configuration
+
+SYSLINKPLATFORM_omap3 = "OMAP3530"
+SYSLINKPLATFORM_omapl137 = "OMAPL1XX"
+SYSLINKPLATFORM_omapl138 = "OMAPL1XX"
+SYSLINKPLATFORM_ti816x = "TI81XX"
+SYSLINKPLATFORM_ti814x = "TI81XX"
+SYSLINKPLATFORM ?= "<UNDEFINED_SYSLINKPLATFORM>"
+
+SYSLINKVARIANT_omap3 = "OMAP3530"
+SYSLINKVARIANT_omapl137 = "OMAPL1XX"
+SYSLINKVARIANT_omapl138 = "OMAPL1XX"
+SYSLINKVARIANT_ti816x = "TI816X"
+SYSLINKVARIANT_ti814x = "TI814X"
+SYSLINKVARIANT ?= "<UNDEFINED_SYSLINKVARIANT>"
+
+# COFF/ELF config - omap3 can be coff/elf, omapl only coff, ti816x and ti814x only elf
+
+# this really needs to be a list... in the case of ELF/COFF (and this could use DSPSUFFIX?)
+SYSLINKSUFFIX_omap3 = "x64P"
+SYSLINKSUFFIX_omapl137 = "x674"
+SYSLINKSUFFIX_omapl138 = "x674"
+SYSLINKSUFFIX_ti816x = "xe674"
+SYSLINKSUFFIX_ti814x = "xe674"
+SYSLINKSUFFIX ?= "<UNDEFINED_SYSLINKSUFFIX>"
+
+SYSLINKLOADER_omap3 = "COFF"
+SYSLINKLOADER_omapl137 = "COFF"
+SYSLINKLOADER_omapl138 = "COFF"
+SYSLINKLOADER_ti816x = "ELF"
+SYSLINKLOADER_ti814x = "ELF"
+SYSLINKLOADER ?= "<UNDEFINED_SYSLINKLOADER>"
+
+# Do we really need to configure this? - configured already in config.bld
+XDCTARGETS_omap3 = "ti.targets.C64P"
+XDCTARGETS_omapl137 = "ti.targets.C674"
+XDCTARGETS_omapl138 = "ti.targets.C674"
+# for ti816x and ti814x, we should later also build for ti.targets.arm.elf.M3
+XDCTARGETS_ti816x = "ti.targets.elf.C674 ti.targets.arm.elf.M3"
+XDCTARGETS_ti814x = "ti.targets.elf.C674 ti.targets.arm.elf.M3"
+XDCTARGETS ?= "<UNDEFINED_XDCTARGETS>"
+export XDCTARGETS
+
+# Exported Variable needed by build
+export SYSLINK_ROOT = "${S}/packages/"
+
+export XDCPATH = "${IPC_INSTALL_DIR}/packages;${SYSBIOS_INSTALL_DIR}/packages"
+
+do_configure() {
+ sed -i -e s:@VERSION@:${PV}:g ${WORKDIR}/syslink.pc
+
+ cp ${WORKDIR}/syslink.pc ${S}
+}
+
+do_prepsources () {
+
+ # Prepare the tree for rebuiling - clean and generate interfaces
+ cd ${SYSLINK_ROOT}/ti/syslink
+ ${XDC_INSTALL_DIR}/xdc --jobs=${BB_NUMBER_THREADS} .make -PR .
+ ${XDC_INSTALL_DIR}/xdc --jobs=${BB_NUMBER_THREADS} clean -PR .
+ ${XDC_INSTALL_DIR}/xdc --jobs=${BB_NUMBER_THREADS} .interfaces -PR .
+}
+
+addtask prepsources after do_configure before do_compile
+
+do_compile() {
+ # TODO :: KERNEL_CC, should use for kernel module build?
+ # TODO :: Check the 'unset's
+
+ unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
+
+ do_make_scripts
+
+ # Build the gpp (hlos) kernel space
+ cd ${SYSLINK_ROOT}/ti/syslink/utils/hlos/knl/Linux && make \
+ ARCH="${TARGET_ARCH}" \
+ CROSS_COMPILE="${TARGET_PREFIX}" \
+ SYSLINK_PLATFORM="${SYSLINKPLATFORM}" \
+ SYSLINK_VARIANT="${SYSLINKVARIANT}" \
+ SYSLINK_LOADER="${SYSLINKLOADER}" \
+ SYSLINK_PKGPATH="${IPC_INSTALL_DIR}/packages" \
+ KDIR="${STAGING_KERNEL_DIR}"
+
+# # Build the gpp (hlos) kernel space samples.
+# for sample in ${SYSLINKHLOSSAMPLES}; do
+# cd ${SYSLINK_ROOT}/ti/syslink/samples/hlos/$sample/knl/Linux && make \
+# ARCH="${TARGET_ARCH}" \
+# CROSS_COMPILE="${TARGET_PREFIX}" \
+# SYSLINK_PLATFORM="${SYSLINKPLATFORM}" \
+# SYSLINK_VARIANT="${SYSLINKVARIANT}" \
+# SYSLINK_LOADER="${SYSLINKLOADER}" \
+# SYSLINK_PKGPATH="${IPC_INSTALL_DIR}/packages" \
+# SYSLINK_SDK=EZSDK \
+# KDIR="${STAGING_KERNEL_DIR}"
+# done
+
+ # Build the gpp (hlos) user space
+ cd ${SYSLINK_ROOT}/ti/syslink/utils/hlos/usr/Linux && make \
+ ARCH="${TARGET_ARCH}" \
+ CROSS_COMPILE="${TARGET_PREFIX}" \
+ TOOLCHAIN_PREFIX="${TOOLCHAIN_PATH}/${TARGET_PREFIX}" \
+ SYSLINK_PLATFORM="${SYSLINKPLATFORM}" \
+ SYSLINK_VARIANT="${SYSLINKVARIANT}" \
+ SYSLINK_LOADER="${SYSLINKLOADER}" \
+ SYSLINK_PKGPATH="${IPC_INSTALL_DIR}/packages"
+
+ # Build the gpp (hlos) user space samples
+ # First build the common lib for samples.
+ cd ${SYSLINK_ROOT}/ti/syslink/samples/hlos/common/usr/Linux && make \
+ ARCH="${TARGET_ARCH}" \
+ CROSS_COMPILE="${TARGET_PREFIX}" \
+ TOOLCHAIN_PREFIX="${TOOLCHAIN_PATH}/${TARGET_PREFIX}" \
+ SYSLINK_PLATFORM="${SYSLINKPLATFORM}" \
+ SYSLINK_VARIANT="${SYSLINKVARIANT}" \
+ SYSLINK_LOADER="${SYSLINKLOADER}" \
+ SYSLINK_SDK=EZSDK \
+ SYSLINK_PKGPATH="${IPC_INSTALL_DIR}/packages"
+
+ for sample in ${SYSLINKHLOSSAMPLES}; do
+ cd ${SYSLINK_ROOT}/ti/syslink/samples/hlos/$sample/usr/Linux && make \
+ ARCH="${TARGET_ARCH}" \
+ CROSS_COMPILE="${TARGET_PREFIX}" \
+ TOOLCHAIN_PREFIX="${TOOLCHAIN_PATH}/${TARGET_PREFIX}" \
+ SYSLINK_PLATFORM="${SYSLINKPLATFORM}" \
+ SYSLINK_VARIANT="${SYSLINKVARIANT}" \
+ SYSLINK_LOADER="${SYSLINKLOADER}" \
+ SYSLINK_SDK=EZSDK \
+ SYSLINK_PKGPATH="${IPC_INSTALL_DIR}/packages"
+ done
+
+ # Build the dsp/arm (rtos) code (system and samples)
+ # cd ${SYSLINK_ROOT}/ti/syslink && \
+ # ${XDC_INSTALL_DIR}/xdc --jobs=${BB_NUMBER_THREADS} -PR .
+ export XDCOPTIONS=v
+ cd ${SYSLINK_ROOT}/ti/syslink && \
+ ${XDC_INSTALL_DIR}/xdc -P \
+ `${XDC_INSTALL_DIR}/bin/xdcpkg ${SYSLINK_ROOT}/ti/syslink | grep -v samples`
+ export XDCARGS="profile=debug"
+ cd ${SYSLINK_ROOT}/ti/syslink && \
+ ${XDC_INSTALL_DIR}/xdc --jobs=${BB_NUMBER_THREADS} -P \
+ `${XDC_INSTALL_DIR}/bin/xdcpkg ${SYSLINK_ROOT}/ti/syslink | grep samples`
+}
+
+KERNEL_VERSION = "${@base_read_file('${STAGING_KERNEL_DIR}/kernel-abiversion')}"
+
+do_install () {
+
+ # Install the hlos kernel module
+ install -d ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
+ install -m 0755 ${SYSLINK_ROOT}/ti/syslink/bin/${SYSLINKVARIANT}/syslink.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/
+
+ # Install the hlos example kernel modules and apps
+ install -d ${D}/${installdir}/ti-syslink-examples
+ install -m 0755 ${SYSLINK_ROOT}/ti/syslink/bin/${SYSLINKVARIANT}/samples/* ${D}/${installdir}/ti-syslink-examples/
+
+ # Install the rtos example apps
+ install -d ${D}/${installdir}/ti-syslink-examples/dsp
+ cd ${SYSLINK_ROOT}/ti/syslink/samples/rtos
+ for i in $(find . -name "*.${SYSLINKSUFFIX}" | grep "${SOC_FAMILY}"); do
+ install ${i} ${D}/${installdir}/ti-syslink-examples/dsp/
+ done
+
+ # TODO :: Fixup - library/headers installation - this shouldn't go into the examples directory....
+ # Needs proper staging
+ # Install the library in the filesystem
+ # install -d ${D}/${installdir}/ti-syslink-examples
+ # install -m 0755 ${SYSLINK_ROOT}/ti/syslink/lib/syslink.a ${D}/${installdir}/ti-syslink-examples/
+
+ # Install/Stage the Source Tree
+ install -d ${D}${SYSLINK_INSTALL_DIR_RECIPE}
+ cp -pPrf ${S}/* ${D}${SYSLINK_INSTALL_DIR_RECIPE}
+
+ install -d ${D}/${libdir}/pkgconfig
+ install ${S}/syslink.pc ${D}/${libdir}/pkgconfig/
+}
+
+PACKAGES =+ "ti-syslink-module"
+FILES_ti-syslink-module = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/syslink.ko"
+RDEPENDS_ti-syslink-module += "update-modules"
+
+pkg_postinst_ti-syslink-module () {
+#!/bin/sh
+if [ -n "$D" ]; then
+ exit 1
+fi
+
+depmod -a
+update-modules || true
+}
+
+pkg_postrm_ti-syslink-module () {
+#!/bin/sh
+update-modules || true
+}
+
+PACKAGES =+ "ti-syslink-examples"
+RRECOMMENDS_ti-syslink-examples_append = " ti-syslink-module"
+FILES_ti-syslink-examples = "${installdir}/ti-syslink-examples/*"
+INSANE_SKIP_ti-syslink-examples = "1"
+
+FILES_ti-syslink-dev = "${libdir}/*"
diff --git a/extras/recipes-ti/syslink/ti-syslink/syslink.pc b/extras/recipes-ti/syslink/ti-syslink/syslink.pc
new file mode 100644
index 00000000..c4d720f1
--- /dev/null
+++ b/extras/recipes-ti/syslink/ti-syslink/syslink.pc
@@ -0,0 +1,10 @@
+prefix=/../..//syslink_@VERSION@
+libdir=${prefix}/ti/syslink/lib
+includedir=${prefix}/ti/syslink
+
+Name: TI Syslink
+Description: Syslink ARM-DSP IPC (Inter Processor Communication)
+Version: @VERSION@
+Requires: ipc
+Libs: ${libdir}/syslink.a_release
+Cflags: -I${includedir} -I${includedir}/inc -I${includedir}/utils
diff --git a/extras/recipes-ti/syslink/ti-syslink_2.00.00.78.bb b/extras/recipes-ti/syslink/ti-syslink_2.00.00.78.bb
new file mode 100644
index 00000000..71e96212
--- /dev/null
+++ b/extras/recipes-ti/syslink/ti-syslink_2.00.00.78.bb
@@ -0,0 +1,8 @@
+require ti-syslink.inc
+
+PV = "2_00_00_78"
+PVwithdots = "2.00.00.78"
+
+SRC_URI[syslinktarball.md5sum] = "df7c92cd2cca38fdb38e59e4175aba61"
+SRC_URI[syslinktarball.sha256sum] = "3409d080b08ec1d0bd24a715dbec783f1d52020e452485c165ad64e121548ebc"
+
diff --git a/extras/recipes-ti/xdais/ti-xdais.inc b/extras/recipes-ti/xdais/ti-xdais.inc
new file mode 100644
index 00000000..9514ce6b
--- /dev/null
+++ b/extras/recipes-ti/xdais/ti-xdais.inc
@@ -0,0 +1,21 @@
+DESCRIPTION = "TI eXpress DSP Algorithm Interface Standard (XDAIS) specification"
+HOMEPAGE = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/xdais"
+LICENSE = "GPLv2"
+SECTION = "devel"
+
+LIC_FILES_CHKSUM = "file://xdais_6_26_01_03_manifest.html;md5=a5a675d49db2f658bb98746ec80cda4e"
+
+require ../includes/ti-paths.inc
+require ../includes/ti-staging.inc
+
+PR = "r1"
+
+S = "${WORKDIR}/xdais_${PV}"
+
+SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/xdais/${PV}/exports/xdais_${PV}.tar.gz;name=xdaistarball"
+
+do_install() {
+ install -d ${D}${XDAIS_INSTALL_DIR_RECIPE}
+ cp -pPrf ${S}/* ${D}${XDAIS_INSTALL_DIR_RECIPE}
+}
+
diff --git a/extras/recipes-ti/xdais/ti-xdais_6.26.01.03.bb b/extras/recipes-ti/xdais/ti-xdais_6.26.01.03.bb
new file mode 100644
index 00000000..f8bef79a
--- /dev/null
+++ b/extras/recipes-ti/xdais/ti-xdais_6.26.01.03.bb
@@ -0,0 +1,8 @@
+require ti-xdais.inc
+
+PV = "6_26_01_03"
+
+SRC_URI[xdaistarball.md5sum] = "9b2bea3408254e737ec0d819a031adf6"
+SRC_URI[xdaistarball.sha256sum] = "d7bcbd8bcfe6fdfc5f402e4b125ced6c806dc30bc5296e98d5d43b0b5a237a0d"
+
+