Пример #1
0
static void me_loop(volatile struct me_struct *mei)
{
	unsigned int k1;

	k1 = pspSdkSetK1(0);

	while (mei->init) // ME runs this loop until killed
	{
		while (mei->start == 0); // wait for function
		mei->start = 0;
		if (mei->precache_len)
		{
			if (mei->precache_len < 0)
				dcache_inv_all();
			else
				dcache_inv_range(mei->precache_addr, mei->precache_len);
		}
		mei->result = mei->func(mei->param); // run function
		if (mei->postcache_len)
		{
			if (mei->postcache_len < 0)
				dcache_wbinv_all();
			else
				dcache_wbinv_range(mei->postcache_addr, mei->postcache_len);
		}
		mei->done = 1;
	}

	pspSdkSetK1(k1);

	while (1); // loop forever until ME reset
}
Пример #2
0
void dcache_disable(void)
{
	/* turn off D-cache */
	dcache_stop();

	/* clear and invalidate d-cache */
	dcache_flush_all();

	/* drain write buffer */
	asm("mcr p15, 0, %0, c7, c10, 4": :"r"(0));

	/* invalidate d-cache */
	dcache_inv_all();

	/* disable mmu, d-cache */
	mmu_turnoff();
}