/** ******************************************************************************** * @func memcfg_module_deinit_shared_region * @brief This function performs de-initialization of shared regions. * * This functions removes the sharedRegions added by the MemCfg module * and also unmaps the corresponding physical memory from usr space. * * @param[in ] None : None * * @returns MEMCFG_E_FAIL * MEMCFG_S_SUCCESS ******************************************************************************** */ static int32_t memcfg_module_deinit_shared_region (void) { int32_t srStatus = SharedRegion_S_SUCCESS; int32_t i; int32_t memcfg_retval = MEMCFG_S_SUCCESS; for (i = 0; i < MEMCFG_sharedRegionConfigTable.nNumSharedRegions; i++) { if (MEMCFG_module->bSrAddEntryDone[i]) { srStatus = SharedRegion_clearEntry (MEMCFG_sharedRegionConfigTable.aSRInfo[i]. uIndex); if (SharedRegion_S_SUCCESS == srStatus) { DomxCore_unmapPhyAddr (MEMCFG_sharedRegionConfigTable.aSRInfo[i].uBase, MEMCFG_sharedRegionConfigTable.aSRInfo[i].uSize); MEMCFG_module->bSrAddEntryDone[i] = FALSE; } else { memcfg_retval = MEMCFG_E_FAIL; } } } return memcfg_retval; }
/** * Handler for shared region clear entry API. * * \param ctp Thread's associated context information. * \param msg The actual devctl() message. * \param ocb OCB associated with client's session. * * \return POSIX errno value. * * \retval EOK Success. * \retval ENOTSUP Unsupported devctl(). */ int syslink_sharedregion_clearentry(resmgr_context_t *ctp, io_devctl_t *msg, syslink_ocb_t *ocb) { SharedRegionDrv_CmdArgs * cargs = (SharedRegionDrv_CmdArgs *) (_DEVCTL_DATA (msg->i)); SharedRegionDrv_CmdArgs * out = (SharedRegionDrv_CmdArgs *) (_DEVCTL_DATA (msg->o)); out->apiStatus = SharedRegion_clearEntry (cargs->args.clearEntry.id); if (out->apiStatus >= 0) { /* Add this call to the list to be cleaned-up */ add_ocb_res(ocb, DCMD_SHAREDREGION_CLEARENTRY, (int)cargs->args.clearEntry.id, NULL); } return (_RESMGR_PTR (ctp, &msg->o, sizeof (msg->o) + sizeof(SharedRegionDrv_CmdArgs))); }