equal
deleted
inserted
replaced
97 char name[EC_DATAGRAM_NAME_SIZE]; |
97 char name[EC_DATAGRAM_NAME_SIZE]; |
98 |
98 |
99 eoe->slave = slave; |
99 eoe->slave = slave; |
100 |
100 |
101 ec_datagram_init(&eoe->datagram); |
101 ec_datagram_init(&eoe->datagram); |
|
102 eoe->queue_datagram = 0; |
102 eoe->state = ec_eoe_state_rx_start; |
103 eoe->state = ec_eoe_state_rx_start; |
103 eoe->opened = 0; |
104 eoe->opened = 0; |
104 eoe->rx_skb = NULL; |
105 eoe->rx_skb = NULL; |
105 eoe->rx_expected_fragment = 0; |
106 eoe->rx_expected_fragment = 0; |
106 INIT_LIST_HEAD(&eoe->tx_queue); |
107 INIT_LIST_HEAD(&eoe->tx_queue); |
281 EC_WRITE_U16(data + 2, ((eoe->tx_fragment_number & 0x3F) | |
282 EC_WRITE_U16(data + 2, ((eoe->tx_fragment_number & 0x3F) | |
282 (complete_offset & 0x3F) << 6 | |
283 (complete_offset & 0x3F) << 6 | |
283 (eoe->tx_frame_number & 0x0F) << 12)); |
284 (eoe->tx_frame_number & 0x0F) << 12)); |
284 |
285 |
285 memcpy(data + 4, eoe->tx_frame->skb->data + eoe->tx_offset, current_size); |
286 memcpy(data + 4, eoe->tx_frame->skb->data + eoe->tx_offset, current_size); |
286 ec_master_queue_datagram(eoe->slave->master, &eoe->datagram); |
287 eoe->queue_datagram = 1; |
287 |
288 |
288 eoe->tx_offset += current_size; |
289 eoe->tx_offset += current_size; |
289 eoe->tx_fragment_number++; |
290 eoe->tx_fragment_number++; |
290 return 0; |
291 return 0; |
291 } |
292 } |
297 */ |
298 */ |
298 |
299 |
299 void ec_eoe_run(ec_eoe_t *eoe /**< EoE handler */) |
300 void ec_eoe_run(ec_eoe_t *eoe /**< EoE handler */) |
300 { |
301 { |
301 if (!eoe->opened) return; |
302 if (!eoe->opened) return; |
|
303 |
|
304 // if the datagram was not sent, or is not yet received, skip this cycle |
|
305 if (eoe->queue_datagram || eoe->datagram.state == EC_DATAGRAM_SENT) |
|
306 return; |
302 |
307 |
303 // call state function |
308 // call state function |
304 eoe->state(eoe); |
309 eoe->state(eoe); |
305 |
310 |
306 // update statistics |
311 // update statistics |
309 eoe->tx_rate = eoe->tx_counter * 8; |
314 eoe->tx_rate = eoe->tx_counter * 8; |
310 eoe->rx_counter = 0; |
315 eoe->rx_counter = 0; |
311 eoe->tx_counter = 0; |
316 eoe->tx_counter = 0; |
312 eoe->rate_jiffies = jiffies; |
317 eoe->rate_jiffies = jiffies; |
313 } |
318 } |
|
319 |
314 ec_datagram_output_stats(&eoe->datagram); |
320 ec_datagram_output_stats(&eoe->datagram); |
|
321 } |
|
322 |
|
323 /*****************************************************************************/ |
|
324 |
|
325 /** |
|
326 * Queues the datagram, if necessary. |
|
327 */ |
|
328 |
|
329 void ec_eoe_queue(ec_eoe_t *eoe /**< EoE handler */) |
|
330 { |
|
331 if (eoe->queue_datagram) { |
|
332 ec_master_queue_datagram(eoe->slave->master, &eoe->datagram); |
|
333 eoe->queue_datagram = 0; |
|
334 } |
315 } |
335 } |
316 |
336 |
317 /*****************************************************************************/ |
337 /*****************************************************************************/ |
318 |
338 |
319 /** |
339 /** |
341 if (eoe->slave->online_state == EC_SLAVE_OFFLINE || |
361 if (eoe->slave->online_state == EC_SLAVE_OFFLINE || |
342 !eoe->slave->master->main_device.link_state) |
362 !eoe->slave->master->main_device.link_state) |
343 return; |
363 return; |
344 |
364 |
345 ec_slave_mbox_prepare_check(eoe->slave, &eoe->datagram); |
365 ec_slave_mbox_prepare_check(eoe->slave, &eoe->datagram); |
346 ec_master_queue_datagram(eoe->slave->master, &eoe->datagram); |
366 eoe->queue_datagram = 1; |
347 eoe->state = ec_eoe_state_rx_check; |
367 eoe->state = ec_eoe_state_rx_check; |
348 } |
368 } |
349 |
369 |
350 /*****************************************************************************/ |
370 /*****************************************************************************/ |
351 |
371 |
367 eoe->state = ec_eoe_state_tx_start; |
387 eoe->state = ec_eoe_state_tx_start; |
368 return; |
388 return; |
369 } |
389 } |
370 |
390 |
371 ec_slave_mbox_prepare_fetch(eoe->slave, &eoe->datagram); |
391 ec_slave_mbox_prepare_fetch(eoe->slave, &eoe->datagram); |
372 ec_master_queue_datagram(eoe->slave->master, &eoe->datagram); |
392 eoe->queue_datagram = 1; |
373 eoe->state = ec_eoe_state_rx_fetch; |
393 eoe->state = ec_eoe_state_rx_fetch; |
374 } |
394 } |
375 |
395 |
376 /*****************************************************************************/ |
396 /*****************************************************************************/ |
377 |
397 |