Extensively reworked the PCI bus emulation, fixes quite a few bugs, including incorrect IRQ routing for the last two slots on the Intel Advanced/ATX.

This commit is contained in:
OBattler
2017-08-30 04:49:20 +02:00
parent 18dbde0118
commit 0d84add8a3
25 changed files with 771 additions and 333 deletions

View File

@@ -1,17 +1,14 @@
void elcr_reset(void);
void pci_set_irq_routing(int pci_int, int irq);
void pci_init(int type);
void pci_slot(int card);
void pci_add_specific(int card, uint8_t (*read)(int func, int addr, void *priv), void (*write)(int func, int addr, uint8_t val, void *priv), void *priv);
int pci_add(uint8_t (*read)(int func, int addr, void *priv), void (*write)(int func, int addr, uint8_t val, void *priv), void *priv);
void pci_set_irq_routing(int card, int irq);
void pci_set_card_routing(int card, int pci_int);
void pci_ide_set_irq(int ide_board, int irq);
void pci_set_irq(int card, int pci_int);
void pci_set_irq(uint8_t card, uint8_t pci_int);
void pci_ide_clear_irq(int ide_board, int irq);
void pci_clear_irq(int card, int pci_int);
int pci_irq_is_level(int irq);
void pci_clear_irq(uint8_t card, uint8_t pci_int);
void pci_reset(void);
void pci_init(int type);
void pci_register_slot(int card, int type, int inta, int intb, int intc, int intd);
uint8_t pci_add_card(uint8_t add_type, uint8_t (*read)(int func, int addr, void *priv), void (*write)(int func, int addr, uint8_t val, void *priv), void *priv);
#define PCI_REG_COMMAND 0x04
@@ -28,4 +25,20 @@ void pci_reset(void);
#define PCI_IRQ_DISABLED -1
enum
{
PCI_CARD_NORMAL = 0,
PCI_CARD_ONBOARD,
PCI_CARD_SPECIAL
};
#define PCI_ADD_NORMAL 0x80
#define PCI_ADD_VIDEO 0x81
extern int pci_burst_time, pci_nonburst_time;
typedef union {
uint32_t addr;
uint8_t addr_regs[4];
} bar_t;