Add basic APM functionality for PIIX/PIIX3 and i430FX, i430VX, i430HX
and i440FX chipsets.
This commit is contained in:
parent
93756d3f01
commit
38cee364d3
7 changed files with 233 additions and 8 deletions
39
src/i430vx.c
39
src/i430vx.c
|
|
@ -105,6 +105,30 @@ void i430vx_write(int func, int addr, uint8_t val, void *priv)
|
|||
i430vx_map(0xec000, 0x04000, val >> 4);
|
||||
pclog("i430vx_write : PAM6 write %02X\n", val);
|
||||
break;
|
||||
|
||||
case 0x72: /*SMRAM*/
|
||||
pclog("Write SMRAM %02x\n", val);
|
||||
val = (val & 0x78) | 2; /*SMRAM always at A0000-BFFFF*/
|
||||
val |= (card_i430vx[0x72] & 0x10); /*D_LCK can not be cleared by software*/
|
||||
if (val & 0x10) /*D_LCK locks D_OPEN and G_SMRAME*/
|
||||
{
|
||||
val &= ~0x48; /*D_OPEN is forced to 0, G_SMRAME is read only*/
|
||||
val |= (card_i430vx[0x72] & 0x08);
|
||||
}
|
||||
if ((card_i430vx[0x72] ^ val) & 0x40)
|
||||
{
|
||||
if (val & 0x40) /*SMRAM enabled*/
|
||||
{
|
||||
pclog("Enable SMRAM\n");
|
||||
mem_set_mem_state(0xa0000, 0x20000, MEM_READ_INTERNAL | MEM_WRITE_INTERNAL);
|
||||
}
|
||||
else
|
||||
{
|
||||
pclog("Disable SMRAM\n");
|
||||
mem_set_mem_state(0xa0000, 0x20000, MEM_READ_EXTERNAL | MEM_WRITE_EXTERNAL);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
card_i430vx[addr] = val;
|
||||
|
|
@ -118,7 +142,17 @@ uint8_t i430vx_read(int func, int addr, void *priv)
|
|||
return card_i430vx[addr];
|
||||
}
|
||||
|
||||
|
||||
static void i430vx_smram_enable(void)
|
||||
{
|
||||
if (card_i430vx[0x72] & 8)
|
||||
mem_set_mem_state(0xa0000, 0x20000, MEM_READ_INTERNAL | MEM_WRITE_INTERNAL);
|
||||
}
|
||||
static void i430vx_smram_disable(void)
|
||||
{
|
||||
if (card_i430vx[0x72] & 8)
|
||||
mem_set_mem_state(0xa0000, 0x20000, MEM_READ_EXTERNAL | MEM_WRITE_EXTERNAL);
|
||||
}
|
||||
|
||||
void i430vx_init()
|
||||
{
|
||||
pci_add_specific(0, i430vx_read, i430vx_write, NULL);
|
||||
|
|
@ -141,6 +175,9 @@ void i430vx_init()
|
|||
card_i430vx[0x72] = 0x02;
|
||||
card_i430vx[0x74] = 0x0e;
|
||||
card_i430vx[0x78] = 0x23;
|
||||
|
||||
smram_enable = i430vx_smram_enable;
|
||||
smram_disable = i430vx_smram_disable;
|
||||
}
|
||||
|
||||
void i430vx_reset()
|
||||
|
|
|
|||
Loading…
Reference in a new issue