VirtualBox

Changeset 17572 in vbox


Ignore:
Timestamp:
Mar 9, 2009 12:58:21 PM (16 years ago)
Author:
vboxsync
Message:

DevACPI: minus spaces, minus (some) macro programming.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/PC/DevACPI.cpp

    r17542 r17572  
    2020 */
    2121
     22/*******************************************************************************
     23*   Header Files                                                               *
     24*******************************************************************************/
    2225#define LOG_GROUP LOG_GROUP_DEV_ACPI
    2326#include <VBox/pdmdev.h>
     
    3942/* the compiled DSL */
    4043#if defined(IN_RING3) && !defined(VBOX_DEVICE_STRUCT_TESTCASE)
    41 #include <vboxaml.hex>
     44# include <vboxaml.hex>
    4245#endif /* !IN_RING3 */
    4346
    44 #define IO_READ_PROTO(name)                                             \
    45     PDMBOTHCBDECL(int) name (PPDMDEVINS pDevIns, void *pvUser,          \
    46                              RTIOPORT Port, uint32_t *pu32, unsigned cb)
    47 
    48 #define IO_WRITE_PROTO(name)                                            \
    49     PDMBOTHCBDECL(int) name (PPDMDEVINS pDevIns, void *pvUser,          \
    50                              RTIOPORT Port, uint32_t u32, unsigned cb)
    51 
     47
     48
     49/*******************************************************************************
     50*   Defined Constants And Macros                                               *
     51*******************************************************************************/
    5252#define DEBUG_HEX       0x3000
    5353#define DEBUG_CHR       0x3001
     
    156156#define STA_BATTERY_PRESENT_MASK                RT_BIT(4) /**< the battery is present */
    157157
    158 struct ACPIState
     158
     159/*******************************************************************************
     160*   Structures and Typedefs                                                    *
     161*******************************************************************************/
     162/**
     163 * The ACPI device state.
     164 */
     165typedef struct ACPIState
    159166{
    160167    PCIDevice           dev;
     
    214221    /** Pointer to the driver connector interface */
    215222    R3PTRTYPE(PPDMIACPICONNECTOR) pDrv;
    216 };
     223} ACPIState;
    217224
    218225#pragma pack(1)
     
    414421
    415422#ifdef VBOX_WITH_SMP_GUESTS
    416 #ifdef IN_RING3 /**@todo r=bird: Move this down to where it's used. */
    417 
    418 # define PCAT_COMPAT     0x1                     /**< system has also a dual-8259 setup */
     423# ifdef IN_RING3 /**@todo r=bird: Move this down to where it's used. */
     424
     425#  define PCAT_COMPAT   0x1                     /**< system has also a dual-8259 setup */
    419426
    420427/**
     
    430437     * All actual data stored in dynamically allocated memory pointed by this field.
    431438     */
    432     uint8_t*            pData;
     439    uint8_t            *m_pbData;
    433440    /**
    434441     * Number of CPU entries in this MADT.
    435442     */
    436     uint32_t            cCpus;
    437 
    438  public:
     443    uint32_t            m_cCpus;
     444
     445public:
    439446    /**
    440447     * Address of ACPI header
    441448     */
    442     inline ACPITBLHEADER* header_addr() const
    443     {
    444         return (ACPITBLHEADER*)pData;
     449    inline ACPITBLHEADER *header_addr(void) const
     450    {
     451        return (ACPITBLHEADER *)m_pbData;
    445452    }
    446453
     
    449456     * although address is the same for all of them.
    450457     */
    451     inline uint32_t* u32LAPIC_addr() const
    452     {
    453         return  (uint32_t*)(header_addr() + 1);
     458    inline uint32_t *u32LAPIC_addr(void) const
     459    {
     460        return (uint32_t *)(header_addr() + 1);
    454461    }
    455462
     
    457464     * Address of APIC flags
    458465     */
    459     inline uint32_t* u32Flags_addr() const
    460     {
    461         return (uint32_t*)(u32LAPIC_addr() + 1);
     466    inline uint32_t *u32Flags_addr(void) const
     467    {
     468        return (uint32_t *)(u32LAPIC_addr() + 1);
    462469    }
    463470
     
    465472     * Address of per-CPU LAPIC descriptions
    466473     */
    467     inline ACPITBLLAPIC* LApics_addr() const
    468     {
    469         return (ACPITBLLAPIC*)(u32Flags_addr() + 1);
     474    inline ACPITBLLAPIC *LApics_addr(void) const
     475    {
     476        return (ACPITBLLAPIC *)(u32Flags_addr() + 1);
    470477    }
    471478
     
    473480     * Address of IO APIC description
    474481     */
    475     inline ACPITBLIOAPIC* IOApic_addr() const
    476     {
    477         return (ACPITBLIOAPIC*)(LApics_addr() + cCpus);
     482    inline ACPITBLIOAPIC *IOApic_addr(void) const
     483    {
     484        return (ACPITBLIOAPIC *)(LApics_addr() + m_cCpus);
    478485    }
    479486
     
    482489     * Note that this function assumes IOApic to be the last field in structure.
    483490     */
    484     inline uint32_t size() const
    485     {
    486         return (uint8_t*)(IOApic_addr() + 1)-(uint8_t*)header_addr();
     491    inline uint32_t size(void) const
     492    {
     493        return (uint8_t *)(IOApic_addr() + 1) - (uint8_t *)header_addr();
    487494    }
    488495
     
    490497     * Raw data of MADT.
    491498     */
    492     inline const uint8_t* data() const
    493     {
    494         return pData;
     499    inline const uint8_t *data(void) const
     500    {
     501        return m_pbData;
    495502    }
    496503
     
    506513     * Constructor, only works in Ring 3, doesn't look like a big deal.
    507514     */
    508     AcpiTableMADT(uint16_t cpus)
    509     {
    510         cCpus = cpus;
    511         pData = 0;
    512         uint32_t sSize = size();
    513         pData = (uint8_t*)RTMemAllocZ(sSize);
     515    AcpiTableMADT(uint32_t cCpus)
     516    {
     517        m_cCpus = cCpus;
     518        uint32_t cb = size();
     519        m_pbData = (uint8_t *)RTMemAllocZ(cb);
    514520    }
    515521
    516522    ~AcpiTableMADT()
    517523    {
    518         RTMemFree(pData);
     524        RTMemFree(m_pbData);
    519525    }
    520526};
    521 #endif /* IN_RING3 */
     527# endif /* IN_RING3 */
    522528
    523529#else  /* !VBOX_WITH_SMP_GUESTS */
     
    528534    uint32_t            u32LAPIC;               /**< local APIC address */
    529535    uint32_t            u32Flags;               /**< Flags */
    530 #define PCAT_COMPAT     0x1                     /**< system has also a dual-8259 setup */
     536# define PCAT_COMPAT    0x1                     /**< system has also a dual-8259 setup */
    531537    ACPITBLLAPIC        LApic;
    532538    ACPITBLIOAPIC       IOApic;
     
    538544
    539545
    540 #ifndef VBOX_DEVICE_STRUCT_TESTCASE
     546#ifndef VBOX_DEVICE_STRUCT_TESTCASE /* exclude the rest of the file */
     547/*******************************************************************************
     548*   Internal Functions                                                         *
     549*******************************************************************************/
    541550__BEGIN_DECLS
    542 IO_READ_PROTO  (acpiPMTmrRead);
     551PDMBOTHCBDECL(int) acpiPMTmrRead(       PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t *pu32, unsigned cb);
    543552#ifdef IN_RING3
    544 IO_READ_PROTO  (acpiPm1aEnRead);
    545 IO_WRITE_PROTO (acpiPM1aEnWrite);
    546 IO_READ_PROTO  (acpiPm1aStsRead);
    547 IO_WRITE_PROTO (acpiPM1aStsWrite);
    548 IO_READ_PROTO  (acpiPm1aCtlRead);
    549 IO_WRITE_PROTO (acpiPM1aCtlWrite);
    550 IO_WRITE_PROTO (acpiSmiWrite);
    551 IO_WRITE_PROTO (acpiBatIndexWrite);
    552 IO_READ_PROTO  (acpiBatDataRead);
    553 IO_READ_PROTO  (acpiSysInfoDataRead);
    554 IO_WRITE_PROTO (acpiSysInfoDataWrite);
    555 IO_READ_PROTO  (acpiGpe0EnRead);
    556 IO_WRITE_PROTO (acpiGpe0EnWrite);
    557 IO_READ_PROTO  (acpiGpe0StsRead);
    558 IO_WRITE_PROTO (acpiGpe0StsWrite);
    559 IO_WRITE_PROTO (acpiResetWrite);
     553PDMBOTHCBDECL(int) acpiPm1aEnRead(      PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t *pu32, unsigned cb);
     554PDMBOTHCBDECL(int) acpiPM1aEnWrite(     PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t u32, unsigned cb);
     555PDMBOTHCBDECL(int) acpiPm1aStsRead(     PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t *pu32, unsigned cb);
     556PDMBOTHCBDECL(int) acpiPM1aStsWrite(    PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t u32, unsigned cb);
     557PDMBOTHCBDECL(int) acpiPm1aCtlRead(     PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t *pu32, unsigned cb);
     558PDMBOTHCBDECL(int) acpiPM1aCtlWrite(    PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t u32, unsigned cb);
     559PDMBOTHCBDECL(int) acpiSmiWrite(        PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t u32, unsigned cb);
     560PDMBOTHCBDECL(int) acpiBatIndexWrite(   PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t u32, unsigned cb);
     561PDMBOTHCBDECL(int) acpiBatDataRead(     PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t *pu32, unsigned cb);
     562PDMBOTHCBDECL(int) acpiSysInfoDataRead( PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t *pu32, unsigned cb);
     563PDMBOTHCBDECL(int) acpiSysInfoDataWrite(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t u32, unsigned cb);
     564PDMBOTHCBDECL(int) acpiGpe0EnRead(      PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t *pu32, unsigned cb);
     565PDMBOTHCBDECL(int) acpiGpe0EnWrite(     PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t u32, unsigned cb);
     566PDMBOTHCBDECL(int) acpiGpe0StsRead(     PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t *pu32, unsigned cb);
     567PDMBOTHCBDECL(int) acpiGpe0StsWrite(    PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t u32, unsigned cb);
     568PDMBOTHCBDECL(int) acpiResetWrite(      PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t u32, unsigned cb);
    560569# ifdef DEBUG_ACPI
    561 IO_WRITE_PROTO (acpiDhexWrite);
    562 IO_WRITE_PROTO (acpiDchrWrite);
     570PDMBOTHCBDECL(int) acpiDhexWrite(       PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t u32, unsigned cb);
     571PDMBOTHCBDECL(int) acpiDchrWrite(       PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t u32, unsigned cb);
    563572# endif
    564 #endif
     573#endif /* IN_RING3 */
    565574__END_DECLS
    566575
     576
    567577#ifdef IN_RING3
    568578
    569579/* Simple acpiChecksum: all the bytes must add up to 0. */
    570 static uint8_t acpiChecksum (const uint8_t * const data, size_t len)
     580static uint8_t acpiChecksum(const uint8_t * const data, size_t len)
    571581{
    572582    uint8_t sum = 0;
     
    576586}
    577587
    578 static void acpiPrepareHeader (ACPITBLHEADER *header, const char au8Signature[4],
    579                                uint32_t u32Length, uint8_t u8Revision)
     588static void acpiPrepareHeader(ACPITBLHEADER *header, const char au8Signature[4],
     589                              uint32_t u32Length, uint8_t u8Revision)
    580590{
    581591    memcpy(header->au8Signature, au8Signature, 4);
     
    601611}
    602612
    603 static void acpiPhyscpy (ACPIState *s, RTGCPHYS32 dst, const void * const src, size_t size)
    604 {
    605     PDMDevHlpPhysWrite (s->pDevIns, dst, src, size);
    606 }
    607 
    608 /* Differentiated System Description Table (DSDT) */
    609 static void acpiSetupDSDT (ACPIState *s, RTGCPHYS32 addr)
    610 {
    611     acpiPhyscpy (s, addr, AmlCode, sizeof(AmlCode));
    612 }
    613 
    614 /* Firmware ACPI Control Structure (FACS) */
    615 static void acpiSetupFACS (ACPIState *s, RTGCPHYS32 addr)
     613static void acpiPhyscpy(ACPIState *s, RTGCPHYS32 dst, const void * const src, size_t size)
     614{
     615    PDMDevHlpPhysWrite(s->pDevIns, dst, src, size);
     616}
     617
     618/** Differentiated System Description Table (DSDT) */
     619static void acpiSetupDSDT(ACPIState *s, RTGCPHYS32 addr)
     620{
     621    acpiPhyscpy(s, addr, AmlCode, sizeof(AmlCode));
     622}
     623
     624/** Firmware ACPI Control Structure (FACS) */
     625static void acpiSetupFACS(ACPIState *s, RTGCPHYS32 addr)
    616626{
    617627    ACPITBLFACS facs;
    618628
    619     memset (&facs, 0, sizeof(facs));
    620     memcpy (facs.au8Signature, "FACS", 4);
     629    memset(&facs, 0, sizeof(facs));
     630    memcpy(facs.au8Signature, "FACS", 4);
    621631    facs.u32Length            = RT_H2LE_U32(sizeof(ACPITBLFACS));
    622632    facs.u32HWSignature       = RT_H2LE_U32(0);
     
    627637    facs.u8Version            = 1;
    628638
    629     acpiPhyscpy (s, addr, (const uint8_t*)&facs, sizeof(facs));
    630 }
    631 
    632 /* Fixed ACPI Description Table (FADT aka FACP) */
    633 static void acpiSetupFADT (ACPIState *s, RTGCPHYS32 addr, uint32_t facs_addr, uint32_t dsdt_addr)
     639    acpiPhyscpy(s, addr, (const uint8_t *)&facs, sizeof(facs));
     640}
     641
     642/** Fixed ACPI Description Table (FADT aka FACP) */
     643static void acpiSetupFADT(ACPIState *s, RTGCPHYS32 addr, uint32_t facs_addr, uint32_t dsdt_addr)
    634644{
    635645    ACPITBLFADT fadt;
    636646
    637     memset (&fadt, 0, sizeof(fadt));
    638     acpiPrepareHeader (&fadt.header, "FACP", sizeof(fadt), 4);
     647    memset(&fadt, 0, sizeof(fadt));
     648    acpiPrepareHeader(&fadt.header, "FACP", sizeof(fadt), 4);
    639649    fadt.u32FACS              = RT_H2LE_U32(facs_addr);
    640650    fadt.u32DSDT              = RT_H2LE_U32(dsdt_addr);
     
    689699    acpiWriteGenericAddr(&fadt.X_GPE0BLK,    1, 16, 0, 1,     GPE0_BLK);
    690700    acpiWriteGenericAddr(&fadt.X_GPE1BLK,    0,  0, 0, 0,     GPE1_BLK);
    691     fadt.header.u8Checksum    = acpiChecksum ((uint8_t*)&fadt, sizeof(fadt));
    692     acpiPhyscpy (s, addr, &fadt, sizeof(fadt));
    693 }
    694 
    695 /*
     701    fadt.header.u8Checksum    = acpiChecksum((uint8_t *)&fadt, sizeof(fadt));
     702    acpiPhyscpy(s, addr, &fadt, sizeof(fadt));
     703}
     704
     705/**
    696706 * Root System Description Table.
    697707 * The RSDT and XSDT tables are basically identical. The only difference is 32 vs 64 bits
    698708 * addresses for description headers. RSDT is for ACPI 1.0. XSDT for ACPI 2.0 and up.
    699709 */
    700 static int acpiSetupRSDT (ACPIState *s, RTGCPHYS32 addr, unsigned int nb_entries, uint32_t *addrs)
     710static int acpiSetupRSDT(ACPIState *s, RTGCPHYS32 addr, unsigned int nb_entries, uint32_t *addrs)
    701711{
    702712    ACPITBLRSDT *rsdt;
    703713    const size_t size = sizeof(ACPITBLHEADER) + nb_entries * sizeof(rsdt->u32Entry[0]);
    704714
    705     rsdt = (ACPITBLRSDT*)RTMemAllocZ (size);
     715    rsdt = (ACPITBLRSDT*)RTMemAllocZ(size);
    706716    if (!rsdt)
    707717        return PDMDEV_SET_ERROR(s->pDevIns, VERR_NO_TMP_MEMORY, N_("Cannot allocate RSDT"));
    708718
    709     acpiPrepareHeader (&rsdt->header, "RSDT", (uint32_t)size, 1);
     719    acpiPrepareHeader(&rsdt->header, "RSDT", (uint32_t)size, 1);
    710720    for (unsigned int i = 0; i < nb_entries; ++i)
    711721    {
     
    713723        Log(("Setup RSDT: [%d] = %x\n", i, rsdt->u32Entry[i]));
    714724    }
    715     rsdt->header.u8Checksum = acpiChecksum ((uint8_t*)rsdt, size);
    716     acpiPhyscpy (s, addr, rsdt, size);
    717     RTMemFree (rsdt);
    718     return VINF_SUCCESS;
    719 }
    720 
    721 /* Extended System Description Table. */
    722 static int acpiSetupXSDT (ACPIState *s, RTGCPHYS32 addr, unsigned int nb_entries, uint32_t *addrs)
     725    rsdt->header.u8Checksum = acpiChecksum((uint8_t*)rsdt, size);
     726    acpiPhyscpy(s, addr, rsdt, size);
     727    RTMemFree(rsdt);
     728    return VINF_SUCCESS;
     729}
     730
     731/** Extended System Description Table. */
     732static int acpiSetupXSDT(ACPIState *s, RTGCPHYS32 addr, unsigned int nb_entries, uint32_t *addrs)
    723733{
    724734    ACPITBLXSDT *xsdt;
    725735    const size_t size = sizeof(ACPITBLHEADER) + nb_entries * sizeof(xsdt->u64Entry[0]);
    726736
    727     xsdt = (ACPITBLXSDT*)RTMemAllocZ (size);
     737    xsdt = (ACPITBLXSDT*)RTMemAllocZ(size);
    728738    if (!xsdt)
    729739        return VERR_NO_TMP_MEMORY;
    730740
    731     acpiPrepareHeader (&xsdt->header, "XSDT", (uint32_t)size, 1 /* according to ACPI 3.0 specs */);
     741    acpiPrepareHeader(&xsdt->header, "XSDT", (uint32_t)size, 1 /* according to ACPI 3.0 specs */);
    732742    for (unsigned int i = 0; i < nb_entries; ++i)
    733743    {
     
    735745        Log(("Setup XSDT: [%d] = %RX64\n", i, xsdt->u64Entry[i]));
    736746    }
    737     xsdt->header.u8Checksum = acpiChecksum ((uint8_t*)xsdt, size);
    738     acpiPhyscpy (s, addr, xsdt, size);
    739     RTMemFree (xsdt);
    740     return VINF_SUCCESS;
    741 }
    742 
    743 /* Root System Description Pointer (RSDP) */
    744 static void acpiSetupRSDP (ACPITBLRSDP *rsdp, uint32_t rsdt_addr, uint64_t xsdt_addr)
     747    xsdt->header.u8Checksum = acpiChecksum((uint8_t*)xsdt, size);
     748    acpiPhyscpy(s, addr, xsdt, size);
     749    RTMemFree(xsdt);
     750    return VINF_SUCCESS;
     751}
     752
     753/** Root System Description Pointer (RSDP) */
     754static void acpiSetupRSDP(ACPITBLRSDP *rsdp, uint32_t rsdt_addr, uint64_t xsdt_addr)
    745755{
    746756    memset(rsdp, 0, sizeof(*rsdp));
     
    756766    rsdp->u32Length     = RT_H2LE_U32(sizeof(ACPITBLRSDP));
    757767    rsdp->u64XSDT       = RT_H2LE_U64(xsdt_addr);
    758     rsdp->u8ExtChecksum = acpiChecksum ((uint8_t*)rsdp, sizeof(ACPITBLRSDP));
    759 }
    760 
    761 /* Multiple APIC Description Table. */
    762 /** @todo All hardcoded, should set this up based on the actual VM config!!!!! */
    763 /** @note APIC without IO-APIC hangs Windows Vista therefore we setup both */
    764 static void acpiSetupMADT (ACPIState *s, RTGCPHYS32 addr)
     768    rsdp->u8ExtChecksum = acpiChecksum((uint8_t*)rsdp, sizeof(ACPITBLRSDP));
     769}
     770
     771/**
     772 * Multiple APIC Description Table.
     773 *
     774 * @note APIC without IO-APIC hangs Windows Vista therefore we setup both
     775 *
     776 * @todo All hardcoded, should set this up based on the actual VM config!!!!!
     777 */
     778static void acpiSetupMADT(ACPIState *s, RTGCPHYS32 addr)
    765779{
    766780#ifdef VBOX_WITH_SMP_GUESTS
     
    793807    ioapic->u32GSIB    = RT_H2LE_U32(0);
    794808
    795     madt.header_addr()->u8Checksum = acpiChecksum (madt.data(), madt.size());
    796     acpiPhyscpy (s, addr, madt.data(), madt.size());
     809    madt.header_addr()->u8Checksum = acpiChecksum(madt.data(), madt.size());
     810    acpiPhyscpy(s, addr, madt.data(), madt.size());
    797811
    798812#else  /* !VBOX_WITH_SMP_GUESTS */
     
    821835    madt.IOApic.u32GSIB    = RT_H2LE_U32(0);
    822836
    823     madt.header.u8Checksum = acpiChecksum ((uint8_t*)&madt, sizeof(madt));
    824     acpiPhyscpy (s, addr, &madt, sizeof(madt));
     837    madt.header.u8Checksum = acpiChecksum((uint8_t*)&madt, sizeof(madt));
     838    acpiPhyscpy(s, addr, &madt, sizeof(madt));
    825839#endif /* !VBOX_WITH_SMP_GUESTS */
    826840}
    827841
    828842/* SCI IRQ */
    829 DECLINLINE(void) acpiSetIrq (ACPIState *s, int level)
     843DECLINLINE(void) acpiSetIrq(ACPIState *s, int level)
    830844{
    831845    if (s->pm1a_ctl & SCI_EN)
    832         PDMDevHlpPCISetIrq (s->pDevIns, -1, level);
    833 }
    834 
    835 DECLINLINE(uint32_t) pm1a_pure_en (uint32_t en)
     846        PDMDevHlpPCISetIrq(s->pDevIns, -1, level);
     847}
     848
     849DECLINLINE(uint32_t) pm1a_pure_en(uint32_t en)
    836850{
    837851    return en & ~(RSR_EN | IGN_EN);
    838852}
    839853
    840 DECLINLINE(uint32_t) pm1a_pure_sts (uint32_t sts)
     854DECLINLINE(uint32_t) pm1a_pure_sts(uint32_t sts)
    841855{
    842856    return sts & ~(RSR_STS | IGN_STS);
    843857}
    844858
    845 DECLINLINE(int) pm1a_level (ACPIState *s)
    846 {
    847     return (pm1a_pure_en (s->pm1a_en) & pm1a_pure_sts (s->pm1a_sts)) != 0;
    848 }
    849 
    850 DECLINLINE(int) gpe0_level (ACPIState *s)
     859DECLINLINE(int) pm1a_level(ACPIState *s)
     860{
     861    return (pm1a_pure_en(s->pm1a_en) & pm1a_pure_sts(s->pm1a_sts)) != 0;
     862}
     863
     864DECLINLINE(int) gpe0_level(ACPIState *s)
    851865{
    852866    return (s->gpe0_en & s->gpe0_sts) != 0;
    853867}
    854868
    855 static void update_pm1a (ACPIState *s, uint32_t sts, uint32_t en)
     869static void update_pm1a(ACPIState *s, uint32_t sts, uint32_t en)
    856870{
    857871    int old_level, new_level;
    858872
    859     if (gpe0_level (s))
     873    if (gpe0_level(s))
    860874        return;
    861875
    862     old_level = pm1a_level (s);
    863     new_level = (pm1a_pure_en (en) & pm1a_pure_sts (sts)) != 0;
     876    old_level = pm1a_level(s);
     877    new_level = (pm1a_pure_en(en) & pm1a_pure_sts(sts)) != 0;
    864878
    865879    s->pm1a_en = en;
     
    867881
    868882    if (new_level != old_level)
    869         acpiSetIrq (s, new_level);
    870 }
    871 
    872 static void update_gpe0 (ACPIState *s, uint32_t sts, uint32_t en)
     883        acpiSetIrq(s, new_level);
     884}
     885
     886static void update_gpe0(ACPIState *s, uint32_t sts, uint32_t en)
    873887{
    874888    int old_level, new_level;
    875889
    876     if (pm1a_level (s))
     890    if (pm1a_level(s))
    877891        return;
    878892
     
    884898
    885899    if (new_level != old_level)
    886         acpiSetIrq (s, new_level);
    887 }
    888 
    889 static int acpiPowerDown (ACPIState *s)
     900        acpiSetIrq(s, new_level);
     901}
     902
     903static int acpiPowerDown(ACPIState *s)
    890904{
    891905    int rc = PDMDevHlpVMPowerOff(s->pDevIns);
    892     if (RT_FAILURE (rc))
    893         AssertMsgFailed (("Could not power down the VM. rc = %Rrc\n", rc));
     906    if (RT_FAILURE(rc))
     907        AssertMsgFailed(("Could not power down the VM. rc = %Rrc\n", rc));
    894908    return rc;
    895909}
     
    908922    ACPIState *s = IACPIPORT_2_ACPISTATE(pInterface);
    909923    s->fPowerButtonHandled = false;
    910     update_pm1a (s, s->pm1a_sts | PWRBTN_STS, s->pm1a_en);
     924    update_pm1a(s, s->pm1a_sts | PWRBTN_STS, s->pm1a_en);
    911925    return VINF_SUCCESS;
    912926}
     
    949963{
    950964    ACPIState *s = IACPIPORT_2_ACPISTATE(pInterface);
    951     update_pm1a (s, s->pm1a_sts | SLPBTN_STS, s->pm1a_en);
     965    update_pm1a(s, s->pm1a_sts | SLPBTN_STS, s->pm1a_en);
    952966    return VINF_SUCCESS;
    953967}
    954968
    955969/* PM1a_EVT_BLK enable */
    956 static uint32_t acpiPm1aEnReadw (ACPIState *s, uint32_t addr)
     970static uint32_t acpiPm1aEnReadw(ACPIState *s, uint32_t addr)
    957971{
    958972    uint16_t val = s->pm1a_en;
    959     Log (("acpi: acpiPm1aEnReadw -> %#x\n", val));
     973    Log(("acpi: acpiPm1aEnReadw -> %#x\n", val));
    960974    return val;
    961975}
    962976
    963 static void acpiPM1aEnWritew (ACPIState *s, uint32_t addr, uint32_t val)
    964 {
    965     Log (("acpi: acpiPM1aEnWritew <- %#x (%#x)\n", val, val & ~(RSR_EN | IGN_EN)));
     977static void acpiPM1aEnWritew(ACPIState *s, uint32_t addr, uint32_t val)
     978{
     979    Log(("acpi: acpiPM1aEnWritew <- %#x (%#x)\n", val, val & ~(RSR_EN | IGN_EN)));
    966980    val &= ~(RSR_EN | IGN_EN);
    967     update_pm1a (s, s->pm1a_sts, val);
     981    update_pm1a(s, s->pm1a_sts, val);
    968982}
    969983
    970984/* PM1a_EVT_BLK status */
    971 static uint32_t acpiPm1aStsReadw (ACPIState *s, uint32_t addr)
     985static uint32_t acpiPm1aStsReadw(ACPIState *s, uint32_t addr)
    972986{
    973987    uint16_t val = s->pm1a_sts;
    974     Log (("acpi: acpiPm1aStsReadw -> %#x\n", val));
     988    Log(("acpi: acpiPm1aStsReadw -> %#x\n", val));
    975989    return val;
    976990}
    977991
    978 static void acpiPM1aStsWritew (ACPIState *s, uint32_t addr, uint32_t val)
    979 {
    980     Log (("acpi: acpiPM1aStsWritew <- %#x (%#x)\n", val, val & ~(RSR_STS | IGN_STS)));
     992static void acpiPM1aStsWritew(ACPIState *s, uint32_t addr, uint32_t val)
     993{
     994    Log(("acpi: acpiPM1aStsWritew <- %#x (%#x)\n", val, val & ~(RSR_STS | IGN_STS)));
    981995    if (val & PWRBTN_STS)
    982996        s->fPowerButtonHandled = true; /* Remember that the guest handled the last power button event */
    983997    val = s->pm1a_sts & ~(val & ~(RSR_STS | IGN_STS));
    984     update_pm1a (s, val, s->pm1a_en);
     998    update_pm1a(s, val, s->pm1a_en);
    985999}
    9861000
    9871001/* PM1a_CTL_BLK */
    988 static uint32_t acpiPm1aCtlReadw (ACPIState *s, uint32_t addr)
     1002static uint32_t acpiPm1aCtlReadw(ACPIState *s, uint32_t addr)
    9891003{
    9901004    uint16_t val = s->pm1a_ctl;
    991     Log (("acpi: acpiPm1aCtlReadw -> %#x\n", val));
     1005    Log(("acpi: acpiPm1aCtlReadw -> %#x\n", val));
    9921006    return val;
    9931007}
    9941008
    995 static int acpiPM1aCtlWritew (ACPIState *s, uint32_t addr, uint32_t val)
     1009static int acpiPM1aCtlWritew(ACPIState *s, uint32_t addr, uint32_t val)
    9961010{
    9971011    uint32_t uSleepState;
    9981012
    999     Log (("acpi: acpiPM1aCtlWritew <- %#x (%#x)\n", val, val & ~(RSR_CNT | IGN_CNT)));
     1013    Log(("acpi: acpiPM1aCtlWritew <- %#x (%#x)\n", val, val & ~(RSR_CNT | IGN_CNT)));
    10001014    s->pm1a_ctl = val & ~(RSR_CNT | IGN_CNT);
    10011015
     
    10091023                break;
    10101024            case 0x05:                  /* S5 */
    1011                 LogRel (("Entering S5 (power down)\n"));
    1012                 return acpiPowerDown (s);
     1025                LogRel(("Entering S5 (power down)\n"));
     1026                return acpiPowerDown(s);
    10131027            default:
    1014                 AssertMsgFailed (("Unknown sleep state %#x\n", uSleepState));
     1028                AssertMsgFailed(("Unknown sleep state %#x\n", uSleepState));
    10151029                break;
    10161030        }
     
    10201034
    10211035/* GPE0_BLK */
    1022 static uint32_t acpiGpe0EnReadb (ACPIState *s, uint32_t addr)
     1036static uint32_t acpiGpe0EnReadb(ACPIState *s, uint32_t addr)
    10231037{
    10241038    uint8_t val = s->gpe0_en;
    1025     Log (("acpi: acpiGpe0EnReadl -> %#x\n", val));
     1039    Log(("acpi: acpiGpe0EnReadl -> %#x\n", val));
    10261040    return val;
    10271041}
    10281042
    1029 static void acpiGpe0EnWriteb (ACPIState *s, uint32_t addr, uint32_t val)
    1030 {
    1031     Log (("acpi: acpiGpe0EnWritel <- %#x\n", val));
    1032     update_gpe0 (s, s->gpe0_sts, val);
    1033 }
    1034 
    1035 static uint32_t acpiGpe0StsReadb (ACPIState *s, uint32_t addr)
     1043static void acpiGpe0EnWriteb(ACPIState *s, uint32_t addr, uint32_t val)
     1044{
     1045    Log(("acpi: acpiGpe0EnWritel <- %#x\n", val));
     1046    update_gpe0(s, s->gpe0_sts, val);
     1047}
     1048
     1049static uint32_t acpiGpe0StsReadb(ACPIState *s, uint32_t addr)
    10361050{
    10371051    uint8_t val = s->gpe0_sts;
    1038     Log (("acpi: acpiGpe0StsReadl -> %#x\n", val));
     1052    Log(("acpi: acpiGpe0StsReadl -> %#x\n", val));
    10391053    return val;
    10401054}
    10411055
    1042 static void acpiGpe0StsWriteb (ACPIState *s, uint32_t addr, uint32_t val)
     1056static void acpiGpe0StsWriteb(ACPIState *s, uint32_t addr, uint32_t val)
    10431057{
    10441058    val = s->gpe0_sts & ~val;
    1045     update_gpe0 (s, val, s->gpe0_en);
    1046     Log (("acpi: acpiGpe0StsWritel <- %#x\n", val));
     1059    update_gpe0(s, val, s->gpe0_en);
     1060    Log(("acpi: acpiGpe0StsWritel <- %#x\n", val));
    10471061}
    10481062
     
    10641078
    10651079/* SMI */
    1066 static void acpiSmiWriteU8 (ACPIState *s, uint32_t addr, uint32_t val)
    1067 {
    1068     Log (("acpi: acpiSmiWriteU8 %#x\n", val));
     1080static void acpiSmiWriteU8(ACPIState *s, uint32_t addr, uint32_t val)
     1081{
     1082    Log(("acpi: acpiSmiWriteU8 %#x\n", val));
    10691083    if (val == ACPI_ENABLE)
    10701084        s->pm1a_ctl |= SCI_EN;
     
    10721086        s->pm1a_ctl &= ~SCI_EN;
    10731087    else
    1074         Log (("acpi: acpiSmiWriteU8 %#x <- unknown value\n", val));
    1075 }
    1076 
    1077 static uint32_t find_rsdp_space (void)
     1088        Log(("acpi: acpiSmiWriteU8 %#x <- unknown value\n", val));
     1089}
     1090
     1091static uint32_t find_rsdp_space(void)
    10781092{
    10791093    return 0xe0000;
    10801094}
    10811095
    1082 static void acpiPMTimerReset (ACPIState *s)
     1096static void acpiPMTimerReset(ACPIState *s)
    10831097{
    10841098    uint64_t interval, freq;
    10851099
    1086     freq = TMTimerGetFreq (s->CTX_SUFF(ts));
    1087     interval = ASMMultU64ByU32DivByU32 (0xffffffff, freq, PM_TMR_FREQ);
    1088     Log (("interval = %RU64\n", interval));
    1089     TMTimerSet (s->CTX_SUFF(ts), TMTimerGet (s->CTX_SUFF(ts)) + interval);
    1090 }
    1091 
    1092 static DECLCALLBACK(void) acpiTimer (PPDMDEVINS pDevIns, PTMTIMER pTimer)
    1093 {
    1094     ACPIState *s = PDMINS_2_DATA (pDevIns, ACPIState *);
    1095 
    1096     Log (("acpi: pm timer sts %#x (%d), en %#x (%d)\n",
    1097           s->pm1a_sts, (s->pm1a_sts & TMR_STS) != 0,
    1098           s->pm1a_en, (s->pm1a_en & TMR_EN) != 0));
    1099 
    1100     update_pm1a (s, s->pm1a_sts | TMR_STS, s->pm1a_en);
    1101     acpiPMTimerReset (s);
     1100    freq = TMTimerGetFreq(s->CTX_SUFF(ts));
     1101    interval = ASMMultU64ByU32DivByU32(0xffffffff, freq, PM_TMR_FREQ);
     1102    Log(("interval = %RU64\n", interval));
     1103    TMTimerSet(s->CTX_SUFF(ts), TMTimerGet(s->CTX_SUFF(ts)) + interval);
     1104}
     1105
     1106static DECLCALLBACK(void) acpiTimer(PPDMDEVINS pDevIns, PTMTIMER pTimer)
     1107{
     1108    ACPIState *s = PDMINS_2_DATA(pDevIns, ACPIState *);
     1109
     1110    Log(("acpi: pm timer sts %#x (%d), en %#x (%d)\n",
     1111         s->pm1a_sts, (s->pm1a_sts & TMR_STS) != 0,
     1112         s->pm1a_en, (s->pm1a_en & TMR_EN) != 0));
     1113
     1114    update_pm1a(s, s->pm1a_sts | TMR_STS, s->pm1a_en);
     1115    acpiPMTimerReset(s);
    11021116}
    11031117
     
    11051119 * _BST method.
    11061120 */
    1107 static void acpiFetchBatteryStatus (ACPIState *s)
     1121static void acpiFetchBatteryStatus(ACPIState *s)
    11081122{
    11091123    uint32_t           *p = s->au8BatteryInfo;
     
    11161130    if (!s->pDrv)
    11171131        return;
    1118     rc = s->pDrv->pfnQueryBatteryStatus (s->pDrv, &fPresent, &hostRemainingCapacity,
    1119                                          &hostBatteryState, &hostPresentRate);
    1120     AssertRC (rc);
     1132    rc = s->pDrv->pfnQueryBatteryStatus(s->pDrv, &fPresent, &hostRemainingCapacity,
     1133                                        &hostBatteryState, &hostPresentRate);
     1134    AssertRC(rc);
    11211135
    11221136    /* default values */
     
    11371151 * _BIF method.
    11381152 */
    1139 static void acpiFetchBatteryInfo (ACPIState *s)
     1153static void acpiFetchBatteryInfo(ACPIState *s)
    11401154{
    11411155    uint32_t *p = s->au8BatteryInfo;
     
    11551169 * _STA method.
    11561170 */
    1157 static uint32_t acpiGetBatteryDeviceStatus (ACPIState *s)
     1171static uint32_t acpiGetBatteryDeviceStatus(ACPIState *s)
    11581172{
    11591173    bool               fPresent;              /* battery present? */
     
    11651179    if (!s->pDrv)
    11661180        return 0;
    1167     rc = s->pDrv->pfnQueryBatteryStatus (s->pDrv, &fPresent, &hostRemainingCapacity,
    1168                                          &hostBatteryState, &hostPresentRate);
    1169     AssertRC (rc);
     1181    rc = s->pDrv->pfnQueryBatteryStatus(s->pDrv, &fPresent, &hostRemainingCapacity,
     1182                                        &hostBatteryState, &hostPresentRate);
     1183    AssertRC(rc);
    11701184
    11711185    return fPresent
     
    11781192}
    11791193
    1180 static uint32_t acpiGetPowerSource (ACPIState *s)
     1194static uint32_t acpiGetPowerSource(ACPIState *s)
    11811195{
    11821196    PDMACPIPOWERSOURCE ps;
     
    11851199    if (!s->pDrv)
    11861200        return AC_ONLINE;
    1187     int rc = s->pDrv->pfnQueryPowerSource (s->pDrv, &ps);
    1188     AssertRC (rc);
     1201    int rc = s->pDrv->pfnQueryPowerSource(s->pDrv, &ps);
     1202    AssertRC(rc);
    11891203    return ps == PDM_ACPI_POWER_SOURCE_BATTERY ? AC_OFFLINE : AC_ONLINE;
    11901204}
    11911205
    1192 IO_WRITE_PROTO (acpiBatIndexWrite)
     1206PDMBOTHCBDECL(int) acpiBatIndexWrite(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t u32, unsigned cb)
    11931207{
    11941208    ACPIState *s = (ACPIState *)pvUser;
     
    12041218                u32 >>= 2;
    12051219            }
    1206             Assert (u32 < BAT_INDEX_LAST);
     1220            Assert(u32 < BAT_INDEX_LAST);
    12071221            s->uBatteryIndex = u32;
    12081222            break;
     
    12141228}
    12151229
    1216 IO_READ_PROTO (acpiBatDataRead)
     1230PDMBOTHCBDECL(int) acpiBatDataRead(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t *pu32, unsigned cb)
    12171231{
    12181232    ACPIState *s = (ACPIState *)pvUser;
     
    12531267
    12541268                default:
    1255                     AssertMsgFailed (("Invalid battery index %d\n", s->uBatteryIndex));
     1269                    AssertMsgFailed(("Invalid battery index %d\n", s->uBatteryIndex));
    12561270                    break;
    12571271            }
     
    12631277}
    12641278
    1265 IO_WRITE_PROTO (acpiSysInfoIndexWrite)
     1279PDMBOTHCBDECL(int) acpiSysInfoIndexWrite(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t u32, unsigned cb)
    12661280{
    12671281    ACPIState *s = (ACPIState *)pvUser;
    12681282
    12691283    Log(("system_index = %d, %d\n", u32, u32 >> 2));
    1270     switch (cb) {
    1271     case 4:
    1272         if (u32 == SYSTEM_INFO_INDEX_VALID || u32 == SYSTEM_INFO_INDEX_INVALID)
    1273             s->uSystemInfoIndex = u32;
    1274         else
    1275         {
    1276             /* see comment at the declaration of u8IndexShift */
    1277             if (s->u8IndexShift == 0)
     1284    switch (cb)
     1285    {
     1286        case 4:
     1287            if (u32 == SYSTEM_INFO_INDEX_VALID || u32 == SYSTEM_INFO_INDEX_INVALID)
     1288                s->uSystemInfoIndex = u32;
     1289            else
    12781290            {
    1279                 if (((u32 >> 2) < SYSTEM_INFO_INDEX_LAST) && ((u32 & 0x3)) == 0)
     1291                /* see comment at the declaration of u8IndexShift */
     1292                if (s->u8IndexShift == 0)
    12801293                {
    1281                     s->u8IndexShift = 2;
     1294                    if (((u32 >> 2) < SYSTEM_INFO_INDEX_LAST) && ((u32 & 0x3)) == 0)
     1295                    {
     1296                        s->u8IndexShift = 2;
     1297                    }
    12821298                }
     1299
     1300                u32 >>= s->u8IndexShift;
     1301                Assert(u32 < SYSTEM_INFO_INDEX_LAST);
     1302                s->uSystemInfoIndex = u32;
    12831303            }
    1284 
    1285             u32 >>= s->u8IndexShift;
    1286             Assert (u32 < SYSTEM_INFO_INDEX_LAST);
    1287             s->uSystemInfoIndex = u32;
    1288         }
    1289         break;
    1290 
    1291     default:
    1292         AssertMsgFailed(("Port=%#x cb=%d u32=%#x\n", Port, cb, u32));
    1293         break;
    1294     }
    1295     return VINF_SUCCESS;
    1296 }
    1297 
    1298 IO_READ_PROTO (acpiSysInfoDataRead)
     1304            break;
     1305
     1306        default:
     1307            AssertMsgFailed(("Port=%#x cb=%d u32=%#x\n", Port, cb, u32));
     1308            break;
     1309    }
     1310    return VINF_SUCCESS;
     1311}
     1312
     1313PDMBOTHCBDECL(int) acpiSysInfoDataRead(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t *pu32, unsigned cb)
    12991314{
    13001315    ACPIState *s = (ACPIState *)pvUser;
     
    13481363                case SYSTEM_INFO_INDEX_CPU3_STATUS:
    13491364#ifdef VBOX_WITH_SMP_GUESTS
    1350                     *pu32 = (s->fShowCpu &&
    1351                              s->uSystemInfoIndex - SYSTEM_INFO_INDEX_CPU0_STATUS < cCpus)
    1352                             ? (  STA_DEVICE_PRESENT_MASK
    1353                                            | STA_DEVICE_ENABLED_MASK
    1354                                            | STA_DEVICE_SHOW_IN_UI_MASK
    1355                                            | STA_DEVICE_FUNCTIONING_PROPERLY_MASK)
    1356                             : 0;
     1365                    *pu32 = s->fShowCpu
     1366                         && s->uSystemInfoIndex - SYSTEM_INFO_INDEX_CPU0_STATUS < s->cCpus
     1367                          ?   STA_DEVICE_PRESENT_MASK
     1368                            | STA_DEVICE_ENABLED_MASK
     1369                            | STA_DEVICE_SHOW_IN_UI_MASK
     1370                            | STA_DEVICE_FUNCTIONING_PROPERLY_MASK
     1371                          : 0;
    13571372#else
    13581373                    *pu32 = 0;
     
    13661381
    13671382                default:
    1368                     AssertMsgFailed (("Invalid system info index %d\n", s->uSystemInfoIndex));
     1383                    AssertMsgFailed(("Invalid system info index %d\n", s->uSystemInfoIndex));
    13691384                    break;
    13701385            }
     
    13791394}
    13801395
    1381 IO_WRITE_PROTO (acpiSysInfoDataWrite)
     1396PDMBOTHCBDECL(int) acpiSysInfoDataWrite(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t u32, unsigned cb)
    13821397{
    13831398    ACPIState *s = (ACPIState *)pvUser;
     
    14081423}
    14091424
     1425/** @todo Don't call functions, but do the job in the read/write handlers
     1426 *        here! */
     1427
    14101428/* IO Helpers */
    1411 IO_READ_PROTO (acpiPm1aEnRead)
     1429PDMBOTHCBDECL(int) acpiPm1aEnRead(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t *pu32, unsigned cb)
    14121430{
    14131431    switch (cb)
    14141432    {
    14151433        case 2:
    1416             *pu32 = acpiPm1aEnReadw ((ACPIState*)pvUser, Port);
     1434            *pu32 = acpiPm1aEnReadw((ACPIState*)pvUser, Port);
    14171435            break;
    14181436        default:
     
    14221440}
    14231441
    1424 IO_READ_PROTO (acpiPm1aStsRead)
     1442PDMBOTHCBDECL(int) acpiPm1aStsRead(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t *pu32, unsigned cb)
    14251443{
    14261444    switch (cb)
    14271445    {
    14281446        case 2:
    1429             *pu32 = acpiPm1aStsReadw ((ACPIState*)pvUser, Port);
     1447            *pu32 = acpiPm1aStsReadw((ACPIState*)pvUser, Port);
    14301448            break;
    14311449        default:
     
    14351453}
    14361454
    1437 IO_READ_PROTO (acpiPm1aCtlRead)
     1455PDMBOTHCBDECL(int) acpiPm1aCtlRead(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t *pu32, unsigned cb)
    14381456{
    14391457    switch (cb)
    14401458    {
    14411459        case 2:
    1442             *pu32 = acpiPm1aCtlReadw ((ACPIState*)pvUser, Port);
     1460            *pu32 = acpiPm1aCtlReadw((ACPIState*)pvUser, Port);
    14431461            break;
    14441462        default:
     
    14481466}
    14491467
    1450 IO_WRITE_PROTO (acpiPM1aEnWrite)
     1468PDMBOTHCBDECL(int) acpiPM1aEnWrite(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t u32, unsigned cb)
    14511469{
    14521470    switch (cb)
    14531471    {
    14541472        case 2:
    1455             acpiPM1aEnWritew ((ACPIState*)pvUser, Port, u32);
     1473            acpiPM1aEnWritew((ACPIState*)pvUser, Port, u32);
    14561474            break;
    14571475        default:
     
    14621480}
    14631481
    1464 IO_WRITE_PROTO (acpiPM1aStsWrite)
     1482PDMBOTHCBDECL(int) acpiPM1aStsWrite(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t u32, unsigned cb)
    14651483{
    14661484    switch (cb)
    14671485    {
    14681486        case 2:
    1469             acpiPM1aStsWritew ((ACPIState*)pvUser, Port, u32);
     1487            acpiPM1aStsWritew((ACPIState*)pvUser, Port, u32);
    14701488            break;
    14711489        default:
     
    14761494}
    14771495
    1478 IO_WRITE_PROTO (acpiPM1aCtlWrite)
     1496PDMBOTHCBDECL(int) acpiPM1aCtlWrite(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t u32, unsigned cb)
    14791497{
    14801498    switch (cb)
    14811499    {
    14821500        case 2:
    1483             return acpiPM1aCtlWritew ((ACPIState*)pvUser, Port, u32);
     1501            return acpiPM1aCtlWritew((ACPIState*)pvUser, Port, u32);
    14841502        default:
    14851503            AssertMsgFailed(("Port=%#x cb=%d u32=%#x\n", Port, cb, u32));
     
    14941512 * PMTMR readable from host/guest.
    14951513 */
    1496 IO_READ_PROTO (acpiPMTmrRead)
     1514PDMBOTHCBDECL(int) acpiPMTmrRead(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t *pu32, unsigned cb)
    14971515{
    14981516    if (cb == 4)
    14991517    {
    1500         ACPIState *s = PDMINS_2_DATA (pDevIns, ACPIState *);
    1501         int64_t now = TMTimerGet (s->CTX_SUFF(ts));
     1518        ACPIState *s = PDMINS_2_DATA(pDevIns, ACPIState *);
     1519        int64_t now = TMTimerGet(s->CTX_SUFF(ts));
    15021520        int64_t elapsed = now - s->pm_timer_initial;
    15031521
    1504         *pu32 = ASMMultU64ByU32DivByU32 (elapsed, PM_TMR_FREQ, TMTimerGetFreq (s->CTX_SUFF(ts)));
    1505         Log (("acpi: acpiPMTmrRead -> %#x\n", *pu32));
     1522        *pu32 = ASMMultU64ByU32DivByU32(elapsed, PM_TMR_FREQ, TMTimerGetFreq(s->CTX_SUFF(ts)));
     1523        Log(("acpi: acpiPMTmrRead -> %#x\n", *pu32));
    15061524        return VINF_SUCCESS;
    15071525    }
     
    15111529#ifdef IN_RING3
    15121530
    1513 IO_READ_PROTO (acpiGpe0StsRead)
     1531PDMBOTHCBDECL(int) acpiGpe0StsRead(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t *pu32, unsigned cb)
    15141532{
    15151533    switch (cb)
    15161534    {
    15171535        case 1:
    1518             *pu32 = acpiGpe0StsReadb ((ACPIState*)pvUser, Port);
     1536            *pu32 = acpiGpe0StsReadb((ACPIState*)pvUser, Port);
    15191537            break;
    15201538        default:
     
    15241542}
    15251543
    1526 IO_READ_PROTO (acpiGpe0EnRead)
     1544PDMBOTHCBDECL(int) acpiGpe0EnRead(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t *pu32, unsigned cb)
    15271545{
    15281546    switch (cb)
    15291547    {
    15301548        case 1:
    1531             *pu32 = acpiGpe0EnReadb ((ACPIState*)pvUser, Port);
     1549            *pu32 = acpiGpe0EnReadb((ACPIState*)pvUser, Port);
    15321550            break;
    15331551        default:
     
    15371555}
    15381556
    1539 IO_WRITE_PROTO (acpiGpe0StsWrite)
     1557PDMBOTHCBDECL(int) acpiGpe0StsWrite(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t u32, unsigned cb)
    15401558{
    15411559    switch (cb)
    15421560    {
    15431561        case 1:
    1544             acpiGpe0StsWriteb ((ACPIState*)pvUser, Port, u32);
     1562            acpiGpe0StsWriteb((ACPIState*)pvUser, Port, u32);
    15451563            break;
    15461564        default:
     
    15511569}
    15521570
    1553 IO_WRITE_PROTO (acpiGpe0EnWrite)
     1571PDMBOTHCBDECL(int) acpiGpe0EnWrite(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t u32, unsigned cb)
    15541572{
    15551573    switch (cb)
    15561574    {
    15571575        case 1:
    1558             acpiGpe0EnWriteb ((ACPIState*)pvUser, Port, u32);
     1576            acpiGpe0EnWriteb((ACPIState*)pvUser, Port, u32);
    15591577            break;
    15601578        default:
     
    15651583}
    15661584
    1567 IO_WRITE_PROTO (acpiSmiWrite)
     1585PDMBOTHCBDECL(int) acpiSmiWrite(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t u32, unsigned cb)
    15681586{
    15691587    switch (cb)
    15701588    {
    15711589        case 1:
    1572             acpiSmiWriteU8 ((ACPIState*)pvUser, Port, u32);
     1590            acpiSmiWriteU8((ACPIState*)pvUser, Port, u32);
    15731591            break;
    15741592        default:
     
    15791597}
    15801598
    1581 IO_WRITE_PROTO (acpiResetWrite)
     1599PDMBOTHCBDECL(int) acpiResetWrite(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t u32, unsigned cb)
    15821600{
    15831601    switch (cb)
    15841602    {
    15851603        case 1:
    1586             return acpiResetWriteU8 ((ACPIState*)pvUser, Port, u32);
     1604            return acpiResetWriteU8((ACPIState*)pvUser, Port, u32);
    15871605        default:
    15881606            AssertMsgFailed(("Port=%#x cb=%d u32=%#x\n", Port, cb, u32));
     
    15941612#ifdef DEBUG_ACPI
    15951613
    1596 IO_WRITE_PROTO (acpiDhexWrite)
     1614PDMBOTHCBDECL(int) acpiDhexWrite(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t u32, unsigned cb)
    15971615{
    15981616    switch (cb)
    15991617    {
    16001618        case 1:
    1601             Log (("%#x\n", u32 & 0xff));
     1619            Log(("%#x\n", u32 & 0xff));
    16021620            break;
    16031621        case 2:
    1604             Log (("%#6x\n", u32 & 0xffff));
     1622            Log(("%#6x\n", u32 & 0xffff));
    16051623        case 4:
    1606             Log (("%#10x\n", u32));
     1624            Log(("%#10x\n", u32));
    16071625            break;
    16081626        default:
     
    16131631}
    16141632
    1615 IO_WRITE_PROTO (acpiDchrWrite)
     1633PDMBOTHCBDECL(int) acpiDchrWrite(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t u32, unsigned cb)
    16161634{
    16171635    switch (cb)
    16181636    {
    16191637        case 1:
    1620             Log (("%c", u32 & 0xff));
     1638            Log(("%c", u32 & 0xff));
    16211639            break;
    16221640        default:
     
    16351653static const SSMFIELD g_AcpiSavedStateFields[] =
    16361654{
    1637     SSMFIELD_ENTRY (ACPIState, pm1a_en),
    1638     SSMFIELD_ENTRY (ACPIState, pm1a_sts),
    1639     SSMFIELD_ENTRY (ACPIState, pm1a_ctl),
    1640     SSMFIELD_ENTRY (ACPIState, pm_timer_initial),
    1641     SSMFIELD_ENTRY (ACPIState, gpe0_en),
    1642     SSMFIELD_ENTRY (ACPIState, gpe0_sts),
    1643     SSMFIELD_ENTRY (ACPIState, uBatteryIndex),
    1644     SSMFIELD_ENTRY (ACPIState, uSystemInfoIndex),
    1645     SSMFIELD_ENTRY (ACPIState, u64RamSize),
    1646     SSMFIELD_ENTRY (ACPIState, u8IndexShift),
    1647     SSMFIELD_ENTRY (ACPIState, u8UseIOApic),
    1648     SSMFIELD_ENTRY (ACPIState, uSleepState),
    1649     SSMFIELD_ENTRY_TERM ()
     1655    SSMFIELD_ENTRY(ACPIState, pm1a_en),
     1656    SSMFIELD_ENTRY(ACPIState, pm1a_sts),
     1657    SSMFIELD_ENTRY(ACPIState, pm1a_ctl),
     1658    SSMFIELD_ENTRY(ACPIState, pm_timer_initial),
     1659    SSMFIELD_ENTRY(ACPIState, gpe0_en),
     1660    SSMFIELD_ENTRY(ACPIState, gpe0_sts),
     1661    SSMFIELD_ENTRY(ACPIState, uBatteryIndex),
     1662    SSMFIELD_ENTRY(ACPIState, uSystemInfoIndex),
     1663    SSMFIELD_ENTRY(ACPIState, u64RamSize),      /** @todo not necessary to save this. */
     1664    SSMFIELD_ENTRY(ACPIState, u8IndexShift),
     1665    SSMFIELD_ENTRY(ACPIState, u8UseIOApic),
     1666    SSMFIELD_ENTRY(ACPIState, uSleepState),
     1667    SSMFIELD_ENTRY_TERM()
    16501668};
    16511669
    1652 static DECLCALLBACK(int) acpi_save_state (PPDMDEVINS pDevIns, PSSMHANDLE pSSMHandle)
    1653 {
    1654     ACPIState *s = PDMINS_2_DATA (pDevIns, ACPIState *);
    1655     return SSMR3PutStruct (pSSMHandle, s, &g_AcpiSavedStateFields[0]);
    1656 }
    1657 
    1658 static DECLCALLBACK(int) acpi_load_state (PPDMDEVINS pDevIns, PSSMHANDLE pSSMHandle,
    1659                                           uint32_t u32Version)
    1660 {
    1661     ACPIState *s = PDMINS_2_DATA (pDevIns, ACPIState *);
     1670static DECLCALLBACK(int) acpi_save_state(PPDMDEVINS pDevIns, PSSMHANDLE pSSMHandle)
     1671{
     1672    ACPIState *s = PDMINS_2_DATA(pDevIns, ACPIState *);
     1673    return SSMR3PutStruct(pSSMHandle, s, &g_AcpiSavedStateFields[0]);
     1674}
     1675
     1676static DECLCALLBACK(int) acpi_load_state(PPDMDEVINS pDevIns, PSSMHANDLE pSSMHandle,
     1677                                         uint32_t u32Version)
     1678{
     1679    ACPIState *s = PDMINS_2_DATA(pDevIns, ACPIState *);
    16621680    int rc;
    16631681
     
    16651683        return VERR_SSM_UNSUPPORTED_DATA_UNIT_VERSION;
    16661684
    1667     rc = SSMR3GetStruct (pSSMHandle, s, &g_AcpiSavedStateFields[0]);
    1668     if (RT_SUCCESS (rc))
    1669     {
    1670         acpiFetchBatteryStatus (s);
    1671         acpiFetchBatteryInfo (s);
    1672         acpiPMTimerReset (s);
     1685    rc = SSMR3GetStruct(pSSMHandle, s, &g_AcpiSavedStateFields[0]);
     1686    if (RT_SUCCESS(rc))
     1687    {
     1688        acpiFetchBatteryStatus(s);
     1689        acpiFetchBatteryInfo(s);
     1690        acpiPMTimerReset(s);
    16731691    }
    16741692    return rc;
     
    17011719 * Create the ACPI tables.
    17021720 */
    1703 static int acpiPlantTables (ACPIState *s)
     1721static int acpiPlantTables(ACPIState *s)
    17041722{
    17051723    int        rc;
     
    17181736    xsdt_tbl_len += cAddr*8;  /* each entry: 64 bits phys. address. */
    17191737
    1720     rc = CFGMR3QueryU64 (s->pDevIns->pCfgHandle, "RamSize", &s->u64RamSize);
    1721     if (RT_FAILURE (rc))
     1738    rc = CFGMR3QueryU64(s->pDevIns->pCfgHandle, "RamSize", &s->u64RamSize);
     1739    if (RT_FAILURE(rc))
    17221740        return PDMDEV_SET_ERROR(s->pDevIns, rc,
    17231741                                N_("Configuration error: Querying "
     
    17251743
    17261744    uint32_t cbRamHole;
    1727     rc = CFGMR3QueryU32Def (s->pDevIns->pCfgHandle, "RamHoleSize", &cbRamHole, MM_RAM_HOLE_SIZE_DEFAULT);
    1728     if (RT_FAILURE (rc))
    1729         return PDMDEV_SET_ERROR (s->pDevIns, rc,
    1730                                  N_ ("Configuration error: Querying \"RamHoleSize\" as integer failed"));
     1745    rc = CFGMR3QueryU32Def(s->pDevIns->pCfgHandle, "RamHoleSize", &cbRamHole, MM_RAM_HOLE_SIZE_DEFAULT);
     1746    if (RT_FAILURE(rc))
     1747        return PDMDEV_SET_ERROR(s->pDevIns, rc,
     1748                                N_("Configuration error: Querying \"RamHoleSize\" as integer failed"));
    17311749    const uint64_t offRamHole = _4G - cbRamHole;
    17321750
    17331751#if 0 /** @todo 4GB: This needs adjusting fixing! I've disabled it to test big mem configs. */
    1734     if (s->u64RamSize > (0xffffffff - 0x10000))
     1752    if (s->u64RamSize > UINT32_C(0xffffffff) - UINT32_C(0x10000))
    17351753        return PDMDEV_SET_ERROR(s->pDevIns, VERR_OUT_OF_RANGE,
    17361754                                N_("Configuration error: Invalid \"RamSize\", maximum allowed "
     
    17391757
    17401758    rsdt_addr = 0;
    1741     xsdt_addr = RT_ALIGN_32 (rsdt_addr + rsdt_tbl_len, 16);
    1742     fadt_addr = RT_ALIGN_32 (xsdt_addr + xsdt_tbl_len, 16);
    1743     facs_addr = RT_ALIGN_32 (fadt_addr + sizeof(ACPITBLFADT), 16);
     1759    xsdt_addr = RT_ALIGN_32(rsdt_addr + rsdt_tbl_len, 16);
     1760    fadt_addr = RT_ALIGN_32(xsdt_addr + xsdt_tbl_len, 16);
     1761    facs_addr = RT_ALIGN_32(fadt_addr + sizeof(ACPITBLFADT), 16);
    17441762    if (s->u8UseIOApic)
    17451763    {
    1746         apic_addr = RT_ALIGN_32 (facs_addr + sizeof(ACPITBLFACS), 16);
     1764        apic_addr = RT_ALIGN_32(facs_addr + sizeof(ACPITBLFACS), 16);
    17471765#ifdef VBOX_WITH_SMP_GUESTS
    17481766        /**
     
    17501768         * but as this code is executed only once it doesn't make sense to optimize much
    17511769         */
    1752         dsdt_addr = RT_ALIGN_32 (apic_addr + AcpiTableMADT::sizeFor(s), 16);
     1770        dsdt_addr = RT_ALIGN_32(apic_addr + AcpiTableMADT::sizeFor(s), 16);
    17531771#else
    1754         dsdt_addr = RT_ALIGN_32 (apic_addr + sizeof(ACPITBLMADT), 16);
     1772        dsdt_addr = RT_ALIGN_32(apic_addr + sizeof(ACPITBLMADT), 16);
    17551773#endif
    17561774    }
    17571775    else
    17581776    {
    1759         dsdt_addr = RT_ALIGN_32 (facs_addr + sizeof(ACPITBLFACS), 16);
    1760     }
    1761 
    1762     last_addr = RT_ALIGN_32 (dsdt_addr + sizeof(AmlCode), 16);
     1777        dsdt_addr = RT_ALIGN_32(facs_addr + sizeof(ACPITBLFACS), 16);
     1778    }
     1779
     1780    last_addr = RT_ALIGN_32(dsdt_addr + sizeof(AmlCode), 16);
    17631781    if (last_addr > 0x10000)
    17641782        return PDMDEV_SET_ERROR(s->pDevIns, VERR_TOO_MUCH_DATA,
     
    17671785    Log(("RSDP 0x%08X\n", find_rsdp_space()));
    17681786#if 1 /** @todo 4GB: Quick hack, may need revising. */
    1769     addend = (uint32_t) RT_MIN (s->u64RamSize, offRamHole) - 0x10000;
     1787    addend = (uint32_t)RT_MIN(s->u64RamSize, offRamHole) - 0x10000;
    17701788#else
    1771     addend = (uint32_t) s->u64RamSize - 0x10000;
     1789    addend = (uint32_t)s->u64RamSize - 0x10000;
    17721790#endif
    17731791    Log(("RSDT 0x%08X XSDT 0x%08X\n", rsdt_addr + addend, xsdt_addr + addend));
    17741792    Log(("FACS 0x%08X FADT 0x%08X\n", facs_addr + addend, fadt_addr + addend));
    17751793    Log(("DSDT 0x%08X\n", dsdt_addr + addend));
    1776     acpiSetupRSDP ((ACPITBLRSDP*)s->au8RSDPPage, rsdt_addr + addend, xsdt_addr + addend);
    1777     acpiSetupDSDT (s, dsdt_addr + addend);
    1778     acpiSetupFACS (s, facs_addr + addend);
    1779     acpiSetupFADT (s, fadt_addr + addend, facs_addr + addend, dsdt_addr + addend);
     1794    acpiSetupRSDP((ACPITBLRSDP*)s->au8RSDPPage, rsdt_addr + addend, xsdt_addr + addend);
     1795    acpiSetupDSDT(s, dsdt_addr + addend);
     1796    acpiSetupFACS(s, facs_addr + addend);
     1797    acpiSetupFADT(s, fadt_addr + addend, facs_addr + addend, dsdt_addr + addend);
    17801798
    17811799    rsdt_addrs[0] = fadt_addr + addend;
    17821800    if (s->u8UseIOApic)
    17831801    {
    1784         acpiSetupMADT (s, apic_addr + addend);
     1802        acpiSetupMADT(s, apic_addr + addend);
    17851803        rsdt_addrs[1] = apic_addr + addend;
    17861804    }
    17871805
    1788     rc = acpiSetupRSDT (s, rsdt_addr + addend, cAddr, rsdt_addrs);
     1806    rc = acpiSetupRSDT(s, rsdt_addr + addend, cAddr, rsdt_addrs);
    17891807    if (RT_FAILURE(rc))
    17901808        return rc;
    1791     return acpiSetupXSDT (s, xsdt_addr + addend, cAddr, rsdt_addrs);
     1809    return acpiSetupXSDT(s, xsdt_addr + addend, cAddr, rsdt_addrs);
    17921810}
    17931811
     
    18051823 *                      iInstance it's expected to be used a bit in this function.
    18061824 */
    1807 static DECLCALLBACK(int) acpiConstruct (PPDMDEVINS pDevIns, int iInstance, PCFGMNODE pCfgHandle)
     1825static DECLCALLBACK(int) acpiConstruct(PPDMDEVINS pDevIns, int iInstance, PCFGMNODE pCfgHandle)
    18081826{
    18091827    int rc;
    1810     ACPIState *s = PDMINS_2_DATA (pDevIns, ACPIState *);
     1828    ACPIState *s = PDMINS_2_DATA(pDevIns, ACPIState *);
    18111829    uint32_t rsdp_addr;
    18121830    PCIDevice *dev;
     
    18151833
    18161834    /* Validate and read the configuration. */
    1817     if (!CFGMR3AreValuesValid (pCfgHandle,
    1818                                "RamSize\0"
    1819                                "RamHoleSize\0"
    1820                                "IOAPIC\0"
    1821                                "NumCPUs\0"
    1822                                "GCEnabled\0"
    1823                                "R0Enabled\0"
    1824                                "HpetEnabled\0"
    1825                                "SmcEnabled\0"
    1826                                "FdcEnabled\0"
    1827                                ))
     1835    if (!CFGMR3AreValuesValid(pCfgHandle,
     1836                              "RamSize\0"
     1837                              "RamHoleSize\0"
     1838                              "IOAPIC\0"
     1839                              "NumCPUs\0"
     1840                              "GCEnabled\0"
     1841                              "R0Enabled\0"
     1842                              "HpetEnabled\0"
     1843                              "SmcEnabled\0"
     1844                              "FdcEnabled\0"
     1845                              ))
    18281846        return PDMDEV_SET_ERROR(pDevIns, VERR_PDM_DEVINS_UNKNOWN_CFG_VALUES,
    18291847                                N_("Configuration error: Invalid config key for ACPI device"));
     
    18321850
    18331851    /* query whether we are supposed to present an IOAPIC */
    1834     rc = CFGMR3QueryU8Def (pCfgHandle, "IOAPIC", &s->u8UseIOApic, 1);
    1835     if (RT_FAILURE (rc))
     1852    rc = CFGMR3QueryU8Def(pCfgHandle, "IOAPIC", &s->u8UseIOApic, 1);
     1853    if (RT_FAILURE(rc))
    18361854        return PDMDEV_SET_ERROR(pDevIns, rc,
    18371855                                N_("Configuration error: Failed to read \"IOAPIC\""));
     
    18431861
    18441862    /* query whether we are supposed to present an FDC controller */
    1845     rc = CFGMR3QueryBoolDef (pCfgHandle, "FdcEnabled", &s->fUseFdc, true);
    1846     if (RT_FAILURE (rc))
     1863    rc = CFGMR3QueryBoolDef(pCfgHandle, "FdcEnabled", &s->fUseFdc, true);
     1864    if (RT_FAILURE(rc))
    18471865        return PDMDEV_SET_ERROR(pDevIns, rc,
    18481866                                N_("Configuration error: Failed to read \"FdcEnabled\""));
    18491867
    18501868    /* query whether we are supposed to present HPET */
    1851     rc = CFGMR3QueryBoolDef (pCfgHandle, "HpetEnabled", &s->fUseHpet, false);
     1869    rc = CFGMR3QueryBoolDef(pCfgHandle, "HpetEnabled", &s->fUseHpet, false);
    18521870    if (RT_FAILURE(rc))
    18531871        return PDMDEV_SET_ERROR(pDevIns, rc,
    18541872                                N_("Configuration error: Failed to read \"HpetEnabled\""));
    18551873    /* query whether we are supposed to present SMC */
    1856     rc = CFGMR3QueryBoolDef (pCfgHandle, "SmcEnabled", &s->fUseSmc, false);
     1874    rc = CFGMR3QueryBoolDef(pCfgHandle, "SmcEnabled", &s->fUseSmc, false);
    18571875    if (RT_FAILURE(rc))
    18581876        return PDMDEV_SET_ERROR(pDevIns, rc,
     
    18611879    s->fShowCpu = s->fUseSmc;
    18621880
    1863     rc = CFGMR3QueryBool (pCfgHandle, "GCEnabled", &fGCEnabled);
     1881    rc = CFGMR3QueryBool(pCfgHandle, "GCEnabled", &fGCEnabled);
    18641882    if (rc == VERR_CFGM_VALUE_NOT_FOUND)
    18651883        fGCEnabled = true;
    1866     else if (RT_FAILURE (rc))
     1884    else if (RT_FAILURE(rc))
    18671885        return PDMDEV_SET_ERROR(pDevIns, rc,
    18681886                                N_("Configuration error: Failed to read \"GCEnabled\""));
     
    18761894
    18771895    /* */
    1878     rsdp_addr = find_rsdp_space ();
     1896    rsdp_addr = find_rsdp_space();
    18791897    if (!rsdp_addr)
    18801898        return PDMDEV_SET_ERROR(pDevIns, VERR_NO_MEMORY,
    18811899                                N_("Can not find space for RSDP. ACPI is disabled"));
    18821900
    1883     rc = acpiPlantTables (s);
    1884     if (RT_FAILURE (rc))
     1901    rc = acpiPlantTables(s);
     1902    if (RT_FAILURE(rc))
    18851903        return rc;
    18861904
    1887     rc = PDMDevHlpROMRegister (pDevIns, rsdp_addr, 0x1000, s->au8RSDPPage, false /* fShadow */, "ACPI RSDP");
    1888     if (RT_FAILURE (rc))
     1905    rc = PDMDevHlpROMRegister(pDevIns, rsdp_addr, 0x1000, s->au8RSDPPage, false /* fShadow */, "ACPI RSDP");
     1906    if (RT_FAILURE(rc))
    18891907        return rc;
    18901908
    18911909#define R(addr, cnt, writer, reader, description) \
    1892     do {                                                                     \
    1893         rc = PDMDevHlpIOPortRegister (pDevIns, addr, cnt, s, writer, reader, \
    1894                                       NULL, NULL, description);              \
    1895         if (RT_FAILURE (rc))                                              \
    1896             return rc;                                                       \
     1910    do { \
     1911        rc = PDMDevHlpIOPortRegister(pDevIns, addr, cnt, s, writer, reader, \
     1912                                      NULL, NULL, description); \
     1913        if (RT_FAILURE(rc)) \
     1914            return rc; \
    18971915    } while (0)
    1898 #define L (GPE0_BLK_LEN / 2)
    1899 
    1900     R (PM1a_EVT_BLK+2, 1, acpiPM1aEnWrite,       acpiPm1aEnRead,      "ACPI PM1a Enable");
    1901     R (PM1a_EVT_BLK,   1, acpiPM1aStsWrite,      acpiPm1aStsRead,     "ACPI PM1a Status");
    1902     R (PM1a_CTL_BLK,   1, acpiPM1aCtlWrite,      acpiPm1aCtlRead,     "ACPI PM1a Control");
    1903     R (PM_TMR_BLK,     1, NULL,                  acpiPMTmrRead,       "ACPI PM Timer");
    1904     R (SMI_CMD,        1, acpiSmiWrite,          NULL,                "ACPI SMI");
     1916#define L       (GPE0_BLK_LEN / 2)
     1917
     1918    R(PM1a_EVT_BLK+2, 1, acpiPM1aEnWrite,       acpiPm1aEnRead,      "ACPI PM1a Enable");
     1919    R(PM1a_EVT_BLK,   1, acpiPM1aStsWrite,      acpiPm1aStsRead,     "ACPI PM1a Status");
     1920    R(PM1a_CTL_BLK,   1, acpiPM1aCtlWrite,      acpiPm1aCtlRead,     "ACPI PM1a Control");
     1921    R(PM_TMR_BLK,     1, NULL,                  acpiPMTmrRead,       "ACPI PM Timer");
     1922    R(SMI_CMD,        1, acpiSmiWrite,          NULL,                "ACPI SMI");
    19051923#ifdef DEBUG_ACPI
    1906     R (DEBUG_HEX,      1, acpiDhexWrite,         NULL,                "ACPI Debug hex");
    1907     R (DEBUG_CHR,      1, acpiDchrWrite,         NULL,                "ACPI Debug char");
     1924    R(DEBUG_HEX,      1, acpiDhexWrite,         NULL,                "ACPI Debug hex");
     1925    R(DEBUG_CHR,      1, acpiDchrWrite,         NULL,                "ACPI Debug char");
    19081926#endif
    1909     R (BAT_INDEX,      1, acpiBatIndexWrite,     NULL,                "ACPI Battery status index");
    1910     R (BAT_DATA,       1, NULL,                  acpiBatDataRead,     "ACPI Battery status data");
    1911     R (SYSI_INDEX,     1, acpiSysInfoIndexWrite, NULL,                "ACPI system info index");
    1912     R (SYSI_DATA,      1, acpiSysInfoDataWrite,  acpiSysInfoDataRead, "ACPI system info data");
    1913     R (GPE0_BLK + L,   L, acpiGpe0EnWrite,       acpiGpe0EnRead,      "ACPI GPE0 Enable");
    1914     R (GPE0_BLK,       L, acpiGpe0StsWrite,      acpiGpe0StsRead,     "ACPI GPE0 Status");
    1915     R (ACPI_RESET_BLK, 1, acpiResetWrite,        NULL,                "ACPI Reset");
     1927    R(BAT_INDEX,      1, acpiBatIndexWrite,     NULL,                "ACPI Battery status index");
     1928    R(BAT_DATA,       1, NULL,                  acpiBatDataRead,     "ACPI Battery status data");
     1929    R(SYSI_INDEX,     1, acpiSysInfoIndexWrite, NULL,                "ACPI system info index");
     1930    R(SYSI_DATA,      1, acpiSysInfoDataWrite,  acpiSysInfoDataRead, "ACPI system info data");
     1931    R(GPE0_BLK + L,   L, acpiGpe0EnWrite,       acpiGpe0EnRead,      "ACPI GPE0 Enable");
     1932    R(GPE0_BLK,       L, acpiGpe0StsWrite,      acpiGpe0StsRead,     "ACPI GPE0 Status");
     1933    R(ACPI_RESET_BLK, 1, acpiResetWrite,        NULL,                "ACPI Reset");
    19161934#undef L
    19171935#undef R
     
    19201938    if (fGCEnabled)
    19211939    {
    1922         rc = PDMDevHlpIOPortRegisterGC (pDevIns, PM_TMR_BLK, 1, 0, NULL, "acpiPMTmrRead",
    1923                                         NULL, NULL, "ACPI PM Timer");
     1940        rc = PDMDevHlpIOPortRegisterGC(pDevIns, PM_TMR_BLK, 1, 0, NULL, "acpiPMTmrRead",
     1941                                       NULL, NULL, "ACPI PM Timer");
    19241942        AssertRCReturn(rc, rc);
    19251943    }
     
    19281946    if (fR0Enabled)
    19291947    {
    1930         rc = PDMDevHlpIOPortRegisterR0 (pDevIns, PM_TMR_BLK, 1, 0, NULL, "acpiPMTmrRead",
    1931                                         NULL, NULL, "ACPI PM Timer");
     1948        rc = PDMDevHlpIOPortRegisterR0(pDevIns, PM_TMR_BLK, 1, 0, NULL, "acpiPMTmrRead",
     1949                                       NULL, NULL, "ACPI PM Timer");
    19321950        AssertRCReturn(rc, rc);
    19331951    }
    19341952
    1935     rc = PDMDevHlpTMTimerCreate (pDevIns, TMCLOCK_VIRTUAL_SYNC, acpiTimer, "ACPI Timer", &s->tsR3);
     1953    rc = PDMDevHlpTMTimerCreate(pDevIns, TMCLOCK_VIRTUAL_SYNC, acpiTimer, "ACPI Timer", &s->tsR3);
    19361954    if (RT_FAILURE(rc))
    19371955    {
     
    19401958    }
    19411959
    1942     s->tsR0 = TMTimerR0Ptr (s->tsR3);
    1943     s->tsRC = TMTimerRCPtr (s->tsR3);
    1944     s->pm_timer_initial = TMTimerGet (s->tsR3);
    1945     acpiPMTimerReset (s);
     1960    s->tsR0 = TMTimerR0Ptr(s->tsR3);
     1961    s->tsRC = TMTimerRCPtr(s->tsR3);
     1962    s->pm_timer_initial = TMTimerGet(s->tsR3);
     1963    acpiPMTimerReset(s);
    19461964
    19471965    dev = &s->dev;
     
    19711989    dev->config[0x3c] = SCI_INT;
    19721990
    1973     rc = PDMDevHlpPCIRegister (pDevIns, dev);
    1974     if (RT_FAILURE (rc))
     1991    rc = PDMDevHlpPCIRegister(pDevIns, dev);
     1992    if (RT_FAILURE(rc))
    19751993        return rc;
    19761994
    1977     rc = PDMDevHlpSSMRegister (pDevIns, pDevIns->pDevReg->szDeviceName, iInstance, 4, sizeof(*s),
    1978                                NULL, acpi_save_state, NULL, NULL, acpi_load_state,  NULL);
     1995    rc = PDMDevHlpSSMRegister(pDevIns, pDevIns->pDevReg->szDeviceName, iInstance, 4, sizeof(*s),
     1996                              NULL, acpi_save_state, NULL, NULL, acpi_load_state,  NULL);
    19791997    if (RT_FAILURE(rc))
    19801998        return rc;
     
    19942012    * Get the corresponding connector interface
    19952013    */
    1996    rc = PDMDevHlpDriverAttach (pDevIns, 0, &s->IBase, &s->pDrvBase, "ACPI Driver Port");
    1997    if (RT_SUCCESS (rc))
     2014   rc = PDMDevHlpDriverAttach(pDevIns, 0, &s->IBase, &s->pDrvBase, "ACPI Driver Port");
     2015   if (RT_SUCCESS(rc))
    19982016   {
    1999        s->pDrv = (PPDMIACPICONNECTOR)s->pDrvBase->pfnQueryInterface (s->pDrvBase,
    2000                                                                      PDMINTERFACE_ACPI_CONNECTOR);
     2017       s->pDrv = (PPDMIACPICONNECTOR)s->pDrvBase->pfnQueryInterface(s->pDrvBase, PDMINTERFACE_ACPI_CONNECTOR);
    20012018       if (!s->pDrv)
    20022019           return PDMDEV_SET_ERROR(pDevIns, VERR_PDM_MISSING_INTERFACE,
     
    20052022   else if (rc == VERR_PDM_NO_ATTACHED_DRIVER)
    20062023   {
    2007        Log (("acpi: %s/%d: warning: no driver attached to LUN #0!\n",
    2008                    pDevIns->pDevReg->szDeviceName, pDevIns->iInstance));
     2024       Log(("acpi: %s/%d: warning: no driver attached to LUN #0!\n",
     2025            pDevIns->pDevReg->szDeviceName, pDevIns->iInstance));
    20092026       rc = VINF_SUCCESS;
    20102027   }
    20112028   else
    2012        return PDMDEV_SET_ERROR(pDevIns, rc,
    2013                                N_("Failed to attach LUN #0"));
     2029       return PDMDEV_SET_ERROR(pDevIns, rc, N_("Failed to attach LUN #0"));
    20142030
    20152031    return rc;
     
    20192035 * Relocates the GC pointer members.
    20202036 */
    2021 static DECLCALLBACK(void) acpiRelocate (PPDMDEVINS pDevIns, RTGCINTPTR offDelta)
    2022 {
    2023     ACPIState *s = PDMINS_2_DATA (pDevIns, ACPIState *);
    2024     s->tsRC = TMTimerRCPtr (s->CTX_SUFF(ts));
    2025 }
    2026 
    2027 static DECLCALLBACK(void) acpiReset (PPDMDEVINS pDevIns)
    2028 {
    2029     ACPIState *s = PDMINS_2_DATA (pDevIns, ACPIState *);
     2037static DECLCALLBACK(void) acpiRelocate(PPDMDEVINS pDevIns, RTGCINTPTR offDelta)
     2038{
     2039    ACPIState *s = PDMINS_2_DATA(pDevIns, ACPIState *);
     2040    s->tsRC = TMTimerRCPtr(s->CTX_SUFF(ts));
     2041}
     2042
     2043static DECLCALLBACK(void) acpiReset(PPDMDEVINS pDevIns)
     2044{
     2045    ACPIState *s = PDMINS_2_DATA(pDevIns, ACPIState *);
    20302046
    20312047    s->pm1a_en           = 0;
    20322048    s->pm1a_sts          = 0;
    20332049    s->pm1a_ctl          = 0;
    2034     s->pm_timer_initial  = TMTimerGet (s->CTX_SUFF(ts));
     2050    s->pm_timer_initial  = TMTimerGet(s->CTX_SUFF(ts));
    20352051    acpiPMTimerReset(s);
    20362052    s->uBatteryIndex     = 0;
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette