/* * ======== IRESMAN_HDVICP_exit ======== * Function called when RESMAN is no longer needed. Use it to free memory * allocated etc */ IRES_Status IRESMAN_HDVICP_exit() { Log_print0(Diags_ENTRY, "[+E] IRESMAN_HDVICP_exit> Enter"); if (!(_initialized)) { Log_print0(Diags_EXIT, "[+X] IRESMAN_HDVICP_exit> Exit (status=IRES_ENOINIT)"); return (IRES_ENOINIT); } #ifdef xdc_target__os_Linux if (gate) { OsalSupport_deleteGate(gate); gate = NULL; } #endif /* Set the initialized flag to zero again */ _initialized = 0; _resmanInternalState->numOpens--; freeInternalState(); Log_print0(Diags_EXIT, "[+X] IRESMAN_HDVICP_exit> Exit (status=IRES_OK)"); return (IRES_OK); }
/* * ======== RMAN_exit ======== * Exit the generic IRES RMAN and free the memory back to the Memory manager * using which it was created. */ IRES_Status RMAN_exit() { IArg key; Int i; IRES_Status status = IRES_OK; if (rmanInit == 0) { return (IRES_ENOINIT); } Log_print0(Diags_ENTRY, "[+E] RMAN_exit> Enter "); rmanInternalState->info.refCount--; if (--rmanInit == 0) { if (initStatus != IRES_OK) { Log_print0(Diags_USER7, "[+7] RMAN_exit> RMAN_init call didn't " "happen successfully. RMAN_exit will not unregister " "any resources."); status = IRES_ENOINIT; } else { key = IGateProvider_enter(gate); Log_print1(Diags_EXIT, "[+X] RMAN_exit> tableIndex = %d", (IArg)(resTable.tableIndex)); /* Unregister the entries */ Log_print0(Diags_EXIT, "[+X] RMAN_exit> Unregistering resources"); for (i = 0; i < resTable.tableIndex; i++) { if (RMAN_TABLE[i] != NULL) { /* Even if there is an error, unregister the rest */ if ((status = RMAN_TABLE[i]->exit()) != IRES_OK) { Log_print2(Diags_USER7, "[+7] RMAN_exit> Error " "unregistering the IRESMAN implementation " "0x%x, status = %d", (IArg)(RMAN_TABLE[i]), (IArg)status); status = IRES_EFAIL; } } } /* Free the RMAN object */ freeInternalState(); initStatus = IRES_ENOINIT; /* Free the gate after leaving it */ IGateProvider_leave(gate, key); OsalSupport_deleteGate(gate); gate = NULL; } } Log_print1(Diags_EXIT, "[+X] RMAN_exit> Exit (status=%d)", (IArg)status); return (status); }
/* * ======== IRESMAN_MEMTCM_exit ======== * Function called when RESMAN is no longer needed. Use it to free memory * allocated etc */ IRES_Status IRESMAN_MEMTCM_exit() { /* * Check if initialized */ GT_0trace(CURTRACE, GT_ENTER, "IRESMAN_MEMTCM_exit> Enter \n"); if (!(_initialized)) { GT_0trace(CURTRACE, GT_ENTER, "IRESMAN_MEMTCM_exit> Exit (status=IRES_ENOINIT)\n"); return (IRES_ENOINIT); } freeInternalState(); SMGRMP_delete(_MEMTCM_lock, smgr); smgr = NULL; LockMP_delete(_MEMTCM_lock); _MEMTCM_lock = NULL; /* * Free up any memory that might be allocated in this module * Basically memory that has been used by the protocol implementation */ /* * Set the initialized flag to zero again */ _initialized = 0; GT_0trace(CURTRACE, GT_ENTER, "IRESMAN_MEMTCM_exit> Exit (status=IRES_OK)\n"); GT_exit(); return (IRES_OK); }
/* ARGSUSED - this line tells the compiler not to warn about unused args. */ IRES_Status IRESMAN_MEMTCM_init(IRESMAN_Params * initArgs) { SMGRMP_Attrs attrs; IRESMAN_MemTcmParams * resmanArgs = (IRESMAN_MemTcmParams *)initArgs; /* CMEM_AllocParams params; */ GT_assert(ti_sdo_fc_ires_memtcm, initArgs != NULL); /* * Check if already initialized */ if (_initialized) { GT_0trace(CURTRACE, GT_ENTER, "IRESMAN_MEMTCM_init> Exit (status=IRES_EEXISTS)\n"); return (IRES_EEXISTS); } if (gtInit == 0) { GT_init(); GT_create(&CURTRACE, "ti.sdo.fc.ires.memtcm"); gtInit = 1; } GT_1trace(CURTRACE, GT_ENTER, "IRESMAN_MEMTCM_init> Enter (initArgs=0x%x)\n", initArgs); /* * Information regarding the memory allocation/free functions * is stored as part of the internal state of the resource * manager */ if (NULL == _MEMTCM_lock) { /* Create a lock for protecting MEMTCM internal state object */ _MEMTCM_lock = LockMP_create(_MEMTCM_LOCKID); if (_MEMTCM_lock == NULL) { GT_1trace(CURTRACE, GT_7CLASS, "IRESMAN_MEMTCM_init> Failed to create IPC lock, " "key = 0x%x\n", _MEMTCM_LOCKID); GT_0trace(CURTRACE, GT_ENTER, "IRESMAN_MEMTCM_init> Exit (status=" "IRES_EFAIL)\n"); return (IRES_EFAIL); } } getInternalState(); if (NULL == _resmanInternalState) { GT_0trace(CURTRACE, GT_7CLASS, "IRESMAN_MEMTCM_init>Failed to obtain Internal state Object\n"); GT_0trace(CURTRACE, GT_ENTER, "IRESMAN_MEMTCM_init> Exit (status=" "IRES_EFAIL)\n"); LockMP_delete(_MEMTCM_lock); return (IRES_EFAIL); } /* * Information regarding the memory allocation/free functions */ _allocFxn = resmanArgs->baseConfig.allocFxn; _freeFxn = resmanArgs->baseConfig.freeFxn; if (0 != CMEM_init()) { GT_0trace(CURTRACE, GT_7CLASS, "IRESMAN_MEMTCM_init> Could not initialize CMEM\n"); GT_0trace(CURTRACE, GT_ENTER, "IRESMAN_MEMTCM_init> Exit (status=IRES_EFAIL)\n"); freeInternalState(); LockMP_delete(_MEMTCM_lock); return (IRES_EFAIL); } /* TODO: Figure out how to populate the params */ if (_resmanInternalState->numOpens == 0) { armtcmAddr = CMEM_alloc2(MEMTCM_blockId, MEMTCM_size, NULL); _resmanInternalState->armtcmAddr = (void *)CMEM_getPhys(armtcmAddr); } else { armtcmAddr = CMEM_registerAlloc( (unsigned long)_resmanInternalState->armtcmAddr); } if (NULL == armtcmAddr) { GT_0trace(CURTRACE, GT_7CLASS, "IRESMAN_MEMTCM_init> Could not allocate TCM memory from CMEM" "\n"); GT_0trace(CURTRACE, GT_ENTER, "IRESMAN_MEMTCM_init> Exit (status=IRES_EFAIL)\n"); freeInternalState(); LockMP_delete(_MEMTCM_lock); return (IRES_EFAIL); } if (NULL == smgr) { attrs.numScratchGroups = MEMTCM_NUM_GROUPS; attrs.numResources = (MEMTCM_NUMRES); /* One resource corresponds to a 1/2 K chunk of memory (0x200), Manage memory in chunks of 0x200 */ attrs.lock = _MEMTCM_lock; attrs.key = (void *)_MEMTCM_MEMID; /* A key specific to the resource being managed */ /* This will create a new resource manager or return a process-specific handle to an existing smgr */ smgr = SMGRMP_create(&attrs); if (NULL == smgr) { GT_0trace(CURTRACE, GT_7CLASS, "IRESMAN_MEMTCM_init> Error creating" " scratch resource manager.\n"); GT_0trace(CURTRACE, GT_ENTER, "IRESMAN_MEMTCM_init> Exit (status=" "IRES_EFAIL)\n"); freeInternalState(); LockMP_delete(_MEMTCM_lock); return (IRES_EFAIL); } } _resmanInternalState->numOpens++; /* * Set Initalized flag to 1 if successful */ _initialized = 1; GT_0trace(CURTRACE, GT_ENTER, "IRESMAN_MEMTCM_init> Exit (status=IRES_OK)\n"); return (IRES_OK); }