/* * Copyright (C) 2005 Meilhaus Electronic GmbH (support@meilhaus.de) * * Source File : meioctl.h * Author : GG (Guenter Gebhardt) */ #ifndef _MEIOCTL_H_ #define _MEIOCTL_H_ /*============================================================================= Types for the input/output ioctls ===========================================================================*/ typedef struct me_io_irq_start { int device; int subdevice; int channel; int irq_source; int irq_edge; int irq_arg; int flags; int errno; } me_io_irq_start_t; typedef struct me_io_irq_wait { int device; int subdevice; int channel; int irq_count; int value; int time_out; int flags; int errno; } me_io_irq_wait_t; typedef struct me_io_irq_stop { int device; int subdevice; int channel; int flags; int errno; } me_io_irq_stop_t; typedef struct me_io_reset_device { int device; int flags; int errno; } me_io_reset_device_t; typedef struct me_io_reset_subdevice { int device; int subdevice; int flags; int errno; } me_io_reset_subdevice_t; typedef struct me_io_single_config { int device; int subdevice; int channel; int single_config; int ref; int trig_chan; int trig_type; int trig_edge; int flags; int errno; } me_io_single_config_t; typedef struct me_io_single { meIOSingle_t *single_list; int count; int flags; int errno; } me_io_single_t; typedef struct me_io_stream_config { int device; int subdevice; meIOStreamConfig_t *config_list; int count; meIOStreamTrigger_t trigger; int fifo_irq_threshold; int flags; int errno; } me_io_stream_config_t; typedef struct me_io_stream_new_values { int device; int subdevice; int time_out; int count; int flags; int errno; } me_io_stream_new_values_t; typedef struct me_io_stream_read { int device; int subdevice; int read_mode; int *values; int count; int flags; int errno; } me_io_stream_read_t; typedef struct me_io_stream_start { meIOStreamStart_t *start_list; int count; int flags; int errno; } me_io_stream_start_t; typedef struct me_io_stream_status { int device; int subdevice; int wait; int status; int count; int flags; int errno; } me_io_stream_status_t; typedef struct me_io_stream_stop { meIOStreamStop_t *stop_list; int count; int flags; int errno; } me_io_stream_stop_t; typedef struct me_io_stream_write { int device; int subdevice; int write_mode; int *values; int count; int flags; int errno; } me_io_stream_write_t; /*============================================================================= Types for the lock ioctls ===========================================================================*/ typedef struct me_lock_device { int device; int lock; int flags; int errno; } me_lock_device_t; typedef struct me_lock_driver { int flags; int lock; int errno; } me_lock_driver_t; typedef struct me_lock_subdevice { int device; int subdevice; int lock; int flags; int errno; } me_lock_subdevice_t; /*============================================================================= Types for the query ioctls ===========================================================================*/ typedef struct me_query_info_device { int device; int vendor_id; int device_id; int serial_no; int bus_type; int bus_no; int dev_no; int func_no; int plugged; int errno; } me_query_info_device_t; typedef struct me_query_description_device { int device; char *name; int count; int errno; } me_query_description_device_t; typedef struct me_query_name_device { int device; char *name; int count; int errno; } me_query_name_device_t; typedef struct me_query_name_device_driver { int device; char *name; int count; int errno; } me_query_name_device_driver_t; typedef struct me_query_version_main_driver { int version; int errno; } me_query_version_main_driver_t; typedef struct me_query_version_device_driver { int device; int version; int errno; } me_query_version_device_driver_t; typedef struct me_query_number_devices { int number; int errno; } me_query_number_devices_t; typedef struct me_query_number_subdevices { int device; int number; int errno; } me_query_number_subdevices_t; typedef struct me_query_number_channels { int device; int subdevice; int number; int errno; } me_query_number_channels_t; typedef struct me_query_number_ranges { int device; int subdevice; int channel; int unit; int number; int errno; } me_query_number_ranges_t; typedef struct me_query_subdevice_by_type { int device; int start_subdevice; int type; int subtype; int subdevice; int errno; } me_query_subdevice_by_type_t; typedef struct me_query_subdevice_type { int device; int subdevice; int type; int subtype; int errno; } me_query_subdevice_type_t; typedef struct me_query_subdevice_caps { int device; int subdevice; int caps; int errno; } me_query_subdevice_caps_t; typedef struct me_query_subdevice_caps_args { int device; int subdevice; int cap; int args[8]; int count; int errno; } me_query_subdevice_caps_args_t; typedef struct me_query_timer { int device; int subdevice; int timer; int base_frequency; long long min_ticks; long long max_ticks; int errno; } me_query_timer_t; typedef struct me_query_range_by_min_max { int device; int subdevice; int channel; int unit; int min; int max; int max_data; int range; int errno; } me_query_range_by_min_max_t; typedef struct me_query_range_info { int device; int subdevice; int channel; int unit; int range; int min; int max; int max_data; int errno; } me_query_range_info_t; /*============================================================================= Types for the configuration ioctls ===========================================================================*/ typedef struct me_cfg_tcpip_location { int access_type; char *remote_host; int remote_device_number; } me_cfg_tcpip_location_t; typedef union me_cfg_tcpip { int access_type; me_cfg_tcpip_location_t location; } me_cfg_tcpip_t; typedef struct me_cfg_pci_hw_location { unsigned int bus_type; unsigned int bus_no; unsigned int device_no; unsigned int function_no; } me_cfg_pci_hw_location_t; /* typedef struct me_cfg_usb_hw_location { unsigned int bus_type; unsigned int root_hub_no; } me_cfg_usb_hw_location_t; */ typedef union me_cfg_hw_location { unsigned int bus_type; me_cfg_pci_hw_location_t pci; // me_cfg_usb_hw_location_t usb; } me_cfg_hw_location_t; typedef struct me_cfg_device_info { unsigned int vendor_id; unsigned int device_id; unsigned int serial_no; me_cfg_hw_location_t hw_location; } me_cfg_device_info_t; typedef struct me_cfg_subdevice_info { int type; int sub_type; unsigned int number_channels; } me_cfg_subdevice_info_t; typedef struct me_cfg_range_entry { int unit; double min; double max; unsigned int max_data; } me_cfg_range_entry_t; typedef struct me_cfg_mux32m_device { int type; int timed; unsigned int ai_channel; unsigned int dio_device; unsigned int dio_subdevice; unsigned int timer_device; unsigned int timer_subdevice; unsigned int mux32s_count; } me_cfg_mux32m_device_t; typedef struct me_cfg_demux32_device { int type; int timed; unsigned int ao_channel; unsigned int dio_device; unsigned int dio_subdevice; unsigned int timer_device; unsigned int timer_subdevice; } me_cfg_demux32_device_t; typedef union me_cfg_external_device { int type; me_cfg_mux32m_device_t mux32m; me_cfg_demux32_device_t demux32; } me_cfg_external_device_t; typedef struct me_cfg_subdevice_entry { me_cfg_subdevice_info_t info; me_cfg_range_entry_t *range_list; unsigned int count; int locked; me_cfg_external_device_t external_device; } me_cfg_subdevice_entry_t; typedef struct me_cfg_device_entry { me_cfg_tcpip_t tcpip; me_cfg_device_info_t info; me_cfg_subdevice_entry_t *subdevice_list; unsigned int count; } me_cfg_device_entry_t; typedef struct me_config_load { me_cfg_device_entry_t *device_list; unsigned int count; int errno; } me_config_load_t; /*============================================================================= The ioctls of the board ===========================================================================*/ #define MEMAIN_MAGIC 'y' #define ME_IO_IRQ_ENABLE _IOR (MEMAIN_MAGIC, 1, me_io_irq_start_t) #define ME_IO_IRQ_WAIT _IOR (MEMAIN_MAGIC, 2, me_io_irq_wait_t) #define ME_IO_IRQ_DISABLE _IOR (MEMAIN_MAGIC, 3, me_io_irq_stop_t) #define ME_IO_RESET_DEVICE _IOW (MEMAIN_MAGIC, 4, me_io_reset_device_t) #define ME_IO_RESET_SUBDEVICE _IOW (MEMAIN_MAGIC, 5, me_io_reset_subdevice_t) #define ME_IO_SINGLE _IOWR(MEMAIN_MAGIC, 6, me_io_single_t) #define ME_IO_SINGLE_CONFIG _IOW (MEMAIN_MAGIC, 7, me_io_single_config_t) #define ME_IO_STREAM_CONFIG _IOW (MEMAIN_MAGIC, 8, me_io_stream_config_t) #define ME_IO_STREAM_NEW_VALUES _IOR (MEMAIN_MAGIC, 9, me_io_stream_new_values_t) #define ME_IO_STREAM_READ _IOR (MEMAIN_MAGIC, 10, me_io_stream_read_t) #define ME_IO_STREAM_START _IOW (MEMAIN_MAGIC, 11, me_io_stream_start_t) #define ME_IO_STREAM_STATUS _IOR (MEMAIN_MAGIC, 12, me_io_stream_status_t) #define ME_IO_STREAM_STOP _IOW (MEMAIN_MAGIC, 13, me_io_stream_stop_t) #define ME_IO_STREAM_WRITE _IOW (MEMAIN_MAGIC, 14, me_io_stream_write_t) #define ME_LOCK_DRIVER _IOW (MEMAIN_MAGIC, 15, me_lock_driver_t) #define ME_LOCK_DEVICE _IOW (MEMAIN_MAGIC, 16, me_lock_device_t) #define ME_LOCK_SUBDEVICE _IOW (MEMAIN_MAGIC, 17, me_lock_subdevice_t) #define ME_QUERY_DESCRIPTION_DEVICE _IOR (MEMAIN_MAGIC, 18, me_query_description_device_t) #define ME_QUERY_INFO_DEVICE _IOR (MEMAIN_MAGIC, 19, me_query_info_device_t) #define ME_QUERY_NAME_DEVICE _IOR (MEMAIN_MAGIC, 20, me_query_name_device_t) #define ME_QUERY_NAME_DEVICE_DRIVER _IOR (MEMAIN_MAGIC, 21, me_query_name_device_driver_t) #define ME_QUERY_NUMBER_DEVICES _IOR (MEMAIN_MAGIC, 22, me_query_number_devices_t) #define ME_QUERY_NUMBER_SUBDEVICES _IOR (MEMAIN_MAGIC, 23, me_query_number_subdevices_t) #define ME_QUERY_NUMBER_CHANNELS _IOR (MEMAIN_MAGIC, 24, me_query_number_channels_t) #define ME_QUERY_NUMBER_RANGES _IOR (MEMAIN_MAGIC, 25, me_query_number_ranges_t) #define ME_QUERY_RANGE_BY_MIN_MAX _IOR (MEMAIN_MAGIC, 26, me_query_range_by_min_max_t) #define ME_QUERY_RANGE_INFO _IOR (MEMAIN_MAGIC, 27, me_query_range_info_t) #define ME_QUERY_SUBDEVICE_BY_TYPE _IOR (MEMAIN_MAGIC, 28, me_query_subdevice_by_type_t) #define ME_QUERY_SUBDEVICE_TYPE _IOR (MEMAIN_MAGIC, 29, me_query_subdevice_type_t) #define ME_QUERY_SUBDEVICE_CAPS _IOR (MEMAIN_MAGIC, 29, me_query_subdevice_caps_t) #define ME_QUERY_SUBDEVICE_CAPS_ARGS _IOR (MEMAIN_MAGIC, 30, me_query_subdevice_caps_args_t) #define ME_QUERY_TIMER _IOR (MEMAIN_MAGIC, 31, me_query_timer_t) #define ME_QUERY_VERSION_DEVICE_DRIVER _IOR (MEMAIN_MAGIC, 32, me_query_version_device_driver_t) #define ME_QUERY_VERSION_MAIN_DRIVER _IOR (MEMAIN_MAGIC, 33, me_query_version_main_driver_t) #define ME_CONFIG_LOAD _IOWR(MEMAIN_MAGIC, 34, me_config_load_t) #endif