Changeset bd1ecb0 in rtems for cpukit/score


Ignore:
Timestamp:
Mar 1, 2002, 4:21:12 PM (18 years ago)
Author:
Joel Sherrill <joel.sherrill@…>
Branches:
4.10, 4.11, 4.8, 4.9, master
Children:
0ea3293
Parents:
f9d1afc
Message:

2002-02-27 Greg Menke <gregory.menke@…>

  • cpu_asm.S: Fixed exception return address, modified FP context switch so FPU is properly enabled and also doesn't screw up the exception FP handling.
  • idtcpu.h: Added C0_TAR, the MIPS target address register used for returning from exceptions.
  • iregdef.h: Added R_TAR to the stack frame so the target address can be saved on a per-exception basis. The new entry is past the end of the frame gdb cares about, so doesn't affect gdb or cpu.h stuff.
  • rtems/score/cpu.h: added an #ifdef so cpu_asm.S can include it to obtain FPU defines without systax errors generated by the C defintions.
  • cpu.c: Improved interrupt level saves & restores.
Location:
cpukit/score/cpu/mips
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • cpukit/score/cpu/mips/ChangeLog

    rf9d1afc rbd1ecb0  
     12002-02-27      Greg Menke <gregory.menke@gsfc.nasa.gov>
     2
     3        * cpu_asm.S: Fixed exception return address, modified FP context
     4        switch so FPU is properly enabled and also doesn't screw up the
     5        exception FP handling.
     6        * idtcpu.h: Added C0_TAR, the MIPS target address register used for
     7        returning from exceptions.
     8        * iregdef.h: Added R_TAR to the stack frame so the target address
     9        can be saved on a per-exception basis.  The new entry is past the
     10        end of the frame gdb cares about, so doesn't affect gdb or cpu.h
     11        stuff.
     12        * rtems/score/cpu.h: added an #ifdef so cpu_asm.S can include it
     13        to obtain FPU defines without systax errors generated by the C
     14        defintions.
     15        * cpu.c: Improved interrupt level saves & restores.
     16       
    1172002-02-08      Joel Sherrill <joel@OARcorp.com>
    218
  • cpukit/score/cpu/mips/cpu.c

    rf9d1afc rbd1ecb0  
    11/*
    22 *  Mips CPU Dependent Source
     3 *
     4 *  2002:       Greg Menke (gregory.menke@gsfc.nasa.gov)
     5 *      Overhauled interrupt level and interrupt enable/disable code
     6 *      to more exactly support MIPS.  Our mods were for MIPS1 processors
     7 *      MIPS3 ports are affected, though apps written to the old behavior
     8 *      should still work OK.
    39 *
    410 *  Conversion to MIPS port by Alan Cudmore <alanc@linuxstart.com> and
     
    7581 *  This routine returns the current interrupt level.
    7682 */
    77    
     83
    7884unsigned32 _CPU_ISR_Get_level( void )
    7985{
     
    8187
    8288  mips_get_sr(sr);
     89
     90  //printf("current sr=%08X, ",sr);
    8391
    8492#if __mips == 3
    8593/* EXL bit and shift down hardware ints into bits 1 thru 6 */
    86   return ((sr & SR_EXL) >> 1) + ((sr & 0xfc00) >> 9);
     94  sr = ((sr & SR_EXL) >> 1) | ((sr & 0xfc00) >> 9);
    8795
    8896#elif __mips == 1
    8997/* IEC bit and shift down hardware ints into bits 1 thru 6 */
    90   return (sr & SR_IEC) + ((sr & 0xfc00) >> 9);
     98  sr = (sr & SR_IEC) | ((sr & 0xfc00) >> 9);
    9199
    92100#else
    93101#error "CPU ISR level: unknown MIPS level for SR handling"
    94102#endif
     103  //printf("intlevel=%02X\n",sr);
     104  return sr;
    95105}
    96106
     
    109119  */
    110120
     121  new_level &= 0xff;
    111122
    112123  mips_get_sr(sr);
    113124
    114125#if __mips == 3
    115   mips_set_sr(sr & ~SR_IE);                 /* first disable ie bit (recommended) */
     126  mips_set_sr( (sr & ~SR_IE) );                 /* first disable ie bit (recommended) */
    116127
    117128  srbits = sr & ~(0xfc00 | SR_EXL | SR_IE);
    118129
    119130  sr = srbits | ((new_level==0)? (0xfc00 | SR_EXL | SR_IE): \
    120                  (((new_level<<9) & 0xfc000) | \
     131                 (((new_level<<9) & 0xfc00) | \
    121132                  (new_level & 1)?(SR_EXL | SR_IE):0));
    122133/*
     
    135146 
    136147#elif __mips == 1
    137   mips_set_sr( (sr & ~SR_IEC) );       
    138 
     148  mips_set_sr( (sr & ~SR_IEC) );
    139149  srbits = sr & ~(0xfc00 | SR_IEC);
    140   sr = srbits | ((new_level==0)?0xfc01:( ((new_level<<9) & 0xfc000) | (new_level & 1)));
     150  //printf("current sr=%08X, newlevel=%02X, srbits=%08X, ",sr,new_level,srbits);
     151  sr = srbits | ((new_level==0)?0xfc01:( ((new_level<<9) & 0xfc00) | \
     152                                         (new_level & SR_IEC)));
     153  //printf("new sr=%08X\n",sr);
    141154#else
    142155#error "CPU ISR level: unknown MIPS level for SR handling"
     
    144157  mips_set_sr( sr );
    145158}
     159
     160
    146161
    147162/*PAGE
  • cpukit/score/cpu/mips/cpu_asm.S

    rf9d1afc rbd1ecb0  
    4848#include "idtcpu.h"
    4949
     50#define ASSEMBLY_ONLY
     51#include <rtems/score/cpu.h>
     52
     53               
    5054/* enable debugging shadow writes to misc ram, this is a vestigal
    5155* Mongoose-ism debug tool- but may be handy in the future so we
     
    5458
    5559#define INSTRUMENT_ISR_VECTORING
    56 //#define INSTRUMENT_EXECUTING_THREAD
     60/* #define INSTRUMENT_EXECUTING_THREAD */
    5761
    5862
     
    176180 */
    177181
    178 #if ( CPU_HARDWARE_FP == FALSE )
     182#if ( CPU_HARDWARE_FP == TRUE )
    179183FRAME(_CPU_Context_save_fp,sp,0,ra)
     184        .set noreorder
    180185        .set noat
    181186
    182 #if ( CPU_USE_DEFERRED_FP_SWITCH == TRUE )
    183187        /*
    184         ** Make sure the FPU is on before we save state.  This code is here
    185         ** because the FPU context switch might occur when an integer
    186         ** task is switching out w/ an FP task switching in, but the current
    187         ** FPU state was left by a sometime previously scheduled FP task.
    188         **
    189         ** In non-deferred FP context switch, if the exiting task is FP, then
    190         ** the FPU is already on so we don't need to do this.
     188        ** Make sure the FPU is on before we save state.  This code
     189        ** is here because the FPU context switch might occur when an
     190        ** integer task is switching out with a FP task switching in.
    191191        */
    192        
    193         MFC0    t0,C0_SR       
    194         li      k0,SR_CU1       
    195         or      t0,k0
     192        MFC0    t0,C0_SR
     193        li      t2,SR_CU1       
     194        move    t1,t0
     195        or      t0,t2           /* turn on the fpu */
     196#if __mips == 3
     197        li      t2,SR_EXL | SR_IE
     198#elif __mips == 1
     199        li      t2,SR_IEC
     200#endif
     201        not     t2
     202        and     t0,t2           /* turn off interrupts */       
    196203        MTC0    t0,C0_SR       
    197 #endif
    198204               
    199         ld   a1,(a0)
    200         NOP
     205        ld      a1,(a0)
     206        move    t0,ra
     207        jal     _CPU_Context_save_fp_from_exception
     208        NOP
     209       
     210        /*
     211        ** Reassert the task's state because we've not saved it yet.
     212        */
     213        MTC0    t1,C0_SR       
     214        j       t0     
     215        NOP
     216       
    201217        .globl _CPU_Context_save_fp_from_exception
    202218_CPU_Context_save_fp_from_exception:
     
    234250        swc1 $f31,FP31_OFFSET*F_SZ(a1)
    235251        j ra
    236         nop
     252        NOP
    237253        .set at
    238254ENDFRAME(_CPU_Context_save_fp)
     
    257273 */
    258274
    259 #if ( CPU_HARDWARE_FP == FALSE )
     275#if ( CPU_HARDWARE_FP == TRUE )
    260276FRAME(_CPU_Context_restore_fp,sp,0,ra)
    261277        .set noat
     278        .set noreorder
    262279       
    263280        /*
     
    266283        ** integer task is switching out with a FP task switching in.
    267284        */
    268        
    269         MFC0    t0,C0_SR       
    270         li      k0,SR_CU1       
    271         or      t0,k0
     285        MFC0    t0,C0_SR
     286        li      t2,SR_CU1       
     287        move    t1,t0
     288        or      t0,t2           /* turn on the fpu */
     289#if __mips == 3
     290        li      t2,SR_EXL | SR_IE
     291#elif __mips == 1
     292        li      t2,SR_IEC
     293#endif
     294        not     t2
     295        and     t0,t2           /* turn off interrupts */       
    272296        MTC0    t0,C0_SR       
    273297
    274         ld a1,(a0)
    275         NOP
     298        ld      a1,(a0)
     299        move    t0,ra
     300        jal     _CPU_Context_restore_fp_from_exception
     301        NOP
     302
     303        /*
     304        ** Reassert the old task's state because we've not restored the
     305        ** new one yet.
     306        */
     307        MTC0    t1,C0_SR       
     308        j       t0
     309        NOP
     310       
    276311        .globl _CPU_Context_restore_fp_from_exception
    277312_CPU_Context_restore_fp_from_exception:
     
    309344        lwc1 $f31,FP31_OFFSET*4(a1)
    310345        j ra
    311         nop
     346        NOP
    312347        .set at
    313348ENDFRAME(_CPU_Context_restore_fp)
     
    326361
    327362FRAME(_CPU_Context_switch,sp,0,ra)
    328 
    329         MFC0  t0,C0_SR
    330         li    t1,~(SR_INTERRUPT_ENABLE_BITS)
    331         STREG t0,C0_SR_OFFSET*R_SZ(a0)
    332         and   t0,t1
     363        .set noreorder
     364
     365        MFC0    t0,C0_SR
    333366#if __mips == 3
    334         ori   t0,(SR_EXL|SR_IE)         /* enable exception level to disable interrupts */
    335 #endif
    336         MTC0  t0,C0_SR
    337 
    338         STREG ra,RA_OFFSET*R_SZ(a0)     /* save current context */
     367        li      t1,SR_EXL | SR_IE
     368#elif __mips == 1
     369        li      t1,SR_IEC
     370#endif
     371        STREG   t0,C0_SR_OFFSET*R_SZ(a0)        /* save the task's SR */
     372        not     t1
     373        and     t0,t1                           /* mask off interrupts while we context switch */
     374        MTC0    t0,C0_SR
     375        NOP
     376
     377        STREG ra,RA_OFFSET*R_SZ(a0)             /* save current context */
    339378        STREG sp,SP_OFFSET*R_SZ(a0)
    340379        STREG fp,FP_OFFSET*R_SZ(a0)
     
    348387        STREG s7,S7_OFFSET*R_SZ(a0)
    349388
    350         /*  EPC is readonly...
    351         MFC0  t0,C0_EPC
    352         NOP
    353         STREG t0,C0_EPC_OFFSET*R_SZ(a0)
    354         */
    355389
    356390_CPU_Context_switch_restore:
    357         LDREG ra,RA_OFFSET*R_SZ(a1)         /* restore context */
     391        LDREG ra,RA_OFFSET*R_SZ(a1)             /* restore context */
    358392        LDREG sp,SP_OFFSET*R_SZ(a1)
    359393        LDREG fp,FP_OFFSET*R_SZ(a1)
     
    366400        LDREG s6,S6_OFFSET*R_SZ(a1)
    367401        LDREG s7,S7_OFFSET*R_SZ(a1)
    368 
    369         /*  EPC is readonly...
    370         LDREG t0,C0_EPC_OFFSET*R_SZ(a1)
    371         NOP
    372         MTC0  t0,C0_EPC
    373         */
    374402
    375403        LDREG t0, C0_SR_OFFSET*R_SZ(a1)
     
    395423//        NOP
    396424
    397        
     425
    398426/*
    399 ** Incorporate the new thread's FP coprocessor state and interrupt mask/enable
     427** Incorporate the new task's FP coprocessor state and interrupt mask/enable
    400428** into the status register.  We jump thru the requisite hoops to ensure we
    401429** maintain all other SR bits as global values.
     
    405433** Interrupt Level & int level manipulation functions cannot enable/disable them,
    406434** so they are automatically enabled for all tasks.  To turn them off, a thread 
    407 ** must itself manipulate the SR register.
     435** must itself manipulate the SR register. 
     436**
     437** Although something of a hack on this processor, we treat the SR register
     438** int enables as the RTEMS interrupt level.  We use the int level
     439** value as a bitmask, not as any sort of greater than/less than metric.
     440** Manipulation of a task's interrupt level directly corresponds to manipulation
     441** of that task's SR bits, as seen in cpu.c
     442**
     443** Note, interrupts are disabled before context is saved, though the thread's
     444** interrupt enable state is recorded.  The task swapping in will apply its
     445** specific SR bits, including interrupt enable.  If further task-specific
     446** SR bits are arranged, it is this code, the cpu.c interrupt level stuff and
     447** cpu.h task initialization code that will be affected. 
    408448*/
    409449
     450        li      t2,SR_CU1
     451        or      t2,SR_IMASK
     452
     453        /* int enable bits */
    410454#if __mips == 3
    411         li      k0,(SR_CU1 | SR_IMASK | SR_EXL | SR_IE)
     455        or      t2,SR_EXL + SR_IE
    412456#elif __mips == 1
    413         li      k0,(SR_CU1 | SR_IMASK | SR_IEC)
    414 #endif
    415         and     t0,k0           
     457        or      t2,SR_IEC + SR_IEP      /* save current & previous int enable */
     458#endif
     459        and     t0,t2           /* keep only the per-task bits */
    416460               
    417461        MFC0    t1,C0_SR        /* grab the current SR */
    418         not     k0              /* invert k0 so we can clear out the SR bits */
    419         and     t1,k0
    420 
    421         or      t0,t1           /* setup the new task's SR value */
    422 
    423         MTC0    t0,C0_SR        /* and load the new SR */
     462        not     t2             
     463        and     t1,t2           /* mask off the old task's bits */
     464        or      t1,t0           /* or in the new task's bits */
     465        MTC0    t1,C0_SR        /* and load the new SR */
    424466        NOP
    425467       
    426468/* _CPU_Context_1: */
    427         j ra
     469        j       ra
    428470        NOP
    429471ENDFRAME(_CPU_Context_switch)
    430472
     473       
    431474/*
    432475 *  _CPU_Context_restore
     
    443486
    444487FRAME(_CPU_Context_restore,sp,0,ra)
    445         ADD a1,a0,zero
    446         j   _CPU_Context_switch_restore
    447         NOP
     488        .set noreorder
     489        move    a1,a0
     490        j       _CPU_Context_switch_restore
     491        NOP
     492
    448493ENDFRAME(_CPU_Context_restore)
    449494
     495       
    450496ASM_EXTERN(_ISR_Nest_level, SZ_INT)
    451497ASM_EXTERN(_Thread_Dispatch_disable_level,SZ_INT)
     
    453499ASM_EXTERN(_ISR_Signals_to_thread_executing,SZ_INT)
    454500ASM_EXTERN(_Thread_Executing,SZ_INT)
     501       
    455502.extern _Thread_Dispatch
    456503.extern _ISR_Vector_table
     
    527574#ifdef INSTRUMENT_EXECUTING_THREAD
    528575        lw t2, _Thread_Executing
    529         nop
     576        NOP
    530577        sw t2, 0x8001FFF0
    531578#endif
     
    541588_ISR_Handler_Exception:
    542589
     590        /*
     591        sw      k0,0x8001FF00
     592        sw      t1,0x8001FF04
     593        */
     594       
    543595        /*  If we return from the exception, it is assumed nothing
    544596         *  bad is going on and we can continue to run normally.
     
    548600         *  NOTE: This is the path the debugger stub will take.
    549601         */
     602
     603        /* already got k0 = cause in the interrupt test above */
     604        STREG    k0,R_CAUSE*R_SZ(sp)
    550605
    551606        STREG    sp,SP_OFFSET*R_SZ(sp)     /* save sp */
     
    560615        STREG    s7,S7_OFFSET*R_SZ(sp)
    561616
    562         MFC0     k0,C0_CAUSE               /* save cause */
    563         NOP
    564         STREG    k0,R_CAUSE*R_SZ(sp)
    565 
    566617        /* CP0 special registers */
    567618
    568         MFC0     t0,C0_BADVADDR
    569         nop
    570         STREG    t0,R_BADVADDR*R_SZ(sp)
    571 
     619        MFC0     t0,C0_TAR
     620        MFC0     t1,C0_BADVADDR
     621        STREG    t0,R_TAR*R_SZ(sp)
     622        STREG    t1,R_BADVADDR*R_SZ(sp)
     623       
    572624#if ( CPU_HARDWARE_FP == TRUE )
    573625        MFC0     t0,C0_SR                 /* FPU is enabled, save state */
     626        NOP
    574627        srl      t0,t0,16
    575628        andi     t0,t0,(SR_CU1 >> 16)
    576629        beqz     t0, 1f
    577         nop
     630        NOP
    578631       
    579632        la       a1,R_F0*R_SZ(sp)
    580633        jal      _CPU_Context_save_fp_from_exception
    581         nop
     634        NOP
    582635        MFC1     t0,C1_REVISION
    583636        MFC1     t1,C1_STATUS
     
    5876401:     
    588641#endif
     642       
    589643        move     a0,sp
    590644        jal      mips_vector_exceptions
    591         nop
    592 
     645        NOP
     646
     647        /* since we're returning, compute the address of the instruction we'll return to */
     648
     649        LDREG   t1, R_CAUSE*R_SZ(sp)
     650        LDREG   t0, R_EPC*R_SZ(sp)
     651
     652        /* first see if the exception happened in the delay slot */
     653        li      t3,CAUSE_BD
     654        AND     t4,t1,t3
     655        beqz    t4,excnodelay
     656        NOP
     657       
     658        /* it did, now see if the branch occured or not */
     659        li      t3,CAUSE_BT
     660        AND     t4,t1,t3
     661        beqz    t4,excnobranch
     662        NOP
     663       
     664        /* branch was taken, we resume at the branch target */
     665        LDREG   t0, R_TAR*R_SZ(sp)
     666        j       excreturn
     667        NOP
     668
     669excnobranch:
     670        ADDU    t0,R_SZ
     671
     672excnodelay:     
     673        ADDU    t0,R_SZ
     674               
     675excreturn:     
     676        STREG   t0, R_EPC*R_SZ(sp)
     677        NOP
     678       
     679       
    593680#if ( CPU_HARDWARE_FP == TRUE )
    594681        MFC0     t0,C0_SR               /* FPU is enabled, restore state */
     682        NOP
    595683        srl      t0,t0,16
    596684        andi     t0,t0,(SR_CU1 >> 16)
    597685        beqz     t0, 2f
    598         nop
     686        NOP
    599687       
    600688        la       a1,R_F0*R_SZ(sp)
    601689        jal      _CPU_Context_restore_fp_from_exception
    602         nop
     690        NOP
    603691        LDREG    t0,R_FEIR*R_SZ(sp)
    604692        LDREG    t1,R_FCSR*R_SZ(sp)
     
    620708
    621709        j        _ISR_Handler_exit
    622         nop
     710        NOP
    623711
    624712_ISR_Handler_1:
     
    634722        beq      k0,zero,_ISR_Handler_exit
    635723
    636        
    637724       
    638725       
     
    669756       
    670757#ifdef INSTRUMENT_ISR_VECTORING
    671         nop
     758        NOP
    672759        li      t1, 1
    673760        sw      t1, 0x8001e000
     
    676763        move     a0,sp
    677764        jal      mips_vector_isr_handlers
    678         nop
     765        NOP
    679766       
    680767#ifdef INSTRUMENT_ISR_VECTORING
    681768        li      t1, 0
    682769        sw      t1, 0x8001e000
    683         nop
     770        NOP
    684771#endif
    685772               
     
    704791        or  t0,t2,t1
    705792        bne t0,zero,_ISR_Handler_exit
    706         nop
     793        NOP
    707794
    708795
     
    726813        or    t0,t0,t1
    727814        beq   t0,zero,_ISR_Handler_exit
    728         nop
     815        NOP
    729816
    730817       
     
    732819#ifdef INSTRUMENT_EXECUTING_THREAD
    733820        lw      t0,_Thread_Executing
    734         nop
     821        NOP
    735822        sw      t0,0x8001FFF4
    736823#endif
     
    744831
    745832        MFC0    t0, C0_SR
    746         NOP
    747         or      t0, SR_INTERRUPT_ENABLE_BITS
     833#if __mips == 3
     834        li      t1,SR_EXL | SR_IE
     835#elif __mips == 1
     836        li      t1,SR_IEC
     837#endif
     838        or      t0, t1
    748839        MTC0    t0, C0_SR
    749840        NOP
    750                
     841                       
    751842        jal     _Thread_Dispatch
    752843        NOP
    753844
     845/*
     846** turn interrupts back off while we restore context so
     847** a badly timed interrupt won't accidentally mess up k0
     848*/
     849        MFC0    t0, C0_SR
     850#if __mips == 3
     851        li      t1,SR_EXL | SR_IE
     852#elif __mips == 1
     853        li      t1,SR_IEC | SR_KUC      /* ints off, kernel mode on (kernel mode enabled is bit clear..argh!) */
     854#endif
     855        not     t1
     856        and     t0, t1
     857        MTC0    t0, C0_SR
     858        NOP
     859       
    754860#ifdef INSTRUMENT_EXECUTING_THREAD
    755861        lw      t0,_Thread_Executing
    756         nop
     862        NOP
    757863        sw      t0,0x8001FFF8
    758864#endif
     
    772878** Skip the SR restore because its a global register. _CPU_Context_switch_restore
    773879** adjusts it according to each task's configuration.  If we didn't dispatch, the
    774 ** SR value isn't changing, so all we need to do is return.
     880** SR value isn't changed, so all we need to do is return.
    775881**
    776882*/
    777 
    778883        /* restore context from stack */
    779884       
    780885#ifdef INSTRUMENT_EXECUTING_THREAD
    781886        lw      t0,_Thread_Executing
    782         nop
     887        NOP
    783888        sw      t0, 0x8001FFFC
    784889#endif
     
    817922        j         k0
    818923        rfe
    819         nop
     924        NOP
    820925
    821926       .set    reorder
    822927ENDFRAME(_ISR_Handler)
    823928
    824        
     929
     930       
     931               
    825932FRAME(mips_break,sp,0,ra)
    826 #if 1
    827         break 0x0
    828         j mips_break
    829 #else
    830         j ra
    831 #endif
    832         nop
     933        .set noreorder
     934        break   0x0
     935        j       ra
     936        NOP
     937       .set    reorder
    833938ENDFRAME(mips_break)
    834939
  • cpukit/score/cpu/mips/idtcpu.h

    rf9d1afc rbd1ecb0  
    363363 */
    364364#define CAUSE_BD        0x80000000      /* Branch delay slot */
     365#define CAUSE_BT        0x40000000      /* Branch Taken */
    365366#define CAUSE_CEMASK    0x30000000      /* coprocessor error */
    366367#define CAUSE_CESHIFT   28
     
    392393#define C0_PAGEMASK     $5              /* tlb page mask */
    393394#define C0_WIRED        $6              /* number of wired tlb entries */
     395#endif
     396
     397#if  __mips == 1
     398#define C0_TAR          $6
    394399#endif
    395400
  • cpukit/score/cpu/mips/iregdef.h

    rf9d1afc rbd1ecb0  
    226226#define R_FEIR          71
    227227#define R_TLBHI         72
     228
    228229#if __mips == 1
    229230#define R_TLBLO         73
    230231#endif
    231232#if  __mips == 3
    232 #define R_TLBLO0        74
    233 #endif
     233#define R_TLBLO0        73
     234#endif
     235
    234236#define R_INX           74
    235237#define R_RAND          75
     
    238240#define R_MODE          78
    239241#define R_PRID          79
     242#define R_TAR           80
    240243#if __mips == 1
    241 #define NREGS           80
     244#define NREGS           81
    242245#endif
    243246#if  __mips == 3
    244 #define R_TLBLO1        80
    245 #define R_PAGEMASK      81
    246 #define R_WIRED         82
    247 #define R_COUNT         83
    248 #define R_COMPARE       84
    249 #define R_CONFIG        85
    250 #define R_LLADDR        86
    251 #define R_WATCHLO       87
    252 #define R_WATCHHI       88
    253 #define R_ECC           89
    254 #define R_CACHEERR      90
    255 #define R_TAGLO         91
    256 #define R_TAGHI         92
    257 #define R_ERRPC         93
    258 #define R_XCTXT         94  /* Ketan added from SIM64bit */
    259 
    260 #define NREGS           95
     247#define R_TLBLO1        81
     248#define R_PAGEMASK      82
     249#define R_WIRED         83
     250#define R_COUNT         84
     251#define R_COMPARE       85
     252#define R_CONFIG        86
     253#define R_LLADDR        87
     254#define R_WATCHLO       88
     255#define R_WATCHHI       89
     256#define R_ECC           90
     257#define R_CACHEERR      91
     258#define R_TAGLO         92
     259#define R_TAGHI         93
     260#define R_ERRPC         94
     261#define R_XCTXT         95  /* Ketan added from SIM64bit */
     262
     263#define NREGS           96
    261264#endif
    262265
  • cpukit/score/cpu/mips/rtems/mips/idtcpu.h

    rf9d1afc rbd1ecb0  
    363363 */
    364364#define CAUSE_BD        0x80000000      /* Branch delay slot */
     365#define CAUSE_BT        0x40000000      /* Branch Taken */
    365366#define CAUSE_CEMASK    0x30000000      /* coprocessor error */
    366367#define CAUSE_CESHIFT   28
     
    392393#define C0_PAGEMASK     $5              /* tlb page mask */
    393394#define C0_WIRED        $6              /* number of wired tlb entries */
     395#endif
     396
     397#if  __mips == 1
     398#define C0_TAR          $6
    394399#endif
    395400
  • cpukit/score/cpu/mips/rtems/mips/iregdef.h

    rf9d1afc rbd1ecb0  
    226226#define R_FEIR          71
    227227#define R_TLBHI         72
     228
    228229#if __mips == 1
    229230#define R_TLBLO         73
    230231#endif
    231232#if  __mips == 3
    232 #define R_TLBLO0        74
    233 #endif
     233#define R_TLBLO0        73
     234#endif
     235
    234236#define R_INX           74
    235237#define R_RAND          75
     
    238240#define R_MODE          78
    239241#define R_PRID          79
     242#define R_TAR           80
    240243#if __mips == 1
    241 #define NREGS           80
     244#define NREGS           81
    242245#endif
    243246#if  __mips == 3
    244 #define R_TLBLO1        80
    245 #define R_PAGEMASK      81
    246 #define R_WIRED         82
    247 #define R_COUNT         83
    248 #define R_COMPARE       84
    249 #define R_CONFIG        85
    250 #define R_LLADDR        86
    251 #define R_WATCHLO       87
    252 #define R_WATCHHI       88
    253 #define R_ECC           89
    254 #define R_CACHEERR      90
    255 #define R_TAGLO         91
    256 #define R_TAGHI         92
    257 #define R_ERRPC         93
    258 #define R_XCTXT         94  /* Ketan added from SIM64bit */
    259 
    260 #define NREGS           95
     247#define R_TLBLO1        81
     248#define R_PAGEMASK      82
     249#define R_WIRED         83
     250#define R_COUNT         84
     251#define R_COMPARE       85
     252#define R_CONFIG        86
     253#define R_LLADDR        87
     254#define R_WATCHLO       88
     255#define R_WATCHHI       89
     256#define R_ECC           90
     257#define R_CACHEERR      91
     258#define R_TAGLO         92
     259#define R_TAGHI         93
     260#define R_ERRPC         94
     261#define R_XCTXT         95  /* Ketan added from SIM64bit */
     262
     263#define NREGS           96
    261264#endif
    262265
  • cpukit/score/cpu/mips/rtems/score/cpu.h

    rf9d1afc rbd1ecb0  
    315315 */
    316316
    317 #define CPU_MODES_INTERRUPT_MASK   0x00000001
     317#define CPU_MODES_INTERRUPT_MASK   0x000000ff
    318318
    319319/*
     
    360360 *  a debugger such as gdb.  But that is another problem.
    361361 */
     362
     363#ifndef ASSEMBLY_ONLY
    362364
    363365/* WARNING: If this structure is modified, the constants in cpu.h must be updated. */
     
    596598}   rtems_cpu_table;
    597599
     600
    598601/*
    599602 *  Macros to access required entires in the CPU Table are in
     
    648651 */
    649652
     653
     654
    650655/*
    651656 *  Nothing prevents the porter from declaring more CPU specific variables.
     
    686691
    687692#define CPU_STACK_MINIMUM_SIZE          (2048*sizeof(unsigned32))
     693
    688694
    689695/*
     
    846852#if __mips == 3
    847853#define _INTON  (SR_EXL | SR_IE)
     854#define _EXTRABITS      0
    848855#endif
    849856#if __mips == 1
    850 #define _INTON  SR_IEC
     857#define _INTON          SR_IEC
     858#define _EXTRABITS      0  /* make sure we're in user mode on MIPS1 processors */
    851859#endif
    852860
     
    863871                                                       0x300 | \
    864872                                                       ((_intlvl & 1)?_INTON:0)) ) | \
    865                                 SR_CU0 | ((_is_fp)?SR_CU1:0); \
     873                                SR_CU0 | ((_is_fp)?SR_CU1:0) | _EXTRABITS; \
    866874  }
    867875
     
    11791187  (((value&0xff) << 8) | ((value >> 8)&0xff))
    11801188
     1189
     1190#endif
     1191
     1192
     1193
    11811194#ifdef __cplusplus
    11821195}
Note: See TracChangeset for help on using the changeset viewer.