Annotation of cci/d/memman/ucbit.s, revision 1.1

1.1     ! root        1: LL0:
        !             2:        .data
        !             3:        .set SBR,0
        !             4:        .set SLR,1
        !             5:        .set P0BR,2
        !             6:        .set P0LR,3
        !             7:        .set P1BR,4
        !             8:        .set P1LR,5
        !             9:        .set P2BR,6
        !            10:        .set P2LR,7
        !            11:        .set IPL,8
        !            12:        .set MAPEN,9
        !            13:        .set MME,9
        !            14:        .set TBIA,10
        !            15:        .set TBIS,11
        !            16:        .set DCK,12
        !            17:        .set CCK,13
        !            18:        .set PCBB,14
        !            19:        .set KSP,19
        !            20:        .set USP,20
        !            21:        .set CPMDCB,21
        !            22:        .set PADC,25
        !            23:        .set DCR,27
        !            24:        .set DC_ON,1
        !            25:        .set DC_OFF,2
        !            26:        .set TB_ON,256
        !            27:        .set TB_OFF,512
        !            28:        .text
        !            29:        .align  1
        !            30:        .globl  _ucbit_chk
        !            31: _ucbit_chk:
        !            32:        .word   L21
        !            33:  # 
        !            34:  # #include "definitions"
        !            35:  # 
        !            36:  # extern long ss1, savvec4, savvec5, savvec7, u0p1pt, iob2;
        !            37:  # extern long Tpsl, Failpc, test_va;
        !            38:  # 
        !            39:  # /*  This test check the Uncachable bit in PTE of P1PT */
        !            40:  # 
        !            41:  # ucbit_chk()
        !            42:  # {   long *temp;
        !            43:        jbr     L23
        !            44: L24:
        !            45:  # 
        !            46:  #     if (ss1) writes("** Subtest6 : PTE non_cachable bit test\n");
        !            47:        tstl    _ss1
        !            48:        jeql    L25
        !            49:        .data   1
        !            50: L27:
        !            51:        .ascii  "** Subtest6 : PTE non_cachable bit test\12\0"
        !            52:        .text
        !            53:        pushl   $L27
        !            54:        callf   $8,_writes
        !            55:  #     temp = (long *)0;
        !            56: L25:
        !            57:        clrl    -56(fp)
        !            58:  #     asm("mfpr $SBR,_savvec4");
        !            59: mfpr $SBR,_savvec4
        !            60:  #     savvec4 |= 0xc0000000;
        !            61:        orl2    $-1073741824,_savvec4
        !            62:  #     asm("mtpr _savvec4,$P0BR");     /* Double map P0 into System space */
        !            63: mtpr _savvec4,$P0BR
        !            64:  #     asm("mtpr _savvec4,$P1BR");     /* Double map P1 into System space */
        !            65: mtpr _savvec4,$P1BR
        !            66:  #     asm("mfpr $SLR,_savvec4");
        !            67: mfpr $SLR,_savvec4
        !            68:  #     asm("mtpr _savvec4,$P0LR");
        !            69: mtpr _savvec4,$P0LR
        !            70:  #     asm("mtpr _savvec4,$P1LR");
        !            71: mtpr _savvec4,$P1LR
        !            72:  # 
        !            73:  #     asm("mtpr $3,$DCK");
        !            74: mtpr $3,$DCK
        !            75:  #     asm("mtpr $0,$TBIA");
        !            76: mtpr $0,$TBIA
        !            77:  #     asm("mtpr $0,$PADC");
        !            78: mtpr $0,$PADC
        !            79:  #     asm("mtpr $1,$MME");
        !            80: mtpr $1,$MME
        !            81:  #     asm("jmp  *$0f");               /* Go virtual */
        !            82: jmp  *$0f
        !            83:  # asm("0:");
        !            84: 0:
        !            85:  #     asm("mtpr $TB_OFF,$DCR");       /* Turn off Translation buffer */
        !            86: mtpr $TB_OFF,$DCR
        !            87:  #     pte_nc(IOB2);
        !            88:        andl3   $1073740800,$_iob2,r0
        !            89:        shrl    $10,r0,r0
        !            90:        andl2   $1048575,r0
        !            91:        pushl   r0
        !            92:        callf   $8,_pte_nc
        !            93:  #     asm("mtpr $TB_ON,$DCR");        /* Turn on Translation buffer */
        !            94: mtpr $TB_ON,$DCR
        !            95:  #     asm("mtpr $0,$MME");
        !            96: mtpr $0,$MME
        !            97:  #     asm("mtpr $0,$P0LR");
        !            98: mtpr $0,$P0LR
        !            99:  #     asm("mtpr $0,$P1LR");
        !           100: mtpr $0,$P1LR
        !           101:  # 
        !           102:  # }
        !           103:        ret
        !           104:        .set    L21,0x0
        !           105: L23:
        !           106:        subl3   $56,fp,sp
        !           107:        jbr     L24
        !           108:        .data
        !           109: .set TDCK,0x658
        !           110: .set P1DC,24
        !           111:        .text
        !           112:        .align  1
        !           113:        .globl  _pte_nc
        !           114: _pte_nc:
        !           115:        .word   L29
        !           116:  # 
        !           117:  # asm(".set TDCK,0x658");             /* Addr of DCK in processor storage area */
        !           118:  # asm(".set P1DC,24");
        !           119:  # 
        !           120:  # pte_nc(pte_no)
        !           121:  # long pte_no;
        !           122:  # {
        !           123:        jbr     L31
        !           124: L32:
        !           125:  #     long old_pte;
        !           126:  #     register long *vaddr, aval, pte1, *pte_adr, paddr, eval;
        !           127:  #     /* vaddr = R12; aval = R11; pte1 = R10; pte_adr = R9; paddr = R8 */
        !           128:  # 
        !           129:  #     eval = 0xabbaabba;              /* Test pattern */
        !           130:        movl    $-1413829702,r7
        !           131:  #     asm("mfpr $P1BR,_savvec7");
        !           132: mfpr $P1BR,_savvec7
        !           133:  #     pte_adr = (long *)savvec7;
        !           134:        movl    _savvec7,r9
        !           135:  #     pte_adr += pte_no;              /* Address of PTE used in test */
        !           136:        shll    $2,4(fp),r0
        !           137:        addl2   r0,r9
        !           138:  #     asm("movpsl _Tpsl");
        !           139: movpsl _Tpsl
        !           140:  # 
        !           141:  #     vaddr = (long *)((pte_no<<PGSHIFT) | P1ADDR);   /* VA of test loc */
        !           142:        shll    $10,4(fp),r0
        !           143:        orl2    $1073741824,r0
        !           144:        movl    r0,r12
        !           145:  #     test_va = (long)vaddr;
        !           146:        movl    r12,_test_va
        !           147:  #     paddr = ((long)vaddr) & 0x3fffffff;             /* PA of test loc */
        !           148:        andl3   $1073741823,r12,r0
        !           149:        movl    r0,r8
        !           150:  #     *vaddr = eval;          /* Write pattern to test loc,also go in cache */
        !           151:        movl    r7,(r12)
        !           152:  #     fixmuc_pte(P1BR,pte_no,&old_pte,0);     /* Set PTE_N bit to 0 */
        !           153:        pushl   $0
        !           154:        subl3   $56,fp,r0
        !           155:        pushl   r0
        !           156:        pushl   4(fp)
        !           157:        pushl   $4
        !           158:        callf   $20,_fixmuc_pte
        !           159:  #     pte1 = old_pte | 0x01000000;            /* Set PTE_N bit to 1 */
        !           160:        orl3    $16777216,-56(fp),r0
        !           161:        movl    r0,r10
        !           162:  # 
        !           163:  #     asm("movl $0,*$TDCK");          /* Set DCK in PSA to 0  */
        !           164: movl $0,*$TDCK
        !           165:  #     asm("mtpr $0,$MME");            /* Disable MME */
        !           166: mtpr $0,$MME
        !           167:  #     asm("mtpr r8,$P1DC");           /* Purge test loc. in data cache */
        !           168: mtpr r8,$P1DC
        !           169:  #                                     /* Using PA, Now DCK should be 0  */    
        !           170:  #     asm("mtpr $1,$MME");            /* Enable MME again */
        !           171: mtpr $1,$MME
        !           172:  #     asm("mtpr $DC_ON,$DCR");        /* Enable data cache */
        !           173: mtpr $DC_ON,$DCR
        !           174:  # asm("Uc0:");
        !           175: Uc0:
        !           176:  #     aval = *vaddr;                  /* Read test loc, should get a hit ! */
        !           177:        movl    (r12),r11
        !           178:  #     if (aval == eval)
        !           179:        cmpl    r11,r7
        !           180:        jneq    L34
        !           181:  #             {
        !           182:  #             asm("mtpr $3,$DCK");
        !           183: mtpr $3,$DCK
        !           184:  #             asm("movab Uc0,_Failpc");
        !           185: movab Uc0,_Failpc
        !           186:  #             writes("** fail to get a cache hit\n");
        !           187:        .data   1
        !           188: L35:
        !           189:        .ascii  "** fail to get a cache hit\12\0"
        !           190:        .text
        !           191:        pushl   $L35
        !           192:        callf   $8,_writes
        !           193:  #             ac_error1();
        !           194:        callf   $4,_ac_error1
        !           195:  #             writes("** PTE : "); writeh(old_pte);
        !           196:        .data   1
        !           197: L37:
        !           198:        .ascii  "** PTE : \0"
        !           199:        .text
        !           200:        pushl   $L37
        !           201:        callf   $8,_writes
        !           202:        pushl   -56(fp)
        !           203:        callf   $8,_writeh
        !           204:  #             writes("\n** Expected value (purge pattern) : ");writeh(0);
        !           205:        .data   1
        !           206: L39:
        !           207:        .ascii  "\12** Expected value (purge pattern) : \0"
        !           208:        .text
        !           209:        pushl   $L39
        !           210:        callf   $8,_writes
        !           211:        pushl   $0
        !           212:        callf   $8,_writeh
        !           213:  #             writes("\n** Actual value   : ");writeh(aval);writec('\n');
        !           214:        .data   1
        !           215: L40:
        !           216:        .ascii  "\12** Actual value   : \0"
        !           217:        .text
        !           218:        pushl   $L40
        !           219:        callf   $8,_writes
        !           220:        pushl   r11
        !           221:        callf   $8,_writeh
        !           222:        pushl   $10
        !           223:        callf   $8,_writec
        !           224:  #             asm("halt");
        !           225: halt
        !           226:  #             }
        !           227:  #     aval = aval;                    /* Dummy !! */
        !           228: L34:
        !           229:        movl    r11,r11
        !           230:  #     asm("movl r10,(r9)");           /* Write PTE with PTE_N == 1 back */
        !           231: movl r10,(r9)
        !           232:  # asm("Uc1:");
        !           233: Uc1:
        !           234:  #     aval = *vaddr;                  /* Read back ,should be from memory */
        !           235:        movl    (r12),r11
        !           236:  #     asm("mtpr $3,$DCK");
        !           237: mtpr $3,$DCK
        !           238:  #     asm("mtpr $DC_OFF,$DCR");       /* Disable data cache */
        !           239: mtpr $DC_OFF,$DCR
        !           240:  #     if (aval != eval)               /* check result */
        !           241:        cmpl    r11,r7
        !           242:        jeql    L42
        !           243:  #             {               /* ERROR */
        !           244:  #            writes("** Page is cached even the PTE uncachable bit is set\n");
        !           245:        .data   1
        !           246: L43:
        !           247:        .ascii  "** Page is cached even the PTE uncachable bit is set\12\0"
        !           248:        .text
        !           249:        pushl   $L43
        !           250:        callf   $8,_writes
        !           251:  #             asm("movab Uc1,_Failpc");
        !           252: movab Uc1,_Failpc
        !           253:  #             ac_error1();
        !           254:        callf   $4,_ac_error1
        !           255:  #             writes("** PTE : "); writeh(pte1); writec('\n');
        !           256:        .data   1
        !           257: L44:
        !           258:        .ascii  "** PTE : \0"
        !           259:        .text
        !           260:        pushl   $L44
        !           261:        callf   $8,_writes
        !           262:        pushl   r10
        !           263:        callf   $8,_writeh
        !           264:        pushl   $10
        !           265:        callf   $8,_writec
        !           266:  #             writes("** Expected value : ");writeh(eval);writec('\n');
        !           267:        .data   1
        !           268: L45:
        !           269:        .ascii  "** Expected value : \0"
        !           270:        .text
        !           271:        pushl   $L45
        !           272:        callf   $8,_writes
        !           273:        pushl   r7
        !           274:        callf   $8,_writeh
        !           275:        pushl   $10
        !           276:        callf   $8,_writec
        !           277:  #             writes("** Actual value   : ");writeh(aval);writec('\n');
        !           278:        .data   1
        !           279: L46:
        !           280:        .ascii  "** Actual value   : \0"
        !           281:        .text
        !           282:        pushl   $L46
        !           283:        callf   $8,_writes
        !           284:        pushl   r11
        !           285:        callf   $8,_writeh
        !           286:        pushl   $10
        !           287:        callf   $8,_writec
        !           288:  #             asm("halt");
        !           289: halt
        !           290:  #             }
        !           291:  # }
        !           292: L42:
        !           293:        ret
        !           294:        .set    L29,0x1f80
        !           295: L31:
        !           296:        subl3   $56,fp,sp
        !           297:        jbr     L32
        !           298:        .data
        !           299:  # 

unix.superglobalmegacorp.com

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