Implemented the Intel 420EX combined northbridge and southbridge, added the ASUS PVI-486AP4, and overhauled SMRAM handling (which also implements some previously missing extended SMRAM features of the 440BX+ and VIA Apollo series of chipsets).
This commit is contained in:
@@ -64,20 +64,12 @@ apollo_map(uint32_t addr, uint32_t size, int state)
|
||||
|
||||
|
||||
static void
|
||||
apollo_smram_map(int smm, uint32_t addr, uint32_t size, int ram)
|
||||
apollo_smram_map(int smm, uint32_t addr, uint32_t size, int is_smram)
|
||||
{
|
||||
int state = (MEM_READ_EXTANY | MEM_WRITE_EXTANY);
|
||||
mem_mapping_set_addr(&ram_smram_mapping[0], smram[0].host_base, size);
|
||||
mem_mapping_set_exec(&ram_smram_mapping[0], ram + smram[0].ram_base);
|
||||
|
||||
if (ram == 0)
|
||||
state = (MEM_READ_EXTANY | MEM_WRITE_EXTANY);
|
||||
else if (ram == 1)
|
||||
state = (MEM_READ_INTERNAL | MEM_WRITE_INTERNAL);
|
||||
else if (ram == 2)
|
||||
state = (MEM_READ_EXTERNAL_EX | MEM_WRITE_EXTANY);
|
||||
else if (ram == 3)
|
||||
state = (MEM_READ_DISABLED | MEM_WRITE_DISABLED);
|
||||
|
||||
mem_set_mem_state_common(smm, addr, size, state);
|
||||
mem_set_mem_state_smram_ex(smm, addr, size, is_smram & 0x03);
|
||||
flushmmucache();
|
||||
}
|
||||
|
||||
@@ -272,6 +264,12 @@ via_apollo_host_bridge_write(int func, int addr, uint8_t val, void *priv)
|
||||
if ((dev->pci_conf[0][0x63] ^ val) & 0xc0)
|
||||
apollo_map(0xe0000, 0x10000, (val & 0xc0) >> 6);
|
||||
dev->pci_conf[0][0x63] = val;
|
||||
mem_set_mem_state_smram_ex(0, 0x00030000, 0x00020000, 0x00);
|
||||
mem_set_mem_state_smram_ex(1, 0x00030000, 0x00020000, 0x00);
|
||||
mem_set_mem_state_smram_ex(0, 0x000a0000, 0x00020000, 0x00);
|
||||
mem_set_mem_state_smram_ex(1, 0x000a0000, 0x00020000, 0x00);
|
||||
smram[0].host_base = 0x000a0000;
|
||||
smram[0].ram_base = 0x000a0000;
|
||||
if (dev->id == 0x0691) switch (val & 0x03) {
|
||||
case 0x00:
|
||||
default:
|
||||
@@ -310,9 +308,9 @@ via_apollo_host_bridge_write(int func, int addr, uint8_t val, void *priv)
|
||||
/* Reserved */
|
||||
apollo_smram_map(1, 0x000a0000, 0x00020000, 3);
|
||||
if (dev->id == 0x0597) {
|
||||
/* TODO: SMI 3xxxx-4xxxx redirect to Axxxx-Bxxxx
|
||||
(this needs a 3xxxx-4xxxx mapping set to EXTERNAL). */
|
||||
apollo_smram_map(1, 0x00030000, 0x00020000, 3);
|
||||
/* SMI 3xxxx-4xxxx redirect to Axxxx-Bxxxx. */
|
||||
smram[0].host_base = 0x00030000;
|
||||
apollo_smram_map(1, 0x00030000, 0x00020000, 1);
|
||||
}
|
||||
apollo_smram_map(0, 0x000a0000, 0x00020000, 3);
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user