home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / sys / hp300 / stand / dca.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-05-07  |  3.5 KB  |  126 lines

  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.  * Redistribution and use in source and binary forms, with or without
  11.  * modification, are permitted provided that the following conditions
  12.  * are met:
  13.  * 1. Redistributions of source code must retain the above copyright
  14.  *    notice, this list of conditions and the following disclaimer.
  15.  * 2. Redistributions in binary form must reproduce the above copyright
  16.  *    notice, this list of conditions and the following disclaimer in the
  17.  *    documentation and/or other materials provided with the distribution.
  18.  * 3. All advertising materials mentioning features or use of this software
  19.  *    must display the following acknowledgement:
  20.  *    This product includes software developed by the University of
  21.  *    California, Berkeley and its contributors.
  22.  * 4. Neither the name of the University nor the names of its contributors
  23.  *    may be used to endorse or promote products derived from this software
  24.  *    without specific prior written permission.
  25.  *
  26.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  27.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  28.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  29.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  30.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  31.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  32.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  33.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  34.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  35.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  36.  * SUCH DAMAGE.
  37.  *
  38.  *    @(#)dca.c    7.3 (Berkeley) 5/7/91
  39.  */
  40.  
  41. #ifdef DCACONSOLE
  42. #include "sys/param.h"
  43. #include "../dev/dcareg.h"
  44. #include "../include/cpu.h"
  45. #include "../hp300/cons.h"
  46.  
  47. struct dcadevice *dcacnaddr = 0;
  48.  
  49. dcaprobe(cp)
  50.     struct consdev *cp;
  51. {
  52.     register struct dcadevice *dca;
  53.  
  54.     dcacnaddr = (struct dcadevice *) sctoaddr(CONSCODE);
  55.     if (badaddr((char *)dcacnaddr)) {
  56.         cp->cn_pri = CN_DEAD;
  57.         return;
  58.     }
  59.     dca = dcacnaddr;
  60.     switch (dca->dca_irid) {
  61.     case DCAID0:
  62.     case DCAID1:
  63.         cp->cn_pri = CN_NORMAL;
  64.         break;
  65.     case DCAREMID0:
  66.     case DCAREMID1:
  67.         cp->cn_pri = CN_REMOTE;
  68.         break;
  69.     default:
  70.         cp->cn_pri = CN_DEAD;
  71.         break;
  72.     }
  73. }
  74.  
  75. dcainit(cp)
  76.     struct consdev *cp;
  77. {
  78.     register struct dcadevice *dca = dcacnaddr;
  79.  
  80.     dca->dca_irid = 0xFF;
  81.     DELAY(100);
  82.     dca->dca_ic = 0;
  83.     dca->dca_cfcr = CFCR_DLAB;
  84.     dca->dca_data = DCABRD(9600) & 0xFF;
  85.     dca->dca_ier = DCABRD(9600) >> 8;
  86.     dca->dca_cfcr = CFCR_8BITS;
  87. }
  88.  
  89. #ifndef SMALL
  90. dcagetchar()
  91. {
  92.     register struct dcadevice *dca = dcacnaddr;
  93.     short stat;
  94.     int c;
  95.  
  96.     if (((stat = dca->dca_lsr) & LSR_RXRDY) == 0)
  97.         return(0);
  98.     c = dca->dca_data;
  99.     return(c);
  100. }
  101. #else
  102. dcagetchar()
  103. {
  104.     return(0);
  105. }
  106. #endif
  107.  
  108. dcaputchar(c)
  109.     register int c;
  110. {
  111.     register struct dcadevice *dca = dcacnaddr;
  112.     register int timo;
  113.     short stat;
  114.  
  115.     /* wait a reasonable time for the transmitter to come ready */
  116.     timo = 50000;
  117.     while (((stat = dca->dca_lsr) & LSR_TXRDY) == 0 && --timo)
  118.         ;
  119.     dca->dca_data = c;
  120.     /* wait for this transmission to complete */
  121.     timo = 1000000;
  122.     while (((stat = dca->dca_lsr) & LSR_TXRDY) == 0 && --timo)
  123.         ;
  124. }
  125. #endif
  126.