Annotation of cci/d/memman/mubits.c, revision 1.1.1.1

1.1       root        1: 
                      2: #include "definitions"
                      3: 
                      4: extern long savvec4, unused, iob0, iob1, iob2, iob3, u0p1pt, u0p2pt;
                      5: extern long ss1, test_va, Tpsl, Failpc;
                      6: 
                      7: /*   This test validate that TAHOE update the M(odify), U(used) bit
                      8:      correctly after reference to PTE.
                      9: */
                     10: 
                     11: mu_test()
                     12: {      long pte, pg_no, pte_sys, *temp, pte_p0;
                     13: 
                     14:        if (ss1) writes("** Subtest4 : PTE modify bit test\n");
                     15:        pg_no = 0;
                     16:        asm("mfpr $SBR,_savvec4");
                     17:        savvec4 |= 0xc0000000;
                     18:        asm("mtpr _savvec4,$P0BR");     /* Double map P0 into System space */
                     19:        asm("mfpr $SLR,_savvec4");
                     20:        asm("mtpr _savvec4,$P0LR");
                     21: 
                     22:        asm("mtpr $5,$DCK");
                     23:        asm("mtpr $0,$TBIA");
                     24:        asm("mtpr $0,$PADC");
                     25:        asm("mtpr $1,$MME");
                     26:        asm("jmp  *$0f");               /* Go virtual */
                     27: asm("0:");
                     28: 
                     29:        /* Set up P1PT  */
                     30:        temp = &u0p1pt;
                     31:        *temp = (IOB2) | (PTE_V | PTE_KW);      /* 1st PTE in P1 map to IOB2 */
                     32:        savvec4 = ((long)temp) | SADDR;
                     33:        asm("mtpr _savvec4,$P1BR");
                     34:        asm("mtpr $1,$P1LR");
                     35: 
                     36:        /* Set up P2PT  */
                     37:        temp = &u0p2pt;
                     38:        *temp = (IOB3) | (PTE_V | PTE_KW);      /* 1st PTE in P2 map to IOB3 */
                     39:        savvec4 = ((long)temp) | SADDR;
                     40:        savvec4 -= (LAST_VPGNO << 2);
                     41:        asm("mtpr _savvec4, $P2BR");
                     42:        asm("mtpr $0xffffe, $P2LR");    /* Use only 1 entry */
                     43: 
                     44: /*     1st machine donot implement the Used bit        
                     45:        ubit_chk();
                     46: */
                     47:        mbit_chk();
                     48: 
                     49:        asm("mtpr $0,$MME");            /* Back to physical */
                     50:        asm("mtpr $0,$P0LR");           /* Invalidate P0 space */
                     51:        asm("mtpr $0,$P1LR");           /* Invalidate P1 space */
                     52:        asm("mtpr $0,$P2LR");           /* Invalidate P2 space */
                     53: }
                     54: 
                     55: 
                     56: /*  This test check the Used bit in PTE */
                     57: ubit_chk()
                     58: {
                     59:        mubits_chk(SBR,SADDR,IOB0,'u',"System");   /* Test on System space*/
                     60:        mubits_chk(P0BR,P0ADDR,IOB1,'u',"P0");     /* Test on P0 space */
                     61:        mubits_chk(P1BR,P1ADDR,TEST_PTEP1,'u',"P1");    /* Test on P1 space */
                     62:        mubits_chk(P2BR,P2ADDR,TEST_PTEP2,'u',"P2");    /* Test on P2 space */
                     63: }
                     64: 
                     65: 
                     66: 
                     67: /*  This test check the Modify bit in PTE */
                     68: mbit_chk()
                     69: {
                     70:        mubits_chk(SBR,SADDR,IOB0,'m',"System");   /* Test on System space*/
                     71:        mubits_chk(P0BR,P0ADDR,IOB1,'m',"P0");     /* Test on P0 space */
                     72:        mubits_chk(P1BR,P1ADDR,TEST_PTEP1,'m',"P1");    /* Test on P1 space */
                     73:        mubits_chk(P2BR,P2ADDR,TEST_PTEP2,'m',"P2");    /* Test on P2 space */
                     74: }
                     75: 
                     76: 
                     77: mubits_chk(pg_table, addr_space, pte_no, bit, str)
                     78: long pg_table, addr_space, pte_no;
                     79: char bit, *str;
                     80: {      long old_pte, mask;
                     81:        register long *r12, val;
                     82: 
                     83:        mask = 0;
                     84:        /* Set the test bit (Used/Modified) off */
                     85:        fixmuc_pte(pg_table, pte_no, &old_pte, mask);
                     86:        r12 = (long *) ((pte_no<<PGSHIFT) | addr_space);
                     87:        test_va = (long)r12;    /* Virtual address of test location */
                     88:        asm("movpsl _Tpsl");
                     89:        if (bit == 'm')  {      /* Test Modify bit */
                     90:                asm("movab Mbit,_Failpc");
                     91:                asm("Mbit:");
                     92:                *r12 = 0; }     /* Write to a location mapped by this pte */
                     93:            else  {             /* Test Used bit */
                     94:                asm("movab Ubit,_Failpc");
                     95:                asm("Ubit:");
                     96:                val = *r12; }   /* Read from a location mapped by this pte */
                     97:        mask = -1;
                     98:        asm("mtpr $0,$PADC");   /* Purge all data cache */
                     99:        fixmuc_pte(pg_table, pte_no, &old_pte, mask);   /* Read this PTE back */
                    100:        if ( bit == 'm')
                    101:                 { if (!(old_pte&PTE_M)) {
                    102:                        writes("** Modify bit is not set after a write\n");
                    103:                        ac_error1();
                    104:                        writes("** Actual PTE : ");writeh(old_pte);writec('\n');
                    105:                        asm("halt");
                    106:                        }
                    107: /*                The 1st machine donot implement Used bit
                    108:                   if (!(old_pte & PTE_U))
                    109:                        {
                    110:                        writes("** Used bit is not set after a write\n");
                    111:                        ac_error1();
                    112:                        writes("** Actual PTE : ");writeh(old_pte);writec('\n');
                    113:                        asm("halt");
                    114:                        }
                    115: */
                    116:                 }
                    117:            else  
                    118:                 { if (!(old_pte & PTE_U))
                    119:                        {
                    120:                        writes("** Test in ");writes(str);writes(" space **\n");
                    121:                        writes("** Used bit is not set after a read..\n");
                    122:                        }
                    123:                   if (old_pte & PTE_M) 
                    124:                        {
                    125:                        writes("** Test in ");writes(str);writes(" space **\n");
                    126:                        writes("** Modify bit is set after a read..\n");
                    127:                        }
                    128:                 }
                    129: }
                    130: 

unix.superglobalmegacorp.com

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