serial-isa.c (eeceb0849de2126185cf71860a449667fac2f0d7) | serial-isa.c (db895a1e6a97e919f9b86d60c969377357b05066) |
---|---|
1/* 2 * QEMU 16550A UART emulation 3 * 4 * Copyright (c) 2003-2004 Fabrice Bellard 5 * Copyright (c) 2008 Citrix Systems, Inc. 6 * 7 * Permission is hereby granted, free of charge, to any person obtaining a copy 8 * of this software and associated documentation files (the "Software"), to deal --- 30 unchanged lines hidden (view full) --- 39 40static const int isa_serial_io[MAX_SERIAL_PORTS] = { 41 0x3f8, 0x2f8, 0x3e8, 0x2e8 42}; 43static const int isa_serial_irq[MAX_SERIAL_PORTS] = { 44 4, 3, 4, 3 45}; 46 | 1/* 2 * QEMU 16550A UART emulation 3 * 4 * Copyright (c) 2003-2004 Fabrice Bellard 5 * Copyright (c) 2008 Citrix Systems, Inc. 6 * 7 * Permission is hereby granted, free of charge, to any person obtaining a copy 8 * of this software and associated documentation files (the "Software"), to deal --- 30 unchanged lines hidden (view full) --- 39 40static const int isa_serial_io[MAX_SERIAL_PORTS] = { 41 0x3f8, 0x2f8, 0x3e8, 0x2e8 42}; 43static const int isa_serial_irq[MAX_SERIAL_PORTS] = { 44 4, 3, 4, 3 45}; 46 |
47static int serial_isa_initfn(ISADevice *dev) | 47static void serial_isa_realizefn(DeviceState *dev, Error **errp) |
48{ 49 static int index; | 48{ 49 static int index; |
50 ISADevice *isadev = ISA_DEVICE(dev); |
|
50 ISASerialState *isa = ISA_SERIAL(dev); 51 SerialState *s = &isa->state; 52 53 if (isa->index == -1) { 54 isa->index = index; 55 } 56 if (isa->index >= MAX_SERIAL_PORTS) { | 51 ISASerialState *isa = ISA_SERIAL(dev); 52 SerialState *s = &isa->state; 53 54 if (isa->index == -1) { 55 isa->index = index; 56 } 57 if (isa->index >= MAX_SERIAL_PORTS) { |
57 return -1; | 58 error_setg(errp, "Max. supported number of ISA serial ports is %d.", 59 MAX_SERIAL_PORTS); 60 return; |
58 } 59 if (isa->iobase == -1) { 60 isa->iobase = isa_serial_io[isa->index]; 61 } 62 if (isa->isairq == -1) { 63 isa->isairq = isa_serial_irq[isa->index]; 64 } 65 index++; 66 67 s->baudbase = 115200; | 61 } 62 if (isa->iobase == -1) { 63 isa->iobase = isa_serial_io[isa->index]; 64 } 65 if (isa->isairq == -1) { 66 isa->isairq = isa_serial_irq[isa->index]; 67 } 68 index++; 69 70 s->baudbase = 115200; |
68 isa_init_irq(dev, &s->irq, isa->isairq); 69 serial_init_core(s); 70 qdev_set_legacy_instance_id(&dev->qdev, isa->iobase, 3); | 71 isa_init_irq(isadev, &s->irq, isa->isairq); 72 serial_realize_core(s, errp); 73 qdev_set_legacy_instance_id(dev, isa->iobase, 3); |
71 72 memory_region_init_io(&s->io, &serial_io_ops, s, "serial", 8); | 74 75 memory_region_init_io(&s->io, &serial_io_ops, s, "serial", 8); |
73 isa_register_ioport(dev, &s->io, isa->iobase); 74 return 0; | 76 isa_register_ioport(isadev, &s->io, isa->iobase); |
75} 76 77static const VMStateDescription vmstate_isa_serial = { 78 .name = "serial", 79 .version_id = 3, 80 .minimum_version_id = 2, 81 .fields = (VMStateField[]) { 82 VMSTATE_STRUCT(state, ISASerialState, 0, vmstate_serial, SerialState), --- 8 unchanged lines hidden (view full) --- 91 DEFINE_PROP_CHR("chardev", ISASerialState, state.chr), 92 DEFINE_PROP_UINT32("wakeup", ISASerialState, state.wakeup, 0), 93 DEFINE_PROP_END_OF_LIST(), 94}; 95 96static void serial_isa_class_initfn(ObjectClass *klass, void *data) 97{ 98 DeviceClass *dc = DEVICE_CLASS(klass); | 77} 78 79static const VMStateDescription vmstate_isa_serial = { 80 .name = "serial", 81 .version_id = 3, 82 .minimum_version_id = 2, 83 .fields = (VMStateField[]) { 84 VMSTATE_STRUCT(state, ISASerialState, 0, vmstate_serial, SerialState), --- 8 unchanged lines hidden (view full) --- 93 DEFINE_PROP_CHR("chardev", ISASerialState, state.chr), 94 DEFINE_PROP_UINT32("wakeup", ISASerialState, state.wakeup, 0), 95 DEFINE_PROP_END_OF_LIST(), 96}; 97 98static void serial_isa_class_initfn(ObjectClass *klass, void *data) 99{ 100 DeviceClass *dc = DEVICE_CLASS(klass); |
99 ISADeviceClass *ic = ISA_DEVICE_CLASS(klass); 100 ic->init = serial_isa_initfn; | 101 102 dc->realize = serial_isa_realizefn; |
101 dc->vmsd = &vmstate_isa_serial; 102 dc->props = serial_isa_properties; 103} 104 105static const TypeInfo serial_isa_info = { 106 .name = TYPE_ISA_SERIAL, 107 .parent = TYPE_ISA_DEVICE, 108 .instance_size = sizeof(ISASerialState), --- 25 unchanged lines hidden --- | 103 dc->vmsd = &vmstate_isa_serial; 104 dc->props = serial_isa_properties; 105} 106 107static const TypeInfo serial_isa_info = { 108 .name = TYPE_ISA_SERIAL, 109 .parent = TYPE_ISA_DEVICE, 110 .instance_size = sizeof(ISASerialState), --- 25 unchanged lines hidden --- |