1 /* 2 * Copyright (c) 1988 University of Utah. 3 * Copyright (c) 1990 The Regents of the University of California. 4 * All rights reserved. 5 * 6 * This code is derived from software contributed to Berkeley by 7 * the Systems Programming Group of the University of Utah Computer 8 * Science Department. 9 * 10 * %sccs.include.redist.c% 11 * 12 * @(#)dca.c 7.2 (Berkeley) 12/16/90 13 */ 14 15 #ifdef DCACONSOLE 16 #include "sys/param.h" 17 #include "../dev/dcareg.h" 18 #include "../include/cpu.h" 19 #include "../hp300/cons.h" 20 21 #define CONSDEV (0) 22 #define CONSOLE ((struct dcadevice *)(EXTIOBASE + (9 * IOCARDSIZE))) 23 24 dcaprobe(cp) 25 struct consdev *cp; 26 { 27 register struct dcadevice *dca = CONSOLE; 28 29 if (badaddr((char *)CONSOLE)) { 30 cp->cn_pri = CN_DEAD; 31 return; 32 } 33 switch (dca->dca_irid) { 34 case DCAID0: 35 case DCAID1: 36 cp->cn_pri = CN_NORMAL; 37 break; 38 case DCAREMID0: 39 case DCAREMID1: 40 cp->cn_pri = CN_REMOTE; 41 break; 42 default: 43 cp->cn_pri = CN_DEAD; 44 break; 45 } 46 } 47 48 dcainit(cp) 49 struct consdev *cp; 50 { 51 register struct dcadevice *dca = CONSOLE; 52 53 dca->dca_irid = 0xFF; 54 DELAY(100); 55 dca->dca_ic = 0; 56 dca->dca_cfcr = CFCR_DLAB; 57 dca->dca_data = DCABRD(9600) & 0xFF; 58 dca->dca_ier = DCABRD(9600) >> 8; 59 dca->dca_cfcr = CFCR_8BITS; 60 } 61 62 #ifndef SMALL 63 dcagetchar() 64 { 65 register struct dcadevice *dca = CONSOLE; 66 short stat; 67 int c; 68 69 if (((stat = dca->dca_lsr) & LSR_RXRDY) == 0) 70 return(0); 71 c = dca->dca_data; 72 return(c); 73 } 74 #else 75 dcagetchar() 76 { 77 return(0); 78 } 79 #endif 80 81 dcaputchar(c) 82 register int c; 83 { 84 register struct dcadevice *dca = CONSOLE; 85 register int timo; 86 short stat; 87 88 /* wait a reasonable time for the transmitter to come ready */ 89 timo = 50000; 90 while (((stat = dca->dca_lsr) & LSR_TXRDY) == 0 && --timo) 91 ; 92 dca->dca_data = c; 93 /* wait for this transmission to complete */ 94 timo = 1000000; 95 while (((stat = dca->dca_lsr) & LSR_TXRDY) == 0 && --timo) 96 ; 97 } 98 #endif 99