Deleted Added
sdiff udiff text old ( 6137:d3ee4e0d690c ) new ( 6138:6cbdd76b93db )
full compact
1/*
2 * Copyright (c) 2008 The Hewlett-Packard Development Company
3 * All rights reserved.
4 *
5 * Redistribution and use of this software in source and binary forms,
6 * with or without modification, are permitted provided that the
7 * following conditions are met:
8 *

--- 496 unchanged lines hidden (view full) ---

505 message.vector = low.vector;
506 message.deliveryMode = low.deliveryMode;
507 message.destMode = low.destMode;
508 message.level = low.level;
509 message.trigger = low.trigger;
510 bool timing = sys->getMemoryMode() == Enums::timing;
511 // Be careful no updates of the delivery status bit get lost.
512 regs[APIC_INTERRUPT_COMMAND_LOW] = low;
513 switch (low.destShorthand) {
514 case 0:
515 pendingIPIs++;
516 intPort->sendMessage(message, timing);
517 newVal = regs[APIC_INTERRUPT_COMMAND_LOW];
518 break;
519 case 1:
520 newVal = val;
521 requestInterrupt(message.vector,
522 message.deliveryMode, message.trigger);
523 break;
524 case 2:
525 requestInterrupt(message.vector,
526 message.deliveryMode, message.trigger);
527 // Fall through
528 case 3:
529 {
530 int numContexts = sys->numContexts();
531 pendingIPIs += (numContexts - 1);
532 for (int i = 0; i < numContexts; i++) {
533 int thisId = sys->getThreadContext(i)->contextId();
534 if (thisId != initialApicId) {
535 PacketPtr pkt = buildIntRequest(thisId, message);
536 if (timing)
537 intPort->sendMessageTiming(pkt, latency);
538 else
539 intPort->sendMessageAtomic(pkt);
540 }
541 }
542 }
543 newVal = regs[APIC_INTERRUPT_COMMAND_LOW];
544 break;
545 }
546 }
547 break;
548 case APIC_LVT_TIMER:
549 case APIC_LVT_THERMAL_SENSOR:
550 case APIC_LVT_PERFORMANCE_MONITORING_COUNTERS:
551 case APIC_LVT_LINT0:
552 case APIC_LVT_LINT1:
553 case APIC_LVT_ERROR:

--- 154 unchanged lines hidden ---