--- upstream/dynamips-0.2.6-RC1/dev_c3600_iofpga.c 2007/10/06 16:03:58 2 +++ upstream/dynamips-0.2.7-RC1/dev_c3600_iofpga.c 2007/10/06 16:23:47 7 @@ -15,7 +15,8 @@ #include #include "ptask.h" -#include "mips64.h" +#include "cpu.h" +#include "vm.h" #include "dynamips.h" #include "memory.h" #include "device.h" @@ -70,24 +71,22 @@ static const struct nmc93c46_eeprom_def eeprom_mb_def = { EEPROM_MB_CLK, EEPROM_MB_CS, EEPROM_MB_DIN, EEPROM_MB_DOUT, - NULL, 0, }; /* Mainboard EEPROM */ static const struct nmc93c46_group eeprom_mb_group = { - 1, 0, "Mainboard EEPROM", 0, { NULL }, { { 0, 0, 0, 0, 0} }, + 1, 0, "Mainboard EEPROM", 0, { &eeprom_mb_def }, }; /* NM EEPROM definition */ static const struct nmc93c46_eeprom_def eeprom_nm_def = { EEPROM_NM_CLK, EEPROM_NM_CS, EEPROM_NM_DIN, EEPROM_NM_DOUT, - NULL, 0, }; /* NM EEPROM */ static const struct nmc93c46_group eeprom_nm_group = { - 1, 0, "NM EEPROM", 0, { NULL }, { { 0, 0, 0, 0, 0} }, + 1, 0, "NM EEPROM", 0, { &eeprom_nm_def }, }; /* C3660 NM presence masks */ @@ -103,8 +102,7 @@ /* Select the current NM EEPROM */ static void nm_eeprom_select(struct iofpga_data *d,u_int slot) { - d->router->nm_eeprom.data = d->router->nm_bay[slot].eeprom_data; - d->router->nm_eeprom.data_len = d->router->nm_bay[slot].eeprom_data_len; + d->router->nm_eeprom_group.eeprom[0] = &d->router->nm_bay[slot].eeprom; } /* Return the NM status register given the detected EEPROM (3620/3640) */ @@ -153,7 +151,7 @@ * dev_c3620_c3640_iofpga_access() */ static void * -dev_c3620_c3640_iofpga_access(cpu_mips_t *cpu,struct vdevice *dev, +dev_c3620_c3640_iofpga_access(cpu_gen_t *cpu,struct vdevice *dev, m_uint32_t offset,u_int op_size,u_int op_type, m_uint64_t *data) { @@ -167,11 +165,11 @@ if (offset != 0x0c) { if (op_type == MTS_READ) { cpu_log(cpu,"IO_FPGA","reading reg 0x%x at pc=0x%llx (size=%u)\n", - offset,cpu->pc,op_size); + offset,cpu_get_pc(cpu),op_size); } else { cpu_log(cpu,"IO_FPGA", "writing reg 0x%x at pc=0x%llx, data=0x%llx (size=%u)\n", - offset,cpu->pc,*data,op_size); + offset,cpu_get_pc(cpu),*data,op_size); } } #endif @@ -291,8 +289,10 @@ d->io_mask = *data; break; - /* ??? */ - /* 0: 3640, 4 << 5: 3620, 3 << 5: 3660 */ + /* + * Platform type ? + * 0: 3640, 4 << 5: 3620, 3 << 5: 3660 + */ case 0x30000: if (op_type == MTS_READ) { switch(c3600_chassis_get_id(d->router)) { @@ -340,11 +340,12 @@ if (op_type == MTS_READ) { cpu_log(cpu,"IO_FPGA", "read from unknown addr 0x%x, pc=0x%llx (size=%u)\n", - offset,cpu->pc,op_size); + offset,cpu_get_pc(cpu),op_size); } else { cpu_log(cpu,"IO_FPGA", "write to unknown addr 0x%x, value=0x%llx, " - "pc=0x%llx (size=%u)\n",offset,*data,cpu->pc,op_size); + "pc=0x%llx (size=%u)\n", + offset,*data,cpu_get_pc(cpu),op_size); } #endif } @@ -356,7 +357,7 @@ * dev_c3660_iofpga_access() */ static void * -dev_c3660_iofpga_access(cpu_mips_t *cpu,struct vdevice *dev, +dev_c3660_iofpga_access(cpu_gen_t *cpu,struct vdevice *dev, m_uint32_t offset,u_int op_size,u_int op_type, m_uint64_t *data) { @@ -370,11 +371,11 @@ if (offset != 0x0c) { if (op_type == MTS_READ) { cpu_log(cpu,"IO_FPGA","reading reg 0x%x at pc=0x%llx (size=%u)\n", - offset,cpu->pc,op_size); + offset,cpu_get_pc(cpu),op_size); } else { cpu_log(cpu,"IO_FPGA", "writing reg 0x%x at pc=0x%llx, data=0x%llx (size=%u)\n", - offset,cpu->pc,*data,op_size); + offset,cpu_get_pc(cpu),*data,op_size); } } #endif @@ -584,11 +585,12 @@ if (op_type == MTS_READ) { cpu_log(cpu,"IO_FPGA", "read from unknown addr 0x%x, pc=0x%llx (size=%u)\n", - offset,cpu->pc,op_size); + offset,cpu_get_pc(cpu),op_size); } else { cpu_log(cpu,"IO_FPGA", "write to unknown addr 0x%x, value=0x%llx, " - "pc=0x%llx (size=%u)\n",offset,*data,cpu->pc,op_size); + "pc=0x%llx (size=%u)\n", + offset,*data,cpu_get_pc(cpu),op_size); } #endif } @@ -599,37 +601,22 @@ /* Initialize EEPROM groups */ void c3600_init_eeprom_groups(c3600_t *router) { - struct nmc93c46_group *g; int i; - /* Copy Mainboard EEPROM definition */ - memcpy(&router->mb_eeprom,&eeprom_mb_def,sizeof(eeprom_mb_def)); + /* Initialize Mainboard EEPROM */ + router->mb_eeprom_group = eeprom_mb_group; + router->mb_eeprom_group.eeprom[0] = &router->mb_eeprom; + router->mb_eeprom.data = NULL; + router->mb_eeprom.len = 0; + + /* Initialize NM EEPROM for 3620/3640 */ + router->nm_eeprom_group = eeprom_nm_group; + router->nm_eeprom_group.eeprom[0] = NULL; - /* Initialize group */ - g = &router->mb_eeprom_group; - memcpy(g,&eeprom_mb_group,sizeof(eeprom_mb_group)); - g->def[0] = &router->mb_eeprom; - - /* Copy NM EEPROM definition (3620/3640) */ - memcpy(&router->nm_eeprom,&eeprom_nm_def,sizeof(eeprom_nm_def)); - router->nm_eeprom.data = NULL; - router->nm_eeprom.data_len = 0; - - /* Initialize group (3620/3640) */ - g = &router->nm_eeprom_group; - memcpy(g,&eeprom_nm_group,sizeof(eeprom_nm_group)); - g->def[0] = &router->nm_eeprom; - - /* 3660 NM EEPROM */ + /* Initialize NM EEPROM for 3660 */ for(i=0;ic3660_nm_eeprom_def[i],&eeprom_nm_def, - sizeof(struct nmc93c46_eeprom_def)); - - memcpy(&router->c3660_nm_eeprom_group[i],&eeprom_nm_group, - sizeof(struct nmc93c46_group)); - - router->c3660_nm_eeprom_group[i].def[0] = - &router->c3660_nm_eeprom_def[i]; + router->c3660_nm_eeprom_group[i] = eeprom_nm_group; + router->c3660_nm_eeprom_group[i].eeprom[0] = &router->nm_bay[i].eeprom; } }