--- upstream/dynamips-0.2.6-RC1/dev_c7200_pos.c 2007/10/06 16:03:58 2 +++ upstream/dynamips-0.2.6-RC5/dev_c7200_pos.c 2007/10/06 16:09:07 6 @@ -27,10 +27,11 @@ #include "net_io.h" #include "ptask.h" #include "dev_c7200.h" +#include "dev_plx.h" /* Debugging flags */ #define DEBUG_ACCESS 0 -#define DEBUG_UNKNOWN 1 +#define DEBUG_UNKNOWN 0 #define DEBUG_TRANSMIT 0 #define DEBUG_RECEIVE 0 @@ -93,17 +94,6 @@ ptask_id_t tx_tid; }; -/* EEPROM definition */ -static const m_uint16_t eeprom_pos_oc3_data[64] = { - 0x0196, 0x0202, 0xffff, 0xffff, 0x490C, 0x7806, 0x0000, 0x0000, - 0x5000, 0x0000, 0x0208, 0x1900, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, -}; - -static const struct c7200_eeprom eeprom_pos_oc3 = { - "PA-POS-OC3MM", (m_uint16_t *)eeprom_pos_oc3_data, - sizeof(eeprom_pos_oc3_data)/2, -}; - /* Log a PA-POS-OC3 message */ #define POS_LOG(d,msg...) vm_log((d)->vm,(d)->name,msg) @@ -653,7 +643,7 @@ d->vm = router->vm; /* Set the EEPROM */ - c7200_pa_set_eeprom(router,pa_bay,&eeprom_pos_oc3); + c7200_pa_set_eeprom(router,pa_bay,cisco_eeprom_find_pa("PA-POS-OC3")); /* Get the appropriate PCI bus */ pci_bus = router->pa_bay[pa_bay].pci_map; @@ -664,7 +654,6 @@ d->rx_dev.name = d->rx_name; d->rx_dev.priv_data = d; d->rx_dev.handler = dev_pos_rx_access; - vm_bind_device(d->vm,&d->rx_dev); /* Initialize TX device */ d->tx_name = dyn_sprintf("%s_TX",name); @@ -672,7 +661,6 @@ d->tx_dev.name = d->tx_name; d->tx_dev.priv_data = d; d->tx_dev.handler = dev_pos_tx_access; - vm_bind_device(d->vm,&d->tx_dev); /* Initialize CS device */ d->cs_name = dyn_sprintf("%s_CS",name); @@ -680,7 +668,6 @@ d->cs_dev.name = d->cs_name; d->cs_dev.priv_data = d; d->cs_dev.handler = dev_pos_cs_access; - vm_bind_device(d->vm,&d->cs_dev); /* Initialize PLX9060 for RX part */ d->rx_obj = dev_plx9060_init(d->vm,d->rx_name,pci_bus,0,&d->rx_dev); @@ -697,7 +684,6 @@ d->dev.priv_data = d; d->dev.phys_len = 0x10000; d->dev.handler = dev_pos_access; - vm_bind_device(d->vm,&d->dev); d->pci_dev = pci_dev_add(pci_bus,name,0,0,3,0,C7200_NETIO_IRQ, d,NULL,pci_pos_read,pci_pos_write); @@ -728,7 +714,11 @@ vm_object_remove(d->vm,d->tx_obj); vm_object_remove(d->vm,d->cs_obj); - /* Remove the device from the CPU address space */ + /* Remove the devices from the CPU address space */ + vm_unbind_device(router->vm,&d->rx_dev); + vm_unbind_device(router->vm,&d->tx_dev); + vm_unbind_device(router->vm,&d->cs_dev); + vm_unbind_device(router->vm,&d->dev); cpu_group_rebuild_mts(router->vm->cpu_group);