1/*	$NetBSD: cia.h,v 1.12 2002/01/26 13:24:53 aymeric Exp $	*/
2
3/*
4 * Mach Operating System
5 * Copyright (c) 1992 Carnegie Mellon University
6 * All Rights Reserved.
7 *
8 * Permission to use, copy, modify and distribute this software and its
9 * documentation is hereby granted, provided that both the copyright
10 * notice and this permission notice appear in all copies of the
11 * software, derivative works or modified versions, and any portions
12 * thereof, and that both notices appear in supporting documentation.
13 *
14 * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
15 * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
16 * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
17 *
18 * Carnegie Mellon requests users of this software to return to
19 *
20 *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
21 *  School of Computer Science
22 *  Carnegie Mellon University
23 *  Pittsburgh PA 15213-3890
24 *
25 * any improvements or extensions that they make and grant Carnegie Mellon
26 * the rights to redistribute these changes.
27 */
28
29/*
30 * This is a rewrite (retype) of the Amiga's CIA chip register map, based
31 * on the Hardware Reference Manual.  It is NOT based on the Amiga's
32 *  hardware/cia.h.
33 */
34
35#ifndef _AMIGA_CIA_
36#define _AMIGA_CIA_
37
38struct CIA {
39	volatile unsigned char pra;          char pad0[0xff];
40	volatile unsigned char prb;          char pad1[0xff];
41	volatile unsigned char ddra;         char pad2[0xff];
42	volatile unsigned char ddrb;         char pad3[0xff];
43	volatile unsigned char talo;         char pad4[0xff];
44	volatile unsigned char tahi;         char pad5[0xff];
45	volatile unsigned char tblo;         char pad6[0xff];
46	volatile unsigned char tbhi;         char pad7[0xff];
47	volatile unsigned char todlo;        char pad8[0xff];
48	volatile unsigned char todmid;       char pad9[0xff];
49	volatile unsigned char todhi;        char pada[0x1ff];
50	volatile unsigned char sdr;          char padc[0xff];
51	volatile unsigned char icr;          char padd[0xff];
52	volatile unsigned char cra;          char pade[0xff];
53	volatile unsigned char crb;          char padf[0xff];
54};
55
56#ifdef _KERNEL
57#ifndef _LOCORE
58extern vaddr_t CIAAbase, CIABbase, CIAADDR;
59#define CIABASE		(0x00BFC000)
60#define CIATOP		(0x00C00000)
61#define NCIAPG		btoc(CIATOP - CIABASE)
62#endif
63
64#define ciaa (*((volatile struct CIA *)CIAAbase))
65#define ciab (*((volatile struct CIA *)CIABbase))
66#endif
67
68/*
69 * bits in CIA-B
70 */
71#define CIAB_PRA_BUSY	(1<<0)
72#define CIAB_PRA_POUT	(1<<1)
73#define CIAB_PRA_SEL	(1<<2)
74#define CIAB_PRA_DSR	(1<<3)
75#define CIAB_PRA_CTS	(1<<4)
76#define CIAB_PRA_CD	(1<<5)
77#define CIAB_PRA_RTS	(1<<6)
78#define CIAB_PRA_DTR	(1<<7)
79
80#define CIAB_PRB_STEP	(1<<0)
81#define CIAB_PRB_DIR	(1<<1)
82#define CIAB_PRB_SIDE	(1<<2)
83#define CIAB_PRB_SEL0	(1<<3)
84#define CIAB_PRB_SEL1	(1<<4)
85#define CIAB_PRB_SEL2	(1<<5)
86#define CIAB_PRB_SEL3	(1<<6)
87#define CIAB_PRB_MTR	(1<<7)
88
89/*
90 * bits in CIA-A
91 */
92#define CIAA_PRA_OVL	(1<<0)
93#define CIAA_PRA_LED	(1<<1)
94#define CIAA_PRA_CHNG	(1<<2)
95#define CIAA_PRA_WPRO	(1<<3)
96#define CIAA_PRA_TK0	(1<<4)
97#define CIAA_PRA_RDY	(1<<5)
98#define CIAA_PRA_FIR0	(1<<6)
99#define CIAA_PRA_FIR1	(1<<7)
100
101/*
102 * ciaa-prb is centronics interface
103 */
104
105
106/*
107 * interrupt bits
108 */
109#define CIA_ICR_TA	(1<<0)
110#define CIA_ICR_TB	(1<<1)
111#define CIA_ICR_ALARM	(1<<2)
112#define CIA_ICR_SP	(1<<3)
113#define CIA_ICR_FLG	(1<<4)
114#define CIA_ICR_IR_SC	(1<<7)
115
116
117/*
118 * since many CIA signals are low-active, these defines should make the
119 * code more readable
120 */
121#define SETDCD(c) (c &= ~CIAB_PRA_CD)
122#define CLRDCD(c) (c |= CIAB_PRA_CD)
123#define ISDCD(c)  (!(c & CIAB_PRA_CD))
124
125#define SETCTS(c) (c &= ~CIAB_PRA_CTS)
126#define CLRCTS(c) (c |= CIAB_PRA_CTS)
127#define ISCTS(c)  (!(c & CIAB_PRA_CTS))
128
129#define SETRTS(c) (c &= ~CIAB_PRA_RTS)
130#define CLRRTS(c) (c |= CIAB_PRA_RTS)
131#define ISRTS(c)  (!(c & CIAB_PRA_RTS))
132
133#define SETDTR(c) (c &= ~CIAB_PRA_DTR)
134#define CLRDTR(c) (c |= CIAB_PRA_DTR)
135#define ISDTR(c)  (!(c & CIAB_PRA_DTR))
136
137#define SETDSR(c) (c &= ~CIAB_PRA_DSR)
138#define CLRDSR(c) (c |= CIAB_PRA_DSR)
139#define ISDSR(c)  (!(c & CIAB_PRA_DSR))
140
141void dispatch_cia_ints(int, int);
142void ciaa_intr(void);
143void ciab_intr(void);
144
145#endif /* _AMIGA_CIA_ */
146