|
|
1.1 root 1: /*
2: * Cisco router simulation platform.
3: * Copyright (c) 2007 Christophe Fillot ([email protected])
4: *
5: * PC Modules NM (NM-NAM, NM-CIDS, ...) for c3745 platforms.
6: */
7:
8: #include <stdio.h>
9: #include <stdlib.h>
10: #include <string.h>
11: #include <stdarg.h>
12: #include <unistd.h>
13: #include <time.h>
14: #include <errno.h>
15: #include <assert.h>
16:
17: #include "utils.h"
18: #include "net.h"
19: #include "net_io.h"
20: #include "ptask.h"
21: #include "vm.h"
22: #include "dev_i8255x.h"
23: #include "dev_c3745.h"
24:
25: /* Initialize a NM PC module in the specified slot */
26: static int dev_c3745_pcmod_init(vm_instance_t *vm,struct cisco_card *card)
27: {
28:
29: struct i8255x_data *data;
30: u_int slot = card->slot_id;
31:
32: /* Set the PCI bus */
33: card->pci_bus = vm->slots_pci_bus[slot];
34:
35: /* Set the EEPROM */
36: cisco_card_set_eeprom(vm,card,cisco_eeprom_find_nm(card->driver->dev_type));
37: c3745_set_slot_eeprom(VM_C3745(vm),slot,&card->eeprom);
38:
39: /* Create the Intel i8255x chip */
40: data = dev_i8255x_init(vm,card->dev_name,0,
41: card->pci_bus,0,
42: c3745_net_irq_for_slot_port(slot,0));
43:
44: /* Store device info into the router structure */
45: card->drv_info = data;
46: return(0);
47: }
48:
49: /* Remove a NM PC module from the specified slot */
50: static int dev_c3745_pcmod_shutdown(vm_instance_t *vm,struct cisco_card *card)
51: {
52: struct i8255x_data *data = card->drv_info;
53:
54: /* Remove the NM EEPROM */
55: cisco_card_unset_eeprom(card);
56: c3745_set_slot_eeprom(VM_C3745(vm),card->slot_id,NULL);
57:
58: /* Remove the Intel i2855x chip */
59: dev_i8255x_remove(data);
60: return(0);
61: }
62:
63: /* Bind a Network IO descriptor */
64: static int dev_c3745_pcmod_set_nio(vm_instance_t *vm,struct cisco_card *card,
65: u_int port_id,netio_desc_t *nio)
66: {
67: struct i8255x_data *d = card->drv_info;
68:
69: if (!d || (port_id != 0))
70: return(-1);
71:
72: dev_i8255x_set_nio(d,nio);
73: return(0);
74: }
75:
76: /* Unbind a Network IO descriptor */
77: static int dev_c3745_pcmod_unset_nio(vm_instance_t *vm,struct cisco_card *card,
78: u_int port_id)
79: {
80: struct i8255x_data *d = card->drv_info;
81:
82: if (!d || (port_id != 0))
83: return(-1);
84:
85: dev_i8255x_unset_nio(d);
86: return(0);
87: }
88:
89: /* NM-NAM driver */
90: struct cisco_card_driver dev_c3745_nm_nam_driver = {
91: "NM-NAM", 0, 0,
92: dev_c3745_pcmod_init,
93: dev_c3745_pcmod_shutdown,
94: NULL,
95: dev_c3745_pcmod_set_nio,
96: dev_c3745_pcmod_unset_nio,
97: NULL,
98: };
99:
100: /* NM-CIDS driver */
101: struct cisco_card_driver dev_c3745_nm_cids_driver = {
102: "NM-CIDS", 0, 0,
103: dev_c3745_pcmod_init,
104: dev_c3745_pcmod_shutdown,
105: NULL,
106: dev_c3745_pcmod_set_nio,
107: dev_c3745_pcmod_unset_nio,
108: NULL,
109: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.