diff -r 4c16fe64b403 -r 2be8918682fa master/cdev.c --- a/master/cdev.c Tue Jun 24 10:55:40 2008 +0000 +++ b/master/cdev.c Thu Jun 26 13:16:15 2008 +0000 @@ -243,7 +243,7 @@ sync = &slave->sii.syncs[data.sync_index]; data.physical_start_address = sync->physical_start_address; - data.default_size = sync->length; + data.default_size = sync->default_length; data.control_register = sync->control_register; data.enable = sync->enable; data.assign_source = sync->assign_source; @@ -290,7 +290,6 @@ break; } - data.dir = pdo->dir; data.index = pdo->index; data.entry_count = ec_pdo_entry_count(pdo); @@ -420,7 +419,8 @@ data.slave_config_alias = fmmu->sc->alias; data.slave_config_position = fmmu->sc->position; - data.fmmu_dir = fmmu->dir; + data.sync_index = fmmu->sync_index; + data.dir = fmmu->dir; data.logical_address = fmmu->logical_start_address; data.data_size = fmmu->data_size; @@ -832,6 +832,7 @@ { ec_ioctl_config_t data; const ec_slave_config_t *sc; + uint8_t i; if (copy_from_user(&data, (void __user *) arg, sizeof(data))) { retval = -EFAULT; @@ -850,10 +851,11 @@ data.position = sc->position; data.vendor_id = sc->vendor_id; data.product_code = sc->product_code; - data.pdo_count[EC_DIR_OUTPUT] = - ec_pdo_list_count(&sc->pdos[EC_DIR_OUTPUT]); - data.pdo_count[EC_DIR_INPUT] = - ec_pdo_list_count(&sc->pdos[EC_DIR_INPUT]); + for (i = 0; i < EC_MAX_SYNCS; i++) { + data.syncs[i].dir = sc->sync_configs[i].dir; + data.syncs[i].pdo_count = + ec_pdo_list_count(&sc->sync_configs[i].pdos); + } data.sdo_count = ec_slave_config_sdo_count(sc); data.attached = sc->slave != NULL; @@ -881,14 +883,16 @@ break; } - if (data.direction > EC_DIR_INPUT) { - EC_ERR("Invalid direction %u!\n", data.direction); + if (data.sync_index >= EC_MAX_SYNCS) { + EC_ERR("Invalid sync manager index %u!\n", + data.sync_index); retval = -EINVAL; break; } if (!(pdo = ec_pdo_list_find_pdo_by_pos_const( - &sc->pdos[data.direction], data.pdo_pos))) { + &sc->sync_configs[data.sync_index].pdos, + data.pdo_pos))) { EC_ERR("Invalid Pdo position!\n"); retval = -EINVAL; break; @@ -929,14 +933,16 @@ break; } - if (data.direction > EC_DIR_INPUT) { - EC_ERR("Invalid direction %u!\n", data.direction); + if (data.sync_index >= EC_MAX_SYNCS) { + EC_ERR("Invalid sync manager index %u!\n", + data.sync_index); retval = -EINVAL; break; } if (!(pdo = ec_pdo_list_find_pdo_by_pos_const( - &sc->pdos[data.direction], data.pdo_pos))) { + &sc->sync_configs[data.sync_index].pdos, + data.pdo_pos))) { EC_ERR("Invalid Pdo position!\n"); retval = -EINVAL; break;