コード例 #1
0
ファイル: mem_map.cpp プロジェクト: ignika98/citra
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");
}
コード例 #2
0
ファイル: MemMap.cpp プロジェクト: Orphis/ppsspp
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.");
}
コード例 #3
0
ファイル: MemMap.cpp プロジェクト: Klozz/ppsspp
void Shutdown()
{
	u32 flags = 0;

	MemoryMap_Shutdown(flags);
	base = NULL;
	DEBUG_LOG(MEMMAP, "Memory system shut down.");
}
コード例 #4
0
ファイル: MemMap.cpp プロジェクト: Versus9/ppsspp
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.");
}
コード例 #5
0
ファイル: MemArena.cpp プロジェクト: calmbrain/dolphin
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;
}
コード例 #6
0
ファイル: MemMap.cpp プロジェクト: ANR2ME/ppsspp
void Shutdown()
{
	lock_guard guard(g_shutdownLock);
	u32 flags = 0;

	MemoryMap_Shutdown(flags);
	base = NULL;
	DEBUG_LOG(MEMMAP, "Memory system shut down.");
}
コード例 #7
0
ファイル: mem_map.cpp プロジェクト: Fortyseven/citra
void Shutdown() {
    u32 flags = 0;
    MemoryMap_Shutdown(g_views, kNumMemViews, flags, &g_arena);
    
    g_arena.ReleaseSpace();
    g_base = NULL;

    NOTICE_LOG(MEMMAP, "shutdown OK");
}
コード例 #8
0
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.");
}
コード例 #9
0
ファイル: MemArena.cpp プロジェクト: Buddybenj/dolphin
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;
}