Annotation of xinu/sys/kprintf.c, revision 1.1.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.