IgH EtherCAT Master  1.5.2
ioctl.h
Go to the documentation of this file.
1 /******************************************************************************
2  *
3  * Copyright (C) 2006-2021 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 31
51 
52 // Command-line tool
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)
83 #ifdef EC_EOE
84 #define EC_IOCTL_EOE_HANDLER EC_IOWR(0x1e, ec_ioctl_eoe_handler_t)
85 #endif
86 
87 // Application interface
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)
149 
150 /*****************************************************************************/
151 
152 #define EC_IOCTL_STRING_SIZE 64
153 
154 /*****************************************************************************/
155 
156 typedef struct {
157  uint32_t ioctl_version_magic;
158  uint32_t master_count;
159 } ec_ioctl_module_t;
160 
161 /*****************************************************************************/
162 
163 typedef struct {
164  uint32_t slave_count;
165  uint32_t config_count;
166  uint32_t domain_count;
167 #ifdef EC_EOE
168  uint32_t eoe_handler_count;
169 #endif
170  uint8_t phase;
171  uint8_t active;
172  uint8_t scan_busy;
173  struct ec_ioctl_device {
174  uint8_t address[6];
175  uint8_t attached;
176  uint8_t link_state;
177  uint64_t tx_count;
178  uint64_t rx_count;
179  uint64_t tx_bytes;
180  uint64_t rx_bytes;
181  uint64_t tx_errors;
182  int32_t tx_frame_rates[EC_RATE_COUNT];
183  int32_t rx_frame_rates[EC_RATE_COUNT];
184  int32_t tx_byte_rates[EC_RATE_COUNT];
185  int32_t rx_byte_rates[EC_RATE_COUNT];
186  } devices[EC_MAX_NUM_DEVICES];
187  uint32_t num_devices;
188  uint64_t tx_count;
189  uint64_t rx_count;
190  uint64_t tx_bytes;
191  uint64_t rx_bytes;
192  int32_t tx_frame_rates[EC_RATE_COUNT];
193  int32_t rx_frame_rates[EC_RATE_COUNT];
194  int32_t tx_byte_rates[EC_RATE_COUNT];
195  int32_t rx_byte_rates[EC_RATE_COUNT];
196  int32_t loss_rates[EC_RATE_COUNT];
197  uint64_t app_time;
198  uint64_t dc_ref_time;
199  uint16_t ref_clock;
200 } ec_ioctl_master_t;
201 
202 /*****************************************************************************/
203 
204 typedef struct {
205  // input
206  uint16_t position;
207 
208  // outputs
209  unsigned int device_index;
210  uint32_t vendor_id;
211  uint32_t product_code;
212  uint32_t revision_number;
213  uint32_t serial_number;
214  uint16_t alias;
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;
225  ec_sii_coe_details_t coe_details;
226  ec_sii_general_flags_t general_flags;
227  int16_t current_on_ebus;
228  struct {
231  uint32_t receive_time;
232  uint16_t next_slave;
233  uint32_t delay_to_next_dc;
234  } ports[EC_MAX_PORTS];
235  uint8_t fmmu_bit;
236  uint8_t dc_supported;
237  ec_slave_dc_range_t dc_range;
238  uint8_t has_dc_system_time;
239  uint32_t transmission_delay;
240  uint8_t al_state;
241  uint8_t error_flag;
242  uint8_t sync_count;
243  uint16_t sdo_count;
244  uint32_t sii_nwords;
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];
249 } ec_ioctl_slave_t;
250 
251 /*****************************************************************************/
252 
253 typedef struct {
254  // inputs
255  uint16_t slave_position;
256  uint32_t sync_index;
257 
258  // outputs
259  uint16_t physical_start_address;
260  uint16_t default_size;
261  uint8_t control_register;
262  uint8_t enable;
263  uint8_t pdo_count;
264 } ec_ioctl_slave_sync_t;
265 
266 /*****************************************************************************/
267 
268 typedef struct {
269  // inputs
270  uint16_t slave_position;
271  uint32_t sync_index;
272  uint32_t pdo_pos;
273 
274  // outputs
275  uint16_t index;
276  uint8_t entry_count;
277  int8_t name[EC_IOCTL_STRING_SIZE];
278 } ec_ioctl_slave_sync_pdo_t;
279 
280 /*****************************************************************************/
281 
282 typedef struct {
283  // inputs
284  uint16_t slave_position;
285  uint32_t sync_index;
286  uint32_t pdo_pos;
287  uint32_t entry_pos;
288 
289  // outputs
290  uint16_t index;
291  uint8_t subindex;
292  uint8_t bit_length;
293  int8_t name[EC_IOCTL_STRING_SIZE];
294 } ec_ioctl_slave_sync_pdo_entry_t;
295 
296 /*****************************************************************************/
297 
298 typedef struct {
299  // inputs
300  uint32_t index;
301 
302  // outputs
303  uint32_t data_size;
304  uint32_t logical_base_address;
305  uint16_t working_counter[EC_MAX_NUM_DEVICES];
306  uint16_t expected_working_counter;
307  uint32_t fmmu_count;
308 } ec_ioctl_domain_t;
309 
310 /*****************************************************************************/
311 
312 typedef struct {
313  // inputs
314  uint32_t domain_index;
315  uint32_t fmmu_index;
316 
317  // outputs
318  uint16_t slave_config_alias;
319  uint16_t slave_config_position;
320  uint8_t sync_index;
321  ec_direction_t dir;
322  uint32_t logical_address;
323  uint32_t data_size;
324 } ec_ioctl_domain_fmmu_t;
325 
326 /*****************************************************************************/
327 
328 typedef struct {
329  // inputs
330  uint32_t domain_index;
331  uint32_t data_size;
332  uint8_t *target;
333 } ec_ioctl_domain_data_t;
334 
335 /*****************************************************************************/
336 
337 typedef struct {
338  // inputs
339  uint16_t slave_position;
340  uint8_t al_state;
341 } ec_ioctl_slave_state_t;
342 
343 /*****************************************************************************/
344 
345 typedef struct {
346  // inputs
347  uint16_t slave_position;
348  uint16_t sdo_position;
349 
350  // outputs
351  uint16_t sdo_index;
352  uint8_t max_subindex;
353  int8_t name[EC_IOCTL_STRING_SIZE];
354 } ec_ioctl_slave_sdo_t;
355 
356 /*****************************************************************************/
357 
358 typedef struct {
359  // inputs
360  uint16_t slave_position;
361  int sdo_spec; // positive: index, negative: list position
362  uint8_t sdo_entry_subindex;
363 
364  // outputs
365  uint16_t data_type;
366  uint16_t bit_length;
367  uint8_t read_access[EC_SDO_ENTRY_ACCESS_COUNT];
368  uint8_t write_access[EC_SDO_ENTRY_ACCESS_COUNT];
369  int8_t description[EC_IOCTL_STRING_SIZE];
370 } ec_ioctl_slave_sdo_entry_t;
371 
372 /*****************************************************************************/
373 
374 typedef struct {
375  // inputs
376  uint16_t slave_position;
377  uint16_t sdo_index;
378  uint8_t sdo_entry_subindex;
379  size_t target_size;
380  uint8_t *target;
381 
382  // outputs
383  size_t data_size;
384  uint32_t abort_code;
385 } ec_ioctl_slave_sdo_upload_t;
386 
387 /*****************************************************************************/
388 
389 typedef struct {
390  // inputs
391  uint16_t slave_position;
392  uint16_t sdo_index;
393  uint8_t sdo_entry_subindex;
394  uint8_t complete_access;
395  size_t data_size;
396  uint8_t *data;
397 
398  // outputs
399  uint32_t abort_code;
400 } ec_ioctl_slave_sdo_download_t;
401 
402 /*****************************************************************************/
403 
404 typedef struct {
405  // inputs
406  uint16_t slave_position;
407  uint16_t offset;
408  uint32_t nwords;
409  uint16_t *words;
410 } ec_ioctl_slave_sii_t;
411 
412 /*****************************************************************************/
413 
414 typedef struct {
415  // inputs
416  uint16_t slave_position;
417  uint8_t emergency;
418  uint16_t address;
419  size_t size;
420  uint8_t *data;
421 } ec_ioctl_slave_reg_t;
422 
423 /*****************************************************************************/
424 
425 typedef struct {
426  // inputs
427  uint16_t slave_position;
428  uint16_t offset;
429  size_t buffer_size;
430  uint8_t *buffer;
431 
432  // outputs
433  size_t data_size;
434  uint32_t result;
435  uint32_t error_code;
436  char file_name[32];
437 } ec_ioctl_slave_foe_t;
438 
439 /*****************************************************************************/
440 
441 typedef struct {
442  // inputs
443  uint16_t slave_position;
444  uint8_t drive_no;
445  uint16_t idn;
446  size_t mem_size;
447  uint8_t *data;
448 
449  // outputs
450  size_t data_size;
451  uint16_t error_code;
452 } ec_ioctl_slave_soe_read_t;
453 
454 /*****************************************************************************/
455 
456 typedef struct {
457  // inputs
458  uint16_t slave_position;
459  uint8_t drive_no;
460  uint16_t idn;
461  size_t data_size;
462  uint8_t *data;
463 
464  // outputs
465  uint16_t error_code;
466 } ec_ioctl_slave_soe_write_t;
467 
468 /*****************************************************************************/
469 
470 typedef struct {
471  // inputs
472  uint32_t config_index;
473 
474  // outputs
475  uint16_t alias;
476  uint16_t position;
477  uint32_t vendor_id;
478  uint32_t product_code;
479  struct {
480  ec_direction_t dir;
481  ec_watchdog_mode_t watchdog_mode;
482  uint32_t pdo_count;
483  uint8_t config_this;
484  } syncs[EC_MAX_SYNC_MANAGERS];
485  uint16_t watchdog_divider;
486  uint16_t watchdog_intervals;
487  uint32_t sdo_count;
488  uint32_t idn_count;
489  uint32_t flag_count;
490  int32_t slave_position;
491  uint16_t dc_assign_activate;
493 } ec_ioctl_config_t;
494 
495 /*****************************************************************************/
496 
497 typedef struct {
498  // inputs
499  uint32_t config_index;
500  uint8_t sync_index;
501  uint16_t pdo_pos;
502 
503  // outputs
504  uint16_t index;
505  uint8_t entry_count;
506  int8_t name[EC_IOCTL_STRING_SIZE];
507 } ec_ioctl_config_pdo_t;
508 
509 /*****************************************************************************/
510 
511 typedef struct {
512  // inputs
513  uint32_t config_index;
514  uint8_t sync_index;
515  uint16_t pdo_pos;
516  uint8_t entry_pos;
517 
518  // outputs
519  uint16_t index;
520  uint8_t subindex;
521  uint8_t bit_length;
522  int8_t name[EC_IOCTL_STRING_SIZE];
523 } ec_ioctl_config_pdo_entry_t;
524 
525 /*****************************************************************************/
526 
530 #define EC_MAX_SDO_DATA_SIZE 1024
531 
532 typedef struct {
533  // inputs
534  uint32_t config_index;
535  uint32_t sdo_pos;
536 
537  // outputs
538  uint16_t index;
539  uint8_t subindex;
540  size_t size;
541  uint8_t data[EC_MAX_SDO_DATA_SIZE];
542  uint8_t complete_access;
543 } ec_ioctl_config_sdo_t;
544 
545 /*****************************************************************************/
546 
550 #define EC_MAX_IDN_DATA_SIZE 1024
551 
552 typedef struct {
553  // inputs
554  uint32_t config_index;
555  uint32_t idn_pos;
556 
557  // outputs
558  uint8_t drive_no;
559  uint16_t idn;
560  ec_al_state_t state;
561  size_t size;
562  uint8_t data[EC_MAX_IDN_DATA_SIZE];
563 } ec_ioctl_config_idn_t;
564 
565 /*****************************************************************************/
566 
569 #define EC_MAX_FLAG_KEY_SIZE 128
570 
571 typedef struct {
572  // inputs
573  uint32_t config_index;
574  uint32_t flag_pos;
575 
576  // outputs
577  char key[EC_MAX_FLAG_KEY_SIZE];
578  int32_t value;
579 } ec_ioctl_config_flag_t;
580 
581 /*****************************************************************************/
582 
583 #ifdef EC_EOE
584 
585 typedef struct {
586  // input
587  uint16_t eoe_index;
588 
589  // outputs
590  char name[EC_DATAGRAM_NAME_SIZE];
591  uint16_t slave_position;
592  uint8_t open;
593  uint32_t rx_bytes;
594  uint32_t rx_rate;
595  uint32_t tx_bytes;
596  uint32_t tx_rate;
597  uint32_t tx_queued_frames;
598  uint32_t tx_queue_size;
599 } ec_ioctl_eoe_handler_t;
600 
601 #endif
602 
603 /*****************************************************************************/
604 
605 typedef struct {
606  // outputs
607  void *process_data;
608  size_t process_data_size;
609 } ec_ioctl_master_activate_t;
610 
611 /*****************************************************************************/
612 
613 typedef struct {
614  // inputs
615  uint32_t config_index;
616  uint16_t pdo_index;
617  uint16_t entry_index;
618  uint8_t entry_subindex;
619  uint8_t entry_bit_length;
620 } ec_ioctl_add_pdo_entry_t;
621 
622 /*****************************************************************************/
623 
624 typedef struct {
625  // inputs
626  uint32_t config_index;
627  uint16_t entry_index;
628  uint8_t entry_subindex;
629  uint32_t domain_index;
630 
631  // outputs
632  unsigned int bit_position;
633 } ec_ioctl_reg_pdo_entry_t;
634 
635 /*****************************************************************************/
636 
637 typedef struct {
638  // inputs
639  uint32_t config_index;
640  uint32_t sync_index;
641  uint32_t pdo_pos;
642  uint32_t entry_pos;
643  uint32_t domain_index;
644 
645  // outputs
646  unsigned int bit_position;
647 } ec_ioctl_reg_pdo_pos_t;
648 
649 /*****************************************************************************/
650 
651 typedef struct {
652  // inputs
653  uint32_t config_index;
654  uint16_t index;
655  uint8_t subindex;
656  const uint8_t *data;
657  size_t size;
658  uint8_t complete_access;
659 } ec_ioctl_sc_sdo_t;
660 
661 /*****************************************************************************/
662 
663 typedef struct {
664  // inputs
665  uint32_t config_index;
666  size_t size;
667  uint8_t *target;
668 
669  // outputs
670  int32_t overruns;
671 } ec_ioctl_sc_emerg_t;
672 
673 /*****************************************************************************/
674 
675 typedef struct {
676  // inputs
677  uint32_t config_index;
678 
679  // outputs
681 } ec_ioctl_sc_state_t;
682 
683 /*****************************************************************************/
684 
685 typedef struct {
686  // inputs
687  uint32_t config_index;
688  uint8_t drive_no;
689  uint16_t idn;
690  ec_al_state_t al_state;
691  const uint8_t *data;
692  size_t size;
693 } ec_ioctl_sc_idn_t;
694 
695 /*****************************************************************************/
696 
697 typedef struct {
698  // inputs
699  uint32_t config_index;
700  size_t key_size;
701  char *key;
702  int32_t value;
703 } ec_ioctl_sc_flag_t;
704 
705 /*****************************************************************************/
706 
707 typedef struct {
708  // inputs
709  uint32_t domain_index;
710 
711  // outputs
712  ec_domain_state_t *state;
713 } ec_ioctl_domain_state_t;
714 
715 /*****************************************************************************/
716 
717 typedef struct {
718  // inputs
719  uint32_t config_index;
720 
721  // inputs/outputs
722  uint32_t request_index;
723  uint16_t sdo_index;
724  uint8_t sdo_subindex;
725  size_t size;
726  uint8_t *data;
727  uint32_t timeout;
728  ec_request_state_t state;
729 } ec_ioctl_sdo_request_t;
730 
731 /*****************************************************************************/
732 
733 typedef struct {
734  // inputs
735  uint32_t config_index;
736  size_t mem_size;
737 
738  // inputs/outputs
739  uint32_t request_index;
740  uint8_t *data;
741  ec_request_state_t state;
742  uint8_t new_data;
743  uint16_t address;
744  size_t transfer_size;
745 } ec_ioctl_reg_request_t;
746 
747 /*****************************************************************************/
748 
749 typedef struct {
750  // inputs
751  uint32_t config_index;
752 
753  // inputs/outputs
754  uint32_t voe_index;
755  uint32_t *vendor_id;
756  uint16_t *vendor_type;
757  size_t size;
758  uint8_t *data;
759  ec_request_state_t state;
760 } ec_ioctl_voe_t;
761 
762 /*****************************************************************************/
763 
764 typedef struct {
765  // inputs
766  uint32_t dev_idx;
767 
768  // outputs
769  ec_master_link_state_t *state;
770 } ec_ioctl_link_state_t;
771 
772 /*****************************************************************************/
773 
774 #ifdef __KERNEL__
775 
778 typedef struct {
779  unsigned int writable;
780  unsigned int requested;
781  uint8_t *process_data;
782  size_t process_data_size;
783 } ec_ioctl_context_t;
784 
785 long ec_ioctl(ec_master_t *, ec_ioctl_context_t *, unsigned int,
786  void __user *);
787 
788 #ifdef EC_RTDM
789 
790 long ec_ioctl_rtdm(ec_master_t *, ec_ioctl_context_t *, unsigned int,
791  void __user *);
792 int ec_rtdm_mmap(ec_ioctl_context_t *, void **);
793 
794 #endif
795 
796 #endif
797 
798 /*****************************************************************************/
799 
802 #endif
Slave information interface general flags.
Definition: globals.h:156
#define EC_DATAGRAM_NAME_SIZE
Size of the datagram description string.
Definition: globals.h:104
ec_watchdog_mode_t
Watchdog mode for sync manager configuration.
Definition: ecrt.h:443
ec_slave_port_desc_t
EtherCAT slave port descriptor.
Definition: ecrt.h:352
ec_al_state_t
Application-layer state.
Definition: ecrt.h:541
#define EC_RATE_COUNT
Number of statistic rate intervals to maintain.
Definition: globals.h:60
Global definitions and macros.
Slave configuration state.
Definition: ecrt.h:319
Slave information interface CANopen over EtherCAT details flags.
Definition: globals.h:145
Domain state.
Definition: ecrt.h:420
static unsigned int master_count
Number of masters.
Definition: module.c:58
ec_direction_t
Direction type for PDO assignment functions.
Definition: ecrt.h:430
ec_slave_dc_range_t
EtherCAT slave distributed clocks range.
Definition: globals.h:163
int ec_rtdm_mmap(ec_ioctl_context_t *ioctl_ctx, void **user_address)
Memory-map process data to user space.
Definition: rtdm.c:220
#define EC_MAX_PORTS
Maximum number of slave ports.
Definition: ecrt.h:222
EtherCAT slave sync signal configuration.
Definition: globals.h:171
Number of states.
Definition: globals.h:184
ec_request_state_t
Request state.
Definition: ecrt.h:530
EtherCAT master.
Definition: master.h:194
#define EC_MAX_SYNC_MANAGERS
Maximum number of sync managers per slave.
Definition: ecrt.h:213
#define EC_SYNC_SIGNAL_COUNT
Number of DC sync signals.
Definition: globals.h:98