Moved Voodoo initialization to the very end to minimize the likelihood of SCSI adapters ending up on the bridge.
This commit is contained in:
@@ -1109,6 +1109,10 @@ pc_reset_hard_init(void)
|
|||||||
/* Reset any ISA RTC cards. */
|
/* Reset any ISA RTC cards. */
|
||||||
isartc_reset();
|
isartc_reset();
|
||||||
|
|
||||||
|
/* Initialize the Voodoo cards here inorder to minmize
|
||||||
|
the chances of the SCSI controller ending up on the bridge. */
|
||||||
|
video_voodoo_init();
|
||||||
|
|
||||||
ui_sb_update_panes();
|
ui_sb_update_panes();
|
||||||
|
|
||||||
if (config_changed) {
|
if (config_changed) {
|
||||||
|
|||||||
@@ -493,16 +493,15 @@ pci_bridge_init(const device_t *info)
|
|||||||
|
|
||||||
pci_bridge_reset(dev);
|
pci_bridge_reset(dev);
|
||||||
|
|
||||||
if (AGP_BRIDGE(dev->local))
|
pci_add_bridge(AGP_BRIDGE(dev->local), pci_bridge_read, pci_bridge_write, dev, &dev->slot);
|
||||||
pci_add_card(PCI_ADD_AGPBRIDGE, pci_bridge_read, pci_bridge_write, dev, &dev->slot);
|
|
||||||
else
|
|
||||||
dev->slot = pci_add_bridge(pci_bridge_read, pci_bridge_write, dev);
|
|
||||||
|
|
||||||
interrupt_count = sizeof(interrupts);
|
interrupt_count = sizeof(interrupts);
|
||||||
interrupt_mask = interrupt_count - 1;
|
interrupt_mask = interrupt_count - 1;
|
||||||
if (dev->slot < 32) {
|
if (dev->slot < 32) {
|
||||||
for (uint8_t i = 0; i < interrupt_count; i++)
|
for (uint8_t i = 0; i < interrupt_count; i++) {
|
||||||
interrupts[i] = pci_get_int(dev->slot, PCI_INTA + i);
|
interrupts[i] = pci_get_int(dev->slot, PCI_INTA + i);
|
||||||
|
pclog("interrupts[%i] = %i\n", i, interrupts[i]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
pci_bridge_log("PCI Bridge %d: upstream bus %02X slot %02X interrupts %02X %02X %02X %02X\n", dev->bus_index, (dev->slot >> 5) & 0xff, dev->slot & 31, interrupts[0], interrupts[1], interrupts[2], interrupts[3]);
|
pci_bridge_log("PCI Bridge %d: upstream bus %02X slot %02X interrupts %02X %02X %02X %02X\n", dev->bus_index, (dev->slot >> 5) & 0xff, dev->slot & 31, interrupts[0], interrupts[1], interrupts[2], interrupts[3]);
|
||||||
|
|
||||||
|
|||||||
@@ -255,8 +255,9 @@ extern void pci_add_card(uint8_t add_type, uint8_t (*read)(int func, int
|
|||||||
void (*write)(int func, int addr, uint8_t val, void *priv), void *priv, uint8_t *slot);
|
void (*write)(int func, int addr, uint8_t val, void *priv), void *priv, uint8_t *slot);
|
||||||
|
|
||||||
/* Add an instance of the PCI bridge. */
|
/* Add an instance of the PCI bridge. */
|
||||||
extern uint8_t pci_add_bridge(uint8_t (*read)(int func, int addr, void *priv),
|
extern void pci_add_bridge(uint8_t agp, uint8_t (*read)(int func, int addr, void *priv),
|
||||||
void (*write)(int func, int addr, uint8_t val, void *priv), void *priv);
|
void (*write)(int func, int addr, uint8_t val, void *priv), void *priv,
|
||||||
|
uint8_t *slot);
|
||||||
|
|
||||||
/* Register the cards that have been added into slots. */
|
/* Register the cards that have been added into slots. */
|
||||||
extern void pci_register_cards(void);
|
extern void pci_register_cards(void);
|
||||||
|
|||||||
@@ -263,6 +263,8 @@ extern void video_close(void);
|
|||||||
extern void video_reset_close(void);
|
extern void video_reset_close(void);
|
||||||
extern void video_pre_reset(int card);
|
extern void video_pre_reset(int card);
|
||||||
extern void video_reset(int card);
|
extern void video_reset(int card);
|
||||||
|
extern void video_post_reset(void);
|
||||||
|
extern void video_voodoo_init(void);
|
||||||
extern uint8_t video_force_resize_get_monitor(int monitor_index);
|
extern uint8_t video_force_resize_get_monitor(int monitor_index);
|
||||||
extern void video_force_resize_set_monitor(uint8_t res, int monitor_index);
|
extern void video_force_resize_set_monitor(uint8_t res, int monitor_index);
|
||||||
extern void video_update_timing(void);
|
extern void video_update_timing(void);
|
||||||
|
|||||||
@@ -118,17 +118,7 @@ machine_init_ex(int m)
|
|||||||
if (bios_only || !ret)
|
if (bios_only || !ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
if (gfxcard[0] != VID_NONE) {
|
video_post_reset();
|
||||||
if (ibm8514_enabled) {
|
|
||||||
ibm8514_device_add();
|
|
||||||
}
|
|
||||||
if (xga_enabled)
|
|
||||||
xga_device_add();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Reset the graphics card (or do nothing if it was already done
|
|
||||||
by the machine's init function). */
|
|
||||||
video_reset(gfxcard[0]);
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|||||||
11
src/pci.c
11
src/pci.c
@@ -673,6 +673,8 @@ pci_register_bus_slot(int bus, int card, int type, int inta, int intb, int intc,
|
|||||||
pci_card_to_slot_mapping[bus][card] = last_pci_card;
|
pci_card_to_slot_mapping[bus][card] = last_pci_card;
|
||||||
|
|
||||||
pci_log("pci_register_slot(): pci_cards[%i].bus = %02X; .id = %02X\n", last_pci_card, bus, card);
|
pci_log("pci_register_slot(): pci_cards[%i].bus = %02X; .id = %02X\n", last_pci_card, bus, card);
|
||||||
|
pclog("pci_register_slot(): pci_cards[%i].bus = %02X; .id = %02X; %02X %02X %02X %02X\n",
|
||||||
|
last_pci_card, bus, card, inta, intb, intc, intd);
|
||||||
|
|
||||||
if (type == PCI_CARD_NORMAL) {
|
if (type == PCI_CARD_NORMAL) {
|
||||||
last_normal_pci_card++;
|
last_normal_pci_card++;
|
||||||
@@ -797,17 +799,18 @@ pci_register_card(int pci_card)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Add an instance of the PCI bridge. */
|
/* Add an instance of the PCI bridge. */
|
||||||
uint8_t
|
void
|
||||||
pci_add_bridge(uint8_t (*read)(int func, int addr, void *priv), void (*write)(int func, int addr, uint8_t val, void *priv), void *priv)
|
pci_add_bridge(uint8_t agp, uint8_t (*read)(int func, int addr, void *priv), void (*write)(int func, int addr, uint8_t val, void *priv), void *priv, uint8_t *slot)
|
||||||
{
|
{
|
||||||
pci_card_t *card;
|
pci_card_t *card;
|
||||||
|
uint8_t bridge_slot = agp ? pci_find_slot(PCI_ADD_AGPBRIDGE, 0xff) : last_normal_pci_card_id;
|
||||||
|
|
||||||
card = &pci_cards[last_normal_pci_card_id];
|
card = &pci_cards[bridge_slot];
|
||||||
card->read = read;
|
card->read = read;
|
||||||
card->write = write;
|
card->write = write;
|
||||||
card->priv = priv;
|
card->priv = priv;
|
||||||
|
|
||||||
return last_normal_pci_card_id;
|
*slot = bridge_slot;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Register the cards that have been added into slots. */
|
/* Register the cards that have been added into slots. */
|
||||||
|
|||||||
@@ -363,11 +363,31 @@ video_reset(int card)
|
|||||||
device_add(video_cards[card].device);
|
device_add(video_cards[card].device);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
was_reset = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
video_post_reset(void)
|
||||||
|
{
|
||||||
|
if (gfxcard[0] != VID_NONE) {
|
||||||
|
if (ibm8514_enabled) {
|
||||||
|
ibm8514_device_add();
|
||||||
|
}
|
||||||
|
if (xga_enabled)
|
||||||
|
xga_device_add();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Reset the graphics card (or do nothing if it was already done
|
||||||
|
by the machine's init function). */
|
||||||
|
video_reset(gfxcard[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
video_voodoo_init(void)
|
||||||
|
{
|
||||||
/* Enable the Voodoo if configured. */
|
/* Enable the Voodoo if configured. */
|
||||||
if (voodoo_enabled)
|
if (voodoo_enabled)
|
||||||
device_add(&voodoo_device);
|
device_add(&voodoo_device);
|
||||||
|
|
||||||
was_reset = 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|||||||
Reference in New Issue
Block a user