--- upstream/dynamips-0.2.6-RC1/nmc93c46.c 2007/10/06 16:03:58 2 +++ upstream/dynamips-0.2.6-RC3/nmc93c46.c 2007/10/06 16:06:49 4 @@ -55,9 +55,9 @@ void nmc93c46_check_clk_group(struct nmc93c46_group *g,int group_id, u_int old,u_int new) { + struct cisco_eeprom *eeprom; u_int cmd,op,addr,pos; u_int clk_bit, din_bit; - m_uint16_t *data; clk_bit = g->def[group_id]->clock_bit; din_bit = g->def[group_id]->din_bit; @@ -122,18 +122,16 @@ #if DEBUG_EEPROM if (g->state[group_id].dataout_pos == 0) - printf("nmc93c46: %s(%d): read addr = %x (%d), data=%4.4x, " - "val = %4.4x\n", - g->description,group_id, - addr,addr,g->def[group_id]->data[addr], + printf("nmc93c46: %s(%d): read addr=%x (%d), val = %4.4x\n", + g->description,group_id,addr,addr, g->state[group_id].cmd_val); #endif pos = g->state[group_id].dataout_pos++; - data = g->def[group_id]->data; + eeprom = g->eeprom[group_id]; - if ((data != NULL) && (addr < g->def[group_id]->data_len)) { - g->state[group_id].dataout_val = data[addr] & (1 << pos); + if (eeprom && eeprom->data && (addr < eeprom->len)) { + g->state[group_id].dataout_val = eeprom->data[addr] & (1 << pos); } else { /* access out of bounds */ g->state[group_id].dataout_val = (1 << pos); @@ -180,6 +178,9 @@ res = g->eeprom_reg; for(i=0;inr_eeprom;i++) { + if (!(g->eeprom_reg & (1 << g->def[i]->select_bit))) + continue; + if (g->state[i].dataout_val) res |= 1 << g->def[i]->dout_bit; else