VirtualBox

Changeset 40956 in vbox for trunk/src/VBox/Devices/PC


Ignore:
Timestamp:
Apr 16, 2012 10:58:48 PM (13 years ago)
Author:
vboxsync
Message:

PDM,APIC,IO-APIC: More IRQ tagging.

Location:
trunk/src/VBox/Devices/PC
Files:
3 edited

Legend:

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

    r40937 r40956  
    836836                                      0 /* Polarity - conform to the bus */,
    837837                                      0 /* Trigger mode - edge */,
    838                                       0 /*uTagSrc*/);
     838                                      pDev->CTX_SUFF(pApicHlp)->pfnCalcIrqTag(pDev->CTX_SUFF(pDevIns), PDM_IRQ_LEVEL_HIGH));
    839839                APIC_UNLOCK(pDev);
    840840                break;
     
    14331433
    14341434    return apic_bus_deliver(pDev, &DstSet, delivery_mode, vector_num,
    1435                             polarity, trigger_mode, 0 /* uTagSrc*/);
     1435                            polarity, trigger_mode,
     1436                            pDev->CTX_SUFF(pApicHlp)->pfnCalcIrqTag(pDev->CTX_SUFF(pDevIns), PDM_IRQ_LEVEL_HIGH));
    14361437}
    14371438
     
    17001701        LogFlow(("apic_timer: trigger irq\n"));
    17011702        apic_set_irq(pDev, pApic, pApic->lvt[APIC_LVT_TIMER] & 0xff, APIC_TRIGGER_EDGE,
    1702                      pDev->CTX_SUFF(pApicHlp)->pfnCalcIrqTag(pDevIns));
     1703                     pDev->CTX_SUFF(pApicHlp)->pfnCalcIrqTag(pDevIns, PDM_IRQ_LEVEL_HIGH));
    17031704
    17041705        if (   (pApic->lvt[APIC_LVT_TIMER] & APIC_LVT_TIMER_PERIODIC)
  • trunk/src/VBox/Devices/PC/DevApic.h

    r37481 r40956  
    55
    66/*
    7  * Copyright (C) 2006-2011 Oracle Corporation
     7 * Copyright (C) 2006-2012 Oracle Corporation
    88 *
    99 * This file is part of VirtualBox Open Source Edition (OSE), as
  • trunk/src/VBox/Devices/PC/DevIoApic.cpp

    r40944 r40956  
    149149                delivery_mode = (entry >> 8) & 7;
    150150                polarity = (entry >> 13) & 1;
     151                uint32_t uTagSrc = pThis->auTagSrc[i];
    151152                if (trig_mode == APIC_TRIGGER_EDGE)
     153                {
     154                    pThis->auTagSrc[i] = 0;
    152155                    pThis->irr &= ~mask;
     156                }
    153157                if (delivery_mode == APIC_DM_EXTINT)
    154158                    /* malc: i'm still not so sure about ExtINT delivery */
     
    159163                else
    160164                    vector = entry & 0xff;
    161                 uint32_t uTagSrc = pThis->auTagSrc[i];
    162                 pThis->auTagSrc[i] = 0;
    163165
    164166                int rc = pThis->CTX_SUFF(pIoApicHlp)->pfnApicBusDeliver(pThis->CTX_SUFF(pDevIns),
     
    202204
    203205                if ((level & PDM_IRQ_LEVEL_FLIP_FLOP) == PDM_IRQ_LEVEL_FLIP_FLOP)
     206                {
    204207                    pThis->irr &= ~mask;
     208                    pThis->auTagSrc[vector] = 0;
     209                }
    205210            }
    206211            else
     212            {
    207213                pThis->irr &= ~mask;
     214                pThis->auTagSrc[vector] = 0;
     215            }
    208216        }
    209217        else
     
    526534    pThis->irr      = 0;
    527535    for (unsigned i = 0; i < IOAPIC_NUM_PINS; i++)
     536    {
    528537        pThis->ioredtbl[i] = 1 << 16; /* mask LVT */
     538        pThis->auTagSrc[i] = 0;
     539    }
    529540
    530541    IOAPIC_UNLOCK(pThis);
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