xref: /netbsd/sys/arch/dreamcast/dev/maple/maple.h (revision c4a72b64)
1 /*	$NetBSD: maple.h,v 1.6 2002/12/06 15:47:22 itohy Exp $	*/
2 
3 /*-
4  * Copyright (c) 2002 The NetBSD Foundation, Inc.
5  * All rights reserved.
6  *
7  * This code is derived from software contributed to The NetBSD Foundation
8  * by ITOH Yasufumi.
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 NetBSD
21  *	Foundation, Inc. and its contributors.
22  * 4. Neither the name of The NetBSD Foundation nor the names of its
23  *    contributors may be used to endorse or promote products derived
24  *    from this software without specific prior written permission.
25  *
26  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
27  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
28  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
30  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
31  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
32  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
33  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
34  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
35  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36  * POSSIBILITY OF SUCH DAMAGE.
37  */
38 
39 /*-
40  * Copyright (c) 2001 Marcus Comstedt
41  * All rights reserved.
42  *
43  * Redistribution and use in source and binary forms, with or without
44  * modification, are permitted provided that the following conditions
45  * are met:
46  * 1. Redistributions of source code must retain the above copyright
47  *    notice, this list of conditions and the following disclaimer.
48  * 2. Redistributions in binary form must reproduce the above copyright
49  *    notice, this list of conditions and the following disclaimer in the
50  *    documentation and/or other materials provided with the distribution.
51  * 3. All advertising materials mentioning features or use of this software
52  *    must display the following acknowledgement:
53  *	This product includes software developed by Marcus Comstedt.
54  * 4. Neither the name of The NetBSD Foundation nor the names of its
55  *    contributors may be used to endorse or promote products derived
56  *    from this software without specific prior written permission.
57  *
58  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
59  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
60  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
61  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
62  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
63  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
64  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
65  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
66  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
67  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
68  * POSSIBILITY OF SUCH DAMAGE.
69  */
70 
71 #ifndef _DREAMCAST_DEV_MAPLE_MAPLE_H_
72 #define _DREAMCAST_DEV_MAPLE_MAPLE_H_
73 
74 /* signed is more effective than unsigned on SH */
75 typedef int8_t maple_response_t;
76 
77 /* Maple Bus command and response codes */
78 
79 #define MAPLE_RESPONSE_LCDERR	 (-6)
80 #define MAPLE_RESPONSE_FILEERR	 (-5)
81 #define MAPLE_RESPONSE_AGAIN	 (-4)	/* request should be retransmitted */
82 #define MAPLE_RESPONSE_BADCMD	 (-3)
83 #define MAPLE_RESPONSE_BADFUNC	 (-2)
84 #define MAPLE_RESPONSE_NONE	 (-1)	/* unit didn't respond at all */
85 #define MAPLE_COMMAND_DEVINFO	 1
86 #define MAPLE_COMMAND_ALLINFO	 2
87 #define MAPLE_COMMAND_RESET	 3
88 #define MAPLE_COMMAND_KILL	 4
89 #define MAPLE_RESPONSE_DEVINFO	 5
90 #define MAPLE_RESPONSE_ALLINFO	 6
91 #define MAPLE_RESPONSE_OK	 7
92 #define MAPLE_RESPONSE_DATATRF	 8
93 #define MAPLE_COMMAND_GETCOND	 9
94 #define MAPLE_COMMAND_GETMINFO	 10
95 #define MAPLE_COMMAND_BREAD	 11
96 #define MAPLE_COMMAND_BWRITE	 12
97 #define MAPLE_COMMAND_GETLASTERR 13
98 #define MAPLE_COMMAND_SETCOND	 14
99 
100 /* Function codes */
101 #define MAPLE_FN_CONTROLLER	0
102 #define MAPLE_FN_MEMCARD	1
103 #define MAPLE_FN_LCD		2
104 #define MAPLE_FN_CLOCK		3
105 #define MAPLE_FN_MICROPHONE	4
106 #define MAPLE_FN_ARGUN		5
107 #define MAPLE_FN_KEYBOARD	6
108 #define MAPLE_FN_LIGHTGUN	7
109 #define MAPLE_FN_PURUPURU	8
110 #define MAPLE_FN_MOUSE		9
111 
112 #define MAPLE_FUNC(fn)		(1 << (fn))
113 
114 struct maple_devinfo {
115 	u_int32_t di_func;		/* function code */
116 	u_int32_t di_function_data[3];  /* function data */
117 	u_int8_t di_area_code;		/* region settings */
118 	u_int8_t di_connector_direction; /* direction of expansion connector */
119 	char di_product_name[30];	/* name of the device */
120 	char di_product_license[60];	/* manufacturer info */
121 	u_int16_t di_standby_power;	/* standby power consumption */
122 	u_int16_t di_max_power;		/* maximum power consumption */
123 };
124 
125 #define MAPLE_CONN_TOP		0	/* connector is to the top */
126 #define MAPLE_CONN_BOTTOM	1	/* connector is to the bottom */
127 
128 struct maple_response {
129 	u_int32_t	response_code;
130 	u_int32_t	data[1];	/* variable length */
131 };
132 
133 #define MAPLE_FLAG_PERIODIC		1
134 #define MAPLE_FLAG_CMD_PERIODIC_TIMING	2
135 
136 struct maple_unit;
137 
138 extern void	maple_set_callback(struct device *, struct maple_unit *, int,
139 		    void (*)(void *, struct maple_response *, int, int),
140 		    void *);
141 extern void	maple_enable_unit_ping(struct device *, struct maple_unit *,
142 		    int /*func*/, int /*enable*/);
143 extern void	maple_enable_periodic(struct device *, struct maple_unit *,
144 		    int /*func*/, int /*on*/);
145 extern void	maple_command(struct device *, struct maple_unit *,
146 		    int /*func*/, int /*command*/, int /*datalen*/, void *,
147 		    int /*flags*/);
148 extern u_int32_t maple_get_function_data(struct maple_devinfo *, int);
149 extern void	maple_run_polling(struct device *);
150 extern int	maple_unit_ioctl(struct device *, struct maple_unit *,
151 		    u_long, caddr_t, int, struct proc *);
152 
153 #endif /* _DREAMCAST_DEV_MAPLE_MAPLE_H_ */
154