Only warn (and do not abort) if Pdo assignment/mapping configuration

fails, or is impossible.
This commit is contained in:
Florian Pose 2008-07-31 09:30:38 +00:00
parent 23274507c7
commit 60aa049b63
4 changed files with 34 additions and 52 deletions

1
TODO
View File

@ -13,6 +13,7 @@ Version 1.4.0:
* Update documentation.
* Get original driver for r8169.
* Race in jiffies frame timeout?
* Error at no sync manager for configuration.
Future issues:

View File

@ -171,8 +171,8 @@ void ec_fsm_pdo_assign_next_sync(
if (!(fsm->sync = ec_slave_get_sync(fsm->slave, fsm->sync_index))) {
if (!list_empty(&fsm->pdos->list)) {
EC_ERR("Slave %u does not provide a configuration for sync "
"manager %u!\n", fsm->slave->ring_position,
EC_WARN("Slave %u does not provide a configuration "
"for SM%u!\n", fsm->slave->ring_position,
fsm->sync_index);
fsm->state = ec_fsm_pdo_assign_state_error;
return;
@ -185,8 +185,7 @@ void ec_fsm_pdo_assign_next_sync(
continue;
if (fsm->slave->master->debug_level) {
EC_DBG("Pdo assignment of SM%u differs in slave %u:\n",
fsm->sync_index, fsm->slave->ring_position);
EC_DBG("Pdo assignment of SM%u differs:\n", fsm->sync_index);
EC_DBG("Currently assigned Pdos: ");
ec_pdo_list_print(&fsm->sync->pdos);
printk("\n");
@ -199,7 +198,7 @@ void ec_fsm_pdo_assign_next_sync(
if (!(fsm->slave->sii.mailbox_protocols & EC_MBOX_COE)
|| (fsm->slave->sii.has_general
&& !fsm->slave->sii.coe_details.enable_pdo_assign)) {
EC_ERR("Slave %u does not support assigning Pdos!\n",
EC_WARN("Slave %u does not support assigning Pdos!\n",
fsm->slave->ring_position);
fsm->state = ec_fsm_pdo_assign_state_error;
return;
@ -207,11 +206,6 @@ void ec_fsm_pdo_assign_next_sync(
fsm->num_configured_syncs++;
if (fsm->slave->master->debug_level) {
EC_DBG("Changing Pdo assignment for SM%u of slave %u.\n",
fsm->sync_index, fsm->slave->ring_position);
}
if (ec_sdo_request_alloc(&fsm->request, 2)) {
fsm->state = ec_fsm_pdo_assign_state_error;
return;
@ -222,8 +216,9 @@ void ec_fsm_pdo_assign_next_sync(
fsm->request.data_size = 1;
ec_sdo_request_address(&fsm->request, 0x1C10 + fsm->sync_index, 0);
ecrt_sdo_request_write(&fsm->request);
if (fsm->slave->master->debug_level)
EC_DBG("Setting Pdo count to zero for SM%u.\n", fsm->sync_index);
EC_DBG("Setting Pdo count to zero.\n");
fsm->state = ec_fsm_pdo_assign_state_zero_count;
ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request);
@ -232,8 +227,7 @@ void ec_fsm_pdo_assign_next_sync(
}
if (fsm->slave->master->debug_level && !fsm->num_configured_syncs)
EC_DBG("Pdo assignments of slave %u are already configured"
" correctly.\n", fsm->slave->ring_position);
EC_DBG("Pdo assignments are already configured correctly.\n");
fsm->state = ec_fsm_pdo_assign_state_end;
}
@ -265,6 +259,7 @@ void ec_fsm_pdo_assign_add_pdo(
ec_sdo_request_address(&fsm->request,
0x1C10 + fsm->sync_index, fsm->pdo_count);
ecrt_sdo_request_write(&fsm->request);
if (fsm->slave->master->debug_level)
EC_DBG("Assigning Pdo 0x%04X at position %u.\n",
fsm->pdo->index, fsm->pdo_count);
@ -285,8 +280,7 @@ void ec_fsm_pdo_assign_state_zero_count(
if (ec_fsm_coe_exec(fsm->fsm_coe)) return;
if (!ec_fsm_coe_success(fsm->fsm_coe)) {
EC_ERR("Failed to clear Pdo assignment of slave %u.\n",
fsm->slave->ring_position);
EC_WARN("Failed to clear Pdo assignment of SM%u.\n", fsm->sync_index);
fsm->state = ec_fsm_pdo_assign_state_error;
return;
}
@ -296,8 +290,7 @@ void ec_fsm_pdo_assign_state_zero_count(
// find first Pdo
if (!(fsm->pdo = ec_fsm_pdo_assign_next_pdo(fsm, &fsm->pdos->list))) {
if (fsm->slave->master->debug_level)
EC_DBG("No Pdos to assign for SM%u of slave %u.\n",
fsm->sync_index, fsm->slave->ring_position);
EC_DBG("No Pdos to assign.\n");
ec_fsm_pdo_assign_next_sync(fsm);
return;
}
@ -318,8 +311,8 @@ void ec_fsm_pdo_assign_state_add_pdo(
if (ec_fsm_coe_exec(fsm->fsm_coe)) return;
if (!ec_fsm_coe_success(fsm->fsm_coe)) {
EC_ERR("Failed to map Pdo 0x%04X for SM%u of slave %u.\n",
fsm->pdo->index, fsm->sync_index, fsm->slave->ring_position);
EC_WARN("Failed to assign Pdo 0x%04X to position %u in SM%u.\n",
fsm->pdo->index, fsm->pdo_count, fsm->sync_index);
fsm->state = ec_fsm_pdo_assign_state_error;
return;
}
@ -331,6 +324,7 @@ void ec_fsm_pdo_assign_state_add_pdo(
fsm->request.data_size = 1;
ec_sdo_request_address(&fsm->request, 0x1C10 + fsm->sync_index, 0);
ecrt_sdo_request_write(&fsm->request);
if (fsm->slave->master->debug_level)
EC_DBG("Setting number of assigned Pdos to %u.\n",
fsm->pdo_count);
@ -357,15 +351,14 @@ void ec_fsm_pdo_assign_state_pdo_count(
if (ec_fsm_coe_exec(fsm->fsm_coe)) return;
if (!ec_fsm_coe_success(fsm->fsm_coe)) {
EC_ERR("Failed to set number of assigned Pdos for slave %u.\n",
fsm->slave->ring_position);
EC_WARN("Failed to set number of assigned Pdos for SM%u.\n",
fsm->sync_index);
fsm->state = ec_fsm_pdo_assign_state_error;
return;
}
if (fsm->slave->master->debug_level)
EC_DBG("Successfully configured Pdo assignment for SM%u of"
" slave %u.\n", fsm->sync_index, fsm->slave->ring_position);
EC_DBG("Pdo assignment successful for SM%u.\n", fsm->sync_index);
// assignment for this sync manager finished
ec_fsm_pdo_assign_next_sync(fsm);

View File

@ -186,8 +186,7 @@ void ec_fsm_pdo_mapping_next_pdo(
if (!fsm->pdo) {
if (fsm->slave->master->debug_level && !fsm->num_configured_pdos)
EC_DBG("Pdo mappings of slave %u are already configured"
" correctly.\n", fsm->slave->ring_position);
EC_DBG("Pdo mappings are already configured correctly.\n");
fsm->state = ec_fsm_pdo_mapping_state_end;
return;
}
@ -196,15 +195,14 @@ void ec_fsm_pdo_mapping_next_pdo(
if (!(fsm->slave->sii.mailbox_protocols & EC_MBOX_COE)
|| (fsm->slave->sii.has_general
&& !fsm->slave->sii.coe_details.enable_pdo_configuration)) {
EC_ERR("Slave %u does not support changing the Pdo mapping!\n",
EC_WARN("Slave %u does not support Pdo mapping configuration!\n",
fsm->slave->ring_position);
fsm->state = ec_fsm_pdo_mapping_state_error;
return;
}
if (fsm->slave->master->debug_level) {
EC_DBG("Changing mapping of Pdo 0x%04X of slave %u.\n",
fsm->pdo->index, fsm->slave->ring_position);
EC_DBG("Changing mapping of Pdo 0x%04X.\n", fsm->pdo->index);
}
if (ec_sdo_request_alloc(&fsm->request, 4)) {
@ -218,8 +216,7 @@ void ec_fsm_pdo_mapping_next_pdo(
ec_sdo_request_address(&fsm->request, fsm->pdo->index, 0);
ecrt_sdo_request_write(&fsm->request);
if (fsm->slave->master->debug_level)
EC_DBG("Setting entry count to zero for Pdo 0x%04X.\n",
fsm->pdo->index);
EC_DBG("Setting entry count to zero.\n");
fsm->state = ec_fsm_pdo_mapping_state_zero_count;
ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request);
@ -279,8 +276,7 @@ void ec_fsm_pdo_mapping_state_zero_count(
if (ec_fsm_coe_exec(fsm->fsm_coe)) return;
if (!ec_fsm_coe_success(fsm->fsm_coe)) {
EC_ERR("Failed to clear Pdo mapping for slave %u.\n",
fsm->slave->ring_position);
EC_WARN("Failed to clear mapping of Pdo 0x%04X.\n", fsm->pdo->index);
fsm->state = ec_fsm_pdo_mapping_state_error;
return;
}
@ -289,8 +285,7 @@ void ec_fsm_pdo_mapping_state_zero_count(
if (!(fsm->entry =
ec_fsm_pdo_mapping_next_entry(fsm, &fsm->pdo->entries))) {
if (fsm->slave->master->debug_level)
EC_DBG("No entries to map for Pdo 0x%04X of slave %u.\n",
fsm->pdo->index, fsm->slave->ring_position);
EC_DBG("No entries to map.\n");
ec_fsm_pdo_mapping_next_pdo(fsm);
return;
}
@ -311,9 +306,9 @@ void ec_fsm_pdo_mapping_state_add_entry(
if (ec_fsm_coe_exec(fsm->fsm_coe)) return;
if (!ec_fsm_coe_success(fsm->fsm_coe)) {
EC_ERR("Failed to add entry 0x%04X:%02X for slave %u.\n",
fsm->entry->index, fsm->entry->subindex,
fsm->slave->ring_position);
EC_WARN("Failed to map Pdo entry 0x%04X:%02X at 0x%04X:%02X.\n",
fsm->entry->index, fsm->entry->subindex, fsm->pdo->index,
fsm->entry_count);
fsm->state = ec_fsm_pdo_mapping_state_error;
return;
}
@ -325,9 +320,9 @@ void ec_fsm_pdo_mapping_state_add_entry(
fsm->request.data_size = 1;
ec_sdo_request_address(&fsm->request, fsm->pdo->index, 0);
ecrt_sdo_request_write(&fsm->request);
if (fsm->slave->master->debug_level)
EC_DBG("Setting number of Pdo entries to %u.\n",
fsm->entry_count);
EC_DBG("Setting number of Pdo entries to %u.\n", fsm->entry_count);
fsm->state = ec_fsm_pdo_mapping_state_entry_count;
ec_fsm_coe_transfer(fsm->fsm_coe, fsm->slave, &fsm->request);
@ -351,15 +346,14 @@ void ec_fsm_pdo_mapping_state_entry_count(
if (ec_fsm_coe_exec(fsm->fsm_coe)) return;
if (!ec_fsm_coe_success(fsm->fsm_coe)) {
EC_ERR("Failed to set number of entries for slave %u.\n",
fsm->slave->ring_position);
EC_WARN("Failed to set number of entries for Pdo 0x%04X.\n",
fsm->pdo->index);
fsm->state = ec_fsm_pdo_mapping_state_error;
return;
}
if (fsm->slave->master->debug_level)
EC_DBG("Successfully configured mapping for Pdo 0x%04X on slave %u.\n",
fsm->pdo->index, fsm->slave->ring_position);
EC_DBG("Pdo mapping configuration successful.\n");
ec_fsm_pdo_mapping_next_pdo(fsm);
}

View File

@ -588,14 +588,11 @@ void ec_fsm_slave_config_state_pdo_mapping(
if (ec_fsm_pdo_mapping_exec(&fsm->fsm_pdo_mapping)) return;
if (!ec_fsm_pdo_mapping_success(&fsm->fsm_pdo_mapping)) {
EC_ERR("Configuration of Pdo mapping failed for slave %u.\n",
EC_WARN("Configuration of Pdo mappings failed on slave %u.\n",
fsm->slave->ring_position);
fsm->slave->error_flag = 1;
fsm->state = ec_fsm_slave_config_state_error;
return;
}
// start applying alternate Pdo assignments
// start applying Pdo assignments
ec_fsm_pdo_assign_start(&fsm->fsm_pdo_assign, fsm->slave);
fsm->state = ec_fsm_slave_config_state_pdo_assign;
fsm->state(fsm); // execute immediately
@ -612,11 +609,8 @@ void ec_fsm_slave_config_state_pdo_assign(
if (ec_fsm_pdo_assign_exec(&fsm->fsm_pdo_assign)) return;
if (!ec_fsm_pdo_assign_success(&fsm->fsm_pdo_assign)) {
EC_ERR("Pdo assignment failed for slave %u.\n",
EC_WARN("Configuration of Pdo assignments failed on slave %u.\n",
fsm->slave->ring_position);
fsm->slave->error_flag = 1;
fsm->state = ec_fsm_slave_config_state_error;
return;
}
ec_fsm_slave_config_enter_fmmu(fsm);