/[dynamips]/upstream/dynamips-0.2.7-RC2/dev_c2691.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_c2691.c

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

upstream/dynamips-0.2.7-RC1/dev_c2691.c revision 7 by dpavlin, Sat Oct 6 16:23:47 2007 UTC upstream/dynamips-0.2.7-RC2/dev_c2691.c revision 8 by dpavlin, Sat Oct 6 16:24:54 2007 UTC
# Line 1  Line 1 
1  /*  /*
2   * Cisco 2691 simulation platform.   * Cisco router simulation platform.
3   * Copyright (c) 2006 Christophe Fillot (cf@utc.fr)   * Copyright (c) 2006 Christophe Fillot (cf@utc.fr)
4   *   *
5   * Generic Cisco 2691 routines and definitions (EEPROM,...).   * Generic Cisco 2691 routines and definitions (EEPROM,...).
# Line 22  Line 22 
22  #include "cisco_eeprom.h"  #include "cisco_eeprom.h"
23  #include "dev_rom.h"  #include "dev_rom.h"
24  #include "dev_c2691.h"  #include "dev_c2691.h"
25    #include "dev_c2691_iofpga.h"
26  #include "dev_vtty.h"  #include "dev_vtty.h"
27  #include "registry.h"  #include "registry.h"
28    
# Line 330  void c2691_save_config_all(FILE *fd) Line 331  void c2691_save_config_all(FILE *fd)
331     registry_foreach_type(OBJ_TYPE_VM,c2691_reg_save_config,fd,NULL);     registry_foreach_type(OBJ_TYPE_VM,c2691_reg_save_config,fd,NULL);
332  }  }
333    
334    /* Get slot/port corresponding to specified network IRQ */
335    static inline void
336    c2691_net_irq_get_slot_port(u_int irq,u_int *slot,u_int *port)
337    {
338       irq -= C2691_NETIO_IRQ_BASE;
339       *port = irq & C2691_NETIO_IRQ_PORT_MASK;
340       *slot = irq >> C2691_NETIO_IRQ_PORT_BITS;
341    }
342    
343    /* Get network IRQ for specified slot/port */
344    u_int c2691_net_irq_for_slot_port(u_int slot,u_int port)
345    {
346       u_int irq;
347    
348       irq = (slot << C2691_NETIO_IRQ_PORT_BITS) + port;
349       irq += C2691_NETIO_IRQ_BASE;
350    
351       return(irq);
352    }
353    
354  /* Set NM EEPROM definition */  /* Set NM EEPROM definition */
355  int c2691_nm_set_eeprom(c2691_t *router,u_int nm_bay,  int c2691_nm_set_eeprom(c2691_t *router,u_int nm_bay,
356                          const struct cisco_eeprom *eeprom)                          const struct cisco_eeprom *eeprom)
# Line 686  int c2691_nm_init(c2691_t *router,u_int Line 707  int c2691_nm_init(c2691_t *router,u_int
707     snprintf(bay->dev_name,len,"%s(%u)",bay->dev_type,nm_bay);     snprintf(bay->dev_name,len,"%s(%u)",bay->dev_type,nm_bay);
708    
709     /* Initialize NM driver */     /* Initialize NM driver */
710     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) {
711        vm_error(router->vm,"unable to initialize NM %u.\n",nm_bay);        vm_error(router->vm,"unable to initialize NM %u.\n",nm_bay);
712        return(-1);        return(-1);
713     }     }
# Line 1009  static int c2691_init_gt96100(c2691_t *r Line 1030  static int c2691_init_gt96100(c2691_t *r
1030     }     }
1031        
1032     return(dev_gt96100_init(vm,"gt96100",C2691_GT96K_ADDR,0x200000,     return(dev_gt96100_init(vm,"gt96100",C2691_GT96K_ADDR,0x200000,
1033                             C2691_GT96K_IRQ,C2691_NETIO_IRQ));                             C2691_GT96K_IRQ,c2691_net_irq_for_slot_port(0,0)));
1034  }  }
1035    
1036  /* Initialize a Cisco 2691 */  /* Initialize a Cisco 2691 */
# Line 1146  int c2691_init_platform(c2691_t *router) Line 1167  int c2691_init_platform(c2691_t *router)
1167     if (dev_c2691_iofpga_init(router,C2691_IOFPGA_ADDR,0x40000) == -1)     if (dev_c2691_iofpga_init(router,C2691_IOFPGA_ADDR,0x40000) == -1)
1168        return(-1);        return(-1);
1169    
1170       if (!(obj = vm_object_find(router->vm,"io_fpga")))
1171          return(-1);
1172    
1173       router->iofpga_data = obj->data;
1174    
1175  #if 0  #if 0
1176     /* PCI IO space */     /* PCI IO space */
1177     if (!(vm->pci_io_space = pci_io_data_init(vm,C2691_PCI_IO_ADDR)))     if (!(vm->pci_io_space = pci_io_data_init(vm,C2691_PCI_IO_ADDR)))
# Line 1250  int c2691_boot_ios(c2691_t *router) Line 1276  int c2691_boot_ios(c2691_t *router)
1276     return(0);     return(0);
1277  }  }
1278    
1279    /* Set an IRQ */
1280    static void c2691_set_irq(vm_instance_t *vm,u_int irq)
1281    {
1282       c2691_t *router = VM_C2691(vm);
1283       cpu_mips_t *cpu0 = CPU_MIPS64(vm->boot_cpu);
1284       u_int slot,port;
1285    
1286       switch(irq) {
1287          case 0 ... 7:
1288             mips64_set_irq(cpu0,irq);
1289    
1290             if (cpu0->irq_idle_preempt[irq])
1291                cpu_idle_break_wait(cpu0->gen);
1292             break;
1293    
1294          case C2691_NETIO_IRQ_BASE ... C2691_NETIO_IRQ_END:
1295             c2691_net_irq_get_slot_port(irq,&slot,&port);
1296             dev_c2691_iofpga_net_set_irq(router->iofpga_data,slot,port);
1297             break;
1298       }
1299    }
1300    
1301    /* Clear an IRQ */
1302    static void c2691_clear_irq(vm_instance_t *vm,u_int irq)
1303    {
1304       c2691_t *router = VM_C2691(vm);
1305       cpu_mips_t *cpu0 = CPU_MIPS64(vm->boot_cpu);
1306       u_int slot,port;
1307    
1308       switch(irq) {
1309          case 0 ... 7:
1310             mips64_clear_irq(cpu0,irq);
1311             break;
1312    
1313          case C2691_NETIO_IRQ_BASE ... C2691_NETIO_IRQ_END:
1314             c2691_net_irq_get_slot_port(irq,&slot,&port);
1315             dev_c2691_iofpga_net_clear_irq(router->iofpga_data,slot,port);
1316             break;
1317       }
1318    }
1319    
1320  /* Initialize a Cisco 2691 instance */  /* Initialize a Cisco 2691 instance */
1321  int c2691_init_instance(c2691_t *router)  int c2691_init_instance(c2691_t *router)
1322  {    {  
# Line 1268  int c2691_init_instance(c2691_t *router) Line 1335  int c2691_init_instance(c2691_t *router)
1335        return(-1);        return(-1);
1336     }     }
1337    
1338       /* IRQ routing */
1339       vm->set_irq = c2691_set_irq;
1340       vm->clear_irq = c2691_clear_irq;
1341    
1342     /* Load IOS configuration file */     /* Load IOS configuration file */
1343     if (vm->ios_config != NULL) {     if (vm->ios_config != NULL) {
1344        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