void call_linux(long a0, long a1, long a2) "{j
D,ovU)F\0
{
r0F*m'v$P7F%f0
#if 0LUPA开源社区,Fj;gESV `
/* to deliver a1 argument, this function is blocked */ !L]6Co|}M:N0
cache_clean_invalidate();LUPA开源社区:xs9Q$K!d"w(|)\k8{dH3@6@
tlb_invalidate();LUPA开源社区,Wb t$_} X(sr"S9G
#endifLUPA开源社区AP9TJl+p;l
:B2Uj#J;v5C_c^0
__asm__(LUPA开源社区sZa-|3Q-[a1b
"mov r0, %0\n" ]qL%QN2s;X5F@0
"mov r1, %1\n"LUPA开源社区Zi4i)l;R5CmU3[/p
D
"mov r2, %2\n"LUPA开源社区 dm.C,vL.zHC8Lg0|
"mov ip, #0\n" !@ |6Jf
sQ*R;h0
"mcr p15,
0, ip, c13, c0, 0\n" /* zero PID */ ^
~Ks{*l,d6RgU0
"mcr p15,
0, ip, c7, c7, 0\n" /*
invalidate I,D caches */ Jw,[0{ Y#EwhIh0
"mcr p15,
0, ip, c7, c10, 4\n" /* drain write
buffer */ _"L^tEq3]a0
"mcr p15,
0, ip, c8, c7, 0\n" /*
invalidate I,D TLBs */LUPA开源社区7Vt0b2zvE-E}
"mrc p15,
0, ip, c1, c0, 0\n" /* get
control register */LUPA开源社区)vSGb YN7EY
"bic ip,
ip,
#0x0001\n"
/* disable MMU */ mHr'vg,l$h0
"mcr p15,
0, ip, c1, c0, 0\n" /* write
control register */LUPA开源社区+q8c,r p1tg
i2w
"mov pc, r2\n"LUPA开源社区Z"\:t'aN7P0W1`Y
"nop\n" L%C,A#new0
"nop\n" YL%c3H;L#D0
: /* no outpus */ sm
SU1R$EA0
: "r" (a0), "r" (a1), "r" (a2) xVsn1Z
M0
); Er*Z3V7Or5N!d7gR0
}LUPA开源社区5k-~v.i-zY)g
LUPA开源社区3PL O%A-y$v3`
g
|