X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=kern%2Fswitch_dsp56k.c;h=60f6fd2f0c05dd95d3465745afbe25cd44cc908a;hb=5f3952176a4e9a00ca8dd5ec4a6b994958f89e0a;hp=e10216cbb6ccea4c3a37736658bcd29c5b010659;hpb=1cc167e20f21d2e81527ca47ccd4a21a6198f86f;p=bertos.git diff --git a/kern/switch_dsp56k.c b/kern/switch_dsp56k.c old mode 100755 new mode 100644 index e10216cb..60f6fd2f --- a/kern/switch_dsp56k.c +++ b/kern/switch_dsp56k.c @@ -1,7 +1,9 @@ -/*! +/** * \file + * * * \version $Id$ * @@ -10,42 +12,36 @@ * \brief DSP5680x task switching support */ -/* - * $Log$ - * Revision 1.1 2004/05/23 17:27:00 bernie - * Import kern/ subdirectory. - * - */ +/*#* + *#* $Log$ + *#* Revision 1.7 2006/07/19 12:56:27 bernie + *#* Convert to new Doxygen style. + *#* + *#* Revision 1.6 2006/02/24 01:17:05 bernie + *#* Update for new emulator. + *#* + *#* Revision 1.5 2005/11/04 16:20:02 bernie + *#* Fix reference to README.devlib in header. + *#* + *#* Revision 1.4 2004/08/25 14:12:09 rasky + *#* Aggiornato il comment block dei log RCS + *#* + *#* Revision 1.3 2004/07/30 14:24:16 rasky + *#* Task switching con salvataggio perfetto stato di interrupt (SR) + *#* Kernel monitor per dump informazioni su stack dei processi + *#* + *#* Revision 1.2 2004/06/03 11:27:09 bernie + *#* Add dual-license information. + *#* + *#* Revision 1.1 2004/05/23 17:27:00 bernie + *#* Import kern/ subdirectory. + *#* + *#*/ void asm_switch_context(void ** new_sp/*R2*/, void ** save_sp/*R3*/); asm void asm_switch_context(void ** new_sp, void ** save_sp) { lea (SP)+ - move n,x:(SP)+ - move x0,x:(SP)+ - move y0,x:(SP)+ - move y1,x:(SP)+ - move a0,x:(SP)+ - move a1,x:(SP)+ - move a2,x:(SP)+ - move b0,x:(SP)+ - move b1,x:(SP)+ - move b2,x:(SP)+ - move r0,x:(SP)+ - move r1,x:(SP)+ - move r2,x:(SP)+ - move r3,x:(SP)+ - - move omr,x:(SP)+ - move la,x:(SP)+ - move m01,x:(SP)+ - move lc,x:(SP)+ - - ; - ; save hardware stack - ; - move hws,x:(SP)+ - move hws,x:(SP)+ ; From the manual: ; The compiler uses page 0 address locations X: 0x0030 - 0x003F as register @@ -73,15 +69,18 @@ asm void asm_switch_context(void ** new_sp, void ** save_sp) move y1,x:(SP)+ move x:<$3F,y1 move y1,x:(SP) - - ; - ; 28 words have been pushed on the stack. + + ; + ; Switch stacks nop move SP, x:(R3) nop move x:(R2), SP nop + ; + ; restore all saved registers + ; pop y1 move y1,x:<$3F pop y1 @@ -99,38 +98,13 @@ asm void asm_switch_context(void ** new_sp, void ** save_sp) pop y1 move y1,x:<$38 - ; - ; restore hardware stack - ; - move hws,la ; Clear HWS to ensure proper reload - move hws,la - pop HWS - pop HWS - - ; - ; restore all saved registers - ; - pop lc - pop m01 - pop la - pop omr - - pop r3 - pop r2 - pop r1 - pop r0 - pop b2 - pop b1 - pop b0 - pop a2 - pop a1 - pop a0 - - pop y1 - pop y0 - pop x0 + ; SR is already pushed on the stack (normal call context). Use RTI to restore + ; it, so that interrupt status is preserved across the tasks. + rti +} - pop n - - rts +int asm_switch_version(void); +int asm_switch_version(void) +{ + return 1; }