void Shutdown() { u32 flags = 0; MemoryMap_Shutdown(g_views, kNumMemViews, flags, &arena); arena.ReleaseSpace(); MemBlock_Shutdown(); g_base = nullptr; g_exefs_code = nullptr; g_system_mem = nullptr; g_heap = nullptr; g_heap_linear = nullptr; g_vram = nullptr; g_shared_mem = nullptr; g_dsp_mem = nullptr; g_kernel_mem = nullptr; physical_bootrom = nullptr; uncached_bootrom = nullptr; physical_exefs_code = nullptr; physical_system_mem = nullptr; physical_fcram = nullptr; physical_heap_gsp = nullptr; physical_vram = nullptr; physical_shared_mem = nullptr; physical_dsp_mem = nullptr; physical_kernel_mem = nullptr; LOG_DEBUG(HW_Memory, "shutdown OK"); }
void Shutdown() { std::lock_guard<std::recursive_mutex> guard(g_shutdownLock); u32 flags = 0; MemoryMap_Shutdown(flags); base = nullptr; DEBUG_LOG(MEMMAP, "Memory system shut down."); }
void Shutdown() { u32 flags = 0; MemoryMap_Shutdown(flags); base = NULL; DEBUG_LOG(MEMMAP, "Memory system shut down."); }
void Shutdown() { u32 flags = 0; MemoryMap_Shutdown(views, num_views, flags, &g_arena); g_arena.ReleaseSpace(); base = NULL; DEBUG_LOG(MEMMAP, "Memory system shut down."); }
static bool Memory_TryBase(u8 *base, const MemoryView *views, int num_views, u32 flags, MemArena *arena) { // OK, we know where to find free space. Now grab it! // We just mimic the popular BAT setup. u32 position = 0; u32 last_position = 0; // Zero all the pointers to be sure. for (int i = 0; i < num_views; i++) { if (views[i].out_ptr_low) *views[i].out_ptr_low = nullptr; if (views[i].out_ptr) *views[i].out_ptr = nullptr; } int i; for (i = 0; i < num_views; i++) { SKIP(flags, views[i].flags); if (views[i].flags & MV_MIRROR_PREVIOUS) { position = last_position; } else { *(views[i].out_ptr_low) = (u8*)arena->CreateView(position, views[i].size); if (!*views[i].out_ptr_low) goto bail; } #if _ARCH_64 *views[i].out_ptr = (u8*)arena->CreateView( position, views[i].size, base + views[i].virtual_address); #else if (views[i].flags & MV_MIRROR_PREVIOUS) { // No need to create multiple identical views. *views[i].out_ptr = *views[i - 1].out_ptr; } else { *views[i].out_ptr = (u8*)arena->CreateView( position, views[i].size, base + (views[i].virtual_address & 0x3FFFFFFF)); if (!*views[i].out_ptr) goto bail; } #endif last_position = position; position += views[i].size; } return true; bail: // Argh! ERROR! Free what we grabbed so far so we can try again. MemoryMap_Shutdown(views, i+1, flags, arena); return false; }
void Shutdown() { lock_guard guard(g_shutdownLock); u32 flags = 0; MemoryMap_Shutdown(flags); base = NULL; DEBUG_LOG(MEMMAP, "Memory system shut down."); }
void Shutdown() { u32 flags = 0; MemoryMap_Shutdown(g_views, kNumMemViews, flags, &g_arena); g_arena.ReleaseSpace(); g_base = NULL; NOTICE_LOG(MEMMAP, "shutdown OK"); }
void Shutdown() { m_IsInitialized = false; u32 flags = 0; if (SConfig::GetInstance().m_LocalCoreStartupParameter.bWii) flags |= MV_WII_ONLY; if (bFakeVMEM) flags |= MV_FAKE_VMEM; MemoryMap_Shutdown(views, num_views, flags, &g_arena); g_arena.ReleaseSpace(); base = NULL; INFO_LOG(MEMMAP, "Memory system shut down."); }
static bool Memory_TryBase(u8 *base, MemoryView *views, int num_views, u32 flags, MemArena *arena) { // OK, we know where to find free space. Now grab it! // We just mimic the popular BAT setup. int i; for (i = 0; i < num_views; i++) { MemoryView* view = &views[i]; void* view_base; bool use_sw_mirror; SKIP(flags, view->flags); #if _ARCH_64 // On 64-bit, we map the same file position multiple times, so we // don't need the software fallback for the mirrors. view_base = base + view->virtual_address; use_sw_mirror = false; #else // On 32-bit, we don't have the actual address space to store all // the mirrors, so we just map the fallbacks somewhere in our address // space and use the software fallbacks for mirroring. view_base = base + (view->virtual_address & 0x3FFFFFFF); use_sw_mirror = true; #endif if (use_sw_mirror && (view->flags & MV_MIRROR_PREVIOUS)) { view->view_ptr = views[i - 1].view_ptr; } else { view->mapped_ptr = arena->CreateView(view->shm_position, view->size, view_base); view->view_ptr = view->mapped_ptr; } if (!view->view_ptr) { // Argh! ERROR! Free what we grabbed so far so we can try again. MemoryMap_Shutdown(views, i+1, flags, arena); return false; } if (view->out_ptr) *(view->out_ptr) = (u8*) view->view_ptr; } return true; }