master/fsm_foe.c
branchstable-1.5
changeset 2502 906ef8b1c0ec
parent 2501 64cdc3b59d25
child 2522 ec403cf308eb
equal deleted inserted replaced
2501:64cdc3b59d25 2502:906ef8b1c0ec
   416         EC_SLAVE_ERR(slave, "Reception of FoE ack response failed: ");
   416         EC_SLAVE_ERR(slave, "Reception of FoE ack response failed: ");
   417         ec_datagram_print_wc_error(fsm->datagram);
   417         ec_datagram_print_wc_error(fsm->datagram);
   418         return;
   418         return;
   419     }
   419     }
   420 
   420 
   421     data = ec_slave_mbox_fetch(fsm->slave, datagram, &mbox_prot, &rec_size);
   421     data = ec_slave_mbox_fetch(slave, fsm->datagram, &mbox_prot, &rec_size);
   422     if (IS_ERR(data)) {
   422     if (IS_ERR(data)) {
   423         ec_foe_set_tx_error(fsm, FOE_PROT_ERROR);
   423         ec_foe_set_tx_error(fsm, FOE_PROT_ERROR);
   424         return;
   424         return;
   425     }
   425     }
   426 
   426 
   496         return;
   496         return;
   497     }
   497     }
   498 
   498 
   499     fsm->jiffies_start = fsm->datagram->jiffies_sent;
   499     fsm->jiffies_start = fsm->datagram->jiffies_sent;
   500 
   500 
   501     ec_slave_mbox_prepare_check(fsm->slave, datagram); // can not fail.
   501     ec_slave_mbox_prepare_check(slave, datagram); // can not fail.
   502 
   502 
   503     fsm->retries = EC_FSM_RETRIES;
   503     fsm->retries = EC_FSM_RETRIES;
   504     fsm->state = ec_fsm_foe_state_ack_check;
   504     fsm->state = ec_fsm_foe_state_ack_check;
   505 }
   505 }
   506 
   506 
   534         EC_SLAVE_ERR(slave, "Reception of FoE data send failed: ");
   534         EC_SLAVE_ERR(slave, "Reception of FoE data send failed: ");
   535         ec_datagram_print_wc_error(fsm->datagram);
   535         ec_datagram_print_wc_error(fsm->datagram);
   536         return;
   536         return;
   537     }
   537     }
   538 
   538 
   539     ec_slave_mbox_prepare_check(fsm->slave, datagram);
   539     ec_slave_mbox_prepare_check(slave, datagram);
   540     fsm->jiffies_start = jiffies;
   540     fsm->jiffies_start = jiffies;
   541     fsm->retries = EC_FSM_RETRIES;
   541     fsm->retries = EC_FSM_RETRIES;
   542     fsm->state = ec_fsm_foe_state_ack_check;
   542     fsm->state = ec_fsm_foe_state_ack_check;
   543 }
   543 }
   544 
   544 
   630         return;
   630         return;
   631     }
   631     }
   632 
   632 
   633     fsm->jiffies_start = fsm->datagram->jiffies_sent;
   633     fsm->jiffies_start = fsm->datagram->jiffies_sent;
   634 
   634 
   635     ec_slave_mbox_prepare_check(fsm->slave, datagram); // can not fail.
   635     ec_slave_mbox_prepare_check(slave, datagram); // can not fail.
   636 
   636 
   637     fsm->retries = EC_FSM_RETRIES;
   637     fsm->retries = EC_FSM_RETRIES;
   638     fsm->state = ec_fsm_foe_state_data_check;
   638     fsm->state = ec_fsm_foe_state_data_check;
   639 }
   639 }
   640 
   640 
   753         EC_SLAVE_ERR(slave, "Reception of FoE DATA READ failed: ");
   753         EC_SLAVE_ERR(slave, "Reception of FoE DATA READ failed: ");
   754         ec_datagram_print_wc_error(fsm->datagram);
   754         ec_datagram_print_wc_error(fsm->datagram);
   755         return;
   755         return;
   756     }
   756     }
   757 
   757 
   758     data = ec_slave_mbox_fetch(slave, datagram, &mbox_prot, &rec_size);
   758     data = ec_slave_mbox_fetch(slave, fsm->datagram, &mbox_prot, &rec_size);
   759     if (IS_ERR(data)) {
   759     if (IS_ERR(data)) {
   760         ec_foe_set_rx_error(fsm, FOE_MBOX_FETCH_ERROR);
   760         ec_foe_set_rx_error(fsm, FOE_MBOX_FETCH_ERROR);
   761         return;
   761         return;
   762     }
   762     }
   763 
   763 
   813         fsm->rx_buffer_offset += rec_size;
   813         fsm->rx_buffer_offset += rec_size;
   814     }
   814     }
   815 
   815 
   816     fsm->rx_last_packet =
   816     fsm->rx_last_packet =
   817         (rec_size + EC_MBOX_HEADER_SIZE + EC_FOE_HEADER_SIZE
   817         (rec_size + EC_MBOX_HEADER_SIZE + EC_FOE_HEADER_SIZE
   818          != fsm->slave->configured_rx_mailbox_size);
   818          != slave->configured_rx_mailbox_size);
   819 
   819 
   820     if (fsm->rx_last_packet ||
   820     if (fsm->rx_last_packet ||
   821             (slave->configured_rx_mailbox_size - EC_MBOX_HEADER_SIZE
   821             (slave->configured_rx_mailbox_size - EC_MBOX_HEADER_SIZE
   822              - EC_FOE_HEADER_SIZE + fsm->rx_buffer_offset)
   822              - EC_FOE_HEADER_SIZE + fsm->rx_buffer_offset)
   823             <= fsm->rx_buffer_size) {
   823             <= fsm->rx_buffer_size) {
   877         return;
   877         return;
   878     }
   878     }
   879 
   879 
   880     fsm->jiffies_start = fsm->datagram->jiffies_sent;
   880     fsm->jiffies_start = fsm->datagram->jiffies_sent;
   881 
   881 
   882     ec_slave_mbox_prepare_check(fsm->slave, datagram); // can not fail.
   882     ec_slave_mbox_prepare_check(slave, datagram); // can not fail.
   883 
   883 
   884     if (fsm->rx_last_packet) {
   884     if (fsm->rx_last_packet) {
   885         fsm->rx_expected_packet_no = 0;
   885         fsm->rx_expected_packet_no = 0;
   886         fsm->request->data_size = fsm->rx_buffer_offset;
   886         fsm->request->data_size = fsm->rx_buffer_offset;
   887         fsm->state = ec_fsm_foe_end;
   887         fsm->state = ec_fsm_foe_end;