28 #ifndef __EC_IOCTL_H__
29 #define __EC_IOCTL_H__
31 #include <linux/ioctl.h>
39 #define EC_IOCTL_TYPE 0xa4
41 #define EC_IO(nr) _IO(EC_IOCTL_TYPE, nr)
42 #define EC_IOR(nr, type) _IOR(EC_IOCTL_TYPE, nr, type)
43 #define EC_IOW(nr, type) _IOW(EC_IOCTL_TYPE, nr, type)
44 #define EC_IOWR(nr, type) _IOWR(EC_IOCTL_TYPE, nr, type)
50 #define EC_IOCTL_VERSION_MAGIC 32
53 #define EC_IOCTL_MODULE EC_IOR(0x00, ec_ioctl_module_t)
54 #define EC_IOCTL_MASTER EC_IOR(0x01, ec_ioctl_master_t)
55 #define EC_IOCTL_SLAVE EC_IOWR(0x02, ec_ioctl_slave_t)
56 #define EC_IOCTL_SLAVE_SYNC EC_IOWR(0x03, ec_ioctl_slave_sync_t)
57 #define EC_IOCTL_SLAVE_SYNC_PDO EC_IOWR(0x04, ec_ioctl_slave_sync_pdo_t)
58 #define EC_IOCTL_SLAVE_SYNC_PDO_ENTRY EC_IOWR(0x05, ec_ioctl_slave_sync_pdo_entry_t)
59 #define EC_IOCTL_DOMAIN EC_IOWR(0x06, ec_ioctl_domain_t)
60 #define EC_IOCTL_DOMAIN_FMMU EC_IOWR(0x07, ec_ioctl_domain_fmmu_t)
61 #define EC_IOCTL_DOMAIN_DATA EC_IOWR(0x08, ec_ioctl_domain_data_t)
62 #define EC_IOCTL_MASTER_DEBUG EC_IO(0x09)
63 #define EC_IOCTL_MASTER_RESCAN EC_IO(0x0a)
64 #define EC_IOCTL_SLAVE_STATE EC_IOW(0x0b, ec_ioctl_slave_state_t)
65 #define EC_IOCTL_SLAVE_SDO EC_IOWR(0x0c, ec_ioctl_slave_sdo_t)
66 #define EC_IOCTL_SLAVE_SDO_ENTRY EC_IOWR(0x0d, ec_ioctl_slave_sdo_entry_t)
67 #define EC_IOCTL_SLAVE_SDO_UPLOAD EC_IOWR(0x0e, ec_ioctl_slave_sdo_upload_t)
68 #define EC_IOCTL_SLAVE_SDO_DOWNLOAD EC_IOWR(0x0f, ec_ioctl_slave_sdo_download_t)
69 #define EC_IOCTL_SLAVE_SII_READ EC_IOWR(0x10, ec_ioctl_slave_sii_t)
70 #define EC_IOCTL_SLAVE_SII_WRITE EC_IOW(0x11, ec_ioctl_slave_sii_t)
71 #define EC_IOCTL_SLAVE_REG_READ EC_IOWR(0x12, ec_ioctl_slave_reg_t)
72 #define EC_IOCTL_SLAVE_REG_WRITE EC_IOW(0x13, ec_ioctl_slave_reg_t)
73 #define EC_IOCTL_SLAVE_FOE_READ EC_IOWR(0x14, ec_ioctl_slave_foe_t)
74 #define EC_IOCTL_SLAVE_FOE_WRITE EC_IOW(0x15, ec_ioctl_slave_foe_t)
75 #define EC_IOCTL_SLAVE_SOE_READ EC_IOWR(0x16, ec_ioctl_slave_soe_read_t)
76 #define EC_IOCTL_SLAVE_SOE_WRITE EC_IOWR(0x17, ec_ioctl_slave_soe_write_t)
77 #define EC_IOCTL_CONFIG EC_IOWR(0x18, ec_ioctl_config_t)
78 #define EC_IOCTL_CONFIG_PDO EC_IOWR(0x19, ec_ioctl_config_pdo_t)
79 #define EC_IOCTL_CONFIG_PDO_ENTRY EC_IOWR(0x1a, ec_ioctl_config_pdo_entry_t)
80 #define EC_IOCTL_CONFIG_SDO EC_IOWR(0x1b, ec_ioctl_config_sdo_t)
81 #define EC_IOCTL_CONFIG_IDN EC_IOWR(0x1c, ec_ioctl_config_idn_t)
82 #define EC_IOCTL_CONFIG_FLAG EC_IOWR(0x1d, ec_ioctl_config_flag_t)
84 #define EC_IOCTL_EOE_HANDLER EC_IOWR(0x1e, ec_ioctl_eoe_handler_t)
88 #define EC_IOCTL_REQUEST EC_IO(0x1f)
89 #define EC_IOCTL_CREATE_DOMAIN EC_IO(0x20)
90 #define EC_IOCTL_CREATE_SLAVE_CONFIG EC_IOWR(0x21, ec_ioctl_config_t)
91 #define EC_IOCTL_SELECT_REF_CLOCK EC_IOW(0x22, uint32_t)
92 #define EC_IOCTL_ACTIVATE EC_IOR(0x23, ec_ioctl_master_activate_t)
93 #define EC_IOCTL_DEACTIVATE EC_IO(0x24)
94 #define EC_IOCTL_SEND EC_IO(0x25)
95 #define EC_IOCTL_RECEIVE EC_IO(0x26)
96 #define EC_IOCTL_MASTER_STATE EC_IOR(0x27, ec_master_state_t)
97 #define EC_IOCTL_MASTER_LINK_STATE EC_IOWR(0x28, ec_ioctl_link_state_t)
98 #define EC_IOCTL_APP_TIME EC_IOW(0x29, uint64_t)
99 #define EC_IOCTL_SYNC_REF EC_IO(0x2a)
100 #define EC_IOCTL_SYNC_REF_TO EC_IOW(0x2b, uint64_t)
101 #define EC_IOCTL_SYNC_SLAVES EC_IO(0x2c)
102 #define EC_IOCTL_REF_CLOCK_TIME EC_IOR(0x2d, uint32_t)
103 #define EC_IOCTL_SYNC_MON_QUEUE EC_IO(0x2e)
104 #define EC_IOCTL_SYNC_MON_PROCESS EC_IOR(0x2f, uint32_t)
105 #define EC_IOCTL_RESET EC_IO(0x30)
106 #define EC_IOCTL_SC_SYNC EC_IOW(0x31, ec_ioctl_config_t)
107 #define EC_IOCTL_SC_WATCHDOG EC_IOW(0x32, ec_ioctl_config_t)
108 #define EC_IOCTL_SC_ADD_PDO EC_IOW(0x33, ec_ioctl_config_pdo_t)
109 #define EC_IOCTL_SC_CLEAR_PDOS EC_IOW(0x34, ec_ioctl_config_pdo_t)
110 #define EC_IOCTL_SC_ADD_ENTRY EC_IOW(0x35, ec_ioctl_add_pdo_entry_t)
111 #define EC_IOCTL_SC_CLEAR_ENTRIES EC_IOW(0x36, ec_ioctl_config_pdo_t)
112 #define EC_IOCTL_SC_REG_PDO_ENTRY EC_IOWR(0x37, ec_ioctl_reg_pdo_entry_t)
113 #define EC_IOCTL_SC_REG_PDO_POS EC_IOWR(0x38, ec_ioctl_reg_pdo_pos_t)
114 #define EC_IOCTL_SC_DC EC_IOW(0x39, ec_ioctl_config_t)
115 #define EC_IOCTL_SC_SDO EC_IOW(0x3a, ec_ioctl_sc_sdo_t)
116 #define EC_IOCTL_SC_EMERG_SIZE EC_IOW(0x3b, ec_ioctl_sc_emerg_t)
117 #define EC_IOCTL_SC_EMERG_POP EC_IOWR(0x3c, ec_ioctl_sc_emerg_t)
118 #define EC_IOCTL_SC_EMERG_CLEAR EC_IOW(0x3d, ec_ioctl_sc_emerg_t)
119 #define EC_IOCTL_SC_EMERG_OVERRUNS EC_IOWR(0x3e, ec_ioctl_sc_emerg_t)
120 #define EC_IOCTL_SC_SDO_REQUEST EC_IOWR(0x3f, ec_ioctl_sdo_request_t)
121 #define EC_IOCTL_SC_REG_REQUEST EC_IOWR(0x40, ec_ioctl_reg_request_t)
122 #define EC_IOCTL_SC_VOE EC_IOWR(0x41, ec_ioctl_voe_t)
123 #define EC_IOCTL_SC_STATE EC_IOWR(0x42, ec_ioctl_sc_state_t)
124 #define EC_IOCTL_SC_IDN EC_IOW(0x43, ec_ioctl_sc_idn_t)
125 #define EC_IOCTL_SC_FLAG EC_IOW(0x44, ec_ioctl_sc_flag_t)
126 #define EC_IOCTL_DOMAIN_SIZE EC_IO(0x45)
127 #define EC_IOCTL_DOMAIN_OFFSET EC_IO(0x46)
128 #define EC_IOCTL_DOMAIN_PROCESS EC_IO(0x47)
129 #define EC_IOCTL_DOMAIN_QUEUE EC_IO(0x48)
130 #define EC_IOCTL_DOMAIN_STATE EC_IOWR(0x49, ec_ioctl_domain_state_t)
131 #define EC_IOCTL_SDO_REQUEST_INDEX EC_IOWR(0x4a, ec_ioctl_sdo_request_t)
132 #define EC_IOCTL_SDO_REQUEST_TIMEOUT EC_IOWR(0x4b, ec_ioctl_sdo_request_t)
133 #define EC_IOCTL_SDO_REQUEST_STATE EC_IOWR(0x4c, ec_ioctl_sdo_request_t)
134 #define EC_IOCTL_SDO_REQUEST_READ EC_IOWR(0x4d, ec_ioctl_sdo_request_t)
135 #define EC_IOCTL_SDO_REQUEST_WRITE EC_IOWR(0x4e, ec_ioctl_sdo_request_t)
136 #define EC_IOCTL_SDO_REQUEST_DATA EC_IOWR(0x4f, ec_ioctl_sdo_request_t)
137 #define EC_IOCTL_REG_REQUEST_DATA EC_IOWR(0x50, ec_ioctl_reg_request_t)
138 #define EC_IOCTL_REG_REQUEST_STATE EC_IOWR(0x51, ec_ioctl_reg_request_t)
139 #define EC_IOCTL_REG_REQUEST_WRITE EC_IOWR(0x52, ec_ioctl_reg_request_t)
140 #define EC_IOCTL_REG_REQUEST_READ EC_IOWR(0x53, ec_ioctl_reg_request_t)
141 #define EC_IOCTL_VOE_SEND_HEADER EC_IOW(0x54, ec_ioctl_voe_t)
142 #define EC_IOCTL_VOE_REC_HEADER EC_IOWR(0x55, ec_ioctl_voe_t)
143 #define EC_IOCTL_VOE_READ EC_IOW(0x56, ec_ioctl_voe_t)
144 #define EC_IOCTL_VOE_READ_NOSYNC EC_IOW(0x57, ec_ioctl_voe_t)
145 #define EC_IOCTL_VOE_WRITE EC_IOWR(0x58, ec_ioctl_voe_t)
146 #define EC_IOCTL_VOE_EXEC EC_IOWR(0x59, ec_ioctl_voe_t)
147 #define EC_IOCTL_VOE_DATA EC_IOWR(0x5a, ec_ioctl_voe_t)
148 #define EC_IOCTL_SET_SEND_INTERVAL EC_IOW(0x5b, size_t)
152 #define EC_IOCTL_STRING_SIZE 64
157 uint32_t ioctl_version_magic;
164 uint32_t slave_count;
165 uint32_t config_count;
166 uint32_t domain_count;
167 uint32_t eoe_handler_count;
171 struct ec_ioctl_device {
184 } devices[EC_MAX_NUM_DEVICES];
185 uint32_t num_devices;
196 uint64_t dc_ref_time;
207 unsigned int device_index;
209 uint32_t product_code;
210 uint32_t revision_number;
211 uint32_t serial_number;
213 uint16_t boot_rx_mailbox_offset;
214 uint16_t boot_rx_mailbox_size;
215 uint16_t boot_tx_mailbox_offset;
216 uint16_t boot_tx_mailbox_size;
217 uint16_t std_rx_mailbox_offset;
218 uint16_t std_rx_mailbox_size;
219 uint16_t std_tx_mailbox_offset;
220 uint16_t std_tx_mailbox_size;
221 uint16_t mailbox_protocols;
222 uint8_t has_general_category;
225 int16_t current_on_ebus;
229 uint32_t receive_time;
231 uint32_t delay_to_next_dc;
234 uint8_t dc_supported;
236 uint8_t has_dc_system_time;
237 uint32_t transmission_delay;
243 char group[EC_IOCTL_STRING_SIZE];
244 char image[EC_IOCTL_STRING_SIZE];
245 char order[EC_IOCTL_STRING_SIZE];
246 char name[EC_IOCTL_STRING_SIZE];
253 uint16_t slave_position;
257 uint16_t physical_start_address;
258 uint16_t default_size;
259 uint8_t control_register;
262 } ec_ioctl_slave_sync_t;
268 uint16_t slave_position;
275 int8_t name[EC_IOCTL_STRING_SIZE];
276 } ec_ioctl_slave_sync_pdo_t;
282 uint16_t slave_position;
291 int8_t name[EC_IOCTL_STRING_SIZE];
292 } ec_ioctl_slave_sync_pdo_entry_t;
302 uint32_t logical_base_address;
303 uint16_t working_counter[EC_MAX_NUM_DEVICES];
304 uint16_t expected_working_counter;
312 uint32_t domain_index;
316 uint16_t slave_config_alias;
317 uint16_t slave_config_position;
320 uint32_t logical_address;
322 } ec_ioctl_domain_fmmu_t;
328 uint32_t domain_index;
331 } ec_ioctl_domain_data_t;
337 uint16_t slave_position;
339 } ec_ioctl_slave_state_t;
345 uint16_t slave_position;
346 uint16_t sdo_position;
350 uint8_t max_subindex;
351 int8_t name[EC_IOCTL_STRING_SIZE];
352 } ec_ioctl_slave_sdo_t;
358 uint16_t slave_position;
360 uint8_t sdo_entry_subindex;
367 int8_t description[EC_IOCTL_STRING_SIZE];
368 } ec_ioctl_slave_sdo_entry_t;
374 uint16_t slave_position;
376 uint8_t sdo_entry_subindex;
383 } ec_ioctl_slave_sdo_upload_t;
389 uint16_t slave_position;
391 uint8_t sdo_entry_subindex;
392 uint8_t complete_access;
398 } ec_ioctl_slave_sdo_download_t;
404 uint16_t slave_position;
408 } ec_ioctl_slave_sii_t;
414 uint16_t slave_position;
419 } ec_ioctl_slave_reg_t;
425 uint16_t slave_position;
435 } ec_ioctl_slave_foe_t;
441 uint16_t slave_position;
450 } ec_ioctl_slave_soe_read_t;
456 uint16_t slave_position;
464 } ec_ioctl_slave_soe_write_t;
470 uint32_t config_index;
476 uint32_t product_code;
483 uint16_t watchdog_divider;
484 uint16_t watchdog_intervals;
488 int32_t slave_position;
489 uint16_t dc_assign_activate;
497 uint32_t config_index;
504 int8_t name[EC_IOCTL_STRING_SIZE];
505 } ec_ioctl_config_pdo_t;
511 uint32_t config_index;
520 int8_t name[EC_IOCTL_STRING_SIZE];
521 } ec_ioctl_config_pdo_entry_t;
528 #define EC_MAX_SDO_DATA_SIZE 1024
532 uint32_t config_index;
539 uint8_t data[EC_MAX_SDO_DATA_SIZE];
540 uint8_t complete_access;
541 } ec_ioctl_config_sdo_t;
548 #define EC_MAX_IDN_DATA_SIZE 1024
552 uint32_t config_index;
560 uint8_t data[EC_MAX_IDN_DATA_SIZE];
561 } ec_ioctl_config_idn_t;
567 #define EC_MAX_FLAG_KEY_SIZE 128
571 uint32_t config_index;
575 char key[EC_MAX_FLAG_KEY_SIZE];
577 } ec_ioctl_config_flag_t;
589 uint16_t slave_position;
595 uint32_t tx_queued_frames;
596 uint32_t tx_queue_size;
597 } ec_ioctl_eoe_handler_t;
606 size_t process_data_size;
607 } ec_ioctl_master_activate_t;
613 uint32_t config_index;
615 uint16_t entry_index;
616 uint8_t entry_subindex;
617 uint8_t entry_bit_length;
618 } ec_ioctl_add_pdo_entry_t;
624 uint32_t config_index;
625 uint16_t entry_index;
626 uint8_t entry_subindex;
627 uint32_t domain_index;
630 unsigned int bit_position;
631 } ec_ioctl_reg_pdo_entry_t;
637 uint32_t config_index;
641 uint32_t domain_index;
644 unsigned int bit_position;
645 } ec_ioctl_reg_pdo_pos_t;
651 uint32_t config_index;
656 uint8_t complete_access;
663 uint32_t config_index;
669 } ec_ioctl_sc_emerg_t;
675 uint32_t config_index;
679 } ec_ioctl_sc_state_t;
685 uint32_t config_index;
697 uint32_t config_index;
701 } ec_ioctl_sc_flag_t;
707 uint32_t domain_index;
711 } ec_ioctl_domain_state_t;
717 uint32_t config_index;
720 uint32_t request_index;
722 uint8_t sdo_subindex;
727 } ec_ioctl_sdo_request_t;
733 uint32_t config_index;
737 uint32_t request_index;
742 size_t transfer_size;
743 } ec_ioctl_reg_request_t;
749 uint32_t config_index;
754 uint16_t *vendor_type;
768 } ec_ioctl_link_state_t;
777 unsigned int writable;
778 unsigned int requested;
779 uint8_t *process_data;
780 size_t process_data_size;
781 } ec_ioctl_context_t;
783 long ec_ioctl(
ec_master_t *, ec_ioctl_context_t *,
unsigned int,
788 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.