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 --- |