i82094aa.cc (5898:541097c69e22) i82094aa.cc (6045:214461cb8abe)
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;

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

157 message.vector = extIntPic->getVector();
158 } else {
159 message.vector = entry.vector;
160 }
161 message.deliveryMode = entry.deliveryMode;
162 message.destMode = entry.destMode;
163 message.level = entry.polarity;
164 message.trigger = entry.trigger;
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;

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

157 message.vector = extIntPic->getVector();
158 } else {
159 message.vector = entry.vector;
160 }
161 message.deliveryMode = entry.deliveryMode;
162 message.destMode = entry.destMode;
163 message.level = entry.polarity;
164 message.trigger = entry.trigger;
165
166 if (DeliveryMode::isReserved(entry.deliveryMode)) {
167 fatal("Tried to use reserved delivery mode "
168 "for IO APIC entry %d.\n", line);
169 } else if (DTRACE(I82094AA)) {
170 DPRINTF(I82094AA, "Delivery mode is: %s.\n",
171 DeliveryMode::names[entry.deliveryMode]);
172 DPRINTF(I82094AA, "Vector is %#x.\n", message.vector);
173 }
174
175 if (entry.destMode == 0) {
176 DPRINTF(I82094AA,
177 "Sending interrupt to APIC ID %d.\n", entry.dest);
178 PacketPtr pkt = buildIntRequest(entry.dest, message);
179 if (sys->getMemoryMode() == Enums::timing)
180 intPort->sendMessageTiming(pkt, latency);
181 else if (sys->getMemoryMode() == Enums::atomic)
182 intPort->sendMessageAtomic(pkt);
183 else
184 panic("Unrecognized memory mode.\n");
185 } else {
186 DPRINTF(I82094AA, "Sending interrupts to APIC IDs:"
187 "%s%s%s%s%s%s%s%s\n",
188 bits((int)entry.dest, 0) ? " 0": "",
189 bits((int)entry.dest, 1) ? " 1": "",
190 bits((int)entry.dest, 2) ? " 2": "",
191 bits((int)entry.dest, 3) ? " 3": "",
192 bits((int)entry.dest, 4) ? " 4": "",
193 bits((int)entry.dest, 5) ? " 5": "",
194 bits((int)entry.dest, 6) ? " 6": "",
195 bits((int)entry.dest, 7) ? " 7": ""
196 );
197 uint8_t dests = entry.dest;
198 uint8_t id = 0;
199 while(dests) {
200 if (dests & 0x1) {
201 PacketPtr pkt = buildIntRequest(id, message);
202 if (sys->getMemoryMode() == Enums::timing)
203 intPort->sendMessageTiming(pkt, latency);
204 else if (sys->getMemoryMode() == Enums::atomic)
205 intPort->sendMessageAtomic(pkt);
206 else
207 panic("Unrecognized memory mode.\n");
208 }
209 dests >>= 1;
210 id++;
211 }
212 }
165 intPort->sendMessage(message, sys->getMemoryMode() == Enums::timing);
213 }
214}
215
216void
217X86ISA::I82094AA::raiseInterruptPin(int number)
218{
219 assert(number < TableSize);
220 if (!pinStates[number])

--- 16 unchanged lines hidden ---
166 }
167}
168
169void
170X86ISA::I82094AA::raiseInterruptPin(int number)
171{
172 assert(number < TableSize);
173 if (!pinStates[number])

--- 16 unchanged lines hidden ---