• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2005 Meilhaus Electronic GmbH (support@meilhaus.de)
3  *
4  * Source File : meioctl.h
5  * Author      : GG (Guenter Gebhardt)  <g.gebhardt@meilhaus.de>
6  */
7 
8 #ifndef _MEIOCTL_H_
9 #define _MEIOCTL_H_
10 
11 
12 /*=============================================================================
13   Types for the input/output ioctls
14   ===========================================================================*/
15 
16 typedef struct me_io_irq_start {
17 	int device;
18 	int subdevice;
19 	int channel;
20 	int irq_source;
21 	int irq_edge;
22 	int irq_arg;
23 	int flags;
24 	int errno;
25 } me_io_irq_start_t;
26 
27 
28 typedef struct me_io_irq_wait {
29 	int device;
30 	int subdevice;
31 	int channel;
32 	int irq_count;
33 	int value;
34 	int time_out;
35 	int flags;
36 	int errno;
37 } me_io_irq_wait_t;
38 
39 
40 typedef struct me_io_irq_stop {
41 	int device;
42 	int subdevice;
43 	int channel;
44 	int flags;
45 	int errno;
46 } me_io_irq_stop_t;
47 
48 
49 typedef struct me_io_reset_device {
50 	int device;
51 	int flags;
52 	int errno;
53 } me_io_reset_device_t;
54 
55 
56 typedef struct me_io_reset_subdevice {
57 	int device;
58 	int subdevice;
59 	int flags;
60 	int errno;
61 } me_io_reset_subdevice_t;
62 
63 
64 typedef struct me_io_single_config {
65 	int device;
66 	int subdevice;
67 	int channel;
68 	int single_config;
69 	int ref;
70 	int trig_chan;
71 	int trig_type;
72 	int trig_edge;
73 	int flags;
74 	int errno;
75 } me_io_single_config_t;
76 
77 
78 typedef struct me_io_single {
79 	meIOSingle_t *single_list;
80 	int count;
81 	int flags;
82 	int errno;
83 } me_io_single_t;
84 
85 
86 typedef struct me_io_stream_config {
87 	int device;
88 	int subdevice;
89 	meIOStreamConfig_t *config_list;
90 	int count;
91 	meIOStreamTrigger_t trigger;
92 	int fifo_irq_threshold;
93 	int flags;
94 	int errno;
95 } me_io_stream_config_t;
96 
97 
98 typedef struct me_io_stream_new_values {
99 	int device;
100 	int subdevice;
101 	int time_out;
102 	int count;
103 	int flags;
104 	int errno;
105 } me_io_stream_new_values_t;
106 
107 
108 typedef struct me_io_stream_read {
109 	int device;
110 	int subdevice;
111 	int read_mode;
112 	int *values;
113 	int count;
114 	int flags;
115 	int errno;
116 } me_io_stream_read_t;
117 
118 
119 typedef struct me_io_stream_start {
120 	meIOStreamStart_t *start_list;
121 	int count;
122 	int flags;
123 	int errno;
124 } me_io_stream_start_t;
125 
126 
127 typedef struct me_io_stream_status {
128 	int device;
129 	int subdevice;
130 	int wait;
131 	int status;
132 	int count;
133 	int flags;
134 	int errno;
135 } me_io_stream_status_t;
136 
137 
138 typedef struct me_io_stream_stop {
139 	meIOStreamStop_t *stop_list;
140 	int count;
141 	int flags;
142 	int errno;
143 } me_io_stream_stop_t;
144 
145 
146 typedef struct me_io_stream_write {
147 	int device;
148 	int subdevice;
149 	int write_mode;
150 	int *values;
151 	int count;
152 	int flags;
153 	int errno;
154 } me_io_stream_write_t;
155 
156 
157 /*=============================================================================
158   Types for the lock ioctls
159   ===========================================================================*/
160 
161 typedef struct me_lock_device {
162 	int device;
163 	int lock;
164 	int flags;
165 	int errno;
166 } me_lock_device_t;
167 
168 
169 typedef struct me_lock_driver {
170 	int flags;
171 	int lock;
172 	int errno;
173 } me_lock_driver_t;
174 
175 
176 typedef struct me_lock_subdevice {
177 	int device;
178 	int subdevice;
179 	int lock;
180 	int flags;
181 	int errno;
182 } me_lock_subdevice_t;
183 
184 
185 /*=============================================================================
186   Types for the query ioctls
187   ===========================================================================*/
188 
189 typedef struct me_query_info_device {
190 	int device;
191 	int vendor_id;
192 	int device_id;
193 	int serial_no;
194 	int bus_type;
195 	int bus_no;
196 	int dev_no;
197 	int func_no;
198 	int plugged;
199 	int errno;
200 } me_query_info_device_t;
201 
202 
203 typedef struct me_query_description_device {
204 	int device;
205 	char *name;
206 	int count;
207 	int errno;
208 } me_query_description_device_t;
209 
210 
211 typedef struct me_query_name_device {
212 	int device;
213 	char *name;
214 	int count;
215 	int errno;
216 } me_query_name_device_t;
217 
218 
219 typedef struct me_query_name_device_driver {
220 	int device;
221 	char *name;
222 	int count;
223 	int errno;
224 } me_query_name_device_driver_t;
225 
226 
227 typedef struct me_query_version_main_driver {
228 	int version;
229 	int errno;
230 } me_query_version_main_driver_t;
231 
232 
233 typedef struct me_query_version_device_driver {
234 	int device;
235 	int version;
236 	int errno;
237 } me_query_version_device_driver_t;
238 
239 
240 typedef struct me_query_number_devices {
241 	int number;
242 	int errno;
243 } me_query_number_devices_t;
244 
245 
246 typedef struct me_query_number_subdevices {
247 	int device;
248 	int number;
249 	int errno;
250 } me_query_number_subdevices_t;
251 
252 
253 typedef struct me_query_number_channels {
254 	int device;
255 	int subdevice;
256 	int number;
257 	int errno;
258 } me_query_number_channels_t;
259 
260 
261 typedef struct me_query_number_ranges {
262 	int device;
263 	int subdevice;
264 	int channel;
265 	int unit;
266 	int number;
267 	int errno;
268 } me_query_number_ranges_t;
269 
270 
271 typedef struct me_query_subdevice_by_type {
272 	int device;
273 	int start_subdevice;
274 	int type;
275 	int subtype;
276 	int subdevice;
277 	int errno;
278 } me_query_subdevice_by_type_t;
279 
280 
281 typedef struct me_query_subdevice_type {
282 	int device;
283 	int subdevice;
284 	int type;
285 	int subtype;
286 	int errno;
287 } me_query_subdevice_type_t;
288 
289 
290 typedef struct me_query_subdevice_caps {
291 	int device;
292 	int subdevice;
293 	int caps;
294 	int errno;
295 } me_query_subdevice_caps_t;
296 
297 
298 typedef struct me_query_subdevice_caps_args {
299 	int device;
300 	int subdevice;
301 	int cap;
302 	int args[8];
303 	int count;
304 	int errno;
305 } me_query_subdevice_caps_args_t;
306 
307 
308 typedef struct me_query_timer {
309 	int device;
310 	int subdevice;
311 	int timer;
312 	int base_frequency;
313 	long long min_ticks;
314 	long long max_ticks;
315 	int errno;
316 } me_query_timer_t;
317 
318 
319 typedef struct me_query_range_by_min_max {
320 	int device;
321 	int subdevice;
322 	int channel;
323 	int unit;
324 	int min;
325 	int max;
326 	int max_data;
327 	int range;
328 	int errno;
329 } me_query_range_by_min_max_t;
330 
331 
332 typedef struct me_query_range_info {
333 	int device;
334 	int subdevice;
335 	int channel;
336 	int unit;
337 	int range;
338 	int min;
339 	int max;
340 	int max_data;
341 	int errno;
342 } me_query_range_info_t;
343 
344 
345 /*=============================================================================
346   Types for the configuration ioctls
347   ===========================================================================*/
348 
349 typedef struct me_cfg_tcpip_location {
350 	int access_type;
351 	char *remote_host;
352 	int remote_device_number;
353 } me_cfg_tcpip_location_t;
354 
355 
356 typedef union me_cfg_tcpip {
357 	int access_type;
358 	me_cfg_tcpip_location_t location;
359 } me_cfg_tcpip_t;
360 
361 
362 typedef struct me_cfg_pci_hw_location {
363 	unsigned int bus_type;
364 	unsigned int bus_no;
365 	unsigned int device_no;
366 	unsigned int function_no;
367 } me_cfg_pci_hw_location_t;
368 
369 /*
370 typedef struct me_cfg_usb_hw_location {
371 	unsigned int bus_type;
372 	unsigned int root_hub_no;
373 } me_cfg_usb_hw_location_t;
374 */
375 
376 typedef union me_cfg_hw_location {
377 	unsigned int bus_type;
378 	me_cfg_pci_hw_location_t pci;
379 //	me_cfg_usb_hw_location_t usb;
380 } me_cfg_hw_location_t;
381 
382 
383 typedef struct me_cfg_device_info {
384 	unsigned int vendor_id;
385 	unsigned int device_id;
386 	unsigned int serial_no;
387 	me_cfg_hw_location_t hw_location;
388 } me_cfg_device_info_t;
389 
390 
391 typedef struct me_cfg_subdevice_info {
392 	int type;
393 	int sub_type;
394 	unsigned int number_channels;
395 } me_cfg_subdevice_info_t;
396 
397 
398 typedef struct me_cfg_range_entry {
399 	int unit;
400 	double min;
401 	double max;
402 	unsigned int max_data;
403 } me_cfg_range_entry_t;
404 
405 
406 typedef struct me_cfg_mux32m_device {
407 	int type;
408 	int timed;
409 	unsigned int ai_channel;
410 	unsigned int dio_device;
411 	unsigned int dio_subdevice;
412 	unsigned int timer_device;
413 	unsigned int timer_subdevice;
414 	unsigned int mux32s_count;
415 } me_cfg_mux32m_device_t;
416 
417 
418 typedef struct me_cfg_demux32_device {
419 	int type;
420 	int timed;
421 	unsigned int ao_channel;
422 	unsigned int dio_device;
423 	unsigned int dio_subdevice;
424 	unsigned int timer_device;
425 	unsigned int timer_subdevice;
426 } me_cfg_demux32_device_t;
427 
428 
429 typedef union me_cfg_external_device {
430 	int type;
431 	me_cfg_mux32m_device_t mux32m;
432 	me_cfg_demux32_device_t demux32;
433 } me_cfg_external_device_t;
434 
435 
436 typedef struct me_cfg_subdevice_entry {
437 	me_cfg_subdevice_info_t info;
438 	me_cfg_range_entry_t *range_list;
439 	unsigned int count;
440 	int locked;
441 	me_cfg_external_device_t external_device;
442 } me_cfg_subdevice_entry_t;
443 
444 
445 typedef struct me_cfg_device_entry {
446 	me_cfg_tcpip_t tcpip;
447 	me_cfg_device_info_t info;
448 	me_cfg_subdevice_entry_t *subdevice_list;
449 	unsigned int count;
450 } me_cfg_device_entry_t;
451 
452 
453 typedef struct me_config_load {
454 	me_cfg_device_entry_t *device_list;
455 	unsigned int count;
456 	int errno;
457 } me_config_load_t;
458 
459 
460 /*=============================================================================
461   The ioctls of the board
462   ===========================================================================*/
463 
464 #define MEMAIN_MAGIC 'y'
465 
466 #define ME_IO_IRQ_ENABLE				_IOR (MEMAIN_MAGIC, 1, me_io_irq_start_t)
467 #define ME_IO_IRQ_WAIT					_IOR (MEMAIN_MAGIC, 2, me_io_irq_wait_t)
468 #define ME_IO_IRQ_DISABLE				_IOR (MEMAIN_MAGIC, 3, me_io_irq_stop_t)
469 
470 #define ME_IO_RESET_DEVICE				_IOW (MEMAIN_MAGIC, 4, me_io_reset_device_t)
471 #define ME_IO_RESET_SUBDEVICE			_IOW (MEMAIN_MAGIC, 5, me_io_reset_subdevice_t)
472 
473 #define ME_IO_SINGLE					_IOWR(MEMAIN_MAGIC, 6, me_io_single_t)
474 #define ME_IO_SINGLE_CONFIG				_IOW (MEMAIN_MAGIC, 7, me_io_single_config_t)
475 
476 #define ME_IO_STREAM_CONFIG				_IOW (MEMAIN_MAGIC, 8, me_io_stream_config_t)
477 #define ME_IO_STREAM_NEW_VALUES			_IOR (MEMAIN_MAGIC, 9, me_io_stream_new_values_t)
478 #define ME_IO_STREAM_READ				_IOR (MEMAIN_MAGIC, 10, me_io_stream_read_t)
479 #define ME_IO_STREAM_START				_IOW (MEMAIN_MAGIC, 11, me_io_stream_start_t)
480 #define ME_IO_STREAM_STATUS				_IOR (MEMAIN_MAGIC, 12, me_io_stream_status_t)
481 #define ME_IO_STREAM_STOP				_IOW (MEMAIN_MAGIC, 13, me_io_stream_stop_t)
482 #define ME_IO_STREAM_WRITE				_IOW (MEMAIN_MAGIC, 14, me_io_stream_write_t)
483 
484 #define ME_LOCK_DRIVER					_IOW (MEMAIN_MAGIC, 15, me_lock_driver_t)
485 #define ME_LOCK_DEVICE					_IOW (MEMAIN_MAGIC, 16, me_lock_device_t)
486 #define ME_LOCK_SUBDEVICE				_IOW (MEMAIN_MAGIC, 17, me_lock_subdevice_t)
487 
488 #define ME_QUERY_DESCRIPTION_DEVICE		_IOR (MEMAIN_MAGIC, 18, me_query_description_device_t)
489 
490 #define ME_QUERY_INFO_DEVICE			_IOR (MEMAIN_MAGIC, 19, me_query_info_device_t)
491 
492 #define ME_QUERY_NAME_DEVICE			_IOR (MEMAIN_MAGIC, 20, me_query_name_device_t)
493 #define ME_QUERY_NAME_DEVICE_DRIVER		_IOR (MEMAIN_MAGIC, 21, me_query_name_device_driver_t)
494 
495 #define ME_QUERY_NUMBER_DEVICES			_IOR (MEMAIN_MAGIC, 22, me_query_number_devices_t)
496 #define ME_QUERY_NUMBER_SUBDEVICES		_IOR (MEMAIN_MAGIC, 23, me_query_number_subdevices_t)
497 #define ME_QUERY_NUMBER_CHANNELS		_IOR (MEMAIN_MAGIC, 24, me_query_number_channels_t)
498 #define ME_QUERY_NUMBER_RANGES			_IOR (MEMAIN_MAGIC, 25, me_query_number_ranges_t)
499 
500 #define ME_QUERY_RANGE_BY_MIN_MAX		_IOR (MEMAIN_MAGIC, 26, me_query_range_by_min_max_t)
501 #define ME_QUERY_RANGE_INFO				_IOR (MEMAIN_MAGIC, 27, me_query_range_info_t)
502 
503 #define ME_QUERY_SUBDEVICE_BY_TYPE		_IOR (MEMAIN_MAGIC, 28, me_query_subdevice_by_type_t)
504 #define ME_QUERY_SUBDEVICE_TYPE			_IOR (MEMAIN_MAGIC, 29, me_query_subdevice_type_t)
505 #define ME_QUERY_SUBDEVICE_CAPS			_IOR (MEMAIN_MAGIC, 29, me_query_subdevice_caps_t)
506 #define ME_QUERY_SUBDEVICE_CAPS_ARGS	_IOR (MEMAIN_MAGIC, 30, me_query_subdevice_caps_args_t)
507 
508 #define ME_QUERY_TIMER					_IOR (MEMAIN_MAGIC, 31, me_query_timer_t)
509 
510 #define ME_QUERY_VERSION_DEVICE_DRIVER	_IOR (MEMAIN_MAGIC, 32, me_query_version_device_driver_t)
511 #define ME_QUERY_VERSION_MAIN_DRIVER	_IOR (MEMAIN_MAGIC, 33, me_query_version_main_driver_t)
512 
513 #define ME_CONFIG_LOAD					_IOWR(MEMAIN_MAGIC, 34, me_config_load_t)
514 
515 #endif
516