DMPAPI(bool) io_Free(void* handle) { bool result = true; IO_BASE_t* base; if ((base = (IO_BASE_t*)handle) == NULL) return false; switch (base->iotype) { case IO_USE_PORTIO: // TODO: for WinXP or Linux Kernel Mode, free Port-I/O region here break; case IO_USE_MMIO: #if defined DMP_DOS_DJGPP dpmi_LinMapFree(base->addr); dpmi_SelFree(base->mmio_selector); #elif defined USE_WINIO3 UnmapPhysicalMemory(base->mmio_info); #elif defined USE_PHYMEM UnmapPhyMem((void*)base->addr, base->size); #else // TODO: for WinXP or Linux Kernel Mode, free MMIO region here #endif break; default: err_print((char*)"%s: unknown io-type!\n", __FUNCTION__); result = false; break; } free_io_base(base); return result; }
DMPAPI(bool) io_Free(void* handle) { bool result = true; IO_BASE_t* base; if ((base = (IO_BASE_t*)handle) == NULL) return false; switch (base->iotype) { case IO_USE_PORTIO: // do nothing ... break; case IO_USE_MMIO: #if defined DMP_DOS_DJGPP dpmi_LinMapFree(base->addr); dpmi_SelFree(base->mmio_selector); #elif defined DMP_LINUX if ((IO_mmioFD != -1) && ((void*)base->addr != (void *)-1)) //&& if (munmap((void*)(base->mmio_realaddr), base->size) == -1) { err_print("%s: fail to free MMIO region (%d)!\n", __FUNCTION__, errno); result = false; } #elif defined USE_WINIO3 UnmapPhysicalMemory(base->mmio_info); #elif defined USE_PHYMEM UnmapPhyMem((void*)base->addr, base->size); #endif break; default: err_print("%s: unknown io-type!\n", __FUNCTION__); result = false; break; } free_io_base(base); return result; }