IgH EtherCAT Master  1.7.0
ioctl.h
Go to the documentation of this file.
1 /*****************************************************************************
2  *
3  * Copyright (C) 2006-2026 Florian Pose, Ingenieurgemeinschaft IgH
4  *
5  * This file is part of the IgH EtherCAT master.
6  *
7  * The file is free software; you can redistribute it and/or modify it under
8  * the terms of the GNU Lesser General Public License as published by the
9  * Free Software Foundation; version 2.1 of the License.
10  *
11  * This file is distributed in the hope that it will be useful, but WITHOUT
12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
14  * License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public License
17  * along with this file. If not, see <http://www.gnu.org/licenses/>.
18  *
19  ****************************************************************************/
20 
26 /****************************************************************************/
27 
28 #ifndef __EC_IOCTL_H__
29 #define __EC_IOCTL_H__
30 
31 #include <linux/ioctl.h>
32 
33 #include "globals.h"
34 
35 /****************************************************************************/
36 
39 #define EC_IOCTL_TYPE 0xa4
40 
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)
45 
50 #define EC_IOCTL_VERSION_MAGIC 38
51 
52 // Command-line tool
53 // NOLINTBEGIN(whitespace/line_length)
54 #define EC_IOCTL_MODULE EC_IOR(0x00, ec_ioctl_module_t)
55 #define EC_IOCTL_MASTER EC_IOR(0x01, ec_ioctl_master_t)
56 #define EC_IOCTL_SLAVE EC_IOWR(0x02, ec_ioctl_slave_t)
57 #define EC_IOCTL_SLAVE_SYNC EC_IOWR(0x03, ec_ioctl_slave_sync_t)
58 #define EC_IOCTL_SLAVE_SYNC_PDO EC_IOWR(0x04, ec_ioctl_slave_sync_pdo_t)
59 #define EC_IOCTL_SLAVE_SYNC_PDO_ENTRY EC_IOWR(0x05, ec_ioctl_slave_sync_pdo_entry_t)
60 #define EC_IOCTL_DOMAIN EC_IOWR(0x06, ec_ioctl_domain_t)
61 #define EC_IOCTL_DOMAIN_FMMU EC_IOWR(0x07, ec_ioctl_domain_fmmu_t)
62 #define EC_IOCTL_DOMAIN_DATA EC_IOWR(0x08, ec_ioctl_domain_data_t)
63 #define EC_IOCTL_MASTER_DEBUG EC_IO(0x09)
64 #define EC_IOCTL_MASTER_RESCAN EC_IO(0x0a)
65 #define EC_IOCTL_SLAVE_STATE EC_IOW(0x0b, ec_ioctl_slave_state_t)
66 #define EC_IOCTL_SLAVE_SDO EC_IOWR(0x0c, ec_ioctl_slave_sdo_t)
67 #define EC_IOCTL_SLAVE_SDO_ENTRY EC_IOWR(0x0d, ec_ioctl_slave_sdo_entry_t)
68 #define EC_IOCTL_SLAVE_SDO_UPLOAD EC_IOWR(0x0e, ec_ioctl_slave_sdo_upload_t)
69 #define EC_IOCTL_SLAVE_SDO_DOWNLOAD EC_IOWR(0x0f, ec_ioctl_slave_sdo_download_t)
70 #define EC_IOCTL_SLAVE_SII_READ EC_IOWR(0x10, ec_ioctl_slave_sii_t)
71 #define EC_IOCTL_SLAVE_SII_WRITE EC_IOW(0x11, ec_ioctl_slave_sii_t)
72 #define EC_IOCTL_SLAVE_REG_READ EC_IOWR(0x12, ec_ioctl_slave_reg_t)
73 #define EC_IOCTL_SLAVE_REG_WRITE EC_IOW(0x13, ec_ioctl_slave_reg_t)
74 #define EC_IOCTL_SLAVE_FOE_READ EC_IOWR(0x14, ec_ioctl_slave_foe_t)
75 #define EC_IOCTL_SLAVE_FOE_WRITE EC_IOW(0x15, ec_ioctl_slave_foe_t)
76 #define EC_IOCTL_SLAVE_SOE_READ EC_IOWR(0x16, ec_ioctl_slave_soe_read_t)
77 #define EC_IOCTL_SLAVE_SOE_WRITE EC_IOWR(0x17, ec_ioctl_slave_soe_write_t)
78 #ifdef EC_EOE
79 #define EC_IOCTL_SLAVE_EOE_IP_PARAM EC_IOW(0x18, ec_ioctl_eoe_ip_t)
80 #endif
81 #define EC_IOCTL_CONFIG EC_IOWR(0x19, ec_ioctl_config_t)
82 #define EC_IOCTL_CONFIG_PDO EC_IOWR(0x1a, ec_ioctl_config_pdo_t)
83 #define EC_IOCTL_CONFIG_PDO_ENTRY EC_IOWR(0x1b, ec_ioctl_config_pdo_entry_t)
84 #define EC_IOCTL_CONFIG_SDO EC_IOWR(0x1c, ec_ioctl_config_sdo_t)
85 #define EC_IOCTL_CONFIG_IDN EC_IOWR(0x1d, ec_ioctl_config_idn_t)
86 #define EC_IOCTL_CONFIG_FLAG EC_IOWR(0x1e, ec_ioctl_config_flag_t)
87 #ifdef EC_EOE
88 #define EC_IOCTL_CONFIG_EOE_IP_PARAM EC_IOWR(0x1f, ec_ioctl_eoe_ip_t)
89 #define EC_IOCTL_EOE_HANDLER EC_IOWR(0x20, ec_ioctl_eoe_handler_t)
90 #endif
91 
92 // Application interface
93 #define EC_IOCTL_REQUEST EC_IO(0x21)
94 #define EC_IOCTL_CREATE_DOMAIN EC_IO(0x22)
95 #define EC_IOCTL_CREATE_SLAVE_CONFIG EC_IOWR(0x23, ec_ioctl_config_t)
96 #define EC_IOCTL_SELECT_REF_CLOCK EC_IOW(0x24, uint32_t)
97 #define EC_IOCTL_ACTIVATE EC_IOR(0x25, ec_ioctl_master_activate_t)
98 #define EC_IOCTL_DEACTIVATE EC_IO(0x26)
99 #define EC_IOCTL_SEND EC_IO(0x27)
100 #define EC_IOCTL_RECEIVE EC_IO(0x28)
101 #define EC_IOCTL_MASTER_STATE EC_IOR(0x29, ec_master_state_t)
102 #define EC_IOCTL_MASTER_LINK_STATE EC_IOWR(0x2a, ec_ioctl_link_state_t)
103 #define EC_IOCTL_APP_TIME EC_IOW(0x2b, uint64_t)
104 #define EC_IOCTL_SYNC_REF EC_IO(0x2c)
105 #define EC_IOCTL_SYNC_REF_TO EC_IOW(0x2d, uint64_t)
106 #define EC_IOCTL_SYNC_SLAVES EC_IO(0x2e)
107 #define EC_IOCTL_REF_CLOCK_TIME EC_IOR(0x2f, uint32_t)
108 #define EC_IOCTL_SYNC_MON_QUEUE EC_IO(0x30)
109 #define EC_IOCTL_SYNC_MON_PROCESS EC_IOR(0x31, uint32_t)
110 #define EC_IOCTL_RESET EC_IO(0x32)
111 #define EC_IOCTL_SC_SYNC EC_IOW(0x33, ec_ioctl_config_t)
112 #define EC_IOCTL_SC_WATCHDOG EC_IOW(0x34, ec_ioctl_config_t)
113 #define EC_IOCTL_SC_ADD_PDO EC_IOW(0x35, ec_ioctl_config_pdo_t)
114 #define EC_IOCTL_SC_CLEAR_PDOS EC_IOW(0x36, ec_ioctl_config_pdo_t)
115 #define EC_IOCTL_SC_ADD_ENTRY EC_IOW(0x37, ec_ioctl_add_pdo_entry_t)
116 #define EC_IOCTL_SC_CLEAR_ENTRIES EC_IOW(0x38, ec_ioctl_config_pdo_t)
117 #define EC_IOCTL_SC_REG_PDO_ENTRY EC_IOWR(0x39, ec_ioctl_reg_pdo_entry_t)
118 #define EC_IOCTL_SC_REG_PDO_POS EC_IOWR(0x3a, ec_ioctl_reg_pdo_pos_t)
119 #define EC_IOCTL_SC_DC EC_IOW(0x3b, ec_ioctl_config_t)
120 #define EC_IOCTL_SC_SDO EC_IOW(0x3c, ec_ioctl_sc_sdo_t)
121 #define EC_IOCTL_SC_EMERG_SIZE EC_IOW(0x3d, ec_ioctl_sc_emerg_t)
122 #define EC_IOCTL_SC_EMERG_POP EC_IOWR(0x3e, ec_ioctl_sc_emerg_t)
123 #define EC_IOCTL_SC_EMERG_CLEAR EC_IOW(0x3f, ec_ioctl_sc_emerg_t)
124 #define EC_IOCTL_SC_EMERG_OVERRUNS EC_IOWR(0x40, ec_ioctl_sc_emerg_t)
125 #define EC_IOCTL_SC_SDO_REQUEST EC_IOWR(0x41, ec_ioctl_sdo_request_t)
126 #define EC_IOCTL_SC_SOE_REQUEST EC_IOWR(0x42, ec_ioctl_soe_request_t)
127 #define EC_IOCTL_SC_REG_REQUEST EC_IOWR(0x43, ec_ioctl_reg_request_t)
128 #define EC_IOCTL_SC_VOE EC_IOWR(0x44, ec_ioctl_voe_t)
129 #define EC_IOCTL_SC_STATE EC_IOWR(0x45, ec_ioctl_sc_state_t)
130 #define EC_IOCTL_SC_IDN EC_IOW(0x46, ec_ioctl_sc_idn_t)
131 #define EC_IOCTL_SC_FLAG EC_IOW(0x47, ec_ioctl_sc_flag_t)
132 #ifdef EC_EOE
133 #define EC_IOCTL_SC_EOE_IP_PARAM EC_IOW(0x48, ec_ioctl_eoe_ip_t)
134 #endif
135 #define EC_IOCTL_SC_STATE_TIMEOUT EC_IOW(0x49, ec_ioctl_sc_state_timeout_t)
136 #define EC_IOCTL_DOMAIN_SIZE EC_IO(0x4a)
137 #define EC_IOCTL_DOMAIN_OFFSET EC_IO(0x4b)
138 #define EC_IOCTL_DOMAIN_PROCESS EC_IO(0x4c)
139 #define EC_IOCTL_DOMAIN_QUEUE EC_IO(0x4d)
140 #define EC_IOCTL_DOMAIN_STATE EC_IOWR(0x4e, ec_ioctl_domain_state_t)
141 #define EC_IOCTL_SDO_REQUEST_INDEX EC_IOWR(0x4f, ec_ioctl_sdo_request_t)
142 #define EC_IOCTL_SDO_REQUEST_TIMEOUT EC_IOWR(0x50, ec_ioctl_sdo_request_t)
143 #define EC_IOCTL_SDO_REQUEST_STATE EC_IOWR(0x51, ec_ioctl_sdo_request_t)
144 #define EC_IOCTL_SDO_REQUEST_READ EC_IOWR(0x52, ec_ioctl_sdo_request_t)
145 #define EC_IOCTL_SDO_REQUEST_WRITE EC_IOWR(0x53, ec_ioctl_sdo_request_t)
146 #define EC_IOCTL_SDO_REQUEST_DATA EC_IOWR(0x54, ec_ioctl_sdo_request_t)
147 #define EC_IOCTL_SOE_REQUEST_IDN EC_IOWR(0x55, ec_ioctl_soe_request_t)
148 #define EC_IOCTL_SOE_REQUEST_TIMEOUT EC_IOWR(0x56, ec_ioctl_soe_request_t)
149 #define EC_IOCTL_SOE_REQUEST_STATE EC_IOWR(0x57, ec_ioctl_soe_request_t)
150 #define EC_IOCTL_SOE_REQUEST_READ EC_IOWR(0x58, ec_ioctl_soe_request_t)
151 #define EC_IOCTL_SOE_REQUEST_WRITE EC_IOWR(0x59, ec_ioctl_soe_request_t)
152 #define EC_IOCTL_SOE_REQUEST_DATA EC_IOWR(0x5a, ec_ioctl_soe_request_t)
153 #define EC_IOCTL_REG_REQUEST_DATA EC_IOWR(0x5b, ec_ioctl_reg_request_t)
154 #define EC_IOCTL_REG_REQUEST_STATE EC_IOWR(0x5c, ec_ioctl_reg_request_t)
155 #define EC_IOCTL_REG_REQUEST_WRITE EC_IOWR(0x5d, ec_ioctl_reg_request_t)
156 #define EC_IOCTL_REG_REQUEST_READ EC_IOWR(0x5e, ec_ioctl_reg_request_t)
157 #define EC_IOCTL_VOE_SEND_HEADER EC_IOW(0x5f, ec_ioctl_voe_t)
158 #define EC_IOCTL_VOE_REC_HEADER EC_IOWR(0x60, ec_ioctl_voe_t)
159 #define EC_IOCTL_VOE_READ EC_IOW(0x61, ec_ioctl_voe_t)
160 #define EC_IOCTL_VOE_READ_NOSYNC EC_IOW(0x62, ec_ioctl_voe_t)
161 #define EC_IOCTL_VOE_WRITE EC_IOWR(0x63, ec_ioctl_voe_t)
162 #define EC_IOCTL_VOE_EXEC EC_IOWR(0x64, ec_ioctl_voe_t)
163 #define EC_IOCTL_VOE_DATA EC_IOWR(0x65, ec_ioctl_voe_t)
164 #define EC_IOCTL_SET_SEND_INTERVAL EC_IOW(0x66, size_t)
165 #define EC_IOCTL_SII_CACHING EC_IOW(0x67, uint32_t)
166 #define EC_IOCTL_SC_PDO_MODE EC_IOW(0x68, ec_ioctl_config_t)
167 // NOLINTEND
168 
169 /****************************************************************************/
170 
171 #define EC_IOCTL_STRING_SIZE 64
172 
173 /****************************************************************************/
174 
175 typedef struct {
176  uint32_t ioctl_version_magic;
177  uint32_t master_count;
178 } ec_ioctl_module_t;
179 
180 /****************************************************************************/
181 
182 typedef struct {
183  uint32_t slave_count;
184  uint32_t scan_index;
185  uint32_t config_count;
186  uint32_t domain_count;
187  uint32_t eoe_handler_count;
188  uint8_t phase;
189  uint8_t active;
190  uint8_t scan_busy;
191  struct ec_ioctl_device {
192  uint8_t address[6];
193  uint8_t attached;
194  uint8_t link_state;
195  uint64_t tx_count;
196  uint64_t rx_count;
197  uint64_t tx_bytes;
198  uint64_t rx_bytes;
199  uint64_t tx_errors;
200  int32_t tx_frame_rates[EC_RATE_COUNT];
201  int32_t rx_frame_rates[EC_RATE_COUNT];
202  int32_t tx_byte_rates[EC_RATE_COUNT];
203  int32_t rx_byte_rates[EC_RATE_COUNT];
204  } devices[EC_MAX_NUM_DEVICES];
205  uint32_t num_devices;
206  uint64_t tx_count;
207  uint64_t rx_count;
208  uint64_t tx_bytes;
209  uint64_t rx_bytes;
210  int32_t tx_frame_rates[EC_RATE_COUNT];
211  int32_t rx_frame_rates[EC_RATE_COUNT];
212  int32_t tx_byte_rates[EC_RATE_COUNT];
213  int32_t rx_byte_rates[EC_RATE_COUNT];
214  int32_t loss_rates[EC_RATE_COUNT];
215  uint64_t app_time;
216  uint64_t dc_ref_time;
217  uint16_t ref_clock;
218  uint32_t sii_caching;
219 } ec_ioctl_master_t;
220 
221 /****************************************************************************/
222 
223 typedef struct {
224  // input
225  uint16_t position;
226 
227  // outputs
228  unsigned int device_index;
229  uint32_t vendor_id;
230  uint32_t product_code;
231  uint32_t revision_number;
232  uint32_t serial_number;
233  uint16_t alias;
234  uint16_t boot_rx_mailbox_offset;
235  uint16_t boot_rx_mailbox_size;
236  uint16_t boot_tx_mailbox_offset;
237  uint16_t boot_tx_mailbox_size;
238  uint16_t std_rx_mailbox_offset;
239  uint16_t std_rx_mailbox_size;
240  uint16_t std_tx_mailbox_offset;
241  uint16_t std_tx_mailbox_size;
242  uint16_t mailbox_protocols;
243  uint8_t has_general_category;
244  ec_sii_coe_details_t coe_details;
245  ec_sii_general_flags_t general_flags;
246  int16_t current_on_ebus;
247  struct {
250  uint32_t receive_time;
251  uint16_t next_slave;
252  uint32_t delay_to_next_dc;
253  } ports[EC_MAX_PORTS];
254  uint8_t fmmu_bit;
255  uint8_t dc_supported;
256  ec_slave_dc_range_t dc_range;
257  uint8_t has_dc_system_time;
258  uint32_t transmission_delay;
259  uint8_t al_state;
260  uint8_t error_flag;
261  uint8_t sync_count;
262  uint16_t sdo_count;
263  uint32_t sii_nwords;
264  uint32_t sii_parallel_words;
265  char group[EC_IOCTL_STRING_SIZE];
266  char image[EC_IOCTL_STRING_SIZE];
267  char order[EC_IOCTL_STRING_SIZE];
268  char name[EC_IOCTL_STRING_SIZE];
269 } ec_ioctl_slave_t;
270 
271 /****************************************************************************/
272 
273 typedef struct {
274  // inputs
275  uint16_t slave_position;
276  uint32_t sync_index;
277 
278  // outputs
279  uint16_t physical_start_address;
280  uint16_t default_size;
281  uint8_t control_register;
282  uint8_t enable;
283  uint8_t pdo_count;
284 } ec_ioctl_slave_sync_t;
285 
286 /****************************************************************************/
287 
288 typedef struct {
289  // inputs
290  uint16_t slave_position;
291  uint32_t sync_index;
292  uint32_t pdo_pos;
293 
294  // outputs
295  uint16_t index;
296  uint8_t entry_count;
297  int8_t name[EC_IOCTL_STRING_SIZE];
298 } ec_ioctl_slave_sync_pdo_t;
299 
300 /****************************************************************************/
301 
302 typedef struct {
303  // inputs
304  uint16_t slave_position;
305  uint32_t sync_index;
306  uint32_t pdo_pos;
307  uint32_t entry_pos;
308 
309  // outputs
310  uint16_t index;
311  uint8_t subindex;
312  uint8_t bit_length;
313  int8_t name[EC_IOCTL_STRING_SIZE];
314 } ec_ioctl_slave_sync_pdo_entry_t;
315 
316 /****************************************************************************/
317 
318 typedef struct {
319  // inputs
320  uint32_t index;
321 
322  // outputs
323  uint32_t data_size;
324  uint32_t logical_base_address;
325  uint16_t working_counter[EC_MAX_NUM_DEVICES];
326  uint16_t expected_working_counter;
327  uint32_t fmmu_count;
328 } ec_ioctl_domain_t;
329 
330 /****************************************************************************/
331 
332 typedef struct {
333  // inputs
334  uint32_t domain_index;
335  uint32_t fmmu_index;
336 
337  // outputs
338  uint16_t slave_config_alias;
339  uint16_t slave_config_position;
340  uint8_t sync_index;
341  ec_direction_t dir;
342  uint32_t logical_address;
343  uint32_t data_size;
344 } ec_ioctl_domain_fmmu_t;
345 
346 /****************************************************************************/
347 
348 typedef struct {
349  // inputs
350  uint32_t domain_index;
351  uint32_t data_size;
352  uint8_t *target;
353 } ec_ioctl_domain_data_t;
354 
355 /****************************************************************************/
356 
357 typedef struct {
358  // inputs
359  uint16_t slave_position;
360  uint8_t al_state;
361 } ec_ioctl_slave_state_t;
362 
363 /****************************************************************************/
364 
365 typedef struct {
366  // inputs
367  uint16_t slave_position;
368  uint16_t sdo_position;
369 
370  // outputs
371  uint16_t sdo_index;
372  uint8_t max_subindex;
373  int8_t name[EC_IOCTL_STRING_SIZE];
374 } ec_ioctl_slave_sdo_t;
375 
376 /****************************************************************************/
377 
378 typedef struct {
379  // inputs
380  uint16_t slave_position;
381  int sdo_spec; // positive: index, negative: list position
382  uint8_t sdo_entry_subindex;
383 
384  // outputs
385  uint16_t data_type;
386  uint16_t bit_length;
387  uint8_t read_access[EC_SDO_ENTRY_ACCESS_COUNT];
388  uint8_t write_access[EC_SDO_ENTRY_ACCESS_COUNT];
389  int8_t description[EC_IOCTL_STRING_SIZE];
390 } ec_ioctl_slave_sdo_entry_t;
391 
392 /****************************************************************************/
393 
394 typedef struct {
395  // inputs
396  uint16_t slave_position;
397  uint16_t sdo_index;
398  uint8_t sdo_entry_subindex;
399  size_t target_size;
400  uint8_t *target;
401 
402  // outputs
403  size_t data_size;
404  uint32_t abort_code;
405 } ec_ioctl_slave_sdo_upload_t;
406 
407 /****************************************************************************/
408 
409 typedef struct {
410  // inputs
411  uint16_t slave_position;
412  uint16_t sdo_index;
413  uint8_t sdo_entry_subindex;
414  uint8_t complete_access;
415  size_t data_size;
416  uint8_t *data;
417 
418  // outputs
419  uint32_t abort_code;
420 } ec_ioctl_slave_sdo_download_t;
421 
422 /****************************************************************************/
423 
424 typedef struct {
425  // inputs
426  uint16_t slave_position;
427  uint16_t offset;
428  uint32_t nwords;
429  uint16_t *words;
430 } ec_ioctl_slave_sii_t;
431 
432 /****************************************************************************/
433 
434 typedef struct {
435  // inputs
436  uint16_t slave_position;
437  uint8_t emergency;
438  uint16_t address;
439  size_t size;
440  uint8_t *data;
441 } ec_ioctl_slave_reg_t;
442 
443 /****************************************************************************/
444 
445 typedef struct {
446  // inputs
447  uint16_t slave_position;
448  uint16_t offset;
449  size_t buffer_size;
450  uint8_t *buffer;
451 
452  // outputs
453  size_t data_size;
454  uint32_t result;
455  uint32_t error_code;
456  char file_name[32];
457 } ec_ioctl_slave_foe_t;
458 
459 /****************************************************************************/
460 
461 typedef struct {
462  // inputs
463  uint16_t slave_position;
464  uint8_t drive_no;
465  uint16_t idn;
466  size_t mem_size;
467  uint8_t *data;
468 
469  // outputs
470  size_t data_size;
471  uint16_t error_code;
472 } ec_ioctl_slave_soe_read_t;
473 
474 /****************************************************************************/
475 
476 typedef struct {
477  // inputs
478  uint16_t slave_position;
479  uint8_t drive_no;
480  uint16_t idn;
481  size_t data_size;
482  uint8_t *data;
483 
484  // outputs
485  uint16_t error_code;
486 } ec_ioctl_slave_soe_write_t;
487 
488 /****************************************************************************/
489 
490 typedef struct {
491  // inputs
492  uint32_t config_index;
493 
494  // outputs
495  uint16_t alias;
496  uint16_t position;
497  uint32_t vendor_id;
498  uint32_t product_code;
499  struct {
500  ec_direction_t dir;
501  ec_watchdog_mode_t watchdog_mode;
502  uint32_t pdo_count;
503  uint8_t config_this;
504  } syncs[EC_MAX_SYNC_MANAGERS];
505  uint16_t watchdog_divider;
506  uint16_t watchdog_intervals;
507  ec_pdo_mode_t pdo_assign_mode;
508  ec_pdo_mode_t pdo_config_mode;
509  uint32_t sdo_count;
510  uint32_t idn_count;
511  uint32_t flag_count;
512  int32_t slave_position;
513  uint16_t dc_assign_activate;
515 } ec_ioctl_config_t;
516 
517 /****************************************************************************/
518 
519 typedef struct {
520  // inputs
521  uint32_t config_index;
522  uint8_t sync_index;
523  uint16_t pdo_pos;
524 
525  // outputs
526  uint16_t index;
527  uint8_t entry_count;
528  int8_t name[EC_IOCTL_STRING_SIZE];
529 } ec_ioctl_config_pdo_t;
530 
531 /****************************************************************************/
532 
533 typedef struct {
534  // inputs
535  uint32_t config_index;
536  uint8_t sync_index;
537  uint16_t pdo_pos;
538  uint8_t entry_pos;
539 
540  // outputs
541  uint16_t index;
542  uint8_t subindex;
543  uint8_t bit_length;
544  int8_t name[EC_IOCTL_STRING_SIZE];
545 } ec_ioctl_config_pdo_entry_t;
546 
547 /****************************************************************************/
548 
552 #define EC_MAX_SDO_DATA_SIZE 1024
553 
554 typedef struct {
555  // inputs
556  uint32_t config_index;
557  uint32_t sdo_pos;
558 
559  // outputs
560  uint16_t index;
561  uint8_t subindex;
562  size_t size;
563  uint8_t data[EC_MAX_SDO_DATA_SIZE];
564  uint8_t complete_access;
565 } ec_ioctl_config_sdo_t;
566 
567 /****************************************************************************/
568 
572 #define EC_MAX_IDN_DATA_SIZE 1024
573 
574 typedef struct {
575  // inputs
576  uint32_t config_index;
577  uint32_t idn_pos;
578 
579  // outputs
580  uint8_t drive_no;
581  uint16_t idn;
582  ec_al_state_t state;
583  size_t size;
584  uint8_t data[EC_MAX_IDN_DATA_SIZE];
585 } ec_ioctl_config_idn_t;
586 
587 /****************************************************************************/
588 
591 #define EC_MAX_FLAG_KEY_SIZE 128
592 
593 typedef struct {
594  // inputs
595  uint32_t config_index;
596  uint32_t flag_pos;
597 
598  // outputs
599  char key[EC_MAX_FLAG_KEY_SIZE];
600  int32_t value;
601 } ec_ioctl_config_flag_t;
602 
603 /****************************************************************************/
604 
605 #ifdef EC_EOE
606 
607 typedef struct {
608  // input
609  uint16_t eoe_index;
610 
611  // outputs
612  char name[EC_DATAGRAM_NAME_SIZE];
613  uint16_t slave_position;
614  uint8_t open;
615  uint32_t rx_bytes;
616  uint32_t rx_rate;
617  uint32_t tx_bytes;
618  uint32_t tx_rate;
619  uint32_t tx_queued_frames;
620  uint32_t tx_queue_size;
621 } ec_ioctl_eoe_handler_t;
622 
623 #endif
624 
625 /****************************************************************************/
626 
627 #define EC_ETH_ALEN 6
628 #ifdef ETH_ALEN
629 #if ETH_ALEN != EC_ETH_ALEN
630 #error Ethernet address length mismatch
631 #endif
632 #endif
633 
634 typedef struct {
635  // input
636  uint16_t slave_position;
637  uint16_t config_index; // alternatively
638 
639  uint8_t mac_address_included;
640  uint8_t ip_address_included;
641  uint8_t subnet_mask_included;
642  uint8_t gateway_included;
643  uint8_t dns_included;
644  uint8_t name_included;
645 
646  unsigned char mac_address[EC_ETH_ALEN];
647  struct in_addr ip_address;
648  struct in_addr subnet_mask;
649  struct in_addr gateway;
650  struct in_addr dns;
651  char name[EC_MAX_HOSTNAME_SIZE];
652 
653  // output
654  uint16_t result;
655 } ec_ioctl_eoe_ip_t;
656 
657 /****************************************************************************/
658 
659 typedef struct {
660  // outputs
661  void *process_data;
662  size_t process_data_size;
663 } ec_ioctl_master_activate_t;
664 
665 /****************************************************************************/
666 
667 typedef struct {
668  // inputs
669  uint32_t config_index;
670  uint16_t pdo_index;
671  uint16_t entry_index;
672  uint8_t entry_subindex;
673  uint8_t entry_bit_length;
674 } ec_ioctl_add_pdo_entry_t;
675 
676 /****************************************************************************/
677 
678 typedef struct {
679  // inputs
680  uint32_t config_index;
681  uint16_t entry_index;
682  uint8_t entry_subindex;
683  uint32_t domain_index;
684 
685  // outputs
686  unsigned int bit_position;
687 } ec_ioctl_reg_pdo_entry_t;
688 
689 /****************************************************************************/
690 
691 typedef struct {
692  // inputs
693  uint32_t config_index;
694  uint32_t sync_index;
695  uint32_t pdo_pos;
696  uint32_t entry_pos;
697  uint32_t domain_index;
698 
699  // outputs
700  unsigned int bit_position;
701 } ec_ioctl_reg_pdo_pos_t;
702 
703 /****************************************************************************/
704 
705 typedef struct {
706  // inputs
707  uint32_t config_index;
708  uint16_t index;
709  uint8_t subindex;
710  const uint8_t *data;
711  size_t size;
712  uint8_t complete_access;
713 } ec_ioctl_sc_sdo_t;
714 
715 /****************************************************************************/
716 
717 typedef struct {
718  // inputs
719  uint32_t config_index;
720  size_t size;
721  uint8_t *target;
722 
723  // outputs
724  int32_t overruns;
725 } ec_ioctl_sc_emerg_t;
726 
727 /****************************************************************************/
728 
729 typedef struct {
730  // inputs
731  uint32_t config_index;
732 
733  // outputs
735 } ec_ioctl_sc_state_t;
736 
737 /****************************************************************************/
738 
739 typedef struct {
740  // inputs
741  uint32_t config_index;
742  uint8_t drive_no;
743  uint16_t idn;
744  ec_al_state_t al_state;
745  const uint8_t *data;
746  size_t size;
747 } ec_ioctl_sc_idn_t;
748 
749 /****************************************************************************/
750 
751 typedef struct {
752  // inputs
753  uint32_t config_index;
754  size_t key_size;
755  char *key;
756  int32_t value;
757 } ec_ioctl_sc_flag_t;
758 
759 /****************************************************************************/
760 
761 typedef struct {
762  // inputs
763  uint32_t config_index;
764  ec_al_state_t from_state;
765  ec_al_state_t to_state;
766  uint32_t timeout_ms;
767 } ec_ioctl_sc_state_timeout_t;
768 
769 /****************************************************************************/
770 
771 typedef struct {
772  // inputs
773  uint32_t domain_index;
774 
775  // outputs
776  ec_domain_state_t *state;
777 } ec_ioctl_domain_state_t;
778 
779 /****************************************************************************/
780 
781 typedef struct {
782  // inputs
783  uint32_t config_index;
784 
785  // inputs/outputs
786  uint32_t request_index;
787  uint16_t sdo_index;
788  uint8_t sdo_subindex;
789  size_t size;
790  uint8_t *data;
791  uint32_t timeout;
792  ec_request_state_t state;
793 } ec_ioctl_sdo_request_t;
794 
795 /****************************************************************************/
796 
797 typedef struct {
798  // inputs
799  uint32_t config_index;
800 
801  // inputs/outputs
802  uint32_t request_index;
803  uint8_t drive_no;
804  uint16_t idn;
805  size_t size;
806  uint8_t *data;
807  uint32_t timeout;
808  ec_request_state_t state;
809 } ec_ioctl_soe_request_t;
810 
811 /****************************************************************************/
812 
813 typedef struct {
814  // inputs
815  uint32_t config_index;
816  size_t mem_size;
817 
818  // inputs/outputs
819  uint32_t request_index;
820  uint8_t *data;
821  ec_request_state_t state;
822  uint8_t new_data;
823  uint16_t address;
824  size_t transfer_size;
825 } ec_ioctl_reg_request_t;
826 
827 /****************************************************************************/
828 
829 typedef struct {
830  // inputs
831  uint32_t config_index;
832 
833  // inputs/outputs
834  uint32_t voe_index;
835  uint32_t *vendor_id;
836  uint16_t *vendor_type;
837  size_t size;
838  uint8_t *data;
839  ec_request_state_t state;
840 } ec_ioctl_voe_t;
841 
842 /****************************************************************************/
843 
844 typedef struct {
845  // inputs
846  uint32_t dev_idx;
847 
848  // outputs
849  ec_master_link_state_t *state;
850 } ec_ioctl_link_state_t;
851 
852 /****************************************************************************/
853 
854 #ifdef __KERNEL__
855 
858 typedef struct {
859  unsigned int writable;
860  unsigned int requested;
861  uint8_t *process_data;
862  size_t process_data_size;
863 } ec_ioctl_context_t;
864 
865 long ec_ioctl(ec_master_t *, ec_ioctl_context_t *, unsigned int,
866  void __user *);
867 
868 #ifdef EC_RTDM
869 
870 long ec_ioctl_rtdm_rt(ec_master_t *, ec_ioctl_context_t *, unsigned int,
871  void __user *);
872 long ec_ioctl_rtdm_nrt(ec_master_t *, ec_ioctl_context_t *, unsigned int,
873  void __user *);
874 
875 #ifndef EC_RTDM_XENOMAI_V3
876 int ec_rtdm_mmap(ec_ioctl_context_t *, void **);
877 #endif
878 
879 #endif
880 
881 #endif
882 
883 /****************************************************************************/
884 
887 #endif
Slave information interface general flags.
Definition: globals.h:171
#define EC_DATAGRAM_NAME_SIZE
Size of the datagram description string.
Definition: globals.h:110
ec_pdo_mode_t
PDO handling mode.
Definition: ecrt.h:551
ec_watchdog_mode_t
Watchdog mode for sync manager configuration.
Definition: ecrt.h:535
ec_slave_port_desc_t
EtherCAT slave port descriptor.
Definition: ecrt.h:444
ec_al_state_t
Application-layer state.
Definition: ecrt.h:669
#define EC_RATE_COUNT
Number of statistic rate intervals to maintain.
Definition: globals.h:60
static unsigned int sii_caching
SII Caching mode.
Definition: module.c:59
#define EC_MAX_HOSTNAME_SIZE
Maximum hostname size.
Definition: globals.h:116
Global definitions and macros.
Slave configuration state.
Definition: ecrt.h:394
Slave information interface CANopen over EtherCAT details flags.
Definition: globals.h:160
Domain state.
Definition: ecrt.h:512
static unsigned int master_count
Number of masters.
Definition: module.c:52
ec_direction_t
Direction type for PDO assignment functions.
Definition: ecrt.h:522
long ec_ioctl(ec_master_t *master, ec_ioctl_context_t *ctx, unsigned int cmd, void *arg)
Called when an ioctl() command is issued.
Definition: ioctl.c:5043
ec_slave_dc_range_t
EtherCAT slave distributed clocks range.
Definition: globals.h:178
int ec_rtdm_mmap(ec_ioctl_context_t *ioctl_ctx, void **user_address)
Memory-map process data to user space.
Definition: rtdm.c:238
#define EC_MAX_PORTS
Maximum number of slave ports.
Definition: ecrt.h:294
EtherCAT slave sync signal configuration.
Definition: globals.h:185
ec_request_state_t
Request state.
Definition: ecrt.h:658
EtherCAT master.
Definition: master.h:187
#define EC_MAX_SYNC_MANAGERS
Maximum number of sync managers per slave.
Definition: ecrt.h:285
#define EC_SYNC_SIGNAL_COUNT
Number of DC sync signals.
Definition: globals.h:104
Number of states.
Definition: globals.h:198