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