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 30 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, uint64_t) 107 #define EC_IOCTL_SYNC_REF EC_IO(0x29) 108 #define EC_IOCTL_SYNC_REF_TO EC_IOW(0x2a, uint64_t) 109 #define EC_IOCTL_SYNC_SLAVES EC_IO(0x2b) 110 #define EC_IOCTL_REF_CLOCK_TIME EC_IOR(0x2c, uint32_t) 111 #define EC_IOCTL_SYNC_MON_QUEUE EC_IO(0x2d) 112 #define EC_IOCTL_SYNC_MON_PROCESS EC_IOR(0x2e, uint32_t) 113 #define EC_IOCTL_RESET EC_IO(0x2f) 114 #define EC_IOCTL_SC_SYNC EC_IOW(0x30, ec_ioctl_config_t) 115 #define EC_IOCTL_SC_WATCHDOG EC_IOW(0x31, ec_ioctl_config_t) 116 #define EC_IOCTL_SC_ADD_PDO EC_IOW(0x32, ec_ioctl_config_pdo_t) 117 #define EC_IOCTL_SC_CLEAR_PDOS EC_IOW(0x33, ec_ioctl_config_pdo_t) 118 #define EC_IOCTL_SC_ADD_ENTRY EC_IOW(0x34, ec_ioctl_add_pdo_entry_t) 119 #define EC_IOCTL_SC_CLEAR_ENTRIES EC_IOW(0x35, ec_ioctl_config_pdo_t) 120 #define EC_IOCTL_SC_REG_PDO_ENTRY EC_IOWR(0x36, ec_ioctl_reg_pdo_entry_t) 121 #define EC_IOCTL_SC_REG_PDO_POS EC_IOWR(0x37, ec_ioctl_reg_pdo_pos_t) 122 #define EC_IOCTL_SC_DC EC_IOW(0x38, ec_ioctl_config_t) 123 #define EC_IOCTL_SC_SDO EC_IOW(0x39, ec_ioctl_sc_sdo_t) 124 #define EC_IOCTL_SC_EMERG_SIZE EC_IOW(0x3a, ec_ioctl_sc_emerg_t) 125 #define EC_IOCTL_SC_EMERG_POP EC_IOWR(0x3b, ec_ioctl_sc_emerg_t) 126 #define EC_IOCTL_SC_EMERG_CLEAR EC_IOW(0x3c, ec_ioctl_sc_emerg_t) 127 #define EC_IOCTL_SC_EMERG_OVERRUNS EC_IOWR(0x3d, ec_ioctl_sc_emerg_t) 128 #define EC_IOCTL_SC_SDO_REQUEST EC_IOWR(0x3e, ec_ioctl_sdo_request_t) 129 #define EC_IOCTL_SC_REG_REQUEST EC_IOWR(0x3f, ec_ioctl_reg_request_t) 130 #define EC_IOCTL_SC_VOE EC_IOWR(0x40, ec_ioctl_voe_t) 131 #define EC_IOCTL_SC_STATE EC_IOWR(0x41, ec_ioctl_sc_state_t) 132 #define EC_IOCTL_SC_IDN EC_IOW(0x42, ec_ioctl_sc_idn_t) 133 #define EC_IOCTL_DOMAIN_SIZE EC_IO(0x43) 134 #define EC_IOCTL_DOMAIN_OFFSET EC_IO(0x44) 135 #define EC_IOCTL_DOMAIN_PROCESS EC_IO(0x45) 136 #define EC_IOCTL_DOMAIN_QUEUE EC_IO(0x46) 137 #define EC_IOCTL_DOMAIN_STATE EC_IOWR(0x47, ec_ioctl_domain_state_t) 138 #define EC_IOCTL_SDO_REQUEST_INDEX EC_IOWR(0x48, ec_ioctl_sdo_request_t) 139 #define EC_IOCTL_SDO_REQUEST_TIMEOUT EC_IOWR(0x49, ec_ioctl_sdo_request_t) 140 #define EC_IOCTL_SDO_REQUEST_STATE EC_IOWR(0x4a, ec_ioctl_sdo_request_t) 141 #define EC_IOCTL_SDO_REQUEST_READ EC_IOWR(0x4b, ec_ioctl_sdo_request_t) 142 #define EC_IOCTL_SDO_REQUEST_WRITE EC_IOWR(0x4c, ec_ioctl_sdo_request_t) 143 #define EC_IOCTL_SDO_REQUEST_DATA EC_IOWR(0x4d, ec_ioctl_sdo_request_t) 144 #define EC_IOCTL_REG_REQUEST_DATA EC_IOWR(0x4e, ec_ioctl_reg_request_t) 145 #define EC_IOCTL_REG_REQUEST_STATE EC_IOWR(0x4f, ec_ioctl_reg_request_t) 146 #define EC_IOCTL_REG_REQUEST_WRITE EC_IOWR(0x50, ec_ioctl_reg_request_t) 147 #define EC_IOCTL_REG_REQUEST_READ EC_IOWR(0x51, ec_ioctl_reg_request_t) 148 #define EC_IOCTL_VOE_SEND_HEADER EC_IOW(0x52, ec_ioctl_voe_t) 149 #define EC_IOCTL_VOE_REC_HEADER EC_IOWR(0x53, ec_ioctl_voe_t) 150 #define EC_IOCTL_VOE_READ EC_IOW(0x54, ec_ioctl_voe_t) 151 #define EC_IOCTL_VOE_READ_NOSYNC EC_IOW(0x55, ec_ioctl_voe_t) 152 #define EC_IOCTL_VOE_WRITE EC_IOWR(0x56, ec_ioctl_voe_t) 153 #define EC_IOCTL_VOE_EXEC EC_IOWR(0x57, ec_ioctl_voe_t) 154 #define EC_IOCTL_VOE_DATA EC_IOWR(0x58, ec_ioctl_voe_t) 155 #define EC_IOCTL_SET_SEND_INTERVAL EC_IOW(0x59, size_t) 159 #define EC_IOCTL_STRING_SIZE 64 164 uint32_t ioctl_version_magic;
171 uint32_t slave_count;
172 uint32_t config_count;
173 uint32_t domain_count;
175 uint32_t eoe_handler_count;
180 struct ec_ioctl_device {
193 } devices[EC_MAX_NUM_DEVICES];
194 uint32_t num_devices;
205 uint64_t dc_ref_time;
216 unsigned int device_index;
218 uint32_t product_code;
219 uint32_t revision_number;
220 uint32_t serial_number;
222 uint16_t boot_rx_mailbox_offset;
223 uint16_t boot_rx_mailbox_size;
224 uint16_t boot_tx_mailbox_offset;
225 uint16_t boot_tx_mailbox_size;
226 uint16_t std_rx_mailbox_offset;
227 uint16_t std_rx_mailbox_size;
228 uint16_t std_tx_mailbox_offset;
229 uint16_t std_tx_mailbox_size;
230 uint16_t mailbox_protocols;
231 uint8_t has_general_category;
234 int16_t current_on_ebus;
238 uint32_t receive_time;
240 uint32_t delay_to_next_dc;
243 uint8_t dc_supported;
245 uint8_t has_dc_system_time;
246 uint32_t transmission_delay;
252 char group[EC_IOCTL_STRING_SIZE];
253 char image[EC_IOCTL_STRING_SIZE];
254 char order[EC_IOCTL_STRING_SIZE];
255 char name[EC_IOCTL_STRING_SIZE];
262 uint16_t slave_position;
266 uint16_t physical_start_address;
267 uint16_t default_size;
268 uint8_t control_register;
271 } ec_ioctl_slave_sync_t;
277 uint16_t slave_position;
284 int8_t name[EC_IOCTL_STRING_SIZE];
285 } ec_ioctl_slave_sync_pdo_t;
291 uint16_t slave_position;
300 int8_t name[EC_IOCTL_STRING_SIZE];
301 } ec_ioctl_slave_sync_pdo_entry_t;
311 uint32_t logical_base_address;
312 uint16_t working_counter[EC_MAX_NUM_DEVICES];
313 uint16_t expected_working_counter;
321 uint32_t domain_index;
325 uint16_t slave_config_alias;
326 uint16_t slave_config_position;
329 uint32_t logical_address;
331 } ec_ioctl_domain_fmmu_t;
337 uint32_t domain_index;
340 } ec_ioctl_domain_data_t;
346 uint16_t slave_position;
348 } ec_ioctl_slave_state_t;
354 uint16_t slave_position;
355 uint16_t sdo_position;
359 uint8_t max_subindex;
360 int8_t name[EC_IOCTL_STRING_SIZE];
361 } ec_ioctl_slave_sdo_t;
367 uint16_t slave_position;
369 uint8_t sdo_entry_subindex;
376 int8_t description[EC_IOCTL_STRING_SIZE];
377 } ec_ioctl_slave_sdo_entry_t;
383 uint16_t slave_position;
385 uint8_t sdo_entry_subindex;
392 } ec_ioctl_slave_sdo_upload_t;
398 uint16_t slave_position;
400 uint8_t sdo_entry_subindex;
401 uint8_t complete_access;
407 } ec_ioctl_slave_sdo_download_t;
413 uint16_t slave_position;
417 } ec_ioctl_slave_sii_t;
423 uint16_t slave_position;
428 } ec_ioctl_slave_reg_t;
434 uint16_t slave_position;
444 } ec_ioctl_slave_foe_t;
450 uint16_t slave_position;
459 } ec_ioctl_slave_soe_read_t;
465 uint16_t slave_position;
473 } ec_ioctl_slave_soe_write_t;
479 uint32_t config_index;
485 uint32_t product_code;
492 uint16_t watchdog_divider;
493 uint16_t watchdog_intervals;
496 int32_t slave_position;
497 uint16_t dc_assign_activate;
505 uint32_t config_index;
512 int8_t name[EC_IOCTL_STRING_SIZE];
513 } ec_ioctl_config_pdo_t;
519 uint32_t config_index;
528 int8_t name[EC_IOCTL_STRING_SIZE];
529 } ec_ioctl_config_pdo_entry_t;
536 #define EC_MAX_SDO_DATA_SIZE 1024 540 uint32_t config_index;
547 uint8_t data[EC_MAX_SDO_DATA_SIZE];
548 uint8_t complete_access;
549 } ec_ioctl_config_sdo_t;
556 #define EC_MAX_IDN_DATA_SIZE 1024 560 uint32_t config_index;
568 uint8_t data[EC_MAX_IDN_DATA_SIZE];
569 } ec_ioctl_config_idn_t;
581 uint16_t slave_position;
587 uint32_t tx_queued_frames;
588 uint32_t tx_queue_size;
589 } ec_ioctl_eoe_handler_t;
598 size_t process_data_size;
599 } ec_ioctl_master_activate_t;
605 uint32_t config_index;
607 uint16_t entry_index;
608 uint8_t entry_subindex;
609 uint8_t entry_bit_length;
610 } ec_ioctl_add_pdo_entry_t;
616 uint32_t config_index;
617 uint16_t entry_index;
618 uint8_t entry_subindex;
619 uint32_t domain_index;
622 unsigned int bit_position;
623 } ec_ioctl_reg_pdo_entry_t;
629 uint32_t config_index;
633 uint32_t domain_index;
636 unsigned int bit_position;
637 } ec_ioctl_reg_pdo_pos_t;
643 uint32_t config_index;
648 uint8_t complete_access;
655 uint32_t config_index;
661 } ec_ioctl_sc_emerg_t;
667 uint32_t config_index;
671 } ec_ioctl_sc_state_t;
677 uint32_t config_index;
689 uint32_t domain_index;
693 } ec_ioctl_domain_state_t;
699 uint32_t config_index;
702 uint32_t request_index;
704 uint8_t sdo_subindex;
709 } ec_ioctl_sdo_request_t;
715 uint32_t config_index;
719 uint32_t request_index;
724 size_t transfer_size;
725 } ec_ioctl_reg_request_t;
731 uint32_t config_index;
736 uint16_t *vendor_type;
750 } ec_ioctl_link_state_t;
759 unsigned int writable;
760 unsigned int requested;
761 uint8_t *process_data;
762 size_t process_data_size;
763 } ec_ioctl_context_t;
765 long ec_ioctl(
ec_master_t *, ec_ioctl_context_t *,
unsigned int,
770 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.