1 /*
2  * $FreeBSD$
3  */
4 
5 /*
6  * This file defines compatibility versions of several video structures
7  * defined in the Linux videodev2.h header (linux_videodev2.h).  The
8  * structures defined in this file are the ones that have been determined
9  * to have 32- to 64-bit size dependencies.
10  */
11 
12 #ifndef _LINUX_VIDEODEV2_COMPAT_H_
13 #define	_LINUX_VIDEODEV2_COMPAT_H_
14 
15 struct l_v4l2_buffer {
16 	uint32_t		index;
17 	enum v4l2_buf_type	type;
18 	uint32_t		bytesused;
19 	uint32_t		flags;
20 	enum v4l2_field		field;
21 	l_timeval		timestamp;
22 	struct v4l2_timecode	timecode;
23 	uint32_t		sequence;
24 
25 	/* memory location */
26 	enum v4l2_memory	memory;
27 	union {
28 		uint32_t	offset;
29 		l_ulong		userptr;
30 	} m;
31 	uint32_t		length;
32 	uint32_t		input;
33 	uint32_t		reserved;
34 };
35 
36 struct l_v4l2_framebuffer {
37 	uint32_t		capability;
38 	uint32_t		flags;
39 /* FIXME: in theory we should pass something like PCI device + memory
40  * region + offset instead of some physical address */
41 	l_uintptr_t		base;
42 	struct v4l2_pix_format	fmt;
43 };
44 
45 struct l_v4l2_clip {
46 	struct v4l2_rect	c;
47 	l_uintptr_t		next;
48 };
49 
50 struct l_v4l2_window {
51 	struct v4l2_rect	w;
52 	enum v4l2_field		field;
53 	uint32_t		chromakey;
54 	l_uintptr_t		clips;
55 	uint32_t		clipcount;
56 	l_uintptr_t		bitmap;
57 	uint8_t			global_alpha;
58 };
59 
60 struct l_v4l2_standard {
61 	uint32_t		index;
62 	v4l2_std_id		id;
63 	uint8_t			name[24];
64 	struct v4l2_fract	frameperiod; /* Frames, not fields */
65 	uint32_t		framelines;
66 	uint32_t		reserved[4];
67 }
68 #ifdef COMPAT_LINUX32 /* 32bit linuxolator */
69 __attribute__ ((packed))
70 #endif
71 ;
72 
73 struct l_v4l2_ext_control {
74 	uint32_t id;
75 	uint32_t size;
76 	uint32_t reserved2[1];
77 	union {
78 		int32_t value;
79 		int64_t value64;
80 		l_uintptr_t string;
81 	} u;
82 } __attribute__ ((packed));
83 
84 struct l_v4l2_ext_controls {
85 	uint32_t ctrl_class;
86 	uint32_t count;
87 	uint32_t error_idx;
88 	uint32_t reserved[2];
89 	l_uintptr_t controls;
90 };
91 
92 struct l_v4l2_format {
93 	enum v4l2_buf_type type;
94 	union {
95 		struct v4l2_pix_format		pix;     /* V4L2_BUF_TYPE_VIDEO_CAPTURE */
96 		struct l_v4l2_window		win;     /* V4L2_BUF_TYPE_VIDEO_OVERLAY */
97 		struct v4l2_vbi_format		vbi;     /* V4L2_BUF_TYPE_VBI_CAPTURE */
98 		struct v4l2_sliced_vbi_format	sliced;  /* V4L2_BUF_TYPE_SLICED_VBI_CAPTURE */
99 		uint8_t	raw_data[200];                   /* user-defined */
100 	} fmt;
101 }
102 #ifdef COMPAT_LINUX32 /* 32bit linuxolator */
103 __attribute__ ((packed))
104 #endif
105 ;
106 
107 #ifdef VIDIOC_DQEVENT
108 struct l_v4l2_event {
109 	uint32_t				type;
110 	union {
111 		struct v4l2_event_vsync vsync;
112 		uint8_t			data[64];
113 	} u;
114 	uint32_t				pending;
115 	uint32_t				sequence;
116 	struct l_timespec			timestamp;
117 	uint32_t				reserved[9];
118 };
119 #endif
120 
121 struct l_v4l2_input {
122 	uint32_t	     index;		/*  Which input */
123 	uint8_t		     name[32];		/*  Label */
124 	uint32_t	     type;		/*  Type of input */
125 	uint32_t	     audioset;		/*  Associated audios (bitfield) */
126 	uint32_t	     tuner;             /*  Associated tuner */
127 	v4l2_std_id  std;
128 	uint32_t	     status;
129 	uint32_t	     capabilities;
130 	uint32_t	     reserved[3];
131 }
132 #ifdef COMPAT_LINUX32 /* 32bit linuxolator */
133 __attribute__ ((packed))
134 #endif
135 ;
136 
137 #endif /* _LINUX_VIDEODEV2_COMPAT_H_ */
138