interrupts.cc (6064:46d327d42036) interrupts.cc (6065:0ad264b74ac2)
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 *

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

327 offset);
328 break;
329 }
330 pkt->makeAtomicResponse();
331 return latency;
332}
333
334
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 *

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

327 offset);
328 break;
329 }
330 pkt->makeAtomicResponse();
331 return latency;
332}
333
334
335Tick
336X86ISA::Interrupts::recvResponse(PacketPtr pkt)
337{
338 assert(!pkt->isError());
339 assert(pkt->cmd == MemCmd::MessageResp);
340 InterruptCommandRegLow low = regs[APIC_INTERRUPT_COMMAND_LOW];
341 // Record that the ICR is now idle.
342 low.deliveryStatus = 0;
343 regs[APIC_INTERRUPT_COMMAND_LOW] = low;
344 delete pkt->req;
345 delete pkt;
346 DPRINTF(LocalApic, "ICR is now idle.\n");
347 return 0;
348}
349
350
335void
336X86ISA::Interrupts::addressRanges(AddrRangeList &range_list)
337{
338 uint8_t id = (regs[APIC_ID] >> 24);
339 range_list.clear();
340 Range<Addr> range = RangeEx(x86LocalAPICAddress(id, 0),
341 x86LocalAPICAddress(id, 0) + PageBytes);
342 range_list.push_back(range);

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

470 TriggerIntMessage message;
471 message.destination = high.destination;
472 message.vector = low.vector;
473 message.deliveryMode = low.deliveryMode;
474 message.destMode = low.destMode;
475 message.level = low.level;
476 message.trigger = low.trigger;
477 bool timing = sys->getMemoryMode() == Enums::timing;
351void
352X86ISA::Interrupts::addressRanges(AddrRangeList &range_list)
353{
354 uint8_t id = (regs[APIC_ID] >> 24);
355 range_list.clear();
356 Range<Addr> range = RangeEx(x86LocalAPICAddress(id, 0),
357 x86LocalAPICAddress(id, 0) + PageBytes);
358 range_list.push_back(range);

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

486 TriggerIntMessage message;
487 message.destination = high.destination;
488 message.vector = low.vector;
489 message.deliveryMode = low.deliveryMode;
490 message.destMode = low.destMode;
491 message.level = low.level;
492 message.trigger = low.trigger;
493 bool timing = sys->getMemoryMode() == Enums::timing;
494 // Be careful no updates of the delivery status bit get lost.
495 regs[APIC_INTERRUPT_COMMAND_LOW] = low;
478 switch (low.destShorthand) {
479 case 0:
480 intPort->sendMessage(message, timing);
496 switch (low.destShorthand) {
497 case 0:
498 intPort->sendMessage(message, timing);
499 newVal = regs[APIC_INTERRUPT_COMMAND_LOW];
481 break;
482 case 1:
483 panic("Self IPIs aren't implemented.\n");
484 break;
485 case 2:
486 panic("Broadcast including self IPIs aren't implemented.\n");
487 break;
488 case 3:

--- 162 unchanged lines hidden ---
500 break;
501 case 1:
502 panic("Self IPIs aren't implemented.\n");
503 break;
504 case 2:
505 panic("Broadcast including self IPIs aren't implemented.\n");
506 break;
507 case 3:

--- 162 unchanged lines hidden ---