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