PCI turbo reset control and PCI initialization functions now reset the ELCR registers, the PIC, and the PCI IRQ statuses, fixes PCI cards being stuck unable to issue IRQ's after soft and hard resets.

This commit is contained in:
OBattler
2017-06-21 19:42:36 +02:00
parent 8ce19c2386
commit 585c08d156
4 changed files with 43 additions and 16 deletions

View File

@@ -57,21 +57,25 @@ sermouse_timer(void *priv)
ms->delay = 0;
switch(ms->type) {
case SERMOUSE_TYPE_MICROSOFT:
/* This identifies a two-button Microsoft Serial mouse. */
serial_write_fifo(ms->serial, 'M', 1);
break;
if (ms->pos == -1)
{
ms->pos = 0;
switch(ms->type) {
case SERMOUSE_TYPE_MICROSOFT:
/* This identifies a two-button Microsoft Serial mouse. */
serial_write_fifo(ms->serial, 'M', 1);
break;
case SERMOUSE_TYPE_LOGITECH:
/* This identifies a two-button Logitech Serial mouse. */
serial_write_fifo(ms->serial, 'M', 1);
serial_write_fifo(ms->serial, '3', 1);
break;
case SERMOUSE_TYPE_LOGITECH:
/* This identifies a two-button Logitech Serial mouse. */
serial_write_fifo(ms->serial, 'M', 1);
serial_write_fifo(ms->serial, '3', 1);
break;
default:
/* No action needed. */
break;
default:
/* No action needed. */
break;
}
}
}
@@ -83,6 +87,7 @@ sermouse_poll(int x, int y, int z, int b, void *priv)
uint8_t buff[16];
int len;
if (!(serial_ier(0) & 1)) return(1);
if (!x && !y && b == ms->oldb) return(1);
ms->oldb = b;
@@ -142,9 +147,12 @@ sermouse_poll(int x, int y, int z, int b, void *priv)
pclog(" ] (%d)\n", len);
#endif
/* Send the packet to the bottom-half of the attached port. */
for (b=0; b<len; b++)
serial_write_fifo(ms->serial, buff[b], 1);
if (!(serial_mctrl(0) & 0x10))
{
/* Send the packet to the bottom-half of the attached port. */
for (b=0; b<len; b++)
serial_write_fifo(ms->serial, buff[b], 1);
}
return(0);
}