37 #ifndef __EC_IOCTL_H__
38 #define __EC_IOCTL_H__
40 #include <linux/ioctl.h>
48 #define EC_IOCTL_TYPE 0xa4
50 #define EC_IO(nr) _IO(EC_IOCTL_TYPE, nr)
51 #define EC_IOR(nr, type) _IOR(EC_IOCTL_TYPE, nr, type)
52 #define EC_IOW(nr, type) _IOW(EC_IOCTL_TYPE, nr, type)
53 #define EC_IOWR(nr, type) _IOWR(EC_IOCTL_TYPE, nr, type)
59 #define EC_IOCTL_VERSION_MAGIC 28
62 #define EC_IOCTL_MODULE EC_IOR(0x00, ec_ioctl_module_t)
63 #define EC_IOCTL_MASTER EC_IOR(0x01, ec_ioctl_master_t)
64 #define EC_IOCTL_SLAVE EC_IOWR(0x02, ec_ioctl_slave_t)
65 #define EC_IOCTL_SLAVE_SYNC EC_IOWR(0x03, ec_ioctl_slave_sync_t)
66 #define EC_IOCTL_SLAVE_SYNC_PDO EC_IOWR(0x04, ec_ioctl_slave_sync_pdo_t)
67 #define EC_IOCTL_SLAVE_SYNC_PDO_ENTRY EC_IOWR(0x05, ec_ioctl_slave_sync_pdo_entry_t)
68 #define EC_IOCTL_DOMAIN EC_IOWR(0x06, ec_ioctl_domain_t)
69 #define EC_IOCTL_DOMAIN_FMMU EC_IOWR(0x07, ec_ioctl_domain_fmmu_t)
70 #define EC_IOCTL_DOMAIN_DATA EC_IOWR(0x08, ec_ioctl_domain_data_t)
71 #define EC_IOCTL_MASTER_DEBUG EC_IO(0x09)
72 #define EC_IOCTL_MASTER_RESCAN EC_IO(0x0a)
73 #define EC_IOCTL_SLAVE_STATE EC_IOW(0x0b, ec_ioctl_slave_state_t)
74 #define EC_IOCTL_SLAVE_SDO EC_IOWR(0x0c, ec_ioctl_slave_sdo_t)
75 #define EC_IOCTL_SLAVE_SDO_ENTRY EC_IOWR(0x0d, ec_ioctl_slave_sdo_entry_t)
76 #define EC_IOCTL_SLAVE_SDO_UPLOAD EC_IOWR(0x0e, ec_ioctl_slave_sdo_upload_t)
77 #define EC_IOCTL_SLAVE_SDO_DOWNLOAD EC_IOWR(0x0f, ec_ioctl_slave_sdo_download_t)
78 #define EC_IOCTL_SLAVE_SII_READ EC_IOWR(0x10, ec_ioctl_slave_sii_t)
79 #define EC_IOCTL_SLAVE_SII_WRITE EC_IOW(0x11, ec_ioctl_slave_sii_t)
80 #define EC_IOCTL_SLAVE_REG_READ EC_IOWR(0x12, ec_ioctl_slave_reg_t)
81 #define EC_IOCTL_SLAVE_REG_WRITE EC_IOW(0x13, ec_ioctl_slave_reg_t)
82 #define EC_IOCTL_SLAVE_FOE_READ EC_IOWR(0x14, ec_ioctl_slave_foe_t)
83 #define EC_IOCTL_SLAVE_FOE_WRITE EC_IOW(0x15, ec_ioctl_slave_foe_t)
84 #define EC_IOCTL_SLAVE_SOE_READ EC_IOWR(0x16, ec_ioctl_slave_soe_read_t)
85 #define EC_IOCTL_SLAVE_SOE_WRITE EC_IOWR(0x17, ec_ioctl_slave_soe_write_t)
86 #define EC_IOCTL_CONFIG EC_IOWR(0x18, ec_ioctl_config_t)
87 #define EC_IOCTL_CONFIG_PDO EC_IOWR(0x19, ec_ioctl_config_pdo_t)
88 #define EC_IOCTL_CONFIG_PDO_ENTRY EC_IOWR(0x1a, ec_ioctl_config_pdo_entry_t)
89 #define EC_IOCTL_CONFIG_SDO EC_IOWR(0x1b, ec_ioctl_config_sdo_t)
90 #define EC_IOCTL_CONFIG_IDN EC_IOWR(0x1c, ec_ioctl_config_idn_t)
92 #define EC_IOCTL_EOE_HANDLER EC_IOWR(0x1d, ec_ioctl_eoe_handler_t)
96 #define EC_IOCTL_REQUEST EC_IO(0x1e)
97 #define EC_IOCTL_CREATE_DOMAIN EC_IO(0x1f)
98 #define EC_IOCTL_CREATE_SLAVE_CONFIG EC_IOWR(0x20, ec_ioctl_config_t)
99 #define EC_IOCTL_SELECT_REF_CLOCK EC_IOW(0x21, uint32_t)
100 #define EC_IOCTL_ACTIVATE EC_IOR(0x22, ec_ioctl_master_activate_t)
101 #define EC_IOCTL_DEACTIVATE EC_IO(0x23)
102 #define EC_IOCTL_SEND EC_IO(0x24)
103 #define EC_IOCTL_RECEIVE EC_IO(0x25)
104 #define EC_IOCTL_MASTER_STATE EC_IOR(0x26, ec_master_state_t)
105 #define EC_IOCTL_MASTER_LINK_STATE EC_IOWR(0x27, ec_ioctl_link_state_t)
106 #define EC_IOCTL_APP_TIME EC_IOW(0x28, ec_ioctl_app_time_t)
107 #define EC_IOCTL_SYNC_REF EC_IO(0x29)
108 #define EC_IOCTL_SYNC_SLAVES EC_IO(0x2a)
109 #define EC_IOCTL_REF_CLOCK_TIME EC_IOR(0x2b, uint32_t)
110 #define EC_IOCTL_SYNC_MON_QUEUE EC_IO(0x2c)
111 #define EC_IOCTL_SYNC_MON_PROCESS EC_IOR(0x2d, uint32_t)
112 #define EC_IOCTL_RESET EC_IO(0x2e)
113 #define EC_IOCTL_SC_SYNC EC_IOW(0x2f, ec_ioctl_config_t)
114 #define EC_IOCTL_SC_WATCHDOG EC_IOW(0x30, ec_ioctl_config_t)
115 #define EC_IOCTL_SC_ADD_PDO EC_IOW(0x31, ec_ioctl_config_pdo_t)
116 #define EC_IOCTL_SC_CLEAR_PDOS EC_IOW(0x32, ec_ioctl_config_pdo_t)
117 #define EC_IOCTL_SC_ADD_ENTRY EC_IOW(0x33, ec_ioctl_add_pdo_entry_t)
118 #define EC_IOCTL_SC_CLEAR_ENTRIES EC_IOW(0x34, ec_ioctl_config_pdo_t)
119 #define EC_IOCTL_SC_REG_PDO_ENTRY EC_IOWR(0x35, ec_ioctl_reg_pdo_entry_t)
120 #define EC_IOCTL_SC_REG_PDO_POS EC_IOWR(0x36, ec_ioctl_reg_pdo_pos_t)
121 #define EC_IOCTL_SC_DC EC_IOW(0x37, ec_ioctl_config_t)
122 #define EC_IOCTL_SC_SDO EC_IOW(0x38, ec_ioctl_sc_sdo_t)
123 #define EC_IOCTL_SC_EMERG_SIZE EC_IOW(0x39, ec_ioctl_sc_emerg_t)
124 #define EC_IOCTL_SC_EMERG_POP EC_IOWR(0x3a, ec_ioctl_sc_emerg_t)
125 #define EC_IOCTL_SC_EMERG_CLEAR EC_IOW(0x3b, ec_ioctl_sc_emerg_t)
126 #define EC_IOCTL_SC_EMERG_OVERRUNS EC_IOWR(0x3c, ec_ioctl_sc_emerg_t)
127 #define EC_IOCTL_SC_SDO_REQUEST EC_IOWR(0x3d, ec_ioctl_sdo_request_t)
128 #define EC_IOCTL_SC_REG_REQUEST EC_IOWR(0x3e, ec_ioctl_reg_request_t)
129 #define EC_IOCTL_SC_VOE EC_IOWR(0x3f, ec_ioctl_voe_t)
130 #define EC_IOCTL_SC_STATE EC_IOWR(0x40, ec_ioctl_sc_state_t)
131 #define EC_IOCTL_SC_IDN EC_IOW(0x41, ec_ioctl_sc_idn_t)
132 #define EC_IOCTL_DOMAIN_SIZE EC_IO(0x42)
133 #define EC_IOCTL_DOMAIN_OFFSET EC_IO(0x43)
134 #define EC_IOCTL_DOMAIN_PROCESS EC_IO(0x44)
135 #define EC_IOCTL_DOMAIN_QUEUE EC_IO(0x45)
136 #define EC_IOCTL_DOMAIN_STATE EC_IOWR(0x46, ec_ioctl_domain_state_t)
137 #define EC_IOCTL_SDO_REQUEST_INDEX EC_IOWR(0x47, ec_ioctl_sdo_request_t)
138 #define EC_IOCTL_SDO_REQUEST_TIMEOUT EC_IOWR(0x48, ec_ioctl_sdo_request_t)
139 #define EC_IOCTL_SDO_REQUEST_STATE EC_IOWR(0x49, ec_ioctl_sdo_request_t)
140 #define EC_IOCTL_SDO_REQUEST_READ EC_IOWR(0x4a, ec_ioctl_sdo_request_t)
141 #define EC_IOCTL_SDO_REQUEST_WRITE EC_IOWR(0x4b, ec_ioctl_sdo_request_t)
142 #define EC_IOCTL_SDO_REQUEST_DATA EC_IOWR(0x4c, ec_ioctl_sdo_request_t)
143 #define EC_IOCTL_REG_REQUEST_DATA EC_IOWR(0x4d, ec_ioctl_reg_request_t)
144 #define EC_IOCTL_REG_REQUEST_STATE EC_IOWR(0x4e, ec_ioctl_reg_request_t)
145 #define EC_IOCTL_REG_REQUEST_WRITE EC_IOWR(0x4f, ec_ioctl_reg_request_t)
146 #define EC_IOCTL_REG_REQUEST_READ EC_IOWR(0x50, ec_ioctl_reg_request_t)
147 #define EC_IOCTL_VOE_SEND_HEADER EC_IOW(0x51, ec_ioctl_voe_t)
148 #define EC_IOCTL_VOE_REC_HEADER EC_IOWR(0x52, ec_ioctl_voe_t)
149 #define EC_IOCTL_VOE_READ EC_IOW(0x53, ec_ioctl_voe_t)
150 #define EC_IOCTL_VOE_READ_NOSYNC EC_IOW(0x54, ec_ioctl_voe_t)
151 #define EC_IOCTL_VOE_WRITE EC_IOWR(0x55, ec_ioctl_voe_t)
152 #define EC_IOCTL_VOE_EXEC EC_IOWR(0x56, ec_ioctl_voe_t)
153 #define EC_IOCTL_VOE_DATA EC_IOWR(0x57, ec_ioctl_voe_t)
154 #define EC_IOCTL_SET_SEND_INTERVAL EC_IOW(0x58, size_t)
158 #define EC_IOCTL_STRING_SIZE 64
163 uint32_t ioctl_version_magic;
170 uint32_t slave_count;
171 uint32_t config_count;
172 uint32_t domain_count;
174 uint32_t eoe_handler_count;
179 struct ec_ioctl_device {
192 } devices[EC_MAX_NUM_DEVICES];
193 uint32_t num_devices;
214 unsigned int device_index;
216 uint32_t product_code;
217 uint32_t revision_number;
218 uint32_t serial_number;
220 uint16_t boot_rx_mailbox_offset;
221 uint16_t boot_rx_mailbox_size;
222 uint16_t boot_tx_mailbox_offset;
223 uint16_t boot_tx_mailbox_size;
224 uint16_t std_rx_mailbox_offset;
225 uint16_t std_rx_mailbox_size;
226 uint16_t std_tx_mailbox_offset;
227 uint16_t std_tx_mailbox_size;
228 uint16_t mailbox_protocols;
229 uint8_t has_general_category;
232 int16_t current_on_ebus;
236 uint32_t receive_time;
238 uint32_t delay_to_next_dc;
241 uint8_t dc_supported;
243 uint8_t has_dc_system_time;
244 uint32_t transmission_delay;
250 char group[EC_IOCTL_STRING_SIZE];
251 char image[EC_IOCTL_STRING_SIZE];
252 char order[EC_IOCTL_STRING_SIZE];
253 char name[EC_IOCTL_STRING_SIZE];
260 uint16_t slave_position;
264 uint16_t physical_start_address;
265 uint16_t default_size;
266 uint8_t control_register;
269 } ec_ioctl_slave_sync_t;
275 uint16_t slave_position;
282 int8_t name[EC_IOCTL_STRING_SIZE];
283 } ec_ioctl_slave_sync_pdo_t;
289 uint16_t slave_position;
298 int8_t name[EC_IOCTL_STRING_SIZE];
299 } ec_ioctl_slave_sync_pdo_entry_t;
309 uint32_t logical_base_address;
310 uint16_t working_counter[EC_MAX_NUM_DEVICES];
311 uint16_t expected_working_counter;
319 uint32_t domain_index;
323 uint16_t slave_config_alias;
324 uint16_t slave_config_position;
327 uint32_t logical_address;
329 } ec_ioctl_domain_fmmu_t;
335 uint32_t domain_index;
338 } ec_ioctl_domain_data_t;
344 uint16_t slave_position;
346 } ec_ioctl_slave_state_t;
352 uint16_t slave_position;
353 uint16_t sdo_position;
357 uint8_t max_subindex;
358 int8_t name[EC_IOCTL_STRING_SIZE];
359 } ec_ioctl_slave_sdo_t;
365 uint16_t slave_position;
367 uint8_t sdo_entry_subindex;
374 int8_t description[EC_IOCTL_STRING_SIZE];
375 } ec_ioctl_slave_sdo_entry_t;
381 uint16_t slave_position;
383 uint8_t sdo_entry_subindex;
390 } ec_ioctl_slave_sdo_upload_t;
396 uint16_t slave_position;
398 uint8_t sdo_entry_subindex;
399 uint8_t complete_access;
405 } ec_ioctl_slave_sdo_download_t;
411 uint16_t slave_position;
415 } ec_ioctl_slave_sii_t;
421 uint16_t slave_position;
426 } ec_ioctl_slave_reg_t;
432 uint16_t slave_position;
442 } ec_ioctl_slave_foe_t;
448 uint16_t slave_position;
457 } ec_ioctl_slave_soe_read_t;
463 uint16_t slave_position;
471 } ec_ioctl_slave_soe_write_t;
477 uint32_t config_index;
483 uint32_t product_code;
490 uint16_t watchdog_divider;
491 uint16_t watchdog_intervals;
494 int32_t slave_position;
495 uint16_t dc_assign_activate;
503 uint32_t config_index;
510 int8_t name[EC_IOCTL_STRING_SIZE];
511 } ec_ioctl_config_pdo_t;
517 uint32_t config_index;
526 int8_t name[EC_IOCTL_STRING_SIZE];
527 } ec_ioctl_config_pdo_entry_t;
534 #define EC_MAX_SDO_DATA_SIZE 1024
538 uint32_t config_index;
545 uint8_t data[EC_MAX_SDO_DATA_SIZE];
546 uint8_t complete_access;
547 } ec_ioctl_config_sdo_t;
554 #define EC_MAX_IDN_DATA_SIZE 1024
558 uint32_t config_index;
566 uint8_t data[EC_MAX_IDN_DATA_SIZE];
567 } ec_ioctl_config_idn_t;
579 uint16_t slave_position;
585 uint32_t tx_queued_frames;
586 uint32_t tx_queue_size;
587 } ec_ioctl_eoe_handler_t;
596 size_t process_data_size;
597 } ec_ioctl_master_activate_t;
603 uint32_t config_index;
605 uint16_t entry_index;
606 uint8_t entry_subindex;
607 uint8_t entry_bit_length;
608 } ec_ioctl_add_pdo_entry_t;
614 uint32_t config_index;
615 uint16_t entry_index;
616 uint8_t entry_subindex;
617 uint32_t domain_index;
620 unsigned int bit_position;
621 } ec_ioctl_reg_pdo_entry_t;
627 uint32_t config_index;
631 uint32_t domain_index;
634 unsigned int bit_position;
635 } ec_ioctl_reg_pdo_pos_t;
641 uint32_t config_index;
646 uint8_t complete_access;
653 uint32_t config_index;
659 } ec_ioctl_sc_emerg_t;
665 uint32_t config_index;
669 } ec_ioctl_sc_state_t;
675 uint32_t config_index;
687 uint32_t domain_index;
691 } ec_ioctl_domain_state_t;
697 uint32_t config_index;
700 uint32_t request_index;
702 uint8_t sdo_subindex;
707 } ec_ioctl_sdo_request_t;
713 uint32_t config_index;
717 uint32_t request_index;
722 size_t transfer_size;
723 } ec_ioctl_reg_request_t;
729 uint32_t config_index;
734 uint16_t *vendor_type;
748 } ec_ioctl_link_state_t;
755 } ec_ioctl_app_time_t;
764 unsigned int writable;
765 unsigned int requested;
766 uint8_t *process_data;
767 size_t process_data_size;
768 } ec_ioctl_context_t;
770 long ec_ioctl(
ec_master_t *, ec_ioctl_context_t *,
unsigned int,
775 long ec_ioctl_rtdm(
ec_master_t *, ec_ioctl_context_t *,
unsigned int,
Slave information interface general flags.
#define EC_DATAGRAM_NAME_SIZE
Size of the datagram description string.
ec_watchdog_mode_t
Watchdog mode for sync manager configuration.
ec_slave_port_desc_t
EtherCAT slave port descriptor.
ec_al_state_t
Application-layer state.
#define EC_RATE_COUNT
Number of statistic rate intervals to maintain.
EtherCAT slave port information.
Global definitions and macros.
Slave configuration state.
Slave information interface CANopen over EtherCAT details flags.
static unsigned int master_count
Number of masters.
ec_direction_t
Direction type for PDO assignment functions.
ec_slave_dc_range_t
EtherCAT slave distributed clocks range.
int ec_rtdm_mmap(ec_ioctl_context_t *ioctl_ctx, void **user_address)
Memory-map process data to user space.
#define EC_MAX_PORTS
Maximum number of slave ports.
EtherCAT slave sync signal configuration.
ec_request_state_t
Request state.
#define EC_MAX_SYNC_MANAGERS
Maximum number of sync managers per slave.
#define EC_SYNC_SIGNAL_COUNT
Number of DC sync signals.