Changeset 29d8227e in rtems


Ignore:
Timestamp:
Dec 2, 1996, 7:48:29 PM (24 years ago)
Author:
Joel Sherrill <joel.sherrill@…>
Branches:
4.10, 4.11, 4.8, 4.9, 5, master
Children:
c766cac
Parents:
f4b7e297
Message:

Updates from Derrick Ostertag <ostertag@…> to fix bug in
interrupt handling.

Files:
5 edited

Legend:

Unmodified
Added
Removed
  • c/src/exec/score/cpu/a29k/a29k.h

    rf4b7e297 r29d8227e  
    1111 *
    1212 */
    13 /* @(#)a29k.h       09/12/96     1.2 */
     13/* @(#)a29k.h       10/21/96     1.3 */
    1414
    1515#ifndef _INCLUDE_A29K_h
     
    6868#define CPU_NAME "AMD 29K"
    6969
     70/*
     71 * Some bits in the CPS:
     72 */
     73#define TD      0x20000
     74#define DI      0x00002
     75
    7076#ifdef __cplusplus
    7177}
  • c/src/exec/score/cpu/a29k/cpu.c

    rf4b7e297 r29d8227e  
    3030 */
    3131#ifndef lint
    32 static char _sccsid[] = "@(#)cpu.c 21 Aug 1996     1.6\n";
     32static char _sccsid[] = "@(#)cpu.c 10/21/96     1.8\n";
    3333#endif
    3434
     
    9595unsigned32 _CPU_ISR_Get_level( void )
    9696{
     97  unsigned32    cps;
     98
    9799  /*
    98100   *  This routine returns the current interrupt level.
    99101   */
    100    return 0;
     102  cps = a29k_getops();
     103  if (cps & (TD|DI))
     104    return 1;
     105  else
     106    return 0;
    101107}
    102108
     
    107113 
    108114extern void intr14( void );
    109 extern void intr3( void );
    110 extern void intr2( void );
     115extern void intr18( void );
     116extern void intr19( void );
    111117
    112118void _CPU_ISR_install_raw_handler(
     
    125131         _settrap( vector, intr14 );
    126132         break;
    127       case 3:
    128          _settrap( vector, intr3 );
    129          break;
    130       case 2:
    131          _settrap( vector, intr2 );
    132          break;
     133      case 18:
     134         _settrap( vector, intr18 );
     135         break;
     136      case 19:
     137         _settrap( vector, intr19 );
     138         break;
     139
    133140      default:
    134141         break;
  • c/src/exec/score/cpu/a29k/cpu.h

    rf4b7e297 r29d8227e  
    3131 *  $Id$
    3232 */
    33 /* @(#)cpu.h       09/06/96     1.10 */
     33/* @(#)cpu.h    10/21/96        1.11 */
    3434
    3535#ifndef __CPU_h
     
    4747extern unsigned int a29k_disable( void );
    4848extern void a29k_enable( unsigned int cookie );
     49extern unsigned int a29k_getops( void );
     50extern void a29k_getops_sup( void );
    4951extern void a29k_disable_sup( void );
    5052extern void a29k_enable_sup( void );
     
    656658      (_the_context)->PC1 = _entry_point;                           \
    657659      (_the_context)->PC0 = (unsigned32)((char *)_entry_point + 4); \
     660      if (_isr) { (_the_context)->OPS |= (TD | DI); }               \
     661      else                                                          \
     662                { (_the_context)->OPS &= ~(TD | DI); }              \
    658663  }while(0)
    659664
  • c/src/exec/score/cpu/a29k/cpu_asm.s

    rf4b7e297 r29d8227e  
    392392;        nop
    393393
     394        .global _a29k_getops
     395_a29k_getops:
     396        asneq 113, gr96, gr96
     397        jmpi lr0
     398        nop
     399
     400        .global _a29k_getops_sup
     401_a29k_getops_sup:
     402        mfsr    gr96, ops       ; caller wants ops
     403        iret
     404        nop
     405
    394406        .global _a29k_disable
    395407_a29k_disable:
     
    401413_a29k_disable_sup:
    402414        mfsr    kt0, ops
     415        add     gr96, kt0, 0    ; return ops to caller
    403416        const   kt1, (DI | TD)
    404417        consth  kt1, (DI | TD)
     
    417430_a29k_disable_all_sup:
    418431        mfsr    kt0, ops
    419         const   kt1, DA
    420         consth  kt1, DA
     432        const   kt1, (DI | TD)
     433        consth  kt1, (DI | TD)
    421434        or      kt1, kt0, kt1
    422435        mtsr    ops, kt1
     
    433446_a29k_enable_all_sup:
    434447        mfsr    kt0, ops
    435         const   kt1, DA
    436         consth  kt1, DA
     448        const   kt1, (DI | TD)
     449        consth  kt1, (DI | TD)
    437450        andn    kt1, kt0, kt1
    438451        mtsr    ops, kt1
     
    451464        const   kt1, (DI | TD)
    452465        consth  kt1, (DI | TD)
    453         andn    kt1, kt0, kt1
     466        and     kt3, lr2, kt1
     467        andn    kt0, kt0, kt1
     468        or      kt1, kt0, kt3
    454469        mtsr    ops, kt1
    455470        iret
  • cpukit/score/cpu/a29k/cpu.c

    rf4b7e297 r29d8227e  
    3030 */
    3131#ifndef lint
    32 static char _sccsid[] = "@(#)cpu.c 21 Aug 1996     1.6\n";
     32static char _sccsid[] = "@(#)cpu.c 10/21/96     1.8\n";
    3333#endif
    3434
     
    9595unsigned32 _CPU_ISR_Get_level( void )
    9696{
     97  unsigned32    cps;
     98
    9799  /*
    98100   *  This routine returns the current interrupt level.
    99101   */
    100    return 0;
     102  cps = a29k_getops();
     103  if (cps & (TD|DI))
     104    return 1;
     105  else
     106    return 0;
    101107}
    102108
     
    107113 
    108114extern void intr14( void );
    109 extern void intr3( void );
    110 extern void intr2( void );
     115extern void intr18( void );
     116extern void intr19( void );
    111117
    112118void _CPU_ISR_install_raw_handler(
     
    125131         _settrap( vector, intr14 );
    126132         break;
    127       case 3:
    128          _settrap( vector, intr3 );
    129          break;
    130       case 2:
    131          _settrap( vector, intr2 );
    132          break;
     133      case 18:
     134         _settrap( vector, intr18 );
     135         break;
     136      case 19:
     137         _settrap( vector, intr19 );
     138         break;
     139
    133140      default:
    134141         break;
Note: See TracChangeset for help on using the changeset viewer.