void bt_vhci_init(struct HCIInfo *info) { struct bt_vhci_s *s; int err[2]; int fd; fd = open(VHCI_DEV, O_RDWR); err[0] = errno; if (fd < 0) { fd = open(VHCI_UDEV, O_RDWR); err[1] = errno; } if (fd < 0) { fprintf(stderr, "qemu: Can't open `%s': %s (%i)\n", VHCI_DEV, strerror(err[0]), err[0]); fprintf(stderr, "qemu: Can't open `%s': %s (%i)\n", VHCI_UDEV, strerror(err[1]), err[1]); exit(-1); } s = qemu_mallocz(sizeof(struct bt_vhci_s)); s->fd = fd; s->info = info ?: qemu_next_hci(); s->info->opaque = s; s->info->evt_recv = vhci_out_hci_packet_event; s->info->acl_recv = vhci_out_hci_packet_acl; qemu_set_fd_handler(s->fd, vhci_read, NULL, s); }
CharDriverState *uart_hci_init(qemu_irq wakeup) { struct csrhci_s *s = (struct csrhci_s *) qemu_mallocz(sizeof(struct csrhci_s)); s->chr.opaque = s; s->chr.chr_write = csrhci_write; s->chr.chr_ioctl = csrhci_ioctl; s->hci = qemu_next_hci(); s->hci->opaque = s; s->hci->evt_recv = csrhci_out_hci_packet_event; s->hci->acl_recv = csrhci_out_hci_packet_acl; s->out_tm = qemu_new_timer(vm_clock, csrhci_out_tick, s); s->pins = qemu_allocate_irqs(csrhci_pins, s, __csrhci_pins); csrhci_reset(s); return &s->chr; }
CharDriverState *uart_hci_init(qemu_irq wakeup) { struct csrhci_s *s = (struct csrhci_s *) g_malloc0(sizeof(struct csrhci_s)); s->chr.opaque = s; s->chr.chr_write = csrhci_write; s->chr.chr_ioctl = csrhci_ioctl; s->chr.avail_connections = 1; s->hci = qemu_next_hci(); s->hci->opaque = s; s->hci->evt_recv = csrhci_out_hci_packet_event; s->hci->acl_recv = csrhci_out_hci_packet_acl; s->out_tm = timer_new_ns(QEMU_CLOCK_VIRTUAL, csrhci_out_tick, s); s->pins = qemu_allocate_irqs(csrhci_pins, s, __csrhci_pins); csrhci_reset(s); return &s->chr; }