Hi,

the current stable-1.5 branch does not work for me, when using FoE commands.
I checked the FoE datagram flow with Wireshark and detected no errors.
So I looked at the source and found a fix for my problem.
Attached you will find a patch for further discussion.

Please note: all fsm->slave by slave replacements hove nothing to do with the problem. (This is only code beautifying)

The important fixes are the datagram by fsm->datagram replacements found in ec_slave_mbox_fetch() functions.

BTW what are the differences between the datagram and fsm->datagram handles?

Best regards
Ralf

diff -r 9cdd7669dc0b master/fsm_foe.c
--- a/master/fsm_foe.c  Thu Jan 10 17:36:41 2013 +0100
+++ b/master/fsm_foe.c  Mon Jan 21 15:54:35 2013 +0100
@@ -418,7 +418,7 @@
         return;
     }
 
-    data = ec_slave_mbox_fetch(fsm->slave, datagram, &mbox_prot, &rec_size);
+    data = ec_slave_mbox_fetch(fsm->slave, fsm->datagram, &mbox_prot, 
&rec_size);
     if (IS_ERR(data)) {
         ec_foe_set_tx_error(fsm, FOE_PROT_ERROR);
         return;
@@ -498,7 +498,7 @@
 
     fsm->jiffies_start = fsm->datagram->jiffies_sent;
 
-    ec_slave_mbox_prepare_check(fsm->slave, datagram); // can not fail.
+    ec_slave_mbox_prepare_check(slave, datagram); // can not fail.
 
     fsm->retries = EC_FSM_RETRIES;
     fsm->state = ec_fsm_foe_state_ack_check;
@@ -536,7 +536,7 @@
         return;
     }
 
-    ec_slave_mbox_prepare_check(fsm->slave, datagram);
+    ec_slave_mbox_prepare_check(slave, datagram);
     fsm->jiffies_start = jiffies;
     fsm->retries = EC_FSM_RETRIES;
     fsm->state = ec_fsm_foe_state_ack_check;
@@ -632,7 +632,7 @@
 
     fsm->jiffies_start = fsm->datagram->jiffies_sent;
 
-    ec_slave_mbox_prepare_check(fsm->slave, datagram); // can not fail.
+    ec_slave_mbox_prepare_check(slave, datagram); // can not fail.
 
     fsm->retries = EC_FSM_RETRIES;
     fsm->state = ec_fsm_foe_state_data_check;
@@ -755,7 +755,7 @@
         return;
     }
 
-    data = ec_slave_mbox_fetch(slave, datagram, &mbox_prot, &rec_size);
+    data = ec_slave_mbox_fetch(slave, fsm->datagram, &mbox_prot, &rec_size);
     if (IS_ERR(data)) {
         ec_foe_set_rx_error(fsm, FOE_MBOX_FETCH_ERROR);
         return;
@@ -815,7 +815,7 @@
 
     fsm->rx_last_packet =
         (rec_size + EC_MBOX_HEADER_SIZE + EC_FOE_HEADER_SIZE
-         != fsm->slave->configured_rx_mailbox_size);
+         != slave->configured_rx_mailbox_size);
 
     if (fsm->rx_last_packet ||
             (slave->configured_rx_mailbox_size - EC_MBOX_HEADER_SIZE
@@ -879,7 +879,7 @@
 
     fsm->jiffies_start = fsm->datagram->jiffies_sent;
 
-    ec_slave_mbox_prepare_check(fsm->slave, datagram); // can not fail.
+    ec_slave_mbox_prepare_check(slave, datagram); // can not fail.
 
     if (fsm->rx_last_packet) {
         fsm->rx_expected_packet_no = 0;
_______________________________________________
etherlab-users mailing list
[email protected]
http://lists.etherlab.org/mailman/listinfo/etherlab-users

Reply via email to