X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=libpcsxcore%2Fpsxmem.c;fp=libpcsxcore%2Fpsxmem.c;h=54219ae051543622e5da6d0338840c0042eff60e;hp=fb48f77bf28be897895fd24b4798e23b5be0ab1a;hb=826ba56b077130624f0b4c00f57ed7362449e5aa;hpb=45a1e89f9b213953b102c6217c97a2f8828f1a57 diff --git a/libpcsxcore/psxmem.c b/libpcsxcore/psxmem.c index fb48f77b..54219ae0 100644 --- a/libpcsxcore/psxmem.c +++ b/libpcsxcore/psxmem.c @@ -41,34 +41,36 @@ #define MAP_ANONYMOUS MAP_ANON #endif +static void * psxMapDefault(unsigned long addr, size_t size, + int is_fixed, enum psxMapTag tag) +{ + int flags = MAP_PRIVATE | MAP_ANONYMOUS; + + return mmap((void *)(uintptr_t)addr, size, + PROT_READ | PROT_WRITE, flags, -1, 0); +} + +static void psxUnmapDefault(void *ptr, size_t size, enum psxMapTag tag) +{ + munmap(ptr, size); +} + void *(*psxMapHook)(unsigned long addr, size_t size, int is_fixed, - enum psxMapTag tag); -void (*psxUnmapHook)(void *ptr, size_t size, enum psxMapTag tag); + enum psxMapTag tag) = psxMapDefault; +void (*psxUnmapHook)(void *ptr, size_t size, + enum psxMapTag tag) = psxUnmapDefault; void *psxMap(unsigned long addr, size_t size, int is_fixed, enum psxMapTag tag) { - int flags = MAP_PRIVATE | MAP_ANONYMOUS; int try_ = 0; unsigned long mask; - void *req, *ret; + void *ret; retry: - if (psxMapHook != NULL) { - ret = psxMapHook(addr, size, 0, tag); - if (ret == NULL) - return MAP_FAILED; - } - else { - /* avoid MAP_FIXED, it overrides existing mappings.. */ - /* if (is_fixed) - flags |= MAP_FIXED; */ - - req = (void *)(uintptr_t)addr; - ret = mmap(req, size, PROT_READ | PROT_WRITE, flags, -1, 0); - if (ret == MAP_FAILED) - return ret; - } + ret = psxMapHook(addr, size, 0, tag); + if (ret == NULL) + return MAP_FAILED; if (addr != 0 && ret != (void *)(uintptr_t)addr) { SysMessage("psxMap: warning: wanted to map @%08x, got %p\n", @@ -97,13 +99,7 @@ retry: void psxUnmap(void *ptr, size_t size, enum psxMapTag tag) { - if (psxUnmapHook != NULL) { - psxUnmapHook(ptr, size, tag); - return; - } - - if (ptr) - munmap(ptr, size); + psxUnmapHook(ptr, size, tag); } s8 *psxM = NULL; // Kernel & User Memory (2 Meg)