Changeset 40956 in vbox
- Timestamp:
- Apr 16, 2012 10:58:48 PM (12 years ago)
- Location:
- trunk
- Files:
-
- 7 edited
-
include/VBox/vmm/pdmdev.h (modified) (5 diffs)
-
src/VBox/Devices/PC/DevAPIC.cpp (modified) (3 diffs)
-
src/VBox/Devices/PC/DevApic.h (modified) (1 diff)
-
src/VBox/Devices/PC/DevIoApic.cpp (modified) (4 diffs)
-
src/VBox/VMM/VMMR0/PDMR0Device.cpp (modified) (2 diffs)
-
src/VBox/VMM/VMMR3/PDMDevMiscHlp.cpp (modified) (1 diff)
-
src/VBox/VMM/VMMRC/PDMRCDevice.cpp (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/vmm/pdmdev.h
r40937 r40956 1299 1299 1300 1300 /** 1301 * Calculates an IRQ tag for a timer, IPI or similar event. 1302 * 1303 * @returns The IRQ tag. 1304 * @param pDevIns Device instance of the APIC. 1305 * @param u8Level PDM_IRQ_LEVEL_HIGH or PDM_IRQ_LEVEL_FLIP_FLOP. 1306 */ 1307 DECLRCCALLBACKMEMBER(uint32_t, pfnCalcIrqTag,(PPDMDEVINS pDevIns, uint8_t u8Level)); 1308 1309 /** 1301 1310 * Modifies APIC-related bits in the CPUID feature mask. 1302 1311 * … … 1339 1348 1340 1349 /** Current PDMAPICHLPRC version number. */ 1341 #define PDM_APICHLPRC_VERSION PDM_VERSION_MAKE(0xfff5, 1, 0)1350 #define PDM_APICHLPRC_VERSION PDM_VERSION_MAKE(0xfff5, 2, 0) 1342 1351 1343 1352 … … 1367 1376 */ 1368 1377 DECLR0CALLBACKMEMBER(void, pfnClearInterruptFF,(PPDMDEVINS pDevIns, PDMAPICIRQ enmType, VMCPUID idCpu)); 1378 1379 /** 1380 * Calculates an IRQ tag for a timer, IPI or similar event. 1381 * 1382 * @returns The IRQ tag. 1383 * @param pDevIns Device instance of the APIC. 1384 * @param u8Level PDM_IRQ_LEVEL_HIGH or PDM_IRQ_LEVEL_FLIP_FLOP. 1385 */ 1386 DECLR0CALLBACKMEMBER(uint32_t, pfnCalcIrqTag,(PPDMDEVINS pDevIns, uint8_t u8Level)); 1369 1387 1370 1388 /** … … 1409 1427 1410 1428 /** Current PDMAPICHLPR0 version number. */ 1411 #define PDM_APICHLPR0_VERSION PDM_VERSION_MAKE(0xfff4, 1, 0)1429 #define PDM_APICHLPR0_VERSION PDM_VERSION_MAKE(0xfff4, 2, 0) 1412 1430 1413 1431 /** … … 1438 1456 1439 1457 /** 1440 * Calculates an IRQ tag for a timer event.1458 * Calculates an IRQ tag for a timer, IPI or similar event. 1441 1459 * 1442 1460 * @returns The IRQ tag. 1443 * @param pDevIns Device instance of the APIC. 1444 */ 1445 DECLR3CALLBACKMEMBER(uint32_t, pfnCalcIrqTag,(PPDMDEVINS pDevIns)); 1461 * @param pDevIns Device instance of the APIC. 1462 * @param u8Level PDM_IRQ_LEVEL_HIGH or PDM_IRQ_LEVEL_FLIP_FLOP. 1463 */ 1464 DECLR3CALLBACKMEMBER(uint32_t, pfnCalcIrqTag,(PPDMDEVINS pDevIns, uint8_t u8Level)); 1446 1465 1447 1466 /** -
trunk/src/VBox/Devices/PC/DevAPIC.cpp
r40937 r40956 836 836 0 /* Polarity - conform to the bus */, 837 837 0 /* Trigger mode - edge */, 838 0 /*uTagSrc*/);838 pDev->CTX_SUFF(pApicHlp)->pfnCalcIrqTag(pDev->CTX_SUFF(pDevIns), PDM_IRQ_LEVEL_HIGH)); 839 839 APIC_UNLOCK(pDev); 840 840 break; … … 1433 1433 1434 1434 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)); 1436 1437 } 1437 1438 … … 1700 1701 LogFlow(("apic_timer: trigger irq\n")); 1701 1702 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)); 1703 1704 1704 1705 if ( (pApic->lvt[APIC_LVT_TIMER] & APIC_LVT_TIMER_PERIODIC) -
trunk/src/VBox/Devices/PC/DevApic.h
r37481 r40956 5 5 6 6 /* 7 * Copyright (C) 2006-201 1Oracle Corporation7 * Copyright (C) 2006-2012 Oracle Corporation 8 8 * 9 9 * This file is part of VirtualBox Open Source Edition (OSE), as -
trunk/src/VBox/Devices/PC/DevIoApic.cpp
r40944 r40956 149 149 delivery_mode = (entry >> 8) & 7; 150 150 polarity = (entry >> 13) & 1; 151 uint32_t uTagSrc = pThis->auTagSrc[i]; 151 152 if (trig_mode == APIC_TRIGGER_EDGE) 153 { 154 pThis->auTagSrc[i] = 0; 152 155 pThis->irr &= ~mask; 156 } 153 157 if (delivery_mode == APIC_DM_EXTINT) 154 158 /* malc: i'm still not so sure about ExtINT delivery */ … … 159 163 else 160 164 vector = entry & 0xff; 161 uint32_t uTagSrc = pThis->auTagSrc[i];162 pThis->auTagSrc[i] = 0;163 165 164 166 int rc = pThis->CTX_SUFF(pIoApicHlp)->pfnApicBusDeliver(pThis->CTX_SUFF(pDevIns), … … 202 204 203 205 if ((level & PDM_IRQ_LEVEL_FLIP_FLOP) == PDM_IRQ_LEVEL_FLIP_FLOP) 206 { 204 207 pThis->irr &= ~mask; 208 pThis->auTagSrc[vector] = 0; 209 } 205 210 } 206 211 else 212 { 207 213 pThis->irr &= ~mask; 214 pThis->auTagSrc[vector] = 0; 215 } 208 216 } 209 217 else … … 526 534 pThis->irr = 0; 527 535 for (unsigned i = 0; i < IOAPIC_NUM_PINS; i++) 536 { 528 537 pThis->ioredtbl[i] = 1 << 16; /* mask LVT */ 538 pThis->auTagSrc[i] = 0; 539 } 529 540 530 541 IOAPIC_UNLOCK(pThis); -
trunk/src/VBox/VMM/VMMR0/PDMR0Device.cpp
r40907 r40956 527 527 528 528 529 /** @interface_method_impl{PDMAPICHLPR0,pfnCalcIrqTag} */ 530 static DECLCALLBACK(uint32_t) pdmR0ApicHlp_CalcIrqTag(PPDMDEVINS pDevIns, uint8_t u8Level) 531 { 532 PDMDEV_ASSERT_DEVINS(pDevIns); 533 PVM pVM = pDevIns->Internal.s.pVMR0; 534 535 pdmLock(pVM); 536 537 uint32_t uTagSrc = pdmCalcIrqTag(pVM, pDevIns->idTracing); 538 if (u8Level == PDM_IRQ_LEVEL_HIGH) 539 VBOXVMM_PDM_IRQ_HIGH(VMMGetCpu(pVM), RT_LOWORD(uTagSrc), RT_HIWORD(uTagSrc)); 540 else 541 VBOXVMM_PDM_IRQ_HILO(VMMGetCpu(pVM), RT_LOWORD(uTagSrc), RT_HIWORD(uTagSrc)); 542 543 544 pdmUnlock(pVM); 545 LogFlow(("pdmR0ApicHlp_CalcIrqTag: caller=%p/%d: returns %#x (u8Level=%d)\n", 546 pDevIns, pDevIns->iInstance, uTagSrc, u8Level)); 547 return uTagSrc; 548 } 549 550 529 551 /** @interface_method_impl{PDMAPICHLPR0,pfnChangeFeature} */ 530 552 static DECLCALLBACK(void) pdmR0ApicHlp_ChangeFeature(PPDMDEVINS pDevIns, PDMAPICVERSION enmVersion) … … 584 606 pdmR0ApicHlp_SetInterruptFF, 585 607 pdmR0ApicHlp_ClearInterruptFF, 608 pdmR0ApicHlp_CalcIrqTag, 586 609 pdmR0ApicHlp_ChangeFeature, 587 610 pdmR0ApicHlp_Lock, -
trunk/src/VBox/VMM/VMMR3/PDMDevMiscHlp.cpp
r40937 r40956 240 240 241 241 /** @interface_method_impl{PDMAPICHLPR3,pfnCalcIrqTag} */ 242 static DECLCALLBACK(uint32_t) pdmR3ApicHlp_CalcIrqTag(PPDMDEVINS pDevIns) 243 { 244 PDMDEV_ASSERT_DEVINS(pDevIns); 245 PVM pVM = pDevIns->Internal.s.pVMR3; 242 static DECLCALLBACK(uint32_t) pdmR3ApicHlp_CalcIrqTag(PPDMDEVINS pDevIns, uint8_t u8Level) 243 { 244 PDMDEV_ASSERT_DEVINS(pDevIns); 245 PVM pVM = pDevIns->Internal.s.pVMR3; 246 Assert(u8Level == PDM_IRQ_LEVEL_HIGH || u8Level == PDM_IRQ_LEVEL_FLIP_FLOP); 246 247 247 248 pdmLock(pVM); 249 248 250 uint32_t uTagSrc = pdmCalcIrqTag(pVM, pDevIns->idTracing); 251 if (u8Level == PDM_IRQ_LEVEL_HIGH) 252 VBOXVMM_PDM_IRQ_HIGH(VMMGetCpu(pVM), RT_LOWORD(uTagSrc), RT_HIWORD(uTagSrc)); 253 else 254 VBOXVMM_PDM_IRQ_HILO(VMMGetCpu(pVM), RT_LOWORD(uTagSrc), RT_HIWORD(uTagSrc)); 255 256 249 257 pdmUnlock(pVM); 250 251 LogFlow(("pdmR3ApicHlp_CalcIrqTag: caller='%s'/%d: returns %#x\n", pDevIns->pReg->szName, pDevIns->iInstance, uTagSrc));258 LogFlow(("pdmR3ApicHlp_CalcIrqTag: caller='%s'/%d: returns %#x (u8Level=%d)\n", 259 pDevIns->pReg->szName, pDevIns->iInstance, uTagSrc, u8Level)); 252 260 return uTagSrc; 253 261 } -
trunk/src/VBox/VMM/VMMRC/PDMRCDevice.cpp
r40907 r40956 492 492 493 493 494 /** @interface_method_impl{PDMAPICHLPRC,pfnCalcIrqTag} */ 495 static DECLCALLBACK(uint32_t) pdmRCApicHlp_CalcIrqTag(PPDMDEVINS pDevIns, uint8_t u8Level) 496 { 497 PDMDEV_ASSERT_DEVINS(pDevIns); 498 PVM pVM = pDevIns->Internal.s.pVMRC; 499 500 pdmLock(pVM); 501 502 uint32_t uTagSrc = pdmCalcIrqTag(pVM, pDevIns->idTracing); 503 if (u8Level == PDM_IRQ_LEVEL_HIGH) 504 VBOXVMM_PDM_IRQ_HIGH(VMMGetCpu(pVM), RT_LOWORD(uTagSrc), RT_HIWORD(uTagSrc)); 505 else 506 VBOXVMM_PDM_IRQ_HILO(VMMGetCpu(pVM), RT_LOWORD(uTagSrc), RT_HIWORD(uTagSrc)); 507 508 509 pdmUnlock(pVM); 510 LogFlow(("pdmRCApicHlp_CalcIrqTag: caller=%p/%d: returns %#x (u8Level=%d)\n", 511 pDevIns, pDevIns->iInstance, uTagSrc, u8Level)); 512 return uTagSrc; 513 } 514 515 494 516 /** @interface_method_impl{PDMAPICHLPRC,pfnChangeFeature} */ 495 517 static DECLCALLBACK(void) pdmRCApicHlp_ChangeFeature(PPDMDEVINS pDevIns, PDMAPICVERSION enmVersion) … … 549 571 pdmRCApicHlp_SetInterruptFF, 550 572 pdmRCApicHlp_ClearInterruptFF, 573 pdmRCApicHlp_CalcIrqTag, 551 574 pdmRCApicHlp_ChangeFeature, 552 575 pdmRCApicHlp_Lock,
Note:
See TracChangeset
for help on using the changeset viewer.

