|
|
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 _mu_test ! 31: _mu_test: ! 32: .word L24 ! 33: # ! 34: # #include "definitions" ! 35: # ! 36: # extern long savvec4, unused, iob0, iob1, iob2, iob3, u0p1pt, u0p2pt; ! 37: # extern long ss1, test_va, Tpsl, Failpc; ! 38: # ! 39: # /* This test validate that TAHOE update the M(odify), U(used) bit ! 40: # correctly after reference to PTE. ! 41: # */ ! 42: # ! 43: # mu_test() ! 44: # { long pte, pg_no, pte_sys, *temp, pte_p0; ! 45: jbr L26 ! 46: L27: ! 47: # ! 48: # if (ss1) writes("** Subtest4 : PTE modify bit test\n"); ! 49: tstl _ss1 ! 50: jeql L28 ! 51: .data 1 ! 52: L30: ! 53: .ascii "** Subtest4 : PTE modify bit test\12\0" ! 54: .text ! 55: pushl $L30 ! 56: callf $8,_writes ! 57: # pg_no = 0; ! 58: L28: ! 59: clrl -60(fp) ! 60: # asm("mfpr $SBR,_savvec4"); ! 61: mfpr $SBR,_savvec4 ! 62: # savvec4 |= 0xc0000000; ! 63: orl2 $-1073741824,_savvec4 ! 64: # asm("mtpr _savvec4,$P0BR"); /* Double map P0 into System space */ ! 65: mtpr _savvec4,$P0BR ! 66: # asm("mfpr $SLR,_savvec4"); ! 67: mfpr $SLR,_savvec4 ! 68: # asm("mtpr _savvec4,$P0LR"); ! 69: mtpr _savvec4,$P0LR ! 70: # ! 71: # asm("mtpr $5,$DCK"); ! 72: mtpr $5,$DCK ! 73: # asm("mtpr $0,$TBIA"); ! 74: mtpr $0,$TBIA ! 75: # asm("mtpr $0,$PADC"); ! 76: mtpr $0,$PADC ! 77: # asm("mtpr $1,$MME"); ! 78: mtpr $1,$MME ! 79: # asm("jmp *$0f"); /* Go virtual */ ! 80: jmp *$0f ! 81: # asm("0:"); ! 82: 0: ! 83: # ! 84: # /* Set up P1PT */ ! 85: # temp = &u0p1pt; ! 86: movl $_u0p1pt,-68(fp) ! 87: # *temp = (IOB2) | (PTE_V | PTE_KW); /* 1st PTE in P1 map to IOB2 */ ! 88: andl3 $1073740800,$_iob2,r0 ! 89: shrl $10,r0,r0 ! 90: andl2 $1048575,r0 ! 91: orl2 $-536870912,r0 ! 92: movl r0,*-68(fp) ! 93: # savvec4 = ((long)temp) | SADDR; ! 94: orl3 $-1073741824,-68(fp),r0 ! 95: movl r0,_savvec4 ! 96: # asm("mtpr _savvec4,$P1BR"); ! 97: mtpr _savvec4,$P1BR ! 98: # asm("mtpr $1,$P1LR"); ! 99: mtpr $1,$P1LR ! 100: # ! 101: # /* Set up P2PT */ ! 102: # temp = &u0p2pt; ! 103: movl $_u0p2pt,-68(fp) ! 104: # *temp = (IOB3) | (PTE_V | PTE_KW); /* 1st PTE in P2 map to IOB3 */ ! 105: andl3 $1073740800,$_iob3,r0 ! 106: shrl $10,r0,r0 ! 107: andl2 $1048575,r0 ! 108: orl2 $-536870912,r0 ! 109: movl r0,*-68(fp) ! 110: # savvec4 = ((long)temp) | SADDR; ! 111: orl3 $-1073741824,-68(fp),r0 ! 112: movl r0,_savvec4 ! 113: # savvec4 -= (LAST_VPGNO << 2); ! 114: subl2 $4194300,_savvec4 ! 115: # asm("mtpr _savvec4, $P2BR"); ! 116: mtpr _savvec4, $P2BR ! 117: # asm("mtpr $0xffffe, $P2LR"); /* Use only 1 entry */ ! 118: mtpr $0xffffe, $P2LR ! 119: # ! 120: # /* 1st machine donot implement the Used bit ! 121: # ubit_chk(); ! 122: # */ ! 123: # mbit_chk(); ! 124: callf $4,_mbit_chk ! 125: # ! 126: # asm("mtpr $0,$MME"); /* Back to physical */ ! 127: mtpr $0,$MME ! 128: # asm("mtpr $0,$P0LR"); /* Invalidate P0 space */ ! 129: mtpr $0,$P0LR ! 130: # asm("mtpr $0,$P1LR"); /* Invalidate P1 space */ ! 131: mtpr $0,$P1LR ! 132: # asm("mtpr $0,$P2LR"); /* Invalidate P2 space */ ! 133: mtpr $0,$P2LR ! 134: # } ! 135: ret ! 136: .set L24,0x0 ! 137: L26: ! 138: subl3 $72,fp,sp ! 139: jbr L27 ! 140: .data ! 141: .text ! 142: .align 1 ! 143: .globl _ubit_chk ! 144: _ubit_chk: ! 145: .word L33 ! 146: # ! 147: # ! 148: # /* This test check the Used bit in PTE */ ! 149: # ubit_chk() ! 150: # { ! 151: jbr L35 ! 152: L36: ! 153: # mubits_chk(SBR,SADDR,IOB0,'u',"System"); /* Test on System space*/ ! 154: .data 1 ! 155: L38: ! 156: .ascii "System\0" ! 157: .text ! 158: pushl $L38 ! 159: pushl $117 ! 160: andl3 $1073740800,$_iob0,r0 ! 161: shrl $10,r0,r0 ! 162: andl2 $1048575,r0 ! 163: pushl r0 ! 164: pushl $-1073741824 ! 165: pushl $0 ! 166: callf $24,_mubits_chk ! 167: # mubits_chk(P0BR,P0ADDR,IOB1,'u',"P0"); /* Test on P0 space */ ! 168: .data 1 ! 169: L39: ! 170: .ascii "P0\0" ! 171: .text ! 172: pushl $L39 ! 173: pushl $117 ! 174: andl3 $1073740800,$_iob1,r0 ! 175: shrl $10,r0,r0 ! 176: andl2 $1048575,r0 ! 177: pushl r0 ! 178: pushl $0 ! 179: pushl $2 ! 180: callf $24,_mubits_chk ! 181: # mubits_chk(P1BR,P1ADDR,TEST_PTEP1,'u',"P1"); /* Test on P1 space */ ! 182: .data 1 ! 183: L40: ! 184: .ascii "P1\0" ! 185: .text ! 186: pushl $L40 ! 187: pushl $117 ! 188: pushl $0 ! 189: pushl $1073741824 ! 190: pushl $4 ! 191: callf $24,_mubits_chk ! 192: # mubits_chk(P2BR,P2ADDR,TEST_PTEP2,'u',"P2"); /* Test on P2 space */ ! 193: .data 1 ! 194: L41: ! 195: .ascii "P2\0" ! 196: .text ! 197: pushl $L41 ! 198: pushl $117 ! 199: pushl $1048575 ! 200: pushl $-2147483648 ! 201: pushl $6 ! 202: callf $24,_mubits_chk ! 203: # } ! 204: ret ! 205: .set L33,0x0 ! 206: L35: ! 207: jbr L36 ! 208: .data ! 209: .text ! 210: .align 1 ! 211: .globl _mbit_chk ! 212: _mbit_chk: ! 213: .word L42 ! 214: # ! 215: # ! 216: # ! 217: # /* This test check the Modify bit in PTE */ ! 218: # mbit_chk() ! 219: # { ! 220: jbr L44 ! 221: L45: ! 222: # mubits_chk(SBR,SADDR,IOB0,'m',"System"); /* Test on System space*/ ! 223: .data 1 ! 224: L46: ! 225: .ascii "System\0" ! 226: .text ! 227: pushl $L46 ! 228: pushl $109 ! 229: andl3 $1073740800,$_iob0,r0 ! 230: shrl $10,r0,r0 ! 231: andl2 $1048575,r0 ! 232: pushl r0 ! 233: pushl $-1073741824 ! 234: pushl $0 ! 235: callf $24,_mubits_chk ! 236: # mubits_chk(P0BR,P0ADDR,IOB1,'m',"P0"); /* Test on P0 space */ ! 237: .data 1 ! 238: L47: ! 239: .ascii "P0\0" ! 240: .text ! 241: pushl $L47 ! 242: pushl $109 ! 243: andl3 $1073740800,$_iob1,r0 ! 244: shrl $10,r0,r0 ! 245: andl2 $1048575,r0 ! 246: pushl r0 ! 247: pushl $0 ! 248: pushl $2 ! 249: callf $24,_mubits_chk ! 250: # mubits_chk(P1BR,P1ADDR,TEST_PTEP1,'m',"P1"); /* Test on P1 space */ ! 251: .data 1 ! 252: L48: ! 253: .ascii "P1\0" ! 254: .text ! 255: pushl $L48 ! 256: pushl $109 ! 257: pushl $0 ! 258: pushl $1073741824 ! 259: pushl $4 ! 260: callf $24,_mubits_chk ! 261: # mubits_chk(P2BR,P2ADDR,TEST_PTEP2,'m',"P2"); /* Test on P2 space */ ! 262: .data 1 ! 263: L49: ! 264: .ascii "P2\0" ! 265: .text ! 266: pushl $L49 ! 267: pushl $109 ! 268: pushl $1048575 ! 269: pushl $-2147483648 ! 270: pushl $6 ! 271: callf $24,_mubits_chk ! 272: # } ! 273: ret ! 274: .set L42,0x0 ! 275: L44: ! 276: jbr L45 ! 277: .data ! 278: .text ! 279: .align 1 ! 280: .globl _mubits_chk ! 281: _mubits_chk: ! 282: .word L50 ! 283: # ! 284: # ! 285: # mubits_chk(pg_table, addr_space, pte_no, bit, str) ! 286: # long pg_table, addr_space, pte_no; ! 287: # char bit, *str; ! 288: # { long old_pte, mask; ! 289: jbr L52 ! 290: L53: ! 291: # register long *r12, val; ! 292: # ! 293: # mask = 0; ! 294: clrl -60(fp) ! 295: # /* Set the test bit (Used/Modified) off */ ! 296: # fixmuc_pte(pg_table, pte_no, &old_pte, mask); ! 297: pushl -60(fp) ! 298: subl3 $56,fp,r0 ! 299: pushl r0 ! 300: pushl 12(fp) ! 301: pushl 4(fp) ! 302: callf $20,_fixmuc_pte ! 303: # r12 = (long *) ((pte_no<<PGSHIFT) | addr_space); ! 304: shll $10,12(fp),r0 ! 305: orl2 8(fp),r0 ! 306: movl r0,r12 ! 307: # test_va = (long)r12; /* Virtual address of test location */ ! 308: movl r12,_test_va ! 309: # asm("movpsl _Tpsl"); ! 310: movpsl _Tpsl ! 311: # if (bit == 'm') { /* Test Modify bit */ ! 312: cmpb 19(fp),$109 ! 313: jneq L55 ! 314: # asm("movab Mbit,_Failpc"); ! 315: movab Mbit,_Failpc ! 316: # asm("Mbit:"); ! 317: Mbit: ! 318: # *r12 = 0; } /* Write to a location mapped by this pte */ ! 319: clrl (r12) ! 320: # else { /* Test Used bit */ ! 321: jbr L56 ! 322: L55: ! 323: # asm("movab Ubit,_Failpc"); ! 324: movab Ubit,_Failpc ! 325: # asm("Ubit:"); ! 326: Ubit: ! 327: # val = *r12; } /* Read from a location mapped by this pte */ ! 328: movl (r12),r11 ! 329: L56: ! 330: # mask = -1; ! 331: mnegl $1,-60(fp) ! 332: # asm("mtpr $0,$PADC"); /* Purge all data cache */ ! 333: mtpr $0,$PADC ! 334: # fixmuc_pte(pg_table, pte_no, &old_pte, mask); /* Read this PTE back */ ! 335: pushl -60(fp) ! 336: subl3 $56,fp,r0 ! 337: pushl r0 ! 338: pushl 12(fp) ! 339: pushl 4(fp) ! 340: callf $20,_fixmuc_pte ! 341: # if ( bit == 'm') ! 342: cmpb 19(fp),$109 ! 343: jneq L57 ! 344: # { if (!(old_pte&PTE_M)) { ! 345: bitl $8388608,-56(fp) ! 346: jneq L58 ! 347: # writes("** Modify bit is not set after a write\n"); ! 348: .data 1 ! 349: L59: ! 350: .ascii "** Modify bit is not set after a write\12\0" ! 351: .text ! 352: pushl $L59 ! 353: callf $8,_writes ! 354: # ac_error1(); ! 355: callf $4,_ac_error1 ! 356: # writes("** Actual PTE : ");writeh(old_pte);writec('\n'); ! 357: .data 1 ! 358: L61: ! 359: .ascii "** Actual PTE : \0" ! 360: .text ! 361: pushl $L61 ! 362: callf $8,_writes ! 363: pushl -56(fp) ! 364: callf $8,_writeh ! 365: pushl $10 ! 366: callf $8,_writec ! 367: # asm("halt"); ! 368: halt ! 369: # } ! 370: # /* The 1st machine donot implement Used bit ! 371: # if (!(old_pte & PTE_U)) ! 372: # { ! 373: # writes("** Used bit is not set after a write\n"); ! 374: # ac_error1(); ! 375: # writes("** Actual PTE : ");writeh(old_pte);writec('\n'); ! 376: # asm("halt"); ! 377: # } ! 378: # */ ! 379: # } ! 380: L58: ! 381: # else ! 382: jbr L64 ! 383: L57: ! 384: # { if (!(old_pte & PTE_U)) ! 385: bitl $4194304,-56(fp) ! 386: jneq L65 ! 387: # { ! 388: # writes("** Test in ");writes(str);writes(" space **\n"); ! 389: .data 1 ! 390: L66: ! 391: .ascii "** Test in \0" ! 392: .text ! 393: pushl $L66 ! 394: callf $8,_writes ! 395: pushl 20(fp) ! 396: callf $8,_writes ! 397: .data 1 ! 398: L67: ! 399: .ascii " space **\12\0" ! 400: .text ! 401: pushl $L67 ! 402: callf $8,_writes ! 403: # writes("** Used bit is not set after a read..\n"); ! 404: .data 1 ! 405: L68: ! 406: .ascii "** Used bit is not set after a read..\12\0" ! 407: .text ! 408: pushl $L68 ! 409: callf $8,_writes ! 410: # } ! 411: # if (old_pte & PTE_M) ! 412: L65: ! 413: bitl $8388608,-56(fp) ! 414: jeql L69 ! 415: # { ! 416: # writes("** Test in ");writes(str);writes(" space **\n"); ! 417: .data 1 ! 418: L70: ! 419: .ascii "** Test in \0" ! 420: .text ! 421: pushl $L70 ! 422: callf $8,_writes ! 423: pushl 20(fp) ! 424: callf $8,_writes ! 425: .data 1 ! 426: L71: ! 427: .ascii " space **\12\0" ! 428: .text ! 429: pushl $L71 ! 430: callf $8,_writes ! 431: # writes("** Modify bit is set after a read..\n"); ! 432: .data 1 ! 433: L72: ! 434: .ascii "** Modify bit is set after a read..\12\0" ! 435: .text ! 436: pushl $L72 ! 437: callf $8,_writes ! 438: # } ! 439: # } ! 440: L69: ! 441: L64: ! 442: # } ! 443: ret ! 444: .set L50,0x1800 ! 445: L52: ! 446: subl3 $60,fp,sp ! 447: jbr L53 ! 448: .data ! 449: #
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.