home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / sys / hp300 / dev / dcmreg.h < prev    next >
Encoding:
C/C++ Source or Header  |  1991-05-08  |  7.8 KB  |  254 lines

  1. /*
  2.  * Copyright (c) 1988 University of Utah.
  3.  * Copyright (c) 1982, 1986, 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.  * from: Utah $Hdr: dcmreg.h 1.1 90/07/09$
  39.  *
  40.  *    @(#)dcmreg.h    7.4 (Berkeley) 11/4/90
  41.  */
  42.  
  43. struct dcmdevice {       /* host address, only odd bytes addressed */
  44.     u_char    dcm_pad0;
  45.     volatile u_char    dcm_rsid;    /* Reset / ID            0001 */
  46.     u_char    dcm_pad1;
  47.     volatile u_char    dcm_ic;        /* Interrupt control register    0003 */
  48.     u_char    dcm_pad2;
  49.     volatile u_char    dcm_sem;    /* Semaphore register        0005 */
  50.     u_char  dcm_pad3[0x7ffa];    /* Unaddressable    0006-7fff */
  51.     u_char    dcm_pad4;
  52.     volatile u_char    dcm_iir;    /* Interrupt ident register    8001 */
  53.     u_char    dcm_pad5;
  54.     volatile u_char    dcm_cr;        /* Command register        8003 */
  55.     u_char  dcm_pad6[0x3fc];    /* Card scratch        8004-83ff */
  56.     struct    dcmrfifo {
  57.         u_char    ptr_pad1;
  58.         volatile u_char    data_char;
  59.         u_char    ptr_pad2;
  60.         volatile u_char    data_stat;
  61.     } dcm_rfifos[4][0x80];        /* Receive queues        8400 */
  62.     struct  {
  63.         u_char    ptr_pad1;
  64.         volatile u_char    data_data;
  65.     } dcm_bmap[0x100];        /* Bitmap table            8c00 */
  66.     struct  {
  67.         u_char    ptr_pad;
  68.         volatile u_char    ptr;
  69.     } dcm_rhead[4];            /* Fifo head - receive        8e00 */
  70.     struct  {
  71.         u_char  ptr_pad;
  72.         volatile u_char  ptr;
  73.     } dcm_rtail[4];            /* Fifo tail - receive        8e08 */
  74.     struct  {
  75.         u_char    ptr_pad;
  76.         volatile u_char    ptr;
  77.     } dcm_thead[4];            /* Fifo head - transmit        8e10 */
  78.     struct  {
  79.         u_char    ptr_pad;
  80.         volatile u_char    ptr;
  81.     } dcm_ttail[4];            /* Fifo tail - transmit        8e18 */
  82.     struct  {
  83.         u_char    pad1;
  84.         volatile u_char    dcm_conf;
  85.         u_char    pad2;
  86.         volatile u_char    dcm_baud;
  87.     } dcm_data[4];            /* Configuration registers    8e20 */
  88.     struct    modemreg {
  89.         u_char    pad0;
  90.         volatile u_char  mdmin;        /* Modem in        8e31 */
  91.         u_char  pad1;
  92.         volatile u_char  mdmout;    /* Modem out        8e33 */
  93.         u_char  pad2;
  94.         volatile u_char  mdmmsk;    /* Modem mask        8e35 */
  95.     } dcm_modem0;
  96.     struct  {
  97.         u_char pad1;
  98.         volatile u_char dcm_data;
  99.     } dcm_cmdtab[4];        /* Command tables        8e36 */
  100.     struct  {
  101.         u_char pad1;
  102.         volatile u_char dcm_data;
  103.     } dcm_icrtab[4];        /* Interrupt data        8e3e */
  104.     u_char  dcm_pad10;
  105.     volatile u_char  dcm_stcon;    /* Self test condition        8e47 */
  106.     struct modemreg dcm_modem1;    /* 638 Modem port1        8e48 */
  107.     struct modemreg dcm_modem2;    /* 638 Modem port2        8e4e */
  108.     struct modemreg dcm_modem3;    /* 638 Modem port3        8e54 */
  109.     u_char    dcm_pad11;
  110.     volatile u_char    dcm_modemchng;    /* 638 Modem change mask    8e5b */
  111.     u_char    dcm_pad12;
  112.     volatile u_char    dcm_modemintr;    /* 638 Modem interrupt mask    8e5d */
  113.     u_char  dcm_pad13[0x82];    /* Undef Shared Ram    8e5e-8edf */
  114.     struct    dcmtfifo {
  115.         u_char  ptr_pad1;
  116.         volatile u_char  data_char;
  117.     } dcm_tfifos[4][0x10];        /* Transmit queues        8ee0 */
  118. };
  119.  
  120. /*
  121.  * Overlay structure for port specific queue "registers".
  122.  * Starts at offset 0x8E00+(port*2).
  123.  */
  124. struct    dcmpreg {
  125.     u_char        pad0;        /* +00 */
  126.     volatile u_char    r_head;        /* +01 */
  127.     u_char        pad1[7];    /* +02 */
  128.     volatile u_char    r_tail;        /* +09 */
  129.     u_char        pad2[7];    /* +0A */
  130.     volatile u_char    t_head;        /* +11 */
  131.     u_char        pad3[7];    /* +12 */
  132.     volatile u_char    t_tail;        /* +19 */
  133. };
  134. #define    dcm_preg(d, p)    ((struct dcmpreg *)((u_int)(d)+0x8e00+(p)*2))
  135.  
  136. /* interface reset/id */
  137. #define DCMCON          0x80    /* REMOTE/LOCAL switch, read */
  138. #define    DCMID        0x5    /* hardwired card id, read */
  139. #define    DCMRS        0x80    /* software reset, write */
  140.  
  141. /* interrupt control */
  142. #define    DCMIPL(x)    ((((x) >> 4) & 3) + 3)    /* interupt level, read */
  143. #define    IC_IR        0x40    /* interupt request, read */
  144. #define    IC_IE        0x80    /* interupt enable, write */
  145. #define    IC_ID        0x00    /* interupt disable, write */
  146.  
  147.  
  148. /* Semaphore control */
  149. #define    SEM_BSY        0x80    /* read */
  150. #define SEM_CLR         0xFF    /* write */
  151. #define SEM_LOCK(dcm)    while ((dcm)->dcm_sem & SEM_BSY)
  152. #define SEM_UNLOCK(dcm)    (dcm)->dcm_sem = SEM_CLR
  153.  
  154. /* command register */
  155. #define    CR_PORT0    0x1
  156. #define    CR_PORT1    0x2
  157. #define    CR_PORT2    0x4
  158. #define    CR_PORT3    0x8
  159. #define    CR_MODM        0x10    /* change modem output lines */
  160. #define    CR_TIMER    0x20    /* 16ms interrupt timer toggle */
  161. #define    CR_SELFT    0x40    /* run self test */
  162. #define CR_MASK        0x7f
  163.  
  164. /* interrupt ident register */
  165. #define    IIR_PORT0    0x1
  166. #define    IIR_PORT1    0x2
  167. #define    IIR_PORT2    0x4
  168. #define    IIR_PORT3    0x8
  169. #define    IIR_SELFT    0x10    /* self test completed */
  170. #define    IIR_MODM    0x20    /* change in modem input lines */
  171. #define    IIR_TIMEO    0x40    /* Time out */
  172. #define IIR_MASK    0x7f
  173.  
  174. /* self test cond reg */
  175. #define ST_OK           0xe0
  176.  
  177. /* Line configuration register */
  178. #define    LC_PNO        0x00
  179. #define    LC_PODD        0x01
  180. #define    LC_PEVEN    0x02
  181. #define    LC_PMSK        0x03
  182.  
  183. #define    LC_1STOP    0x00
  184. #define    LC_1HSTOP    0x04
  185. #define    LC_2STOP    0x08
  186. #define    LC_STOPMSK    0x0b
  187.  
  188. #define    LC_8BITS    0x30
  189. #define    LC_7BITS    0x20
  190. #define    LC_6BITS    0x10
  191. #define    LC_5BITS    0x00
  192. #define    LC_BITMSK    0x30
  193.  
  194. /* baud reg */
  195. #define BR_0        0x00
  196. #define BR_50        0x01
  197. #define BR_75        0x02
  198. #define BR_110        0x03
  199. #define BR_134      0x04
  200. #define BR_150        0x05
  201. #define BR_300        0x06
  202. #define BR_600        0x07
  203. #define BR_900        0x08
  204. #define BR_1200        0x09
  205. #define BR_1800        0x0a
  206. #define BR_2400        0x0b
  207. #define BR_3600        0x0c
  208. #define BR_4800        0x0d
  209. #define BR_7200        0x0e
  210. #define BR_9600        0x0f
  211. #define BR_19200    0x10
  212. #define BR_38400    0x11
  213.  
  214. /* modem input register */
  215. #define    MI_CTS        0x08
  216. #define    MI_DM        0x04
  217. #define    MI_CD        0x02
  218. #define    MI_RI        0x01
  219.  
  220. /* modem output register */
  221. #define    MO_SR        0x04
  222. #define    MO_DTR        0x02
  223. #define    MO_RTS        0x01
  224. #define    MO_ON        ((MO_DTR) | (MO_RTS))
  225. #define    MO_OFF        0x00
  226.  
  227. /* cmd-tab values, write */
  228. #define CT_CON        0x1    /* configuration change */
  229. #define CT_TX        0x2    /* transmit buffer not empty */
  230. #define CT_BRK        0x4    /* toggle BREAK */
  231.  
  232. /* icr-tab values, read */
  233. #define IT_TX        0x1    /* transmit buffer empty */
  234. #define IT_SPEC        0x2    /* special character received */
  235.  
  236. /* data errors */
  237. #define RD_OVF        0x08
  238. #define RD_BD        0x10
  239. #define RD_PE        0x20
  240. #define RD_OE        0x40
  241. #define RD_FE        0x80
  242. #define RD_MASK        0xf8
  243.  
  244. /* Transmit/Receive masks */
  245. #define TX_MASK        0x0f
  246. #define RX_MASK        0xff
  247.  
  248. /*
  249.  * WARNING: Serial console is assumed to be the lowest select-code card
  250.  * and that card must be logical unit 0 in the kernel.  Also, CONUNIT must
  251.  * be 1, the port affected by the REMOTE/LOCAL switch.
  252.  */
  253. #define CONUNIT    (1)
  254.