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