1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License, Version 1.0 only
6  * (the "License").  You may not use this file except in compliance
7  * with the License.
8  *
9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10  * or http://www.opensolaris.org/os/licensing.
11  * See the License for the specific language governing permissions
12  * and limitations under the License.
13  *
14  * When distributing Covered Code, include this CDDL HEADER in each
15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16  * If applicable, add the following below this CDDL HEADER, with the
17  * fields enclosed by brackets "[]" replaced with your own identifying
18  * information: Portions Copyright [yyyy] [name of copyright owner]
19  *
20  * CDDL HEADER END
21  */
22 /*
23  * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
24  * Use is subject to license terms.
25  */
26 
27 #ifndef _SYS_DCAM_DCAM1394_IO_H
28 #define	_SYS_DCAM_DCAM1394_IO_H
29 
30 #pragma ident	"%Z%%M%	%I%	%E% SMI"
31 
32 #include <sys/time.h>
33 
34 #ifdef __cplusplus
35 extern "C" {
36 #endif
37 
38 /* macros for manipulating dcam1394_param_list_t structure */
39 #define	PARAM_LIST_INIT(list)			bzero(list, sizeof (list))
40 #define	PARAM_LIST_ADD(list, param, subparam)	list[param][subparam].flag = 1
41 #define	PARAM_LIST_REMOVE(list, param, subparam)  list[param][subparam].flag = 0
42 #define	PARAM_LIST_IS_ENTRY(list, param, subparam) list[param][subparam].flag
43 #define	PARAM_VAL(list, param, subparam)	list[param][subparam].val
44 #define	PARAM_ERR(list, param, subparam)	list[param][subparam].err
45 
46 #define	DCAM1394_NUM_PARAM	30
47 #define	DCAM1394_NUM_SUBPARAM	24
48 
49 /* parameters */
50 #define	DCAM1394_PARAM_CAP_POWER_CTRL			0x0
51 #define	DCAM1394_PARAM_CAP_VID_MODE			0x1
52 #define	DCAM1394_PARAM_CAP_FRAME_RATE_VID_MODE_0	0x2
53 #define	DCAM1394_PARAM_CAP_FRAME_RATE_VID_MODE_1	0x3
54 #define	DCAM1394_PARAM_CAP_FRAME_RATE_VID_MODE_2	0x4
55 #define	DCAM1394_PARAM_CAP_FRAME_RATE_VID_MODE_3	0x5
56 #define	DCAM1394_PARAM_CAP_FRAME_RATE_VID_MODE_4	0x6
57 #define	DCAM1394_PARAM_CAP_FRAME_RATE_VID_MODE_5	0x7
58 #define	DCAM1394_PARAM_POWER				0x8
59 #define	DCAM1394_PARAM_VID_MODE				0x9
60 #define	DCAM1394_PARAM_FRAME_RATE			0xA
61 #define	DCAM1394_PARAM_RING_BUFF_CAPACITY		0xB
62 #define	DCAM1394_PARAM_RING_BUFF_NUM_FRAMES_READY	0xC
63 #define	DCAM1394_PARAM_RING_BUFF_READ_PTR_INCR		0xD
64 #define	DCAM1394_PARAM_FRAME_NUM_BYTES			0xE
65 #define	DCAM1394_PARAM_STATUS				0xF
66 #define	DCAM1394_PARAM_BRIGHTNESS			0x10
67 #define	DCAM1394_PARAM_EXPOSURE				0x11
68 #define	DCAM1394_PARAM_SHARPNESS			0x12
69 #define	DCAM1394_PARAM_WHITE_BALANCE			0x13
70 #define	DCAM1394_PARAM_HUE				0x14
71 #define	DCAM1394_PARAM_SATURATION			0x15
72 #define	DCAM1394_PARAM_GAMMA				0x16
73 #define	DCAM1394_PARAM_SHUTTER				0x17
74 #define	DCAM1394_PARAM_GAIN				0x18
75 #define	DCAM1394_PARAM_IRIS				0x19
76 #define	DCAM1394_PARAM_FOCUS				0x1A
77 #define	DCAM1394_PARAM_ZOOM				0x1B
78 #define	DCAM1394_PARAM_PAN				0x1C
79 #define	DCAM1394_PARAM_TILT				0x1D
80 
81 /* subparameters */
82 
83 /* for DCAM1394_PARAM_CAP_VID_MODE */
84 #define	DCAM1394_SUBPARAM_VID_MODE_0			0x0
85 #define	DCAM1394_SUBPARAM_VID_MODE_YUV_444_160_120	0x0
86 #define	DCAM1394_SUBPARAM_VID_MODE_1			0x1
87 #define	DCAM1394_SUBPARAM_VID_MODE_YUV_422_320_240	0x1
88 #define	DCAM1394_SUBPARAM_VID_MODE_2			0x2
89 #define	DCAM1394_SUBPARAM_VID_MODE_YUV_411_640_480	0x2
90 #define	DCAM1394_SUBPARAM_VID_MODE_3			0x3
91 #define	DCAM1394_SUBPARAM_VID_MODE_YUV_422_640_480	0x3
92 #define	DCAM1394_SUBPARAM_VID_MODE_4			0x4
93 #define	DCAM1394_SUBPARAM_VID_MODE_RGB_640_480		0x4
94 #define	DCAM1394_SUBPARAM_VID_MODE_5			0x5
95 #define	DCAM1394_SUBPARAM_VID_MODE_Y_640_480		0x5
96 
97 /* for DCAM1394_PARAM_CAP_FRAME_RATE_VID_MODE_0 */
98 #define	DCAM1394_SUBPARAM_FRAME_RATE_0			0x6
99 #define	DCAM1394_SUBPARAM_FRAME_RATE_3_75_FPS		0x6
100 #define	DCAM1394_SUBPARAM_FRAME_RATE_1			0x7
101 #define	DCAM1394_SUBPARAM_FRAME_RATE_7_5_FPS		0x7
102 #define	DCAM1394_SUBPARAM_FRAME_RATE_2			0x8
103 #define	DCAM1394_SUBPARAM_FRAME_RATE_15_FPS		0x8
104 #define	DCAM1394_SUBPARAM_FRAME_RATE_3			0x9
105 #define	DCAM1394_SUBPARAM_FRAME_RATE_30_FPS		0x9
106 #define	DCAM1394_SUBPARAM_FRAME_RATE_4			0xA
107 #define	DCAM1394_SUBPARAM_FRAME_RATE_60_FPS		0xA
108 
109 /* for features */
110 #define	DCAM1394_SUBPARAM_PRESENCE			0xB
111 #define	DCAM1394_SUBPARAM_CAP_READ			0xC
112 #define	DCAM1394_SUBPARAM_CAP_ON_OFF			0xD
113 #define	DCAM1394_SUBPARAM_CAP_CTRL_AUTO			0xE
114 #define	DCAM1394_SUBPARAM_CAP_CTRL_MANUAL		0xF
115 #define	DCAM1394_SUBPARAM_MIN_VAL			0x10
116 #define	DCAM1394_SUBPARAM_MAX_VAL			0x11
117 #define	DCAM1394_SUBPARAM_ON_OFF			0x12
118 #define	DCAM1394_SUBPARAM_CTRL_MODE			0x13
119 #define	DCAM1394_SUBPARAM_VALUE				0x14
120 
121 /* for white balance feature */
122 #define	DCAM1394_SUBPARAM_U_VALUE			0x15
123 #define	DCAM1394_SUBPARAM_V_VALUE			0x16
124 
125 #define	DCAM1394_SUBPARAM_NONE				0x17
126 
127 /* parameter values */
128 
129 /* for video mode param */
130 
131 #define	DCAM1394_VID_MODE_0			0x0
132 #define	DCAM1394_VID_MODE_YUV_444_160_120	0x0
133 
134 #define	DCAM1394_VID_MODE_1			0x1
135 #define	DCAM1394_VID_MODE_YUV_422_320_240	0x1
136 
137 #define	DCAM1394_VID_MODE_2			0x2
138 #define	DCAM1394_VID_MODE_YUV_411_640_480	0x2
139 
140 #define	DCAM1394_VID_MODE_3			0x3
141 #define	DCAM1394_VID_MODE_YUV_422_640_480	0x3
142 
143 #define	DCAM1394_VID_MODE_4			0x4
144 #define	DCAM1394_VID_MODE_RGB_640_480		0x4
145 
146 #define	DCAM1394_VID_MODE_5			0x5
147 #define	DCAM1394_VID_MODE_Y_640_480		0x5
148 
149 /* for frame rate param */
150 
151 #define	DCAM1394_FRAME_RATE_0			0x6
152 #define	DCAM1394_3_75_FPS			0x6
153 
154 #define	DCAM1394_FRAME_RATE_1			0x7
155 #define	DCAM1394_7_5_FPS			0x7
156 
157 #define	DCAM1394_FRAME_RATE_2			0x8
158 #define	DCAM1394_15_FPS				0x8
159 
160 #define	DCAM1394_FRAME_RATE_3			0x9
161 #define	DCAM1394_30_FPS				0x9
162 
163 #define	DCAM1394_FRAME_RATE_4			0xA
164 #define	DCAM1394_60_FPS				0xA
165 
166 /* for feature control mode subparam */
167 
168 #define	DCAM1394_CTRL_AUTO			0x1
169 #define	DCAM1394_CTRL_MANUAL			0x0
170 
171 /* for power control subparam */
172 
173 #define	DCAM1394_POWER_OFF			0x0
174 #define	DCAM1394_POWER_ON			0x1
175 
176 /* ioctl() commands */
177 
178 #define	DCAM1394_IOC				('d' << 8)
179 
180 #define	DCAM1394_CMD_REG_READ			(DCAM1394_IOC | 0)
181 #define	DCAM1394_CMD_REG_WRITE			(DCAM1394_IOC | 1)
182 
183 #define	DCAM1394_CMD_CAM_RESET			(DCAM1394_IOC | 2)
184 #define	DCAM1394_CMD_PARAM_GET			(DCAM1394_IOC | 3)
185 #define	DCAM1394_CMD_PARAM_SET			(DCAM1394_IOC | 4)
186 #define	DCAM1394_CMD_FRAME_RCV_START		(DCAM1394_IOC | 5)
187 #define	DCAM1394_CMD_FRAME_RCV_STOP		(DCAM1394_IOC | 6)
188 #define	DCAM1394_CMD_RING_BUFF_FLUSH		(DCAM1394_IOC | 7)
189 #define	DCAM1394_CMD_FRAME_SEQ_NUM_COUNT_RESET	(DCAM1394_IOC | 8)
190 
191 #define	DCAM1394_RING_BUFF_OFFS		0x1
192 
193 /* for DCAM1394_PARAM_STATUS */
194 
195 #define	DCAM1394_STATUS_FRAME_RCV_DONE			0x1
196 #define	DCAM1394_STATUS_RING_BUFF_LOST_FRAME		0x2
197 #define	DCAM1394_STATUS_PARAM_CHANGE			0x4
198 #define	DCAM1394_STATUS_FRAME_SEQ_NUM_COUNT_OVERFLOW	0x8
199 #define	DCAM1394_STATUS_CAM_UNPLUG			0x10
200 
201 typedef struct dcam1394_param_list_entry_s {
202 	int 		flag;
203 	int 		err;
204 	unsigned int 	val;
205 
206 } dcam1394_param_list_entry_t;
207 
208 typedef dcam1394_param_list_entry_t
209 	dcam1394_param_list_t[DCAM1394_NUM_PARAM][DCAM1394_NUM_SUBPARAM];
210 
211 typedef dcam1394_param_list_entry_t
212 	(*dcam1394_param_list_p_t)[DCAM1394_NUM_PARAM][DCAM1394_NUM_SUBPARAM];
213 
214 typedef struct dcam1394_frame_s {
215 	unsigned int	 vid_mode;
216 	unsigned int	 seq_num;
217 	hrtime_t	 timestamp;
218 	unsigned char	*buff;
219 } dcam1394_frame_t;
220 
221 typedef struct dcam1394_reg_io_s {
222 	unsigned int	offs;
223 	unsigned int 	val;
224 
225 } dcam1394_reg_io_t;
226 
227 #ifdef __cplusplus
228 }
229 #endif
230 
231 #endif	/* _SYS_DCAM_DCAM1394_IO_H */
232