Some slight PIIX and IDE fixes.
This commit is contained in:
@@ -1194,6 +1194,9 @@ ide_writew(uint16_t addr, uint16_t val, void *priv)
|
||||
case 0x0: /* Data */
|
||||
ide_write_data(ide, val, 2);
|
||||
break;
|
||||
case 0x7:
|
||||
ide_writeb(addr, val & 0xff, priv);
|
||||
break;
|
||||
default:
|
||||
ide_writeb(addr, val & 0xff, priv);
|
||||
ide_writeb(addr + 1, (val >> 8) & 0xff, priv);
|
||||
@@ -1228,6 +1231,9 @@ ide_writel(uint16_t addr, uint32_t val, void *priv)
|
||||
else
|
||||
ide_writew(addr + 2, (val >> 16) & 0xffff, priv);
|
||||
break;
|
||||
case 0x6: case 0x7:
|
||||
ide_writew(addr, val & 0xffff, priv);
|
||||
break;
|
||||
default:
|
||||
ide_writew(addr, val & 0xffff, priv);
|
||||
ide_writew(addr + 2, (val >> 16) & 0xffff, priv);
|
||||
@@ -1891,6 +1897,9 @@ ide_readw(uint16_t addr, void *priv)
|
||||
case 0x0: /* Data */
|
||||
temp = ide_read_data(ide, 2);
|
||||
break;
|
||||
case 0x7:
|
||||
temp = ide_readb(addr, priv);
|
||||
break;
|
||||
default:
|
||||
temp = ide_readb(addr, priv) | (ide_readb(addr + 1, priv) << 8);
|
||||
break;
|
||||
@@ -1923,6 +1932,9 @@ ide_readl(uint16_t addr, void *priv)
|
||||
else
|
||||
temp = temp2 | (ide_readw(addr + 2, priv) << 16);
|
||||
break;
|
||||
case 0x6: case 0x7:
|
||||
temp = ide_readw(addr, priv);
|
||||
break;
|
||||
default:
|
||||
temp = ide_readw(addr, priv) | (ide_readw(addr + 2, priv) << 16);
|
||||
break;
|
||||
@@ -2367,11 +2379,7 @@ ide_set_handlers(uint8_t board)
|
||||
return;
|
||||
|
||||
if (ide_boards[board]->base_main) {
|
||||
io_sethandler(ide_boards[board]->base_main, 1,
|
||||
ide_readb, ide_readw, ide_readl,
|
||||
ide_writeb, ide_writew, ide_writel,
|
||||
ide_boards[board]);
|
||||
io_sethandler(ide_boards[board]->base_main + 1, 7,
|
||||
io_sethandler(ide_boards[board]->base_main, 8,
|
||||
ide_readb, ide_readw, ide_readl,
|
||||
ide_writeb, ide_writew, ide_writel,
|
||||
ide_boards[board]);
|
||||
@@ -2393,15 +2401,12 @@ ide_remove_handlers(uint8_t board)
|
||||
return;
|
||||
|
||||
if (ide_boards[board]->base_main) {
|
||||
io_removehandler(ide_boards[board]->base_main, 1,
|
||||
ide_readb, ide_readw, ide_readl,
|
||||
ide_writeb, ide_writew, ide_writel,
|
||||
ide_boards[board]);
|
||||
io_removehandler(ide_boards[board]->base_main + 1, 7,
|
||||
io_removehandler(ide_boards[board]->base_main, 8,
|
||||
ide_readb, ide_readw, ide_readl,
|
||||
ide_writeb, ide_writew, ide_writel,
|
||||
ide_boards[board]);
|
||||
}
|
||||
|
||||
if (ide_boards[board]->side_main) {
|
||||
io_removehandler(ide_boards[board]->side_main, 1,
|
||||
ide_read_alt_status, NULL, NULL,
|
||||
|
@@ -1229,6 +1229,9 @@ piix_reset_hard(piix_t *dev)
|
||||
else
|
||||
fregs[0x09] = 0x80;
|
||||
fregs[0x0a] = 0x01; fregs[0x0b] = 0x01;
|
||||
if (dev->type == 5) {
|
||||
fregs[0x10] = fregs[0x14] = fregs[0x18] = fregs[0x1c] = 0x01;
|
||||
}
|
||||
fregs[0x20] = 0x01;
|
||||
if (dev->type == 5) {
|
||||
fregs[0x3c] = 0x0e;
|
||||
|
Reference in New Issue
Block a user