master/cdev.c
changeset 1055 2be8918682fa
parent 1037 59f191c9185b
child 1057 435d7f36f13d
--- 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;