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