Annotation of cci/d/event/vkcall_evt.s, revision 1.1.1.1

1.1       root        1: 
                      2: #
                      3: #      *kernel call event test (virtual)
                      4: #      *Try KCALL 3 times with different operand specifiers
                      5: #
                      6: #      R3 = which KCALL is testing (1,2,3)
                      7: #      R0 = error code
                      8: #           1 - Error in KSP after Kcall
                      9: #               R1 = actual KSP,  R2 = expected KSP
                     10: #           2 - Error in Kcall parameter pushed on the stack
                     11: #               R1 = actual,  R2 = expected
                     12: #           3 - Error in PC pushed on the stack
                     13: #               R1 = actual,  R2 = expected
                     14: #           4 - Error in PSL pushed on the stack
                     15: #               R1 = actual,  R2 = expected
                     16: #
                     17:        .globl  _kcall_evt              
                     18: _kcall_evt:
                     19:        .word   0x1fff                  
                     20: 
                     21:        mtpr    $1,$TBIA                /* Purge Translation buffer */
                     22:        clrl    loopcnt                 /* Try Kcall 3 times */
                     23: #
                     24: #      Set up user P2PT :
                     25: #                                      
                     26:        movl    $241,r1                 
                     27:        movl    _unused,r2              
                     28:        movl    $255,r3                 
                     29: 1:
                     30:        orl3    $(PG_V|PG_UW),r2,_u0p2pt[r1]    
                     31:        incl    r2
                     32:        aobleq  r3,r1,1b
                     33: 
                     34:        movl    $255,r2
                     35:        andl2   $0x7fffffff,_u0p2pt[r2]   
                     36:                                          
                     37:        movl    $250,r2
                     38:        andl2   $0x7fffffff,_u0p2pt[r2]   
                     39:        decl    r2
                     40:        andl2   $0x7fffffff,_u0p2pt[r2]   
                     41:        movl    $244,r2
                     42:        andl2   $0x7fffffff,_u0p2pt[r2]   
                     43: #
                     44: #      Set up User P0PT : Virtual page 0 to N are mapped
                     45: #      to physical pages that contain User code. PTEs are
                     46: #      set to valid, User/Kernel read.
                     47: #
                     48:        clrl    r2                      
                     49:        andl3   $_utest,$0x3fffffff,r1  /* R1 = First addr of User code */
                     50:        andl3   $0x000003ff,r1,r7       
                     51:        shrl    $PGSHIFT,r1,r1          /* R1 = First page no of User code */
                     52:        movl    $_eutest+NBPG-1,r3      /* R3 = Last VA of user code */
                     53:        andl2   $0x3fffffff,r3
                     54:        shrl    $PGSHIFT,r3,r3          /* R3 = Last page no of User code */
                     55: 1:
                     56:        orl3    $(PG_V|PG_UW),r1,_u0p0pt[r2]    /* Valid, User/Kernel write */
                     57:        incl    r2                      /* Next page */
                     58:        aobleq  r3,r1,1b
                     59: 
                     60:        movab   _pcb0,r1                /* Initialize PCB #0 */
                     61:        movl    $0xbfffe3fc,PCB_KSP(r1)
                     62:        movl    $0xbfffe3fc,exp_ksp
                     63:        movl    $0xbffffbfc,PCB_USP(r1)
                     64:        movl    r7,PCB_PC(r1)
                     65:        movl    $0x01000000,PCB_PSL(r1) /* PCB_PSL : User mode, IPL 0 */
                     66:        movl    $0x01000000,exp_upsl    /* Set expected PSL */
                     67:        movl    $_u0p0pt,PCB_P0BR(r1)
                     68:        movl    $_u0p1pt,PCB_P1BR(r1)
                     69:        movl    $0xbfc03400,PCB_P2BR(r1)
                     70:        movl    $3,PCB_P0LR(r1)
                     71:        movl    $8,PCB_P1LR(r1)
                     72:        movl    $0x000ffff0,PCB_P2LR(r1)
                     73: 
                     74:        movl    _scb+SYSVEC,_savvec0    /* Save original Kcall handler */
                     75:        movab   _u0ret,_scb+SYSVEC      /* Set new Kcall handler */     
                     76:        andl2   $0x3fffffff,r1
                     77:        mtpr    r1,$PCBB                /* Set PCBB */
                     78:        mtpr    $1,$TBIA                /* Purge translation buffer */
                     79:        mtpr    $1,$PADC                /* Purge data cache */
                     80:        movl    r13,_savvec1            /* Saved original FP */                 
                     81: 
                     82:        ldpctx                          /* Load user context */                 
                     83:        rei                             /* Switch to user */
                     84: #
                     85: #      Kcall Handler : service on Kernel stack
                     86: #
                     87:        .align  2
                     88: _u0ret:
                     89:        mtpr    $HIGH,$IPL
                     90:        mtpr    $1,$PADC        /* Purge data cache */
                     91: 
                     92:        movab   (sp),r1         /* R1 = current KSP */
                     93:        subl3   $0xc,exp_ksp,r2 /* R2 = Expected KSP after Kcall exception */   
                     94:        cmpl    r1,r2
                     95:        beql    1f
                     96:        movl    $1,r0                   
                     97:        addl3   $1,loopcnt,r3
                     98:        jmp     *badrtn         /* Error : too many parameters pushed on KSP */
                     99: 1:
                    100:        movl    (sp)+,r1        /* R1 = Parameter of Kcall */
                    101:        movl    $DONE,r2
                    102:        cmpl    r1,r2           /* Check Kcall parameter pushed on KSP */
                    103:        beql    1f
                    104:        movl    $2,r0           /* R0 = Which part is failed */ 
                    105:        addl3   $1,loopcnt,r3
                    106:        jmp     *badrtn         /* Error : did not receive correct parameter */
                    107: 1:                                     
                    108:        movl    exp_upc,r2      /* R2 = expected PC */
                    109:        movl    (sp),r1         /* R1 = actual PC pushed */
                    110:        cmpl    r1,r2           /* Check PC pushed on the KSP */
                    111:        beql    1f
                    112:        movl    $3,r0                   
                    113:        addl3   $1,loopcnt,r3
                    114:        jmp     *badrtn
                    115: 1:
                    116:        movl    exp_upsl,r2     /* R2 = expected PSL */
                    117:        andl3   $0xfffffff0,4(sp),r1    /* R1 = actual PSL pushed */
                    118:        cmpl    r1,r2           /* Check PSL pushed on the KSP */
                    119:        beql    1f
                    120:        movl    $4,r0                   
                    121:        addl3   $1,loopcnt,r3
                    122:        jmp     *badrtn
                    123: 1:
                    124:        incl    loopcnt         /* Increment counter */
                    125:        cmpl    $3,loopcnt
                    126:        jeql    endkct          /* If equal then end of test */
                    127:        rei                     /* else REI back to user code */
                    128: endkct:
                    129:        movl    _savvec0,_scb+SYSVEC    /* Restore original Kcall handler */
                    130:        svpctx                          /* Switch back to ISP */
                    131:        movl    _savvec1,r13            /* Restore original FP */               
                    132:        ret
                    133: #
                    134: #      ******************************************
                    135: #      _utest = test to be mapped in user 0 space
                    136: #      ******************************************
                    137: #
                    138:        .globl  _utest
                    139: _utest:
                    140:        movab   _kc1,exp_upc            /* expected PC after Kcall */
                    141: _kpc1:
                    142:        kcall   $DONE                   /* Literal */
                    143: _kc1:
                    144:        movab   _kc2,exp_upc            /* expected PC after Kcall */
                    145:        movw    $DONE,r5
                    146: _kpc2:
                    147:        kcall   r5                      /* Register */          
                    148: _kc2:
                    149:        movab   _eutest,exp_upc         /* expected PC after Kcall */
                    150:        movw    $DONE,kcpar
                    151: _kpc3:
                    152:        kcall   kcpar                   /* memory */            
                    153: _eutest:
                    154:        halt                    
                    155: #
                    156: #      Data area
                    157: #
                    158:        .align  2
                    159: loopcnt:
                    160:        .long   0               /* Try Kcall 3 times */         
                    161: exp_upc:
                    162:        .long   0               /* Expected PC after Kcall */
                    163: exp_upsl:
                    164:        .long   0               /* Expected PSL after Kcall */
                    165: exp_ksp:
                    166:        .long   0
                    167: kcpar:
                    168:        .long   0

unix.superglobalmegacorp.com

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