📄 dev_c7200_eth.c
字号:
/* Create the Intel i8254x chip */ data->port[0] = dev_i8254x_init(vm,card->dev_name,0, card->pci_bus,0, c7200_net_irq_for_slot_port(slot,0)); /* Store device info into the router structure */ card->drv_info = data; return(0);}/* PA-GE driver */struct cisco_card_driver dev_c7200_pa_ge_driver = { "PA-GE", 0, 0, dev_c7200_pa_ge_init, dev_c7200_pa_i8254x_shutdown, NULL, dev_c7200_pa_i8254x_set_nio, dev_c7200_pa_i8254x_unset_nio, NULL,};/* ====================================================================== *//* C7200-IO-2FE *//* ====================================================================== *//* C7200-IO-2FE/E: C7200 IOCard with two FastEthernet ports EEPROM */static const m_uint16_t eeprom_c7200_io_2fe_data[] = { 0x04FF, 0x4002, 0x1541, 0x0201, 0xC046, 0x0320, 0x001B, 0xCA06, 0x8249, 0x138B, 0x0642, 0x4230, 0xC18B, 0x3030, 0x3030, 0x3030, 0x3030, 0x0000, 0x0004, 0x0002, 0x0385, 0x1C0D, 0x7F03, 0xCB8F, 0x4337, 0x3230, 0x302D, 0x492F, 0x4F2D, 0x3246, 0x452F, 0x4580, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,};static const struct cisco_eeprom eeprom_c7200_io_2fe = { "C7200-IO-2FE", (m_uint16_t *)eeprom_c7200_io_2fe_data, sizeof(eeprom_c7200_io_2fe_data)/2,};/* * dev_c7200_pa_2fe_tx_init() * * Add a C7200-IO-2FE/E port adapter into specified slot. */static int dev_c7200_iocard_2fe_init(vm_instance_t *vm,struct cisco_card *card){ struct pa_i8254x_data *data; u_int slot = card->slot_id; /* Allocate the private data structure for the iocard */ if (!(data = malloc(sizeof(*data)))) { vm_error(vm,"%s: out of memory\n",card->dev_name); return(-1); } /* 2 Ethernet ports */ memset(data,0,sizeof(*data)); data->nr_port = 2; /* Set the PCI bus */ card->pci_bus = vm->slots_pci_bus[slot]; /* Set the EEPROM */ cisco_card_set_eeprom(vm,card,&eeprom_c7200_io_2fe); c7200_set_slot_eeprom(VM_C7200(vm),slot,&card->eeprom); /* Port Fa0/0 is on PCI Device 1 */ data->port[0] = dev_i8254x_init(vm,card->dev_name,0, card->pci_bus,1, c7200_net_irq_for_slot_port(slot,1)); /* Port Fa0/1 is on PCI Device 0 */ data->port[1] = dev_i8254x_init(vm,card->dev_name,0, card->pci_bus,0, c7200_net_irq_for_slot_port(slot,0)); if (!data->port[0] || !data->port[1]) { dev_i8254x_remove(data->port[0]); dev_i8254x_remove(data->port[1]); free(data); return(-1); } /* Store device info into the router structure */ card->drv_info = data; return(0);}/* C7200-IO-2FE driver */struct cisco_card_driver dev_c7200_iocard_2fe_driver = { "C7200-IO-2FE", 0, 0, dev_c7200_iocard_2fe_init, dev_c7200_pa_i8254x_shutdown, NULL, dev_c7200_pa_i8254x_set_nio, dev_c7200_pa_i8254x_unset_nio, NULL,};/* ====================================================================== *//* C7200-IO-GE-E *//* ====================================================================== *//* * C7200-IO-GE+E: C7200 IOCard with 1 GigatEthernet ports * and 1 Ethernet port EEPROM. */static const m_uint16_t eeprom_c7200_io_ge_e_data[] = { 0x04FF, 0x4002, 0x1641, 0x0201, 0xC046, 0x0320, 0x001B, 0xCA06, 0x8249, 0x138B, 0x0642, 0x4230, 0xC18B, 0x3030, 0x3030, 0x3030, 0x3030, 0x0000, 0x0004, 0x0002, 0x0385, 0x1C0D, 0x7F03, 0xCB8F, 0x4337, 0x3230, 0x302D, 0x492F, 0x4F2D, 0x3246, 0x452F, 0x4580, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,};static const struct cisco_eeprom eeprom_c7200_io_ge_e = { "C7200-IO-GE-E", (m_uint16_t *)eeprom_c7200_io_ge_e_data, sizeof(eeprom_c7200_io_ge_e_data)/2,};/* * dev_c7200_pa_ge_e_tx_init() * * Add a C7200-I/O-GE+E port adapter into specified slot. */static int dev_c7200_iocard_ge_e_init(vm_instance_t *vm,struct cisco_card *card){ struct pa_i8254x_data *data; u_int slot = card->slot_id; /* Allocate the private data structure for the iocard */ if (!(data = malloc(sizeof(*data)))) { vm_error(vm,"%s: out of memory\n",card->dev_name); return(-1); } /* 2 Ethernet ports */ memset(data,0,sizeof(*data)); data->nr_port = 2; /* Set the PCI bus */ card->pci_bus = vm->slots_pci_bus[slot]; /* Set the EEPROM */ cisco_card_set_eeprom(vm,card,&eeprom_c7200_io_ge_e); c7200_set_slot_eeprom(VM_C7200(vm),slot,&card->eeprom); /* Port Gi0/0 is on PCI Device 1 */ data->port[0] = dev_i8254x_init(vm,card->dev_name,0, card->pci_bus,1, c7200_net_irq_for_slot_port(slot,1)); /* Port e0/0 is on PCI Device 0 */ data->port[1] = dev_i8254x_init(vm,card->dev_name,0, card->pci_bus,0, c7200_net_irq_for_slot_port(slot,0)); /* Store device info into the router structure */ card->drv_info = data; return(0);}/* C7200-IO-GE-E driver */struct cisco_card_driver dev_c7200_iocard_ge_e_driver = { "C7200-IO-GE-E", 0, 0, dev_c7200_iocard_ge_e_init, dev_c7200_pa_i8254x_shutdown, NULL, dev_c7200_pa_i8254x_set_nio, dev_c7200_pa_i8254x_unset_nio, NULL,};/* ====================================================================== *//* PA-4E / PA-8E *//* ====================================================================== *//* PA-4E/PA-8E data */struct pa_4e8e_data { u_int nr_port; struct am79c971_data *port[8];};/* * dev_c7200_pa_4e_init() * * Add a PA-4E port adapter into specified slot. */static int dev_c7200_pa_4e_init(vm_instance_t *vm,struct cisco_card *card){ struct pa_4e8e_data *data; u_int slot = card->slot_id; int i; /* Allocate the private data structure for the PA-4E */ if (!(data = malloc(sizeof(*data)))) { vm_error(vm,"%s: out of memory\n",card->dev_name); return(-1); } /* 4 Ethernet ports */ memset(data,0,sizeof(*data)); data->nr_port = 4; /* Set the PCI bus */ card->pci_bus = vm->slots_pci_bus[slot]; /* Set the EEPROM */ cisco_card_set_eeprom(vm,card,cisco_eeprom_find_pa("PA-4E")); c7200_set_slot_eeprom(VM_C7200(vm),slot,&card->eeprom); /* Create the AMD Am79c971 chips */ for(i=0;i<data->nr_port;i++) { data->port[i] = dev_am79c971_init(vm,card->dev_name, AM79C971_TYPE_10BASE_T, card->pci_bus,i, c7200_net_irq_for_slot_port(slot,i)); } /* Store device info into the router structure */ card->drv_info = data; return(0);}/* * dev_c7200_pa_8e_init() * * Add a PA-8E port adapter into specified slot. */static int dev_c7200_pa_8e_init(vm_instance_t *vm,struct cisco_card *card){ struct pa_4e8e_data *data; u_int slot = card->slot_id; int i; /* Allocate the private data structure for the PA-8E */ if (!(data = malloc(sizeof(*data)))) { vm_error(vm,"%s: out of memory\n",card->dev_name); return(-1); } /* 4 Ethernet ports */ memset(data,0,sizeof(*data)); data->nr_port = 8; /* Set the PCI bus */ card->pci_bus = vm->slots_pci_bus[slot]; /* Set the EEPROM */ cisco_card_set_eeprom(vm,card,cisco_eeprom_find_pa("PA-8E")); c7200_set_slot_eeprom(VM_C7200(vm),slot,&card->eeprom); /* Create the AMD Am79c971 chips */ for(i=0;i<data->nr_port;i++) { data->port[i] = dev_am79c971_init(vm,card->dev_name, AM79C971_TYPE_10BASE_T, card->pci_bus,i, c7200_net_irq_for_slot_port(slot,i)); } /* Store device info into the router structure */ card->drv_info = data; return(0);}/* Remove a PA-4E/PA-8E from the specified slot */static int dev_c7200_pa_4e8e_shutdown(vm_instance_t *vm,struct cisco_card *card){ struct pa_4e8e_data *data = card->drv_info; int i; /* Remove the PA EEPROM */ cisco_card_unset_eeprom(card); c7200_set_slot_eeprom(VM_C7200(vm),card->slot_id,NULL); /* Remove the AMD Am79c971 chips */ for(i=0;i<data->nr_port;i++) dev_am79c971_remove(data->port[i]); free(data); return(0);}/* Bind a Network IO descriptor */static int dev_c7200_pa_4e8e_set_nio(vm_instance_t *vm,struct cisco_card *card, u_int port_id,netio_desc_t *nio){ struct pa_4e8e_data *d = card->drv_info; if (!d || (port_id >= d->nr_port)) return(-1); dev_am79c971_set_nio(d->port[port_id],nio); return(0);}/* Unbind a Network IO descriptor */static int dev_c7200_pa_4e8e_unset_nio(vm_instance_t *vm,struct cisco_card *card, u_int port_id){ struct pa_4e8e_data *d = card->drv_info; if (!d || (port_id >= d->nr_port)) return(-1); dev_am79c971_unset_nio(d->port[port_id]); return(0);}/* PA-4E driver */struct cisco_card_driver dev_c7200_pa_4e_driver = { "PA-4E", 1, 0, dev_c7200_pa_4e_init, dev_c7200_pa_4e8e_shutdown, NULL, dev_c7200_pa_4e8e_set_nio, dev_c7200_pa_4e8e_unset_nio, NULL,};/* PA-8E driver */struct cisco_card_driver dev_c7200_pa_8e_driver = { "PA-8E", 1, 0, dev_c7200_pa_8e_init, dev_c7200_pa_4e8e_shutdown, NULL, dev_c7200_pa_4e8e_set_nio, dev_c7200_pa_4e8e_unset_nio, NULL,};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -