bool init(void) { #ifndef TARGET_WINNT const char *lib_name = "libcoi_host.so.0"; #else // TARGET_WINNT const char *lib_name = "coi_host.dll"; #endif // TARGET_WINNT OFFLOAD_DEBUG_TRACE(2, "Loading COI library %s ...\n", lib_name); lib_handle = DL_open(lib_name); if (lib_handle == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to load the library\n"); return false; } EngineGetCount = (COIRESULT (*)(COI_ISA_TYPE, uint32_t*)) DL_sym(lib_handle, "COIEngineGetCount", COI_VERSION1); if (EngineGetCount == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIEngineGetCount"); fini(); return false; } EngineGetHandle = (COIRESULT (*)(COI_ISA_TYPE, uint32_t, COIENGINE*)) DL_sym(lib_handle, "COIEngineGetHandle", COI_VERSION1); if (EngineGetHandle == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIEngineGetHandle"); fini(); return false; } ProcessCreateFromMemory = (COIRESULT (*)(COIENGINE, const char*, const void*, uint64_t, int, const char**, uint8_t, const char**, uint8_t, const char*, uint64_t, const char*, const char*, uint64_t, COIPROCESS*)) DL_sym(lib_handle, "COIProcessCreateFromMemory", COI_VERSION1); if (ProcessCreateFromMemory == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIProcessCreateFromMemory"); fini(); return false; } ProcessDestroy = (COIRESULT (*)(COIPROCESS, int32_t, uint8_t, int8_t*, uint32_t*)) DL_sym(lib_handle, "COIProcessDestroy", COI_VERSION1); if (ProcessDestroy == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIProcessDestroy"); fini(); return false; } ProcessGetFunctionHandles = (COIRESULT (*)(COIPROCESS, uint32_t, const char**, COIFUNCTION*)) DL_sym(lib_handle, "COIProcessGetFunctionHandles", COI_VERSION1); if (ProcessGetFunctionHandles == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIProcessGetFunctionHandles"); fini(); return false; } ProcessLoadLibraryFromMemory = (COIRESULT (*)(COIPROCESS, const void*, uint64_t, const char*, const char*, const char*, uint64_t, uint32_t, COILIBRARY*)) DL_sym(lib_handle, "COIProcessLoadLibraryFromMemory", COI_VERSION2); if (ProcessLoadLibraryFromMemory == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIProcessLoadLibraryFromMemory"); fini(); return false; } ProcessRegisterLibraries = (COIRESULT (*)(uint32_t, const void**, const uint64_t*, const char**, const uint64_t*)) DL_sym(lib_handle, "COIProcessRegisterLibraries", COI_VERSION1); if (ProcessRegisterLibraries == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIProcessRegisterLibraries"); fini(); return false; } PipelineCreate = (COIRESULT (*)(COIPROCESS, COI_CPU_MASK, uint32_t, COIPIPELINE*)) DL_sym(lib_handle, "COIPipelineCreate", COI_VERSION1); if (PipelineCreate == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIPipelineCreate"); fini(); return false; } PipelineDestroy = (COIRESULT (*)(COIPIPELINE)) DL_sym(lib_handle, "COIPipelineDestroy", COI_VERSION1); if (PipelineDestroy == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIPipelineDestroy"); fini(); return false; } PipelineRunFunction = (COIRESULT (*)(COIPIPELINE, COIFUNCTION, uint32_t, const COIBUFFER*, const COI_ACCESS_FLAGS*, uint32_t, const COIEVENT*, const void*, uint16_t, void*, uint16_t, COIEVENT*)) DL_sym(lib_handle, "COIPipelineRunFunction", COI_VERSION1); if (PipelineRunFunction == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIPipelineRunFunction"); fini(); return false; } BufferCreate = (COIRESULT (*)(uint64_t, COI_BUFFER_TYPE, uint32_t, const void*, uint32_t, const COIPROCESS*, COIBUFFER*)) DL_sym(lib_handle, "COIBufferCreate", COI_VERSION1); if (BufferCreate == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIBufferCreate"); fini(); return false; } BufferCreateFromMemory = (COIRESULT (*)(uint64_t, COI_BUFFER_TYPE, uint32_t, void*, uint32_t, const COIPROCESS*, COIBUFFER*)) DL_sym(lib_handle, "COIBufferCreateFromMemory", COI_VERSION1); if (BufferCreateFromMemory == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIBufferCreateFromMemory"); fini(); return false; } BufferDestroy = (COIRESULT (*)(COIBUFFER)) DL_sym(lib_handle, "COIBufferDestroy", COI_VERSION1); if (BufferDestroy == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIBufferDestroy"); fini(); return false; } BufferMap = (COIRESULT (*)(COIBUFFER, uint64_t, uint64_t, COI_MAP_TYPE, uint32_t, const COIEVENT*, COIEVENT*, COIMAPINSTANCE*, void**)) DL_sym(lib_handle, "COIBufferMap", COI_VERSION1); if (BufferMap == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIBufferMap"); fini(); return false; } BufferUnmap = (COIRESULT (*)(COIMAPINSTANCE, uint32_t, const COIEVENT*, COIEVENT*)) DL_sym(lib_handle, "COIBufferUnmap", COI_VERSION1); if (BufferUnmap == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIBufferUnmap"); fini(); return false; } BufferWrite = (COIRESULT (*)(COIBUFFER, uint64_t, const void*, uint64_t, COI_COPY_TYPE, uint32_t, const COIEVENT*, COIEVENT*)) DL_sym(lib_handle, "COIBufferWrite", COI_VERSION1); if (BufferWrite == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIBufferWrite"); fini(); return false; } BufferRead = (COIRESULT (*)(COIBUFFER, uint64_t, void*, uint64_t, COI_COPY_TYPE, uint32_t, const COIEVENT*, COIEVENT*)) DL_sym(lib_handle, "COIBufferRead", COI_VERSION1); if (BufferRead == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIBufferRead"); fini(); return false; } BufferCopy = (COIRESULT (*)(COIBUFFER, COIBUFFER, uint64_t, uint64_t, uint64_t, COI_COPY_TYPE, uint32_t, const COIEVENT*, COIEVENT*)) DL_sym(lib_handle, "COIBufferCopy", COI_VERSION1); if (BufferCopy == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIBufferCopy"); fini(); return false; } BufferGetSinkAddress = (COIRESULT (*)(COIBUFFER, uint64_t*)) DL_sym(lib_handle, "COIBufferGetSinkAddress", COI_VERSION1); if (BufferGetSinkAddress == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIBufferGetSinkAddress"); fini(); return false; } BufferSetState = (COIRESULT(*)(COIBUFFER, COIPROCESS, COI_BUFFER_STATE, COI_BUFFER_MOVE_FLAG, uint32_t, const COIEVENT*, COIEVENT*)) DL_sym(lib_handle, "COIBufferSetState", COI_VERSION1); if (BufferSetState == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIBufferSetState"); fini(); return false; } EventWait = (COIRESULT (*)(uint16_t, const COIEVENT*, int32_t, uint8_t, uint32_t*, uint32_t*)) DL_sym(lib_handle, "COIEventWait", COI_VERSION1); if (EventWait == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIEventWait"); fini(); return false; } PerfGetCycleFrequency = (uint64_t (*)(void)) DL_sym(lib_handle, "COIPerfGetCycleFrequency", COI_VERSION1); if (PerfGetCycleFrequency == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIPerfGetCycleFrequency"); fini(); return false; } is_available = true; return true; }
int OW_Load_dnssd_library(void) { int i = 0; #if OW_CYGWIN char libdirs[3][80] = { //{ "/opt/owfs/lib/libdns_sd.dll" }, {"libdns_sd.dll"}, {""} }; while (*libdirs[i]) { /* Cygwin has dlopen and it seems to be ok to use it actually. */ if (!(libdnssd = DL_open(libdirs[i], 0))) { /* Couldn't open that lib, but continue anyway */ #if 0 char *derr; derr = DL_error(); fprintf(stderr, "dlopen [%s] failed [%s]\n", libdirs[i], derr); #endif i++; continue; } else { //fprintf(stderr, "DL_open [%s] success\n", libdirs[i]); break; } } #if 0 /* This file compiled with Microsoft Visual C doesn't work actually... */ if (!libdnssd) { char file[255]; strcpy(file, "dnssd.dll"); if (!(libdnssd = DL_open(file, 0))) { /* Couldn't open that lib, but continue anyway */ } } #endif #elif OW_DARWIN // MacOSX have dnssd functions in libSystem char libdirs[2][80] = { {"libSystem.dylib"}, {""} }; while (*libdirs[i]) { if (!(libdnssd = DL_open(libdirs[i], RTLD_LAZY))) { /* Couldn't open that lib, but continue anyway */ #if 0 char *derr; derr = DL_error(); fprintf(stderr, "DL_open [%s] failed [%s]\n", libdirs[i], derr); #endif i++; continue; } else { //fprintf(stderr, "DL_open [%s] success\n", libdirs[i]); break; } } #elif defined(HAVE_DLOPEN) char libdirs[3][80] = { {"/opt/owfs/lib/libdns_sd.so"}, {"libdns_sd.so"}, {""} }; while (*libdirs[i]) { if (!(libdnssd = DL_open(libdirs[i], RTLD_LAZY))) { /* Couldn't open that lib, but continue anyway */ #if 0 char *derr; derr = DL_error(); fprintf(stderr, "DL_open [%s] failed [%s]\n", libdirs[i], derr); #endif i++; continue; } else { //fprintf(stderr, "DL_open [%s] success\n", libdirs[i]); break; } } #endif if (libdnssd == NULL) { //fprintf(stderr, "Zeroconf/Bonjour is disabled since dnssd library isn't found\n"); return -1; } DNSServiceRefSockFD = (_DNSServiceRefSockFD) DL_sym(libdnssd, "DNSServiceRefSockFD"); DNSServiceProcessResult = (_DNSServiceProcessResult) DL_sym(libdnssd, "DNSServiceProcessResult"); DNSServiceRefDeallocate = (_DNSServiceRefDeallocate) DL_sym(libdnssd, "DNSServiceRefDeallocate"); DNSServiceResolve = (_DNSServiceResolve) DL_sym(libdnssd, "DNSServiceResolve"); DNSServiceBrowse = (_DNSServiceBrowse) DL_sym(libdnssd, "DNSServiceBrowse"); DNSServiceRegister = (_DNSServiceRegister) DL_sym(libdnssd, "DNSServiceRegister"); DNSServiceReconfirmRecord = (_DNSServiceReconfirmRecord) DL_sym(libdnssd, "DNSServiceReconfirmRecord"); DNSServiceCreateConnection = (_DNSServiceCreateConnection) DL_sym(libdnssd, "DNSServiceCreateConnection"); DNSServiceEnumerateDomains = (_DNSServiceEnumerateDomains) DL_sym(libdnssd, "DNSServiceEnumerateDomains"); return 0; }
bool init(void) { #ifndef TARGET_WINNT const char *lib_name = "libcoi_host.so.0"; #else // TARGET_WINNT const char *lib_name = "coi_host.dll"; #endif // TARGET_WINNT OFFLOAD_DEBUG_TRACE(2, "Loading COI library %s ...\n", lib_name); lib_handle = DL_open(lib_name); if (lib_handle == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to load the library\n"); return false; } EngineGetCount = (COIRESULT (*)(COI_ISA_TYPE, uint32_t*)) DL_sym(lib_handle, "COIEngineGetCount", COI_VERSION1); if (EngineGetCount == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIEngineGetCount"); fini(); return false; } EngineGetHandle = (COIRESULT (*)(COI_ISA_TYPE, uint32_t, COIENGINE*)) DL_sym(lib_handle, "COIEngineGetHandle", COI_VERSION1); if (EngineGetHandle == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIEngineGetHandle"); fini(); return false; } ProcessCreateFromMemory = (COIRESULT (*)(COIENGINE, const char*, const void*, uint64_t, int, const char**, uint8_t, const char**, uint8_t, const char*, uint64_t, const char*, const char*, uint64_t, COIPROCESS*)) DL_sym(lib_handle, "COIProcessCreateFromMemory", COI_VERSION1); if (ProcessCreateFromMemory == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIProcessCreateFromMemory"); fini(); return false; } ProcessSetCacheSize = (COIRESULT (*)(COIPROCESS, uint64_t, uint32_t, uint64_t, uint32_t, uint32_t, const COIEVENT*, COIEVENT*)) DL_sym(lib_handle, "COIProcessSetCacheSize", COI_VERSION1); if (ProcessSetCacheSize == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIProcessSetCacheSize"); #if 0 // for now disable as ProcessSetCacheSize is not available on < MPSS 3.4 fini(); return false; #endif } ProcessCreateFromFile = (COIRESULT (*)(COIENGINE, const char*, int, const char**, uint8_t, const char**, uint8_t, const char*, uint64_t, const char*, COIPROCESS*)) DL_sym(lib_handle, "COIProcessCreateFromFile", COI_VERSION1); if (ProcessCreateFromFile == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIProcessCreateFromFile"); fini(); return false; } ProcessDestroy = (COIRESULT (*)(COIPROCESS, int32_t, uint8_t, int8_t*, uint32_t*)) DL_sym(lib_handle, "COIProcessDestroy", COI_VERSION1); if (ProcessDestroy == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIProcessDestroy"); fini(); return false; } ProcessGetFunctionHandles = (COIRESULT (*)(COIPROCESS, uint32_t, const char**, COIFUNCTION*)) DL_sym(lib_handle, "COIProcessGetFunctionHandles", COI_VERSION1); if (ProcessGetFunctionHandles == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIProcessGetFunctionHandles"); fini(); return false; } ProcessLoadLibraryFromMemory = (COIRESULT (*)(COIPROCESS, const void*, uint64_t, const char*, const char*, const char*, uint64_t, uint32_t, COILIBRARY*)) DL_sym(lib_handle, "COIProcessLoadLibraryFromMemory", COI_VERSION2); if (ProcessLoadLibraryFromMemory == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIProcessLoadLibraryFromMemory"); fini(); return false; } ProcessUnloadLibrary = (COIRESULT (*)(COIPROCESS, COILIBRARY)) DL_sym(lib_handle, "COIProcessUnloadLibrary", COI_VERSION1); if (ProcessUnloadLibrary == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIProcessUnloadLibrary"); fini(); return false; } ProcessRegisterLibraries = (COIRESULT (*)(uint32_t, const void**, const uint64_t*, const char**, const uint64_t*)) DL_sym(lib_handle, "COIProcessRegisterLibraries", COI_VERSION1); if (ProcessRegisterLibraries == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIProcessRegisterLibraries"); fini(); return false; } PipelineCreate = (COIRESULT (*)(COIPROCESS, COI_CPU_MASK, uint32_t, COIPIPELINE*)) DL_sym(lib_handle, "COIPipelineCreate", COI_VERSION1); if (PipelineCreate == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIPipelineCreate"); fini(); return false; } PipelineDestroy = (COIRESULT (*)(COIPIPELINE)) DL_sym(lib_handle, "COIPipelineDestroy", COI_VERSION1); if (PipelineDestroy == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIPipelineDestroy"); fini(); return false; } PipelineRunFunction = (COIRESULT (*)(COIPIPELINE, COIFUNCTION, uint32_t, const COIBUFFER*, const COI_ACCESS_FLAGS*, uint32_t, const COIEVENT*, const void*, uint16_t, void*, uint16_t, COIEVENT*)) DL_sym(lib_handle, "COIPipelineRunFunction", COI_VERSION1); if (PipelineRunFunction == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIPipelineRunFunction"); fini(); return false; } BufferCreate = (COIRESULT (*)(uint64_t, COI_BUFFER_TYPE, uint32_t, const void*, uint32_t, const COIPROCESS*, COIBUFFER*)) DL_sym(lib_handle, "COIBufferCreate", COI_VERSION1); if (BufferCreate == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIBufferCreate"); fini(); return false; } BufferCreateFromMemory = (COIRESULT (*)(uint64_t, COI_BUFFER_TYPE, uint32_t, void*, uint32_t, const COIPROCESS*, COIBUFFER*)) DL_sym(lib_handle, "COIBufferCreateFromMemory", COI_VERSION1); if (BufferCreateFromMemory == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIBufferCreateFromMemory"); fini(); return false; } BufferDestroy = (COIRESULT (*)(COIBUFFER)) DL_sym(lib_handle, "COIBufferDestroy", COI_VERSION1); if (BufferDestroy == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIBufferDestroy"); fini(); return false; } BufferMap = (COIRESULT (*)(COIBUFFER, uint64_t, uint64_t, COI_MAP_TYPE, uint32_t, const COIEVENT*, COIEVENT*, COIMAPINSTANCE*, void**)) DL_sym(lib_handle, "COIBufferMap", COI_VERSION1); if (BufferMap == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIBufferMap"); fini(); return false; } BufferUnmap = (COIRESULT (*)(COIMAPINSTANCE, uint32_t, const COIEVENT*, COIEVENT*)) DL_sym(lib_handle, "COIBufferUnmap", COI_VERSION1); if (BufferUnmap == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIBufferUnmap"); fini(); return false; } BufferWrite = (COIRESULT (*)(COIBUFFER, uint64_t, const void*, uint64_t, COI_COPY_TYPE, uint32_t, const COIEVENT*, COIEVENT*)) DL_sym(lib_handle, "COIBufferWrite", COI_VERSION1); if (BufferWrite == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIBufferWrite"); fini(); return false; } BufferRead = (COIRESULT (*)(COIBUFFER, uint64_t, void*, uint64_t, COI_COPY_TYPE, uint32_t, const COIEVENT*, COIEVENT*)) DL_sym(lib_handle, "COIBufferRead", COI_VERSION1); if (BufferRead == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIBufferRead"); fini(); return false; } BufferReadMultiD = (COIRESULT (*)(COIBUFFER, uint64_t, void *, void *, COI_COPY_TYPE, uint32_t, const COIEVENT*, COIEVENT*)) DL_sym(lib_handle, "COIBufferReadMultiD", COI_VERSION1); // We accept that coi library has no COIBufferReadMultiD routine. // So there is no check for zero value BufferWriteMultiD = (COIRESULT (*)(COIBUFFER, const COIPROCESS, uint64_t, void *, void *, COI_COPY_TYPE, uint32_t, const COIEVENT*, COIEVENT*)) DL_sym(lib_handle, "COIBufferWriteMultiD", COI_VERSION1); // We accept that coi library has no COIBufferWriteMultiD routine. // So there is no check for zero value BufferCopy = (COIRESULT (*)(COIBUFFER, COIBUFFER, uint64_t, uint64_t, uint64_t, COI_COPY_TYPE, uint32_t, const COIEVENT*, COIEVENT*)) DL_sym(lib_handle, "COIBufferCopy", COI_VERSION1); if (BufferCopy == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIBufferCopy"); fini(); return false; } BufferGetSinkAddress = (COIRESULT (*)(COIBUFFER, uint64_t*)) DL_sym(lib_handle, "COIBufferGetSinkAddress", COI_VERSION1); if (BufferGetSinkAddress == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIBufferGetSinkAddress"); fini(); return false; } BufferSetState = (COIRESULT(*)(COIBUFFER, COIPROCESS, COI_BUFFER_STATE, COI_BUFFER_MOVE_FLAG, uint32_t, const COIEVENT*, COIEVENT*)) DL_sym(lib_handle, "COIBufferSetState", COI_VERSION1); if (BufferSetState == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIBufferSetState"); fini(); return false; } EventWait = (COIRESULT (*)(uint16_t, const COIEVENT*, int32_t, uint8_t, uint32_t*, uint32_t*)) DL_sym(lib_handle, "COIEventWait", COI_VERSION1); if (EventWait == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIEventWait"); fini(); return false; } PerfGetCycleFrequency = (uint64_t (*)(void)) DL_sym(lib_handle, "COIPerfGetCycleFrequency", COI_VERSION1); if (PerfGetCycleFrequency == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIPerfGetCycleFrequency"); fini(); return false; } PipelineClearCPUMask = (COIRESULT (*)(COI_CPU_MASK)) DL_sym(lib_handle, "COIPipelineClearCPUMask", COI_VERSION1); if (PipelineClearCPUMask == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIPipelineClearCPUMask"); fini(); return false; } PipelineSetCPUMask = (COIRESULT (*)(COIPROCESS, uint32_t,uint8_t, COI_CPU_MASK)) DL_sym(lib_handle, "COIPipelineSetCPUMask", COI_VERSION1); if (PipelineSetCPUMask == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIPipelineSetCPUMask"); fini(); return false; } EngineGetInfo = (COIRESULT (*)(COIENGINE, uint32_t, COI_ENGINE_INFO*)) DL_sym(lib_handle, "COIEngineGetInfo", COI_VERSION1); if (EngineGetInfo == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in COI library\n", "COIEngineGetInfo"); fini(); return false; } EventRegisterCallback = (COIRESULT (*)(COIEVENT, void (*)(COIEVENT, const COIRESULT, const void*), const void*, const uint64_t)) DL_sym(lib_handle, "COIEventRegisterCallback", COI_VERSION1); ProcessConfigureDMA = (COIRESULT (*)(const uint64_t, const int)) DL_sym(lib_handle, "COIProcessConfigureDMA", COI_VERSION1); is_available = true; return true; }
DLL_LOCAL bool MyoWrapper::LoadLibrary(void) { #ifndef TARGET_WINNT const char *lib_name = "libmyo-client.so"; #else // TARGET_WINNT const char *lib_name = "myo-client.dll"; #endif // TARGET_WINNT OFFLOAD_DEBUG_TRACE(2, "Loading MYO library %s ...\n", lib_name); m_lib_handle = DL_open(lib_name); if (m_lib_handle == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to load the library. errno = %d\n", errno); return false; } m_lib_init = (MyoError (*)(void*, void*)) DL_sym(m_lib_handle, "myoiLibInit", MYO_VERSION1); if (m_lib_init == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in MYO library\n", "myoiLibInit"); UnloadLibrary(); return false; } m_lib_fini = (void (*)(void)) DL_sym(m_lib_handle, "myoiLibFini", MYO_VERSION1); if (m_lib_fini == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in MYO library\n", "myoiLibFini"); UnloadLibrary(); return false; } m_shared_malloc = (void* (*)(size_t)) DL_sym(m_lib_handle, "myoSharedMalloc", MYO_VERSION1); if (m_shared_malloc == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in MYO library\n", "myoSharedMalloc"); UnloadLibrary(); return false; } m_shared_free = (void (*)(void*)) DL_sym(m_lib_handle, "myoSharedFree", MYO_VERSION1); if (m_shared_free == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in MYO library\n", "myoSharedFree"); UnloadLibrary(); return false; } m_shared_aligned_malloc = (void* (*)(size_t, size_t)) DL_sym(m_lib_handle, "myoSharedAlignedMalloc", MYO_VERSION1); if (m_shared_aligned_malloc == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in MYO library\n", "myoSharedAlignedMalloc"); UnloadLibrary(); return false; } m_shared_aligned_free = (void (*)(void*)) DL_sym(m_lib_handle, "myoSharedAlignedFree", MYO_VERSION1); if (m_shared_aligned_free == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in MYO library\n", "myoSharedAlignedFree"); UnloadLibrary(); return false; } m_acquire = (MyoError (*)(void)) DL_sym(m_lib_handle, "myoAcquire", MYO_VERSION1); if (m_acquire == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in MYO library\n", "myoAcquire"); UnloadLibrary(); return false; } m_release = (MyoError (*)(void)) DL_sym(m_lib_handle, "myoRelease", MYO_VERSION1); if (m_release == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in MYO library\n", "myoRelease"); UnloadLibrary(); return false; } m_host_var_table_propagate = (MyoError (*)(void*, int)) DL_sym(m_lib_handle, "myoiHostVarTablePropagate", MYO_VERSION1); if (m_host_var_table_propagate == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in MYO library\n", "myoiHostVarTablePropagate"); UnloadLibrary(); return false; } m_host_fptr_table_register = (MyoError (*)(void*, int, int)) DL_sym(m_lib_handle, "myoiHostFptrTableRegister", MYO_VERSION1); if (m_host_fptr_table_register == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in MYO library\n", "myoiHostFptrTableRegister"); UnloadLibrary(); return false; } m_remote_thunk_call = (MyoError (*)(void*, void*, int)) DL_sym(m_lib_handle, "myoiRemoteThunkCall", MYO_VERSION1); if (m_remote_thunk_call == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in MYO library\n", "myoiRemoteThunkCall"); UnloadLibrary(); return false; } m_remote_call = (MyoiRFuncCallHandle (*)(const char*, void*, int)) DL_sym(m_lib_handle, "myoiRemoteCall", MYO_VERSION1); if (m_remote_call == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in MYO library\n", "myoiRemoteCall"); UnloadLibrary(); return false; } m_get_result = (MyoError (*)(MyoiRFuncCallHandle)) DL_sym(m_lib_handle, "myoiGetResult", MYO_VERSION1); if (m_get_result == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in MYO library\n", "myoiGetResult"); UnloadLibrary(); return false; } m_arena_create = (MyoError (*)(MyoOwnershipType, int, MyoArena*)) DL_sym(m_lib_handle, "myoArenaCreate", MYO_VERSION1); if (m_arena_create == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in MYO library\n", "myoArenaCreate"); UnloadLibrary(); return false; } m_arena_aligned_malloc = (void* (*)(MyoArena, size_t, size_t)) DL_sym(m_lib_handle, "myoArenaAlignedMalloc", MYO_VERSION1); if (m_arena_aligned_malloc == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in MYO library\n", "myoArenaAlignedMalloc"); UnloadLibrary(); return false; } m_arena_aligned_free = (void* (*)(MyoArena, void*)) DL_sym(m_lib_handle, "myoArenaAlignedFree", MYO_VERSION1); if (m_arena_aligned_free == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in MYO library\n", "myoArenaAlignedFree"); UnloadLibrary(); return false; } m_arena_acquire = (MyoError (*)(MyoArena)) DL_sym(m_lib_handle, "myoArenaAcquire", MYO_VERSION1); if (m_acquire == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in MYO library\n", "myoArenaAcquire"); UnloadLibrary(); return false; } m_arena_release = (MyoError (*)(MyoArena)) DL_sym(m_lib_handle, "myoArenaRelease", MYO_VERSION1); if (m_release == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in MYO library\n", "myoArenaRelease"); UnloadLibrary(); return false; } // Check for "feature-available" API added in MPSS 3.3. // Not finding it is not an error. m_feature_available = (MyoError (*)(int)) DL_sym(m_lib_handle, "myoiSupportsFeature", MYO_VERSION1); if (m_feature_available == 0) { OFFLOAD_DEBUG_TRACE(2, "Failed to find %s in MYO library\n", "myoiSupportsFeature"); } OFFLOAD_DEBUG_TRACE(2, "The library was successfully loaded\n"); // Create arena if supported CreateVtableArena(); OFFLOAD_DEBUG_TRACE(3, "Vtable arena created\n"); m_is_available = true; return true; }