diff -r af21f0bdc7c9 -r 2b9c78543663 master/voe_handler.c --- a/master/voe_handler.c Thu Sep 06 14:21:02 2012 +0200 +++ b/master/voe_handler.c Mon Nov 03 15:20:05 2014 +0100 @@ -88,7 +88,6 @@ voe->request_state = EC_INT_REQUEST_INIT; ec_datagram_init(&voe->datagram); - ec_mbox_init(&voe->mbox,&voe->datagram); return ec_datagram_prealloc(&voe->datagram, size + EC_MBOX_HEADER_SIZE + EC_VOE_HEADER_SIZE); } @@ -101,13 +100,14 @@ ec_voe_handler_t *voe /**< VoE handler. */ ) { - ec_mbox_clear(&voe->mbox); ec_datagram_clear(&voe->datagram); } /*****************************************************************************/ /** Get usable memory size. + * + * \return Memory size. */ size_t ec_voe_handler_mem_size( const ec_voe_handler_t *voe /**< VoE handler. */ @@ -192,8 +192,9 @@ { if (voe->config->slave) { // FIXME locking? voe->state(voe); - if (voe->request_state == EC_INT_REQUEST_BUSY) - ec_slave_mbox_queue_datagrams(voe->config->slave,&voe->mbox); + if (voe->request_state == EC_INT_REQUEST_BUSY) { + ec_master_queue_datagram(voe->config->master, &voe->datagram); + } } else { voe->state = ec_voe_handler_state_error; voe->request_state = EC_INT_REQUEST_FAILURE; @@ -226,7 +227,7 @@ return; } - data = ec_slave_mbox_prepare_send(slave, &voe->mbox, + data = ec_slave_mbox_prepare_send(slave, &voe->datagram, EC_MBOX_TYPE_VOE, EC_VOE_HEADER_SIZE + voe->data_size); if (IS_ERR(data)) { voe->state = ec_voe_handler_state_error; @@ -249,22 +250,22 @@ */ void ec_voe_handler_state_write_response(ec_voe_handler_t *voe) { - ec_mailbox_t *mbox = &voe->mbox; - ec_slave_t *slave = voe->config->slave; - - if (ec_mbox_is_datagram_state(mbox,EC_DATAGRAM_TIMED_OUT) && voe->retries--) - return; - - if (!ec_mbox_is_datagram_state(mbox,EC_DATAGRAM_RECEIVED)) { + ec_datagram_t *datagram = &voe->datagram; + ec_slave_t *slave = voe->config->slave; + + if (datagram->state == EC_DATAGRAM_TIMED_OUT && voe->retries--) + return; + + if (datagram->state != EC_DATAGRAM_RECEIVED) { voe->state = ec_voe_handler_state_error; voe->request_state = EC_INT_REQUEST_FAILURE; EC_SLAVE_ERR(slave, "Failed to receive VoE write request datagram: "); - ec_datagram_print_state(mbox->datagram); - return; - } - - if (!ec_mbox_is_datagram_wc(mbox,1)) { - if (ec_mbox_is_datagram_wc(mbox,0)) { + ec_datagram_print_state(datagram); + return; + } + + if (datagram->working_counter != 1) { + if (!datagram->working_counter) { unsigned long diff_ms = (jiffies - voe->jiffies_start) * 1000 / HZ; if (diff_ms < EC_VOE_RESPONSE_TIMEOUT) { @@ -278,7 +279,7 @@ voe->state = ec_voe_handler_state_error; voe->request_state = EC_INT_REQUEST_FAILURE; EC_SLAVE_ERR(slave, "Reception of VoE write request failed: "); - ec_datagram_print_wc_error(mbox->datagram); + ec_datagram_print_wc_error(datagram); return; } @@ -294,7 +295,7 @@ */ void ec_voe_handler_state_read_start(ec_voe_handler_t *voe) { - ec_mailbox_t *mbox = &voe->mbox; + ec_datagram_t *datagram = &voe->datagram; ec_slave_t *slave = voe->config->slave; EC_SLAVE_DBG(slave, 1, "Reading VoE data.\n"); @@ -306,7 +307,7 @@ return; } - ec_slave_mbox_prepare_check(slave, mbox); // can not fail. + ec_slave_mbox_prepare_check(slave, datagram); // can not fail. voe->jiffies_start = jiffies; voe->retries = EC_FSM_RETRIES; @@ -319,32 +320,32 @@ */ void ec_voe_handler_state_read_check(ec_voe_handler_t *voe) { - ec_mailbox_t *mbox = &voe->mbox; - ec_slave_t *slave = voe->config->slave; - - if (ec_mbox_is_datagram_state(mbox,EC_DATAGRAM_TIMED_OUT) && voe->retries--) - return; - - if (!ec_mbox_is_datagram_state(mbox,EC_DATAGRAM_RECEIVED)) { + ec_datagram_t *datagram = &voe->datagram; + ec_slave_t *slave = voe->config->slave; + + if (datagram->state == EC_DATAGRAM_TIMED_OUT && voe->retries--) + return; + + if (datagram->state != EC_DATAGRAM_RECEIVED) { voe->state = ec_voe_handler_state_error; voe->request_state = EC_INT_REQUEST_FAILURE; EC_SLAVE_ERR(slave, "Failed to receive VoE mailbox check datagram: "); - ec_datagram_print_state(mbox->datagram); - return; - } - - if (!ec_mbox_is_datagram_wc(mbox,1)) { + ec_datagram_print_state(datagram); + return; + } + + if (datagram->working_counter != 1) { voe->state = ec_voe_handler_state_error; voe->request_state = EC_INT_REQUEST_FAILURE; EC_SLAVE_ERR(slave, "Reception of VoE mailbox check" " datagram failed: "); - ec_datagram_print_wc_error(mbox->datagram); - return; - } - - if (!ec_slave_mbox_check(mbox)) { + ec_datagram_print_wc_error(datagram); + return; + } + + if (!ec_slave_mbox_check(datagram)) { unsigned long diff_ms = - (mbox->datagram->jiffies_received - voe->jiffies_start) * 1000 / HZ; + (datagram->jiffies_received - voe->jiffies_start) * 1000 / HZ; if (diff_ms >= EC_VOE_RESPONSE_TIMEOUT) { voe->state = ec_voe_handler_state_error; voe->request_state = EC_INT_REQUEST_FAILURE; @@ -352,13 +353,13 @@ return; } - ec_slave_mbox_prepare_check(slave, mbox); // can not fail. + ec_slave_mbox_prepare_check(slave, datagram); // can not fail. voe->retries = EC_FSM_RETRIES; return; } // Fetch response - ec_slave_mbox_prepare_fetch(slave, mbox); // can not fail. + ec_slave_mbox_prepare_fetch(slave, datagram); // can not fail. voe->retries = EC_FSM_RETRIES; voe->state = ec_voe_handler_state_read_response; } @@ -369,32 +370,32 @@ */ void ec_voe_handler_state_read_response(ec_voe_handler_t *voe) { - ec_mailbox_t *mbox = &voe->mbox; + ec_datagram_t *datagram = &voe->datagram; ec_slave_t *slave = voe->config->slave; ec_master_t *master = voe->config->master; uint8_t *data, mbox_prot; size_t rec_size; - if (ec_mbox_is_datagram_state(mbox,EC_DATAGRAM_TIMED_OUT) && voe->retries--) - return; - - if (!ec_mbox_is_datagram_state(mbox,EC_DATAGRAM_RECEIVED)) { + if (datagram->state == EC_DATAGRAM_TIMED_OUT && voe->retries--) + return; + + if (datagram->state != EC_DATAGRAM_RECEIVED) { voe->state = ec_voe_handler_state_error; voe->request_state = EC_INT_REQUEST_FAILURE; EC_SLAVE_ERR(slave, "Failed to receive VoE read datagram: "); - ec_datagram_print_state(mbox->datagram); - return; - } - - if (!ec_mbox_is_datagram_wc(mbox,1)) { + ec_datagram_print_state(datagram); + return; + } + + if (datagram->working_counter != 1) { voe->state = ec_voe_handler_state_error; voe->request_state = EC_INT_REQUEST_FAILURE; EC_SLAVE_ERR(slave, "Reception of VoE read response failed: "); - ec_datagram_print_wc_error(mbox->datagram); - return; - } - - data = ec_slave_mbox_fetch(slave, mbox, &mbox_prot, &rec_size); + ec_datagram_print_wc_error(datagram); + return; + } + + data = ec_slave_mbox_fetch(slave, datagram, &mbox_prot, &rec_size); if (IS_ERR(data)) { voe->state = ec_voe_handler_state_error; voe->request_state = EC_INT_REQUEST_FAILURE; @@ -434,7 +435,7 @@ */ void ec_voe_handler_state_read_nosync_start(ec_voe_handler_t *voe) { - ec_mailbox_t *mbox = &voe->mbox; + ec_datagram_t *datagram = &voe->datagram; ec_slave_t *slave = voe->config->slave; EC_SLAVE_DBG(slave, 1, "Reading VoE data.\n"); @@ -446,7 +447,7 @@ return; } - ec_slave_mbox_prepare_fetch(slave, mbox); // can not fail. + ec_slave_mbox_prepare_fetch(slave, datagram); // can not fail. voe->jiffies_start = jiffies; voe->retries = EC_FSM_RETRIES; @@ -460,39 +461,39 @@ */ void ec_voe_handler_state_read_nosync_response(ec_voe_handler_t *voe) { - ec_mailbox_t *mbox = &voe->mbox; + ec_datagram_t *datagram = &voe->datagram; ec_slave_t *slave = voe->config->slave; ec_master_t *master = voe->config->master; uint8_t *data, mbox_prot; size_t rec_size; - if (ec_mbox_is_datagram_state(mbox,EC_DATAGRAM_TIMED_OUT) && voe->retries--) - return; - - if (!ec_mbox_is_datagram_state(mbox,EC_DATAGRAM_RECEIVED)) { + if (datagram->state == EC_DATAGRAM_TIMED_OUT && voe->retries--) + return; + + if (datagram->state != EC_DATAGRAM_RECEIVED) { voe->state = ec_voe_handler_state_error; voe->request_state = EC_INT_REQUEST_FAILURE; EC_SLAVE_ERR(slave, "Failed to receive VoE read datagram: "); - ec_datagram_print_state(mbox->datagram); - return; - } - - if (ec_mbox_is_datagram_wc(mbox,0)) { + ec_datagram_print_state(datagram); + return; + } + + if (datagram->working_counter == 0) { voe->state = ec_voe_handler_state_error; voe->request_state = EC_INT_REQUEST_FAILURE; EC_SLAVE_DBG(slave, 1, "Slave did not send VoE data.\n"); return; } - if (!ec_mbox_is_datagram_wc(mbox,1)) { + if (datagram->working_counter != 1) { voe->state = ec_voe_handler_state_error; voe->request_state = EC_INT_REQUEST_FAILURE; EC_SLAVE_WARN(slave, "Reception of VoE read response failed: "); - ec_datagram_print_wc_error(mbox->datagram); - return; - } - - if (!(data = ec_slave_mbox_fetch(slave, mbox, + ec_datagram_print_wc_error(datagram); + return; + } + + if (!(data = ec_slave_mbox_fetch(slave, datagram, &mbox_prot, &rec_size))) { voe->state = ec_voe_handler_state_error; voe->request_state = EC_INT_REQUEST_FAILURE;