2014-06-15 22:25:17 +02:00
|
|
|
"use strict";
|
|
|
|
|
2015-12-31 00:31:08 +01:00
|
|
|
/** @const */
|
|
|
|
var PMTIMER_FREQ = 3579545;
|
2014-06-15 22:25:17 +02:00
|
|
|
|
2015-12-31 00:31:08 +01:00
|
|
|
/**
|
|
|
|
* @constructor
|
2015-02-25 18:21:54 +01:00
|
|
|
* @param {CPU} cpu
|
|
|
|
*/
|
2014-06-15 22:25:17 +02:00
|
|
|
function ACPI(cpu)
|
|
|
|
{
|
|
|
|
var io = cpu.io;
|
|
|
|
|
|
|
|
var acpi = {
|
|
|
|
pci_id: 0x07 << 3,
|
|
|
|
pci_space: [
|
|
|
|
0x86, 0x80, 0x13, 0x71, 0x07, 0x00, 0x80, 0x02, 0x08, 0x00, 0x80, 0x06, 0x00, 0x00, 0x80, 0x00,
|
|
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x01, 0x00, 0x00,
|
|
|
|
],
|
|
|
|
pci_bars: [],
|
2016-01-01 17:49:21 +01:00
|
|
|
name: "acpi",
|
2014-06-15 22:25:17 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
// 00:07.0 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 08)
|
|
|
|
cpu.devices.pci.register_device(acpi);
|
|
|
|
|
|
|
|
// ACPI status
|
2015-12-31 00:31:08 +01:00
|
|
|
io.register_read(0xB004, this, undefined, function()
|
2014-06-15 22:25:17 +02:00
|
|
|
{
|
2015-12-31 00:31:08 +01:00
|
|
|
dbg_log("ACPI status read", LOG_ACPI);
|
2014-06-15 22:25:17 +02:00
|
|
|
return 1;
|
|
|
|
});
|
2015-12-31 00:31:08 +01:00
|
|
|
|
|
|
|
// ACPI, pmtimer
|
|
|
|
io.register_read(0xB008, this, undefined, undefined, function()
|
2014-06-15 22:25:17 +02:00
|
|
|
{
|
2015-12-31 00:31:08 +01:00
|
|
|
var value = v86.microtick() * (PMTIMER_FREQ / 1000) | 0;
|
|
|
|
//dbg_log("pmtimer read: " + h(value >>> 0), LOG_ACPI);
|
|
|
|
return value;
|
2014-06-15 22:25:17 +02:00
|
|
|
});
|
|
|
|
}
|