diff -r fb965f033bb3 -r 0234b0c26c52 master/slave.c --- 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; }