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
156typedef struct {
157 uint32_t ioctl_version_magic;
158 uint32_t master_count;
159} ec_ioctl_module_t;
160
161/*****************************************************************************/
162
163typedef 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
202typedef 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
251typedef 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
266typedef 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
280typedef 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
296typedef 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
310typedef 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
326typedef 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
335typedef struct {
336 // inputs
337 uint16_t slave_position;
338 uint8_t al_state;
339} ec_ioctl_slave_state_t;
340
341/*****************************************************************************/
342
343typedef 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
356typedef 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
372typedef 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
387typedef 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
402typedef 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
412typedef 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
423typedef 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
439typedef 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
454typedef 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
468typedef 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
495typedef 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
509typedef 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
530typedef 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
550typedef 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
569typedef 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
583typedef 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
603typedef struct {
604 // outputs
605 void *process_data;
606 size_t process_data_size;
607} ec_ioctl_master_activate_t;
608
609/*****************************************************************************/
610
611typedef 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
622typedef 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
635typedef 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
649typedef 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
661typedef 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
673typedef struct {
674 // inputs
675 uint32_t config_index;
676
677 // outputs
679} ec_ioctl_sc_state_t;
680
681/*****************************************************************************/
682
683typedef 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
695typedef 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
705typedef 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
715typedef 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
731typedef 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
747typedef 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
762typedef struct {
763 // inputs
764 uint32_t dev_idx;
765
766 // outputs
768} ec_ioctl_link_state_t;
769
770/*****************************************************************************/
771
772#ifdef __KERNEL__
773
776typedef 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
783long ec_ioctl(ec_master_t *, ec_ioctl_context_t *, unsigned int,
784 void __user *);
785
786#ifdef EC_RTDM
787
788long ec_ioctl_rtdm(ec_master_t *, ec_ioctl_context_t *, unsigned int,
789 void __user *);
790int ec_rtdm_mmap(ec_ioctl_context_t *, void **);
791
792#endif
793
794#endif
795
796/*****************************************************************************/
797
800#endif
Global definitions and macros.
#define EC_RATE_COUNT
Number of statistic rate intervals to maintain.
Definition: globals.h:60
ec_slave_dc_range_t
EtherCAT slave distributed clocks range.
Definition: globals.h:163
#define EC_SYNC_SIGNAL_COUNT
Number of DC sync signals.
Definition: globals.h:98
@ EC_SDO_ENTRY_ACCESS_COUNT
Number of states.
Definition: globals.h:184
#define EC_DATAGRAM_NAME_SIZE
Size of the datagram description string.
Definition: globals.h:104
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_MAX_PORTS
Maximum number of slave ports.
Definition: ecrt.h:222
ec_direction_t
Direction type for PDO assignment functions.
Definition: ecrt.h:430
ec_watchdog_mode_t
Watchdog mode for sync manager configuration.
Definition: ecrt.h:443
#define EC_MAX_SYNC_MANAGERS
Maximum number of sync managers per slave.
Definition: ecrt.h:213
ec_request_state_t
Request state.
Definition: ecrt.h:530
static unsigned int master_count
Number of masters.
Definition: module.c:58
int ec_rtdm_mmap(ec_ioctl_context_t *ioctl_ctx, void **user_address)
Memory-map process data to user space.
Definition: rtdm.c:220
Domain state.
Definition: ecrt.h:420
EtherCAT master.
Definition: master.h:194
Slave information interface CANopen over EtherCAT details flags.
Definition: globals.h:145
Slave information interface general flags.
Definition: globals.h:156
Slave configuration state.
Definition: ecrt.h:319
EtherCAT slave sync signal configuration.
Definition: globals.h:171