Revision db895a1e hw/char/parallel.c
b/hw/char/parallel.c | ||
---|---|---|
477 | 477 |
PORTIO_END_OF_LIST(), |
478 | 478 |
}; |
479 | 479 |
|
480 |
static int parallel_isa_initfn(ISADevice *dev)
|
|
480 |
static void parallel_isa_realizefn(DeviceState *dev, Error **errp)
|
|
481 | 481 |
{ |
482 | 482 |
static int index; |
483 |
ISADevice *isadev = ISA_DEVICE(dev); |
|
483 | 484 |
ISAParallelState *isa = ISA_PARALLEL(dev); |
484 | 485 |
ParallelState *s = &isa->state; |
485 | 486 |
int base; |
486 | 487 |
uint8_t dummy; |
487 | 488 |
|
488 | 489 |
if (!s->chr) { |
489 |
fprintf(stderr, "Can't create parallel device, empty char device\n");
|
|
490 |
exit(1);
|
|
490 |
error_setg(errp, "Can't create parallel device, empty char device");
|
|
491 |
return;
|
|
491 | 492 |
} |
492 | 493 |
|
493 |
if (isa->index == -1) |
|
494 |
if (isa->index == -1) {
|
|
494 | 495 |
isa->index = index; |
495 |
if (isa->index >= MAX_PARALLEL_PORTS) |
|
496 |
return -1; |
|
497 |
if (isa->iobase == -1) |
|
496 |
} |
|
497 |
if (isa->index >= MAX_PARALLEL_PORTS) { |
|
498 |
error_setg(errp, "Max. supported number of parallel ports is %d.", |
|
499 |
MAX_PARALLEL_PORTS); |
|
500 |
return; |
|
501 |
} |
|
502 |
if (isa->iobase == -1) { |
|
498 | 503 |
isa->iobase = isa_parallel_io[isa->index]; |
504 |
} |
|
499 | 505 |
index++; |
500 | 506 |
|
501 | 507 |
base = isa->iobase; |
502 |
isa_init_irq(dev, &s->irq, isa->isairq); |
|
508 |
isa_init_irq(isadev, &s->irq, isa->isairq);
|
|
503 | 509 |
qemu_register_reset(parallel_reset, s); |
504 | 510 |
|
505 | 511 |
if (qemu_chr_fe_ioctl(s->chr, CHR_IOCTL_PP_READ_STATUS, &dummy) == 0) { |
... | ... | |
507 | 513 |
s->status = dummy; |
508 | 514 |
} |
509 | 515 |
|
510 |
isa_register_portio_list(dev, base, |
|
516 |
isa_register_portio_list(isadev, base,
|
|
511 | 517 |
(s->hw_driver |
512 | 518 |
? &isa_parallel_portio_hw_list[0] |
513 | 519 |
: &isa_parallel_portio_sw_list[0]), |
514 | 520 |
s, "parallel"); |
515 |
return 0; |
|
516 | 521 |
} |
517 | 522 |
|
518 | 523 |
/* Memory mapped interface */ |
... | ... | |
599 | 604 |
static void parallel_isa_class_initfn(ObjectClass *klass, void *data) |
600 | 605 |
{ |
601 | 606 |
DeviceClass *dc = DEVICE_CLASS(klass); |
602 |
ISADeviceClass *ic = ISA_DEVICE_CLASS(klass); |
|
603 |
ic->init = parallel_isa_initfn;
|
|
607 |
|
|
608 |
dc->realize = parallel_isa_realizefn;
|
|
604 | 609 |
dc->props = parallel_isa_properties; |
605 | 610 |
} |
606 | 611 |
|
Also available in: Unified diff