if (mbinfo->mod_cnt != 1)
panic("Expected exactly one module; cannot continue.");
- outputf("Current SMRAMC state is: %02x", pci_read8(0, 0, 0, 0x70));
- outputf("Current USB state is: %04x %04x", pci_read16(0, 31, 2, 0xC0), pci_read16(0, 31, 4, 0xC0));
- outputf("Current SMI state is: %08x", inl(0x830));
+ outputf("Current SMRAMC state is: %02x", (unsigned char)smram_save_state());
+ outputf("Current SMI state is: %08x", inl(0x830)); // XXX ICH2 specific
smi_disable();
- /* Try really hard to shut up USB_LEGKEY. */
- pci_write16(0, 31, 2, 0xC0, pci_read16(0, 31, 2, 0xC0));
- pci_write16(0, 31, 2, 0xC0, 0);
- pci_write16(0, 31, 4, 0xC0, pci_read16(0, 31, 4, 0xC0));
- pci_write16(0, 31, 4, 0xC0, 0);
-/*
- pci_bus_enum();
-*/
/* Open the SMRAM aperture and load our ELF. */
old_smramc = smram_save_state();
info->firstrun();
smram_restore_state(old_smramc);
- outputf("New SMRAMC state is: %02x", pci_read8(0, 0, 0, 0x70));
+ outputf("New SMRAMC state is: %02x", (unsigned char)smram_save_state());
puts("Waiting for a bit before returning to real mode...");
for (i=0; i<0x500000; i++)
{
unsigned short smi_en = _get_PMBASE() + ICH2_PMBASE_SMI_EN;
outl(smi_en, inl(smi_en) & ~ICH2_SMI_EN_GBL_SMI_EN);
+
+ /* Try really hard to shut up USB_LEGKEY. */
+ pci_write16(ICH2_USB0_BUS, ICH2_USB0_DEV, ICH2_USB0_FN, ICH2_USB_LEGKEY, 0x0);
+ pci_write16(ICH2_USB0_BUS, ICH2_USB0_DEV, ICH2_USB0_FN, ICH2_USB_LEGKEY,
+ pci_read16(ICH2_USB0_BUS, ICH2_USB0_DEV, ICH2_USB0_FN, ICH2_USB_LEGKEY));
+ pci_write16(ICH2_USB1_BUS, ICH2_USB1_DEV, ICH2_USB1_FN, ICH2_USB_LEGKEY, 0x0);
+ pci_write16(ICH2_USB1_BUS, ICH2_USB1_DEV, ICH2_USB1_FN, ICH2_USB_LEGKEY,
+ pci_read16(ICH2_USB1_BUS, ICH2_USB1_DEV, ICH2_USB1_FN, ICH2_USB_LEGKEY));
+
}
void smi_enable()
#define ICH2_USB1_DEV 31
#define ICH2_USB1_FN 4
+#define ICH2_USB_LEGKEY 0xC0
+
#define ICH2_SMBUS_BUS 0
#define ICH2_SMBUS_DEV 31
#define ICH2_SMBUS_FN 3
outputf("NetWatch running");
- /* Try really hard to shut up USB_LEGKEY. */
- pci_write16(0, 31, 2, 0xC0, pci_read16(0, 31, 2, 0xC0));
- pci_write16(0, 31, 2, 0xC0, 0);
- pci_write16(0, 31, 4, 0xC0, pci_read16(0, 31, 4, 0xC0));
- pci_write16(0, 31, 4, 0xC0, 0);
-
/* Turn on the SMIs we want */
smi_disable();
extern void kbc_handler(smi_event_t ev);
extern void gbl_rls_handler(smi_event_t ev);
-void __firstrun_stub() {
-
- /* Try really hard to shut up USB_LEGKEY. */
- pci_write16(0, 31, 2, 0xC0, pci_read16(0, 31, 2, 0xC0));
- pci_write16(0, 31, 2, 0xC0, 0);
- pci_write16(0, 31, 4, 0xC0, pci_read16(0, 31, 4, 0xC0));
- pci_write16(0, 31, 4, 0xC0, 0);
-
+void __firstrun_stub()
+{
/* Turn on the SMIs we want */
smi_disable();