xref: /netbsd-src/sys/arch/shark/shark/ns87307.c (revision 8bc54e5be648e06e7c6b48f7611f8bccfda032d4)
1 /*	$NetBSD: ns87307.c,v 1.7 2016/07/07 06:55:38 msaitoh Exp $	*/
2 
3 /*
4  * Copyright 1997
5  * Digital Equipment Corporation. All rights reserved.
6  *
7  * This software is furnished under license and may be used and
8  * copied only in accordance with the following terms and conditions.
9  * Subject to these conditions, you may download, copy, install,
10  * use, modify and distribute this software in source and/or binary
11  * form. No title or ownership is transferred hereby.
12  *
13  * 1) Any source code used, modified or distributed must reproduce
14  *    and retain this copyright notice and list of conditions as
15  *    they appear in the source file.
16  *
17  * 2) No right is granted to use any trade name, trademark, or logo of
18  *    Digital Equipment Corporation. Neither the "Digital Equipment
19  *    Corporation" name nor any trademark or logo of Digital Equipment
20  *    Corporation may be used to endorse or promote products derived
21  *    from this software without the prior written permission of
22  *    Digital Equipment Corporation.
23  *
24  * 3) This software is provided "AS-IS" and any express or implied
25  *    warranties, including but not limited to, any implied warranties
26  *    of merchantability, fitness for a particular purpose, or
27  *    non-infringement are disclaimed. In no event shall DIGITAL be
28  *    liable for any damages whatsoever, and in particular, DIGITAL
29  *    shall not be liable for special, indirect, consequential, or
30  *    incidental damages or damages for lost profits, loss of
31  *    revenue or loss of use, whether such damages arise in contract,
32  *    negligence, tort, under statute, in equity, at law or otherwise,
33  *    even if advised of the possibility of such damage.
34  */
35 
36 /*
37 **++
38 **
39 **  FACILITY:
40 **
41 **    ns87307 SuperIO chip configuration functions.
42 **
43 **  ABSTRACT:
44 **
45 **    This file contains routines to configure the National Semiconductor
46 **    PC87307VUL SuperIO chip.
47 **
48 **  AUTHORS:
49 **
50 **    John Court, Digital Equipment Corporation.
51 **
52 **  CREATION DATE:
53 **
54 **    16/4/1997
55 **
56 **--
57 */
58 
59 #include <sys/cdefs.h>
60 __KERNEL_RCSID(0, "$NetBSD: ns87307.c,v 1.7 2016/07/07 06:55:38 msaitoh Exp $");
61 
62 #include "opt_ddb.h"
63 
64 #include <sys/param.h>
65 #include <sys/device.h>
66 #include <sys/systm.h>
67 #include <sys/bus.h>
68 
69 #include <machine/intr.h>
70 
71 #include <dev/isa/isavar.h>
72 #include <shark/shark/ns87307reg.h>
73 
74 
75 
76 
77 
78 
79 
80 
81 
82 /*
83 **++
84 **  FUNCTION NAME:
85 **
86 **      i87307KbdConfig
87 **
88 **  FUNCTIONAL DESCRIPTION:
89 **
90 **     This function configures the Keyboard controller logical
91 **     device on the ns87307 SuperIO hardware.  It sets up the addresses
92 **     of the data and command ports and configures the irq number and
93 **     triggering for the device.  It then activates the device.
94 **
95 **  FORMAL PARAMETERS:
96 **
97 **       iot
98 **       kbdBase
99 **       irqNum
100 **
101 **  IMPLICIT INPUTS:
102 **
103 **      None.
104 **
105 **  IMPLICIT OUTPUTS:
106 **
107 **      None.
108 **
109 **  function value or completion codes
110 **
111 **      true    configuration of the kdb device was successful.
112 **      false   configuration of the kdb device failed.
113 **
114 **  SIDE EFFECTS:
115 **
116 **      None.
117 **--
118 */
119 int
i87307KbdConfig(bus_space_tag_t iot,u_int kbdBase,u_int irqNum)120 i87307KbdConfig(bus_space_tag_t iot,
121 		u_int           kbdBase,
122 		u_int           irqNum )
123 {
124     u_int                configured = false;
125     bus_space_handle_t   ioh;
126 
127 
128     if (!(bus_space_map( iot, CONNSIOADDR, NSIO_NPORTS, 0 , &ioh )))
129     {
130 	NSIO_SELECT_DEV( iot, ioh,  NSIO_DEV_KBC );
131 	NSIO_DEACTIVATE_DEV( iot, ioh );
132 	NSIO_CONFIG_IRQ( iot, ioh, irqNum, NSIO_IRQ_LEVEL | NSIO_IRQ_HIGH );
133 	NSIO_CONFIG_KBCDATA( iot, ioh, kbdBase );
134 	NSIO_CONFIG_KBCCMD(iot, ioh, kbdBase+4);
135 	NSIO_WRITE_REG( iot, ioh, NSIO_KBC_CFG, 0x80 );
136 	NSIO_ACTIVATE_DEV( iot, ioh );
137 	NSIO_CONFIG_KBCDEBUG( iot, ioh );
138 
139 	/* unmap the space so can probe later
140 	*/
141 	bus_space_unmap( iot, ioh, NSIO_NPORTS );
142 
143 	configured = true;
144     }
145 
146     return (configured);
147 } /* End i87307KbdConfig() */
148 
149 
150 
151 /*
152 **++
153 **  FUNCTION NAME:
154 **
155 **      i87307MouseConfig
156 **
157 **  FUNCTIONAL DESCRIPTION:
158 **
159 **     This function configures the Mouse logical device on the ns87307
160 **     SuperIO chip. It sets up only the interrupt parameters since the
161 **     mouse shares the device ports with the Keyboard. It also activates
162 **     the device.
163 **
164 **  FORMAL PARAMETERS:
165 **
166 **       iot
167 **       irqNum
168 **
169 **  IMPLICIT INPUTS:
170 **
171 **      None.
172 **
173 **  IMPLICIT OUTPUTS:
174 **
175 **      None.
176 **
177 **  function value or completion codes
178 **
179 **      true    configuration of the kdb device was successful.
180 **      false   configuration of the kdb device failed.
181 **
182 **  SIDE EFFECTS:
183 **
184 **      None.
185 **--
186 */
187 int
i87307MouseConfig(bus_space_tag_t iot,u_int irqNum)188 i87307MouseConfig(bus_space_tag_t iot,
189 		  u_int           irqNum )
190 {
191     u_int                configured;
192     bus_space_handle_t   ioh;
193 
194     configured = false; /* be a pessimist */
195 
196     if (!(bus_space_map( iot, CONNSIOADDR, NSIO_NPORTS, 0 , &ioh )))
197     {
198 	/* Now do the mouse logical device IRQ settup.
199 	*/
200 	NSIO_SELECT_DEV( iot, ioh, NSIO_DEV_MOUSE );
201 	NSIO_DEACTIVATE_DEV( iot, ioh );
202 	NSIO_CONFIG_IRQ( iot, ioh, irqNum, NSIO_IRQ_LEVEL | NSIO_IRQ_HIGH);
203 	NSIO_ACTIVATE_DEV( iot, ioh );
204 	NSIO_CONFIG_DEBUG( iot, ioh );
205 	/* unmap the space so can probe later
206 	*/
207 	bus_space_unmap( iot, ioh, NSIO_NPORTS );
208 
209 	configured = true;
210     }
211 
212 
213     return (configured);
214 } /* End i87307MouseConfig() */
215 
216 
217 
218 /*
219 **++
220 **  FUNCTION NAME:
221 **
222 **      i87307PrinterConfig
223 **
224 **  FUNCTIONAL DESCRIPTION:
225 **
226 **     This function configures the Parrel logical device on the ns87307
227 **     SuperIO chip.
228 **     the device.
229 **
230 **  FORMAL PARAMETERS:
231 **
232 **       iot
233 **       irqNum
234 **
235 **  IMPLICIT INPUTS:
236 **
237 **      None.
238 **
239 **  IMPLICIT OUTPUTS:
240 **
241 **      None.
242 **
243 **  function value or completion codes
244 **
245 **      true    configuration of the kdb device was successful.
246 **      false   configuration of the kdb device failed.
247 **
248 **  SIDE EFFECTS:
249 **
250 **      None.
251 **--
252 */
253 int
i87307PrinterConfig(bus_space_tag_t iot,u_int irqNum)254 i87307PrinterConfig(bus_space_tag_t iot,
255 		  u_int           irqNum )
256 {
257     u_int                configured = false;
258     bus_space_handle_t   ioh;
259 
260     u_char value;
261 
262     if (!(bus_space_map( iot, CONNSIOADDR, NSIO_NPORTS, 0 , &ioh )))
263     {
264         /* select the printer */
265         NSIO_SELECT_DEV( iot, ioh,  NSIO_DEV_LPT );
266     	NSIO_DEACTIVATE_DEV( iot, ioh );
267 
268         value = NSIO_LPT_TRISTATE_DISABLE |
269                 NSIO_LPT_CLOCK_DISABLE    |
270                 NSIO_LPT_REPORT_SPP       |
271                 NSIO_LPT_REG403_DISABLE   |
272                 NSIO_LPT_SPP_EXTENDED;
273     	NSIO_WRITE_REG( iot, ioh, NSIO_CFG_REG0, value);
274 
275         /* set the type of interrupt */
276         value = NSIO_IRQ_HIGH |
277                 NSIO_IRQ_LEVEL;
278         NSIO_CONFIG_IRQ( iot, ioh, irqNum,value);
279 
280     	/* activate the device */
281     	NSIO_ACTIVATE_DEV( iot, ioh );
282 
283 
284         /* unmap the space so can probe later */
285     	bus_space_unmap( iot, ioh, NSIO_NPORTS );
286 
287     	configured = true;
288     }
289 
290 
291     return (configured);
292 } /* End i87307PrinterConfig() */
293 
294 
295 
296 /*
297 **++
298 **  FUNCTION NAME:
299 **
300 **      nsioConfigPrint
301 **
302 **  FUNCTIONAL DESCRIPTION:
303 **
304 **     This function prints out the irq, iobase etc, for the
305 **     currently selected logical device.  It is intended to
306 **     be used for debugging only.
307 **
308 **  FORMAL PARAMETERS:
309 **
310 **       sc     pointer to the nsio's softc structure
311 **
312 **  IMPLICIT INPUTS:
313 **
314 **      None.
315 **
316 **  IMPLICIT OUTPUTS:
317 **
318 **      None.
319 **
320 **  function value or completion codes
321 **
322 **      None
323 **
324 **  SIDE EFFECTS:
325 **
326 **      None.
327 **
328 **--
329 */
330 //#ifdef DDB
nsioConfigPrint(bus_space_tag_t nsioIot,bus_space_handle_t nsioIoh)331 void nsioConfigPrint(bus_space_tag_t nsioIot,
332                      bus_space_handle_t  nsioIoh )
333 {
334     u_char     dev;
335     u_char     activate;
336     u_char     iorange;
337     u_char     iobaseh;
338     u_char     iobasel;
339     u_char     irq;
340     u_char     irqType;
341     u_char     dma1;
342     u_char     dma2;
343     u_char     reg0;
344 
345     NSIO_READ_REG( nsioIot, nsioIoh, NSIO_CFG_LOGDEV, dev );
346     NSIO_READ_REG( nsioIot, nsioIoh, NSIO_CFG_ACTIVATE, activate );
347     NSIO_READ_REG( nsioIot, nsioIoh, NSIO_CFG_IORNGCHK, iorange );
348     NSIO_READ_REG( nsioIot, nsioIoh, NSIO_CFG_IOBASEH, iobaseh );
349     NSIO_READ_REG( nsioIot, nsioIoh, NSIO_CFG_IOBASEL, iobasel );
350     NSIO_READ_REG( nsioIot, nsioIoh, NSIO_CFG_IRQ, irq );
351     NSIO_READ_REG( nsioIot, nsioIoh, NSIO_CFG_IRQTYPE, irqType );
352     NSIO_READ_REG( nsioIot, nsioIoh, NSIO_CFG_DMA1, dma1 );
353     NSIO_READ_REG( nsioIot, nsioIoh, NSIO_CFG_DMA2, dma2 );
354     NSIO_READ_REG( nsioIot, nsioIoh, NSIO_CFG_REG0, reg0 );
355 
356     printf("nsio config for logical device %d\n", dev );
357     printf("activate:   %x\n",activate);
358     printf("iorange:    %x\n",iorange);
359     printf("iobase:     %x\n",(iobaseh << 8) | iobasel);
360     printf("irq:        %x\n",irq);
361     printf("irqtype:    %x\n",irqType);
362     printf("dma1:       %x\n",dma1);
363     printf("dma2:       %x\n",dma2) ;
364     printf("reg0:       %x\n",reg0);
365 }
366 //#endif
367