xref: /netbsd-src/sys/dev/ic/z8536reg.h (revision 2413e475f1cb80d6f00bfbfeabc455e75d6307b7)
1 /*	$NetBSD: z8536reg.h,v 1.3 2012/01/31 22:13:19 hauke Exp $	*/
2 
3 /*-
4  * Copyright (c) 2008 Hauke Fath
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
16  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
19  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25  */
26 
27 /*
28  * Zilog Z8536 CIO (Counter/Timer and Parallel I/O Unit)
29  * Register Definitions
30  *
31  * The CIO has four registers: One control register, and three data
32  * registers for ports A/B/C. To set up the CIO through the control
33  * register, first write the number of the internal register to it,
34  * then access or set the selected register contents. Once selected,
35  * an internal register can be polled continuously by reading out the
36  * control port.
37  *
38  * Internal registers are read-writable, except where noted.
39  */
40 #define Z8536_IOSIZE		0x04
41 
42 #define Z8536_MICR		0x00	/* Master Interrupt Control Register */
43 #define       MICR_RESET	0x01	/* Chip Reset */
44 #define	      MICR_RJA		0x02	/* Only z8036 (ZBUS version) */
45 #define	      MICR_CTVIS	0x04	/* CT     vector includes status */
46 #define	      MICR_PBVIS	0x08	/* Port B vector includes status */
47 #define	      MICR_PAVIS	0x10	/* Port A vector includes status */
48 #define	      MICR_NV		0x20	/* No Vector (NV) */
49 #define	      MICR_DLC		0x40	/* Disable Lower Chain (DLC) */
50 #define	      MICR_MIE		0x80	/* Master Interrupt Enable (MIE) */
51 
52 #define Z8536_MCCR         	0x01	/* Master Configuration Register */
53 #define       MCCR_CTINDPT   	0x00 	/* Counter/Timers Independent */
54 #define       MCCR_CT1GT2  	0x01 	/* CT 1 /OUTPUT gates CT 2 */
55 #define       MCCR_CT1TR2  	0x02 	/* CT 1 /OUTPUT triggers CT 2 */
56 #define       MCCR_CT1CT2  	0x03 	/* CT 1 /OUTPUT is CT 2's COUNT */
57 #define       MCCR_PAE     	0x04 	/* Port A Enable */
58 #define       MCCR_PLC     	0x08 	/* Port Link Control (A/B) */
59 #define       MCCR_PC_CT3E    	0x10 	/* Counter/Timer 3 + Port C Enable */
60 #define       MCCR_CT2E    	0x20 	/* Counter/Timer 2 Enable */
61 #define       MCCR_CT1E    	0x40	/* Counter/Timer 1 Enable */
62 #define       MCCR_PBE     	0x80	/* Port B Enable */
63 
64 /* Interrupt Vector Registers */
65 #define Z8536_IVRA       	0x02	/* Port A Interrupt Vector */
66 #define Z8536_IVRB       	0x03	/* Port B Interrupt Vector */
67 #define Z8536_IVRCT		0x04	/* Counter/Timer Interrupt Vector */
68 
69 /* Port C setup */
70 #define Z8536_DPPRC        	0x05	/* Port C Data Path Polarity */
71 #define Z8536_DDRC         	0x06	/* Port C Data Direction */
72 #define Z8536_SIOCRC       	0x07	/* Port C Special I/O Control */
73 
74 #define Z8536_PCSRA        	0x08	/* Port A Command and Status */
75 #define Z8536_PCSRB        	0x09	/* Port B Command and Status */
76 
77 /* Z8536_PCSRA + Z8536_PCSRB command and status bits */
78 #define      PCSR_IOE		0x01	/* Interrupt on error */
79 #define      PCSR_PMF		0x02	/* Pattern match flag (RO) */
80 #define      PCSR_IRF		0x04	/* Input register full (RO) */
81 #define      PCSR_ORE		0x08	/* Output register empty (RO) */
82 #define      PCSR_ERR		0x10	/* Interrupt error */
83 #define      PCSR_IP		0x20	/* Interrupt pending */
84 #define      PCSR_IE		0x40	/* Interrupt enable */
85 #define      PCSR_IUS		0x80	/* Interrupt under service */
86 /* PCSR{A,B} interrupt bits: IUS/IE/IP */
87 #define       PCSR_NULL		0x00  	/* Null Code */
88 #define       PCSR_CLR_IP_IUS	0x20  	/* Clear IP and IUS */
89 #define       PCSR_SET_IUS	0x40  	/* Set Interrupt Under Service */
90 #define       PCSR_CLR_IUS	0x60  	/* Clear Interrupt Under Service */
91 #define       PCSR_SET_IP	0x80  	/* Set Interrupt Pending */
92 #define       PCSR_CLR_IP	0xA0  	/* Clear Interrupt Pending */
93 #define       PCSR_SET_IE	0xC0  	/* Set Interrupt Enable */
94 #define       PCSR_CLR_IE	0xE0  	/* Clear Interrupt Enable */
95 
96 /* Counter/Timer 1..3 Command and Status Registers */
97 #define Z8536_CTCSR1       	0x0A 	/* CT 1 Command and Status */
98 #define Z8536_CTCSR2       	0x0B 	/* CT 2 Command and Status */
99 #define Z8536_CTCSR3       	0x0C 	/* CT 3 Command and Status */
100 
101 /* CTCSR setup bits */
102 #define       CTCS_CIP     	0x01 	/* Count in Progress (RO) */
103 #define       CTCS_TCB     	0x02 	/* Trigger Command Bit (WO) */
104 #define       CTCS_GCB     	0x04 	/* Gate Command Bit */
105 #define       CTCS_RCC     	0x08 	/* Read Counter Control */
106 #define       CTCS_ERR     	0x10 	/* Interrupt Error (RO) */
107 #define       CTCS_IP      	0x20 	/* Interrupt Pending */
108 #define       CTCS_IE      	0x40 	/* Interrupt Enable */
109 #define       CTCS_IUS     	0x80 	/* Interrupt Under Service */
110 
111 /* CTCSR interrupt bits: IUS/IE/IP */
112 #define       CTCS_NULL		0x00  	/* Null Code */
113 #define       CTCS_CLR_IP_IUS	0x20  	/* Clear IP and IUS */
114 #define       CTCS_SET_IUS	0x40  	/* Set Interrupt Under Service */
115 #define       CTCS_CLR_IUS	0x60  	/* Clear Interrupt Under Service */
116 #define       CTCS_SET_IP	0x80  	/* Set Interrupt Pending */
117 #define       CTCS_CLR_IP	0xA0  	/* Clear Interrupt Pending */
118 #define       CTCS_SET_IE	0xC0  	/* Set Interrupt Enable */
119 #define       CTCS_CLR_IE	0xE0  	/* Clear Interrupt Enable */
120 
121 /* Avoid changing intr bits unintendedly */
122 #define	CTCSR_MASK(FLAGS)	((FLAGS) & 0x3f)
123 
124 /* The port data registers are directly accessible at their own IO address */
125 #define Z8536_PDRA         	0x0D	/* Port A Data Register */
126 #define Z8536_PDRB         	0x0E	/* Port B Data Register */
127 #define Z8536_PDRC         	0x0F	/* Port C Data Register */
128 
129 /* Bytewise access to current count registers (read-only) */
130 #define Z8536_CTCCR1_MSB 	0x10	/* CT 1 Current Count MSB  */
131 #define Z8536_CTCCR1_LSB 	0x11	/* CT 1 Current Count LSB  */
132 #define Z8536_CTCCR2_MSB 	0x12	/* CT 2 Current Count MSB  */
133 #define Z8536_CTCCR2_LSB 	0x13	/* CT 2 Current Count LSB  */
134 #define Z8536_CTCCR3_MSB 	0x14	/* CT 3 Current Count MSB  */
135 #define Z8536_CTCCR3_LSB 	0x15	/* CT 3 Current Count LSB  */
136 
137 /* Bytewise access to time constant registers */
138 #define Z8536_CTTCR1_MSB 	0x16	/* CT 1 Time Constant MSB  */
139 #define Z8536_CTTCR1_LSB 	0x17	/* CT 1 Time Constant LSB  */
140 #define Z8536_CTTCR2_MSB 	0x18	/* CT 2 Time Constant MSB  */
141 #define Z8536_CTTCR2_LSB 	0x19	/* CT 2 Time Constant LSB  */
142 #define Z8536_CTTCR3_MSB 	0x1A	/* CT 3 Time Constant MSB  */
143 #define Z8536_CTTCR3_LSB 	0x1B	/* CT 3 Time Constant LSB  */
144 
145 /* Counter/Timer Mode specification */
146 #define Z8536_CTMSR1       	0x1C 	/* CT 1 Mode Specification */
147 #define Z8536_CTMSR2       	0x1D 	/* CT 2 Mode Specification */
148 #define Z8536_CTMSR3       	0x1E 	/* CT 3 Mode Specification */
149 #define       CTMS_DCS_PULSE	0x00  	/* Pulse Output */
150 #define       CTMS_DCS_ONESHOT	0x01  	/* One-Shot Output */
151 #define       CTMS_DCS_SQUARE	0x02  	/* Square Wave Output */
152 #define       CTMS_REB		0x04  	/* Retrigger Enable */
153 #define       CTMS_EGE		0x08  	/* External Gate Enable */
154 #define       CTMS_ETE		0x10  	/* External Trigger Enable  */
155 #define       CTMS_ECE		0x20  	/* External Count Enable */
156 #define       CTMS_EOE		0x40  	/* External Output Enable */
157 #define       CTMS_CSC		0x80  	/* Continuous / Single Cycle */
158 
159 #define Z8536_CVR         	0x1F	/* Current Interrupt Vector (RO) */
160 
161 /* Port A specification registers */
162 #define Z8536_PMSRA        	0x20	/* Port A Mode Specification */
163 #define Z8536_PHSRA        	0x21	/* Port A Handshake Specification */
164 #define Z8536_DPPRA        	0x22	/* Port A Data Path Polarity */
165 #define Z8536_DDRA         	0x23	/* Port A Data Direction */
166 #define Z8536_SIOCRA       	0x24	/* Port A Special I/O Control */
167 #define Z8536_PPRA         	0x25	/* Port A Pattern Polarity */
168 #define Z8536_PTRA         	0x26	/* Port A Pattern Transition */
169 #define Z8536_PMRA         	0x27	/* Port A Pattern Mask */
170 
171 /* Port B specification registers */
172 #define Z8536_PMSRB        	0x28	/* Port B Mode Specification */
173 #define Z8536_PHSRB        	0x29	/* Port B Handshake Specification */
174 #define Z8536_DPPRB        	0x2A	/* Port B Data Path Polarity */
175 #define Z8536_DDRB         	0x2B	/* Port B Data Direction */
176 #define Z8536_SIOCRB       	0x2C	/* Port B Special I/O Control */
177 #define Z8536_PPRB         	0x2D	/* Port B Pattern Polarity */
178 #define Z8536_PTRB         	0x2E	/* Port B Pattern Transition */
179 #define Z8536_PMRB         	0x2F	/* Port B Pattern Mask */
180 
181 /* Bit definitions, common to ports A and B */
182 
183 /* Z8536_PMSRA + Z8536_PMSRB port mode specification bits */
184 #define       PMSR_LPM		0x01	/* Bit mode: latched */
185 #define       PMSR_DTE		0x01	/* Hsk mode: deskew timer enable */
186 /*
187  *	PMS1	PMS0	Pattern mode specification
188  *	0	0	disable pattern match
189  *	0	1	"and" mode, transition-triggered interrupt
190  *	1	0	"or" mode, transition-triggered interrupt
191  *	1	1	"or-priority encoded vector" mode, level-
192  *			triggered interrupt (only transparent LPM mode)
193  */
194 #define       PMSR_PMS0		0x02
195 #define       PMSR_PMS1		0x04
196 #define       PMSR_PMS_OFF	0x00	/* Disable pattern match */
197 #define       PMSR_PMS_AND	0x02	/* "and" mode, transition-triggered */
198 #define       PMSR_PMS_OR	0x04	/* "or" mode, transition-triggered */
199 /*
200  * "or-priority encoded vector" mode, level-triggered interrupt
201  * (only in transparent LPM mode)
202  */
203 #define       PMSR_PMS_OR_PEV	0x06
204 #define       PMSR_IMO		0x08	/* Interrupt on match only */
205 #define       PMSR_SB		0x10	/* Single buffered mode */
206 #define       PMSR_ITB		0x20	/* Interrupt on two bytes */
207 /*
208  *	PTS1	PTS0	Port type selects
209  *	0	0	bit port
210  *	0	1	input port
211  *	1	0	output port
212  *	1	1	bidirectional port
213  */
214 #define       PMSR_PTS0		0x40
215 #define       PMSR_PTS1		0x80
216 #define       PMSR_PTS_BIT	0x00
217 #define       PMSR_PTS_IN	0x40
218 #define       PMSR_PTS_OUT	0x80
219 #define       PMSR_PTS_BIDI	0xC0
220 /*
221  * Z8536_PHSRA + Z8536_PHSRB port handshake specification bits
222  * Bits 0-2 set deskew timer for output ports
223  *
224  *	RWS2	RWS1	RWS0	Status signals on port C
225  *	0	0	0	REQUEST/-WAIT disabled
226  *	0	0	1	output -WAIT
227  *	0	1	1	input -WAIT
228  *	1	0	0	special REQUEST
229  *	1	0	1	output REQUEST
230  *	1	1	1	input REQUEST
231  */
232 #define	      PHSR_RWS0		0x08
233 #define	      PHSR_RWS1		0x10
234 #define	      PHSR_RWS2		0x20
235 /*
236  *	HTS1	HTS0	Handshake type specification
237  *	0	0	interlocked handshake
238  *	0	1	strobed handshake
239  *	1	0	pulsed handshake
240  *	1	1	three-wire-handshake
241  */
242 #define       PHSR_HTS0		0x40
243 #define	      PHSR_HTS1		0x80
244 #define	      PHSR_HTS_INT	0x00
245 #define	      PHSR_HTS_STR	0x40
246 #define	      PHSR_HTS_PUL	0x80
247 #define	      PHSR_HTS_TWI	0xC0
248