7e01bd80c1
The VIA integrated south bridge chips combine several functions and
allow routing their interrupts to any of the ISA IRQs also allowing
multiple sources to share the same ISA IRQ. E.g. pegasos2 firmware
configures everything to use IRQ 9 but amigaone routes them to
separate ISA IRQs so the current simplified routing does not work.
Bring back via_isa_set_irq() and change it to take the component that
wants to change an IRQ and keep track of interrupt status of each
source separately and do the mapping to ISA IRQ within the ISA bridge.
This may not handle cases when an ISA IRQ is controlled by devices
directly, not going through via_isa_set_irq() such as serial, parallel
or keyboard but these IRQs being conventionally fixed are not likely
to be change by guests or share with other devices so this does not
cause a problem in practice.
This reverts commit 4e5a20b6da
.
Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu>
Message-ID: <1c3902d4166234bef0a476026441eaac3dd6cda5.1701035944.git.balaton@eik.bme.hu>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
40 lines
834 B
C
40 lines
834 B
C
#ifndef HW_VT82C686_H
|
|
#define HW_VT82C686_H
|
|
|
|
#include "hw/pci/pci_device.h"
|
|
#include "audio/audio.h"
|
|
|
|
#define TYPE_VT82C686B_ISA "vt82c686b-isa"
|
|
#define TYPE_VT82C686B_USB_UHCI "vt82c686b-usb-uhci"
|
|
#define TYPE_VT8231_ISA "vt8231-isa"
|
|
#define TYPE_VIA_AC97 "via-ac97"
|
|
#define TYPE_VIA_IDE "via-ide"
|
|
#define TYPE_VIA_MC97 "via-mc97"
|
|
|
|
typedef struct {
|
|
uint8_t stat;
|
|
uint8_t type;
|
|
uint32_t base;
|
|
uint32_t curr;
|
|
uint32_t addr;
|
|
uint32_t clen;
|
|
} ViaAC97SGDChannel;
|
|
|
|
OBJECT_DECLARE_SIMPLE_TYPE(ViaAC97State, VIA_AC97);
|
|
|
|
struct ViaAC97State {
|
|
PCIDevice dev;
|
|
QEMUSoundCard card;
|
|
MemoryRegion sgd;
|
|
MemoryRegion fm;
|
|
MemoryRegion midi;
|
|
SWVoiceOut *vo;
|
|
ViaAC97SGDChannel aur;
|
|
uint16_t codec_regs[128];
|
|
uint32_t ac97_cmd;
|
|
};
|
|
|
|
void via_isa_set_irq(PCIDevice *d, int n, int level);
|
|
|
|
#endif
|