📄 dev_c7200.c
字号:
/* PCI bridges for PA Bays 1 to 6 */ c7200_pa_init_pci_bridge(router,1,vm->pci_bus_pool[24],1); c7200_pa_init_pci_bridge(router,3,vm->pci_bus_pool[24],2); c7200_pa_init_pci_bridge(router,5,vm->pci_bus_pool[24],3); c7200_pa_init_pci_bridge(router,2,vm->pci_bus_pool[25],1); c7200_pa_init_pci_bridge(router,4,vm->pci_bus_pool[25],2); c7200_pa_init_pci_bridge(router,6,vm->pci_bus_pool[25],3); return(0);}/* Initialize an NPE-150 board */int c7200_init_npe150(c7200_t *router){ vm_instance_t *vm = router->vm; m_uint32_t bank_size; int i; /* Set the processor type: R4700 */ mips64_set_prid(CPU_MIPS64(vm->boot_cpu),MIPS_PRID_R4700); /* Initialize the Galileo GT-64010 system controller */ if (c7200_init_gt64010(router) == -1) return(-1); /* PCMCIA controller is on bus 0 */ router->pcmcia_bus = vm->pci_bus[0]; /* Initialize the PA PCI busses */ if (c7200_pa_create_pci_busses(router) == -1) return(-1); /* Create PCI busses for PA Bays 1,3,5 and PA Bays 2,4,6 */ vm->pci_bus_pool[24] = pci_bus_create("PA Slots 1,3,5",-1); vm->pci_bus_pool[25] = pci_bus_create("PA Slots 2,4,6",-1); /* PCI bridges (MB0/MB1, MB0/MB2) */ dev_dec21050_init(vm->pci_bus[0],1,NULL); dev_dec21050_init(vm->pci_bus[0],2,vm->pci_bus_pool[24]); dev_dec21050_init(vm->pci_bus[0],3,NULL); dev_dec21050_init(vm->pci_bus[0],4,vm->pci_bus_pool[25]); /* Map the PA PCI busses */ vm->slots_pci_bus[0] = vm->pci_bus[0]; for(i=1;i<C7200_MAX_PA_BAYS;i++) vm->slots_pci_bus[i] = vm->pci_bus_pool[i]; /* PCI bridges for PA Bays 1 to 6 */ c7200_pa_init_pci_bridge(router,1,vm->pci_bus_pool[24],1); c7200_pa_init_pci_bridge(router,3,vm->pci_bus_pool[24],2); c7200_pa_init_pci_bridge(router,5,vm->pci_bus_pool[24],3); c7200_pa_init_pci_bridge(router,2,vm->pci_bus_pool[25],1); c7200_pa_init_pci_bridge(router,4,vm->pci_bus_pool[25],2); c7200_pa_init_pci_bridge(router,6,vm->pci_bus_pool[25],3); /* Packet SRAM: 1 Mb */ bank_size = 0x80000; dev_c7200_sram_init(vm,"sram0",C7200_SRAM_ADDR,bank_size, vm->pci_bus_pool[24],0); dev_c7200_sram_init(vm,"sram1",C7200_SRAM_ADDR+bank_size,bank_size, vm->pci_bus_pool[25],0); return(0);}/* Initialize an NPE-175 board */int c7200_init_npe175(c7200_t *router){ vm_instance_t *vm = router->vm; int i; /* Set the processor type: R5271 */ mips64_set_prid(CPU_MIPS64(vm->boot_cpu),MIPS_PRID_R527x); /* Initialize the Galileo GT-64120 PCI controller */ if (c7200_init_gt64120(router) == -1) return(-1); /* Initialize the PA PCI busses */ if (c7200_pa_create_pci_busses(router) == -1) return(-1); /* Create PCI bus for PA Bay 0 (I/O Card, PCMCIA, Interfaces) */ vm->pci_bus_pool[0] = pci_bus_create("PA Slot 0",-1); /* PCI bridge for I/O card device on MB0 */ dev_dec21150_init(vm->pci_bus[0],1,vm->pci_bus_pool[0]); /* Create the hidden "I/O" PCI bridge for PCMCIA controller */ c7200_create_io_pci_bridge(router,vm->pci_bus_pool[0]); /* Map the PA PCI busses */ for(i=0;i<C7200_MAX_PA_BAYS;i++) vm->slots_pci_bus[i] = vm->pci_bus_pool[i]; /* PCI bridges for PA Bays 1 to 6 */ c7200_pa_init_pci_bridge(router,1,vm->pci_bus[0],7); c7200_pa_init_pci_bridge(router,3,vm->pci_bus[0],8); c7200_pa_init_pci_bridge(router,5,vm->pci_bus[0],9); c7200_pa_init_pci_bridge(router,2,vm->pci_bus[1],7); c7200_pa_init_pci_bridge(router,4,vm->pci_bus[1],8); c7200_pa_init_pci_bridge(router,6,vm->pci_bus[1],9); /* Enable PEM EEPROM */ c7200_pem_set_eeprom(router); return(0);}/* Initialize an NPE-200 board */int c7200_init_npe200(c7200_t *router){ vm_instance_t *vm = router->vm; m_uint32_t bank_size; int i; /* Set the processor type: R5000 */ mips64_set_prid(CPU_MIPS64(vm->boot_cpu),MIPS_PRID_R5000); /* Initialize the Galileo GT-64010 PCI controller */ if (c7200_init_gt64010(router) == -1) return(-1); /* PCMCIA controller is on bus 0 */ router->pcmcia_bus = vm->pci_bus[0]; /* Initialize the PA PCI busses */ if (c7200_pa_create_pci_busses(router) == -1) return(-1); /* Create PCI busses for PA Bays 1,3,5 and PA Bays 2,4,6 */ vm->pci_bus_pool[24] = pci_bus_create("PA Slots 1,3,5",-1); vm->pci_bus_pool[25] = pci_bus_create("PA Slots 2,4,6",-1); /* PCI bridges (MB0/MB1, MB0/MB2) */ dev_dec21050_init(vm->pci_bus[0],1,NULL); dev_dec21050_init(vm->pci_bus[0],2,vm->pci_bus_pool[24]); dev_dec21050_init(vm->pci_bus[0],3,NULL); dev_dec21050_init(vm->pci_bus[0],4,vm->pci_bus_pool[25]); /* Map the PA PCI busses */ vm->slots_pci_bus[0] = vm->pci_bus[0]; for(i=1;i<C7200_MAX_PA_BAYS;i++) vm->slots_pci_bus[i] = vm->pci_bus_pool[i]; /* PCI bridges for PA Bays 1 to 6 */ c7200_pa_init_pci_bridge(router,1,vm->pci_bus_pool[24],1); c7200_pa_init_pci_bridge(router,3,vm->pci_bus_pool[24],2); c7200_pa_init_pci_bridge(router,5,vm->pci_bus_pool[24],3); c7200_pa_init_pci_bridge(router,2,vm->pci_bus_pool[25],1); c7200_pa_init_pci_bridge(router,4,vm->pci_bus_pool[25],2); c7200_pa_init_pci_bridge(router,6,vm->pci_bus_pool[25],3); /* Packet SRAM: 4 Mb */ bank_size = 0x200000; dev_c7200_sram_init(vm,"sram0",C7200_SRAM_ADDR,bank_size, vm->pci_bus_pool[24],0); dev_c7200_sram_init(vm,"sram1",C7200_SRAM_ADDR+bank_size,bank_size, vm->pci_bus_pool[25],0); return(0);}/* Initialize an NPE-225 board */int c7200_init_npe225(c7200_t *router){ vm_instance_t *vm = router->vm; int i; /* Set the processor type: R5271 */ mips64_set_prid(CPU_MIPS64(vm->boot_cpu),MIPS_PRID_R527x); /* Initialize the Galileo GT-64120 PCI controller */ if (c7200_init_gt64120(router) == -1) return(-1); /* Initialize the PA PCI busses */ if (c7200_pa_create_pci_busses(router) == -1) return(-1); /* Create PCI bus for PA Bay 0 (I/O Card, PCMCIA, Interfaces) */ vm->pci_bus_pool[0] = pci_bus_create("PA Slot 0",-1); /* PCI bridge for I/O card device on MB0 */ dev_dec21150_init(vm->pci_bus[0],1,vm->pci_bus_pool[0]); /* Create the hidden "I/O" PCI bridge for PCMCIA controller */ c7200_create_io_pci_bridge(router,vm->pci_bus_pool[0]); /* Map the PA PCI busses */ for(i=0;i<C7200_MAX_PA_BAYS;i++) vm->slots_pci_bus[i] = vm->pci_bus_pool[i]; /* PCI bridges for PA Bays 1 to 6 */ c7200_pa_init_pci_bridge(router,1,vm->pci_bus[0],7); c7200_pa_init_pci_bridge(router,3,vm->pci_bus[0],8); c7200_pa_init_pci_bridge(router,5,vm->pci_bus[0],9); c7200_pa_init_pci_bridge(router,2,vm->pci_bus[1],7); c7200_pa_init_pci_bridge(router,4,vm->pci_bus[1],8); c7200_pa_init_pci_bridge(router,6,vm->pci_bus[1],9); /* Enable PEM EEPROM */ c7200_pem_set_eeprom(router); return(0);}/* Initialize an NPE-300 board */int c7200_init_npe300(c7200_t *router){ vm_instance_t *vm = router->vm; int i; /* Set the processor type: R7000 */ mips64_set_prid(CPU_MIPS64(vm->boot_cpu),MIPS_PRID_R7000); /* 32 Mb of I/O memory */ vm->iomem_size = 32; dev_ram_init(vm,"iomem",vm->ram_mmap,TRUE,NULL,vm->sparse_mem, C7200_IOMEM_ADDR,32*1048576); /* Initialize the two Galileo GT-64120 system controllers */ if (c7200_init_dual_gt64120(router) == -1) return(-1); /* Initialize the PA PCI busses */ if (c7200_pa_create_pci_busses(router) == -1) return(-1); /* Create PCI bus for PA Bay 0 (I/O Card, PCMCIA, Interfaces) */ vm->pci_bus_pool[0] = pci_bus_create("PA Slot 0",-1); /* Create PCI busses for PA Bays 1,3,5 and PA Bays 2,4,6 */ vm->pci_bus_pool[24] = pci_bus_create("PA Slots 1,3,5",-1); vm->pci_bus_pool[25] = pci_bus_create("PA Slots 2,4,6",-1); /* PCI bridge for I/O card device on MB0 */ dev_dec21150_init(vm->pci_bus[0],1,vm->pci_bus_pool[0]); /* Create the hidden "I/O" PCI bridge for PCMCIA controller */ c7200_create_io_pci_bridge(router,vm->pci_bus_pool[0]); /* PCI bridges for PA PCI "Head" Busses */ dev_dec21150_init(vm->pci_bus[0],2,vm->pci_bus_pool[24]); dev_dec21150_init(vm->pci_bus[1],1,vm->pci_bus_pool[25]); /* Map the PA PCI busses */ for(i=0;i<C7200_MAX_PA_BAYS;i++) vm->slots_pci_bus[i] = vm->pci_bus_pool[i]; /* PCI bridges for PA Bays 1 to 6 */ c7200_pa_init_pci_bridge(router,1,vm->pci_bus_pool[24],1); c7200_pa_init_pci_bridge(router,3,vm->pci_bus_pool[24],2); c7200_pa_init_pci_bridge(router,5,vm->pci_bus_pool[24],3); c7200_pa_init_pci_bridge(router,2,vm->pci_bus_pool[25],1); c7200_pa_init_pci_bridge(router,4,vm->pci_bus_pool[25],2); c7200_pa_init_pci_bridge(router,6,vm->pci_bus_pool[25],3); return(0);}/* Initialize an NPE-400 board */int c7200_init_npe400(c7200_t *router){ vm_instance_t *vm = router->vm; int i; /* Set the processor type: R7000 */ mips64_set_prid(CPU_MIPS64(vm->boot_cpu),MIPS_PRID_R7000); /* * Add supplemental memory (as "iomem") if we have more than 256 Mb. */ if (vm->ram_size > C7200_BASE_RAM_LIMIT) { vm->iomem_size = vm->ram_size - C7200_BASE_RAM_LIMIT; vm->ram_size = C7200_BASE_RAM_LIMIT; dev_ram_init(vm,"ram1",vm->ram_mmap,TRUE,NULL,vm->sparse_mem, C7200_IOMEM_ADDR,vm->iomem_size*1048576); } /* Initialize the Galileo GT-64120 system controller */ if (c7200_init_gt64120(router) == -1) return(-1); /* Initialize the PA PCI busses */ if (c7200_pa_create_pci_busses(router) == -1) return(-1); /* Create PCI bus for PA Bay 0 (I/O Card, PCMCIA, Interfaces) */ vm->pci_bus_pool[0] = pci_bus_create("PA Slot 0",-1); /* PCI bridge for I/O card device on MB0 */ dev_dec21050_init(vm->pci_bus[0],1,vm->pci_bus_pool[0]); /* Create the hidden "I/O" PCI bridge for PCMCIA controller */ c7200_create_io_pci_bridge(router,vm->pci_bus_pool[0]); /* Map the PA PCI busses */ for(i=0;i<C7200_MAX_PA_BAYS;i++) vm->slots_pci_bus[i] = vm->pci_bus_pool[i]; /* PCI bridges for PA Bays 1 to 6 */ c7200_pa_init_pci_bridge(router,1,vm->pci_bus[0],7); c7200_pa_init_pci_bridge(router,3,vm->pci_bus[0],8); c7200_pa_init_pci_bridge(router,5,vm->pci_bus[0],9); c7200_pa_init_pci_bridge(router,2,vm->pci_bus[1],7); c7200_pa_init_pci_bridge(router,4,vm->pci_bus[1],8); c7200_pa_init_pci_bridge(router,6,vm->pci_bus[1],9); return(0);}/* Initialize an NPE-G1 board (XXX not working) */int c7200_init_npeg1(c7200_t *router){ vm_instance_t *vm = router->vm; int i; /* Just some tests */ mips64_set_prid(CPU_MIPS64(vm->boot_cpu),MIPS_PRID_BCM1250); vm->pci_bus[0] = pci_bus_create("HT/PCI bus",0); /* SB-1 System control devices */ dev_sb1_init(vm); /* SB-1 I/O devices */ dev_sb1_io_init(vm,C7200_DUART_IRQ); /* SB-1 PCI bus configuration zone */ dev_sb1_pci_init(vm,"pci_cfg",0xFE000000ULL); /* Initialize the PA PCI busses */ if (c7200_pa_create_pci_busses(router) == -1) return(-1); /* Create PCI bus for PA Bay 0 (I/O Card, PCMCIA, Interfaces) */ vm->pci_bus_pool[0] = pci_bus_create("PA Slot 0",-1); /* Create PCI busses for PA Bays 1,3,5 and PA Bays 2,4,6 */ vm->pci_bus_pool[24] = pci_bus_create("PA Slots 1,3,5",-1); vm->pci_bus_pool[25] = pci_bus_create("PA Slots 2,4,6",-1); /* HyperTransport/PCI bridges */ dev_ap1011_init(vm->pci_bus_pool[28],0,NULL); dev_ap1011_init(vm->pci_bus_pool[28],1,vm->pci_bus_pool[24]); dev_ap1011_init(vm->pci_bus_pool[28],2,vm->pci_bus_pool[25]); /* PCI bridge for I/O card device on MB0 */ dev_dec21150_init(vm->pci_bus[0],3,vm->pci_bus_pool[0]); /* Create the hidden "I/O" PCI bridge for PCMCIA controller */ c7200_create_io_pci_bridge(router,vm->pci_bus_pool[0]); /* Map the PA PCI busses */ vm->slots_pci_bus[0] = vm->pci_bus[0]; for(i=1;i<C7200_MAX_PA_BAYS;i++) vm->slots_pci_bus[i] = vm->pci_bus_pool[i]; /* PCI bridges for PA Bays 1 to 6 */ c7200_pa_init_pci_bridge(router,1,vm->pci_bus_pool[24],1); c7200_pa_init_pci_bridge(router,3,vm->pci_bus_pool[24],2); c7200_pa_init_pci_bridge(router,5,vm->pci_bus_pool[24],3); c7200_pa_init_pci_bridge(router,2,vm->pci_bus_pool[25],1); c7200_pa_init_pci_bridge(router,4,vm->pci_bus_pool[25],2); c7200_pa_init_pci_bridge(router,6,vm->pci_bus_pool[25],3); return(0);}/* Initialize an NPE-G2 board (XXX not working) */int c7200_init_npeg2(c7200_t *router){ vm_instance_t *vm = router->vm; int i; /* Set the processor type: PowerPC G4 */ ppc32_set_pvr(CPU_PPC32(vm->boot_cpu),0x80040201); /* Initialize the PA PCI busses */ if (c7200_pa_create_pci_busses(router) == -1) return(-1); /* Create PCI bus for PA Bay 0 (I/O Card, PCMCIA, Interfaces) */ vm->pci_bus_pool[0] = pci_bus_create("PA Slot 0",-1); /* PCI bridge for I/O card device on MB0 */ dev_plx6520cb_init(vm->pci_bus[1],3,vm->pci_bus_pool[0]); /* Create PCI busses for PA Bays 1,3,5 and PA Bays 2,4,6 */ vm->pci_bus_pool[24] = pci_bus_create("PA Slots 1,3,5",-1); vm->pci_bus_pool[25] = pci_bus_create("PA Slots 2,4,6",-1); dev_plx6520cb_init(vm->pci_bus[0],1,vm->pci_bus_pool[24]); dev_plx6520cb_init(vm->pci_bus[0],2,vm->pci_bus_pool[25]); /* Create the hidden "I/O" PCI bridge for PCMCIA controller */ c7200_create_io_pci_bridge(router,vm->pci_bus_pool[0]); /* Map the PA PCI busses */ vm->slots_pci_bus[0] = vm->pci_bus_pool[0]; for(i=1;i<C7200_MAX_PA_BAYS;i++) vm->slots_pci_bus[i] = vm->pci_bus_pool[i]; /* PCI bridges for PA Bays 1 to 6 */ c7200_pa_init_pci_bridge(router,1,vm->pci_bus_pool[24],1); c7200_pa_init_pci_bridge(router,3,vm->pci_bus_pool[24],2); c7200_pa_init_pci_bridge(router,5,vm->pci_bus_pool[24],3); c7200_pa_init_pci_bridge(router,2,vm->pci_bus_pool[25],1); c7200_pa_init_pci_bridge(router,4,vm->pci_bus_pool[25],2); c7200_pa_init_pci_bridge(router,6,vm->pci_bus_pool[25],3); return(0);}/* Show C7200 hardware info */void c7200_show_hardware(c7200_t *router){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -