1/*	$NetBSD: kbdvar.h,v 1.20 2009/05/12 14:46:39 cegger Exp $	*/
2
3/*
4 * Copyright (c) 1992, 1993
5 *	The Regents of the University of California.  All rights reserved.
6 *
7 * This software was developed by the Computer Systems Engineering group
8 * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
9 * contributed to Berkeley.
10 *
11 * All advertising materials mentioning features or use of this software
12 * must display the following acknowledgement:
13 *	This product includes software developed by the University of
14 *	California, Lawrence Berkeley Laboratory.
15 *
16 * Redistribution and use in source and binary forms, with or without
17 * modification, are permitted provided that the following conditions
18 * are met:
19 * 1. Redistributions of source code must retain the above copyright
20 *    notice, this list of conditions and the following disclaimer.
21 * 2. Redistributions in binary form must reproduce the above copyright
22 *    notice, this list of conditions and the following disclaimer in the
23 *    documentation and/or other materials provided with the distribution.
24 * 3. Neither the name of the University nor the names of its contributors
25 *    may be used to endorse or promote products derived from this software
26 *    without specific prior written permission.
27 *
28 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
29 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
30 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
31 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
32 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
33 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
34 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
35 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
36 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
37 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
38 * SUCH DAMAGE.
39 *
40 *	@(#)kbd.c	8.2 (Berkeley) 10/30/93
41 */
42
43#include "wskbd.h"	/* for NWSKBD */
44#include <dev/wscons/wsconsio.h>
45#include <dev/wscons/wskbdvar.h>
46#include <dev/sysmon/sysmonvar.h>
47
48#if NWSKBD > 0
49#include "opt_wsdisplay_compat.h"
50#endif
51
52struct kbd_softc {
53	device_t k_dev;		/* required first: base device */
54
55	struct sysmon_pswitch k_sm_pbutton;
56	int k_ev;
57
58	/* middle layer methods */
59	const struct kbd_ops *k_ops;
60
61	/* state of the upper layer */
62	int k_evmode;		/* set if we should produce events */
63	struct evvar k_events;	/* event queue state */
64
65#if NWSKBD > 0
66	device_t  k_wskbd;/* handle for wskbd, if it is attached */
67	int k_wsenabled;	/* set if we are using wskbd */
68#ifdef WSDISPLAY_COMPAT_RAWKBD
69	int k_wsraw;		/* send raw events to wscons */
70#endif
71	struct callout k_wsbell;/* to shut the bell off */
72#endif
73
74	/* ASCII translation state */
75	struct kbd_state k_state;
76
77	/* console hooks */
78	int k_isconsole;
79	struct cons_channel *k_cc;
80
81	/* autorepeat for console input */
82	int k_repeat_start; 	/* initial delay */
83	int k_repeat_step;  	/* inter-char delay */
84	int k_repeatsym;	/* repeating symbol */
85	int k_repeating;	/* callout is active (use callout_active?) */
86	struct callout k_repeat_ch;
87	int k_leds;
88};
89
90
91/*
92 * Downcalls to the middle layer.
93 */
94struct kbd_ops {
95	int (*open)(struct kbd_softc *);
96	int (*close)(struct kbd_softc *);
97	int (*docmd)(struct kbd_softc *, int, int);
98	int (*setleds)(struct kbd_softc *, int, int);
99};
100
101
102/*
103 * kbd console input channel interface.
104 * XXX - does not belong in this header; but for now, kbd is the only user...
105 */
106struct cons_channel {
107	/*
108	 * Callbacks provided by underlying device (e.g. keyboard driver).
109	 * Console driver will call these before console is opened/closed.
110	 */
111	void *cc_private;	/* underlying device private data */
112	int (*cc_iopen)(struct cons_channel *);  /* open underlying device */
113	int (*cc_iclose)(struct cons_channel *); /* close underlying device */
114
115	/*
116	 * Callback provided by the console driver.  Keyboard driver
117	 * calls it to pass input character up as console input.
118	 */
119	void (*cc_upstream)(int);
120};
121
122
123/*
124 * Allocate and link up console channel.
125 * Should be called by the lower layer during attachment.
126 */
127extern struct cons_channel *kbd_cc_alloc(struct kbd_softc *);
128
129/*
130 * Feed sun make/break code as keyboard input to the upper layer.
131 * Should be called by the middle layer.
132 */
133extern void kbd_input(struct kbd_softc *, int);
134
135/*
136 * Special hook to attach the keyboard driver to the console.
137 * XXX: this should be hidden in kbd_cc_alloc().
138 */
139struct consdev;
140extern void cons_attach_input(struct cons_channel *, struct consdev *);
141