Annotation of xinu/sys/clkint.s, revision 1.1

1.1     ! root        1: /* clkint.s -  clkint */
        !             2: 
        !             3: #include <procreg.h>
        !             4: #include <conf.h>
        !             5: 
        !             6: /*------------------------------------------------------------------------
        !             7:  * clkint  --  real-time clock interrupt service routine 
        !             8:  *------------------------------------------------------------------------
        !             9: */
        !            10: 
        !            11:                                        /* define constants             */
        !            12: #define        CLEARINT 0xc1                   /* value to clear ICCS INT bit  */
        !            13: 
        !            14:        .text
        !            15:        .align  2                       /* align on longword boundary   */
        !            16:        .globl  _clkint
        !            17: _clkint:
        !            18:        mtpr    $DISABLE, $IPL          /* disable interrupts           */
        !            19: #if !defined(UVAX)
        !            20:        mtpr    $CLEARINT, $ICCS        /* clr interrupt bit in interval*/
        !            21:                                        /* clock control reg            */
        !            22: #else                                  /* Microvax has a 10ms rt clock */
        !            23:        decl    _count10                /* Is this the 10th interrupt?  */
        !            24:        jnequ   clret                   /*  no => return                */
        !            25:        movl    $10, _count10           /*  yes=> reset counter&continue*/
        !            26: #endif
        !            27:        decl    _tickctr                /* Is this the 10th tick?       */
        !            28:        jnequ   clckdef                 /*  no => process tick          */
        !            29:        movl    $10, _tickctr           /*  yes=> reset counter&continue*/
        !            30:        incl    _clktime                /* increment time-of-day clock  */
        !            31: clckdef:
        !            32:        tstl    _defclk                 /* Are clock ticks deferred?    */
        !            33:        jeqlu   notdef                  /*  no => go process this tick  */
        !            34:        incl    _clkdiff                /*  yes=> count in clkdiff and  */
        !            35:        rei                             /*        return quickly        */
        !            36: notdef:
        !            37:        tstl    _slnempty               /* Is sleep queue nonempty?     */
        !            38:        jeqlu   clpreem                 /* no => go process preemption  */
        !            39:        decw    *_sltop                 /* yes=> decrement delta key    */
        !            40:        jnequ   clpreem                 /*       on first process,      */
        !            41:                                        /*       calling wakeup if 0    */
        !            42:        pushr   $LOWREGS                /* save low registers           */
        !            43:        calls   $0, _wakeup             /* wakeup sleeping process      */
        !            44:        popr    $LOWREGS                /* restore low registers        */
        !            45: clpreem:
        !            46:        decl    _preempt                /* decrement preemption counter */
        !            47:        jnequ   clret                   /* and call resched if it is 0  */
        !            48:        pushr   $LOWREGS                /* save low registers           */
        !            49:        calls   $0, _resched            /* reschedule                   */
        !            50:        popr    $LOWREGS                /* restore low registers        */
        !            51: clret:
        !            52:        rei                             /* restore pre-interrupt IPL &  */
        !            53:                                        /* return from interrupt        */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.