IgH EtherCAT Master  1.6.0
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 35
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 #ifdef EC_EOE
78 #define EC_IOCTL_SLAVE_EOE_IP_PARAM EC_IOW(0x18, ec_ioctl_slave_eoe_ip_t)
79 #endif
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)
86 #ifdef EC_EOE
87 #define EC_IOCTL_EOE_HANDLER EC_IOWR(0x1f, ec_ioctl_eoe_handler_t)
88 #endif
89 
90 // Application interface
91 #define EC_IOCTL_REQUEST EC_IO(0x20)
92 #define EC_IOCTL_CREATE_DOMAIN EC_IO(0x21)
93 #define EC_IOCTL_CREATE_SLAVE_CONFIG EC_IOWR(0x22, ec_ioctl_config_t)
94 #define EC_IOCTL_SELECT_REF_CLOCK EC_IOW(0x23, uint32_t)
95 #define EC_IOCTL_ACTIVATE EC_IOR(0x24, ec_ioctl_master_activate_t)
96 #define EC_IOCTL_DEACTIVATE EC_IO(0x25)
97 #define EC_IOCTL_SEND EC_IO(0x26)
98 #define EC_IOCTL_RECEIVE EC_IO(0x27)
99 #define EC_IOCTL_MASTER_STATE EC_IOR(0x28, ec_master_state_t)
100 #define EC_IOCTL_MASTER_LINK_STATE EC_IOWR(0x29, ec_ioctl_link_state_t)
101 #define EC_IOCTL_APP_TIME EC_IOW(0x2a, uint64_t)
102 #define EC_IOCTL_SYNC_REF EC_IO(0x2b)
103 #define EC_IOCTL_SYNC_REF_TO EC_IOW(0x2c, uint64_t)
104 #define EC_IOCTL_SYNC_SLAVES EC_IO(0x2d)
105 #define EC_IOCTL_REF_CLOCK_TIME EC_IOR(0x2e, uint32_t)
106 #define EC_IOCTL_SYNC_MON_QUEUE EC_IO(0x2f)
107 #define EC_IOCTL_SYNC_MON_PROCESS EC_IOR(0x30, uint32_t)
108 #define EC_IOCTL_RESET EC_IO(0x31)
109 #define EC_IOCTL_SC_SYNC EC_IOW(0x32, ec_ioctl_config_t)
110 #define EC_IOCTL_SC_WATCHDOG EC_IOW(0x33, ec_ioctl_config_t)
111 #define EC_IOCTL_SC_ADD_PDO EC_IOW(0x34, ec_ioctl_config_pdo_t)
112 #define EC_IOCTL_SC_CLEAR_PDOS EC_IOW(0x35, ec_ioctl_config_pdo_t)
113 #define EC_IOCTL_SC_ADD_ENTRY EC_IOW(0x36, ec_ioctl_add_pdo_entry_t)
114 #define EC_IOCTL_SC_CLEAR_ENTRIES EC_IOW(0x37, ec_ioctl_config_pdo_t)
115 #define EC_IOCTL_SC_REG_PDO_ENTRY EC_IOWR(0x38, ec_ioctl_reg_pdo_entry_t)
116 #define EC_IOCTL_SC_REG_PDO_POS EC_IOWR(0x39, ec_ioctl_reg_pdo_pos_t)
117 #define EC_IOCTL_SC_DC EC_IOW(0x3a, ec_ioctl_config_t)
118 #define EC_IOCTL_SC_SDO EC_IOW(0x3b, ec_ioctl_sc_sdo_t)
119 #define EC_IOCTL_SC_EMERG_SIZE EC_IOW(0x3c, ec_ioctl_sc_emerg_t)
120 #define EC_IOCTL_SC_EMERG_POP EC_IOWR(0x3d, ec_ioctl_sc_emerg_t)
121 #define EC_IOCTL_SC_EMERG_CLEAR EC_IOW(0x3e, ec_ioctl_sc_emerg_t)
122 #define EC_IOCTL_SC_EMERG_OVERRUNS EC_IOWR(0x3f, ec_ioctl_sc_emerg_t)
123 #define EC_IOCTL_SC_SDO_REQUEST EC_IOWR(0x40, ec_ioctl_sdo_request_t)
124 #define EC_IOCTL_SC_SOE_REQUEST EC_IOWR(0x41, ec_ioctl_soe_request_t)
125 #define EC_IOCTL_SC_REG_REQUEST EC_IOWR(0x42, ec_ioctl_reg_request_t)
126 #define EC_IOCTL_SC_VOE EC_IOWR(0x43, ec_ioctl_voe_t)
127 #define EC_IOCTL_SC_STATE EC_IOWR(0x44, ec_ioctl_sc_state_t)
128 #define EC_IOCTL_SC_IDN EC_IOW(0x45, ec_ioctl_sc_idn_t)
129 #define EC_IOCTL_SC_FLAG EC_IOW(0x46, ec_ioctl_sc_flag_t)
130 #define EC_IOCTL_DOMAIN_SIZE EC_IO(0x47)
131 #define EC_IOCTL_DOMAIN_OFFSET EC_IO(0x48)
132 #define EC_IOCTL_DOMAIN_PROCESS EC_IO(0x49)
133 #define EC_IOCTL_DOMAIN_QUEUE EC_IO(0x4a)
134 #define EC_IOCTL_DOMAIN_STATE EC_IOWR(0x4b, ec_ioctl_domain_state_t)
135 #define EC_IOCTL_SDO_REQUEST_INDEX EC_IOWR(0x4c, ec_ioctl_sdo_request_t)
136 #define EC_IOCTL_SDO_REQUEST_TIMEOUT EC_IOWR(0x4d, ec_ioctl_sdo_request_t)
137 #define EC_IOCTL_SDO_REQUEST_STATE EC_IOWR(0x4e, ec_ioctl_sdo_request_t)
138 #define EC_IOCTL_SDO_REQUEST_READ EC_IOWR(0x4f, ec_ioctl_sdo_request_t)
139 #define EC_IOCTL_SDO_REQUEST_WRITE EC_IOWR(0x50, ec_ioctl_sdo_request_t)
140 #define EC_IOCTL_SDO_REQUEST_DATA EC_IOWR(0x51, ec_ioctl_sdo_request_t)
141 #define EC_IOCTL_SOE_REQUEST_IDN EC_IOWR(0x52, ec_ioctl_soe_request_t)
142 #define EC_IOCTL_SOE_REQUEST_TIMEOUT EC_IOWR(0x53, ec_ioctl_soe_request_t)
143 #define EC_IOCTL_SOE_REQUEST_STATE EC_IOWR(0x54, ec_ioctl_soe_request_t)
144 #define EC_IOCTL_SOE_REQUEST_READ EC_IOWR(0x55, ec_ioctl_soe_request_t)
145 #define EC_IOCTL_SOE_REQUEST_WRITE EC_IOWR(0x56, ec_ioctl_soe_request_t)
146 #define EC_IOCTL_SOE_REQUEST_DATA EC_IOWR(0x57, ec_ioctl_soe_request_t)
147 #define EC_IOCTL_REG_REQUEST_DATA EC_IOWR(0x58, ec_ioctl_reg_request_t)
148 #define EC_IOCTL_REG_REQUEST_STATE EC_IOWR(0x59, ec_ioctl_reg_request_t)
149 #define EC_IOCTL_REG_REQUEST_WRITE EC_IOWR(0x5a, ec_ioctl_reg_request_t)
150 #define EC_IOCTL_REG_REQUEST_READ EC_IOWR(0x5b, ec_ioctl_reg_request_t)
151 #define EC_IOCTL_VOE_SEND_HEADER EC_IOW(0x5c, ec_ioctl_voe_t)
152 #define EC_IOCTL_VOE_REC_HEADER EC_IOWR(0x5d, ec_ioctl_voe_t)
153 #define EC_IOCTL_VOE_READ EC_IOW(0x5e, ec_ioctl_voe_t)
154 #define EC_IOCTL_VOE_READ_NOSYNC EC_IOW(0x5f, ec_ioctl_voe_t)
155 #define EC_IOCTL_VOE_WRITE EC_IOWR(0x60, ec_ioctl_voe_t)
156 #define EC_IOCTL_VOE_EXEC EC_IOWR(0x61, ec_ioctl_voe_t)
157 #define EC_IOCTL_VOE_DATA EC_IOWR(0x62, ec_ioctl_voe_t)
158 #define EC_IOCTL_SET_SEND_INTERVAL EC_IOW(0x63, size_t)
159 
160 /****************************************************************************/
161 
162 #define EC_IOCTL_STRING_SIZE 64
163 
164 /****************************************************************************/
165 
166 typedef struct {
167  uint32_t ioctl_version_magic;
168  uint32_t master_count;
169 } ec_ioctl_module_t;
170 
171 /****************************************************************************/
172 
173 typedef struct {
174  uint32_t slave_count;
175  uint32_t scan_index;
176  uint32_t config_count;
177  uint32_t domain_count;
178  uint32_t eoe_handler_count;
179  uint8_t phase;
180  uint8_t active;
181  uint8_t scan_busy;
182  struct ec_ioctl_device {
183  uint8_t address[6];
184  uint8_t attached;
185  uint8_t link_state;
186  uint64_t tx_count;
187  uint64_t rx_count;
188  uint64_t tx_bytes;
189  uint64_t rx_bytes;
190  uint64_t tx_errors;
191  int32_t tx_frame_rates[EC_RATE_COUNT];
192  int32_t rx_frame_rates[EC_RATE_COUNT];
193  int32_t tx_byte_rates[EC_RATE_COUNT];
194  int32_t rx_byte_rates[EC_RATE_COUNT];
195  } devices[EC_MAX_NUM_DEVICES];
196  uint32_t num_devices;
197  uint64_t tx_count;
198  uint64_t rx_count;
199  uint64_t tx_bytes;
200  uint64_t rx_bytes;
201  int32_t tx_frame_rates[EC_RATE_COUNT];
202  int32_t rx_frame_rates[EC_RATE_COUNT];
203  int32_t tx_byte_rates[EC_RATE_COUNT];
204  int32_t rx_byte_rates[EC_RATE_COUNT];
205  int32_t loss_rates[EC_RATE_COUNT];
206  uint64_t app_time;
207  uint64_t dc_ref_time;
208  uint16_t ref_clock;
209 } ec_ioctl_master_t;
210 
211 /****************************************************************************/
212 
213 typedef struct {
214  // input
215  uint16_t position;
216 
217  // outputs
218  unsigned int device_index;
219  uint32_t vendor_id;
220  uint32_t product_code;
221  uint32_t revision_number;
222  uint32_t serial_number;
223  uint16_t alias;
224  uint16_t boot_rx_mailbox_offset;
225  uint16_t boot_rx_mailbox_size;
226  uint16_t boot_tx_mailbox_offset;
227  uint16_t boot_tx_mailbox_size;
228  uint16_t std_rx_mailbox_offset;
229  uint16_t std_rx_mailbox_size;
230  uint16_t std_tx_mailbox_offset;
231  uint16_t std_tx_mailbox_size;
232  uint16_t mailbox_protocols;
233  uint8_t has_general_category;
234  ec_sii_coe_details_t coe_details;
235  ec_sii_general_flags_t general_flags;
236  int16_t current_on_ebus;
237  struct {
240  uint32_t receive_time;
241  uint16_t next_slave;
242  uint32_t delay_to_next_dc;
243  } ports[EC_MAX_PORTS];
244  uint8_t fmmu_bit;
245  uint8_t dc_supported;
246  ec_slave_dc_range_t dc_range;
247  uint8_t has_dc_system_time;
248  uint32_t transmission_delay;
249  uint8_t al_state;
250  uint8_t error_flag;
251  uint8_t sync_count;
252  uint16_t sdo_count;
253  uint32_t sii_nwords;
254  char group[EC_IOCTL_STRING_SIZE];
255  char image[EC_IOCTL_STRING_SIZE];
256  char order[EC_IOCTL_STRING_SIZE];
257  char name[EC_IOCTL_STRING_SIZE];
258 } ec_ioctl_slave_t;
259 
260 /****************************************************************************/
261 
262 typedef struct {
263  // inputs
264  uint16_t slave_position;
265  uint32_t sync_index;
266 
267  // outputs
268  uint16_t physical_start_address;
269  uint16_t default_size;
270  uint8_t control_register;
271  uint8_t enable;
272  uint8_t pdo_count;
273 } ec_ioctl_slave_sync_t;
274 
275 /****************************************************************************/
276 
277 typedef struct {
278  // inputs
279  uint16_t slave_position;
280  uint32_t sync_index;
281  uint32_t pdo_pos;
282 
283  // outputs
284  uint16_t index;
285  uint8_t entry_count;
286  int8_t name[EC_IOCTL_STRING_SIZE];
287 } ec_ioctl_slave_sync_pdo_t;
288 
289 /****************************************************************************/
290 
291 typedef struct {
292  // inputs
293  uint16_t slave_position;
294  uint32_t sync_index;
295  uint32_t pdo_pos;
296  uint32_t entry_pos;
297 
298  // outputs
299  uint16_t index;
300  uint8_t subindex;
301  uint8_t bit_length;
302  int8_t name[EC_IOCTL_STRING_SIZE];
303 } ec_ioctl_slave_sync_pdo_entry_t;
304 
305 /****************************************************************************/
306 
307 typedef struct {
308  // inputs
309  uint32_t index;
310 
311  // outputs
312  uint32_t data_size;
313  uint32_t logical_base_address;
314  uint16_t working_counter[EC_MAX_NUM_DEVICES];
315  uint16_t expected_working_counter;
316  uint32_t fmmu_count;
317 } ec_ioctl_domain_t;
318 
319 /****************************************************************************/
320 
321 typedef struct {
322  // inputs
323  uint32_t domain_index;
324  uint32_t fmmu_index;
325 
326  // outputs
327  uint16_t slave_config_alias;
328  uint16_t slave_config_position;
329  uint8_t sync_index;
330  ec_direction_t dir;
331  uint32_t logical_address;
332  uint32_t data_size;
333 } ec_ioctl_domain_fmmu_t;
334 
335 /****************************************************************************/
336 
337 typedef struct {
338  // inputs
339  uint32_t domain_index;
340  uint32_t data_size;
341  uint8_t *target;
342 } ec_ioctl_domain_data_t;
343 
344 /****************************************************************************/
345 
346 typedef struct {
347  // inputs
348  uint16_t slave_position;
349  uint8_t al_state;
350 } ec_ioctl_slave_state_t;
351 
352 /****************************************************************************/
353 
354 typedef struct {
355  // inputs
356  uint16_t slave_position;
357  uint16_t sdo_position;
358 
359  // outputs
360  uint16_t sdo_index;
361  uint8_t max_subindex;
362  int8_t name[EC_IOCTL_STRING_SIZE];
363 } ec_ioctl_slave_sdo_t;
364 
365 /****************************************************************************/
366 
367 typedef struct {
368  // inputs
369  uint16_t slave_position;
370  int sdo_spec; // positive: index, negative: list position
371  uint8_t sdo_entry_subindex;
372 
373  // outputs
374  uint16_t data_type;
375  uint16_t bit_length;
376  uint8_t read_access[EC_SDO_ENTRY_ACCESS_COUNT];
377  uint8_t write_access[EC_SDO_ENTRY_ACCESS_COUNT];
378  int8_t description[EC_IOCTL_STRING_SIZE];
379 } ec_ioctl_slave_sdo_entry_t;
380 
381 /****************************************************************************/
382 
383 typedef struct {
384  // inputs
385  uint16_t slave_position;
386  uint16_t sdo_index;
387  uint8_t sdo_entry_subindex;
388  size_t target_size;
389  uint8_t *target;
390 
391  // outputs
392  size_t data_size;
393  uint32_t abort_code;
394 } ec_ioctl_slave_sdo_upload_t;
395 
396 /****************************************************************************/
397 
398 typedef struct {
399  // inputs
400  uint16_t slave_position;
401  uint16_t sdo_index;
402  uint8_t sdo_entry_subindex;
403  uint8_t complete_access;
404  size_t data_size;
405  uint8_t *data;
406 
407  // outputs
408  uint32_t abort_code;
409 } ec_ioctl_slave_sdo_download_t;
410 
411 /****************************************************************************/
412 
413 typedef struct {
414  // inputs
415  uint16_t slave_position;
416  uint16_t offset;
417  uint32_t nwords;
418  uint16_t *words;
419 } ec_ioctl_slave_sii_t;
420 
421 /****************************************************************************/
422 
423 typedef struct {
424  // inputs
425  uint16_t slave_position;
426  uint8_t emergency;
427  uint16_t address;
428  size_t size;
429  uint8_t *data;
430 } ec_ioctl_slave_reg_t;
431 
432 /****************************************************************************/
433 
434 typedef struct {
435  // inputs
436  uint16_t slave_position;
437  uint16_t offset;
438  size_t buffer_size;
439  uint8_t *buffer;
440 
441  // outputs
442  size_t data_size;
443  uint32_t result;
444  uint32_t error_code;
445  char file_name[32];
446 } ec_ioctl_slave_foe_t;
447 
448 /****************************************************************************/
449 
450 typedef struct {
451  // inputs
452  uint16_t slave_position;
453  uint8_t drive_no;
454  uint16_t idn;
455  size_t mem_size;
456  uint8_t *data;
457 
458  // outputs
459  size_t data_size;
460  uint16_t error_code;
461 } ec_ioctl_slave_soe_read_t;
462 
463 /****************************************************************************/
464 
465 typedef struct {
466  // inputs
467  uint16_t slave_position;
468  uint8_t drive_no;
469  uint16_t idn;
470  size_t data_size;
471  uint8_t *data;
472 
473  // outputs
474  uint16_t error_code;
475 } ec_ioctl_slave_soe_write_t;
476 
477 /****************************************************************************/
478 
479 typedef struct {
480  // inputs
481  uint32_t config_index;
482 
483  // outputs
484  uint16_t alias;
485  uint16_t position;
486  uint32_t vendor_id;
487  uint32_t product_code;
488  struct {
489  ec_direction_t dir;
490  ec_watchdog_mode_t watchdog_mode;
491  uint32_t pdo_count;
492  uint8_t config_this;
493  } syncs[EC_MAX_SYNC_MANAGERS];
494  uint16_t watchdog_divider;
495  uint16_t watchdog_intervals;
496  uint32_t sdo_count;
497  uint32_t idn_count;
498  uint32_t flag_count;
499  int32_t slave_position;
500  uint16_t dc_assign_activate;
502 } ec_ioctl_config_t;
503 
504 /****************************************************************************/
505 
506 typedef struct {
507  // inputs
508  uint32_t config_index;
509  uint8_t sync_index;
510  uint16_t pdo_pos;
511 
512  // outputs
513  uint16_t index;
514  uint8_t entry_count;
515  int8_t name[EC_IOCTL_STRING_SIZE];
516 } ec_ioctl_config_pdo_t;
517 
518 /****************************************************************************/
519 
520 typedef struct {
521  // inputs
522  uint32_t config_index;
523  uint8_t sync_index;
524  uint16_t pdo_pos;
525  uint8_t entry_pos;
526 
527  // outputs
528  uint16_t index;
529  uint8_t subindex;
530  uint8_t bit_length;
531  int8_t name[EC_IOCTL_STRING_SIZE];
532 } ec_ioctl_config_pdo_entry_t;
533 
534 /****************************************************************************/
535 
539 #define EC_MAX_SDO_DATA_SIZE 1024
540 
541 typedef struct {
542  // inputs
543  uint32_t config_index;
544  uint32_t sdo_pos;
545 
546  // outputs
547  uint16_t index;
548  uint8_t subindex;
549  size_t size;
550  uint8_t data[EC_MAX_SDO_DATA_SIZE];
551  uint8_t complete_access;
552 } ec_ioctl_config_sdo_t;
553 
554 /****************************************************************************/
555 
559 #define EC_MAX_IDN_DATA_SIZE 1024
560 
561 typedef struct {
562  // inputs
563  uint32_t config_index;
564  uint32_t idn_pos;
565 
566  // outputs
567  uint8_t drive_no;
568  uint16_t idn;
569  ec_al_state_t state;
570  size_t size;
571  uint8_t data[EC_MAX_IDN_DATA_SIZE];
572 } ec_ioctl_config_idn_t;
573 
574 /****************************************************************************/
575 
578 #define EC_MAX_FLAG_KEY_SIZE 128
579 
580 typedef struct {
581  // inputs
582  uint32_t config_index;
583  uint32_t flag_pos;
584 
585  // outputs
586  char key[EC_MAX_FLAG_KEY_SIZE];
587  int32_t value;
588 } ec_ioctl_config_flag_t;
589 
590 /****************************************************************************/
591 
592 #ifdef EC_EOE
593 
594 typedef struct {
595  // input
596  uint16_t eoe_index;
597 
598  // outputs
599  char name[EC_DATAGRAM_NAME_SIZE];
600  uint16_t slave_position;
601  uint8_t open;
602  uint32_t rx_bytes;
603  uint32_t rx_rate;
604  uint32_t tx_bytes;
605  uint32_t tx_rate;
606  uint32_t tx_queued_frames;
607  uint32_t tx_queue_size;
608 } ec_ioctl_eoe_handler_t;
609 
610 #endif
611 
612 /****************************************************************************/
613 
614 #define EC_ETH_ALEN 6
615 #ifdef ETH_ALEN
616 #if ETH_ALEN != EC_ETH_ALEN
617 #error Ethernet address length mismatch
618 #endif
619 #endif
620 
621 typedef struct {
622  // input
623  uint16_t slave_position;
624 
625  uint8_t mac_address_included;
626  uint8_t ip_address_included;
627  uint8_t subnet_mask_included;
628  uint8_t gateway_included;
629  uint8_t dns_included;
630  uint8_t name_included;
631 
632  unsigned char mac_address[EC_ETH_ALEN];
633  uint32_t ip_address;
634  uint32_t subnet_mask;
635  uint32_t gateway;
636  uint32_t dns;
637  char name[EC_MAX_HOSTNAME_SIZE];
638 
639  // output
640  uint16_t result;
641 } ec_ioctl_slave_eoe_ip_t;
642 
643 /*****************************************************************************/
644 
645 typedef struct {
646  // outputs
647  void *process_data;
648  size_t process_data_size;
649 } ec_ioctl_master_activate_t;
650 
651 /****************************************************************************/
652 
653 typedef struct {
654  // inputs
655  uint32_t config_index;
656  uint16_t pdo_index;
657  uint16_t entry_index;
658  uint8_t entry_subindex;
659  uint8_t entry_bit_length;
660 } ec_ioctl_add_pdo_entry_t;
661 
662 /****************************************************************************/
663 
664 typedef struct {
665  // inputs
666  uint32_t config_index;
667  uint16_t entry_index;
668  uint8_t entry_subindex;
669  uint32_t domain_index;
670 
671  // outputs
672  unsigned int bit_position;
673 } ec_ioctl_reg_pdo_entry_t;
674 
675 /****************************************************************************/
676 
677 typedef struct {
678  // inputs
679  uint32_t config_index;
680  uint32_t sync_index;
681  uint32_t pdo_pos;
682  uint32_t entry_pos;
683  uint32_t domain_index;
684 
685  // outputs
686  unsigned int bit_position;
687 } ec_ioctl_reg_pdo_pos_t;
688 
689 /****************************************************************************/
690 
691 typedef struct {
692  // inputs
693  uint32_t config_index;
694  uint16_t index;
695  uint8_t subindex;
696  const uint8_t *data;
697  size_t size;
698  uint8_t complete_access;
699 } ec_ioctl_sc_sdo_t;
700 
701 /****************************************************************************/
702 
703 typedef struct {
704  // inputs
705  uint32_t config_index;
706  size_t size;
707  uint8_t *target;
708 
709  // outputs
710  int32_t overruns;
711 } ec_ioctl_sc_emerg_t;
712 
713 /****************************************************************************/
714 
715 typedef struct {
716  // inputs
717  uint32_t config_index;
718 
719  // outputs
721 } ec_ioctl_sc_state_t;
722 
723 /****************************************************************************/
724 
725 typedef struct {
726  // inputs
727  uint32_t config_index;
728  uint8_t drive_no;
729  uint16_t idn;
730  ec_al_state_t al_state;
731  const uint8_t *data;
732  size_t size;
733 } ec_ioctl_sc_idn_t;
734 
735 /****************************************************************************/
736 
737 typedef struct {
738  // inputs
739  uint32_t config_index;
740  size_t key_size;
741  char *key;
742  int32_t value;
743 } ec_ioctl_sc_flag_t;
744 
745 /****************************************************************************/
746 
747 typedef struct {
748  // inputs
749  uint32_t domain_index;
750 
751  // outputs
752  ec_domain_state_t *state;
753 } ec_ioctl_domain_state_t;
754 
755 /****************************************************************************/
756 
757 typedef struct {
758  // inputs
759  uint32_t config_index;
760 
761  // inputs/outputs
762  uint32_t request_index;
763  uint16_t sdo_index;
764  uint8_t sdo_subindex;
765  size_t size;
766  uint8_t *data;
767  uint32_t timeout;
768  ec_request_state_t state;
769 } ec_ioctl_sdo_request_t;
770 
771 /****************************************************************************/
772 
773 typedef struct {
774  // inputs
775  uint32_t config_index;
776 
777  // inputs/outputs
778  uint32_t request_index;
779  uint8_t drive_no;
780  uint16_t idn;
781  size_t size;
782  uint8_t *data;
783  uint32_t timeout;
784  ec_request_state_t state;
785 } ec_ioctl_soe_request_t;
786 
787 /****************************************************************************/
788 
789 typedef struct {
790  // inputs
791  uint32_t config_index;
792  size_t mem_size;
793 
794  // inputs/outputs
795  uint32_t request_index;
796  uint8_t *data;
797  ec_request_state_t state;
798  uint8_t new_data;
799  uint16_t address;
800  size_t transfer_size;
801 } ec_ioctl_reg_request_t;
802 
803 /****************************************************************************/
804 
805 typedef struct {
806  // inputs
807  uint32_t config_index;
808 
809  // inputs/outputs
810  uint32_t voe_index;
811  uint32_t *vendor_id;
812  uint16_t *vendor_type;
813  size_t size;
814  uint8_t *data;
815  ec_request_state_t state;
816 } ec_ioctl_voe_t;
817 
818 /****************************************************************************/
819 
820 typedef struct {
821  // inputs
822  uint32_t dev_idx;
823 
824  // outputs
825  ec_master_link_state_t *state;
826 } ec_ioctl_link_state_t;
827 
828 /****************************************************************************/
829 
830 #ifdef __KERNEL__
831 
834 typedef struct {
835  unsigned int writable;
836  unsigned int requested;
837  uint8_t *process_data;
838  size_t process_data_size;
839 } ec_ioctl_context_t;
840 
841 long ec_ioctl(ec_master_t *, ec_ioctl_context_t *, unsigned int,
842  void __user *);
843 
844 #ifdef EC_RTDM
845 
846 long ec_ioctl_rtdm_rt(ec_master_t *, ec_ioctl_context_t *, unsigned int,
847  void __user *);
848 long ec_ioctl_rtdm_nrt(ec_master_t *, ec_ioctl_context_t *, unsigned int,
849  void __user *);
850 
851 #ifndef EC_RTDM_XENOMAI_V3
852 int ec_rtdm_mmap(ec_ioctl_context_t *, void **);
853 #endif
854 
855 #endif
856 
857 #endif
858 
859 /****************************************************************************/
860 
863 #endif
Slave information interface general flags.
Definition: globals.h:165
#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:514
ec_slave_port_desc_t
EtherCAT slave port descriptor.
Definition: ecrt.h:423
ec_al_state_t
Application-layer state.
Definition: ecrt.h:612
#define EC_RATE_COUNT
Number of statistic rate intervals to maintain.
Definition: globals.h:60
#define EC_MAX_HOSTNAME_SIZE
Maximum hostname size.
Definition: globals.h:110
Global definitions and macros.
Slave configuration state.
Definition: ecrt.h:373
Slave information interface CANopen over EtherCAT details flags.
Definition: globals.h:154
Domain state.
Definition: ecrt.h:491
static unsigned int master_count
Number of masters.
Definition: module.c:50
ec_direction_t
Direction type for PDO assignment functions.
Definition: ecrt.h:501
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:4795
ec_slave_dc_range_t
EtherCAT slave distributed clocks range.
Definition: globals.h:172
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:273
EtherCAT slave sync signal configuration.
Definition: globals.h:180
ec_request_state_t
Request state.
Definition: ecrt.h:601
EtherCAT master.
Definition: master.h:183
#define EC_MAX_SYNC_MANAGERS
Maximum number of sync managers per slave.
Definition: ecrt.h:264
#define EC_SYNC_SIGNAL_COUNT
Number of DC sync signals.
Definition: globals.h:98
Number of states.
Definition: globals.h:193