Revision 806b6024 hw/usb-serial.c
b/hw/usb-serial.c | ||
---|---|---|
524 | 524 |
} |
525 | 525 |
} |
526 | 526 |
|
527 |
static int usb_serial_initfn(USBDevice *dev) |
|
528 |
{ |
|
529 |
USBSerialState *s = DO_UPCAST(USBSerialState, dev, dev); |
|
530 |
s->dev.speed = USB_SPEED_FULL; |
|
531 |
return 0; |
|
532 |
} |
|
533 |
|
|
527 | 534 |
USBDevice *usb_serial_init(const char *filename) |
528 | 535 |
{ |
536 |
USBDevice *dev; |
|
529 | 537 |
USBSerialState *s; |
530 | 538 |
CharDriverState *cdrv; |
531 | 539 |
unsigned short vendorid = 0x0403, productid = 0x6001; |
... | ... | |
561 | 569 |
return NULL; |
562 | 570 |
} |
563 | 571 |
filename++; |
564 |
s = qemu_mallocz(sizeof(USBSerialState)); |
|
565 | 572 |
|
566 | 573 |
snprintf(label, sizeof(label), "usbserial%d", index++); |
567 | 574 |
cdrv = qemu_chr_open(label, filename, NULL); |
568 | 575 |
if (!cdrv) |
569 |
goto fail; |
|
570 |
s->cs = cdrv; |
|
571 |
qemu_chr_add_handlers(cdrv, usb_serial_can_read, usb_serial_read, usb_serial_event, s); |
|
572 |
|
|
573 |
s->dev.speed = USB_SPEED_FULL; |
|
574 |
s->dev.handle_packet = usb_generic_handle_packet; |
|
575 |
|
|
576 |
s->dev.handle_reset = usb_serial_handle_reset; |
|
577 |
s->dev.handle_control = usb_serial_handle_control; |
|
578 |
s->dev.handle_data = usb_serial_handle_data; |
|
579 |
s->dev.handle_destroy = usb_serial_handle_destroy; |
|
576 |
return NULL; |
|
580 | 577 |
|
578 |
dev = usb_create_simple(NULL /* FIXME */, "QEMU USB Serial"); |
|
579 |
s = DO_UPCAST(USBSerialState, dev, dev); |
|
580 |
s->cs = cdrv; |
|
581 | 581 |
s->vendorid = vendorid; |
582 | 582 |
s->productid = productid; |
583 |
|
|
584 | 583 |
snprintf(s->dev.devname, sizeof(s->dev.devname), "QEMU USB Serial(%.16s)", |
585 | 584 |
filename); |
586 | 585 |
|
586 |
qemu_chr_add_handlers(cdrv, usb_serial_can_read, usb_serial_read, |
|
587 |
usb_serial_event, s); |
|
588 |
|
|
587 | 589 |
usb_serial_handle_reset((USBDevice *)s); |
588 | 590 |
return (USBDevice *)s; |
589 |
fail: |
|
590 |
qemu_free(s); |
|
591 |
return NULL; |
|
592 | 591 |
} |
592 |
|
|
593 |
static struct USBDeviceInfo serial_info = { |
|
594 |
.qdev.name = "QEMU USB Serial", |
|
595 |
.qdev.size = sizeof(USBSerialState), |
|
596 |
.init = usb_serial_initfn, |
|
597 |
.handle_packet = usb_generic_handle_packet, |
|
598 |
.handle_reset = usb_serial_handle_reset, |
|
599 |
.handle_control = usb_serial_handle_control, |
|
600 |
.handle_data = usb_serial_handle_data, |
|
601 |
.handle_destroy = usb_serial_handle_destroy, |
|
602 |
}; |
|
603 |
|
|
604 |
static void usb_serial_register_devices(void) |
|
605 |
{ |
|
606 |
usb_qdev_register(&serial_info); |
|
607 |
} |
|
608 |
device_init(usb_serial_register_devices) |
Also available in: Unified diff