--- a/master/slave.c Mon May 29 12:17:17 2006 +0000
+++ b/master/slave.c Fri Jun 02 08:38:04 2006 +0000
@@ -69,6 +69,7 @@
EC_SYSFS_READ_ATTR(sii_name);
EC_SYSFS_READ_ATTR(type);
EC_SYSFS_READ_WRITE_ATTR(state);
+EC_SYSFS_READ_ATTR(eeprom);
static struct attribute *def_attrs[] = {
&attr_ring_position,
@@ -79,6 +80,7 @@
&attr_sii_name,
&attr_type,
&attr_state,
+ &attr_eeprom,
NULL,
};
@@ -145,6 +147,8 @@
slave->type = NULL;
slave->registered = 0;
slave->fmmu_count = 0;
+ slave->eeprom_data = NULL;
+ slave->eeprom_size = 0;
slave->eeprom_group = NULL;
slave->eeprom_image = NULL;
slave->eeprom_order = NULL;
@@ -234,6 +238,8 @@
kfree(sdo);
}
+ if (slave->eeprom_data) kfree(slave->eeprom_data);
+
ec_command_clear(&slave->mbox_command);
}
@@ -1121,6 +1127,8 @@
EC_INFO(" EEPROM data:\n");
+ EC_INFO(" EEPROM content size: %i Bytes\n", slave->eeprom_size);
+
if (slave->sii_alias)
EC_INFO(" Configured station alias: 0x%04X (%i)\n",
slave->sii_alias, slave->sii_alias);
@@ -1295,6 +1303,19 @@
return sprintf(buffer, "UNKNOWN\n");
}
}
+ else if (attr == &attr_eeprom) {
+ if (slave->eeprom_data) {
+ if (slave->eeprom_size > PAGE_SIZE) {
+ EC_ERR("EEPROM contents of slave %i exceed 1 page (%i/%i).\n",
+ slave->ring_position, slave->eeprom_size,
+ (int) PAGE_SIZE);
+ }
+ else {
+ memcpy(buffer, slave->eeprom_data, slave->eeprom_size);
+ return slave->eeprom_size;
+ }
+ }
+ }
return 0;
}