Added a sanity check on write to PIIX4(E) DDMA base PCI registers.
This commit is contained in:
@@ -275,6 +275,7 @@ piix_write(int func, int addr, uint8_t val, void *priv)
|
|||||||
{
|
{
|
||||||
piix_t *dev = (piix_t *) priv;
|
piix_t *dev = (piix_t *) priv;
|
||||||
uint8_t *fregs;
|
uint8_t *fregs;
|
||||||
|
uint16_t base;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
/* Return on unsupported function. */
|
/* Return on unsupported function. */
|
||||||
@@ -443,8 +444,11 @@ piix_write(int func, int addr, uint8_t val, void *priv)
|
|||||||
else
|
else
|
||||||
fregs[addr] = val & 0xc0;
|
fregs[addr] = val & 0xc0;
|
||||||
|
|
||||||
|
base = fregs[addr | 0x01] << 8;
|
||||||
|
base |= fregs[addr & 0xfe];
|
||||||
|
|
||||||
for (i = 0; i < 4; i++)
|
for (i = 0; i < 4; i++)
|
||||||
ddma_update_io_mapping(dev->ddma, (addr & 4) + i, fregs[addr & 0xfe] + (i << 4), fregs[addr | 0x01], 1);
|
ddma_update_io_mapping(dev->ddma, (addr & 4) + i, fregs[addr & 0xfe] + (i << 4), fregs[addr | 0x01], (base != 0x0000));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0xa0:
|
case 0xa0:
|
||||||
|
Reference in New Issue
Block a user