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