/[dynamips]/upstream/dynamips-0.2.7-RC2/dev_c3600.c
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /upstream/dynamips-0.2.7-RC2/dev_c3600.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

upstream/dynamips-0.2.7-RC1/dev_c3600.c revision 7 by dpavlin, Sat Oct 6 16:23:47 2007 UTC upstream/dynamips-0.2.7-RC2/dev_c3600.c revision 8 by dpavlin, Sat Oct 6 16:24:54 2007 UTC
# Line 21  Line 21 
21  #include "cisco_eeprom.h"  #include "cisco_eeprom.h"
22  #include "dev_rom.h"  #include "dev_rom.h"
23  #include "dev_c3600.h"  #include "dev_c3600.h"
24    #include "dev_c3600_iofpga.h"
25  #include "dev_c3600_bay.h"  #include "dev_c3600_bay.h"
26  #include "dev_vtty.h"  #include "dev_vtty.h"
27  #include "registry.h"  #include "registry.h"
# Line 343  void c3600_save_config_all(FILE *fd) Line 344  void c3600_save_config_all(FILE *fd)
344     registry_foreach_type(OBJ_TYPE_VM,c3600_reg_save_config,fd,NULL);     registry_foreach_type(OBJ_TYPE_VM,c3600_reg_save_config,fd,NULL);
345  }  }
346    
347    /* Get slot/port corresponding to specified network IRQ */
348    static inline void
349    c3600_net_irq_get_slot_port(u_int irq,u_int *slot,u_int *port)
350    {
351       irq -= C3600_NETIO_IRQ_BASE;
352       *port = irq & C3600_NETIO_IRQ_PORT_MASK;
353       *slot = irq >> C3600_NETIO_IRQ_PORT_BITS;
354    }
355    
356    /* Get network IRQ for specified slot/port */
357    u_int c3600_net_irq_for_slot_port(u_int slot,u_int port)
358    {
359       u_int irq;
360    
361       irq = (slot << C3600_NETIO_IRQ_PORT_BITS) + port;
362       irq += C3600_NETIO_IRQ_BASE;
363    
364       return(irq);
365    }
366    
367  /* Set NM EEPROM definition */  /* Set NM EEPROM definition */
368  int c3600_nm_set_eeprom(c3600_t *router,u_int nm_bay,  int c3600_nm_set_eeprom(c3600_t *router,u_int nm_bay,
369                          const struct cisco_eeprom *eeprom)                          const struct cisco_eeprom *eeprom)
# Line 699  int c3600_nm_init(c3600_t *router,u_int Line 720  int c3600_nm_init(c3600_t *router,u_int
720     snprintf(bay->dev_name,len,"%s(%u)",bay->dev_type,nm_bay);     snprintf(bay->dev_name,len,"%s(%u)",bay->dev_type,nm_bay);
721    
722     /* Initialize NM driver */     /* Initialize NM driver */
723     if (bay->nm_driver->nm_init(router,bay->dev_name,nm_bay) == 1) {     if (bay->nm_driver->nm_init(router,bay->dev_name,nm_bay) == -1) {
724        vm_error(router->vm,"unable to initialize NM %u.\n",nm_bay);        vm_error(router->vm,"unable to initialize NM %u.\n",nm_bay);
725        return(-1);        return(-1);
726     }     }
# Line 1267  int c3600_init_platform(c3600_t *router) Line 1288  int c3600_init_platform(c3600_t *router)
1288     struct c3600_nm_bay *nm_bay;     struct c3600_nm_bay *nm_bay;
1289     cpu_mips_t *cpu;     cpu_mips_t *cpu;
1290     cpu_gen_t *gen;     cpu_gen_t *gen;
1291       vm_obj_t *obj;
1292     int i;     int i;
1293    
1294     /* Copy config register setup into "active" config register */     /* Copy config register setup into "active" config register */
# Line 1328  int c3600_init_platform(c3600_t *router) Line 1350  int c3600_init_platform(c3600_t *router)
1350     if (dev_c3600_iofpga_init(router,C3600_IOFPGA_ADDR,0x40000) == -1)     if (dev_c3600_iofpga_init(router,C3600_IOFPGA_ADDR,0x40000) == -1)
1351        return(-1);        return(-1);
1352    
1353       if (!(obj = vm_object_find(router->vm,"io_fpga")))
1354          return(-1);
1355    
1356       router->iofpga_data = obj->data;
1357    
1358     /* PCI IO space */     /* PCI IO space */
1359     if (!(vm->pci_io_space = pci_io_data_init(vm,C3600_PCI_IO_ADDR)))     if (!(vm->pci_io_space = pci_io_data_init(vm,C3600_PCI_IO_ADDR)))
1360        return(-1);        return(-1);
# Line 1426  int c3600_boot_ios(c3600_t *router) Line 1453  int c3600_boot_ios(c3600_t *router)
1453     return(0);     return(0);
1454  }  }
1455    
1456    /* Set an IRQ */
1457    static void c3600_set_irq(vm_instance_t *vm,u_int irq)
1458    {
1459       c3600_t *router = VM_C3600(vm);
1460       cpu_mips_t *cpu0 = CPU_MIPS64(vm->boot_cpu);
1461       u_int slot,port;
1462    
1463       switch(irq) {
1464          case 0 ... 7:
1465             mips64_set_irq(cpu0,irq);
1466    
1467             if (cpu0->irq_idle_preempt[irq])
1468                cpu_idle_break_wait(cpu0->gen);
1469             break;
1470    
1471          case C3600_NETIO_IRQ_BASE ... C3600_NETIO_IRQ_END:
1472             c3600_net_irq_get_slot_port(irq,&slot,&port);
1473             dev_c3600_iofpga_net_set_irq(router->iofpga_data,slot,port);
1474             break;
1475       }
1476    }
1477    
1478    /* Clear an IRQ */
1479    static void c3600_clear_irq(vm_instance_t *vm,u_int irq)
1480    {
1481       c3600_t *router = VM_C3600(vm);
1482       cpu_mips_t *cpu0 = CPU_MIPS64(vm->boot_cpu);
1483       u_int slot,port;
1484    
1485       switch(irq) {
1486          case 0 ... 7:
1487             mips64_clear_irq(cpu0,irq);
1488             break;
1489    
1490          case C3600_NETIO_IRQ_BASE ... C3600_NETIO_IRQ_END:
1491             c3600_net_irq_get_slot_port(irq,&slot,&port);
1492             dev_c3600_iofpga_net_clear_irq(router->iofpga_data,slot,port);
1493             break;
1494       }
1495    }
1496    
1497  /* Initialize a Cisco 3600 instance */  /* Initialize a Cisco 3600 instance */
1498  int c3600_init_instance(c3600_t *router)  int c3600_init_instance(c3600_t *router)
1499  {    {  
# Line 1444  int c3600_init_instance(c3600_t *router) Line 1512  int c3600_init_instance(c3600_t *router)
1512        return(-1);        return(-1);
1513     }     }
1514    
1515       /* IRQ routing */
1516       vm->set_irq = c3600_set_irq;
1517       vm->clear_irq = c3600_clear_irq;
1518    
1519     /* Load IOS configuration file */     /* Load IOS configuration file */
1520     if (vm->ios_config != NULL) {     if (vm->ios_config != NULL) {
1521        vm_nvram_push_config(vm,vm->ios_config);        vm_nvram_push_config(vm,vm->ios_config);

Legend:
Removed from v.7  
changed lines
  Added in v.8

  ViewVC Help
Powered by ViewVC 1.1.26