36 #include <linux/module.h> 37 #include <linux/jiffies.h> 38 #include <linux/slab.h> 46 #define EC_FOE_REQUEST_RESPONSE_TIMEOUT 3000 60 INIT_LIST_HEAD(&req->
list);
70 req->
state = EC_INT_REQUEST_INIT;
117 if (size <= req->buffer_size) {
123 if (!(req->
buffer = (uint8_t *) kmalloc(size, GFP_KERNEL))) {
124 EC_ERR(
"Failed to allocate %zu bytes of FoE memory.\n", size);
143 const uint8_t *source,
154 memcpy(req->
buffer, source, size);
193 const char* file_name,
272 req->
state = EC_INT_REQUEST_QUEUED;
287 EC_ERR(
"Request to write %zu bytes to FoE buffer of size %zu.\n",
289 req->
state = EC_INT_REQUEST_FAILURE;
295 req->
state = EC_INT_REQUEST_QUEUED;
ec_request_state_t ecrt_foe_request_state(const ec_foe_request_t *req)
Get the current state of the FoE request.
size_t ecrt_foe_request_data_size(const ec_foe_request_t *req)
Returns the data size.
uint32_t issue_timeout
Maximum time in ms, the processing of the request may take.
int ec_foe_request_timed_out(const ec_foe_request_t *req)
Checks, if the timeout was exceeded.
ec_foe_error_t
FoE error enumeration type.
void ec_foe_request_init(ec_foe_request_t *req)
FoE request constructor.
uint32_t ecrt_foe_request_error_code(const ec_foe_request_t *req)
Get the FoE error code from the FoE request.
int ec_foe_request_alloc(ec_foe_request_t *req, size_t size)
Pre-allocates the data memory.
size_t data_size
Size of FoE data.
void ecrt_foe_request_timeout(ec_foe_request_t *req, uint32_t timeout)
Set the request timeout.
void ecrt_foe_request_write(ec_foe_request_t *req, size_t data_size)
Prepares a write request (master to slave).
void ec_foe_request_clear_data(ec_foe_request_t *)
FoE request destructor.
size_t ecrt_foe_request_progress(const ec_foe_request_t *req)
Returns the progress of the current transfer.
uint8_t file_name[255]
FoE filename.
void ec_foe_request_clear(ec_foe_request_t *req)
FoE request destructor.
uint32_t response_timeout
Maximum time in ms, the transfer is retried, if the slave does not respond.
#define EC_FOE_REQUEST_RESPONSE_TIMEOUT
Default timeout in ms to wait for FoE transfer responses.
void ecrt_foe_request_read(ec_foe_request_t *req)
Prepares a read request (slave to master).
uint8_t * buffer
Pointer to FoE data.
uint8_t * ecrt_foe_request_data(ec_foe_request_t *req)
Returns a pointer to the request's data.
EtherCAT FoE request structure.
uint32_t error_code
Error code from an FoE Error Request.
int ec_foe_request_copy_data(ec_foe_request_t *req, const uint8_t *source, size_t size)
Copies FoE data from an external source.
struct list_head list
List item.
void ecrt_foe_request_file(ec_foe_request_t *req, const char *file_name, uint32_t password)
Selects a new file for the request.
Values read by the master.
ec_foe_error_t result
FoE request abort code.
ec_direction_t dir
Direction.
size_t buffer_size
Size of FoE data memory.
#define EC_ERR(fmt, args...)
Convenience macro for printing EtherCAT-specific errors to syslog.
unsigned long jiffies_start
Jiffies, when the request was issued.
size_t progress
Current position of a BUSY request.
ec_foe_error_t ecrt_foe_request_result(const ec_foe_request_t *req)
Get the result of the FoE request.
ec_request_state_t
Request state.
Values written by the master.
const ec_request_state_t ec_request_state_translation_table[]
Global request state type translation table.
uint32_t password
FoE password.
ec_internal_request_state_t state
FoE request state.