1/*	$OpenBSD: adb.h,v 1.6 2022/10/21 22:42:36 gkoehler Exp $	*/
2/*	$NetBSD: adbsys.h,v 1.4 2000/12/19 02:59:24 tsubai Exp $	*/
3
4/*-
5 * Copyright (C) 1993, 1994	Allen K. Briggs, Chris P. Caputo,
6 *			Michael L. Finch, Bradley A. Grantham, and
7 *			Lawrence A. Kesteloot
8 * All rights reserved.
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 Alice Group.
21 * 4. The names of the Alice Group or any of its members may not be used
22 *    to endorse or promote products derived from this software without
23 *    specific prior written permission.
24 *
25 * THIS SOFTWARE IS PROVIDED BY THE ALICE GROUP ``AS IS'' AND ANY EXPRESS OR
26 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
27 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
28 * IN NO EVENT SHALL THE ALICE GROUP BE LIABLE FOR ANY DIRECT, INDIRECT,
29 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
30 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
31 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
32 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
33 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
34 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35 */
36
37#ifndef _ADB_H_
38#define _ADB_H_
39
40#ifdef _KERNEL
41
42/*
43 * Arguments used to attach a device to the Apple Desktop Bus
44 */
45struct adb_attach_args {
46	const char	*name;		/* adb_device_name if real adb device */
47	int		 origaddr;
48	int		 adbaddr;
49	int		 handler_id;
50};
51
52extern const char adb_device_name[];
53
54#define	ADB_CMDADDR(cmd)	((u_int8_t)(cmd & 0xf0) >> 4)
55#define	ADBFLUSH(dev)		((((u_int8_t)dev & 0x0f) << 4) | 0x01)
56#define	ADBLISTEN(dev, reg)	((((u_int8_t)dev & 0x0f) << 4) | 0x08 | reg)
57#define	ADBTALK(dev, reg)	((((u_int8_t)dev & 0x0f) << 4) | 0x0c | reg)
58
59/* an ADB event */
60typedef struct adb_event_s {
61	int byte_count;			/* number of bytes */
62	unsigned char bytes[8];		/* bytes from register 0 */
63} adb_event_t;
64
65	/* Interesting default addresses */
66#define	ADBADDR_SECURE	1		/* Security dongles */
67#define ADBADDR_MAP	2		/* Mapped devices (keyboards/pads) */
68#define ADBADDR_REL	3		/* Relative positioning devices
69					   (mice, trackballs/pads) */
70#define ADBADDR_ABS	4		/* Absolute positioning devices
71					   (graphics tablets) */
72#define ADBADDR_DATATX	5
73#define ADBADDR_RSRVD	6		/* Reserved by Apple */
74#define ADBADDR_MISC	7		/* Miscellaneous appliances */
75#define ADBADDR_DONGLE	ADBADDR_SECURE
76#define ADBADDR_KBD	ADBADDR_MAP
77#define ADBADDR_MS	ADBADDR_REL
78#define ADBADDR_TABLET	ADBADDR_ABS
79#define ADBADDR_MODEM	ADBADDR_DATATX
80
81	/* Interesting keyboard handler IDs */
82#define ADB_STDKBD	1
83#define ADB_EXTKBD	2
84#define ADB_ISOKBD	4
85#define ADB_EXTISOKBD	5
86#define ADB_KBDII	8
87#define ADB_ISOKBDII	9
88#define ADB_PBKBD	12
89#define ADB_PBISOKBD	13
90#define ADB_ADJKPD	14
91#define ADB_ADJKBD	16
92#define ADB_ADJISOKBD	17
93#define ADB_ADJJAPKBD	18
94#define ADB_PBEXTISOKBD	20
95#define ADB_PBEXTJAPKBD	21
96#define ADB_JPKBDII	22
97#define ADB_PBEXTKBD	24
98#define ADB_DESIGNKBD	27	/* XXX Needs to be verified XXX */
99#define ADB_PBJPKBD	30
100#define ADB_PBG4KBD	195
101#define ADB_IBITISOKBD	196
102#define ADB_PBG3JPKBD	201
103
104	/* Interesting mouse handler IDs */
105#define ADBMS_100DPI	1
106#define ADBMS_200DPI	2
107#define ADBMS_MSA3	3	/* Mouse Systems A3 Mouse */
108#define ADBMS_EXTENDED	4	/* Extended mouse protocol */
109#define ADBMS_USPEED	0x2f	/* MicroSpeed mouse */
110#define ADBMS_UCONTOUR	0x66	/* Contour mouse */
111#define ADBMS_TURBO	50	/* Kensington Turbo Mouse */
112
113	/* Interesting tablet handler ID */
114#define ADB_ARTPAD	58	/* WACOM ArtPad II tablet */
115
116	/* Interesting miscellaneous handler ID */
117#define ADB_POWERKEY	34	/* Sophisticated Circuits PowerKey */
118				/* (intelligent power tap) */
119
120extern int	adb_polling;
121#ifdef ADB_DEBUG
122extern int	adb_debug;
123#endif
124
125/* ADB Manager */
126
127typedef caddr_t Ptr;
128
129typedef struct {
130	Ptr siServiceRtPtr;
131	Ptr siDataAreaAddr;
132} ADBSetInfoBlock;
133
134typedef struct {
135	unsigned char	devType;
136	unsigned char	origADBAddr;
137	Ptr		dbServiceRtPtr;
138	Ptr		dbDataAreaAddr;
139} ADBDataBlock;
140
141int	adbprint(void *, const char *);
142void	adb_lid_closed_intr(void);
143void	adb_power_button_intr(void);
144int	adb_op_sync(Ptr, short);
145int	set_adb_info(ADBSetInfoBlock *, int);
146
147#endif	/* _KERNEL */
148
149#endif /* _ADB_H_ */
150