Annotation of cci/d/memman/subs.s, revision 1.1.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:        .comm   _dummy,4
                     29:        .text
                     30:        .align  1
                     31:        .globl  _mfpr
                     32: _mfpr:
                     33:        .word   L16
                     34:  # 
                     35:  # #include "definitions"
                     36:  # 
                     37:  # extern long r_no, pt_base, ctlblk;
                     38:  # long dummy;
                     39:  # 
                     40:  # /* To get value of base registers */
                     41:  # mfpr(sr)
                     42:  # long sr;
                     43:  # {
                     44:        jbr     L18
                     45: L19:
                     46:  #     asm("mfpr 4(fp),_dummy");
                     47: mfpr 4(fp),_dummy
                     48:  #     return(dummy);
                     49:        movl    _dummy,r0
                     50:        ret
                     51:  # }
                     52:        ret
                     53:        .set    L16,0x0
                     54: L18:
                     55:        jbr     L19
                     56:        .data
                     57:        .text
                     58:        .align  1
                     59:        .globl  _fixpv_pte
                     60: _fixpv_pte:
                     61:        .word   L21
                     62:  # 
                     63:  # /* This routine modify the valid,protection bits (bit 27-31) of PTE
                     64:  #    in any Page table. Input parameter :
                     65:  #     reg_no     : contain a number specify one of the following :
                     66:  #                  SBR,SLR,P0BR,P0LR,P1BR,P1LR,P2BR,P2LR
                     67:  #     old_pte    : pointer to location to save original PTE
                     68:  #                  (This could be used to read any PTE when pvbits_msk = 0)
                     69:  #     which1     : PTE no; 0,1,2...X
                     70:  #     pvbits_msk : bit 27-31 of PTE 
                     71:  # */
                     72:  # fixpv_pte(reg_no,which1,old_pte,pvbits_msk)
                     73:  # long reg_no, *old_pte, which1, pvbits_msk;
                     74:  # {   
                     75:        jbr     L23
                     76: L24:
                     77:  #     long *st_base;
                     78:  # 
                     79:  #     r_no = reg_no;
                     80:        movl    4(fp),_r_no
                     81:  # 
                     82:  # /*  asm("mfpr _r_no,_pt_base"); */          /* Get base address  */
                     83:  #     pt_base = mfpr(r_no);
                     84:        pushl   _r_no
                     85:        callf   $8,_mfpr
                     86:        movl    r0,_pt_base
                     87:  # 
                     88:  #     st_base = (long *)pt_base;
                     89:        movl    _pt_base,-56(fp)
                     90:  #     st_base += which1;
                     91:        shll    $2,8(fp),r0
                     92:        addl2   r0,-56(fp)
                     93:  #     *old_pte = *st_base;                    /* Save original PTE */
                     94:        movl    *-56(fp),*12(fp)
                     95:  #     /* Mask access and valid bits off */
                     96:  #     *st_base = (*st_base) & (~(PTE_PROT | PTE_V));
                     97:        andl3   $134217727,*-56(fp),r0
                     98:        movl    r0,*-56(fp)
                     99:  #     *st_base = (*st_base)|(pvbits_msk);     /* Set V,protection bits */
                    100:        orl3    16(fp),*-56(fp),r0
                    101:        movl    r0,*-56(fp)
                    102:  #     asm("mtpr $0,$TBIA");           /* Invalidate translation buffers */
                    103: mtpr $0,$TBIA
                    104:  # }
                    105:        ret
                    106:        .set    L21,0x0
                    107: L23:
                    108:        subl3   $56,fp,sp
                    109:        jbr     L24
                    110:        .data
                    111:        .text
                    112:        .align  1
                    113:        .globl  _fixmuc_pte
                    114: _fixmuc_pte:
                    115:        .word   L26
                    116:  # 
                    117:  # /* This routine modify the modify,used,uncachable bits (22-24) of PTE
                    118:  #    in any Page table. Input parameter :
                    119:  #     reg_no     : contain a number specify one of the following :
                    120:  #                  SBR,SLR,P0BR,P0LR,P1BR,P1LR,P2BR,P2LR
                    121:  #     old_pte    : pointer to location to save original PTE
                    122:  #                  (This could be used to read any PTE when pvbits_msk = 0)
                    123:  #     which1     : PTE no; 0,1,2...X
                    124:  #     pvbits_msk : bits 22-24 of PTE; if mask < 0 then just read back PTE. 
                    125:  # */
                    126:  # fixmuc_pte(reg_no,which1,old_pte,pvbits_msk)
                    127:  # long reg_no, *old_pte, which1, pvbits_msk;
                    128:  # {   
                    129:        jbr     L28
                    130: L29:
                    131:  #     long *st_base;
                    132:  # 
                    133:  #     r_no = reg_no;
                    134:        movl    4(fp),_r_no
                    135:  # 
                    136:  # /*  asm("mfpr _r_no,_pt_base"); */          /* Get base address  */
                    137:  #     pt_base = mfpr(r_no);
                    138:        pushl   _r_no
                    139:        callf   $8,_mfpr
                    140:        movl    r0,_pt_base
                    141:  # 
                    142:  #     st_base = (long *)pt_base;
                    143:        movl    _pt_base,-56(fp)
                    144:  #     st_base += which1;
                    145:        shll    $2,8(fp),r0
                    146:        addl2   r0,-56(fp)
                    147:  #     *old_pte = *st_base;                    /* Save original PTE */
                    148:        movl    *-56(fp),*12(fp)
                    149:  #     if (pvbits_msk < 0) return;
                    150:        tstl    16(fp)
                    151:        jgeq    L30
                    152:        ret
                    153:  #     *st_base=(*st_base)&(~(PTE_UC|PTE_M|PTE_U)); /* Mask NC,M,U bit off */
                    154: L30:
                    155:        andl3   $-29360129,*-56(fp),r0
                    156:        movl    r0,*-56(fp)
                    157:  #     *st_base = (*st_base)|(pvbits_msk);  
                    158:        orl3    16(fp),*-56(fp),r0
                    159:        movl    r0,*-56(fp)
                    160:  #     asm("mtpr $0,$TBIA");           /* Invalidate translation buffers */
                    161: mtpr $0,$TBIA
                    162:  # }
                    163:        ret
                    164:        .set    L26,0x0
                    165: L28:
                    166:        subl3   $56,fp,sp
                    167:        jbr     L29
                    168:        .data
                    169:        .text
                    170:        .align  1
                    171:        .globl  _fixpfn_pte
                    172: _fixpfn_pte:
                    173:        .word   L32
                    174:  # 
                    175:  # /* This routine modify the page frame number (bit 0-21) of PTE
                    176:  #    in any Page table. Input parameter :
                    177:  #     reg_no     : contain a number specify one of the following :
                    178:  #                  SBR,SLR,P0BR,P0LR,P1BR,P1LR,P2BR,P2LR
                    179:  #     old_pte    : pointer to location to save original PTE
                    180:  #                  (This could be used to read any PTE when pvbits_msk = 0)
                    181:  #     which1     : PTE no; 0,1,2...X
                    182:  #     pfn        : New page frame no. (bit 0 thru 19 of pfn )
                    183:  # */
                    184:  # fixpfn_pte(reg_no,which1,old_pte,pfn)
                    185:  # long reg_no, *old_pte, which1, pfn;
                    186:  # {   
                    187:        jbr     L34
                    188: L35:
                    189:  #     long *st_base;
                    190:  # 
                    191:  #     r_no = reg_no;
                    192:        movl    4(fp),_r_no
                    193:  # 
                    194:  # /*  asm("mfpr _r_no,_pt_base"); */          /* Get base address  */
                    195:  #     pt_base = mfpr(r_no);
                    196:        pushl   _r_no
                    197:        callf   $8,_mfpr
                    198:        movl    r0,_pt_base
                    199:  # 
                    200:  #     st_base = (long *)pt_base;
                    201:        movl    _pt_base,-56(fp)
                    202:  #     st_base += which1;
                    203:        shll    $2,8(fp),r0
                    204:        addl2   r0,-56(fp)
                    205:  #     *old_pte = *st_base;                    /* Save original PTE */
                    206:        movl    *-56(fp),*12(fp)
                    207:  #     *st_base = (*st_base)&(~PTE_PFN);       /* Mask PFN off */
                    208:        andl3   $-4194304,*-56(fp),r0
                    209:        movl    r0,*-56(fp)
                    210:  #     *st_base = (*st_base)|(pfn & PTE_PFN);  /* Set new PFN */
                    211:        andl3   $4194303,16(fp),r0
                    212:        orl3    r0,*-56(fp),r0
                    213:        movl    r0,*-56(fp)
                    214:  #     *st_base = (*st_base)&0xff7fffff;       /* Set PTE_M bit off */
                    215:        andl3   $-8388609,*-56(fp),r0
                    216:        movl    r0,*-56(fp)
                    217:  #     asm("mtpr $0,$TBIA");           /* Invalidate translation buffers */
                    218: mtpr $0,$TBIA
                    219:  #     asm("mtpr $0,$PADC");           /* Purge all data cache */
                    220: mtpr $0,$PADC
                    221:  # }
                    222:        ret
                    223:        .set    L32,0x0
                    224: L34:
                    225:        subl3   $56,fp,sp
                    226:        jbr     L35
                    227:        .data
                    228:        .text
                    229:        .align  1
                    230:        .globl  _set_handler
                    231: _set_handler:
                    232:        .word   L37
                    233:  # 
                    234:  # /* This routine saved a vector in SCB and set it to a new one
                    235:  #    input parameters :
                    236:  #     which1 : Vector no; 0,1,2,..X
                    237:  #     saved_vec : pointer to a location to saved original vector
                    238:  #     new_vec   : address of new handler
                    239:  #     stack     : 'K' or 'k' : service on Kernel stack
                    240:  #                 otherwise  : service on Interrupt stack
                    241:  # */
                    242:  # 
                    243:  # 
                    244:  # set_handler(which1,saved_vec,new_vec)
                    245:  # long which1, *saved_vec, new_vec; 
                    246:  # {   long *st_base;
                    247:        jbr     L39
                    248: L40:
                    249:  # 
                    250:  #     asm("movab _scb,_ctlblk");
                    251: movab _scb,_ctlblk
                    252:  #     st_base = (long *)ctlblk;       /* address of SCB is at page 2 */
                    253:        movl    _ctlblk,-56(fp)
                    254:  #     st_base += which1;
                    255:        shll    $2,4(fp),r0
                    256:        addl2   r0,-56(fp)
                    257:  #     *saved_vec = *st_base;          /* Save original vector */
                    258:        movl    *-56(fp),*8(fp)
                    259:  #     *st_base = new_vec;
                    260:        movl    12(fp),*-56(fp)
                    261:  # }
                    262:        ret
                    263:        .set    L37,0x0
                    264: L39:
                    265:        subl3   $56,fp,sp
                    266:        jbr     L40
                    267:        .data
                    268:        .text
                    269:        .align  1
                    270:        .globl  _write_pg
                    271: _write_pg:
                    272:        .word   L42
                    273:  # 
                    274:  # 
                    275:  # /* This routine write the who page of memory with "value"
                    276:  #    Inpur parameters :
                    277:  #     space   : Has 1 of these values (0,1,2,3) correspond to
                    278:  #               P0, P1, P2, System space respectively.
                    279:  #     page_no : Virtual page no. to be written
                    280:  #     value   : Value to be written
                    281:  #     v_type  : | 0 : value is used to write in all locations.
                    282:  #               | 1 : value is the start value and is incremented
                    283:  #               |     for next locations.
                    284:  # */
                    285:  # 
                    286:  # write_pg(space,page_no,value,v_type)
                    287:  # long space, page_no, value, v_type;
                    288:  # {
                    289:        jbr     L44
                    290: L45:
                    291:  #     long *lptr;
                    292:  #     int ix;
                    293:  # 
                    294:  #     lptr = (long *)(((space & 0x3)<<30)|((page_no & 0xfffff)<<PGSHIFT));
                    295:        andl3   $3,4(fp),r0
                    296:        shll    $30,r0,r0
                    297:        andl3   $1048575,8(fp),r1
                    298:        shll    $10,r1,r1
                    299:        orl2    r1,r0
                    300:        movl    r0,-56(fp)
                    301:  #     for (ix=0;ix<NBPG;ix += 4)
                    302:        clrl    -60(fp)
                    303: L48:
                    304:        cmpl    -60(fp),$1024
                    305:        jgeq    L47
                    306:  #             {
                    307:  #               *lptr++ = value;
                    308:        movl    12(fp),*-56(fp)
                    309:        addl2   $4,-56(fp)
                    310:  #               if (v_type) value += 4;
                    311:        tstl    16(fp)
                    312:        jeql    L49
                    313:        addl2   $4,12(fp)
                    314:  #             }
                    315: L49:
                    316: L46:
                    317:        addl2   $4,-60(fp)
                    318:        jbr     L48
                    319: L47:
                    320:  # }
                    321:        ret
                    322:        .set    L42,0x0
                    323: L44:
                    324:        subl3   $60,fp,sp
                    325:        jbr     L45
                    326:        .data
                    327:        .text
                    328:        .align  1
                    329:        .globl  _read_pg
                    330: _read_pg:
                    331:        .word   L51
                    332:  # 
                    333:  # /* This routine read the who page of memory .
                    334:  #    Inpur parameters :
                    335:  #     space   : Has 1 of these values (0,1,2,3) correspond to
                    336:  #               P0, P1, P2, System space respectively.
                    337:  #     page_no : Virtual page no. to be read.
                    338:  #     start_dst : pointer to array of longwords.
                    339:  # */
                    340:  # 
                    341:  # read_pg(space,page_no,start_dst)
                    342:  # long space, page_no, *start_dst;
                    343:  # {
                    344:        jbr     L53
                    345: L54:
                    346:  #     long *lptr;
                    347:  #     int ix;
                    348:  # 
                    349:  #     lptr = (long *)(((space & 0x3)<<30)|((page_no & 0xfffff)<<PGSHIFT));
                    350:        andl3   $3,4(fp),r0
                    351:        shll    $30,r0,r0
                    352:        andl3   $1048575,8(fp),r1
                    353:        shll    $10,r1,r1
                    354:        orl2    r1,r0
                    355:        movl    r0,-56(fp)
                    356:  #     for (ix=0;ix<NBPG;ix += 4)
                    357:        clrl    -60(fp)
                    358: L57:
                    359:        cmpl    -60(fp),$1024
                    360:        jgeq    L56
                    361:  #               *start_dst++ = *lptr++ ;
                    362:        movl    *-56(fp),*12(fp)
                    363:        addl2   $4,-56(fp)
                    364:        addl2   $4,12(fp)
                    365: L55:
                    366:        addl2   $4,-60(fp)
                    367:        jbr     L57
                    368: L56:
                    369:  # }
                    370:        ret
                    371:        .set    L51,0x0
                    372: L53:
                    373:        subl3   $60,fp,sp
                    374:        jbr     L54
                    375:        .data
                    376:  # 

unix.superglobalmegacorp.com

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