IgH EtherCAT Master  1.7.0
slave.h
Go to the documentation of this file.
1 /*****************************************************************************
2  *
3  * Copyright (C) 2006-2026 Florian Pose, Ingenieurgemeinschaft IgH
4  *
5  * This file is part of the IgH EtherCAT Master.
6  *
7  * The IgH EtherCAT Master is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License version 2, as
9  * published by the Free Software Foundation.
10  *
11  * The IgH EtherCAT Master is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
14  * Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License along
17  * with the IgH EtherCAT Master; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19  *
20  ****************************************************************************/
21 
27 /****************************************************************************/
28 
29 #ifndef __EC_SLAVE_H__
30 #define __EC_SLAVE_H__
31 
32 #include <linux/list.h>
33 #include <linux/kobject.h>
34 
35 #include "globals.h"
36 #include "datagram.h"
37 #include "mailbox.h"
38 #include "pdo.h"
39 #include "sync.h"
40 #include "sdo.h"
41 #include "fsm_slave.h"
42 #include "sii_page.h"
43 
44 /****************************************************************************/
45 
56 #define EC_SLAVE_INFO(slave, fmt, args...) \
57  printk(KERN_INFO "EtherCAT %u-%u: " fmt, slave->master->index, \
58  slave->ring_position, ##args)
59 
70 #define EC_SLAVE_ERR(slave, fmt, args...) \
71  printk(KERN_ERR "EtherCAT ERROR %u-%u: " fmt, slave->master->index, \
72  slave->ring_position, ##args)
73 
84 #define EC_SLAVE_WARN(slave, fmt, args...) \
85  printk(KERN_WARNING "EtherCAT WARNING %u-%u: " fmt, \
86  slave->master->index, slave->ring_position, ##args)
87 
100 #define EC_SLAVE_DBG(slave, level, fmt, args...) \
101  do { \
102  if (slave->master->debug_level >= level) { \
103  printk(KERN_DEBUG "EtherCAT DEBUG %u-%u: " fmt, \
104  slave->master->index, slave->ring_position, ##args); \
105  } \
106  } while (0)
107 
108 /****************************************************************************/
109 
112 typedef struct {
116  uint32_t receive_time;
118  uint32_t delay_to_next_dc;
121 
122 /****************************************************************************/
123 
126 typedef struct {
127  // Non-category data
128  uint16_t alias;
129  uint32_t vendor_id;
130  uint32_t product_code;
131  uint32_t revision_number;
132  uint32_t serial_number;
141  uint16_t mailbox_protocols;
143  // Strings
144  char **strings;
145  unsigned int string_count;
147  // General
148  unsigned int has_general;
149  char *group;
150  char *image;
151  char *order;
152  char *name;
153  uint8_t physical_layer[EC_MAX_PORTS];
156  int16_t current_on_ebus;
158  // SyncM
160  unsigned int sync_count;
162  // [RT]XPDO
163  struct list_head pdos;
164 } ec_sii_t;
165 
166 /****************************************************************************/
167 
170 struct ec_slave
171 {
176  // addresses
177  uint16_t ring_position;
178  uint16_t station_address;
179  uint16_t effective_alias;
183  // configuration
187  unsigned int error_flag;
188  unsigned int force_config;
197  // base data
198  uint8_t base_type;
199  uint8_t base_revision;
200  uint16_t base_build;
201  uint8_t base_fmmu_count;
202  uint8_t base_sync_count;
212  // Slave information interface (SII)
215  unsigned int sii_parallel_words;
220  struct list_head sdo_dictionary;
222  unsigned long jiffies_preop;
224  struct list_head sdo_requests;
225  struct list_head reg_requests;
226  struct list_head foe_requests;
227  struct list_head soe_requests;
228  struct list_head eoe_requests;
232  unsigned long read_mbox_busy;
235 #ifdef EC_EOE
237 #endif
243  uint8_t valid_mbox_data;
244 };
245 
246 /****************************************************************************/
247 
248 // slave construction/destruction
250  uint16_t, uint16_t);
251 void ec_slave_clear(ec_slave_t *);
252 
254 
257 
258 // SII
260 
261 // misc.
263 
265  unsigned int *, unsigned int *);
266 ec_sdo_t *ec_slave_get_sdo(ec_slave_t *, uint16_t);
267 const ec_sdo_t *ec_slave_get_sdo_const(const ec_slave_t *, uint16_t);
268 const ec_sdo_t *ec_slave_get_sdo_by_pos_const(const ec_slave_t *, uint16_t);
269 uint16_t ec_slave_sdo_count(const ec_slave_t *);
270 const ec_pdo_t *ec_slave_find_pdo(const ec_slave_t *, uint16_t);
272 
275  uint32_t *);
276 
279 
280 /****************************************************************************/
281 
282 #endif
ec_sii_general_flags_t general_flags
General flags.
Definition: slave.h:155
Slave information interface general flags.
Definition: globals.h:171
uint16_t ring_position
Ring position.
Definition: slave.h:177
uint32_t revision_number
Revision number.
Definition: slave.h:131
uint16_t boot_rx_mailbox_offset
Bootstrap rx mailbox address.
Definition: slave.h:133
ec_sii_t sii
Extracted SII data.
Definition: slave.h:218
void ec_slave_set_state(ec_slave_t *, ec_slave_state_t)
Sets the application state of a slave.
Definition: slave.c:335
uint16_t configured_tx_mailbox_size
Configured send mailbox size.
Definition: slave.h:195
uint16_t base_build
Build number.
Definition: slave.h:200
ec_slave_port_desc_t
EtherCAT slave port descriptor.
Definition: ecrt.h:444
void ec_slave_request_state(ec_slave_t *, ec_slave_state_t)
Request a slave state and resets the error flag.
Definition: slave.c:357
uint16_t configured_tx_mailbox_offset
Configured send mailbox offset.
Definition: slave.h:193
int ec_slave_analyze_sii_data(ec_slave_t *)
Analyzes SII data.
Definition: slave.c:372
ec_slave_port_t ports[EC_MAX_PORTS]
Ports.
Definition: slave.h:181
ec_slave_state_t current_state
Current application state.
Definition: slave.h:186
ec_mbox_data_t mbox_foe_data
Received mailbox data for FoE.
Definition: slave.h:239
ec_sync_t * ec_slave_get_sync(ec_slave_t *, uint8_t)
Get the sync manager given an index.
Definition: slave.c:864
ec_slave_port_link_t link
Port link status.
Definition: slave.h:114
EtherCAT mailbox response data.
Definition: mailbox.h:58
void ec_slave_calc_transmission_delays_rec(ec_slave_t *, ec_slave_t *, uint32_t *)
Recursively calculates transmission delays.
Definition: slave.c:1242
uint32_t serial_number
Serial number.
Definition: slave.h:132
const ec_pdo_t * ec_slave_find_pdo(const ec_slave_t *, uint16_t)
Finds a mapped PDO.
Definition: slave.c:999
ec_sii_coe_details_t coe_details
CoE detail flags.
Definition: slave.h:154
char * order
Order number.
Definition: slave.h:151
ec_mbox_data_t mbox_eoe_data
Received mailbox data for EoE.
Definition: slave.h:236
Finite state machine of an EtherCAT slave.
Definition: fsm_slave.h:52
ec_fsm_slave_t fsm
Slave state machine.
Definition: slave.h:230
struct list_head reg_requests
Register access requests.
Definition: slave.h:225
CANopen SDO.
Definition: sdo.h:41
int16_t current_on_ebus
Power consumption in mA.
Definition: slave.h:156
uint16_t boot_tx_mailbox_size
Bootstrap transmit mailbox size.
Definition: slave.h:136
EtherCAT SII/Eeprom memory contents.
void ec_read_mbox_lock_clear(ec_slave_t *)
Clears the mailbox lock.
Definition: slave.c:187
int ec_read_mbox_locked(ec_slave_t *)
Return the current mailbox lock status and lock it if not locked.
Definition: slave.c:201
uint16_t station_address
Configured station address.
Definition: slave.h:178
unsigned int sync_count
Number of sync managers.
Definition: slave.h:160
struct list_head sdo_dictionary
SDO dictionary list.
Definition: slave.h:220
uint16_t std_rx_mailbox_size
Standard receive mailbox size.
Definition: slave.h:138
uint8_t base_type
Slave type.
Definition: slave.h:198
const ec_sdo_t * ec_slave_get_sdo_const(const ec_slave_t *, uint16_t)
Get an SDO from the dictionary.
Definition: slave.c:936
Global definitions and macros.
uint16_t std_tx_mailbox_offset
Standard transmit mailbox address.
Definition: slave.h:139
uint16_t boot_tx_mailbox_offset
Bootstrap tx mailbox address.
Definition: slave.h:135
void ec_slave_init(ec_slave_t *, ec_master_t *, ec_device_index_t, uint16_t, uint16_t)
Slave constructor.
Definition: slave.c:65
EtherCAT slave.
Definition: slave.h:170
uint16_t ec_slave_sdo_count(const ec_slave_t *)
Get the number of SDOs in the dictionary.
Definition: slave.c:980
struct list_head sdo_requests
SDO access requests.
Definition: slave.h:224
struct list_head soe_requests
SoE requests.
Definition: slave.h:227
Slave information interface CANopen over EtherCAT details flags.
Definition: globals.h:160
ec_slave_config_t * config
Current configuration.
Definition: slave.h:184
Slave information interface memory page.
Definition: sii_page.h:47
PDO description.
Definition: pdo.h:41
uint8_t sdo_dictionary_fetched
Dictionary has been fetched.
Definition: slave.h:221
uint16_t mailbox_protocols
Supported mailbox protocols.
Definition: slave.h:141
ec_slave_dc_range_t base_dc_range
DC range.
Definition: slave.h:205
Sync manager.
Definition: sync.h:39
uint16_t std_rx_mailbox_offset
Standard receive mailbox address.
Definition: slave.h:137
uint8_t base_fmmu_bit_operation
FMMU bit operation is supported.
Definition: slave.h:203
uint32_t transmission_delay
DC system time transmission delay (offset from reference clock).
Definition: slave.h:209
ec_device_index_t
Master devices.
Definition: globals.h:203
void ec_slave_calc_port_delays(ec_slave_t *)
Calculates the port transmission delays.
Definition: slave.c:1196
uint16_t alias
Configured station alias.
Definition: slave.h:128
uint8_t base_fmmu_count
Number of supported FMMUs.
Definition: slave.h:201
uint16_t configured_rx_mailbox_offset
Configured receive mailbox offset.
Definition: slave.h:189
void ec_slave_clear_sync_managers(ec_slave_t *)
Clear the sync manager array.
Definition: slave.c:316
ec_slave_dc_range_t
EtherCAT slave distributed clocks range.
Definition: globals.h:178
ec_slave_port_desc_t desc
Port descriptors.
Definition: slave.h:113
unsigned int string_count
Number of SII strings.
Definition: slave.h:145
ec_master_t * master
Master owning the slave.
Definition: slave.h:172
uint8_t has_dc_system_time
The slave supports the DC system time register.
Definition: slave.h:206
char ** strings
Strings in SII categories.
Definition: slave.h:144
ec_slave_state_t
State of an EtherCAT slave.
Definition: globals.h:127
void ec_slave_clear(ec_slave_t *)
Slave destructor.
Definition: slave.c:213
EtherCAT datagram structure.
void ec_slave_sdo_dict_info(const ec_slave_t *, unsigned int *, unsigned int *)
Counts the total number of SDOs and entries in the dictionary.
Definition: slave.c:882
uint8_t base_revision
Revision.
Definition: slave.h:199
uint8_t valid_mbox_data
Received mailbox data is valid.
Definition: slave.h:243
uint16_t effective_alias
Effective alias address.
Definition: slave.h:179
struct list_head foe_requests
FoE requests.
Definition: slave.h:226
Mailbox functionality.
uint16_t boot_rx_mailbox_size
Bootstrap receive mailbox size.
Definition: slave.h:134
#define EC_MAX_PORTS
Maximum number of slave ports.
Definition: ecrt.h:294
EtherCAT slave request state machine.
ec_slave_t * next_slave
Connected slaves.
Definition: slave.h:115
ec_sii_page_t sii_page
The SII contents, either fetched or taken from the cache.
Definition: slave.h:213
uint32_t receive_time
Port receive times for delay measurement.
Definition: slave.h:116
EtherCAT sync manager.
Slave port.
Definition: slave.h:112
char * image
Image name.
Definition: slave.h:150
ec_mbox_data_t mbox_voe_data
Received mailbox data for VoE.
Definition: slave.h:241
unsigned long jiffies_preop
Time, the slave went to PREOP.
Definition: slave.h:222
uint16_t configured_rx_mailbox_size
Configured receive mailbox size.
Definition: slave.h:191
uint8_t base_dc_supported
Distributed clocks are supported.
Definition: slave.h:204
Slave information interface data.
Definition: slave.h:126
char * group
Group name.
Definition: slave.h:149
void ec_slave_attach_pdo_names(ec_slave_t *)
Attach PDO names.
Definition: slave.c:1055
uint8_t base_sync_count
Number of supported sync managers.
Definition: slave.h:202
EtherCAT slave configuration.
Definition: slave_config.h:111
unsigned long read_mbox_busy
Bit 0 is set during a mailbox read request.
Definition: slave.h:232
ec_device_index_t device_index
Index of device the slave responds on.
Definition: slave.h:173
uint32_t product_code
Vendor-specific product code.
Definition: slave.h:130
const ec_sdo_t * ec_slave_get_sdo_by_pos_const(const ec_slave_t *, uint16_t)
Get an SDO from the dictionary, given its position in the list.
Definition: slave.c:958
unsigned int error_flag
Stop processing after an error.
Definition: slave.h:187
ec_sync_t * syncs
SYNC MANAGER categories.
Definition: slave.h:159
uint16_t std_tx_mailbox_size
Standard transmit mailbox size.
Definition: slave.h:140
EtherCAT master.
Definition: master.h:194
ec_slave_state_t requested_state
Requested application state.
Definition: slave.h:185
struct list_head eoe_requests
EoE set IP parameter requests.
Definition: slave.h:228
EtherCAT CANopen SDO structure.
char * name
Slave name.
Definition: slave.h:152
ec_mbox_data_t mbox_coe_data
Received mailbox data for CoE.
Definition: slave.h:238
ec_mbox_data_t mbox_soe_data
Received mailbox data for SoE.
Definition: slave.h:240
uint32_t vendor_id
Vendor ID.
Definition: slave.h:129
uint32_t delay_to_next_dc
Delay to next slave with DC support behind this port [ns].
Definition: slave.h:118
unsigned int force_config
Force (re-)configuration.
Definition: slave.h:188
unsigned int has_general
General category present.
Definition: slave.h:148
ec_sdo_t * ec_slave_get_sdo(ec_slave_t *, uint16_t)
Get an SDO from the dictionary.
Definition: slave.c:910
unsigned int sii_parallel_words
How many SII words the slave can read at once.
Definition: slave.h:215
EtherCAT Process data object structure.