IgH EtherCAT Master 1.5.2
ioctl.h
Go to the documentation of this file.
1/******************************************************************************
2 *
3 * Copyright (C) 2006-2021 Florian Pose, Ingenieurgemeinschaft IgH
4 *
5 * This file is part of the IgH EtherCAT master.
6 *
7 * The file is free software; you can redistribute it and/or modify it under
8 * the terms of the GNU Lesser General Public License as published by the
9 * Free Software Foundation; version 2.1 of the License.
10 *
11 * This file is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
14 * License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public License
17 * along with this file. If not, see <http://www.gnu.org/licenses/>.
18 *
19 *****************************************************************************/
20
26/*****************************************************************************/
27
28#ifndef __EC_IOCTL_H__
29#define __EC_IOCTL_H__
30
31#include <linux/ioctl.h>
32
33#include "globals.h"
34
35/*****************************************************************************/
36
39#define EC_IOCTL_TYPE 0xa4
40
41#define EC_IO(nr) _IO(EC_IOCTL_TYPE, nr)
42#define EC_IOR(nr, type) _IOR(EC_IOCTL_TYPE, nr, type)
43#define EC_IOW(nr, type) _IOW(EC_IOCTL_TYPE, nr, type)
44#define EC_IOWR(nr, type) _IOWR(EC_IOCTL_TYPE, nr, type)
45
50#define EC_IOCTL_VERSION_MAGIC 31
51
52// Command-line tool
53#define EC_IOCTL_MODULE EC_IOR(0x00, ec_ioctl_module_t)
54#define EC_IOCTL_MASTER EC_IOR(0x01, ec_ioctl_master_t)
55#define EC_IOCTL_SLAVE EC_IOWR(0x02, ec_ioctl_slave_t)
56#define EC_IOCTL_SLAVE_SYNC EC_IOWR(0x03, ec_ioctl_slave_sync_t)
57#define EC_IOCTL_SLAVE_SYNC_PDO EC_IOWR(0x04, ec_ioctl_slave_sync_pdo_t)
58#define EC_IOCTL_SLAVE_SYNC_PDO_ENTRY EC_IOWR(0x05, ec_ioctl_slave_sync_pdo_entry_t)
59#define EC_IOCTL_DOMAIN EC_IOWR(0x06, ec_ioctl_domain_t)
60#define EC_IOCTL_DOMAIN_FMMU EC_IOWR(0x07, ec_ioctl_domain_fmmu_t)
61#define EC_IOCTL_DOMAIN_DATA EC_IOWR(0x08, ec_ioctl_domain_data_t)
62#define EC_IOCTL_MASTER_DEBUG EC_IO(0x09)
63#define EC_IOCTL_MASTER_RESCAN EC_IO(0x0a)
64#define EC_IOCTL_SLAVE_STATE EC_IOW(0x0b, ec_ioctl_slave_state_t)
65#define EC_IOCTL_SLAVE_SDO EC_IOWR(0x0c, ec_ioctl_slave_sdo_t)
66#define EC_IOCTL_SLAVE_SDO_ENTRY EC_IOWR(0x0d, ec_ioctl_slave_sdo_entry_t)
67#define EC_IOCTL_SLAVE_SDO_UPLOAD EC_IOWR(0x0e, ec_ioctl_slave_sdo_upload_t)
68#define EC_IOCTL_SLAVE_SDO_DOWNLOAD EC_IOWR(0x0f, ec_ioctl_slave_sdo_download_t)
69#define EC_IOCTL_SLAVE_SII_READ EC_IOWR(0x10, ec_ioctl_slave_sii_t)
70#define EC_IOCTL_SLAVE_SII_WRITE EC_IOW(0x11, ec_ioctl_slave_sii_t)
71#define EC_IOCTL_SLAVE_REG_READ EC_IOWR(0x12, ec_ioctl_slave_reg_t)
72#define EC_IOCTL_SLAVE_REG_WRITE EC_IOW(0x13, ec_ioctl_slave_reg_t)
73#define EC_IOCTL_SLAVE_FOE_READ EC_IOWR(0x14, ec_ioctl_slave_foe_t)
74#define EC_IOCTL_SLAVE_FOE_WRITE EC_IOW(0x15, ec_ioctl_slave_foe_t)
75#define EC_IOCTL_SLAVE_SOE_READ EC_IOWR(0x16, ec_ioctl_slave_soe_read_t)
76#define EC_IOCTL_SLAVE_SOE_WRITE EC_IOWR(0x17, ec_ioctl_slave_soe_write_t)
77#define EC_IOCTL_CONFIG EC_IOWR(0x18, ec_ioctl_config_t)
78#define EC_IOCTL_CONFIG_PDO EC_IOWR(0x19, ec_ioctl_config_pdo_t)
79#define EC_IOCTL_CONFIG_PDO_ENTRY EC_IOWR(0x1a, ec_ioctl_config_pdo_entry_t)
80#define EC_IOCTL_CONFIG_SDO EC_IOWR(0x1b, ec_ioctl_config_sdo_t)
81#define EC_IOCTL_CONFIG_IDN EC_IOWR(0x1c, ec_ioctl_config_idn_t)
82#define EC_IOCTL_CONFIG_FLAG EC_IOWR(0x1d, ec_ioctl_config_flag_t)
83#ifdef EC_EOE
84#define EC_IOCTL_EOE_HANDLER EC_IOWR(0x1e, ec_ioctl_eoe_handler_t)
85#endif
86
87// Application interface
88#define EC_IOCTL_REQUEST EC_IO(0x1f)
89#define EC_IOCTL_CREATE_DOMAIN EC_IO(0x20)
90#define EC_IOCTL_CREATE_SLAVE_CONFIG EC_IOWR(0x21, ec_ioctl_config_t)
91#define EC_IOCTL_SELECT_REF_CLOCK EC_IOW(0x22, uint32_t)
92#define EC_IOCTL_ACTIVATE EC_IOR(0x23, ec_ioctl_master_activate_t)
93#define EC_IOCTL_DEACTIVATE EC_IO(0x24)
94#define EC_IOCTL_SEND EC_IO(0x25)
95#define EC_IOCTL_RECEIVE EC_IO(0x26)
96#define EC_IOCTL_MASTER_STATE EC_IOR(0x27, ec_master_state_t)
97#define EC_IOCTL_MASTER_LINK_STATE EC_IOWR(0x28, ec_ioctl_link_state_t)
98#define EC_IOCTL_APP_TIME EC_IOW(0x29, uint64_t)
99#define EC_IOCTL_SYNC_REF EC_IO(0x2a)
100#define EC_IOCTL_SYNC_REF_TO EC_IOW(0x2b, uint64_t)
101#define EC_IOCTL_SYNC_SLAVES EC_IO(0x2c)
102#define EC_IOCTL_REF_CLOCK_TIME EC_IOR(0x2d, uint32_t)
103#define EC_IOCTL_SYNC_MON_QUEUE EC_IO(0x2e)
104#define EC_IOCTL_SYNC_MON_PROCESS EC_IOR(0x2f, uint32_t)
105#define EC_IOCTL_RESET EC_IO(0x30)
106#define EC_IOCTL_SC_SYNC EC_IOW(0x31, ec_ioctl_config_t)
107#define EC_IOCTL_SC_WATCHDOG EC_IOW(0x32, ec_ioctl_config_t)
108#define EC_IOCTL_SC_ADD_PDO EC_IOW(0x33, ec_ioctl_config_pdo_t)
109#define EC_IOCTL_SC_CLEAR_PDOS EC_IOW(0x34, ec_ioctl_config_pdo_t)
110#define EC_IOCTL_SC_ADD_ENTRY EC_IOW(0x35, ec_ioctl_add_pdo_entry_t)
111#define EC_IOCTL_SC_CLEAR_ENTRIES EC_IOW(0x36, ec_ioctl_config_pdo_t)
112#define EC_IOCTL_SC_REG_PDO_ENTRY EC_IOWR(0x37, ec_ioctl_reg_pdo_entry_t)
113#define EC_IOCTL_SC_REG_PDO_POS EC_IOWR(0x38, ec_ioctl_reg_pdo_pos_t)
114#define EC_IOCTL_SC_DC EC_IOW(0x39, ec_ioctl_config_t)
115#define EC_IOCTL_SC_SDO EC_IOW(0x3a, ec_ioctl_sc_sdo_t)
116#define EC_IOCTL_SC_EMERG_SIZE EC_IOW(0x3b, ec_ioctl_sc_emerg_t)
117#define EC_IOCTL_SC_EMERG_POP EC_IOWR(0x3c, ec_ioctl_sc_emerg_t)
118#define EC_IOCTL_SC_EMERG_CLEAR EC_IOW(0x3d, ec_ioctl_sc_emerg_t)
119#define EC_IOCTL_SC_EMERG_OVERRUNS EC_IOWR(0x3e, ec_ioctl_sc_emerg_t)
120#define EC_IOCTL_SC_SDO_REQUEST EC_IOWR(0x3f, ec_ioctl_sdo_request_t)
121#define EC_IOCTL_SC_REG_REQUEST EC_IOWR(0x40, ec_ioctl_reg_request_t)
122#define EC_IOCTL_SC_VOE EC_IOWR(0x41, ec_ioctl_voe_t)
123#define EC_IOCTL_SC_STATE EC_IOWR(0x42, ec_ioctl_sc_state_t)
124#define EC_IOCTL_SC_IDN EC_IOW(0x43, ec_ioctl_sc_idn_t)
125#define EC_IOCTL_SC_FLAG EC_IOW(0x44, ec_ioctl_sc_flag_t)
126#define EC_IOCTL_DOMAIN_SIZE EC_IO(0x45)
127#define EC_IOCTL_DOMAIN_OFFSET EC_IO(0x46)
128#define EC_IOCTL_DOMAIN_PROCESS EC_IO(0x47)
129#define EC_IOCTL_DOMAIN_QUEUE EC_IO(0x48)
130#define EC_IOCTL_DOMAIN_STATE EC_IOWR(0x49, ec_ioctl_domain_state_t)
131#define EC_IOCTL_SDO_REQUEST_INDEX EC_IOWR(0x4a, ec_ioctl_sdo_request_t)
132#define EC_IOCTL_SDO_REQUEST_TIMEOUT EC_IOWR(0x4b, ec_ioctl_sdo_request_t)
133#define EC_IOCTL_SDO_REQUEST_STATE EC_IOWR(0x4c, ec_ioctl_sdo_request_t)
134#define EC_IOCTL_SDO_REQUEST_READ EC_IOWR(0x4d, ec_ioctl_sdo_request_t)
135#define EC_IOCTL_SDO_REQUEST_WRITE EC_IOWR(0x4e, ec_ioctl_sdo_request_t)
136#define EC_IOCTL_SDO_REQUEST_DATA EC_IOWR(0x4f, ec_ioctl_sdo_request_t)
137#define EC_IOCTL_REG_REQUEST_DATA EC_IOWR(0x50, ec_ioctl_reg_request_t)
138#define EC_IOCTL_REG_REQUEST_STATE EC_IOWR(0x51, ec_ioctl_reg_request_t)
139#define EC_IOCTL_REG_REQUEST_WRITE EC_IOWR(0x52, ec_ioctl_reg_request_t)
140#define EC_IOCTL_REG_REQUEST_READ EC_IOWR(0x53, ec_ioctl_reg_request_t)
141#define EC_IOCTL_VOE_SEND_HEADER EC_IOW(0x54, ec_ioctl_voe_t)
142#define EC_IOCTL_VOE_REC_HEADER EC_IOWR(0x55, ec_ioctl_voe_t)
143#define EC_IOCTL_VOE_READ EC_IOW(0x56, ec_ioctl_voe_t)
144#define EC_IOCTL_VOE_READ_NOSYNC EC_IOW(0x57, ec_ioctl_voe_t)
145#define EC_IOCTL_VOE_WRITE EC_IOWR(0x58, ec_ioctl_voe_t)
146#define EC_IOCTL_VOE_EXEC EC_IOWR(0x59, ec_ioctl_voe_t)
147#define EC_IOCTL_VOE_DATA EC_IOWR(0x5a, ec_ioctl_voe_t)
148#define EC_IOCTL_SET_SEND_INTERVAL EC_IOW(0x5b, size_t)
149
150/*****************************************************************************/
151
152#define EC_IOCTL_STRING_SIZE 64
153
154/*****************************************************************************/
155
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#ifdef EC_EOE
168 uint32_t eoe_handler_count;
169#endif
170 uint8_t phase;
171 uint8_t active;
172 uint8_t scan_busy;
173 struct ec_ioctl_device {
174 uint8_t address[6];
175 uint8_t attached;
176 uint8_t link_state;
177 uint64_t tx_count;
178 uint64_t rx_count;
179 uint64_t tx_bytes;
180 uint64_t rx_bytes;
181 uint64_t tx_errors;
182 int32_t tx_frame_rates[EC_RATE_COUNT];
183 int32_t rx_frame_rates[EC_RATE_COUNT];
184 int32_t tx_byte_rates[EC_RATE_COUNT];
185 int32_t rx_byte_rates[EC_RATE_COUNT];
186 } devices[EC_MAX_NUM_DEVICES];
187 uint32_t num_devices;
188 uint64_t tx_count;
189 uint64_t rx_count;
190 uint64_t tx_bytes;
191 uint64_t rx_bytes;
192 int32_t tx_frame_rates[EC_RATE_COUNT];
193 int32_t rx_frame_rates[EC_RATE_COUNT];
194 int32_t tx_byte_rates[EC_RATE_COUNT];
195 int32_t rx_byte_rates[EC_RATE_COUNT];
196 int32_t loss_rates[EC_RATE_COUNT];
197 uint64_t app_time;
198 uint64_t dc_ref_time;
199 uint16_t ref_clock;
200} ec_ioctl_master_t;
201
202/*****************************************************************************/
203
204typedef struct {
205 // input
206 uint16_t position;
207
208 // outputs
209 unsigned int device_index;
210 uint32_t vendor_id;
211 uint32_t product_code;
212 uint32_t revision_number;
213 uint32_t serial_number;
214 uint16_t alias;
215 uint16_t boot_rx_mailbox_offset;
216 uint16_t boot_rx_mailbox_size;
217 uint16_t boot_tx_mailbox_offset;
218 uint16_t boot_tx_mailbox_size;
219 uint16_t std_rx_mailbox_offset;
220 uint16_t std_rx_mailbox_size;
221 uint16_t std_tx_mailbox_offset;
222 uint16_t std_tx_mailbox_size;
223 uint16_t mailbox_protocols;
224 uint8_t has_general_category;
225 ec_sii_coe_details_t coe_details;
226 ec_sii_general_flags_t general_flags;
227 int16_t current_on_ebus;
228 struct {
231 uint32_t receive_time;
232 uint16_t next_slave;
233 uint32_t delay_to_next_dc;
234 } ports[EC_MAX_PORTS];
235 uint8_t fmmu_bit;
236 uint8_t dc_supported;
237 ec_slave_dc_range_t dc_range;
238 uint8_t has_dc_system_time;
239 uint32_t transmission_delay;
240 uint8_t al_state;
241 uint8_t error_flag;
242 uint8_t sync_count;
243 uint16_t sdo_count;
244 uint32_t sii_nwords;
245 char group[EC_IOCTL_STRING_SIZE];
246 char image[EC_IOCTL_STRING_SIZE];
247 char order[EC_IOCTL_STRING_SIZE];
248 char name[EC_IOCTL_STRING_SIZE];
249} ec_ioctl_slave_t;
250
251/*****************************************************************************/
252
253typedef struct {
254 // inputs
255 uint16_t slave_position;
256 uint32_t sync_index;
257
258 // outputs
259 uint16_t physical_start_address;
260 uint16_t default_size;
261 uint8_t control_register;
262 uint8_t enable;
263 uint8_t pdo_count;
264} ec_ioctl_slave_sync_t;
265
266/*****************************************************************************/
267
268typedef struct {
269 // inputs
270 uint16_t slave_position;
271 uint32_t sync_index;
272 uint32_t pdo_pos;
273
274 // outputs
275 uint16_t index;
276 uint8_t entry_count;
277 int8_t name[EC_IOCTL_STRING_SIZE];
278} ec_ioctl_slave_sync_pdo_t;
279
280/*****************************************************************************/
281
282typedef struct {
283 // inputs
284 uint16_t slave_position;
285 uint32_t sync_index;
286 uint32_t pdo_pos;
287 uint32_t entry_pos;
288
289 // outputs
290 uint16_t index;
291 uint8_t subindex;
292 uint8_t bit_length;
293 int8_t name[EC_IOCTL_STRING_SIZE];
294} ec_ioctl_slave_sync_pdo_entry_t;
295
296/*****************************************************************************/
297
298typedef struct {
299 // inputs
300 uint32_t index;
301
302 // outputs
303 uint32_t data_size;
304 uint32_t logical_base_address;
305 uint16_t working_counter[EC_MAX_NUM_DEVICES];
306 uint16_t expected_working_counter;
307 uint32_t fmmu_count;
308} ec_ioctl_domain_t;
309
310/*****************************************************************************/
311
312typedef struct {
313 // inputs
314 uint32_t domain_index;
315 uint32_t fmmu_index;
316
317 // outputs
318 uint16_t slave_config_alias;
319 uint16_t slave_config_position;
320 uint8_t sync_index;
321 ec_direction_t dir;
322 uint32_t logical_address;
323 uint32_t data_size;
324} ec_ioctl_domain_fmmu_t;
325
326/*****************************************************************************/
327
328typedef struct {
329 // inputs
330 uint32_t domain_index;
331 uint32_t data_size;
332 uint8_t *target;
333} ec_ioctl_domain_data_t;
334
335/*****************************************************************************/
336
337typedef struct {
338 // inputs
339 uint16_t slave_position;
340 uint8_t al_state;
341} ec_ioctl_slave_state_t;
342
343/*****************************************************************************/
344
345typedef struct {
346 // inputs
347 uint16_t slave_position;
348 uint16_t sdo_position;
349
350 // outputs
351 uint16_t sdo_index;
352 uint8_t max_subindex;
353 int8_t name[EC_IOCTL_STRING_SIZE];
354} ec_ioctl_slave_sdo_t;
355
356/*****************************************************************************/
357
358typedef struct {
359 // inputs
360 uint16_t slave_position;
361 int sdo_spec; // positive: index, negative: list position
362 uint8_t sdo_entry_subindex;
363
364 // outputs
365 uint16_t data_type;
366 uint16_t bit_length;
367 uint8_t read_access[EC_SDO_ENTRY_ACCESS_COUNT];
368 uint8_t write_access[EC_SDO_ENTRY_ACCESS_COUNT];
369 int8_t description[EC_IOCTL_STRING_SIZE];
370} ec_ioctl_slave_sdo_entry_t;
371
372/*****************************************************************************/
373
374typedef struct {
375 // inputs
376 uint16_t slave_position;
377 uint16_t sdo_index;
378 uint8_t sdo_entry_subindex;
379 size_t target_size;
380 uint8_t *target;
381
382 // outputs
383 size_t data_size;
384 uint32_t abort_code;
385} ec_ioctl_slave_sdo_upload_t;
386
387/*****************************************************************************/
388
389typedef struct {
390 // inputs
391 uint16_t slave_position;
392 uint16_t sdo_index;
393 uint8_t sdo_entry_subindex;
394 uint8_t complete_access;
395 size_t data_size;
396 uint8_t *data;
397
398 // outputs
399 uint32_t abort_code;
400} ec_ioctl_slave_sdo_download_t;
401
402/*****************************************************************************/
403
404typedef struct {
405 // inputs
406 uint16_t slave_position;
407 uint16_t offset;
408 uint32_t nwords;
409 uint16_t *words;
410} ec_ioctl_slave_sii_t;
411
412/*****************************************************************************/
413
414typedef struct {
415 // inputs
416 uint16_t slave_position;
417 uint8_t emergency;
418 uint16_t address;
419 size_t size;
420 uint8_t *data;
421} ec_ioctl_slave_reg_t;
422
423/*****************************************************************************/
424
425typedef struct {
426 // inputs
427 uint16_t slave_position;
428 uint16_t offset;
429 size_t buffer_size;
430 uint8_t *buffer;
431
432 // outputs
433 size_t data_size;
434 uint32_t result;
435 uint32_t error_code;
436 char file_name[32];
437} ec_ioctl_slave_foe_t;
438
439/*****************************************************************************/
440
441typedef struct {
442 // inputs
443 uint16_t slave_position;
444 uint8_t drive_no;
445 uint16_t idn;
446 size_t mem_size;
447 uint8_t *data;
448
449 // outputs
450 size_t data_size;
451 uint16_t error_code;
452} ec_ioctl_slave_soe_read_t;
453
454/*****************************************************************************/
455
456typedef struct {
457 // inputs
458 uint16_t slave_position;
459 uint8_t drive_no;
460 uint16_t idn;
461 size_t data_size;
462 uint8_t *data;
463
464 // outputs
465 uint16_t error_code;
466} ec_ioctl_slave_soe_write_t;
467
468/*****************************************************************************/
469
470typedef struct {
471 // inputs
472 uint32_t config_index;
473
474 // outputs
475 uint16_t alias;
476 uint16_t position;
477 uint32_t vendor_id;
478 uint32_t product_code;
479 struct {
480 ec_direction_t dir;
481 ec_watchdog_mode_t watchdog_mode;
482 uint32_t pdo_count;
483 uint8_t config_this;
484 } syncs[EC_MAX_SYNC_MANAGERS];
485 uint16_t watchdog_divider;
486 uint16_t watchdog_intervals;
487 uint32_t sdo_count;
488 uint32_t idn_count;
489 uint32_t flag_count;
490 int32_t slave_position;
491 uint16_t dc_assign_activate;
493} ec_ioctl_config_t;
494
495/*****************************************************************************/
496
497typedef struct {
498 // inputs
499 uint32_t config_index;
500 uint8_t sync_index;
501 uint16_t pdo_pos;
502
503 // outputs
504 uint16_t index;
505 uint8_t entry_count;
506 int8_t name[EC_IOCTL_STRING_SIZE];
507} ec_ioctl_config_pdo_t;
508
509/*****************************************************************************/
510
511typedef struct {
512 // inputs
513 uint32_t config_index;
514 uint8_t sync_index;
515 uint16_t pdo_pos;
516 uint8_t entry_pos;
517
518 // outputs
519 uint16_t index;
520 uint8_t subindex;
521 uint8_t bit_length;
522 int8_t name[EC_IOCTL_STRING_SIZE];
523} ec_ioctl_config_pdo_entry_t;
524
525/*****************************************************************************/
526
530#define EC_MAX_SDO_DATA_SIZE 1024
531
532typedef struct {
533 // inputs
534 uint32_t config_index;
535 uint32_t sdo_pos;
536
537 // outputs
538 uint16_t index;
539 uint8_t subindex;
540 size_t size;
541 uint8_t data[EC_MAX_SDO_DATA_SIZE];
542 uint8_t complete_access;
543} ec_ioctl_config_sdo_t;
544
545/*****************************************************************************/
546
550#define EC_MAX_IDN_DATA_SIZE 1024
551
552typedef struct {
553 // inputs
554 uint32_t config_index;
555 uint32_t idn_pos;
556
557 // outputs
558 uint8_t drive_no;
559 uint16_t idn;
560 ec_al_state_t state;
561 size_t size;
562 uint8_t data[EC_MAX_IDN_DATA_SIZE];
563} ec_ioctl_config_idn_t;
564
565/*****************************************************************************/
566
569#define EC_MAX_FLAG_KEY_SIZE 128
570
571typedef struct {
572 // inputs
573 uint32_t config_index;
574 uint32_t flag_pos;
575
576 // outputs
577 char key[EC_MAX_FLAG_KEY_SIZE];
578 int32_t value;
579} ec_ioctl_config_flag_t;
580
581/*****************************************************************************/
582
583#ifdef EC_EOE
584
585typedef struct {
586 // input
587 uint16_t eoe_index;
588
589 // outputs
590 char name[EC_DATAGRAM_NAME_SIZE];
591 uint16_t slave_position;
592 uint8_t open;
593 uint32_t rx_bytes;
594 uint32_t rx_rate;
595 uint32_t tx_bytes;
596 uint32_t tx_rate;
597 uint32_t tx_queued_frames;
598 uint32_t tx_queue_size;
599} ec_ioctl_eoe_handler_t;
600
601#endif
602
603/*****************************************************************************/
604
605typedef struct {
606 // outputs
607 void *process_data;
608 size_t process_data_size;
609} ec_ioctl_master_activate_t;
610
611/*****************************************************************************/
612
613typedef struct {
614 // inputs
615 uint32_t config_index;
616 uint16_t pdo_index;
617 uint16_t entry_index;
618 uint8_t entry_subindex;
619 uint8_t entry_bit_length;
620} ec_ioctl_add_pdo_entry_t;
621
622/*****************************************************************************/
623
624typedef struct {
625 // inputs
626 uint32_t config_index;
627 uint16_t entry_index;
628 uint8_t entry_subindex;
629 uint32_t domain_index;
630
631 // outputs
632 unsigned int bit_position;
633} ec_ioctl_reg_pdo_entry_t;
634
635/*****************************************************************************/
636
637typedef struct {
638 // inputs
639 uint32_t config_index;
640 uint32_t sync_index;
641 uint32_t pdo_pos;
642 uint32_t entry_pos;
643 uint32_t domain_index;
644
645 // outputs
646 unsigned int bit_position;
647} ec_ioctl_reg_pdo_pos_t;
648
649/*****************************************************************************/
650
651typedef struct {
652 // inputs
653 uint32_t config_index;
654 uint16_t index;
655 uint8_t subindex;
656 const uint8_t *data;
657 size_t size;
658 uint8_t complete_access;
659} ec_ioctl_sc_sdo_t;
660
661/*****************************************************************************/
662
663typedef struct {
664 // inputs
665 uint32_t config_index;
666 size_t size;
667 uint8_t *target;
668
669 // outputs
670 int32_t overruns;
671} ec_ioctl_sc_emerg_t;
672
673/*****************************************************************************/
674
675typedef struct {
676 // inputs
677 uint32_t config_index;
678
679 // outputs
681} ec_ioctl_sc_state_t;
682
683/*****************************************************************************/
684
685typedef struct {
686 // inputs
687 uint32_t config_index;
688 uint8_t drive_no;
689 uint16_t idn;
690 ec_al_state_t al_state;
691 const uint8_t *data;
692 size_t size;
693} ec_ioctl_sc_idn_t;
694
695/*****************************************************************************/
696
697typedef struct {
698 // inputs
699 uint32_t config_index;
700 size_t key_size;
701 char *key;
702 int32_t value;
703} ec_ioctl_sc_flag_t;
704
705/*****************************************************************************/
706
707typedef struct {
708 // inputs
709 uint32_t domain_index;
710
711 // outputs
712 ec_domain_state_t *state;
713} ec_ioctl_domain_state_t;
714
715/*****************************************************************************/
716
717typedef struct {
718 // inputs
719 uint32_t config_index;
720
721 // inputs/outputs
722 uint32_t request_index;
723 uint16_t sdo_index;
724 uint8_t sdo_subindex;
725 size_t size;
726 uint8_t *data;
727 uint32_t timeout;
728 ec_request_state_t state;
729} ec_ioctl_sdo_request_t;
730
731/*****************************************************************************/
732
733typedef struct {
734 // inputs
735 uint32_t config_index;
736 size_t mem_size;
737
738 // inputs/outputs
739 uint32_t request_index;
740 uint8_t *data;
741 ec_request_state_t state;
742 uint8_t new_data;
743 uint16_t address;
744 size_t transfer_size;
745} ec_ioctl_reg_request_t;
746
747/*****************************************************************************/
748
749typedef struct {
750 // inputs
751 uint32_t config_index;
752
753 // inputs/outputs
754 uint32_t voe_index;
755 uint32_t *vendor_id;
756 uint16_t *vendor_type;
757 size_t size;
758 uint8_t *data;
759 ec_request_state_t state;
760} ec_ioctl_voe_t;
761
762/*****************************************************************************/
763
764typedef struct {
765 // inputs
766 uint32_t dev_idx;
767
768 // outputs
770} ec_ioctl_link_state_t;
771
772/*****************************************************************************/
773
774#ifdef __KERNEL__
775
778typedef struct {
779 unsigned int writable;
780 unsigned int requested;
781 uint8_t *process_data;
782 size_t process_data_size;
783} ec_ioctl_context_t;
784
785long ec_ioctl(ec_master_t *, ec_ioctl_context_t *, unsigned int,
786 void __user *);
787
788#ifdef EC_RTDM
789
790long ec_ioctl_rtdm(ec_master_t *, ec_ioctl_context_t *, unsigned int,
791 void __user *);
792int ec_rtdm_mmap(ec_ioctl_context_t *, void **);
793
794#endif
795
796#endif
797
798/*****************************************************************************/
799
802#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