Annotation of xinu/sys/kprintf.c, revision 1.1

1.1     ! root        1: /* kprintf.c - kprintf, kputc, savestate, rststate */
        !             2: 
        !             3: #include <conf.h>
        !             4: #include <kernel.h>
        !             5: #include <io.h>
        !             6: #include <slu.h>
        !             7: #include <tty.h>
        !             8: #include <procreg.h>
        !             9: 
        !            10: /*------------------------------------------------------------------------
        !            11:  *  kprintf  --  kernel printf: formatted, unbuffered output to CONSOLE
        !            12:  *------------------------------------------------------------------------
        !            13:  */
        !            14: kprintf(fmt, args)             /* Derived by Bob Brown, Purdue U.      */
        !            15:         char *fmt;             /* Flow control added by Steve Munson   */
        !            16: {
        !            17:        int     kputc();
        !            18:        savestate();
        !            19:         _doprnt(fmt, &args, kputc, CONSOLE);
        !            20:         rststate();
        !            21:         return(OK);
        !            22: }
        !            23: 
        !            24: /*------------------------------------------------------------------------
        !            25:  *  kputc  --  write a character on the non memory-mapped console device
        !            26:  *              using polled I/O
        !            27:  *------------------------------------------------------------------------
        !            28:  */
        !            29: LOCAL  kputc(device ,c)
        !            30:        int     device;
        !            31:        register char c;        /* character to print from _doprnt      */
        !            32: {
        !            33:        register int    crstat, crbuf, ctstat;
        !            34:        register struct tty     *ttyptr;
        !            35: 
        !            36:        if ( device != CONSOLE || c == 0 )
        !            37:                return;
        !            38:        if ( c == NEWLINE )
        !            39:                kputc( device, RETURN );
        !            40:        ttyptr = (struct tty *)devtab[device].dvioblk;  /* control block*/
        !            41:        if (ttyptr) {
        !            42:           crstat = mfpr(RXCS);                         /* get recv. stat */
        !            43:           crbuf = mfpr(RXDB);          /* get content of receiver buffer */
        !            44:           if ((crstat&SLUREADY) &&
        !            45:                (ttyptr->oheld || (ttyptr->oflow &&
        !            46:                        (crbuf & SLUCHMASK) == ttyptr->ostop)))
        !            47:                        do {
        !            48:                            crstat = mfpr(RXCS);        /* get recv stat */
        !            49:                            while (!(crstat&SLUREADY)) /* wait til ready */
        !            50:                                    crstat = mfpr(RXCS);/* get recv stat */
        !            51:                            crbuf = mfpr(RXDB);         /* get rec buffer */
        !            52:                        } while ((crbuf&SLUCHMASK) == ttyptr->ostop);
        !            53:                        ttyptr->oheld = FALSE;
        !            54:           }
        !            55:        ctstat = mfpr(TXCS); /* get transmit status */
        !            56:        while (!(ctstat & SLUREADY)) /* not ready to transmit yet */
        !            57:                ctstat = mfpr(TXCS); /* poll for idle*/
        !            58:        mtpr(c & SLUCHMASK, TXDB); /* transmit character */
        !            59:        ctstat = mfpr(TXCS); /* get transmit status */
        !            60:        while (!(ctstat & SLUREADY))
        !            61:                ctstat = mfpr(TXCS); /* get transmit status */
        !            62: }
        !            63: 
        !            64: LOCAL  int     savecrstat, savectstat;
        !            65: LOCAL  PStype  ps;
        !            66: /*------------------------------------------------------------------------------
        !            67:  *  savestate  --  save the state of the non-memory mapped CONSOLE device
        !            68:  *------------------------------------------------------------------------------
        !            69:  */
        !            70: LOCAL  savestate()
        !            71: {
        !            72:        disable(ps);
        !            73:        savecrstat = mfpr(RXCS) & SLUENABLE;
        !            74:        savectstat = mfpr(TXCS) & SLUENABLE;
        !            75:        mtpr(SLUDISABLE, RXCS);                 /* disable receive intpts  */
        !            76:        mtpr(SLUDISABLE, TXCS);                 /* disable transmit intpts */
        !            77: }
        !            78: 
        !            79: /*--------------------------------------------------------------------------
        !            80:  *  rststate  --  restore the state of the non-memory mapped CONSOLE device
        !            81:  *--------------------------------------------------------------------------
        !            82:  */
        !            83: LOCAL  rststate()
        !            84: {
        !            85:        mtpr(savecrstat, RXCS);
        !            86:        mtpr(savectstat, TXCS);
        !            87:        restore(ps);
        !            88: }

unix.superglobalmegacorp.com

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