Annotation of xinu/sys/slu6850.c, revision 1.1.1.1

1.1       root        1: #include "slu6850.h"
                      2: /* Package to turn the write-only control register of each of up to MAXSLU
                      3:    MC6850 SLUs into effectively read-write registers, and also initialize
                      4:    the SLU for 8 bits, no parity, 1 stop bit, no interrupts.  To be
                      5:    effective, all references to the control registers need to go
                      6:    through this package. */
                      7: 
                      8: /* space for 3 saved regs-- */
                      9: #define MAXSLU 3
                     10: 
                     11: static struct {
                     12:   struct csr *csrptr;          /* which SLU this is */
                     13:   char csrval;                 /* its current control reg val */
                     14: }soft_control_reg[MAXSLU] = {0};
                     15: 
                     16: slu_init6850(csrptr)
                     17: struct csr *csrptr;    /* ptr to device csr */
                     18: {
                     19:   int i;
                     20: 
                     21:   csrptr->cstat = SLURESET;    /* initialize the device */
                     22:   for (i=0;i<10;i++) ;         /* wait a bit */
                     23:   csrptr->cstat = SLUDEFAULT;
                     24: 
                     25:   /* lookup csr or set up new spot in array-- */
                     26:   for (i=0;i<MAXSLU;i++) {
                     27:     if (soft_control_reg[i].csrptr == (struct csr *)0) {
                     28:       soft_control_reg[i].csrptr = csrptr; /* new spot */
                     29:       break;
                     30:     } else if (soft_control_reg[i].csrptr == csrptr)
                     31:       break;
                     32:   }
                     33:   if (i<MAXSLU)
                     34:     soft_control_reg[i].csrval = SLUDEFAULT;
                     35:   else
                     36:     panic("Too many SLU devs for soft_control_reg table");
                     37: }
                     38: 
                     39: get_control_reg6850(csrptr)
                     40: struct csr *csrptr;    /* ptr to device csr */
                     41: {
                     42:   int i;
                     43: 
                     44:   for (i=0;i<MAXSLU;i++)
                     45:     if (soft_control_reg[i].csrptr == csrptr)
                     46:       return soft_control_reg[i].csrval;
                     47:   panic("Bad csrptr or uninitialized SLU");
                     48: }
                     49: 
                     50: /* must be called to change control reg, so that software var is maintained */
                     51: set_control_reg6850(csrptr,new_control)
                     52: struct csr *csrptr;
                     53: char new_control;
                     54: {
                     55:   int i;
                     56: 
                     57:   for (i=0;i<MAXSLU;i++)
                     58:     if (soft_control_reg[i].csrptr == csrptr) {
                     59:       soft_control_reg[i].csrval = new_control;
                     60:       break;
                     61:     }
                     62:   if (i==MAXSLU)
                     63:     panic("Bad csrptr or uninitialized SLU");
                     64: 
                     65:   csrptr->cstat = new_control; /* 6850--just one reg */
                     66:   return 0;
                     67: }
                     68: 

unix.superglobalmegacorp.com

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