27 |
#include "net_io.h" |
#include "net_io.h" |
28 |
#include "ptask.h" |
#include "ptask.h" |
29 |
#include "dev_c7200.h" |
#include "dev_c7200.h" |
30 |
|
#include "dev_plx.h" |
31 |
|
|
32 |
/* Debugging flags */ |
/* Debugging flags */ |
33 |
#define DEBUG_ACCESS 0 |
#define DEBUG_ACCESS 0 |
94 |
ptask_id_t tx_tid; |
ptask_id_t tx_tid; |
95 |
}; |
}; |
96 |
|
|
|
/* 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, |
|
|
}; |
|
|
|
|
97 |
/* Log a PA-POS-OC3 message */ |
/* Log a PA-POS-OC3 message */ |
98 |
#define POS_LOG(d,msg...) vm_log((d)->vm,(d)->name,msg) |
#define POS_LOG(d,msg...) vm_log((d)->vm,(d)->name,msg) |
99 |
|
|
643 |
d->vm = router->vm; |
d->vm = router->vm; |
644 |
|
|
645 |
/* Set the EEPROM */ |
/* Set the EEPROM */ |
646 |
c7200_pa_set_eeprom(router,pa_bay,&eeprom_pos_oc3); |
c7200_pa_set_eeprom(router,pa_bay,cisco_eeprom_find_pa("PA-POS-OC3")); |
647 |
|
|
648 |
/* Get the appropriate PCI bus */ |
/* Get the appropriate PCI bus */ |
649 |
pci_bus = router->pa_bay[pa_bay].pci_map; |
pci_bus = router->pa_bay[pa_bay].pci_map; |
654 |
d->rx_dev.name = d->rx_name; |
d->rx_dev.name = d->rx_name; |
655 |
d->rx_dev.priv_data = d; |
d->rx_dev.priv_data = d; |
656 |
d->rx_dev.handler = dev_pos_rx_access; |
d->rx_dev.handler = dev_pos_rx_access; |
|
vm_bind_device(d->vm,&d->rx_dev); |
|
657 |
|
|
658 |
/* Initialize TX device */ |
/* Initialize TX device */ |
659 |
d->tx_name = dyn_sprintf("%s_TX",name); |
d->tx_name = dyn_sprintf("%s_TX",name); |
661 |
d->tx_dev.name = d->tx_name; |
d->tx_dev.name = d->tx_name; |
662 |
d->tx_dev.priv_data = d; |
d->tx_dev.priv_data = d; |
663 |
d->tx_dev.handler = dev_pos_tx_access; |
d->tx_dev.handler = dev_pos_tx_access; |
|
vm_bind_device(d->vm,&d->tx_dev); |
|
664 |
|
|
665 |
/* Initialize CS device */ |
/* Initialize CS device */ |
666 |
d->cs_name = dyn_sprintf("%s_CS",name); |
d->cs_name = dyn_sprintf("%s_CS",name); |
668 |
d->cs_dev.name = d->cs_name; |
d->cs_dev.name = d->cs_name; |
669 |
d->cs_dev.priv_data = d; |
d->cs_dev.priv_data = d; |
670 |
d->cs_dev.handler = dev_pos_cs_access; |
d->cs_dev.handler = dev_pos_cs_access; |
|
vm_bind_device(d->vm,&d->cs_dev); |
|
671 |
|
|
672 |
/* Initialize PLX9060 for RX part */ |
/* Initialize PLX9060 for RX part */ |
673 |
d->rx_obj = dev_plx9060_init(d->vm,d->rx_name,pci_bus,0,&d->rx_dev); |
d->rx_obj = dev_plx9060_init(d->vm,d->rx_name,pci_bus,0,&d->rx_dev); |
684 |
d->dev.priv_data = d; |
d->dev.priv_data = d; |
685 |
d->dev.phys_len = 0x10000; |
d->dev.phys_len = 0x10000; |
686 |
d->dev.handler = dev_pos_access; |
d->dev.handler = dev_pos_access; |
|
vm_bind_device(d->vm,&d->dev); |
|
687 |
|
|
688 |
d->pci_dev = pci_dev_add(pci_bus,name,0,0,3,0,C7200_NETIO_IRQ, |
d->pci_dev = pci_dev_add(pci_bus,name,0,0,3,0,C7200_NETIO_IRQ, |
689 |
d,NULL,pci_pos_read,pci_pos_write); |
d,NULL,pci_pos_read,pci_pos_write); |
714 |
vm_object_remove(d->vm,d->tx_obj); |
vm_object_remove(d->vm,d->tx_obj); |
715 |
vm_object_remove(d->vm,d->cs_obj); |
vm_object_remove(d->vm,d->cs_obj); |
716 |
|
|
717 |
/* Remove the device from the CPU address space */ |
/* Remove the devices from the CPU address space */ |
718 |
|
vm_unbind_device(router->vm,&d->rx_dev); |
719 |
|
vm_unbind_device(router->vm,&d->tx_dev); |
720 |
|
vm_unbind_device(router->vm,&d->cs_dev); |
721 |
|
|
722 |
vm_unbind_device(router->vm,&d->dev); |
vm_unbind_device(router->vm,&d->dev); |
723 |
cpu_group_rebuild_mts(router->vm->cpu_group); |
cpu_group_rebuild_mts(router->vm->cpu_group); |
724 |
|
|
768 |
dev_c7200_pa_pos_shutdown, |
dev_c7200_pa_pos_shutdown, |
769 |
dev_c7200_pa_pos_set_nio, |
dev_c7200_pa_pos_set_nio, |
770 |
dev_c7200_pa_pos_unset_nio, |
dev_c7200_pa_pos_unset_nio, |
771 |
|
NULL, |
772 |
}; |
}; |