Am 24. Oktober 2022 07:35:48 UTC schrieb "Philippe Mathieu-Daudé"
<phi...@linaro.org>:
>Hi Bernhard,
>
>On 22/10/22 17:04, Bernhard Beschow wrote:
>> Having an i8259 proxy allows for ISA PICs to be created and wired up in
>> southbridges. This is especially interesting for PIIX3 for two reasons:
>> First, the southbridge doesn't need to care about the virtualization
>> technology used (KVM, TCG, Xen) due to in-IRQs (where devices get
>> attached) and out-IRQs (which will trigger the IRQs of the respective
>> virtzalization technology) are separated. Second, since the in-IRQs are
>> populated with fully initialized qemu_irq's, they can already be wired
>> up inside PIIX3.
>>
>> Signed-off-by: Bernhard Beschow <shen...@gmail.com>
>> ---
>> hw/intc/i8259.c | 27 +++++++++++++++++++++++++++
>> include/hw/intc/i8259.h | 14 ++++++++++++++
>> 2 files changed, 41 insertions(+)
>
>> +static void isapic_set_irq(void *opaque, int irq, int level)
>> +{
>> + ISAPICState *s = opaque;
>> +
>> + qemu_set_irq(s->out_irqs[irq], level);
>> +}
>> +
>> +static void isapic_init(Object *obj)
>> +{
>> + ISAPICState *s = ISA_PIC(obj);
>> +
>> + qdev_init_gpio_in(DEVICE(s), isapic_set_irq, ISA_NUM_IRQS);
>> + qdev_init_gpio_out(DEVICE(s), s->out_irqs, ISA_NUM_IRQS);
>> +
>> + for (int i = 0; i < ISA_NUM_IRQS; ++i) {
>> + s->in_irqs[i] = qdev_get_gpio_in(DEVICE(s), i);
>> + }
>> +}
>> +
>> +static const TypeInfo isapic_info = {
>> + .name = TYPE_ISA_PIC,
>> + .parent = TYPE_ISA_DEVICE,
>> + .instance_size = sizeof(ISAPICState),
>> + .instance_init = isapic_init,
>> +};
>
>> --- a/include/hw/intc/i8259.h
>> +++ b/include/hw/intc/i8259.h
>> @@ -1,6 +1,20 @@
>> #ifndef HW_I8259_H
>> #define HW_I8259_H
>> +#include "qom/object.h"
>> +#include "hw/isa/isa.h"
>> +#include "qemu/typedefs.h"
>> +
>> +#define TYPE_ISA_PIC "isa-pic"
>> +OBJECT_DECLARE_SIMPLE_TYPE(ISAPICState, ISA_PIC)
>> +
>> +struct ISAPICState {
>> + ISADevice parent_obj;
>> +
>> + qemu_irq in_irqs[ISA_NUM_IRQS];
>> + qemu_irq out_irqs[ISA_NUM_IRQS];
>> +};
>
>There is nothing I8259 / ISA specific in your model.
>
>What about adding a generic qdev proxy-irq (having a configurable
>number of IRQs to proxy)? See for example hw/core/split-irq.c.
Will do!
Best regards,
Bernhard
>
>Regards,
>
>Phil.