summaryrefslogtreecommitdiffstats
path: root/bsps/powerpc/gen5200/include/bsp/bestcomm
diff options
context:
space:
mode:
Diffstat (limited to 'bsps/powerpc/gen5200/include/bsp/bestcomm')
-rw-r--r--bsps/powerpc/gen5200/include/bsp/bestcomm/bestcomm_api.h460
-rw-r--r--bsps/powerpc/gen5200/include/bsp/bestcomm/bestcomm_glue.h114
-rw-r--r--bsps/powerpc/gen5200/include/bsp/bestcomm/bestcomm_priv.h38
-rw-r--r--bsps/powerpc/gen5200/include/bsp/bestcomm/dma_image.capi.h84
-rw-r--r--bsps/powerpc/gen5200/include/bsp/bestcomm/dma_image.h472
-rw-r--r--bsps/powerpc/gen5200/include/bsp/bestcomm/include/mgt5200/mgt5200.h61
-rw-r--r--bsps/powerpc/gen5200/include/bsp/bestcomm/include/mgt5200/sdma.h153
-rw-r--r--bsps/powerpc/gen5200/include/bsp/bestcomm/include/ppctypes.h43
-rw-r--r--bsps/powerpc/gen5200/include/bsp/bestcomm/task_api/bestcomm_api_mem.h67
-rw-r--r--bsps/powerpc/gen5200/include/bsp/bestcomm/task_api/bestcomm_cntrl.h282
-rw-r--r--bsps/powerpc/gen5200/include/bsp/bestcomm/task_api/tasksetup_bdtable.h86
-rw-r--r--bsps/powerpc/gen5200/include/bsp/bestcomm/task_api/tasksetup_general.h624
12 files changed, 2484 insertions, 0 deletions
diff --git a/bsps/powerpc/gen5200/include/bsp/bestcomm/bestcomm_api.h b/bsps/powerpc/gen5200/include/bsp/bestcomm/bestcomm_api.h
new file mode 100644
index 0000000000..f1fa22d1d5
--- /dev/null
+++ b/bsps/powerpc/gen5200/include/bsp/bestcomm/bestcomm_api.h
@@ -0,0 +1,460 @@
+#ifndef __BESTCOMM_API_H
+#define __BESTCOMM_API_H 1
+
+/******************************************************************************
+*
+* Copyright (c) 2004 Freescale Semiconductor, Inc.
+*
+* 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.
+*
+******************************************************************************/
+
+/*!
+ * \file bestcomm_api.h
+ *
+ * Bestcomm_api.h is the only header necessary for inclusion by user
+ * code. The include path the C compiler searches to find .h files
+ * should contain bestcomm/capi and one of bestcomm/code_dma/image_*.
+ * This second entry selects which set of BestComm tasks will be used.
+ * Of course the appropriate files in image_* must also be compiled and
+ * linked.
+ */
+
+#include <rtems.h>
+
+#include "include/ppctypes.h"
+#include "include/mgt5200/sdma.h"
+#include "task_api/tasksetup_bdtable.h"
+#include "task_api/bestcomm_cntrl.h"
+#include "task_api/bestcomm_api_mem.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/*!
+ * \brief TaskSetup() debugging
+ *
+ * Define this macro as follows for debugging printf()s to see
+ * what the API receives and sets from the TaskSetupParamSet_t
+ * struct. Implemented in capi/task_api/tasksetup_general.h.
+ *
+ * \verbatim
+ * >0 : print basic debug messages
+ * >=10: also print C-API interface variables
+ * >=20: also print task API interface variables
+ * else: do nothing
+ * \endverbatim
+ */
+#define DEBUG_BESTCOMM_API 0
+
+/*!
+ * \brief Maximum number of tasks in the system.
+ * This number is hardware-dependent and not user configuration.
+ */
+#define MAX_TASKS 16
+
+/*
+ * This may need to be removed in certain implementations.
+ */
+#ifndef NULL
+# define NULL ((void *)0)
+#endif /* NULL */
+
+typedef sint8 TaskId;
+typedef sint32 BDIdx;
+
+/*
+ * Special "task IDs" for interrupt handling API functions
+ */
+/*! \brief Debug interrupt "task ID" */
+#define DEBUG_INTR_ID SDMA_INT_BIT_DBG
+
+/*! \brief TEA interrupt "task ID" */
+#define TEA_INTR_ID SDMA_INT_BIT_TEA
+
+/*! \brief Task start autostart enable */
+#define TASK_AUTOSTART_ENABLE 1
+
+/*! \brief Task start autostart disable */
+#define TASK_AUTOSTART_DISABLE 0
+
+/*! \brief Task start interrupt enable */
+#define TASK_INTERRUPT_ENABLE 1
+
+/*! \brief Task start interrupt disable */
+#define TASK_INTERRUPT_DISABLE 0
+
+/*
+ * Buffer descriptor flags to pass to TaskBDAssign().
+ */
+/*! \brief Transmit frame done */
+#define TASK_BD_TFD (1 << SDMA_DRD_BIT_TFD)
+
+/*! \brief Interrupt on frame done */
+#define TASK_BD_INT (1 << SDMA_DRD_BIT_INT)
+
+/*!
+ * \brief Data transfer size
+ */
+typedef enum {
+ SZ_FLEX = 3, /*!< invalid for TaskSetupParamSet_t */
+ SZ_UINT8 = 1, /*!< 1-byte */
+ SZ_UINT16 = 2, /*!< 2-byte */
+ SZ_UINT32 = 4 /*!< 4-byte */
+} Sz_t;
+
+/*!
+ * \brief API error codes
+ */
+typedef enum {
+ TASK_ERR_NO_ERR = -1, /*!< No error */
+ TASK_ERR_NO_INTR = TASK_ERR_NO_ERR,
+ /*!< No interrupt */
+ TASK_ERR_INVALID_ARG = -2, /*!< Invalid function argument */
+ TASK_ERR_BD_RING_FULL = -3, /*!< Buffer descriptor ring full*/
+ TASK_ERR_API_ALREADY_INITIALIZED
+ = -4, /*!< API has already been initialized */
+ TASK_ERR_SIZE_TOO_LARGE = -5, /*!< Buffer descriptor cannot support size parameter */
+ TASK_ERR_BD_RING_EMPTY = -6, /*!< Buffer descriptor ring is empty*/
+ TASK_ERR_BD_BUSY = -7, /*!< The buffer descriptor is in use
+ by the BestComm */
+ TASK_ERR_TASK_RUNNING = -8 /*!< The task is running. */
+
+} TaskErr_t;
+
+/*!
+ * \brief BestComm initiators
+ *
+ * These are assigned by TaskSetup().
+ */
+typedef enum {
+
+ INITIATOR_ALWAYS = 0,
+ INITIATOR_SCTMR_0 = 1,
+ INITIATOR_SCTMR_1 = 2,
+ INITIATOR_FEC_RX = 3,
+ INITIATOR_FEC_TX = 4,
+ INITIATOR_ATA_RX = 5,
+ INITIATOR_ATA_TX = 6,
+ INITIATOR_SCPCI_RX = 7,
+ INITIATOR_SCPCI_TX = 8,
+ INITIATOR_PSC3_RX = 9,
+ INITIATOR_PSC3_TX = 10,
+ INITIATOR_PSC2_RX = 11,
+ INITIATOR_PSC2_TX = 12,
+ INITIATOR_PSC1_RX = 13,
+ INITIATOR_PSC1_TX = 14,
+ INITIATOR_SCTMR_2 = 15,
+
+ INITIATOR_SCLPC = 16,
+ INITIATOR_PSC5_RX = 17,
+ INITIATOR_PSC5_TX = 18,
+ INITIATOR_PSC4_RX = 19,
+ INITIATOR_PSC4_TX = 20,
+ INITIATOR_I2C2_RX = 21,
+ INITIATOR_I2C2_TX = 22,
+ INITIATOR_I2C1_RX = 23,
+ INITIATOR_I2C1_TX = 24,
+ INITIATOR_PSC6_RX = 25,
+ INITIATOR_PSC6_TX = 26,
+ INITIATOR_IRDA_RX = 25,
+ INITIATOR_IRDA_TX = 26,
+ INITIATOR_SCTMR_3 = 27,
+ INITIATOR_SCTMR_4 = 28,
+ INITIATOR_SCTMR_5 = 29,
+ INITIATOR_SCTMR_6 = 30,
+ INITIATOR_SCTMR_7 = 31
+
+} MPC5200Initiator_t;
+
+/*!
+ * \brief Parameters for TaskSetup()
+ *
+ * All parameters can be hard-coded by the task API. Hard-coded values
+ * will be changed in the struct passed to TaskSetup() for the user to
+ * examine later.
+ */
+typedef struct {
+ uint32 NumBD; /*!< Number of buffer descriptors */
+
+ union {
+ uint32 MaxBuf; /*!< Maximum buffer size */
+ uint32 NumBytes; /*!< Number of bytes to transfer */
+ } Size; /*!< Buffer size union for BD and non-BD tasks */
+
+ MPC5200Initiator_t
+ Initiator; /*!< BestComm initiator (ignored if hard-wired) */
+ uint32 StartAddrSrc; /*!< Address of the DMA source (e.g. a FIFO) */
+ sint16 IncrSrc; /*!< Amount to increment source pointer */
+ Sz_t SzSrc; /*!< Size of source data access */
+ uint32 StartAddrDst; /*!< Address of the DMA destination (e.g. a FIFO) */
+ sint16 IncrDst; /*!< Amount to increment data pointer */
+ Sz_t SzDst; /*!< Size of destination data access */
+} TaskSetupParamSet_t;
+
+/*!
+ * \brief Parameters for TaskDebug()
+ *
+ * TaskDebug() and the contents of this data structure are yet to be
+ * determined.
+ */
+typedef struct {
+ int dummy; /* Some compilers don't like empty struct typedefs */
+} TaskDebugParamSet_t;
+
+/*!
+ * \brief Generic buffer descriptor.
+ *
+ * It is generally used as a pointer which should be cast to one of the
+ * other BD types based on the number of buffers per descriptor.
+ */
+typedef struct {
+ uint32 Status; /*!< Status and length bits */
+} TaskBD_t;
+
+/*!
+ * \brief Single buffer descriptor.
+ */
+typedef struct {
+ uint32 Status; /*!< Status and length bits */
+ uint32 DataPtr[1]; /*!< Pointer to data buffer */
+} TaskBD1_t;
+
+/*!
+ * \brief Dual buffer descriptor.
+ */
+typedef struct {
+ uint32 Status; /*!< Status and length bits */
+ uint32 DataPtr[2]; /*!< Pointer to data buffers */
+} TaskBD2_t;
+
+
+
+/***************************
+ * Start of API Prototypes
+ ***************************/
+
+#include "bestcomm_priv.h"
+#include "dma_image.capi.h"
+
+/*!
+ * \brief Initialize a single task.
+ * \param TaskName Type of task to initialize. E.g. PCI transmit,
+ * ethernet receive, general purpose dual-pointer.
+ * Values expected can be found in the TaskName_t
+ * enum defined in dma_image.capi.h.
+ * \param TaskSetupParams Task-specific parameters. The user must fill out
+ * the pertinent parts of a TaskSetupParamSet_t
+ * data structure.
+ * \returns TaskId task identification token which is a required
+ * parameter for most other API functions.
+ *
+ * This function returns a task identification token which is a required
+ * parameter for most other API functions.
+ *
+ * Certain values of the structure pointed to by TaskParams are set
+ * as a side-effect based on task type. These may be examined after
+ * a successful call to TaskSetup(). User-specified values may be
+ * overridden.
+ *
+ * TaskId TaskSetup( TaskName_t TaskName,
+ * TaskSetupParamSet_t *TaskSetupParams );
+ */
+#define TaskSetupHelper(TaskName, TaskSetupParams) \
+ TaskSetup_ ## TaskName (TaskName ## _api, TaskSetupParams)
+#define TaskSetup(TaskName, TaskSetupParams) \
+ TaskSetupHelper(TaskName, TaskSetupParams)
+
+const char *TaskVersion(void);
+
+int TasksInitAPI(uint8 *MBarRef);
+
+int TasksInitAPI_VM(uint8 *MBarRef, uint8 *MBarPhys);
+
+void TasksLoadImage(sdma_regs *sdma);
+int TasksAttachImage(sdma_regs *sdma);
+
+int TaskStart(TaskId taskId, uint32 autoStartEnable,
+ TaskId autoStartTask, uint32 intrEnable);
+int TaskStop(TaskId taskId);
+static int TaskStatus(TaskId taskId);
+BDIdx TaskBDAssign(TaskId taskId, void *buffer0, void *buffer1,
+ int size, uint32 bdFlags);
+BDIdx TaskBDRelease(TaskId taskId);
+BDIdx TaskBDReset(TaskId taskId);
+static TaskBD_t *TaskGetBD(TaskId taskId, BDIdx bd);
+static TaskBD_t *TaskGetBDRing(TaskId taskId);
+int TaskDebug(TaskId taskId, TaskDebugParamSet_t *paramSet);
+static int TaskIntClear(TaskId taskId);
+static TaskId TaskIntStatus(TaskId taskId);
+static int TaskIntPending(TaskId taskId);
+static TaskId TaskIntSource(void);
+static uint16 TaskBDInUse(TaskId taskId);
+
+
+/*!
+ * \brief Get the enable/disable status of a task.
+ * \param taskId Task handle passed back from a successful TaskSetup()
+ * \returns Boolean true indicates enabled or false indicates disabled
+ * or invalid taskId.
+ */
+static inline int TaskStatus(TaskId taskId)
+{
+ return SDMA_TASK_STATUS(SDMA_TCR, taskId) & 0x8000;
+}
+
+/*!
+ * \brief Return a pointer to a buffer descriptor at index BDIdx
+ * \param taskId Task handle passed back from a successful TaskSetup()
+ * \param bd Buffer descriptor handle returned by
+ * TaskBDAssign() or TaskBDRelease().
+ * \returns Pointer to the requested buffer descriptor or NULL on error.
+ *
+ * The returned pointer should be cast to the appropriate buffer
+ * descriptor type, TaskBD1_t or TaskBD2_t.
+ */
+static inline TaskBD_t *TaskGetBD(TaskId taskId, BDIdx bd)
+{
+ void *bdTab;
+
+ bdTab = TaskBDIdxTable[taskId].BDTablePtr;
+ if (TaskBDIdxTable[taskId].numPtr == 1) {
+ return (TaskBD_t *)&(((TaskBD1_t *)bdTab)[bd]);
+ } else {
+ return (TaskBD_t *)&(((TaskBD2_t *)bdTab)[bd]);
+ }
+}
+
+/*!
+ * \brief Return a pointer to the first buffer descriptor in the ring.
+ * \param taskId Task handle passed back from a successful TaskSetup()
+ * \returns Pointer to the array of buffer descriptors making up the
+ * ring or NULL on error.
+ *
+ * A device driver author may choose to use this in lieu of
+ * TaskBDAssign()/TaskBDRelease() to get direct access to the
+ * BD ring with the warning that the underlying data structure may change.
+ * Use at one's own discretion.
+ */
+static inline TaskBD_t *TaskGetBDRing(TaskId taskId)
+{
+ return (TaskBD_t *) TaskBDIdxTable[taskId].BDTablePtr;
+}
+
+/*!
+ * \brief Clear the interrupt for a given BestComm task.
+ * \param taskId Task handle passed back from a successful TaskSetup()
+ * \returns TASK_ERR_NO_ERR (which is not really an error) for success
+ */
+static inline int TaskIntClear(TaskId taskId)
+{
+ SDMA_CLEAR_IEVENT(SDMA_INT_PEND, taskId);
+ return TASK_ERR_NO_ERR; /* success */
+}
+
+/*!
+ * \brief Get the interrupt status for a given task.
+ * \param taskId Task handle passed back from a successful TaskSetup()
+ * \returns TASK_ERR_NO_INTR (which is not really an error) for no interrupt
+ * pending, taskId for a regular interrupt, DEBUG_INTR_ID for
+ * a debug interrupt and TEA_INTR_ID for a TEA interrupt.
+ * \b Note: TaskIntStatus() may return 0, but this means that that
+ * taskId 0 is interrupt pending.
+ */
+static inline TaskId TaskIntStatus(TaskId taskId)
+{
+ uint32 pending;
+
+ pending = SDMA_INT_PENDING(SDMA_INT_PEND, SDMA_INT_MASK);
+
+ if (SDMA_INT_TEST(pending, taskId)) {
+ return taskId;
+ } else if (SDMA_INT_TEST(pending, DEBUG_INTR_ID)) {
+ return DEBUG_INTR_ID;
+ } else if (SDMA_INT_TEST(pending, TEA_INTR_ID)) {
+ return TEA_INTR_ID;
+ }
+
+ return TASK_ERR_NO_INTR;
+}
+
+/*!
+ * \brief Get the interrupt pending status for a given task.
+ * \param taskId Task handle passed back from a successful TaskSetup()
+ * \returns 0 if task does not have a pending interrupt. 1 if the task
+ * has an interrupt pending.
+ */
+static inline int TaskIntPending(TaskId taskId)
+{
+ uint32 pending;
+
+ pending = SDMA_INT_PENDING(SDMA_INT_PEND, SDMA_INT_MASK);
+ if (SDMA_INT_TEST(pending, taskId)) {
+ return 1;
+ } else {
+ return 0;
+ }
+}
+
+/*!
+ * \brief Returns the task ID of an interrupting BestComm task.
+ * \returns TASK_ERR_NO_INTR (which is not really an error) for no interrupt
+ * pending or the taskId of the interrupting task.
+ *
+ * The user must query TaskIntStatus() to discover if this is a debug
+ * or TEA interrupt. This function is designed for use by an operating
+ * system interrupt handler.
+ */
+static inline TaskId TaskIntSource(void)
+{
+ uint32 pending;
+ uint32 mask = 1 << (MAX_TASKS - 1);
+ TaskId i;
+
+ pending = SDMA_INT_PENDING(SDMA_INT_PEND, SDMA_INT_MASK);
+
+ if (SDMA_INT_TEST(pending, SDMA_INT_BIT_TEA)) {
+ return (TaskId)SDMA_TEA_SOURCE(SDMA_INT_PEND);
+ }
+
+ for (i = (MAX_TASKS - 1); i >= 0; --i, mask >>= 1) {
+ if (pending & mask) {
+ return i;
+ }
+ }
+
+ return TASK_ERR_NO_INTR;
+}
+
+/*!
+ * \brief Get a count of in-use buffer descriptors.
+ * \param taskId Task handle passed back from a successful TaskSetup()
+ * \returns Count of the current number of BDs in use by the given task.
+ */
+static inline uint16 TaskBDInUse(TaskId taskId)
+{
+ return TaskBDIdxTable[taskId].currBDInUse;
+}
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __BESTCOMM_API_H */
diff --git a/bsps/powerpc/gen5200/include/bsp/bestcomm/bestcomm_glue.h b/bsps/powerpc/gen5200/include/bsp/bestcomm/bestcomm_glue.h
new file mode 100644
index 0000000000..18827b77c7
--- /dev/null
+++ b/bsps/powerpc/gen5200/include/bsp/bestcomm/bestcomm_glue.h
@@ -0,0 +1,114 @@
+/*===============================================================*\
+| Project: RTEMS generic MPC5200 BSP |
++-----------------------------------------------------------------+
+| Copyright (c) 2004-2005 |
+| Embedded Brains GmbH |
+| Obere Lagerstr. 30 |
+| D-82178 Puchheim |
+| Germany |
+| rtems@embedded-brains.de |
++-----------------------------------------------------------------+
+| The license and distribution terms for this file may be |
+| found in the file LICENSE in this distribution or at |
+| |
+| http://www.rtems.org/license/LICENSE. |
+| |
++-----------------------------------------------------------------+
+| this file declares glue functions to the Freescale BestComm API |
+\*===============================================================*/
+#ifndef _BESTCOMM_GLUE_H
+#define _BESTCOMM_GLUE_H
+
+#include <rtems/irq-extension.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/*=========================================================================*\
+| Function: |
+\*-------------------------------------------------------------------------*/
+void bestcomm_glue_irq_enable
+(
+/*-------------------------------------------------------------------------*\
+| Purpose: |
+| enable interrupt for given task number |
++---------------------------------------------------------------------------+
+| Input Parameters: |
+\*-------------------------------------------------------------------------*/
+ int bestcomm_taskno /* task number to enable */
+ );
+/*-------------------------------------------------------------------------*\
+| Return Value: |
+| none |
+\*=========================================================================*/
+
+/*=========================================================================*\
+| Function: |
+\*-------------------------------------------------------------------------*/
+void bestcomm_glue_irq_disable
+(
+/*-------------------------------------------------------------------------*\
+| Purpose: |
+| disable interrupt for given task number |
++---------------------------------------------------------------------------+
+| Input Parameters: |
+\*-------------------------------------------------------------------------*/
+ int bestcomm_taskno /* task number to disable */
+ );
+/*-------------------------------------------------------------------------*\
+| Return Value: |
+| none |
+\*=========================================================================*/
+
+/*=========================================================================*\
+| Function: |
+\*-------------------------------------------------------------------------*/
+void bestcomm_glue_irq_install
+(
+/*-------------------------------------------------------------------------*\
+| Purpose: |
+| install given function as bestcomm interrupt handler |
++---------------------------------------------------------------------------+
+| Input Parameters: |
+\*-------------------------------------------------------------------------*/
+ int bestcomm_taskno, /* task number for handler */
+ rtems_interrupt_handler handler, /* function to call */
+ void *arg
+ );
+/*-------------------------------------------------------------------------*\
+| Return Value: |
+| none |
+\*=========================================================================*/
+
+/*=========================================================================*\
+| Function: |
+\*-------------------------------------------------------------------------*/
+void bestcomm_glue_init
+(
+/*-------------------------------------------------------------------------*\
+| Purpose: |
+| initialize the bestcomm module (if not yet done): |
+| - load code |
+| - initialize registers |
+| - initialize bus arbiter |
+| - initialize interrupt control |
++---------------------------------------------------------------------------+
+| Input Parameters: |
+\*-------------------------------------------------------------------------*/
+ void /* none */
+ );
+/*-------------------------------------------------------------------------*\
+| Return Value: |
+| none |
+\*=========================================================================*/
+
+void *bestcomm_malloc(size_t size);
+
+void bestcomm_free(void *ptr);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* _BESTCOMM_GLUE_H */
diff --git a/bsps/powerpc/gen5200/include/bsp/bestcomm/bestcomm_priv.h b/bsps/powerpc/gen5200/include/bsp/bestcomm/bestcomm_priv.h
new file mode 100644
index 0000000000..102fc082cb
--- /dev/null
+++ b/bsps/powerpc/gen5200/include/bsp/bestcomm/bestcomm_priv.h
@@ -0,0 +1,38 @@
+#ifndef __BESTCOMM_PRIV_H
+#define __BESTCOMM_PRIV_H 1
+
+/******************************************************************************
+*
+* Copyright (c) 2004 Freescale Semiconductor, Inc.
+*
+* 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.
+*
+******************************************************************************/
+
+/*
+ * Global variables necessitated by the TaskSetup_*() location in
+ * separate files from the main code and the inline functions. These are
+ * private data structures that should not be manipulated by API users.
+ */
+
+extern TaskBDIdxTable_t TaskBDIdxTable[MAX_TASKS];
+extern int TaskRunning[MAX_TASKS];
+extern sint64 MBarPhysOffsetGlobal;
+
+#endif /* __BESTCOMM_PRIV_H */
diff --git a/bsps/powerpc/gen5200/include/bsp/bestcomm/dma_image.capi.h b/bsps/powerpc/gen5200/include/bsp/bestcomm/dma_image.capi.h
new file mode 100644
index 0000000000..6b07cbcb2a
--- /dev/null
+++ b/bsps/powerpc/gen5200/include/bsp/bestcomm/dma_image.capi.h
@@ -0,0 +1,84 @@
+#ifndef __DMA_IMAGE_CAPI_H
+#define __DMA_IMAGE_CAPI_H 1
+
+/******************************************************************************
+*
+* Copyright (c) 2004 Freescale Semiconductor, Inc.
+*
+* 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.
+*
+******************************************************************************/
+
+
+#include "dma_image.h"
+
+typedef enum {
+ TASK_PCI_TX,
+ TASK_PCI_RX,
+ TASK_FEC_TX,
+ TASK_FEC_RX,
+ TASK_LPC,
+ TASK_ATA,
+ TASK_CRC16_DP_0,
+ TASK_CRC16_DP_1,
+ TASK_GEN_DP_0,
+ TASK_GEN_DP_1,
+ TASK_GEN_DP_2,
+ TASK_GEN_DP_3,
+ TASK_GEN_TX_BD,
+ TASK_GEN_RX_BD,
+ TASK_GEN_DP_BD_0,
+ TASK_GEN_DP_BD_1
+} TaskName_t;
+
+TaskId TaskSetup_TASK_PCI_TX (TASK_PCI_TX_api_t *TaskAPI,
+ TaskSetupParamSet_t *TaskSetupParams);
+TaskId TaskSetup_TASK_PCI_RX (TASK_PCI_RX_api_t *TaskAPI,
+ TaskSetupParamSet_t *TaskSetupParams);
+TaskId TaskSetup_TASK_FEC_TX (TASK_FEC_TX_api_t *TaskAPI,
+ TaskSetupParamSet_t *TaskSetupParams);
+TaskId TaskSetup_TASK_FEC_RX (TASK_FEC_RX_api_t *TaskAPI,
+ TaskSetupParamSet_t *TaskSetupParams);
+TaskId TaskSetup_TASK_LPC (TASK_LPC_api_t *TaskAPI,
+ TaskSetupParamSet_t *TaskSetupParams);
+TaskId TaskSetup_TASK_ATA (TASK_ATA_api_t *TaskAPI,
+ TaskSetupParamSet_t *TaskSetupParams);
+TaskId TaskSetup_TASK_CRC16_DP_0(TASK_CRC16_DP_0_api_t *TaskAPI,
+ TaskSetupParamSet_t *TaskSetupParams);
+TaskId TaskSetup_TASK_CRC16_DP_1(TASK_CRC16_DP_1_api_t *TaskAPI,
+ TaskSetupParamSet_t *TaskSetupParams);
+TaskId TaskSetup_TASK_GEN_DP_0 (TASK_GEN_DP_0_api_t *TaskAPI,
+ TaskSetupParamSet_t *TaskSetupParams);
+TaskId TaskSetup_TASK_GEN_DP_1 (TASK_GEN_DP_1_api_t *TaskAPI,
+ TaskSetupParamSet_t *TaskSetupParams);
+TaskId TaskSetup_TASK_GEN_DP_2 (TASK_GEN_DP_2_api_t *TaskAPI,
+ TaskSetupParamSet_t *TaskSetupParams);
+TaskId TaskSetup_TASK_GEN_DP_3 (TASK_GEN_DP_3_api_t *TaskAPI,
+ TaskSetupParamSet_t *TaskSetupParams);
+TaskId TaskSetup_TASK_GEN_TX_BD (TASK_GEN_TX_BD_api_t *TaskAPI,
+ TaskSetupParamSet_t *TaskSetupParams);
+TaskId TaskSetup_TASK_GEN_RX_BD (TASK_GEN_RX_BD_api_t *TaskAPI,
+ TaskSetupParamSet_t *TaskSetupParams);
+TaskId TaskSetup_TASK_GEN_DP_BD_0(TASK_GEN_DP_BD_0_api_t *TaskAPI,
+ TaskSetupParamSet_t *TaskSetupParams);
+TaskId TaskSetup_TASK_GEN_DP_BD_1(TASK_GEN_DP_BD_1_api_t *TaskAPI,
+ TaskSetupParamSet_t *TaskSetupParams);
+
+#endif /* __DMA_IMAGE_CAPI_H */
+
diff --git a/bsps/powerpc/gen5200/include/bsp/bestcomm/dma_image.h b/bsps/powerpc/gen5200/include/bsp/bestcomm/dma_image.h
new file mode 100644
index 0000000000..1f8b86cded
--- /dev/null
+++ b/bsps/powerpc/gen5200/include/bsp/bestcomm/dma_image.h
@@ -0,0 +1,472 @@
+#ifndef __DMA_IMAGE_H
+#define __DMA_IMAGE_H 1
+
+/******************************************************************************
+*
+* Copyright (c) 2004 Freescale Semiconductor, Inc.
+*
+* 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.
+*
+******************************************************************************/
+
+
+#include "include/ppctypes.h"
+
+void init_dma_image_TASK_PCI_TX(uint8 *vMem_taskBar, sint64 vMemOffset);
+void init_dma_image_TASK_PCI_RX(uint8 *vMem_taskBar, sint64 vMemOffset);
+void init_dma_image_TASK_FEC_TX(uint8 *vMem_taskBar, sint64 vMemOffset);
+void init_dma_image_TASK_FEC_RX(uint8 *vMem_taskBar, sint64 vMemOffset);
+void init_dma_image_TASK_LPC(uint8 *vMem_taskBar, sint64 vMemOffset);
+void init_dma_image_TASK_ATA(uint8 *vMem_taskBar, sint64 vMemOffset);
+void init_dma_image_TASK_CRC16_DP_0(uint8 *vMem_taskBar, sint64 vMemOffset);
+void init_dma_image_TASK_CRC16_DP_1(uint8 *vMem_taskBar, sint64 vMemOffset);
+void init_dma_image_TASK_GEN_DP_0(uint8 *vMem_taskBar, sint64 vMemOffset);
+void init_dma_image_TASK_GEN_DP_1(uint8 *vMem_taskBar, sint64 vMemOffset);
+void init_dma_image_TASK_GEN_DP_2(uint8 *vMem_taskBar, sint64 vMemOffset);
+void init_dma_image_TASK_GEN_DP_3(uint8 *vMem_taskBar, sint64 vMemOffset);
+void init_dma_image_TASK_GEN_TX_BD(uint8 *vMem_taskBar, sint64 vMemOffset);
+void init_dma_image_TASK_GEN_RX_BD(uint8 *vMem_taskBar, sint64 vMemOffset);
+void init_dma_image_TASK_GEN_DP_BD_0(uint8 *vMem_taskBar, sint64 vMemOffset);
+void init_dma_image_TASK_GEN_DP_BD_1(uint8 *vMem_taskBar, sint64 vMemOffset);
+
+/* MBAR_TASK_TABLE is the first address of task table */
+#ifndef MBAR_TASK_TABLE
+#define MBAR_TASK_TABLE 0xf0008000UL
+#endif
+
+/* MBAR_DMA_FREE is the first free address after task table */
+#define MBAR_DMA_FREE MBAR_TASK_TABLE + 0x00001500UL
+
+/* TASK_BAR is the first address of the Entry table */
+#define TASK_BAR MBAR_TASK_TABLE + 0x00000000UL
+#define TASK_BAR_OFFSET 0x00000000UL
+
+typedef struct task_info0 {
+ volatile uint32 TaskNum;
+ volatile uint32 *PtrStartTDT;
+ volatile uint32 *PtrEndTDT;
+ volatile uint32 *PtrVarTab;
+ volatile uint32 *PtrFDT;
+ volatile uint32 *PtrCSave;
+ volatile uint32 NumDRD;
+ volatile uint32 *DRD[7];
+ volatile uint32 NumVar;
+ volatile uint32 *var;
+ volatile uint32 NumInc;
+ volatile uint32 *inc;
+ volatile uint8 *TaskPragma;
+ volatile uint32 *AddrDstFIFO;
+ volatile sint16 *IncrBytes;
+ volatile uint32 *AddrPktSizeReg;
+ volatile sint16 *IncrSrc;
+ volatile uint32 *AddrSCStatusReg;
+ volatile uint32 *Bytes;
+ volatile uint32 *IterExtra;
+ volatile uint32 *StartAddrSrc;
+} TASK_PCI_TX_api_t;
+extern TASK_PCI_TX_api_t *TASK_PCI_TX_api;
+
+typedef struct task_info1 {
+ volatile uint32 TaskNum;
+ volatile uint32 *PtrStartTDT;
+ volatile uint32 *PtrEndTDT;
+ volatile uint32 *PtrVarTab;
+ volatile uint32 *PtrFDT;
+ volatile uint32 *PtrCSave;
+ volatile uint32 NumDRD;
+ volatile uint32 *DRD[5];
+ volatile uint32 NumVar;
+ volatile uint32 *var;
+ volatile uint32 NumInc;
+ volatile uint32 *inc;
+ volatile uint8 *TaskPragma;
+ volatile uint32 *AddrPktSizeReg;
+ volatile sint16 *IncrBytes;
+ volatile uint32 *AddrSrcFIFO;
+ volatile sint16 *IncrDst;
+ volatile uint32 *Bytes;
+ volatile uint32 *IterExtra;
+ volatile uint32 *StartAddrDst;
+} TASK_PCI_RX_api_t;
+extern TASK_PCI_RX_api_t *TASK_PCI_RX_api;
+
+typedef struct task_info2 {
+ volatile uint32 TaskNum;
+ volatile uint32 *PtrStartTDT;
+ volatile uint32 *PtrEndTDT;
+ volatile uint32 *PtrVarTab;
+ volatile uint32 *PtrFDT;
+ volatile uint32 *PtrCSave;
+ volatile uint32 NumDRD;
+ volatile uint32 *DRD[22];
+ volatile uint32 NumVar;
+ volatile uint32 *var;
+ volatile uint32 NumInc;
+ volatile uint32 *inc;
+ volatile uint8 *TaskPragma;
+ volatile uint32 *AddrDRD;
+ volatile uint32 AddrDRDIdx;
+ volatile sint16 *IncrBytes;
+ volatile uint32 *AddrDstFIFO;
+ volatile sint16 *IncrSrc;
+ volatile uint32 *AddrEnable;
+ volatile sint16 *IncrSrcMA;
+ volatile uint32 *BDTableBase;
+ volatile uint32 *BDTableLast;
+ volatile uint32 *BDTableStart;
+ volatile uint32 *Bytes;
+} TASK_FEC_TX_api_t;
+extern TASK_FEC_TX_api_t *TASK_FEC_TX_api;
+
+typedef struct task_info3 {
+ volatile uint32 TaskNum;
+ volatile uint32 *PtrStartTDT;
+ volatile uint32 *PtrEndTDT;
+ volatile uint32 *PtrVarTab;
+ volatile uint32 *PtrFDT;
+ volatile uint32 *PtrCSave;
+ volatile uint32 NumDRD;
+ volatile uint32 *DRD[13];
+ volatile uint32 NumVar;
+ volatile uint32 *var;
+ volatile uint32 NumInc;
+ volatile uint32 *inc;
+ volatile uint8 *TaskPragma;
+ volatile uint32 *AddrEnable;
+ volatile sint16 *IncrBytes;
+ volatile uint32 *AddrSrcFIFO;
+ volatile sint16 *IncrDst;
+ volatile uint32 *BDTableBase;
+ volatile sint16 *IncrDstMA;
+ volatile uint32 *BDTableLast;
+ volatile uint32 *BDTableStart;
+ volatile uint32 *Bytes;
+} TASK_FEC_RX_api_t;
+extern TASK_FEC_RX_api_t *TASK_FEC_RX_api;
+
+typedef struct task_info4 {
+ volatile uint32 TaskNum;
+ volatile uint32 *PtrStartTDT;
+ volatile uint32 *PtrEndTDT;
+ volatile uint32 *PtrVarTab;
+ volatile uint32 *PtrFDT;
+ volatile uint32 *PtrCSave;
+ volatile uint32 NumDRD;
+ volatile uint32 *DRD[4];
+ volatile uint32 NumVar;
+ volatile uint32 *var;
+ volatile uint32 NumInc;
+ volatile uint32 *inc;
+ volatile uint8 *TaskPragma;
+ volatile uint32 *Bytes;
+ volatile sint16 *IncrBytes;
+ volatile uint32 *IterExtra;
+ volatile sint16 *IncrDst;
+ volatile sint16 *IncrDstMA;
+ volatile sint16 *IncrSrc;
+ volatile uint32 *StartAddrDst;
+ volatile sint16 *IncrSrcMA;
+ volatile uint32 *StartAddrSrc;
+} TASK_LPC_api_t;
+extern TASK_LPC_api_t *TASK_LPC_api;
+
+typedef struct task_info5 {
+ volatile uint32 TaskNum;
+ volatile uint32 *PtrStartTDT;
+ volatile uint32 *PtrEndTDT;
+ volatile uint32 *PtrVarTab;
+ volatile uint32 *PtrFDT;
+ volatile uint32 *PtrCSave;
+ volatile uint32 NumDRD;
+ volatile uint32 *DRD[7];
+ volatile uint32 NumVar;
+ volatile uint32 *var;
+ volatile uint32 NumInc;
+ volatile uint32 *inc;
+ volatile uint8 *TaskPragma;
+ volatile uint32 *AddrEnable;
+ volatile sint16 *IncrBytes;
+ volatile uint32 *BDTableBase;
+ volatile sint16 *IncrDst;
+ volatile uint32 *BDTableLast;
+ volatile sint16 *IncrSrc;
+ volatile uint32 *BDTableStart;
+ volatile uint32 *Bytes;
+} TASK_ATA_api_t;
+extern TASK_ATA_api_t *TASK_ATA_api;
+
+typedef struct task_info6 {
+ volatile uint32 TaskNum;
+ volatile uint32 *PtrStartTDT;
+ volatile uint32 *PtrEndTDT;
+ volatile uint32 *PtrVarTab;
+ volatile uint32 *PtrFDT;
+ volatile uint32 *PtrCSave;
+ volatile uint32 NumDRD;
+ volatile uint32 *DRD[9];
+ volatile uint32 NumVar;
+ volatile uint32 *var;
+ volatile uint32 NumInc;
+ volatile uint32 *inc;
+ volatile uint8 *TaskPragma;
+ volatile uint32 *Bytes;
+ volatile sint16 *IncrBytes;
+ volatile uint32 *IterExtra;
+ volatile sint16 *IncrDst;
+ volatile sint16 *IncrDstMA;
+ volatile sint16 *IncrSrc;
+ volatile uint32 *StartAddrDst;
+ volatile sint16 *IncrSrcMA;
+ volatile uint32 *StartAddrSrc;
+} TASK_CRC16_DP_0_api_t;
+extern TASK_CRC16_DP_0_api_t *TASK_CRC16_DP_0_api;
+
+typedef struct task_info7 {
+ volatile uint32 TaskNum;
+ volatile uint32 *PtrStartTDT;
+ volatile uint32 *PtrEndTDT;
+ volatile uint32 *PtrVarTab;
+ volatile uint32 *PtrFDT;
+ volatile uint32 *PtrCSave;
+ volatile uint32 NumDRD;
+ volatile uint32 *DRD[9];
+ volatile uint32 NumVar;
+ volatile uint32 *var;
+ volatile uint32 NumInc;
+ volatile uint32 *inc;
+ volatile uint8 *TaskPragma;
+ volatile uint32 *Bytes;
+ volatile sint16 *IncrBytes;
+ volatile uint32 *IterExtra;
+ volatile sint16 *IncrDst;
+ volatile sint16 *IncrDstMA;
+ volatile sint16 *IncrSrc;
+ volatile uint32 *StartAddrDst;
+ volatile sint16 *IncrSrcMA;
+ volatile uint32 *StartAddrSrc;
+} TASK_CRC16_DP_1_api_t;
+extern TASK_CRC16_DP_1_api_t *TASK_CRC16_DP_1_api;
+
+typedef struct task_info8 {
+ volatile uint32 TaskNum;
+ volatile uint32 *PtrStartTDT;
+ volatile uint32 *PtrEndTDT;
+ volatile uint32 *PtrVarTab;
+ volatile uint32 *PtrFDT;
+ volatile uint32 *PtrCSave;
+ volatile uint32 NumDRD;
+ volatile uint32 *DRD[4];
+ volatile uint32 NumVar;
+ volatile uint32 *var;
+ volatile uint32 NumInc;
+ volatile uint32 *inc;
+ volatile uint8 *TaskPragma;
+ volatile uint32 *Bytes;
+ volatile sint16 *IncrBytes;
+ volatile uint32 *IterExtra;
+ volatile sint16 *IncrDst;
+ volatile sint16 *IncrDstMA;
+ volatile sint16 *IncrSrc;
+ volatile uint32 *StartAddrDst;
+ volatile sint16 *IncrSrcMA;
+ volatile uint32 *StartAddrSrc;
+} TASK_GEN_DP_0_api_t;
+extern TASK_GEN_DP_0_api_t *TASK_GEN_DP_0_api;
+
+typedef struct task_info9 {
+ volatile uint32 TaskNum;
+ volatile uint32 *PtrStartTDT;
+ volatile uint32 *PtrEndTDT;
+ volatile uint32 *PtrVarTab;
+ volatile uint32 *PtrFDT;
+ volatile uint32 *PtrCSave;
+ volatile uint32 NumDRD;
+ volatile uint32 *DRD[4];
+ volatile uint32 NumVar;
+ volatile uint32 *var;
+ volatile uint32 NumInc;
+ volatile uint32 *inc;
+ volatile uint8 *TaskPragma;
+ volatile uint32 *Bytes;
+ volatile sint16 *IncrBytes;
+ volatile uint32 *IterExtra;
+ volatile sint16 *IncrDst;
+ volatile sint16 *IncrDstMA;
+ volatile sint16 *IncrSrc;
+ volatile uint32 *StartAddrDst;
+ volatile sint16 *IncrSrcMA;
+ volatile uint32 *StartAddrSrc;
+} TASK_GEN_DP_1_api_t;
+extern TASK_GEN_DP_1_api_t *TASK_GEN_DP_1_api;
+
+typedef struct task_info10 {
+ volatile uint32 TaskNum;
+ volatile uint32 *PtrStartTDT;
+ volatile uint32 *PtrEndTDT;
+ volatile uint32 *PtrVarTab;
+ volatile uint32 *PtrFDT;
+ volatile uint32 *PtrCSave;
+ volatile uint32 NumDRD;
+ volatile uint32 *DRD[4];
+ volatile uint32 NumVar;
+ volatile uint32 *var;
+ volatile uint32 NumInc;
+ volatile uint32 *inc;
+ volatile uint8 *TaskPragma;
+ volatile uint32 *Bytes;
+ volatile sint16 *IncrBytes;
+ volatile uint32 *IterExtra;
+ volatile sint16 *IncrDst;
+ volatile sint16 *IncrDstMA;
+ volatile sint16 *IncrSrc;
+ volatile uint32 *StartAddrDst;
+ volatile sint16 *IncrSrcMA;
+ volatile uint32 *StartAddrSrc;
+} TASK_GEN_DP_2_api_t;
+extern TASK_GEN_DP_2_api_t *TASK_GEN_DP_2_api;
+
+typedef struct task_info11 {
+ volatile uint32 TaskNum;
+ volatile uint32 *PtrStartTDT;
+ volatile uint32 *PtrEndTDT;
+ volatile uint32 *PtrVarTab;
+ volatile uint32 *PtrFDT;
+ volatile uint32 *PtrCSave;
+ volatile uint32 NumDRD;
+ volatile uint32 *DRD[4];
+ volatile uint32 NumVar;
+ volatile uint32 *var;
+ volatile uint32 NumInc;
+ volatile uint32 *inc;
+ volatile uint8 *TaskPragma;
+ volatile uint32 *Bytes;
+ volatile sint16 *IncrBytes;
+ volatile uint32 *IterExtra;
+ volatile sint16 *IncrDst;
+ volatile sint16 *IncrDstMA;
+ volatile sint16 *IncrSrc;
+ volatile uint32 *StartAddrDst;
+ volatile sint16 *IncrSrcMA;
+ volatile uint32 *StartAddrSrc;
+} TASK_GEN_DP_3_api_t;
+extern TASK_GEN_DP_3_api_t *TASK_GEN_DP_3_api;
+
+typedef struct task_info12 {
+ volatile uint32 TaskNum;
+ volatile uint32 *PtrStartTDT;
+ volatile uint32 *PtrEndTDT;
+ volatile uint32 *PtrVarTab;
+ volatile uint32 *PtrFDT;
+ volatile uint32 *PtrCSave;
+ volatile uint32 NumDRD;
+ volatile uint32 *DRD[8];
+ volatile uint32 NumVar;
+ volatile uint32 *var;
+ volatile uint32 NumInc;
+ volatile uint32 *inc;
+ volatile uint8 *TaskPragma;
+ volatile uint32 *AddrDstFIFO;
+ volatile sint16 *IncrBytes;
+ volatile uint32 *AddrEnable;
+ volatile sint16 *IncrSrc;
+ volatile uint32 *BDTableBase;
+ volatile sint16 *IncrSrcMA;
+ volatile uint32 *BDTableLast;
+ volatile uint32 *BDTableStart;
+ volatile uint32 *Bytes;
+} TASK_GEN_TX_BD_api_t;
+extern TASK_GEN_TX_BD_api_t *TASK_GEN_TX_BD_api;
+
+typedef struct task_info13 {
+ volatile uint32 TaskNum;
+ volatile uint32 *PtrStartTDT;
+ volatile uint32 *PtrEndTDT;
+ volatile uint32 *PtrVarTab;
+ volatile uint32 *PtrFDT;
+ volatile uint32 *PtrCSave;
+ volatile uint32 NumDRD;
+ volatile uint32 *DRD[7];
+ volatile uint32 NumVar;
+ volatile uint32 *var;
+ volatile uint32 NumInc;
+ volatile uint32 *inc;
+ volatile uint8 *TaskPragma;
+ volatile uint32 *AddrEnable;
+ volatile sint16 *IncrBytes;
+ volatile uint32 *AddrSrcFIFO;
+ volatile sint16 *IncrDst;
+ volatile uint32 *BDTableBase;
+ volatile uint32 *BDTableLast;
+ volatile uint32 *BDTableStart;
+ volatile uint32 *Bytes;
+} TASK_GEN_RX_BD_api_t;
+extern TASK_GEN_RX_BD_api_t *TASK_GEN_RX_BD_api;
+
+typedef struct task_info14 {
+ volatile uint32 TaskNum;
+ volatile uint32 *PtrStartTDT;
+ volatile uint32 *PtrEndTDT;
+ volatile uint32 *PtrVarTab;
+ volatile uint32 *PtrFDT;
+ volatile uint32 *PtrCSave;
+ volatile uint32 NumDRD;
+ volatile uint32 *DRD[7];
+ volatile uint32 NumVar;
+ volatile uint32 *var;
+ volatile uint32 NumInc;
+ volatile uint32 *inc;
+ volatile uint8 *TaskPragma;
+ volatile uint32 *AddrEnable;
+ volatile sint16 *IncrBytes;
+ volatile uint32 *BDTableBase;
+ volatile sint16 *IncrDst;
+ volatile uint32 *BDTableLast;
+ volatile sint16 *IncrSrc;
+ volatile uint32 *BDTableStart;
+ volatile uint32 *Bytes;
+} TASK_GEN_DP_BD_0_api_t;
+extern TASK_GEN_DP_BD_0_api_t *TASK_GEN_DP_BD_0_api;
+
+typedef struct task_info15 {
+ volatile uint32 TaskNum;
+ volatile uint32 *PtrStartTDT;
+ volatile uint32 *PtrEndTDT;
+ volatile uint32 *PtrVarTab;
+ volatile uint32 *PtrFDT;
+ volatile uint32 *PtrCSave;
+ volatile uint32 NumDRD;
+ volatile uint32 *DRD[7];
+ volatile uint32 NumVar;
+ volatile uint32 *var;
+ volatile uint32 NumInc;
+ volatile uint32 *inc;
+ volatile uint8 *TaskPragma;
+ volatile uint32 *AddrEnable;
+ volatile sint16 *IncrBytes;
+ volatile uint32 *BDTableBase;
+ volatile sint16 *IncrDst;
+ volatile uint32 *BDTableLast;
+ volatile sint16 *IncrSrc;
+ volatile uint32 *BDTableStart;
+ volatile uint32 *Bytes;
+} TASK_GEN_DP_BD_1_api_t;
+extern TASK_GEN_DP_BD_1_api_t *TASK_GEN_DP_BD_1_api;
+
+
+#endif /* __DMA_IMAGE_H */
diff --git a/bsps/powerpc/gen5200/include/bsp/bestcomm/include/mgt5200/mgt5200.h b/bsps/powerpc/gen5200/include/bsp/bestcomm/include/mgt5200/mgt5200.h
new file mode 100644
index 0000000000..9e4b94cd10
--- /dev/null
+++ b/bsps/powerpc/gen5200/include/bsp/bestcomm/include/mgt5200/mgt5200.h
@@ -0,0 +1,61 @@
+#ifndef __MGT5200_MGT5200_H
+#define __MGT5200_MGT5200_H
+
+/******************************************************************************
+*
+* Copyright (c) 2004 Freescale Semiconductor, Inc.
+*
+* 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.
+*
+******************************************************************************/
+
+#define MBAR_CS 0x0000
+#define MBAR_SDRAM 0x0100
+#define MBAR_CDM 0x0200
+#define MBAR_LPC 0x0300
+#define MBAR_SCTMR 0x0400
+#define MBAR_INT_CTRL 0x0500
+#define MBAR_GPTIMER 0x0600
+#define MBAR_SLTIMER 0x0700
+#define MBAR_RTCLOCK 0x0800
+#define MBAR_MSCAN 0x0900
+#define MBAR_GPIO_STD 0x0B00
+#define MBAR_GPIO_WKUP 0x0C00
+#define MBAR_XCPCI 0x0D00
+#define MBAR_SPI 0x0F00
+#define MBAR_USB 0x1000
+#define MBAR_SDMA 0x1200
+#define MBAR_BDLC 0x1300
+#define MBAR_IR 0x1400
+#define MBAR_XLB_ARB 0x1F00
+#define MBAR_PSC1 0x2000
+#define MBAR_PSC2 0x2200
+#define MBAR_PSC3 0x2400
+#define MBAR_PSC4 0x2600
+#define MBAR_PSC5 0x2800
+#define MBAR_PSC6 0x2C00
+#define MBAR_IRDA 0x2C00
+#define MBAR_ETHERNET 0x3000
+#define MBAR_SCPCI 0x3800
+#define MBAR_ATA 0x3A00
+#define MBAR_SCLPC 0x3C00
+#define MBAR_I2C 0x3D00
+#define MBAR_SRAM 0x8000
+
+#endif /* __MGT5200_MGT5200_H */
diff --git a/bsps/powerpc/gen5200/include/bsp/bestcomm/include/mgt5200/sdma.h b/bsps/powerpc/gen5200/include/bsp/bestcomm/include/mgt5200/sdma.h
new file mode 100644
index 0000000000..52d84777ad
--- /dev/null
+++ b/bsps/powerpc/gen5200/include/bsp/bestcomm/include/mgt5200/sdma.h
@@ -0,0 +1,153 @@
+#ifndef __MGT5200_SDMA_H
+#define __MGT5200_SDMA_H
+
+/******************************************************************************
+*
+* Copyright (c) 2004 Freescale Semiconductor, Inc.
+*
+* 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.
+*
+******************************************************************************/
+
+typedef struct sdma_register_set {
+ volatile uint32 taskBar; /* MBAR_SDMA + 0x00 sdTpb */
+ volatile uint32 currentPointer; /* MBAR_SDMA + 0x04 sdMdeComplex */
+ volatile uint32 endPointer; /* MBAR_SDMA + 0x08 sdMdeComplex */
+ volatile uint32 variablePointer; /* MBAR_SDMA + 0x0c sdMdeComplex */
+
+ volatile uint8 IntVect1; /* MBAR_SDMA + 0x10 sdPtd */
+ volatile uint8 IntVect2; /* MBAR_SDMA + 0x11 sdPtd */
+ volatile uint16 PtdCntrl; /* MBAR_SDMA + 0x12 sdPtd */
+
+ volatile uint32 IntPend; /* MBAR_SDMA + 0x14 sdPtd */
+ volatile uint32 IntMask; /* MBAR_SDMA + 0x18 sdPtd */
+
+ volatile uint32 TCR01; /* MBAR_SDMA + 0x1c sdPtd */
+ volatile uint32 TCR23; /* MBAR_SDMA + 0x20 sdPtd */
+ volatile uint32 TCR45; /* MBAR_SDMA + 0x24 sdPtd */
+ volatile uint32 TCR67; /* MBAR_SDMA + 0x28 sdPtd */
+ volatile uint32 TCR89; /* MBAR_SDMA + 0x2c sdPtd */
+ volatile uint32 TCRAB; /* MBAR_SDMA + 0x30 sdPtd */
+ volatile uint32 TCRCD; /* MBAR_SDMA + 0x34 sdPtd */
+ volatile uint32 TCREF; /* MBAR_SDMA + 0x38 sdPtd */
+
+ volatile uint8 IPR0; /* MBAR_SDMA + 0x3c sdPtd */
+ volatile uint8 IPR1; /* MBAR_SDMA + 0x3d sdPtd */
+ volatile uint8 IPR2; /* MBAR_SDMA + 0x3e sdPtd */
+ volatile uint8 IPR3; /* MBAR_SDMA + 0x3f sdPtd */
+ volatile uint8 IPR4; /* MBAR_SDMA + 0x40 sdPtd */
+ volatile uint8 IPR5; /* MBAR_SDMA + 0x41 sdPtd */
+ volatile uint8 IPR6; /* MBAR_SDMA + 0x42 sdPtd */
+ volatile uint8 IPR7; /* MBAR_SDMA + 0x43 sdPtd */
+ volatile uint8 IPR8; /* MBAR_SDMA + 0x44 sdPtd */
+ volatile uint8 IPR9; /* MBAR_SDMA + 0x45 sdPtd */
+ volatile uint8 IPR10; /* MBAR_SDMA + 0x46 sdPtd */
+ volatile uint8 IPR11; /* MBAR_SDMA + 0x47 sdPtd */
+ volatile uint8 IPR12; /* MBAR_SDMA + 0x48 sdPtd */
+ volatile uint8 IPR13; /* MBAR_SDMA + 0x49 sdPtd */
+ volatile uint8 IPR14; /* MBAR_SDMA + 0x4a sdPtd */
+ volatile uint8 IPR15; /* MBAR_SDMA + 0x4b sdPtd */
+ volatile uint8 IPR16; /* MBAR_SDMA + 0x4c sdPtd */
+ volatile uint8 IPR17; /* MBAR_SDMA + 0x4d sdPtd */
+ volatile uint8 IPR18; /* MBAR_SDMA + 0x4e sdPtd */
+ volatile uint8 IPR19; /* MBAR_SDMA + 0x4f sdPtd */
+ volatile uint8 IPR20; /* MBAR_SDMA + 0x50 sdPtd */
+ volatile uint8 IPR21; /* MBAR_SDMA + 0x51 sdPtd */
+ volatile uint8 IPR22; /* MBAR_SDMA + 0x52 sdPtd */
+ volatile uint8 IPR23; /* MBAR_SDMA + 0x53 sdPtd */
+ volatile uint8 IPR24; /* MBAR_SDMA + 0x54 sdPtd */
+ volatile uint8 IPR25; /* MBAR_SDMA + 0x55 sdPtd */
+ volatile uint8 IPR26; /* MBAR_SDMA + 0x56 sdPtd */
+ volatile uint8 IPR27; /* MBAR_SDMA + 0x57 sdPtd */
+ volatile uint8 IPR28; /* MBAR_SDMA + 0x58 sdPtd */
+ volatile uint8 IPR29; /* MBAR_SDMA + 0x59 sdPtd */
+ volatile uint8 IPR30; /* MBAR_SDMA + 0x5a sdPtd */
+ volatile uint8 IPR31; /* MBAR_SDMA + 0x5b sdPtd */
+
+ volatile uint32 cReqSelect; /* MBAR_SDMA + 0x5c sdPtd */
+ volatile uint32 taskSize0; /* MBAR_SDMA + 0x60 sdPtd */
+ volatile uint32 taskSize1; /* MBAR_SDMA + 0x64 sdPtd */
+ volatile uint32 MDEDebug; /* MBAR_SDMA + 0x68 sdMdeComplex */
+ volatile uint32 ADSDebug; /* MBAR_SDMA + 0x6c sdAdsTop */
+ volatile uint32 Value1; /* MBAR_SDMA + 0x70 sdDbg */
+ volatile uint32 Value2; /* MBAR_SDMA + 0x74 sdDbg */
+ volatile uint32 Control; /* MBAR_SDMA + 0x78 sdDbg */
+ volatile uint32 Status; /* MBAR_SDMA + 0x7c sdDbg */
+ volatile uint32 PTDDebug; /* MBAR_SDMA + 0x80 sdPtd */
+} sdma_regs;
+
+#define SDMA_PTDCNTRL_TI 0x8000
+#define SDMA_PTDCNTRL_TEA 0x4000
+#define SDMA_PTDCNTRL_HE 0x2000
+#define SDMA_PTDCNTRL_PE 0x0001
+
+#define SDMA_CREQSELECT_REQ31_MASK (~0xC0000000UL)
+#define SDMA_CREQSELECT_REQ30_MASK (~0x30000000UL)
+#define SDMA_CREQSELECT_REQ29_MASK (~0x0C000000UL)
+#define SDMA_CREQSELECT_REQ28_MASK (~0x03000000UL)
+#define SDMA_CREQSELECT_REQ27_MASK (~0x00C00000UL)
+#define SDMA_CREQSELECT_REQ26_MASK (~0x00300000UL)
+#define SDMA_CREQSELECT_REQ25_MASK (~0x000C0000UL)
+#define SDMA_CREQSELECT_REQ24_MASK (~0x00030000UL)
+#define SDMA_CREQSELECT_REQ23_MASK (~0x0000C000UL)
+#define SDMA_CREQSELECT_REQ22_MASK (~0x00003000UL)
+#define SDMA_CREQSELECT_REQ21_MASK (~0x00000C00UL)
+#define SDMA_CREQSELECT_REQ20_MASK (~0x00000300UL)
+#define SDMA_CREQSELECT_REQ19_MASK (~0x000000C0UL)
+#define SDMA_CREQSELECT_REQ18_MASK (~0x00000030UL)
+#define SDMA_CREQSELECT_REQ17_MASK (~0x0000000CUL)
+#define SDMA_CREQSELECT_REQ16_MASK (~0x00000003UL)
+
+#define SDMA_CREQSELECT_REQ31_ALWAYS31 0xC0000000UL
+#define SDMA_CREQSELECT_REQ30_ALWAYS30 0x30000000UL
+#define SDMA_CREQSELECT_REQ29_ALWAYS29 0x0C000000UL
+#define SDMA_CREQSELECT_REQ28_ALWAYS28 0x03000000UL
+#define SDMA_CREQSELECT_REQ27_ALWAYS27 0x00C00000UL
+#define SDMA_CREQSELECT_REQ26_ALWAYS26 0x00300000UL
+#define SDMA_CREQSELECT_REQ25_ALWAYS25 0x000C0000UL
+#define SDMA_CREQSELECT_REQ24_ALWAYS24 0x00030000UL
+#define SDMA_CREQSELECT_REQ23_ALWAYS23 0x0000C000UL
+#define SDMA_CREQSELECT_REQ22_ALWAYS22 0x00003000UL
+#define SDMA_CREQSELECT_REQ21_ALWAYS21 0x00000C00UL
+#define SDMA_CREQSELECT_REQ20_ALWAYS20 0x00000300UL
+#define SDMA_CREQSELECT_REQ19_ALWAYS19 0x000000C0UL
+#define SDMA_CREQSELECT_REQ18_ALWAYS18 0x00000030UL
+#define SDMA_CREQSELECT_REQ17_ALWAYS17 0x0000000CUL
+#define SDMA_CREQSELECT_REQ16_ALWAYS16 0x00000003UL
+
+#define SDMA_CREQSELECT_REQ31_SCTIMER7 0x00000000UL
+#define SDMA_CREQSELECT_REQ30_SCTIMER6 0x00000000UL
+#define SDMA_CREQSELECT_REQ29_SCTIMER5 0x00000000UL
+#define SDMA_CREQSELECT_REQ28_SCTIMER4 0x00000000UL
+#define SDMA_CREQSELECT_REQ27_SCTIMER3 0x00000000UL
+#define SDMA_CREQSELECT_REQ26_PSC6_TX 0x00000000UL
+#define SDMA_CREQSELECT_REQ25_PSC6_RX 0x00000000UL
+#define SDMA_CREQSELECT_REQ24_I2C1_TX 0x00000000UL
+#define SDMA_CREQSELECT_REQ23_I2C1_RX 0x00000000UL
+#define SDMA_CREQSELECT_REQ22_I2C2_TX 0x00000000UL
+#define SDMA_CREQSELECT_REQ21_I2C2_RX 0x00000000UL
+#define SDMA_CREQSELECT_REQ20_PSC4_TX 0x00000000UL
+#define SDMA_CREQSELECT_REQ19_PSC4_RX 0x00000000UL
+#define SDMA_CREQSELECT_REQ18_PSC5_TX 0x00000000UL
+#define SDMA_CREQSELECT_REQ17_PSC5_RX 0x00000000UL
+#define SDMA_CREQSELECT_REQ16_LP 0x00000000UL
+
+#define SDMA_CREQSELECT_ALWAYS30 0xC0000000UL
+
+#endif /* __MGT5200_SDMA_H */
diff --git a/bsps/powerpc/gen5200/include/bsp/bestcomm/include/ppctypes.h b/bsps/powerpc/gen5200/include/bsp/bestcomm/include/ppctypes.h
new file mode 100644
index 0000000000..ff2aed1997
--- /dev/null
+++ b/bsps/powerpc/gen5200/include/bsp/bestcomm/include/ppctypes.h
@@ -0,0 +1,43 @@
+#ifndef __PPCTYPES_H
+#define __PPCTYPES_H
+
+/******************************************************************************
+*
+* Copyright (c) 2004 Freescale Semiconductor, Inc.
+*
+* 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.
+*
+******************************************************************************/
+
+typedef unsigned char uint8;
+typedef unsigned short uint16;
+typedef unsigned long uint32;
+typedef unsigned long long uint64;
+
+typedef signed char sint8;
+typedef signed short sint16;
+typedef signed long sint32;
+typedef signed long long sint64;
+
+typedef volatile unsigned char reg8;
+typedef volatile unsigned short reg16;
+typedef volatile unsigned long reg32;
+typedef volatile unsigned long long reg64;
+
+#endif /* __PPCTYPES_H */
diff --git a/bsps/powerpc/gen5200/include/bsp/bestcomm/task_api/bestcomm_api_mem.h b/bsps/powerpc/gen5200/include/bsp/bestcomm/task_api/bestcomm_api_mem.h
new file mode 100644
index 0000000000..dc529d6a22
--- /dev/null
+++ b/bsps/powerpc/gen5200/include/bsp/bestcomm/task_api/bestcomm_api_mem.h
@@ -0,0 +1,67 @@
+#ifndef __TASK_API_BESTCOMM_API_MEM_H
+#define __TASK_API_BESTCOMM_API_MEM_H 1
+
+/******************************************************************************
+*
+* Copyright (c) 2004 Freescale Semiconductor, Inc.
+*
+* 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.
+*
+******************************************************************************/
+
+#include "../include/mgt5200/mgt5200.h"
+
+/*
+ * An extern global variable is used here for the MBAR since it must
+ * be passed into the API for processes that use virtual memory.
+ */
+extern uint8 *MBarGlobal;
+
+#define SDMA_TASK_BAR (MBarGlobal+MBAR_SDMA+0x000)
+#define SDMA_INT_PEND (MBarGlobal+MBAR_SDMA+0x014)
+#define SDMA_INT_MASK (MBarGlobal+MBAR_SDMA+0x018)
+#define SDMA_TCR (MBarGlobal+MBAR_SDMA+0x01C)
+#define SDMA_TASK_SIZE (MBarGlobal+MBAR_SDMA+0x060)
+
+#define PCI_TX_PKT_SIZE (MBarGlobal+MBAR_SCPCI+0x000)
+#define PCI_TX_NTBIT (MBarGlobal+MBAR_SCPCI+0x01C)
+#define PCI_TX_FIFO (MBarGlobal+MBAR_SCPCI+0x040)
+#define PCI_TX_FIFO_STAT (MBarGlobal+MBAR_SCPCI+0x045)
+#define PCI_TX_FIFO_GRAN (MBarGlobal+MBAR_SCPCI+0x048)
+#define PCI_TX_FIFO_ALARM (MBarGlobal+MBAR_SCPCI+0x04E)
+
+#define PCI_RX_PKT_SIZE (MBarGlobal+MBAR_SCPCI+0x080)
+#define PCI_RX_NTBIT (MBarGlobal+MBAR_SCPCI+0x09C)
+#define PCI_RX_FIFO (MBarGlobal+MBAR_SCPCI+0x0C0)
+#define PCI_RX_FIFO_STAT (MBarGlobal+MBAR_SCPCI+0x0C5)
+#define PCI_RX_FIFO_GRAN (MBarGlobal+MBAR_SCPCI+0x0C8)
+#define PCI_RX_FIFO_ALARM (MBarGlobal+MBAR_SCPCI+0x0CE)
+
+
+#define FEC_RX_FIFO (MBarGlobal+MBAR_ETHERNET+0x184)
+#define FEC_RX_FIFO_STAT (MBarGlobal+MBAR_ETHERNET+0x188)
+#define FEC_RX_FIFO_GRAN (MBarGlobal+MBAR_ETHERNET+0x18C)
+#define FEC_RX_FIFO_ALARM (MBarGlobal+MBAR_ETHERNET+0x198)
+
+#define FEC_TX_FIFO (MBarGlobal+MBAR_ETHERNET+0x1A4)
+#define FEC_TX_FIFO_STAT (MBarGlobal+MBAR_ETHERNET+0x1A8)
+#define FEC_TX_FIFO_GRAN (MBarGlobal+MBAR_ETHERNET+0x1AC)
+#define FEC_TX_FIFO_ALARM (MBarGlobal+MBAR_ETHERNET+0x1B8)
+
+#endif /* __TASK_API_BESTCOMM_API_MEM_H */
diff --git a/bsps/powerpc/gen5200/include/bsp/bestcomm/task_api/bestcomm_cntrl.h b/bsps/powerpc/gen5200/include/bsp/bestcomm/task_api/bestcomm_cntrl.h
new file mode 100644
index 0000000000..3712bae3d0
--- /dev/null
+++ b/bsps/powerpc/gen5200/include/bsp/bestcomm/task_api/bestcomm_cntrl.h
@@ -0,0 +1,282 @@
+#ifndef __TASK_API_BESTCOMM_CNTRL_H
+#define __TASK_API_BESTCOMM_CNTRL_H 1
+
+/******************************************************************************
+*
+* Copyright (c) 2004 Freescale Semiconductor, Inc.
+*
+* 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.
+*
+******************************************************************************/
+
+/*******************************************************************************
+ * Defines to control SmartDMA and its tasks. These defines are used for the
+ * task build process to minimize disconnects at the task/driver interface.
+ ******************************************************************************/
+
+#define SDMA_INT_BIT_DBG 31 /* debug interrupt bit */
+#define SDMA_INT_BIT_TEA 28 /* TEA interrupt bit */
+#define SDMA_INT_BIT_TEA_TASK 24 /* lsb for TEA task number */
+#define SDMA_INT_BIT_IMPL 0x9000FFFF
+
+#define SDMA_PTDCTRL_BIT_TEA 14 /* TEA detection enable bit */
+
+#define SDMA_TCR_BIT_AUTO 15 /* auto start bit */
+#define SDMA_TCR_BIT_HOLD 5 /* hold initiator bit */
+
+#define SDMA_STAT_BIT_ALARM 17
+#define SDMA_FIFO_ALARM_MASK 0x0020000
+
+#define SDMA_DRD_BIT_TFD 27 /* mark last buffer of frame */
+#define SDMA_DRD_BIT_INT 26 /* interrupt after buffer processed */
+#define SDMA_DRD_BIT_INIT 21 /* lsb position of initiator */
+#define SDMA_DRD_MASK_FLAGS 0x0C000000 /* BD_FLAGS flag bits */
+#define SDMA_DRD_MASK_LENGTH 0x03FFFFFF /* BD_FLAGS length mask */
+#define SDMA_BD_BIT_READY 30 /* Status BD ready bit */
+#ifdef SAS_COMPILE
+ #define SDMA_BD_MASK_READY constant(1<<SDMA_BD_BIT_READY)
+#else
+ #define SDMA_BD_MASK_READY (1<<SDMA_BD_BIT_READY)
+#endif
+#define SDMA_BD_MASK_SIGN 0x7FFFFFFF /* task code needs Status>0 */
+
+#define SDMA_PRAGMA_BIT_RSV 7 /* reserved pragma bit */
+#define SDMA_PRAGMA_BIT_PRECISE_INC 6 /* increment 0=when possible, 1=iter end */
+#define SDMA_PRAGMA_BIT_RST_ERROR_NO 5 /* don't reset errors on task enable */
+#define SDMA_PRAGMA_BIT_PACK 4 /* pack data enable */
+#define SDMA_PRAGMA_BIT_INTEGER 3 /* data alignment 0=frac(msb), 1=int(lsb) */
+#define SDMA_PRAGMA_BIT_SPECREAD 2 /* XLB speculative read enable */
+#define SDMA_PRAGMA_BIT_CW 1 /* write line buffer enable */
+#define SDMA_PRAGMA_BIT_RL 0 /* read line buffer enable */
+
+#define SDMA_TASK_ENTRY_BYTES 32 /* Bytes per task in entry table */
+#define SDMA_TASK_GROUP_NUM 16 /* Number of tasks per task group */
+#define SDMA_TASK_GROUP_BYTES (SDMA_TASK_ENTRY_BYTES*SDMA_TASK_GROUP_NUM)
+
+
+/*******************************************************************************
+ * Task group control macros, use when TaskNum > 15
+ ******************************************************************************/
+#define SDMA_TASKNUM_EXT(OldTaskNum) (OldTaskNum%16)
+
+#define SDMA_TASKBAR_CHANGE(sdma, OldTaskNum) { \
+ sdma->taskBar += (((int)(OldTaskNum/SDMA_TASK_GROUP_NUM))*SDMA_TASK_GROUP_BYTES); \
+}
+
+#define SDMA_TASKBAR_RESTORE(sdma, OldTaskNum) { \
+ sdma->taskBar -= (((int)(OldTaskNum/SDMA_TASK_GROUP_NUM))*SDMA_TASK_GROUP_BYTES); \
+}
+
+
+/*******************************************************************************
+ * Task control macros
+ ******************************************************************************/
+#define SDMA_TASK_CFG(RegAddr, TaskNum, AutoStart, AutoStartNum) { \
+ *(((volatile uint16 *)RegAddr)+TaskNum) = (uint16)(0x0000 | \
+ ((AutoStart!=0)<<7) | \
+ (AutoStartNum&0xF) ); \
+}
+
+#define SDMA_TASK_AUTO_START(RegAddr, TaskNum, AutoStart, AutoStartNum) { \
+ *(((volatile uint16 *)RegAddr)+TaskNum) = (uint16)((*(((volatile uint16 *)RegAddr)+TaskNum) & \
+ (uint16) 0xff30) | ((uint16)(0x0000 | \
+ ((AutoStart!=0)<<7) | \
+ (AutoStartNum&0xF)) )); \
+}
+
+#define SDMA_TASK_ENABLE(RegAddr, TaskNum) { \
+ *(((volatile uint16 *)RegAddr)+TaskNum) |= (uint16)0x8000; \
+}
+
+#define SDMA_TASK_DISABLE(RegAddr, TaskNum) { \
+ *(((volatile uint16 *)RegAddr)+TaskNum) &= ~(uint16)0x8000; \
+}
+
+#define SDMA_TASK_STATUS(RegAddr, TaskNum) \
+ *(((volatile uint16 *)RegAddr)+TaskNum)
+
+
+/*******************************************************************************
+ * Interrupt control macros
+ ******************************************************************************/
+#define SDMA_INT_ENABLE(RegAddr, Bit) \
+ do { \
+ rtems_interrupt_level level; \
+ rtems_interrupt_disable(level); \
+ *((volatile uint32 *) RegAddr) &= ~((uint32) (1 << Bit)); \
+ rtems_interrupt_enable(level); \
+ } while (0)
+
+#define SDMA_INT_DISABLE(RegAddr, Bit) \
+ do { \
+ rtems_interrupt_level level; \
+ rtems_interrupt_disable(level); \
+ *((volatile uint32 *) (RegAddr)) |= ((uint32)(1 << Bit)); \
+ rtems_interrupt_enable(level); \
+ } while (0)
+
+#define SDMA_INT_SOURCE(RegPend, RegMask) \
+ (*((volatile uint32 *)(RegPend)) & (~*((volatile uint32 *)(RegMask))) & (uint32)SDMA_INT_BIT_IMPL)
+
+#define SDMA_INT_PENDING(RegPend, RegMask) \
+ (*((volatile uint32 *)(RegPend)) & (~*((volatile uint32 *)(RegMask))))
+
+#define SDMA_INT_TEST(IntSource, Bit) \
+ (((uint32)IntSource) & ((uint32)(1<<Bit)))
+
+/*
+ * define SDMA_INT_FIND to get int bit rather than scan all bits use
+ * cntlzw
+ */
+
+/* Clear the IntPend bit */
+#define SDMA_CLEAR_IEVENT(RegAddr, Bit) { \
+ *((volatile uint32 *)RegAddr) = ((uint32)(1<<Bit)); \
+}
+
+#define SDMA_GET_PENDINGBIT(sdma, Bit) \
+ (sdma->IntPend & (uint32)(1<<Bit))
+
+#define SDMA_GET_MASKBIT(sdma, Bit) \
+ (sdma->IntMask & (uint32)(1<<Bit))
+
+
+/*******************************************************************************
+ * SmartDMA FIFO control macros
+ ******************************************************************************/
+
+/*******************************************************************************
+ * SmartDMA TEA detection control macros
+ ******************************************************************************/
+/* Enable SmartDMA TEA detection and TEA interrupt */
+#define SDMA_TEA_ENABLE(sdma) { \
+ SDMA_INT_ENABLE(sdma, SDMA_INT_BIT_TEA); \
+ sdma->PtdCntrl &= ~((uint32)(1<<SDMA_PTDCTRL_BIT_TEA)); \
+}
+
+/* Disable SmartDMA TEA detection and TEA interrupt */
+#define SDMA_TEA_DISABLE(sdma) { \
+ SDMA_INT_DISABLE(sdma, SDMA_INT_BIT_TEA); \
+ sdma->PtdCntrl |= ((uint32)(1<<SDMA_PTDCTRL_BIT_TEA)); \
+}
+
+/* Clear the TEA interrupt */
+#define SDMA_TEA_CLEAR(sdma) { \
+ sdma->IntPend = ((uint32)(0x1F<<SDMA_INT_BIT_TEA_TASK)); \
+}
+
+/* Determine which task caused a TEA on the XLB */
+#define SDMA_TEA_SOURCE(RegPend) \
+ (uint32)(((*(volatile uint32 *)RegPend)>>SDMA_INT_BIT_TEA_TASK) & 0xF)
+
+
+/*******************************************************************************
+ * SmartDMA debug control macros
+ ******************************************************************************/
+/* Enable the SmartDMA debug unit and DBG interrupt */
+/* add sdma->dbg_regs setup? */
+#define SDMA_DBG_ENABLE(sdma) { \
+ SDMA_INT_ENABLE(sdma, SDMA_INT_BIT_DBG); \
+}
+
+#define SDMA_DBG_DISABLE(sdma) { \
+ SDMA_INT_DISABLE(sdma, SDMA_INT_BIT_DBG); \
+}
+
+/* Clear the debug interrupt */
+#define SDMA_DBG_CLEAR(sdma) { \
+ SDMA_CLEAR_IEVENT(sdma, SDMA_INT_BIT_DBG); \
+}
+
+#define SDMA_DBG_MDE(dst, sdma, addr) { \
+ sdma->MDEDebug = addr; \
+ dst = sdma->MDEDebug; \
+}
+
+#define SDMA_DBG_ADS(dst, sdma, addr) { \
+ sdma->ADSDebug = addr; \
+ dst = sdma->ADSDebug; \
+}
+
+#define SDMA_DBG_PTD(dst, sdma, addr) { \
+ sdma->PTDDebug = addr; \
+ dst = sdma->PTDDebug; \
+}
+
+
+/*******************************************************************************
+ * Initiator control macros
+ ******************************************************************************/
+
+/* This macro may not work, getting compile errors */
+/* Set the Transfer Size */
+/* Note that masking the size w/ 0x3 gives the desired value for uint32 */
+/* (expressed as 4), namely 0. */
+#define SDMA_SET_SIZE(RegAddr, TaskNum, SrcSize, DstSize) \
+ *(((volatile uint8 *)RegAddr)+((uint32)(TaskNum/2))) = \
+ (uint8)((*(((volatile uint8 *)RegAddr)+((uint32)(TaskNum/2))) & \
+ ((TaskNum%2) ? 0xf0 : 0x0f)) | \
+ ((uint8)(((SrcSize & 0x3)<<2) | \
+ ( DstSize & 0x3 ) ) <<(4*((int)(1-(TaskNum%2))))));
+
+/* This macro may not work */
+/* Set the Initiator in TCR */
+#define SDMA_SET_INIT(RegAddr, TaskNum, Initiator) \
+{ \
+ *(((volatile uint16 *)RegAddr)+TaskNum) &= (uint16)0xE0FF; \
+ *(((volatile uint16 *)RegAddr)+TaskNum) |= (((0x01F & Initiator)<<8) | \
+ (0<<SDMA_TCR_BIT_HOLD)); \
+}
+
+/* Change DRD initiator number */
+#define SDMA_INIT_CHANGE(task, oldInitiator, newInitiator) { \
+ int i; \
+ for (i=0; i<task->NumDRD; i++) { \
+ if (SDMA_INIT_READ(task->DRD[i]) == (uint32)oldInitiator) { \
+ SDMA_INIT_WRITE(task->DRD[i],newInitiator); \
+ } \
+ } \
+}
+
+/* Set the Initiator Priority */
+#define SDMA_SET_INITIATOR_PRIORITY(sdma, initiator, priority) \
+ *(((volatile uint8 *)&sdma->IPR0)+initiator) = priority;
+
+
+/* Read DRD initiator number */
+#define SDMA_INIT_READ(PtrDRD) \
+ (((*(volatile uint32 *)PtrDRD)>>SDMA_DRD_BIT_INIT) & (uint32)0x1F)
+
+/* Write DRD initiator number */
+#define SDMA_INIT_WRITE(PtrDRD, Initiator) { \
+ *(volatile uint32 *)PtrDRD = ((*(volatile uint32 *)PtrDRD) & 0xFC1FFFFF) | \
+ (Initiator<<SDMA_DRD_BIT_INIT); \
+}
+
+/* Change DRD initiator number */
+#define SDMA_INIT_CHANGE(task, oldInitiator, newInitiator) { \
+ int i; \
+ for (i=0; i<task->NumDRD; i++) { \
+ if (SDMA_INIT_READ(task->DRD[i]) == (uint32)oldInitiator) { \
+ SDMA_INIT_WRITE(task->DRD[i],newInitiator); \
+ } \
+ } \
+}
+
+#endif /* __TASK_API_BESTCOMM_CNTRL_H */
diff --git a/bsps/powerpc/gen5200/include/bsp/bestcomm/task_api/tasksetup_bdtable.h b/bsps/powerpc/gen5200/include/bsp/bestcomm/task_api/tasksetup_bdtable.h
new file mode 100644
index 0000000000..7f261d21ee
--- /dev/null
+++ b/bsps/powerpc/gen5200/include/bsp/bestcomm/task_api/tasksetup_bdtable.h
@@ -0,0 +1,86 @@
+#ifndef __TASK_API_TASKSETUP_BDTABLE_H
+#define __TASK_API_TASKSETUP_BDTABLE_H 1
+
+/******************************************************************************
+*
+* Copyright (c) 2004 Freescale Semiconductor, Inc.
+*
+* 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.
+*
+******************************************************************************/
+
+/*
+ * Table of BD rings for all BestComm tasks indexed by task ID.
+ *
+ * +-----+------+--------------+ +------+-------+
+ * 0: |numBD|numPtr|BDTablePtr ---|--->|status|dataPtr|
+ * +-----+------+--------------+ +------+-------+
+ * 1: |numBD|numPtr|BDTablePtr | |status|dataPtr|
+ * +-----+------+--------------+ . . .
+ * 2: |numBD|numPtr|BDTablePtr ---|-+ . . .
+ * . . . | . . .
+ * . . . | |status|dataPtr|
+ * . . . | +------+-------+
+ * 15:|numBD|numPtr|BDTablePtr | |
+ * +-----+------+--------------+ |
+ * |
+ * V
+ * +------+--------+--------+
+ * |status|dataPtr0|dataPtr1|
+ * +------+--------+--------+
+ * |status|dataPtr0|dataPtr1|
+ * . . . .
+ * . . . .
+ * . . . .
+ * |status|dataPtr0|dataPtr1|
+ * +------+--------+--------+
+ */
+typedef struct {
+ uint16 numBD; /* Size of BD ring */
+ uint8 numPtr; /* Number of data buffer pointers per BD */
+ uint8 apiConfig; /* API configuration flags */
+ void *BDTablePtr; /* Pointer to BD tables, must be cast to TaskBD1_t */
+ /* or TaskBD2_t */
+ volatile uint32
+ *BDStartPtr; /* Task's current BD pointer. This pointer is
+ * used to set a task's BD pointer upon startup.
+ * It is only valid for BD tasks and only after
+ * TaskSetup() or TaskBDReset() are called. You
+ * cannot use this to track a task's BD pointer.
+ */
+ uint16 currBDInUse; /* Current number of buffer descriptors assigned but*/
+ /* not released yet. */
+} TaskBDIdxTable_t;
+
+typedef enum {
+ API_CONFIG_NONE = 0x00,
+ API_CONFIG_BD_FLAG = 0x01
+} ApiConfig_t;
+
+/*
+ * Allocates BD table if needed and updates the BD index table.
+ * Do we want to hide this from the C API since it operates on task API?
+ */
+void TaskSetup_BDTable(volatile uint32 *BasePtr,
+ volatile uint32 *LastPtr,
+ volatile uint32 *StartPtr,
+ int TaskNum, uint32 NumBD, uint16 MaxBD,
+ uint8 NumPtr, ApiConfig_t ApiConfig, uint32 Status );
+
+#endif /* __TASK_API_TASKSETUP_BDTABLE_H */
diff --git a/bsps/powerpc/gen5200/include/bsp/bestcomm/task_api/tasksetup_general.h b/bsps/powerpc/gen5200/include/bsp/bestcomm/task_api/tasksetup_general.h
new file mode 100644
index 0000000000..be7bb9d7b0
--- /dev/null
+++ b/bsps/powerpc/gen5200/include/bsp/bestcomm/task_api/tasksetup_general.h
@@ -0,0 +1,624 @@
+/******************************************************************************
+*
+* Copyright (c) 2004 Freescale Semiconductor, Inc.
+*
+* 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.
+*
+******************************************************************************/
+
+/*
+ * Task builder generates a set #defines per configured task to
+ * condition this templete file.
+ */
+
+/**********************************************************
+ *
+ * Required #defines:
+ * ------------------
+ * TASKSETUP_NAME:
+ * TaskSetup function name, set to TaskSetup_<TASK_NAME>
+ * TASK_API:
+ * task API defined in dma_image.h
+ * MAX_BD:
+ * <=0 : non-BD task
+ * else: number of BD in BD table
+ * BD_FLAG:
+ * 0 : no flag implemented for BD
+ * else: flags can be passed on a per BD basis
+ * MISALIGNED:
+ * 0 : task API supports Bytes%IncrBytes==0
+ * else: task API supports any parameter settings
+ * AUTO_START:
+ * <-1 : do not start a task after task completion
+ * -1 : auto start the task after task completion
+ * <MAX_TASKS: auto start task with the TaskID = AUTO_START
+ * else : do not start a task after task completion
+ * INITIATOR_DATA:
+ * <0 : runtime configurable
+ * else: assume INITATOR_DATA equal hard-coded task initiator
+ * TYPE_SRC: (needs to be consistent with Task API)
+ * FLEX_T : Task API TYPE_SRC = flex, SzSrc defines size
+ * UINT8_T : Task API TYPE_SRC = char
+ * UINT16_T: Task API TASK_SRC = short
+ * UINT32_T: Task API TASK_SRC = int
+ * INCR_TYPE_SRC:
+ * 0 : FIFO address, do not implement data pointer
+ * 1 : automatic, set INCR_SRC based on SzSrc parameter
+ * 2 : runtime, set INCR_SRC to IncrSrc parameter
+ * else: used hard-coded INCR_SRC
+ * INCR_SRC:
+ * INCR_TYPE_SRC=0: force INCR_SRC=0
+ * else : use for src pointer increment
+ * TYPE_DST: (needs to be consistent with Task API)
+ * FLEX_T : Task API TYPE_DST = flex, SzDst defines size
+ * UINT8_T : Task API TYPE_DST = char
+ * UINT16_T: Task API TASK_DST = short
+ * UINT32_T: Task API TASK_DST = int
+ * INCR_TYPE_DST:
+ * 0 : FIFO address, do not implement data pointer
+ * 1 : automatic, set INCR_DST based on SzDst parameter
+ * 2 : runtime, set INCR_DST to IncrDst parameter
+ * else: used hard-coded INCR_DST
+ * INCR_DST:
+ * INCR_TYPE_DST=0: force INCR_DST=0
+ * else : use for dst pointer increment
+ * PRECISE_INCREMENT:
+ * 0 : increment when possible
+ * else: increment at end of iteration
+ * NO_ERROR_RESET:
+ * 0 : reset error flags on task enable
+ * else: leave error flags unmodified on task enable
+ * PACK_DATA:
+ * 0 : do not pack data
+ * else: pack data based on data type
+ * INTEGER_MODE:
+ * 0 : type conversions handle as fixed point numbers
+ * else: type conversions handle as integers
+ * WRITE_LINE_BUFFER:
+ * 0 : do not use write line buffers
+ * else: enable write line buffers
+ * READ_LINE_BUFFER:
+ * 0 : do not use read line buffers
+ * else: enable read line buffers
+ * SPEC_READS:
+ * 0 : do not speculatively read
+ * else: speculatively read data ahead of DMA engine
+ *
+ * Optional #defines:
+ * ------------------
+ * MAX_TASKS:
+ * 1 : #define MAX_TASKS>0
+ * else: 16
+ * ITERATIONS:
+ * 1 : #define ITERATIONS>0
+ * else: 1
+ * INCR_BYTES:
+ * This macro is defined based on following priority:
+ * 1 : INCR_SRC != 0
+ * 2 : DST_TYPE != 0
+ * 3 : #defined INCR_BYTES<0
+ * else: -4 (SZ_UINT32)
+ * DEBUG_BESTCOMM_API:
+ * >0 : print basic debug messages
+ * >=10: also print C-API interface variables
+ * >=20: also print task API interface variables
+ * else: do nothing
+ *
+ **********************************************************/
+
+#if defined(__rtems__) || defined(MPC5200_BAPI_LIBC_HEADERS)
+#include <stdlib.h>
+#endif
+
+#include "../dma_image.h"
+
+#include "../bestcomm_api.h"
+#include "tasksetup_bdtable.h"
+
+#include "bestcomm_api_mem.h"
+#include "bestcomm_cntrl.h"
+
+#ifndef DEBUG_BESTCOMM_API
+ #define DEBUG_BESTCOMM_API 0
+#endif
+
+#ifdef FLEX_T
+ #undef FLEX_T
+#endif
+#define FLEX_T SZ_FLEX
+
+#ifdef UINT8_T
+ #undef UINT8_T
+#endif
+#define UINT8_T SZ_UINT8
+
+#ifdef UINT16_T
+ #undef UINT16_T
+#endif
+#define UINT16_T SZ_UINT16
+
+#ifdef UINT32_T
+ #undef UINT32_T
+#endif
+#define UINT32_T SZ_UINT32
+
+#if (INCR_TYPE_SRC==0) /* FIFO address, no data pointer */
+ #undef INCR_SRC
+ #define INCR_SRC 0
+#endif
+
+#if (INCR_TYPE_DST==0) /* FIFO address, no data pointer */
+ #undef INCR_DST
+ #define INCR_DST 0
+#endif
+
+#ifndef MAX_TASKS
+ #define MAX_TASKS 16
+#else
+ #if (MAX_TASKS<=0)
+ #undef MAX_TASKS
+ #define MAX_TASKS 16
+ #endif
+#endif
+
+#ifndef ITERATIONS
+ #define ITERATIONS 1
+#else
+ #if (ITERATIONS<=0)
+ #undef ITERATIONS
+ #define ITERATIONS 1
+ #endif
+#endif
+
+#ifndef INCR_BYTES
+ #define INCR_BYTES -4
+#else
+ #if (INCR_BYTES>=0)
+ #undef INCR_BYTES
+ #define INCR_BYTES -4
+ #endif
+#endif
+
+/*
+ * These ifndefs will go away when support in task_capi wrappers
+ * in the image directories
+ */
+#ifndef PRECISE_INCREMENT
+ #define PRECISE_INCREMENT 0 /* bit=6 SAS->1, increment 0=when possible, 1=at the end of interation */
+#endif
+#ifndef NO_ERROR_RESET
+ #define NO_ERROR_RESET 0 /* bit=5 SAS->0, do not reset error codes on task enable */
+#endif
+#ifndef PACK_DATA
+ #define PACK_DATA 0 /* bit=4 SAS->0, pack data enable */
+#endif
+#ifndef INTEGER_MODE
+ #define INTEGER_MODE 0 /* bit=3 SAS->0, 0=fractional(msb aligned), 1=integer(lsb aligned) */
+#endif
+#ifndef SPEC_READS
+ #define SPEC_READS 1 /* bit=2 SAS->0, XLB speculative read enable */
+#endif
+#ifndef WRITE_LINE_BUFFER
+ #define WRITE_LINE_BUFFER 1 /* bit=1 SAS->0, write line buffer enable */
+#endif
+#ifndef READ_LINE_BUFFER
+ #define READ_LINE_BUFFER 1 /* bit=0 SAS->0, read line buffer enable */
+#endif
+#define SDMA_PRAGMA (0 <<SDMA_PRAGMA_BIT_RSV ) | \
+ (PRECISE_INCREMENT<<SDMA_PRAGMA_BIT_PRECISE_INC ) | \
+ (NO_ERROR_RESET <<SDMA_PRAGMA_BIT_RST_ERROR_NO) | \
+ (PACK_DATA <<SDMA_PRAGMA_BIT_PACK ) | \
+ (INTEGER_MODE <<SDMA_PRAGMA_BIT_INTEGER ) | \
+ (SPEC_READS <<SDMA_PRAGMA_BIT_SPECREAD ) | \
+ (WRITE_LINE_BUFFER<<SDMA_PRAGMA_BIT_CW ) | \
+ (READ_LINE_BUFFER <<SDMA_PRAGMA_BIT_RL )
+
+#ifndef TASKSETUP_NAME
+ #define PREPEND_TASKSETUP(name) TaskSetup_ ## name
+ #define FUNC_PREPEND_TASKSETUP(name) PREPEND_TASKSETUP(name)
+ #define TASKSETUP_NAME FUNC_PREPEND_TASKSETUP(TASK_BASE)
+#endif
+
+#ifndef TASK_API
+ #define APPEND_API(name) name ## _api_t
+ #define FUNC_APPEND_API(name) APPEND_API(name)
+ #define TASK_API FUNC_APPEND_API(TASK_BASE)
+#endif
+
+#ifndef INIT_DMA_IMAGE
+ #define PREPEND_INITDMA(name) init_dma_image_ ## name
+ #define FUNC_PREPEND_INITDMA(name) PREPEND_INITDMA(name)
+ #define INIT_DMA_IMAGE FUNC_PREPEND_INITDMA(TASK_BASE)
+#endif
+
+#define DRD_INIT_MASK 0xfc1fffff
+#define DRD_EXT_FLAG 0x40000000
+#define DRD_INIT_OFFSET 21
+
+TaskId TASKSETUP_NAME(TASK_API *TaskAPI,
+ TaskSetupParamSet_t *TaskSetupParams)
+{
+ TaskId TaskNum;
+#if ((MAX_BD>0)||(DEBUG_BESTCOMM_API>0))
+ uint32 Status = 0;
+#endif
+#if ((MAX_BD>0)&&((INCR_TYPE_SRC!=0)||(INCR_TYPE_DST!=0))||(DEBUG_BESTCOMM_API>0))
+ uint8 NumPtr = 0;
+#endif
+#if (INITIATOR_DATA<0) /* runtime configurable */
+ uint32 i, ext;
+#endif
+
+ INIT_DMA_IMAGE((uint8 *)(((sdma_regs *)(SDMA_TASK_BAR))->taskBar), MBarPhysOffsetGlobal);
+
+ TaskNum = (TaskId)SDMA_TASKNUM_EXT(TaskAPI->TaskNum);
+
+ TaskRunning[TaskNum] = 0;
+
+#if (DEBUG_BESTCOMM_API>0)
+ printf("\nBestComm API Debug Display Mode Enabled\n\n");
+ printf("TaskSetup: TaskID=%d\n", TaskNum);
+ if (Status!=0) {
+ printf("TaskSetup: Rx task\n");
+ } else {
+ printf("TaskSetup: Tx or DP task\n");
+ }
+#endif
+
+ /* Set the task pragma settings */
+ *(TaskAPI->TaskPragma)= (uint8) SDMA_PRAGMA;
+
+#if (MAX_BD>0) /* Buffer Descriptors */
+
+ #if (INCR_TYPE_SRC!=0)
+ ++NumPtr;
+ #endif
+ #if (INCR_TYPE_DST!=0)
+ ++NumPtr;
+ #endif
+
+ #if (DEBUG_BESTCOMM_API>0)
+ printf("TaskSetup: Using %d buffer descriptors, each with %d data pointers\n", MAX_BD, NumPtr);
+ #endif
+
+ /* Allocate BD table SRAM storage,
+ * and pass addresses to task API */
+
+ TaskSetup_BDTable(TaskAPI->BDTableBase,
+ TaskAPI->BDTableLast,
+ TaskAPI->BDTableStart,
+ TaskNum,
+ TaskSetupParams->NumBD,
+ MAX_BD, NumPtr,
+ BD_FLAG, Status);
+
+ *TaskAPI->AddrEnable = (uint32)((uint32)(((uint16 *)SDMA_TCR)+TaskNum) + MBarPhysOffsetGlobal);
+
+ #if BD_FLAG
+
+ #if (DEBUG_BESTCOMM_API>0)
+ printf("TaskSetup: Buffer descriptor flags are enabled\n");
+ #endif
+
+ /* always assume 2nd to last DRD */
+ *((TaskAPI->AddrDRD)) = (uint32)((uint32)TaskAPI->DRD[TaskAPI->AddrDRDIdx] + MBarPhysOffsetGlobal);
+ #endif /* #if BD_FLAG */
+
+#else /* No Buffer Descriptors */
+
+/* #error ATA should not be non-BD */
+
+ #if (DEBUG_BESTCOMM_API>0)
+ printf("TaskSetup: Task will complete %d iterations before disabling\n");
+ #endif
+
+ *((TaskAPI->IterExtra)) = (uint32)(ITERATIONS-1);
+#endif /* #if (MAX_BD>0) */
+
+/* Setup auto start */
+#if (AUTO_START <= -2 ) /* do not start a task */
+ #if (DEBUG_BESTCOMM_API>0)
+ printf("TaskSetup: Auto task start disabled\n");
+ #endif
+ SDMA_TASK_CFG(SDMA_TCR, TaskNum, 0, TaskNum);
+#elif (AUTO_START <= -1 ) /* restart task */
+ #if (DEBUG_BESTCOMM_API>0)
+ printf("TaskSetup: Auto start task\n");
+ #endif
+ SDMA_TASK_CFG(SDMA_TCR, TaskNum, 1, TaskNum);
+#elif (AUTO_START < MAX_TASKS) /* start specific task */
+ #if (DEBUG_BESTCOMM_API>0)
+ printf("TaskSetup: Auto start task with TaskID=%d\n", AUTO_START);
+ #endif
+ SDMA_TASK_CFG(SDMA_TCR, TaskNum, 1, AUTO_START);
+#else /* do not start a task */
+ #if (DEBUG_BESTCOMM_API>0)
+ printf("TaskSetup: Auto task start disabled\n");
+ #endif
+ SDMA_TASK_CFG(SDMA_TCR, TaskNum, 0, TaskNum);
+#endif
+
+#if (INITIATOR_DATA<0) /* runtime configurable */
+ SDMA_SET_INIT(SDMA_TCR, TaskNum, TaskSetupParams->Initiator);
+
+ /*
+ * Hard-code the task initiator in the DRD to avoid a problem w/ the
+ * hold initiator bit in the TCR.
+ */
+ ext = 0;
+ for (i = 0; i < TaskAPI->NumDRD; i++) {
+ if (ext == 0)
+ {
+#if (DEBUG_BESTCOMM_API>=10)
+ printf("TaskSetup: DRD[%d] initiator = %d\n", i, ((*(TaskAPI->DRD[i]) & ~DRD_INIT_MASK) >> DRD_INIT_OFFSET));
+#endif
+ if (((*(TaskAPI->DRD[i]) & ~DRD_INIT_MASK) >> DRD_INIT_OFFSET) != INITIATOR_ALWAYS) {
+#if (DEBUG_BESTCOMM_API>=10)
+ printf("TaskSetup: Replacing DRD[%d] initiator with %d\n", i, TaskSetupParams->Initiator);
+#endif
+ *(TaskAPI->DRD[i]) = (*(TaskAPI->DRD[i]) & DRD_INIT_MASK)
+ | (TaskSetupParams->Initiator << DRD_INIT_OFFSET);
+ }
+
+ if ((*(TaskAPI->DRD[i]) & DRD_EXT_FLAG) != 0)
+ {
+ ext = 1;
+ }
+ }
+ else
+ {
+ if ((*(TaskAPI->DRD[i]) & DRD_EXT_FLAG) == 0)
+ {
+ ext = 0;
+ }
+ }
+ }
+
+#else /* INITIATOR_DATA >= 0 */
+ TaskSetupParams->Initiator = INITIATOR_DATA;
+#endif
+
+#if (DEBUG_BESTCOMM_API>=10)
+ printf("\nTaskSetup: C-API Parameter Settings Passed to TaskSetup:\n");
+ printf("TaskSetup: NumBD = %d\n", TaskSetupParams->NumBD);
+ #if (MAX_BD>0)
+ printf("TaskSetup: MaxBuf = %d\n", TaskSetupParams->Size.MaxBuf);
+ #else
+ printf("TaskSetup: NumBytes = %d\n", TaskSetupParams->Size.NumBytes);
+ #endif
+ printf("TaskSetup: Initiator = %d\n", TaskSetupParams->Initiator);
+ printf("TaskSetup: StartAddrSrc = 0x%08X\n", TaskSetupParams->StartAddrSrc);
+ printf("TaskSetup: IncrSrc = %d\n", TaskSetupParams->IncrSrc);
+ printf("TaskSetup: SzSrc = %d\n", TaskSetupParams->SzSrc);
+ printf("TaskSetup: StartAddrDst = 0x%08X\n", TaskSetupParams->StartAddrDst);
+ printf("TaskSetup: IncrDst = %d\n", TaskSetupParams->IncrDst);
+ printf("TaskSetup: SzDst = %d\n", TaskSetupParams->SzDst);
+#endif
+
+#if (DEBUG_BESTCOMM_API>=20)
+ printf("\nTaskSetup: Task-API Parameter Settings Before TaskSetup Initialization:\n");
+ printf("TaskSetup: TaskNum = %d\n", (TaskAPI->TaskNum));
+ printf("TaskSetup: TaskPragma = 0x%02X\n", *((TaskAPI->TaskPragma)));
+ printf("TaskSetup: TCR = 0x%04x\n", SDMA_TASK_STATUS(SDMA_TCR, TaskNum));
+
+ #if (MAX_BD>0)
+ printf("TaskSetup: BDTableBase = 0x%08X\n", *((TaskAPI->BDTableBase)));
+ printf("TaskSetup: BDTableLast = 0x%08X\n", *((TaskAPI->BDTableLast)));
+ printf("TaskSetup: BDTableStart = 0x%08X\n", *((TaskAPI->BDTableStart)));
+ printf("TaskSetup: AddrEnable = 0x%08X\n", *((TaskAPI->AddrEnable)));
+ #if (INCR_TYPE_SRC==0)
+ printf("TaskSetup: AddrSrcFIFO = 0x%08X\n", *((TaskAPI->AddrSrcFIFO)));
+ #endif
+ #if (INCR_TYPE_DST==0)
+ printf("TaskSetup: AddrDstFIFO = 0x%08X\n", *((TaskAPI->AddrDstFIFO)));
+ #endif
+ #if (BD_FLAG)
+ printf("TaskSetup: AddrDRD = 0x%08X\n", *((TaskAPI->AddrDRD)));
+ printf("TaskSetup: AddrDRDIdx = %d\n", ((TaskAPI->AddrDRDIdx)));
+ #endif
+ #else
+ printf("TaskSetup: IterExtra = %d\n", *((TaskAPI->IterExtra)));
+ #if (INCR_TYPE_SRC==0)
+ printf("TaskSetup: AddrSrcFIFO = 0x%08X\n", *((TaskAPI->AddrSrcFIFO)));
+ #else
+ printf("TaskSetup: StartAddrSrc = 0x%08X\n", *((TaskAPI->StartAddrSrc)));
+ #endif
+ #if (INCR_TYPE_DST==0)
+ printf("TaskSetup: AddrDstFIFO = 0x%08X\n", *((TaskAPI->AddrDstFIFO)));
+ #else
+ printf("TaskSetup: StartAddrDst = 0x%08X\n", *((TaskAPI->StartAddrDst)));
+ #endif
+ #endif
+ #if (INCR_TYPE_SRC!=0)
+ printf("TaskSetup: IncrSrc = 0x%04X\n", *((TaskAPI->IncrSrc)));
+ #if (MISALIGNED | MISALIGNED_START)
+ printf("TaskSetup: IncrSrcMA = 0x%04X\n", *((TaskAPI->IncrSrcMA)));
+ #endif
+ #endif
+ #if (INCR_TYPE_DST!=0)
+ printf("TaskSetup: IncrDst = 0x%04X\n", *((TaskAPI->IncrDst)));
+ #if (MISALIGNED | MISALIGNED_START)
+ printf("TaskSetup: IncrDstMA = 0x%04X\n", *((TaskAPI->IncrDstMA)));
+ #endif
+ #endif
+ printf("TaskSetup: Bytes = %d\n", *((TaskAPI->Bytes)));
+ printf("TaskSetup: IncrBytes = %d\n", *((TaskAPI->IncrBytes)));
+#endif
+
+
+ *((TaskAPI->Bytes)) = (uint32)TaskSetupParams->Size.MaxBuf;
+
+
+#if (TYPE_SRC!=FLEX_T) /* size fixed in task code */
+ TaskSetupParams->SzSrc = TYPE_SRC;
+#endif
+
+#if (INCR_TYPE_SRC==0) /* no data pointer */
+ TaskSetupParams->IncrSrc = (sint16)0;
+ *((TaskAPI->AddrSrcFIFO)) = (uint32)TaskSetupParams->StartAddrSrc;
+#else
+
+ #if (INCR_TYPE_SRC==1) /* automatic */
+ if (TaskSetupParams->IncrSrc!=0) {
+ TaskSetupParams->IncrSrc = (sint16)+TaskSetupParams->SzSrc;
+ } else {
+ TaskSetupParams->IncrSrc = (sint16)+TaskSetupParams->IncrSrc;
+ }
+ #elif (INCR_TYPE_SRC!=2) /* hard-coded */
+ TaskSetupParams->IncrSrc = (sint16)INCR_SRC;
+ #endif
+ *((TaskAPI->IncrSrc)) = (sint16)TaskSetupParams->IncrSrc;
+
+ #if (MAX_BD>0) /* pointer in BD Table */
+ /* pass back address of first BD */
+ TaskSetupParams->StartAddrSrc = (uint32)TaskGetBDRing(TaskNum);
+ #else
+ *((TaskAPI->StartAddrSrc)) = (uint32)TaskSetupParams->StartAddrSrc;
+ #endif
+
+ #if MISALIGNED | MISALIGNED_START
+ if (TaskSetupParams->IncrSrc < 0) {
+ *((TaskAPI->IncrSrcMA)) = (sint16)-1;
+ } else if (TaskSetupParams->IncrSrc > 0) {
+ *((TaskAPI->IncrSrcMA)) = (sint16)+1;
+ } else {
+ *((TaskAPI->IncrSrcMA)) = (sint16)0;
+ }
+ #endif
+#endif
+
+
+#if (TYPE_DST!=FLEX_T) /* size fixed in task code */
+ TaskSetupParams->SzDst = TYPE_DST;
+#endif
+
+#if (INCR_TYPE_DST==0) /* no data pointer */
+ TaskSetupParams->IncrDst = (sint16)0;
+ *((TaskAPI->AddrDstFIFO)) = (uint32)TaskSetupParams->StartAddrDst;
+#else
+ #if (INCR_TYPE_DST==1) /* automatic */
+ if (TaskSetupParams->IncrDst!=0) {
+ TaskSetupParams->IncrDst = (sint16)+TaskSetupParams->SzDst;
+ } else {
+ TaskSetupParams->IncrDst = (sint16)+TaskSetupParams->IncrDst;
+ }
+ #elif (INCR_TYPE_DST!=2) /* hard-coded */
+ TaskSetupParams->IncrDst = (sint16)INCR_DST;
+ #endif
+ *((TaskAPI->IncrDst)) = (sint16)TaskSetupParams->IncrDst;
+
+ #if (MAX_BD>0)
+ /* pass back address of first BD */
+ TaskSetupParams->StartAddrDst = (uint32)TaskGetBDRing(TaskNum);
+ #else
+ *((TaskAPI->StartAddrDst)) = (uint32)TaskSetupParams->StartAddrDst;
+ #endif
+
+ #if MISALIGNED | MISALIGNED_START
+ if (TaskSetupParams->IncrDst < 0) {
+ *((TaskAPI->IncrDstMA)) = (sint16)-1;
+ } else if (TaskSetupParams->IncrDst > 0) {
+ *((TaskAPI->IncrDstMA)) = (sint16)+1;
+ } else {
+ *((TaskAPI->IncrDstMA)) = (sint16)0;
+ }
+ #endif
+#endif
+
+/* always use macro, only affect code with #define TYPE_? flex */
+ SDMA_SET_SIZE(SDMA_TASK_SIZE, TaskNum, TaskSetupParams->SzSrc, TaskSetupParams->SzDst);
+
+
+ if (TaskSetupParams->IncrSrc != 0) {
+ *((TaskAPI->IncrBytes)) = (sint16)-abs(TaskSetupParams->IncrSrc);
+ } else if (TaskSetupParams->IncrDst != 0) {
+ *((TaskAPI->IncrBytes)) = (sint16)-abs(TaskSetupParams->IncrDst);
+ } else {
+ *((TaskAPI->IncrBytes)) = (sint16)-abs(INCR_BYTES);
+ }
+
+
+#if (DEBUG_BESTCOMM_API>=10)
+ printf("\nTaskSetup: C-API Parameter Settings Returned from TaskSetup:\n");
+ printf("TaskSetup: NumBD = %d\n", TaskSetupParams->NumBD);
+ #if (MAX_BD>0)
+ printf("TaskSetup: MaxBuf = %d\n", TaskSetupParams->Size.MaxBuf);
+ #else
+ printf("TaskSetup: NumBytes = %d\n", TaskSetupParams->Size.NumBytes);
+ #endif
+ printf("TaskSetup: Initiator = %d\n", TaskSetupParams->Initiator);
+ printf("TaskSetup: StartAddrSrc = 0x%08X\n", TaskSetupParams->StartAddrSrc);
+ printf("TaskSetup: IncrSrc = %d\n", TaskSetupParams->IncrSrc);
+ printf("TaskSetup: SzSrc = %d\n", TaskSetupParams->SzSrc);
+ printf("TaskSetup: StartAddrDst = 0x%08X\n", TaskSetupParams->StartAddrDst);
+ printf("TaskSetup: IncrDst = %d\n", TaskSetupParams->IncrDst);
+ printf("TaskSetup: SzDst = %d\n", TaskSetupParams->SzDst);
+#endif
+
+#if (DEBUG_BESTCOMM_API>=20)
+ printf("\nTaskSetup: Task-API Parameter Settings After TaskSetup Initialization:\n");
+ printf("TaskSetup: TaskNum = %d\n", ((TaskAPI->TaskNum)));
+ printf("TaskSetup: TaskPragma = 0x%02X\n", *((TaskAPI->TaskPragma)));
+
+ #if (MAX_BD>0)
+ printf("TaskSetup: BDTableBase = 0x%08X\n", *((TaskAPI->BDTableBase)));
+ printf("TaskSetup: BDTableLast = 0x%08X\n", *((TaskAPI->BDTableLast)));
+ printf("TaskSetup: BDTableStart = 0x%08X\n", *((TaskAPI->BDTableStart)));
+ printf("TaskSetup: AddrEnable = 0x%08X\n", *((TaskAPI->AddrEnable)));
+ #if (INCR_TYPE_SRC==0)
+ printf("TaskSetup: AddrSrcFIFO = 0x%08X\n", *((TaskAPI->AddrSrcFIFO)));
+ #endif
+ #if (INCR_TYPE_DST==0)
+ printf("TaskSetup: AddrDstFIFO = 0x%08X\n", *((TaskAPI->AddrDstFIFO)));
+ #endif
+ #if (BD_FLAG)
+ printf("TaskSetup: AddrDRD = 0x%08X\n", *((TaskAPI->AddrDRD)));
+ printf("TaskSetup: AddrDRDIdx = %d\n", ((TaskAPI->AddrDRDIdx)));
+ #endif
+ #else
+ printf("TaskSetup: IterExtra = %d\n", *((TaskAPI->IterExtra)));
+ #if (INCR_TYPE_SRC==0)
+ printf("TaskSetup: AddrSrcFIFO = 0x%08X\n", *((TaskAPI->AddrSrcFIFO)));
+ #else
+ printf("TaskSetup: StartAddrSrc = 0x%08X\n", *((TaskAPI->StartAddrSrc)));
+ #endif
+ #if (INCR_TYPE_DST==0)
+ printf("TaskSetup: AddrDstFIFO = 0x%08X\n", *((TaskAPI->AddrDstFIFO)));
+ #else
+ printf("TaskSetup: StartAddrDst = 0x%08X\n", *((TaskAPI->StartAddrDst)));
+ #endif
+ #endif
+ #if (INCR_TYPE_SRC!=0)
+ printf("TaskSetup: IncrSrc = 0x%04X\n", *((TaskAPI->IncrSrc)));
+ #if (MISALIGNED | MISALIGNED_START)
+ printf("TaskSetup: IncrSrcMA = 0x%04X\n", *((TaskAPI->IncrSrcMA)));
+ #endif
+ #endif
+ #if (INCR_TYPE_DST!=0)
+ printf("TaskSetup: IncrDst = 0x%04X\n", *((TaskAPI->IncrDst)));
+ #if (MISALIGNED | MISALIGNED_START)
+ printf("TaskSetup: IncrDstMA = 0x%04X\n", *((TaskAPI->IncrDstMA)));
+ #endif
+ #endif
+ printf("TaskSetup: Bytes = %d\n", *((TaskAPI->Bytes)));
+ printf("TaskSetup: IncrBytes = %d\n", *((TaskAPI->IncrBytes)));
+#endif
+
+ return TaskNum;
+}