29#include <linux/slab.h>
43 uint32_t logical_offset,
46 const unsigned int used[]
52 INIT_LIST_HEAD(&pair->
list);
75#if EC_MAX_NUM_DEVICES > 1
76 if (!(pair->send_buffer = kmalloc(data_size, GFP_KERNEL))) {
78 "Failed to allocate domain send buffer!\n");
89 logical_offset, data_size, data);
94 logical_offset, data_size);
103 logical_offset, data_size, data);
107 logical_offset, data_size);
113 logical_offset, data_size, data);
147 unsigned int dev_idx;
155#if EC_MAX_NUM_DEVICES > 1
156 if (pair->send_buffer) {
157 kfree(pair->send_buffer);
173 unsigned int dev_idx;
174 uint16_t pair_wc = 0;
int ec_datagram_lrw_ext(ec_datagram_t *datagram, uint32_t offset, size_t data_size, uint8_t *external_memory)
Initializes an EtherCAT LRW datagram with external memory.
int ec_datagram_prealloc(ec_datagram_t *datagram, size_t size)
Allocates internal payload memory.
int ec_datagram_lrd_ext(ec_datagram_t *datagram, uint32_t offset, size_t data_size, uint8_t *external_memory)
Initializes an EtherCAT LRD datagram with external memory.
void ec_datagram_zero(ec_datagram_t *datagram)
Fills the datagram payload memory with zeros.
int ec_datagram_lwr_ext(ec_datagram_t *datagram, uint32_t offset, size_t data_size, uint8_t *external_memory)
Initializes an EtherCAT LWR datagram with external memory.
void ec_datagram_output_stats(ec_datagram_t *datagram)
Outputs datagram statistics at most every second.
int ec_datagram_lwr(ec_datagram_t *datagram, uint32_t offset, size_t data_size)
Initializes an EtherCAT LWR datagram.
int ec_datagram_lrd(ec_datagram_t *datagram, uint32_t offset, size_t data_size)
Initializes an EtherCAT LRD datagram.
void ec_datagram_clear(ec_datagram_t *datagram)
Destructor.
int ec_datagram_lrw(ec_datagram_t *datagram, uint32_t offset, size_t data_size)
Initializes an EtherCAT LRW datagram.
void ec_datagram_init(ec_datagram_t *datagram)
Constructor.
@ EC_DATAGRAM_RECEIVED
Received (dequeued).
uint16_t ec_datagram_pair_process(ec_datagram_pair_t *pair, uint16_t wc_sum[])
Process received data.
int ec_datagram_pair_init(ec_datagram_pair_t *pair, ec_domain_t *domain, uint32_t logical_offset, uint8_t *data, size_t data_size, const unsigned int used[])
Datagram pair constructor.
void ec_datagram_pair_clear(ec_datagram_pair_t *pair)
Datagram pair destructor.
EtherCAT datagram pair structure.
const char * ec_device_names[2]
Device names.
#define EC_DATAGRAM_NAME_SIZE
Size of the datagram description string.
ec_device_index_t
Master devices.
@ EC_DEVICE_MAIN
Main device.
@ EC_DEVICE_BACKUP
Backup device.
struct ec_domain ec_domain_t
@ EC_DIR_INPUT
Values read by the master.
@ EC_DIR_OUTPUT
Values written by the master.
EtherCAT master structure.
#define ec_master_num_devices(MASTER)
Number of Ethernet devices.
#define EC_MASTER_ERR(master, fmt, args...)
Convenience macro for printing master-specific errors to syslog.
ec_datagram_t datagrams[EC_MAX_NUM_DEVICES]
Datagrams.
struct list_head list
List header.
unsigned int expected_working_counter
Expectord working conter.
ec_domain_t * domain
Parent domain.
uint16_t working_counter
Working counter.
ec_datagram_state_t state
State.
ec_device_index_t device_index
Device via which the datagram shall be / was sent.
char name[EC_DATAGRAM_NAME_SIZE]
Description of the datagram.
ec_master_t * master
EtherCAT master owning the domain.
unsigned int index
Index (just a number).