summaryrefslogtreecommitdiff
path: root/qnx/src/ipc3x_dev/ti/syslink/family/common/vayu/vayudsp/VAYUDspProc.c
diff options
context:
space:
mode:
Diffstat (limited to 'qnx/src/ipc3x_dev/ti/syslink/family/common/vayu/vayudsp/VAYUDspProc.c')
-rw-r--r--qnx/src/ipc3x_dev/ti/syslink/family/common/vayu/vayudsp/VAYUDspProc.c150
1 files changed, 131 insertions, 19 deletions
diff --git a/qnx/src/ipc3x_dev/ti/syslink/family/common/vayu/vayudsp/VAYUDspProc.c b/qnx/src/ipc3x_dev/ti/syslink/family/common/vayu/vayudsp/VAYUDspProc.c
index 3b15edc..65bd52a 100644
--- a/qnx/src/ipc3x_dev/ti/syslink/family/common/vayu/vayudsp/VAYUDspProc.c
+++ b/qnx/src/ipc3x_dev/ti/syslink/family/common/vayu/vayudsp/VAYUDspProc.c
@@ -11,7 +11,7 @@
*
* ============================================================================
*
- * Copyright (c) 2013-2015, Texas Instruments Incorporated
+ * Copyright (c) 2013-2016, Texas Instruments Incorporated
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -87,6 +87,10 @@ extern "C" {
* =============================================================================
*/
+/*!
+ * @brief Number of static entries in address translation table.
+ */
+#define AddrTable_STATIC_COUNT 3
/*!
* @brief Max entries in address translation table.
@@ -123,17 +127,106 @@ typedef struct VAYUDSPPROC_ModuleObject_tag {
/*!< MultiProc id of DSP1 (to avoid multiple lookups) */
} VAYUDSPPROC_ModuleObject;
-/* Memory region counters */
+/* Default memory regions */
static UInt32 AddrTable_count[NUM_DSPS] = {
- 0,
- 0
+ AddrTable_STATIC_COUNT,
+ AddrTable_STATIC_COUNT
};
/*
* Address translation table
+ * static memory regions
+ * CAUTION: AddrTable_STATIC_COUNT must match number of entries below.
*/
-static ProcMgr_AddrInfo AddrTable_DSP1[AddrTable_SIZE];
-static ProcMgr_AddrInfo AddrTable_DSP2[AddrTable_SIZE];
+static ProcMgr_AddrInfo AddrTable_DSP1[AddrTable_SIZE] =
+ {
+ /* L2 RAM */
+ {
+ .addr[ProcMgr_AddrType_MasterKnlVirt] = -1u,
+ .addr[ProcMgr_AddrType_MasterUsrVirt] = -1u,
+ .addr[ProcMgr_AddrType_MasterPhys] = 0x40800000u,
+ .addr[ProcMgr_AddrType_SlaveVirt] = 0x800000u,
+ .addr[ProcMgr_AddrType_SlavePhys] = -1u,
+ .size = 0x40000u,
+ .isCached = FALSE,
+ .mapMask = ProcMgr_SLAVEVIRT,
+ .isMapped = TRUE,
+ .refCount = 0u /* refCount set to 0 for static entry */
+ },
+
+ /* L1P RAM */
+ {
+ .addr[ProcMgr_AddrType_MasterKnlVirt] = -1u,
+ .addr[ProcMgr_AddrType_MasterUsrVirt] = -1u,
+ .addr[ProcMgr_AddrType_MasterPhys] = 0x40E00000u,
+ .addr[ProcMgr_AddrType_SlaveVirt] = 0xE00000u,
+ .addr[ProcMgr_AddrType_SlavePhys] = -1u,
+ .size = 0x8000u,
+ .isCached = FALSE,
+ .mapMask = ProcMgr_SLAVEVIRT,
+ .isMapped = TRUE,
+ .refCount = 0u /* refCount set to 0 for static entry */
+ },
+
+ /* L1D RAM */
+ {
+ .addr[ProcMgr_AddrType_MasterKnlVirt] = -1u,
+ .addr[ProcMgr_AddrType_MasterUsrVirt] = -1u,
+ .addr[ProcMgr_AddrType_MasterPhys] = 0x40F00000u,
+ .addr[ProcMgr_AddrType_SlaveVirt] = 0xF00000u,
+ .addr[ProcMgr_AddrType_SlavePhys] = -1u,
+ .size = 0x8000u,
+ .isCached = FALSE,
+ .mapMask = ProcMgr_SLAVEVIRT,
+ .isMapped = TRUE,
+ .refCount = 0u /* refCount set to 0 for static entry */
+ },
+ };
+
+static ProcMgr_AddrInfo AddrTable_DSP2[AddrTable_SIZE] =
+ {
+ /* L2 RAM */
+ {
+ .addr[ProcMgr_AddrType_MasterKnlVirt] = -1u,
+ .addr[ProcMgr_AddrType_MasterUsrVirt] = -1u,
+ .addr[ProcMgr_AddrType_MasterPhys] = 0x41000000u,
+ .addr[ProcMgr_AddrType_SlaveVirt] = 0x800000u,
+ .addr[ProcMgr_AddrType_SlavePhys] = -1u,
+ .size = 0x40000u,
+ .isCached = FALSE,
+ .mapMask = ProcMgr_SLAVEVIRT,
+ .isMapped = TRUE,
+ .refCount = 0u /* refCount set to 0 for static entry */
+ },
+
+ /* L1P RAM */
+ {
+ .addr[ProcMgr_AddrType_MasterKnlVirt] = -1u,
+ .addr[ProcMgr_AddrType_MasterUsrVirt] = -1u,
+ .addr[ProcMgr_AddrType_MasterPhys] = 0x41600000u,
+ .addr[ProcMgr_AddrType_SlaveVirt] = 0xE00000u,
+ .addr[ProcMgr_AddrType_SlavePhys] = -1u,
+ .size = 0x8000u,
+ .isCached = FALSE,
+ .mapMask = ProcMgr_SLAVEVIRT,
+ .isMapped = TRUE,
+ .refCount = 0u /* refCount set to 0 for static entry */
+ },
+
+ /* L1D RAM */
+ {
+ .addr[ProcMgr_AddrType_MasterKnlVirt] = -1u,
+ .addr[ProcMgr_AddrType_MasterUsrVirt] = -1u,
+ .addr[ProcMgr_AddrType_MasterPhys] = 0x41700000u,
+ .addr[ProcMgr_AddrType_SlaveVirt] = 0xF00000u,
+ .addr[ProcMgr_AddrType_SlavePhys] = -1u,
+ .size = 0x8000u,
+ .isCached = FALSE,
+ .mapMask = ProcMgr_SLAVEVIRT,
+ .isMapped = TRUE,
+ .refCount = 0u /* refCount set to 0 for static entry */
+ },
+ };
static ProcMgr_AddrInfo * AddrTable[NUM_DSPS] =
{
@@ -159,7 +252,7 @@ VAYUDSPPROC_ModuleObject VAYUDSPPROC_state =
.isSetup = FALSE,
.configSize = sizeof(VAYUDSPPROC_Config),
.gateHandle = NULL,
- .defInstParams.numMemEntries = 0
+ .defInstParams.numMemEntries = AddrTable_STATIC_COUNT
};
@@ -1112,7 +1205,7 @@ VAYUDSPPROC_detach (Processor_Handle handle)
}
/* delete all dynamically added entries */
- for (i = 0; i <
+ for (i = AddrTable_STATIC_COUNT; i <
AddrTable_count[PROCID_TO_DSP(procHandle->procId)]; i++) {
ai = &AddrTable[PROCID_TO_DSP(procHandle->procId)][i];
ai->addr[ProcMgr_AddrType_MasterKnlVirt] = -1u;
@@ -1126,8 +1219,8 @@ VAYUDSPPROC_detach (Processor_Handle handle)
ai->isMapped = FALSE;
ai->refCount = 0u;
}
- object->params.numMemEntries = 0;
- AddrTable_count[PROCID_TO_DSP(procHandle->procId)] = 0;
+ object->params.numMemEntries = AddrTable_STATIC_COUNT;
+ AddrTable_count[PROCID_TO_DSP(procHandle->procId)] = AddrTable_STATIC_COUNT;
//No need to reset.. that will be done in STOP
/*tmpStatus = VAYUDSP_halResetCtrl(object->halObject,
@@ -1763,19 +1856,38 @@ VAYUDSPPROC_map(
* is required. Add the entry only if the range does not exist
* in the translation table.
*/
+ /* check in static entries first */
for (j = 0;
- j < AddrTable_count[PROCID_TO_DSP(procHandle->procId)]; j++) {
+ j < AddrTable_STATIC_COUNT; j++) {
ai = &AddrTable[PROCID_TO_DSP(procHandle->procId)][j];
+ startAddr = ai->addr[ProcMgr_AddrType_SlaveVirt];
+ endAddr = startAddr + ai->size;
- if (ai->isMapped == TRUE) {
- startAddr = ai->addr[ProcMgr_AddrType_SlaveVirt];
- endAddr = startAddr + ai->size;
+ if ((startAddr <= *dstAddr) && (*dstAddr < endAddr)) {
+ found = TRUE;
- if ((startAddr <= *dstAddr) && (*dstAddr < endAddr)
- && ((*dstAddr + sglist[i].size) <= endAddr)) {
- found = TRUE;
- ai->refCount++;
- break;
+ /* refCount does not need to be incremented for static entries */
+
+ break;
+ }
+ }
+
+ /* if not found in static entries, check in dynamic entries */
+ if (!found) {
+ for (j = AddrTable_STATIC_COUNT;
+ j < AddrTable_count[PROCID_TO_DSP(procHandle->procId)]; j++) {
+ ai = &AddrTable[PROCID_TO_DSP(procHandle->procId)][j];
+
+ if (ai->isMapped == TRUE) {
+ startAddr = ai->addr[ProcMgr_AddrType_SlaveVirt];
+ endAddr = startAddr + ai->size;
+
+ if ((startAddr <= *dstAddr) && (*dstAddr < endAddr)
+ && ((*dstAddr + sglist[i].size) <= endAddr)) {
+ found = TRUE;
+ ai->refCount++;
+ break;
+ }
}
}
}