//------------------------------------------------------------------------------ void dualprocshm_targetReleaseLock(tDualprocLock* pBase_p, tDualProcInstance procInstance_p) { if (pBase_p == NULL) return; DPSHM_WRITE8(&pBase_p->afFlag[procInstance_p], 0); DUALPROCSHM_FLUSH_DCACHE_RANGE(&pBase_p->afFlag[procInstance_p], sizeof(pBase_p->afFlag[procInstance_p])); }
//------------------------------------------------------------------------------ void dualprocshm_targetWriteData(UINT8* pBase_p, UINT16 size_p, UINT8* pData_p) { if (pBase_p == NULL || pData_p == NULL) { TRACE("%s Invalid parameters\n", __FUNCTION__); return; } DUALPROCSHM_MEMCPY(pBase_p, pData_p, size_p); DUALPROCSHM_FLUSH_DCACHE_RANGE(pBase_p, size_p); }
//------------------------------------------------------------------------------ void dualprocshm_targetAcquireLock(tDualprocLock* pBase_p, tDualProcInstance procInstance_p) { tDualProcInstance otherProcInstance; if (pBase_p == NULL) return; switch (procInstance_p) { case kDualProcFirst: otherProcInstance = kDualProcSecond; break; case kDualProcSecond: otherProcInstance = kDualProcFirst; break; default: TRACE("Invalid processor instance\n"); return; } DUALPROCSHM_INVALIDATE_DCACHE_RANGE(pBase_p, sizeof(tDualprocLock)); DPSHM_WRITE8(&pBase_p->afFlag[procInstance_p], 1); DUALPROCSHM_FLUSH_DCACHE_RANGE(&pBase_p->afFlag[procInstance_p], sizeof(pBase_p->afFlag[procInstance_p])); DPSHM_WRITE8(&pBase_p->turn, otherProcInstance); DUALPROCSHM_FLUSH_DCACHE_RANGE(&pBase_p->turn, sizeof(pBase_p->turn)); DPSHM_DMB(); do { DUALPROCSHM_INVALIDATE_DCACHE_RANGE(pBase_p, sizeof(tDualprocLock)); } while (DPSHM_READ8(&pBase_p->afFlag[otherProcInstance]) && (DPSHM_READ8(&pBase_p->turn) == otherProcInstance)); }
//------------------------------------------------------------------------------ void dualprocshm_targetWriteData(void* pBase_p, size_t size_p, const void* pData_p) { if ((pBase_p == NULL) || (pData_p == NULL)) { TRACE("%s(): Invalid parameters\n", __func__); return; } DUALPROCSHM_MEMCPY(pBase_p, pData_p, size_p); DUALPROCSHM_FLUSH_DCACHE_RANGE(pBase_p, size_p); }