Revision e8ee28fb
b/hw/parallel.c | ||
---|---|---|
80 | 80 |
|
81 | 81 |
typedef struct ISAParallelState { |
82 | 82 |
ISADevice dev; |
83 |
uint32_t index; |
|
83 | 84 |
uint32_t iobase; |
84 | 85 |
uint32_t isairq; |
85 | 86 |
ParallelState state; |
... | ... | |
445 | 446 |
s->last_read_offset = ~0U; |
446 | 447 |
} |
447 | 448 |
|
449 |
static const int isa_parallel_io[MAX_PARALLEL_PORTS] = { 0x378, 0x278, 0x3bc }; |
|
450 |
|
|
448 | 451 |
static int parallel_isa_initfn(ISADevice *dev) |
449 | 452 |
{ |
453 |
static int index; |
|
450 | 454 |
ISAParallelState *isa = DO_UPCAST(ISAParallelState, dev, dev); |
451 | 455 |
ParallelState *s = &isa->state; |
452 |
int base = isa->iobase;
|
|
456 |
int base; |
|
453 | 457 |
uint8_t dummy; |
454 | 458 |
|
455 | 459 |
if (!s->chr) { |
... | ... | |
457 | 461 |
exit(1); |
458 | 462 |
} |
459 | 463 |
|
464 |
if (isa->index == -1) |
|
465 |
isa->index = index; |
|
466 |
if (isa->index >= MAX_PARALLEL_PORTS) |
|
467 |
return -1; |
|
468 |
if (isa->iobase == -1) |
|
469 |
isa->iobase = isa_parallel_io[isa->index]; |
|
470 |
index++; |
|
471 |
|
|
472 |
base = isa->iobase; |
|
460 | 473 |
isa_init_irq(dev, &s->irq, isa->isairq); |
461 | 474 |
parallel_reset(s); |
462 | 475 |
qemu_register_reset(parallel_reset, s); |
... | ... | |
483 | 496 |
return 0; |
484 | 497 |
} |
485 | 498 |
|
486 |
static const int isa_parallel_io[MAX_PARALLEL_PORTS] = { 0x378, 0x278, 0x3bc }; |
|
487 |
|
|
488 | 499 |
ParallelState *parallel_init(int index, CharDriverState *chr) |
489 | 500 |
{ |
490 | 501 |
ISADevice *dev; |
491 | 502 |
|
492 | 503 |
dev = isa_create("isa-parallel"); |
493 |
qdev_prop_set_uint32(&dev->qdev, "iobase", isa_parallel_io[index]); |
|
494 |
qdev_prop_set_uint32(&dev->qdev, "irq", 7); |
|
504 |
qdev_prop_set_uint32(&dev->qdev, "index", index); |
|
495 | 505 |
qdev_prop_set_chr(&dev->qdev, "chardev", chr); |
496 | 506 |
if (qdev_init(&dev->qdev) < 0) |
497 | 507 |
return NULL; |
... | ... | |
579 | 589 |
.qdev.size = sizeof(ISAParallelState), |
580 | 590 |
.init = parallel_isa_initfn, |
581 | 591 |
.qdev.props = (Property[]) { |
582 |
DEFINE_PROP_HEX32("iobase", ISAParallelState, iobase, 0x378), |
|
592 |
DEFINE_PROP_HEX32("index", ISAParallelState, index, -1), |
|
593 |
DEFINE_PROP_HEX32("iobase", ISAParallelState, iobase, -1), |
|
583 | 594 |
DEFINE_PROP_UINT32("irq", ISAParallelState, isairq, 7), |
584 | 595 |
DEFINE_PROP_CHR("chardev", ISAParallelState, state.chr), |
585 | 596 |
DEFINE_PROP_END_OF_LIST(), |
b/hw/serial.c | ||
---|---|---|
148 | 148 |
|
149 | 149 |
typedef struct ISASerialState { |
150 | 150 |
ISADevice dev; |
151 |
uint32_t index; |
|
151 | 152 |
uint32_t iobase; |
152 | 153 |
uint32_t isairq; |
153 | 154 |
SerialState state; |
... | ... | |
733 | 734 |
serial_event, s); |
734 | 735 |
} |
735 | 736 |
|
737 |
static const int isa_serial_io[MAX_SERIAL_PORTS] = { 0x3f8, 0x2f8, 0x3e8, 0x2e8 }; |
|
738 |
static const int isa_serial_irq[MAX_SERIAL_PORTS] = { 4, 3, 4, 3 }; |
|
739 |
|
|
736 | 740 |
static int serial_isa_initfn(ISADevice *dev) |
737 | 741 |
{ |
742 |
static int index; |
|
738 | 743 |
ISASerialState *isa = DO_UPCAST(ISASerialState, dev, dev); |
739 | 744 |
SerialState *s = &isa->state; |
740 | 745 |
|
746 |
if (isa->index == -1) |
|
747 |
isa->index = index; |
|
748 |
if (isa->index >= MAX_SERIAL_PORTS) |
|
749 |
return -1; |
|
750 |
if (isa->iobase == -1) |
|
751 |
isa->iobase = isa_serial_io[isa->index]; |
|
752 |
if (isa->isairq == -1) |
|
753 |
isa->isairq = isa_serial_irq[isa->index]; |
|
754 |
index++; |
|
755 |
|
|
741 | 756 |
s->baudbase = 115200; |
742 | 757 |
isa_init_irq(dev, &s->irq, isa->isairq); |
743 | 758 |
serial_init_core(s); |
... | ... | |
748 | 763 |
return 0; |
749 | 764 |
} |
750 | 765 |
|
751 |
static const int isa_serial_io[MAX_SERIAL_PORTS] = { 0x3f8, 0x2f8, 0x3e8, 0x2e8 }; |
|
752 |
static const int isa_serial_irq[MAX_SERIAL_PORTS] = { 4, 3, 4, 3 }; |
|
753 |
|
|
754 | 766 |
SerialState *serial_isa_init(int index, CharDriverState *chr) |
755 | 767 |
{ |
756 | 768 |
ISADevice *dev; |
757 | 769 |
|
758 | 770 |
dev = isa_create("isa-serial"); |
759 |
qdev_prop_set_uint32(&dev->qdev, "iobase", isa_serial_io[index]); |
|
760 |
qdev_prop_set_uint32(&dev->qdev, "irq", isa_serial_irq[index]); |
|
771 |
qdev_prop_set_uint32(&dev->qdev, "index", index); |
|
761 | 772 |
qdev_prop_set_chr(&dev->qdev, "chardev", chr); |
762 | 773 |
if (qdev_init(&dev->qdev) < 0) |
763 | 774 |
return NULL; |
... | ... | |
886 | 897 |
.qdev.size = sizeof(ISASerialState), |
887 | 898 |
.init = serial_isa_initfn, |
888 | 899 |
.qdev.props = (Property[]) { |
889 |
DEFINE_PROP_HEX32("iobase", ISASerialState, iobase, 0x3f8), |
|
890 |
DEFINE_PROP_UINT32("irq", ISASerialState, isairq, 4), |
|
900 |
DEFINE_PROP_HEX32("index", ISASerialState, index, -1), |
|
901 |
DEFINE_PROP_HEX32("iobase", ISASerialState, iobase, -1), |
|
902 |
DEFINE_PROP_UINT32("irq", ISASerialState, isairq, -1), |
|
891 | 903 |
DEFINE_PROP_CHR("chardev", ISASerialState, state.chr), |
892 | 904 |
DEFINE_PROP_END_OF_LIST(), |
893 | 905 |
}, |
Also available in: Unified diff