Revision 53b67b30 hw/acpi.c
b/hw/acpi.c | ||
---|---|---|
22 | 22 |
#include "sysemu.h" |
23 | 23 |
#include "i2c.h" |
24 | 24 |
#include "smbus.h" |
25 |
#include "kvm.h" |
|
26 | 25 |
|
27 | 26 |
//#define DEBUG |
28 | 27 |
|
... | ... | |
50 | 49 |
uint8_t smb_data[32]; |
51 | 50 |
uint8_t smb_index; |
52 | 51 |
qemu_irq irq; |
52 |
qemu_irq cmos_s3; |
|
53 |
qemu_irq smi_irq; |
|
54 |
int kvm_enabled; |
|
53 | 55 |
} PIIX4PMState; |
54 | 56 |
|
55 | 57 |
#define RSM_STS (1 << 15) |
... | ... | |
158 | 160 |
was caused by power button */ |
159 | 161 |
s->pmsts |= (RSM_STS | PWRBTN_STS); |
160 | 162 |
qemu_system_reset_request(); |
161 |
#if defined(TARGET_I386)
|
|
162 |
cmos_set_s3_resume();
|
|
163 |
#endif
|
|
163 |
if (s->cmos_s3) {
|
|
164 |
qemu_irq_raise(s->cmos_s3);
|
|
165 |
}
|
|
164 | 166 |
default: |
165 | 167 |
break; |
166 | 168 |
} |
... | ... | |
248 | 250 |
} |
249 | 251 |
|
250 | 252 |
if (s->dev.config[0x5b] & (1 << 1)) { |
251 |
cpu_interrupt(first_cpu, CPU_INTERRUPT_SMI); |
|
253 |
if (s->smi_irq) { |
|
254 |
qemu_irq_raise(s->smi_irq); |
|
255 |
} |
|
252 | 256 |
} |
253 | 257 |
} else { |
254 | 258 |
s->apms = val; |
... | ... | |
478 | 482 |
pci_conf[0x5a] = 0; |
479 | 483 |
pci_conf[0x5b] = 0; |
480 | 484 |
|
481 |
if (kvm_enabled()) {
|
|
485 |
if (s->kvm_enabled) {
|
|
482 | 486 |
/* Mark SMM as already inited (until KVM supports SMM). */ |
483 | 487 |
pci_conf[0x5B] = 0x02; |
484 | 488 |
} |
... | ... | |
486 | 490 |
|
487 | 491 |
static void piix4_powerdown(void *opaque, int irq, int power_failing) |
488 | 492 |
{ |
489 |
#if defined(TARGET_I386) |
|
490 | 493 |
PIIX4PMState *s = opaque; |
491 | 494 |
|
492 | 495 |
if (!s) { |
... | ... | |
495 | 498 |
s->pmsts |= PWRBTN_EN; |
496 | 499 |
pm_update_sci(s); |
497 | 500 |
} |
498 |
#endif |
|
499 | 501 |
} |
500 | 502 |
|
501 | 503 |
i2c_bus *piix4_pm_init(PCIBus *bus, int devfn, uint32_t smb_io_base, |
502 |
qemu_irq sci_irq) |
|
504 |
qemu_irq sci_irq, qemu_irq cmos_s3, qemu_irq smi_irq, |
|
505 |
int kvm_enabled) |
|
503 | 506 |
{ |
504 | 507 |
PIIX4PMState *s; |
505 | 508 |
uint8_t *pci_conf; |
... | ... | |
526 | 529 |
|
527 | 530 |
register_ioport_write(ACPI_DBG_IO_ADDR, 4, 4, acpi_dbg_writel, s); |
528 | 531 |
|
529 |
if (kvm_enabled()) {
|
|
532 |
if (kvm_enabled) { |
|
530 | 533 |
/* Mark SMM as already inited to prevent SMM from running. KVM does not |
531 | 534 |
* support SMM mode. */ |
532 | 535 |
pci_conf[0x5B] = 0x02; |
... | ... | |
553 | 556 |
|
554 | 557 |
s->smbus = i2c_init_bus(NULL, "i2c"); |
555 | 558 |
s->irq = sci_irq; |
559 |
s->cmos_s3 = cmos_s3; |
|
560 |
s->smi_irq = smi_irq; |
|
556 | 561 |
qemu_register_reset(piix4_reset, s); |
557 | 562 |
|
558 | 563 |
return s->smbus; |
Also available in: Unified diff