//------------------------------------------------------------------------------ tOplkError eventucal_init(void) { tOplkError ret = kErrorOk; struct sched_param schedParam; OPLK_MEMSET(&instance_l, 0, sizeof(tEventuCalInstance)); instance_l.fd = ctrlucal_getFd(); instance_l.fStopKernelThread = FALSE; instance_l.fStopProcessThread = FALSE; sem_unlink("/semUserEvent"); // Deinitialize any existing instance of the semaphore if ((instance_l.semUserData = sem_open("/semUserEvent", O_CREAT | O_RDWR, S_IRWXG, 0)) == SEM_FAILED) goto Exit; if (eventucal_initQueueCircbuf(kEventQueueUInt) != kErrorOk) goto Exit; if (eventucal_setSignalingCircbuf(kEventQueueUInt, signalUIntEvent) != kErrorOk) goto Exit; // Create thread for fetching new user data from kernel if (pthread_create(&instance_l.kernelEventThreadId, NULL, k2uEventFetchThread, NULL) != 0) goto Exit; schedParam.sched_priority = KERNEL_EVENT_FETCH_THREAD_PRIORITY; if (pthread_setschedparam(instance_l.kernelEventThreadId, SCHED_FIFO, &schedParam) != 0) { DEBUG_LVL_ERROR_TRACE("%s(): couldn't set K2U thread scheduling parameters! %d\n", __func__, schedParam.sched_priority); } #if (defined(__GLIBC__) && (__GLIBC__ >= 2) && (__GLIBC_MINOR__ >= 12)) pthread_setname_np(instance_l.kernelEventThreadId, "oplk-eventufetch"); #endif // Create thread for processing pending user data if (pthread_create(&instance_l.processEventThreadId, NULL, eventProcessThread, NULL) != 0) goto Exit; schedParam.sched_priority = EVENT_PROCESS_THREAD_PRIORITY; if (pthread_setschedparam(instance_l.processEventThreadId, SCHED_FIFO, &schedParam) != 0) { DEBUG_LVL_ERROR_TRACE("%s(): couldn't set event process thread scheduling parameters! %d\n", __func__, schedParam.sched_priority); } #if (defined(__GLIBC__) && (__GLIBC__ >= 2) && (__GLIBC_MINOR__ >= 12)) pthread_setname_np(instance_l.processEventThreadId, "oplk-eventuprocess"); #endif instance_l.fInitialized = TRUE; return kErrorOk; Exit: eventucal_exit(); return ret; }
//------------------------------------------------------------------------------ tOplkError pdoucal_initSync(tSyncCb pfnSyncCb_p) { UNUSED_PARAMETER(pfnSyncCb_p); fd_l = ctrlucal_getFd(); return kErrorOk; }
//------------------------------------------------------------------------------ tMemMapReturn memmap_init(void) { ULONG bytesReturned; tMemStruc inMemStruc; tMemStruc* pOutMemStruc = &memMapInstance_l.memStruc; OPLK_MEMSET(&inMemStruc, 0, sizeof(inMemStruc)); memMapInstance_l.hFileHandle = ctrlucal_getFd(); if (memMapInstance_l.hFileHandle == NULL) return kMemMapNoResource; if (!DeviceIoControl(memMapInstance_l.hFileHandle, PLK_CMD_MAP_MEM, &inMemStruc, sizeof(tMemStruc), pOutMemStruc, sizeof(tMemStruc), &bytesReturned, NULL)) { return kMemMapNoResource; } if ((bytesReturned == 0) || (pOutMemStruc->pUserAddr == NULL)) return kMemMapNoResource; return kMemMapOk; }
//------------------------------------------------------------------------------ tOplkError eventucal_init(void) { tOplkError ret = kErrorOk; struct sched_param schedParam; OPLK_MEMSET(&instance_l, 0, sizeof(tEventuCalInstance)); instance_l.fd = ctrlucal_getFd(); instance_l.fStopThread = FALSE; //create thread for signaling new data if (pthread_create(&instance_l.threadId, NULL, eventThread, NULL) != 0) { goto Exit; } schedParam.sched_priority = USER_EVENT_THREAD_PRIORITY; if (pthread_setschedparam(instance_l.threadId, SCHED_FIFO, &schedParam) != 0) { DEBUG_LVL_ERROR_TRACE("%s(): couldn't set thread scheduling parameters! %d\n", __func__, schedParam.sched_priority); } #if (defined(__GLIBC__) && __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 12) pthread_setname_np(instance_l.threadId, "oplk-eventu"); #endif Exit: return ret; }
//------------------------------------------------------------------------------ tOplkError errhnducal_init(tErrHndObjects* pLocalObjects_p) { if (fInitialized_l) return kErrorNoFreeInstance; pLocalObjects_l = pLocalObjects_p; instance_l.hFileHandle = ctrlucal_getFd(); fInitialized_l = TRUE; return kErrorOk; }
//------------------------------------------------------------------------------ static tOplkError addInstance(tDllCalQueueInstance* ppDllCalQueue_p, tDllCalQueue dllCalQueue_p) { tOplkError ret = kErrorOk; tDllCalIoctlInstance* pInstance; pInstance = (tDllCalIoctlInstance*)OPLK_MALLOC(sizeof(tDllCalIoctlInstance)); if (pInstance == NULL) { ret = kErrorNoResource; goto Exit; } //store parameters in instance pInstance->dllCalQueue = dllCalQueue_p; pInstance->fd = ctrlucal_getFd(); *ppDllCalQueue_p = (tDllCalQueueInstance*)pInstance; Exit: return ret; }
//------------------------------------------------------------------------------ tOplkError pdoucal_openMem(void) { fd_l = ctrlucal_getFd(); return kErrorOk; }