void virtio_net_init(VirtIOBindFn bind, void *bind_arg, NICInfo *nd) { VirtIONet *n; static int virtio_net_id; n = (VirtIONet *)bind(bind_arg, "virtio-net", 0, VIRTIO_ID_NET, 6, sizeof(VirtIONet)); if (!n) return; n->vdev.get_config = virtio_net_update_config; n->vdev.get_features = virtio_net_get_features; n->vdev.set_features = virtio_net_set_features; n->rx_vq = virtio_add_queue(&n->vdev, 256, virtio_net_handle_rx); n->tx_vq = virtio_add_queue(&n->vdev, 256, virtio_net_handle_tx); memcpy(n->mac, nd->macaddr, 6); n->vc = qemu_new_vlan_client(nd->vlan, virtio_net_receive, virtio_net_can_receive, n); n->tx_timer = qemu_new_timer(vm_clock, virtio_net_tx_timer, n); n->tx_timer_active = 0; n->mergeable_rx_bufs = 0; register_savevm("virtio-net", virtio_net_id++, 1, virtio_net_save, virtio_net_load, n); }
void mipsnet_init (int base, qemu_irq irq, NICInfo *nd) { MIPSnetState *s; qemu_check_nic_model(nd, "mipsnet"); s = qemu_mallocz(sizeof(MIPSnetState)); register_ioport_write(base, 36, 1, mipsnet_ioport_write, s); register_ioport_read(base, 36, 1, mipsnet_ioport_read, s); register_ioport_write(base, 36, 2, mipsnet_ioport_write, s); register_ioport_read(base, 36, 2, mipsnet_ioport_read, s); register_ioport_write(base, 36, 4, mipsnet_ioport_write, s); register_ioport_read(base, 36, 4, mipsnet_ioport_read, s); s->io_base = base; s->irq = irq; if (nd && nd->vlan) { s->vc = nd->vc = qemu_new_vlan_client(nd->vlan, nd->model, nd->name, mipsnet_receive, mipsnet_can_receive, mipsnet_cleanup, s); } else { s->vc = NULL; } qemu_format_nic_info_str(s->vc, nd->macaddr); mipsnet_reset(s); register_savevm("mipsnet", 0, 0, mipsnet_save, mipsnet_load, s); }
static int net_init(struct XenDevice *xendev) { struct XenNetDev *netdev = container_of(xendev, struct XenNetDev, xendev); VLANState *vlan; /* read xenstore entries */ if (netdev->mac == NULL) netdev->mac = xenstore_read_be_str(&netdev->xendev, "mac"); /* do we have all we need? */ if (netdev->mac == NULL) return -1; vlan = qemu_find_vlan(netdev->xendev.dev, 1); netdev->vs = qemu_new_vlan_client(vlan, "xen", NULL, net_rx_ok, net_rx_packet, NULL, NULL, netdev); snprintf(netdev->vs->info_str, sizeof(netdev->vs->info_str), "nic: xenbus vif macaddr=%s", netdev->mac); /* fill info */ xenstore_write_be_int(&netdev->xendev, "feature-rx-copy", 1); xenstore_write_be_int(&netdev->xendev, "feature-rx-flip", 0); return 0; }
void smc91c111_init(NICInfo *nd, uint32_t base, void *pic, int irq) { smc91c111_state *s; int iomemtype; s = (smc91c111_state *)qemu_mallocz(sizeof(smc91c111_state)); iomemtype = cpu_register_io_memory(0, smc91c111_readfn, smc91c111_writefn, s); cpu_register_physical_memory(base, 16, iomemtype); s->base = base; s->pic = pic; s->irq = irq; memcpy(s->macaddr, nd->macaddr, 6); smc91c111_reset(s); s->vc = qemu_new_vlan_client(nd->vlan, smc91c111_receive, smc91c111_can_receive, s); /* ??? Save/restore. */ }
int tap_win32_init(VLANState *vlan, const char *ifname) { TAPState *s; s = qemu_mallocz(sizeof(TAPState)); if (!s) return -1; if (tap_win32_open(&s->handle, ifname) < 0) { printf("tap: Could not open '%s'\n", ifname); return -1; } s->vc = qemu_new_vlan_client(vlan, tap_receive, NULL, s); snprintf(s->vc->info_str, sizeof(s->vc->info_str), "tap: ifname=%s", ifname); qemu_add_wait_object(s->handle->tap_semaphore, tap_win32_send, s); return 0; }
void smc91c111_init(NICInfo *nd, uint32_t base, qemu_irq irq) { smc91c111_state *s; int iomemtype; qemu_check_nic_model(nd, "smc91c111"); s = (smc91c111_state *)qemu_mallocz(sizeof(smc91c111_state)); iomemtype = cpu_register_io_memory(0, smc91c111_readfn, smc91c111_writefn, s); cpu_register_physical_memory(base, 16, iomemtype); s->irq = irq; memcpy(s->macaddr, nd->macaddr, 6); smc91c111_reset(s); s->vc = qemu_new_vlan_client(nd->vlan, nd->model, nd->name, smc91c111_receive, smc91c111_can_receive, s); qemu_format_nic_info_str(s->vc, s->macaddr); /* ??? Save/restore. */ }
static void tnetw1130_init(pci_tnetw1130_t *d, NICInfo * nd) { tnetw1130_t *s = &d->tnetw1130; /* TI TNETW1130 */ tnetw1130_pci_config(d->dev.config); /* Handler for memory-mapped I/O */ s->io_memory[0] = cpu_register_io_memory(0, tnetw1130_region0_read, tnetw1130_region0_write, d); s->io_memory[1] = cpu_register_io_memory(0, tnetw1130_region1_read, tnetw1130_region1_write, d); TRACE(TNETW, logout("io_memory = 0x%08x, 0x%08x\n", s->io_memory[0], s->io_memory[1])); pci_register_io_region(&d->dev, 0, TNETW1130_MEM0_SIZE, PCI_ADDRESS_SPACE_MEM, tnetw1130_mem_map); pci_register_io_region(&d->dev, 1, TNETW1130_MEM1_SIZE, PCI_ADDRESS_SPACE_MEM, tnetw1130_mem_map); static const char macaddr[6] = { 0x00, 0x60, 0x65, 0x02, 0x4a, 0x8e }; memcpy(s->macaddr, macaddr, 6); //~ memcpy(s->macaddr, nd->macaddr, 6); tnetw1130_reset(s); s->vc = qemu_new_vlan_client(nd->vlan, nd->model, nd->name, tnetw1130_receive, tnetw1130_can_receive, tnetw1130_cleanup, s); qemu_format_nic_info_str(s->vc, s->macaddr); qemu_register_reset(nic_reset, d); register_savevm("tnetw1130", tnetw1130_instance, tnetw1130_version, tnetw1130_save, tnetw1130_load, d); }
void mipsnet_init (int base, qemu_irq irq, NICInfo *nd) { MIPSnetState *s; s = qemu_mallocz(sizeof(MIPSnetState)); if (!s) return; register_ioport_write(base, 36, 1, mipsnet_ioport_write, s); register_ioport_read(base, 36, 1, mipsnet_ioport_read, s); register_ioport_write(base, 36, 2, mipsnet_ioport_write, s); register_ioport_read(base, 36, 2, mipsnet_ioport_read, s); register_ioport_write(base, 36, 4, mipsnet_ioport_write, s); register_ioport_read(base, 36, 4, mipsnet_ioport_read, s); s->irq = irq; s->nd = nd; if (nd && nd->vlan) { s->vc = qemu_new_vlan_client(nd->vlan, mipsnet_receive, mipsnet_can_receive, s); } else { s->vc = NULL; } snprintf(s->vc->info_str, sizeof(s->vc->info_str), "mipsnet macaddr=%02x:%02x:%02x:%02x:%02x:%02x", s->nd->macaddr[0], s->nd->macaddr[1], s->nd->macaddr[2], s->nd->macaddr[3], s->nd->macaddr[4], s->nd->macaddr[5]); mipsnet_reset(s); register_savevm("mipsnet", 0, 0, mipsnet_save, mipsnet_load, s); }