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 31 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;
168 uint32_t eoe_handler_count;
173 struct ec_ioctl_device {
186 } devices[EC_MAX_NUM_DEVICES];
187 uint32_t num_devices;
198 uint64_t dc_ref_time;
209 unsigned int device_index;
211 uint32_t product_code;
212 uint32_t revision_number;
213 uint32_t serial_number;
215 uint16_t boot_rx_mailbox_offset;
216 uint16_t boot_rx_mailbox_size;
217 uint16_t boot_tx_mailbox_offset;
218 uint16_t boot_tx_mailbox_size;
219 uint16_t std_rx_mailbox_offset;
220 uint16_t std_rx_mailbox_size;
221 uint16_t std_tx_mailbox_offset;
222 uint16_t std_tx_mailbox_size;
223 uint16_t mailbox_protocols;
224 uint8_t has_general_category;
227 int16_t current_on_ebus;
231 uint32_t receive_time;
233 uint32_t delay_to_next_dc;
236 uint8_t dc_supported;
238 uint8_t has_dc_system_time;
239 uint32_t transmission_delay;
245 char group[EC_IOCTL_STRING_SIZE];
246 char image[EC_IOCTL_STRING_SIZE];
247 char order[EC_IOCTL_STRING_SIZE];
248 char name[EC_IOCTL_STRING_SIZE];
255 uint16_t slave_position;
259 uint16_t physical_start_address;
260 uint16_t default_size;
261 uint8_t control_register;
264 } ec_ioctl_slave_sync_t;
270 uint16_t slave_position;
277 int8_t name[EC_IOCTL_STRING_SIZE];
278 } ec_ioctl_slave_sync_pdo_t;
284 uint16_t slave_position;
293 int8_t name[EC_IOCTL_STRING_SIZE];
294 } ec_ioctl_slave_sync_pdo_entry_t;
304 uint32_t logical_base_address;
305 uint16_t working_counter[EC_MAX_NUM_DEVICES];
306 uint16_t expected_working_counter;
314 uint32_t domain_index;
318 uint16_t slave_config_alias;
319 uint16_t slave_config_position;
322 uint32_t logical_address;
324 } ec_ioctl_domain_fmmu_t;
330 uint32_t domain_index;
333 } ec_ioctl_domain_data_t;
339 uint16_t slave_position;
341 } ec_ioctl_slave_state_t;
347 uint16_t slave_position;
348 uint16_t sdo_position;
352 uint8_t max_subindex;
353 int8_t name[EC_IOCTL_STRING_SIZE];
354 } ec_ioctl_slave_sdo_t;
360 uint16_t slave_position;
362 uint8_t sdo_entry_subindex;
369 int8_t description[EC_IOCTL_STRING_SIZE];
370 } ec_ioctl_slave_sdo_entry_t;
376 uint16_t slave_position;
378 uint8_t sdo_entry_subindex;
385 } ec_ioctl_slave_sdo_upload_t;
391 uint16_t slave_position;
393 uint8_t sdo_entry_subindex;
394 uint8_t complete_access;
400 } ec_ioctl_slave_sdo_download_t;
406 uint16_t slave_position;
410 } ec_ioctl_slave_sii_t;
416 uint16_t slave_position;
421 } ec_ioctl_slave_reg_t;
427 uint16_t slave_position;
437 } ec_ioctl_slave_foe_t;
443 uint16_t slave_position;
452 } ec_ioctl_slave_soe_read_t;
458 uint16_t slave_position;
466 } ec_ioctl_slave_soe_write_t;
472 uint32_t config_index;
478 uint32_t product_code;
485 uint16_t watchdog_divider;
486 uint16_t watchdog_intervals;
490 int32_t slave_position;
491 uint16_t dc_assign_activate;
499 uint32_t config_index;
506 int8_t name[EC_IOCTL_STRING_SIZE];
507 } ec_ioctl_config_pdo_t;
513 uint32_t config_index;
522 int8_t name[EC_IOCTL_STRING_SIZE];
523 } ec_ioctl_config_pdo_entry_t;
530 #define EC_MAX_SDO_DATA_SIZE 1024 534 uint32_t config_index;
541 uint8_t data[EC_MAX_SDO_DATA_SIZE];
542 uint8_t complete_access;
543 } ec_ioctl_config_sdo_t;
550 #define EC_MAX_IDN_DATA_SIZE 1024 554 uint32_t config_index;
562 uint8_t data[EC_MAX_IDN_DATA_SIZE];
563 } ec_ioctl_config_idn_t;
569 #define EC_MAX_FLAG_KEY_SIZE 128 573 uint32_t config_index;
577 char key[EC_MAX_FLAG_KEY_SIZE];
579 } ec_ioctl_config_flag_t;
591 uint16_t slave_position;
597 uint32_t tx_queued_frames;
598 uint32_t tx_queue_size;
599 } ec_ioctl_eoe_handler_t;
608 size_t process_data_size;
609 } ec_ioctl_master_activate_t;
615 uint32_t config_index;
617 uint16_t entry_index;
618 uint8_t entry_subindex;
619 uint8_t entry_bit_length;
620 } ec_ioctl_add_pdo_entry_t;
626 uint32_t config_index;
627 uint16_t entry_index;
628 uint8_t entry_subindex;
629 uint32_t domain_index;
632 unsigned int bit_position;
633 } ec_ioctl_reg_pdo_entry_t;
639 uint32_t config_index;
643 uint32_t domain_index;
646 unsigned int bit_position;
647 } ec_ioctl_reg_pdo_pos_t;
653 uint32_t config_index;
658 uint8_t complete_access;
665 uint32_t config_index;
671 } ec_ioctl_sc_emerg_t;
677 uint32_t config_index;
681 } ec_ioctl_sc_state_t;
687 uint32_t config_index;
699 uint32_t config_index;
703 } ec_ioctl_sc_flag_t;
709 uint32_t domain_index;
713 } ec_ioctl_domain_state_t;
719 uint32_t config_index;
722 uint32_t request_index;
724 uint8_t sdo_subindex;
729 } ec_ioctl_sdo_request_t;
735 uint32_t config_index;
739 uint32_t request_index;
744 size_t transfer_size;
745 } ec_ioctl_reg_request_t;
751 uint32_t config_index;
756 uint16_t *vendor_type;
770 } ec_ioctl_link_state_t;
779 unsigned int writable;
780 unsigned int requested;
781 uint8_t *process_data;
782 size_t process_data_size;
783 } ec_ioctl_context_t;
785 long ec_ioctl(
ec_master_t *, ec_ioctl_context_t *,
unsigned int,
790 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.