Deleted Added
sdiff udiff text old ( 5654:340254de2031 ) new ( 5657:7539092b28ac )
full compact
1/*
2 * Copyright (c) 2008 The Regents of The University of Michigan
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
7 * met: redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer;

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

25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 *
28 * Authors: Gabe Black
29 */
30
31#include "arch/x86/intmessage.hh"
32#include "dev/x86/i82094aa.hh"
33#include "mem/packet.hh"
34#include "mem/packet_access.hh"
35#include "sim/system.hh"
36
37X86ISA::I82094AA::I82094AA(Params *p) : PioDevice(p), IntDev(this),
38 latency(p->pio_latency), pioAddr(p->pio_addr)
39{
40 // This assumes there's only one I/O APIC in the system
41 id = sys->getNumCPUs();
42 assert(id <= 0xf);
43 arbId = id;
44 regSel = 0;
45 RedirTableEntry entry = 0;
46 entry.mask = 1;

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

140{
141 DPRINTF(I82094AA, "Received interrupt %d.\n", line);
142 assert(line < TableSize);
143 RedirTableEntry entry = redirTable[line];
144 if (entry.mask) {
145 DPRINTF(I82094AA, "Entry was masked.\n");
146 return;
147 } else {
148 if (DTRACE(I82094AA)) {
149 if (DeliveryMode::isReserved(entry.deliveryMode)) {
150 fatal("Tried to use reserved delivery mode "
151 "for IO APIC entry %d.\n", line);
152 } else {
153 DPRINTF(I82094AA, "Delivery mode is: %s.\n",
154 DeliveryMode::names[entry.deliveryMode]);
155 }
156 DPRINTF(I82094AA, "Vector is %#x.\n", entry.vector);
157 }
158
159 TriggerIntMessage message;
160 message.destination = entry.dest;
161 message.vector = entry.vector;
162 message.deliveryMode = entry.deliveryMode;
163 message.destMode = entry.destMode;
164 message.level = entry.polarity;
165 message.trigger = entry.trigger;
166
167 if (entry.destMode == 0) {
168 DPRINTF(I82094AA,
169 "Sending interrupt to APIC ID %d.\n", entry.dest);
170 PacketPtr pkt = buildIntRequest(entry.dest, message);
171 if (sys->getMemoryMode() == Enums::timing)
172 intPort->sendMessageTiming(pkt, latency);
173 else if (sys->getMemoryMode() == Enums::atomic)
174 intPort->sendMessageAtomic(pkt);

--- 38 unchanged lines hidden ---