Revision 2e15e23b hw/isa-bus.c

b/hw/isa-bus.c
57 57
    isabus->irqs = irqs;
58 58
}
59 59

  
60
void isa_connect_irq(ISADevice *dev, int devnr, int isairq)
61
{
62
    assert(devnr >= 0 && devnr < dev->nirqs);
63
    if (isabus->assigned & (1 << isairq)) {
64
        fprintf(stderr, "isa irq %d already assigned\n", isairq);
65
        exit(1);
66
    }
67
    if (dev->irqs[devnr]) {
68
        isabus->assigned |= (1 << isairq);
69
        dev->isairq[devnr] = isairq;
70
        *dev->irqs[devnr] = isabus->irqs[isairq];
71
    }
72
}
73

  
74 60
/*
75 61
 * isa_reserve_irq() reserves the ISA irq and returns the corresponding
76 62
 * qemu_irq entry for the i8259.
......
92 78
    return isabus->irqs[isairq];
93 79
}
94 80

  
95
void isa_init_irq(ISADevice *dev, qemu_irq *p)
81
void isa_init_irq(ISADevice *dev, qemu_irq *p, int isairq)
96 82
{
97
    assert(dev->nirqs < ARRAY_SIZE(dev->irqs));
98
    dev->irqs[dev->nirqs] = p;
83
    assert(dev->nirqs < ARRAY_SIZE(dev->isairq));
84
    if (isabus->assigned & (1 << isairq)) {
85
        fprintf(stderr, "isa irq %d already assigned\n", isairq);
86
        exit(1);
87
    }
88
    isabus->assigned |= (1 << isairq);
89
    dev->isairq[dev->nirqs] = isairq;
90
    *p = isabus->irqs[isairq];
99 91
    dev->nirqs++;
100 92
}
101 93

  
......
117 109
    qdev_register(&info->qdev);
118 110
}
119 111

  
120
ISADevice *isa_create_simple(const char *name, uint32_t irq, uint32 irq2)
112
ISADevice *isa_create_simple(const char *name)
121 113
{
122 114
    DeviceState *dev;
123
    ISADevice *isa;
124 115

  
125 116
    if (!isabus) {
126 117
        fprintf(stderr, "Tried to create isa device %s with no isa bus present.\n", name);
127 118
        return NULL;
128 119
    }
129 120
    dev = qdev_create(&isabus->qbus, name);
130
    isa = DO_UPCAST(ISADevice, qdev, dev);
131 121
    qdev_init(dev);
132
    if (irq != -1) {
133
        isa_connect_irq(isa, 0, irq);
134
    }
135
    if (irq2 != -1) {
136
        isa_connect_irq(isa, 1, irq2);
137
    }
138
    return isa;
122
    return DO_UPCAST(ISADevice, qdev, dev);
139 123
}
140 124

  
141 125
static void isabus_dev_print(Monitor *mon, DeviceState *dev, int indent)

Also available in: Unified diff