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