interrupts.hh (10037:5cac77888310) interrupts.hh (10474:799c8ee4ecba)
1/*
2 * Copyright (c) 2010, 2012-2013 ARM Limited
3 * All rights reserved
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software

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

239 return NoFault;
240
241 bool take_irq = takeInt(tc, INT_IRQ);
242 bool take_fiq = takeInt(tc, INT_FIQ);
243 bool take_ea = takeInt(tc, INT_ABT);
244
245
246 if (interrupts[INT_IRQ] && take_irq)
1/*
2 * Copyright (c) 2010, 2012-2013 ARM Limited
3 * All rights reserved
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software

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

239 return NoFault;
240
241 bool take_irq = takeInt(tc, INT_IRQ);
242 bool take_fiq = takeInt(tc, INT_FIQ);
243 bool take_ea = takeInt(tc, INT_ABT);
244
245
246 if (interrupts[INT_IRQ] && take_irq)
247 return new Interrupt;
247 return std::make_shared<Interrupt>();
248 if ((interrupts[INT_VIRT_IRQ] || hcr.vi) && allowVIrq)
248 if ((interrupts[INT_VIRT_IRQ] || hcr.vi) && allowVIrq)
249 return new VirtualInterrupt;
249 return std::make_shared<VirtualInterrupt>();
250 if (interrupts[INT_FIQ] && take_fiq)
250 if (interrupts[INT_FIQ] && take_fiq)
251 return new FastInterrupt;
251 return std::make_shared<FastInterrupt>();
252 if ((interrupts[INT_VIRT_FIQ] || hcr.vf) && allowVFiq)
252 if ((interrupts[INT_VIRT_FIQ] || hcr.vf) && allowVFiq)
253 return new VirtualFastInterrupt;
253 return std::make_shared<VirtualFastInterrupt>();
254 if (interrupts[INT_ABT] && take_ea)
254 if (interrupts[INT_ABT] && take_ea)
255 return new SystemError;
255 return std::make_shared<SystemError>();
256 if (hcr.va && allowVAbort)
256 if (hcr.va && allowVAbort)
257 return new VirtualDataAbort(0, TlbEntry::DomainType::NoAccess, false,
258 ArmFault::AsynchronousExternalAbort);
257 return std::make_shared<VirtualDataAbort>(
258 0, TlbEntry::DomainType::NoAccess, false,
259 ArmFault::AsynchronousExternalAbort);
259 if (interrupts[INT_RST])
260 if (interrupts[INT_RST])
260 return new Reset;
261 return std::make_shared<Reset>();
261 if (interrupts[INT_SEV])
262 if (interrupts[INT_SEV])
262 return new ArmSev;
263 return std::make_shared<ArmSev>();
263
264 panic("intStatus and interrupts not in sync\n");
265 }
266
267 void
268 updateIntrInfo(ThreadContext *tc)
269 {
270 ; // nothing to do

--- 19 unchanged lines hidden ---
264
265 panic("intStatus and interrupts not in sync\n");
266 }
267
268 void
269 updateIntrInfo(ThreadContext *tc)
270 {
271 ; // nothing to do

--- 19 unchanged lines hidden ---