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 39 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) 78 #define EC_IOCTL_SLAVE_EOE_IP_PARAM EC_IOW(0x18, ec_ioctl_slave_eoe_ip_t) 80 #define EC_IOCTL_CONFIG EC_IOWR(0x19, ec_ioctl_config_t) 81 #define EC_IOCTL_CONFIG_PDO EC_IOWR(0x1a, ec_ioctl_config_pdo_t) 82 #define EC_IOCTL_CONFIG_PDO_ENTRY EC_IOWR(0x1b, ec_ioctl_config_pdo_entry_t) 83 #define EC_IOCTL_CONFIG_SDO EC_IOWR(0x1c, ec_ioctl_config_sdo_t) 84 #define EC_IOCTL_CONFIG_IDN EC_IOWR(0x1d, ec_ioctl_config_idn_t) 85 #define EC_IOCTL_CONFIG_FLAG EC_IOWR(0x1e, ec_ioctl_config_flag_t) 87 #define EC_IOCTL_EOE_HANDLER EC_IOWR(0x1f, ec_ioctl_eoe_handler_t) 89 #define EC_IOCTL_SLAVE_DICT_UPLOAD EC_IOW(0x7f, ec_ioctl_slave_dict_upload_t) 92 #define EC_IOCTL_REQUEST EC_IO(0x20) 93 #define EC_IOCTL_CREATE_DOMAIN EC_IO(0x21) 94 #define EC_IOCTL_CREATE_SLAVE_CONFIG EC_IOWR(0x22, ec_ioctl_config_t) 95 #define EC_IOCTL_SELECT_REF_CLOCK EC_IOW(0x23, uint32_t) 96 #define EC_IOCTL_ACTIVATE EC_IOR(0x24, ec_ioctl_master_activate_t) 97 #define EC_IOCTL_DEACTIVATE EC_IO(0x25) 98 #define EC_IOCTL_SEND EC_IO(0x26) 99 #define EC_IOCTL_RECEIVE EC_IO(0x27) 100 #define EC_IOCTL_MASTER_STATE EC_IOR(0x28, ec_master_state_t) 101 #define EC_IOCTL_MASTER_LINK_STATE EC_IOWR(0x29, ec_ioctl_link_state_t) 102 #define EC_IOCTL_APP_TIME EC_IOW(0x2a, uint64_t) 103 #define EC_IOCTL_SYNC_REF EC_IO(0x2b) 104 #define EC_IOCTL_SYNC_REF_TO EC_IOW(0x2c, uint64_t) 105 #define EC_IOCTL_SYNC_SLAVES EC_IO(0x2d) 106 #define EC_IOCTL_REF_CLOCK_TIME EC_IOR(0x2e, uint32_t) 107 #define EC_IOCTL_SYNC_MON_QUEUE EC_IO(0x2f) 108 #define EC_IOCTL_SYNC_MON_PROCESS EC_IOR(0x30, uint32_t) 109 #define EC_IOCTL_RESET EC_IO(0x31) 110 #define EC_IOCTL_SC_SYNC EC_IOW(0x32, ec_ioctl_config_t) 111 #define EC_IOCTL_SC_WATCHDOG EC_IOW(0x33, ec_ioctl_config_t) 112 #define EC_IOCTL_SC_ADD_PDO EC_IOW(0x34, ec_ioctl_config_pdo_t) 113 #define EC_IOCTL_SC_CLEAR_PDOS EC_IOW(0x35, ec_ioctl_config_pdo_t) 114 #define EC_IOCTL_SC_ADD_ENTRY EC_IOW(0x36, ec_ioctl_add_pdo_entry_t) 115 #define EC_IOCTL_SC_CLEAR_ENTRIES EC_IOW(0x37, ec_ioctl_config_pdo_t) 116 #define EC_IOCTL_SC_REG_PDO_ENTRY EC_IOWR(0x38, ec_ioctl_reg_pdo_entry_t) 117 #define EC_IOCTL_SC_REG_PDO_POS EC_IOWR(0x39, ec_ioctl_reg_pdo_pos_t) 118 #define EC_IOCTL_SC_DC EC_IOW(0x3a, ec_ioctl_config_t) 119 #define EC_IOCTL_SC_SDO EC_IOW(0x3b, ec_ioctl_sc_sdo_t) 120 #define EC_IOCTL_SC_EMERG_SIZE EC_IOW(0x3c, ec_ioctl_sc_emerg_t) 121 #define EC_IOCTL_SC_EMERG_POP EC_IOWR(0x3d, ec_ioctl_sc_emerg_t) 122 #define EC_IOCTL_SC_EMERG_CLEAR EC_IOW(0x3e, ec_ioctl_sc_emerg_t) 123 #define EC_IOCTL_SC_EMERG_OVERRUNS EC_IOWR(0x3f, ec_ioctl_sc_emerg_t) 124 #define EC_IOCTL_SC_SDO_REQUEST EC_IOWR(0x40, ec_ioctl_sdo_request_t) 125 #define EC_IOCTL_SC_REG_REQUEST EC_IOWR(0x41, ec_ioctl_reg_request_t) 126 #define EC_IOCTL_SC_VOE EC_IOWR(0x42, ec_ioctl_voe_t) 127 #define EC_IOCTL_SC_STATE EC_IOWR(0x43, ec_ioctl_sc_state_t) 128 #define EC_IOCTL_SC_IDN EC_IOW(0x44, ec_ioctl_sc_idn_t) 129 #define EC_IOCTL_SC_FLAG EC_IOW(0x45, ec_ioctl_sc_flag_t) 130 #define EC_IOCTL_DOMAIN_SIZE EC_IO(0x46) 131 #define EC_IOCTL_DOMAIN_OFFSET EC_IO(0x47) 132 #define EC_IOCTL_DOMAIN_PROCESS EC_IO(0x48) 133 #define EC_IOCTL_DOMAIN_QUEUE EC_IO(0x49) 134 #define EC_IOCTL_DOMAIN_STATE EC_IOWR(0x4a, ec_ioctl_domain_state_t) 135 #define EC_IOCTL_SDO_REQUEST_INDEX EC_IOWR(0x4b, ec_ioctl_sdo_request_t) 136 #define EC_IOCTL_SDO_REQUEST_TIMEOUT EC_IOWR(0x4c, ec_ioctl_sdo_request_t) 137 #define EC_IOCTL_SDO_REQUEST_STATE EC_IOWR(0x4d, ec_ioctl_sdo_request_t) 138 #define EC_IOCTL_SDO_REQUEST_READ EC_IOWR(0x4e, ec_ioctl_sdo_request_t) 139 #define EC_IOCTL_SDO_REQUEST_WRITE EC_IOWR(0x4f, ec_ioctl_sdo_request_t) 140 #define EC_IOCTL_SDO_REQUEST_DATA EC_IOWR(0x50, ec_ioctl_sdo_request_t) 141 #define EC_IOCTL_REG_REQUEST_DATA EC_IOWR(0x51, ec_ioctl_reg_request_t) 142 #define EC_IOCTL_REG_REQUEST_STATE EC_IOWR(0x52, ec_ioctl_reg_request_t) 143 #define EC_IOCTL_REG_REQUEST_WRITE EC_IOWR(0x53, ec_ioctl_reg_request_t) 144 #define EC_IOCTL_REG_REQUEST_READ EC_IOWR(0x54, ec_ioctl_reg_request_t) 145 #define EC_IOCTL_VOE_SEND_HEADER EC_IOW(0x55, ec_ioctl_voe_t) 146 #define EC_IOCTL_VOE_REC_HEADER EC_IOWR(0x56, ec_ioctl_voe_t) 147 #define EC_IOCTL_VOE_READ EC_IOW(0x57, ec_ioctl_voe_t) 148 #define EC_IOCTL_VOE_READ_NOSYNC EC_IOW(0x58, ec_ioctl_voe_t) 149 #define EC_IOCTL_VOE_WRITE EC_IOWR(0x59, ec_ioctl_voe_t) 150 #define EC_IOCTL_VOE_EXEC EC_IOWR(0x5a, ec_ioctl_voe_t) 151 #define EC_IOCTL_VOE_DATA EC_IOWR(0x5b, ec_ioctl_voe_t) 152 #define EC_IOCTL_SET_SEND_INTERVAL EC_IOW(0x5c, size_t) 153 #define EC_IOCTL_SC_OVERLAPPING_IO EC_IOW(0x5d, ec_ioctl_config_t) 154 #define EC_IOCTL_SETUP_DOMAIN_MEMORY EC_IOR(0x5e, ec_ioctl_master_activate_t) 155 #define EC_IOCTL_DEACTIVATE_SLAVES EC_IO(0x5f) 156 #define EC_IOCTL_64_REF_CLK_TIME_QUEUE EC_IO(0x60) 157 #define EC_IOCTL_64_REF_CLK_TIME EC_IOR(0x61, uint64_t) 161 #define EC_IOCTL_STRING_SIZE 64 166 uint32_t ioctl_version_magic;
173 uint32_t slave_count;
174 uint32_t config_count;
175 uint32_t domain_count;
176 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;
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;
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;
435 uint16_t slave_position;
445 } ec_ioctl_slave_foe_t;
451 uint16_t slave_position;
460 } ec_ioctl_slave_soe_read_t;
466 uint16_t slave_position;
474 } ec_ioctl_slave_soe_write_t;
480 uint32_t config_index;
486 uint32_t product_code;
493 uint16_t watchdog_divider;
494 uint16_t watchdog_intervals;
498 int32_t slave_position;
499 uint16_t dc_assign_activate;
501 uint8_t allow_overlapping_pdos;
508 uint32_t config_index;
515 int8_t name[EC_IOCTL_STRING_SIZE];
516 } ec_ioctl_config_pdo_t;
522 uint32_t config_index;
531 int8_t name[EC_IOCTL_STRING_SIZE];
532 } ec_ioctl_config_pdo_entry_t;
539 #define EC_MAX_SDO_DATA_SIZE 1024 543 uint32_t config_index;
550 uint8_t data[EC_MAX_SDO_DATA_SIZE];
551 uint8_t complete_access;
552 } ec_ioctl_config_sdo_t;
559 #define EC_MAX_IDN_DATA_SIZE 1024 563 uint32_t config_index;
571 uint8_t data[EC_MAX_IDN_DATA_SIZE];
572 } ec_ioctl_config_idn_t;
578 #define EC_MAX_FLAG_KEY_SIZE 128 582 uint32_t config_index;
586 char key[EC_MAX_FLAG_KEY_SIZE];
588 } ec_ioctl_config_flag_t;
600 uint16_t slave_position;
606 uint32_t tx_queued_frames;
607 uint32_t tx_queue_size;
608 } ec_ioctl_eoe_handler_t;
614 #define EC_ETH_ALEN 6 616 #if ETH_ALEN != EC_ETH_ALEN 617 #error Ethernet address length mismatch 624 uint16_t slave_position;
626 uint8_t mac_address_included;
627 uint8_t ip_address_included;
628 uint8_t subnet_mask_included;
629 uint8_t gateway_included;
630 uint8_t dns_included;
631 uint8_t name_included;
633 unsigned char mac_address[EC_ETH_ALEN];
635 uint32_t subnet_mask;
642 } ec_ioctl_slave_eoe_ip_t;
650 size_t process_data_size;
651 } ec_ioctl_master_activate_t;
657 uint32_t config_index;
659 uint16_t entry_index;
660 uint8_t entry_subindex;
661 uint8_t entry_bit_length;
662 } ec_ioctl_add_pdo_entry_t;
668 uint32_t config_index;
669 uint16_t entry_index;
670 uint8_t entry_subindex;
671 uint32_t domain_index;
674 unsigned int bit_position;
675 } ec_ioctl_reg_pdo_entry_t;
681 uint32_t config_index;
685 uint32_t domain_index;
688 unsigned int bit_position;
689 } ec_ioctl_reg_pdo_pos_t;
695 uint32_t config_index;
700 uint8_t complete_access;
707 uint32_t config_index;
713 } ec_ioctl_sc_emerg_t;
719 uint32_t config_index;
723 } ec_ioctl_sc_state_t;
729 uint32_t config_index;
741 uint32_t config_index;
745 } ec_ioctl_sc_flag_t;
751 uint32_t domain_index;
755 } ec_ioctl_domain_state_t;
761 uint32_t config_index;
764 uint32_t request_index;
766 uint8_t sdo_subindex;
771 } ec_ioctl_sdo_request_t;
777 uint32_t config_index;
781 uint32_t request_index;
786 size_t transfer_size;
787 } ec_ioctl_reg_request_t;
793 uint32_t config_index;
798 uint16_t *vendor_type;
812 } ec_ioctl_link_state_t;
818 uint16_t slave_position;
819 } ec_ioctl_slave_dict_upload_t;
828 unsigned int writable;
829 unsigned int requested;
830 uint8_t *process_data;
831 size_t process_data_size;
832 } ec_ioctl_context_t;
834 long ec_ioctl(
ec_master_t *, ec_ioctl_context_t *,
unsigned int,
839 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.
ec_slave_port_t ports[EC_MAX_PORTS]
Ports.
#define EC_RATE_COUNT
Number of statistic rate intervals to maintain.
EtherCAT slave port information.
#define EC_MAX_HOSTNAME_SIZE
Maximum hostname size.
Global definitions and macros.
Slave configuration state.
Slave information interface CANopen over EtherCAT details flags.
static unsigned int master_count
Number of masters.
uint32_t transmission_delay
DC system time transmission delay (offset from reference clock).
ec_direction_t
Direction type for PDO assignment functions.
ec_slave_dc_range_t
EtherCAT slave distributed clocks range.
uint8_t has_dc_system_time
The slave supports the DC system time register.
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.
size_t sii_nwords
Size of the SII contents in words.
ec_device_index_t device_index
Index of device the slave responds on.
ec_request_state_t
Request state.
unsigned int error_flag
Stop processing after an error.
#define EC_MAX_SYNC_MANAGERS
Maximum number of sync managers per slave.
#define EC_SYNC_SIGNAL_COUNT
Number of DC sync signals.