Annotation of cci/d/ioex/subs.c, revision 1.1.1.1

1.1       root        1: 
                      2: 
                      3: long r_no, pt_base, ctlblk;
                      4: 
                      5: /* This routine modify the page frame number (bit 0-21) of PTE
                      6:    in any Page table. Input parameter :
                      7:        reg_no     : contain a number specify one of the following :
                      8:                     SBR,SLR,P0BR,P0LR,P1BR,P1LR,P2BR,P2LR
                      9:        old_pte    : pointer to location to save original PTE
                     10:                     (This could be used to read any PTE when pvbits_msk = 0)
                     11:        which1     : PTE no; 0,1,2...X
                     12:        pfn        : New page frame no. (bit 0 thru 19 of pfn )
                     13: */
                     14: fixpfn_pte(reg_no,which1,old_pte,pfn)
                     15: long reg_no, *old_pte, which1, pfn;
                     16: {      
                     17:        long *st_base;
                     18: 
                     19:        r_no = reg_no;
                     20: 
                     21:        asm("mfpr _r_no,_pt_base");             /* Get base address  */
                     22: 
                     23:        st_base = (long *)pt_base;
                     24:        st_base += which1;
                     25:        *old_pte = *st_base;                    /* Save original PTE */
                     26:        *st_base = (*st_base)&(~PTE_PFN);       /* Mask PFN off */
                     27:        *st_base = (*st_base)|(pfn & PTE_PFN);  /* Set new PFN */
                     28:        *st_base = (*st_base)&0xff7fffff;       /* Set PTE_M bit off */
                     29:        asm("mtpr $0,$TBIA");           /* Invalidate translation buffers */
                     30:        asm("mtpr $0,$PADC");           /* Purge all data cache */
                     31: }
                     32: 
                     33: /* This routine saved a vector in SCB and set it to a new one
                     34:    input parameters :
                     35:        which1 : Vector no; 0,1,2,..X
                     36:        saved_vec : pointer to a location to saved original vector
                     37:        new_vec   : address of new handler
                     38:        stack     : 'K' or 'k' : service on Kernel stack
                     39:                    otherwise  : service on Interrupt stack
                     40: */
                     41: set_handler(which1,saved_vec,new_vec)
                     42: long which1, *saved_vec, new_vec; 
                     43: {      long *st_base;
                     44: 
                     45:        asm("movab _scb,_ctlblk");
                     46:        st_base = (long *)ctlblk;       /* address of SCB is at page 2 */
                     47:        st_base += which1;
                     48:        *saved_vec = *st_base;          /* Save original vector */
                     49:        *st_base = new_vec;
                     50: }
                     51: 

unix.superglobalmegacorp.com

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