--- a/master/slave.c Wed Feb 27 11:29:08 2008 +0000
+++ b/master/slave.c Wed Feb 27 15:24:00 2008 +0000
@@ -130,27 +130,27 @@
slave->eeprom_data = NULL;
slave->eeprom_size = 0;
- slave->sii_alias = 0;
- slave->sii_vendor_id = 0;
- slave->sii_product_code = 0;
- slave->sii_revision_number = 0;
- slave->sii_serial_number = 0;
- slave->sii_rx_mailbox_offset = 0;
- slave->sii_rx_mailbox_size = 0;
- slave->sii_tx_mailbox_offset = 0;
- slave->sii_tx_mailbox_size = 0;
- slave->sii_mailbox_protocols = 0;
- slave->sii_group = NULL;
- slave->sii_image = NULL;
- slave->sii_order = NULL;
- slave->sii_name = NULL;
- slave->sii_current_on_ebus = 0;
-
- slave->sii_strings = NULL;
- slave->sii_string_count = 0;
- slave->sii_syncs = NULL;
- slave->sii_sync_count = 0;
- INIT_LIST_HEAD(&slave->sii_pdos);
+ slave->sii.alias = 0;
+ slave->sii.vendor_id = 0;
+ slave->sii.product_code = 0;
+ slave->sii.revision_number = 0;
+ slave->sii.serial_number = 0;
+ slave->sii.rx_mailbox_offset = 0;
+ slave->sii.rx_mailbox_size = 0;
+ slave->sii.tx_mailbox_offset = 0;
+ slave->sii.tx_mailbox_size = 0;
+ slave->sii.mailbox_protocols = 0;
+ slave->sii.group = NULL;
+ slave->sii.image = NULL;
+ slave->sii.order = NULL;
+ slave->sii.name = NULL;
+ slave->sii.current_on_ebus = 0;
+
+ slave->sii.strings = NULL;
+ slave->sii.string_count = 0;
+ slave->sii.syncs = NULL;
+ slave->sii.sync_count = 0;
+ INIT_LIST_HEAD(&slave->sii.pdos);
INIT_LIST_HEAD(&slave->sdo_dictionary);
slave->sdo_dictionary_fetched = 0;
@@ -160,7 +160,7 @@
slave->dl_link[i] = 0;
slave->dl_loop[i] = 0;
slave->dl_signal[i] = 0;
- slave->sii_physical_layer[i] = 0xFF;
+ slave->sii.physical_layer[i] = 0xFF;
}
// init kobject and add it to the hierarchy
@@ -247,22 +247,22 @@
slave = container_of(kobj, ec_slave_t, kobj);
// free all strings
- if (slave->sii_strings) {
- for (i = 0; i < slave->sii_string_count; i++)
- kfree(slave->sii_strings[i]);
- kfree(slave->sii_strings);
+ if (slave->sii.strings) {
+ for (i = 0; i < slave->sii.string_count; i++)
+ kfree(slave->sii.strings[i]);
+ kfree(slave->sii.strings);
}
// free all sync managers
- if (slave->sii_syncs) {
- for (i = 0; i < slave->sii_sync_count; i++) {
- ec_sync_clear(&slave->sii_syncs[i]);
- }
- kfree(slave->sii_syncs);
+ if (slave->sii.syncs) {
+ for (i = 0; i < slave->sii.sync_count; i++) {
+ ec_sync_clear(&slave->sii.syncs[i]);
+ }
+ kfree(slave->sii.syncs);
}
// free all SII Pdos
- list_for_each_entry_safe(pdo, next_pdo, &slave->sii_pdos, list) {
+ list_for_each_entry_safe(pdo, next_pdo, &slave->sii.pdos, list) {
list_del(&pdo->list);
ec_pdo_clear(pdo);
kfree(pdo);
@@ -367,40 +367,40 @@
size_t size;
off_t offset;
- slave->sii_string_count = data[0];
-
- if (!slave->sii_string_count)
+ slave->sii.string_count = data[0];
+
+ if (!slave->sii.string_count)
return 0;
- if (!(slave->sii_strings =
- kmalloc(sizeof(char *) * slave->sii_string_count,
+ if (!(slave->sii.strings =
+ kmalloc(sizeof(char *) * slave->sii.string_count,
GFP_KERNEL))) {
EC_ERR("Failed to allocate string array memory.\n");
goto out_zero;
}
offset = 1;
- for (i = 0; i < slave->sii_string_count; i++) {
+ for (i = 0; i < slave->sii.string_count; i++) {
size = data[offset];
// allocate memory for string structure and data at a single blow
- if (!(slave->sii_strings[i] =
+ if (!(slave->sii.strings[i] =
kmalloc(sizeof(char) * size + 1, GFP_KERNEL))) {
EC_ERR("Failed to allocate string memory.\n");
goto out_free;
}
- memcpy(slave->sii_strings[i], data + offset + 1, size);
- slave->sii_strings[i][size] = 0x00; // append binary zero
+ memcpy(slave->sii.strings[i], data + offset + 1, size);
+ slave->sii.strings[i][size] = 0x00; // append binary zero
offset += 1 + size;
}
return 0;
out_free:
- for (i--; i >= 0; i--) kfree(slave->sii_strings[i]);
- kfree(slave->sii_strings);
- slave->sii_strings = NULL;
+ for (i--; i >= 0; i--) kfree(slave->sii.strings[i]);
+ kfree(slave->sii.strings);
+ slave->sii.strings = NULL;
out_zero:
- slave->sii_string_count = 0;
+ slave->sii.string_count = 0;
return -1;
}
@@ -425,16 +425,16 @@
return -1;
}
- slave->sii_group = ec_slave_sii_string(slave, data[0]);
- slave->sii_image = ec_slave_sii_string(slave, data[1]);
- slave->sii_order = ec_slave_sii_string(slave, data[2]);
- slave->sii_name = ec_slave_sii_string(slave, data[3]);
+ slave->sii.group = ec_slave_sii_string(slave, data[0]);
+ slave->sii.image = ec_slave_sii_string(slave, data[1]);
+ slave->sii.order = ec_slave_sii_string(slave, data[2]);
+ slave->sii.name = ec_slave_sii_string(slave, data[3]);
for (i = 0; i < 4; i++)
- slave->sii_physical_layer[i] =
+ slave->sii.physical_layer[i] =
(data[4] & (0x03 << (i * 2))) >> (i * 2);
- slave->sii_current_on_ebus = EC_READ_S16(data + 0x0C);
+ slave->sii.current_on_ebus = EC_READ_S16(data + 0x0C);
return 0;
}
@@ -463,18 +463,18 @@
return -1;
}
- slave->sii_sync_count = data_size / 8;
-
- memsize = sizeof(ec_sync_t) * slave->sii_sync_count;
- if (!(slave->sii_syncs = kmalloc(memsize, GFP_KERNEL))) {
+ slave->sii.sync_count = data_size / 8;
+
+ memsize = sizeof(ec_sync_t) * slave->sii.sync_count;
+ if (!(slave->sii.syncs = kmalloc(memsize, GFP_KERNEL))) {
EC_ERR("Failed to allocate %u bytes for sync managers.\n",
memsize);
- slave->sii_sync_count = 0;
+ slave->sii.sync_count = 0;
return -1;
}
- for (i = 0; i < slave->sii_sync_count; i++, data += 8) {
- sync = &slave->sii_syncs[i];
+ for (i = 0; i < slave->sii.sync_count; i++, data += 8) {
+ sync = &slave->sii.syncs[i];
ec_sync_init(sync, slave, i);
sync->physical_start_address = EC_READ_U16(data);
@@ -521,7 +521,7 @@
kfree(pdo);
return -1;
}
- list_add_tail(&pdo->list, &slave->sii_pdos);
+ list_add_tail(&pdo->list, &slave->sii.pdos);
data_size -= 8;
data += 8;
@@ -552,12 +552,12 @@
if (pdo->sync_index >= 0) {
ec_sync_t *sync;
- if (pdo->sync_index >= slave->sii_sync_count) {
+ if (pdo->sync_index >= slave->sii.sync_count) {
EC_ERR("Invalid SM index %i for Pdo 0x%04X in slave %u.",
pdo->sync_index, pdo->index, slave->ring_position);
return -1;
}
- sync = &slave->sii_syncs[pdo->sync_index];
+ sync = &slave->sii.syncs[pdo->sync_index];
if (ec_pdo_mapping_add_pdo(&sync->mapping, pdo))
return -1;
@@ -584,14 +584,14 @@
if (!index--)
return NULL;
- if (index >= slave->sii_string_count) {
+ if (index >= slave->sii.string_count) {
if (slave->master->debug_level)
EC_WARN("String %u not found in slave %u.\n",
index, slave->ring_position);
return NULL;
}
- return slave->sii_strings[index];
+ return slave->sii.strings[index];
}
/*****************************************************************************/
@@ -627,8 +627,8 @@
buf += sprintf(buf, "Data link status:\n");
for (i = 0; i < 4; i++) {
buf += sprintf(buf, " Port %u: Phy %u (",
- i, slave->sii_physical_layer[i]);
- switch (slave->sii_physical_layer[i]) {
+ i, slave->sii.physical_layer[i]);
+ switch (slave->sii.physical_layer[i]) {
case 0x00:
buf += sprintf(buf, "EBUS");
break;
@@ -648,53 +648,53 @@
}
buf += sprintf(buf, "\n");
- if (slave->sii_alias)
+ if (slave->sii.alias)
buf += sprintf(buf, "Configured station alias:"
- " 0x%04X (%u)\n\n", slave->sii_alias, slave->sii_alias);
+ " 0x%04X (%u)\n\n", slave->sii.alias, slave->sii.alias);
buf += sprintf(buf, "Identity:\n");
buf += sprintf(buf, " Vendor ID: 0x%08X (%u)\n",
- slave->sii_vendor_id, slave->sii_vendor_id);
+ slave->sii.vendor_id, slave->sii.vendor_id);
buf += sprintf(buf, " Product code: 0x%08X (%u)\n",
- slave->sii_product_code, slave->sii_product_code);
+ slave->sii.product_code, slave->sii.product_code);
buf += sprintf(buf, " Revision number: 0x%08X (%u)\n",
- slave->sii_revision_number, slave->sii_revision_number);
+ slave->sii.revision_number, slave->sii.revision_number);
buf += sprintf(buf, " Serial number: 0x%08X (%u)\n\n",
- slave->sii_serial_number, slave->sii_serial_number);
-
- if (slave->sii_mailbox_protocols) {
+ slave->sii.serial_number, slave->sii.serial_number);
+
+ if (slave->sii.mailbox_protocols) {
buf += sprintf(buf, "Mailboxes:\n");
buf += sprintf(buf, " RX: 0x%04X/%u, TX: 0x%04X/%u\n",
- slave->sii_rx_mailbox_offset, slave->sii_rx_mailbox_size,
- slave->sii_tx_mailbox_offset, slave->sii_tx_mailbox_size);
+ slave->sii.rx_mailbox_offset, slave->sii.rx_mailbox_size,
+ slave->sii.tx_mailbox_offset, slave->sii.tx_mailbox_size);
buf += sprintf(buf, " Supported protocols: ");
first = 1;
- if (slave->sii_mailbox_protocols & EC_MBOX_AOE) {
+ if (slave->sii.mailbox_protocols & EC_MBOX_AOE) {
buf += sprintf(buf, "AoE");
first = 0;
}
- if (slave->sii_mailbox_protocols & EC_MBOX_EOE) {
+ if (slave->sii.mailbox_protocols & EC_MBOX_EOE) {
if (!first) buf += sprintf(buf, ", ");
buf += sprintf(buf, "EoE");
first = 0;
}
- if (slave->sii_mailbox_protocols & EC_MBOX_COE) {
+ if (slave->sii.mailbox_protocols & EC_MBOX_COE) {
if (!first) buf += sprintf(buf, ", ");
buf += sprintf(buf, "CoE");
first = 0;
}
- if (slave->sii_mailbox_protocols & EC_MBOX_FOE) {
+ if (slave->sii.mailbox_protocols & EC_MBOX_FOE) {
if (!first) buf += sprintf(buf, ", ");
buf += sprintf(buf, "FoE");
first = 0;
}
- if (slave->sii_mailbox_protocols & EC_MBOX_SOE) {
+ if (slave->sii.mailbox_protocols & EC_MBOX_SOE) {
if (!first) buf += sprintf(buf, ", ");
buf += sprintf(buf, "SoE");
first = 0;
}
- if (slave->sii_mailbox_protocols & EC_MBOX_VOE) {
+ if (slave->sii.mailbox_protocols & EC_MBOX_VOE) {
if (!first) buf += sprintf(buf, ", ");
buf += sprintf(buf, "VoE");
}
@@ -702,29 +702,29 @@
}
buf += sprintf(buf, "Current consumption: %i mA\n\n",
- slave->sii_current_on_ebus);
-
- if (slave->sii_group || slave->sii_image || slave->sii_order
- || slave->sii_name) {
+ slave->sii.current_on_ebus);
+
+ if (slave->sii.group || slave->sii.image || slave->sii.order
+ || slave->sii.name) {
buf += sprintf(buf, "General:\n");
- if (slave->sii_group)
- buf += sprintf(buf, " Group: %s\n", slave->sii_group);
- if (slave->sii_image)
- buf += sprintf(buf, " Image: %s\n", slave->sii_image);
- if (slave->sii_order)
+ if (slave->sii.group)
+ buf += sprintf(buf, " Group: %s\n", slave->sii.group);
+ if (slave->sii.image)
+ buf += sprintf(buf, " Image: %s\n", slave->sii.image);
+ if (slave->sii.order)
buf += sprintf(buf, " Order number: %s\n",
- slave->sii_order);
- if (slave->sii_name)
- buf += sprintf(buf, " Name: %s\n", slave->sii_name);
+ slave->sii.order);
+ if (slave->sii.name)
+ buf += sprintf(buf, " Name: %s\n", slave->sii.name);
buf += sprintf(buf, "\n");
}
- if (slave->sii_sync_count) {
+ if (slave->sii.sync_count) {
buf += sprintf(buf, "Sync managers / Pdo mapping:\n");
- for (i = 0; i < slave->sii_sync_count; i++) {
- sync = &slave->sii_syncs[i];
+ for (i = 0; i < slave->sii.sync_count; i++) {
+ sync = &slave->sii.syncs[i];
buf += sprintf(buf,
" SM%u: addr 0x%04X, size %u, control 0x%02X, %s\n",
sync->index, sync->physical_start_address,
@@ -758,10 +758,10 @@
}
// type-cast to avoid warnings on some compilers
- if (!list_empty((struct list_head *) &slave->sii_pdos)) {
+ if (!list_empty((struct list_head *) &slave->sii.pdos)) {
buf += sprintf(buf, "Available Pdos from SII:\n");
- list_for_each_entry(pdo, &slave->sii_pdos, list) {
+ list_for_each_entry(pdo, &slave->sii.pdos, list) {
buf += sprintf(buf, " %s 0x%04X \"%s\"",
pdo->dir == EC_DIR_OUTPUT ? "RxPdo" : "TxPdo",
pdo->index, pdo->name ? pdo->name : "???");
@@ -1005,7 +1005,7 @@
if ((ret = ec_slave_schedule_eeprom_writing(&request)))
return ret; // error code
- slave->sii_alias = alias; // FIXME: do this in state machine
+ slave->sii.alias = alias; // FIXME: do this in state machine
return size; // success
}
@@ -1056,7 +1056,7 @@
}
}
else if (attr == &attr_alias) {
- return sprintf(buffer, "%u\n", slave->sii_alias);
+ return sprintf(buffer, "%u\n", slave->sii.alias);
}
return 0;
@@ -1127,12 +1127,12 @@
}
sync_index = (unsigned int) dir;
- if (slave->sii_mailbox_protocols) sync_index += 2;
-
- if (sync_index >= slave->sii_sync_count)
+ if (slave->sii.mailbox_protocols) sync_index += 2;
+
+ if (sync_index >= slave->sii.sync_count)
return NULL;
- return &slave->sii_syncs[sync_index];
+ return &slave->sii.syncs[sync_index];
}
/*****************************************************************************/
@@ -1146,12 +1146,12 @@
uint32_t product_code /**< product code */
)
{
- if (vendor_id != slave->sii_vendor_id ||
- product_code != slave->sii_product_code) {
+ if (vendor_id != slave->sii.vendor_id ||
+ product_code != slave->sii.product_code) {
EC_ERR("Invalid slave type at position %u:\n", slave->ring_position);
EC_ERR(" Requested: 0x%08X 0x%08X\n", vendor_id, product_code);
EC_ERR(" Found: 0x%08X 0x%08X\n",
- slave->sii_vendor_id, slave->sii_product_code);
+ slave->sii.vendor_id, slave->sii.product_code);
return -1;
}
return 0;
@@ -1220,8 +1220,8 @@
const ec_sync_t *sync;
const ec_pdo_t *pdo;
- for (i = 0; i < slave->sii_sync_count; i++) {
- sync = &slave->sii_syncs[i];
+ for (i = 0; i < slave->sii.sync_count; i++) {
+ sync = &slave->sii.syncs[i];
if (!(pdo = ec_pdo_mapping_find_pdo(&sync->mapping, index)))
continue;