Annotation of cci/d/memman/subs.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:        .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.