interrupts.hh revision 3537
13537Sgblack@eecs.umich.edu/* 23537Sgblack@eecs.umich.edu * Copyright (c) 2006 The Regents of The University of Michigan 33537Sgblack@eecs.umich.edu * All rights reserved. 43537Sgblack@eecs.umich.edu * 53537Sgblack@eecs.umich.edu * Redistribution and use in source and binary forms, with or without 63537Sgblack@eecs.umich.edu * modification, are permitted provided that the following conditions are 73537Sgblack@eecs.umich.edu * met: redistributions of source code must retain the above copyright 83537Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer; 93537Sgblack@eecs.umich.edu * redistributions in binary form must reproduce the above copyright 103537Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the 113537Sgblack@eecs.umich.edu * documentation and/or other materials provided with the distribution; 123537Sgblack@eecs.umich.edu * neither the name of the copyright holders nor the names of its 133537Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from 143537Sgblack@eecs.umich.edu * this software without specific prior written permission. 153537Sgblack@eecs.umich.edu * 163537Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 173537Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 183537Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 193537Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 203537Sgblack@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 213537Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 223537Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 233537Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 243537Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 253537Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 263537Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 273537Sgblack@eecs.umich.edu * 283537Sgblack@eecs.umich.edu * Authors: Gabe Black 293537Sgblack@eecs.umich.edu */ 303537Sgblack@eecs.umich.edu 313537Sgblack@eecs.umich.edu#ifndef __ARCH_SPARC_INTERRUPT_HH__ 323537Sgblack@eecs.umich.edu#define __ARCH_SPARC_INTERRUPT_HH__ 333537Sgblack@eecs.umich.edu 343537Sgblack@eecs.umich.edu#include "arch/sparc/faults.hh" 353537Sgblack@eecs.umich.edu 363537Sgblack@eecs.umich.edunamespace SparcISA 373537Sgblack@eecs.umich.edu{ 383537Sgblack@eecs.umich.edu class Interrupts 393537Sgblack@eecs.umich.edu { 403537Sgblack@eecs.umich.edu protected: 413537Sgblack@eecs.umich.edu Fault interrupts[NumInterruptLevels]; 423537Sgblack@eecs.umich.edu bool requested[NumInterruptLevels]; 433537Sgblack@eecs.umich.edu 443537Sgblack@eecs.umich.edu public: 453537Sgblack@eecs.umich.edu Interrupts() 463537Sgblack@eecs.umich.edu { 473537Sgblack@eecs.umich.edu for(int x = 0; x < NumInterruptLevels; x++) 483537Sgblack@eecs.umich.edu { 493537Sgblack@eecs.umich.edu interrupts[x] = new InterruptLevelN(x); 503537Sgblack@eecs.umich.edu requested[x] = false; 513537Sgblack@eecs.umich.edu } 523537Sgblack@eecs.umich.edu } 533537Sgblack@eecs.umich.edu void post(int int_num, int index) 543537Sgblack@eecs.umich.edu { 553537Sgblack@eecs.umich.edu if(int_num < 0 || int_num >= NumInterruptLevels) 563537Sgblack@eecs.umich.edu panic("int_num out of bounds\n"); 573537Sgblack@eecs.umich.edu 583537Sgblack@eecs.umich.edu requested[int_num] = true; 593537Sgblack@eecs.umich.edu } 603537Sgblack@eecs.umich.edu 613537Sgblack@eecs.umich.edu void clear(int int_num, int index) 623537Sgblack@eecs.umich.edu { 633537Sgblack@eecs.umich.edu requested[int_num] = false; 643537Sgblack@eecs.umich.edu } 653537Sgblack@eecs.umich.edu 663537Sgblack@eecs.umich.edu void clear_all() 673537Sgblack@eecs.umich.edu { 683537Sgblack@eecs.umich.edu for(int x = 0; x < NumInterruptLevels; x++) 693537Sgblack@eecs.umich.edu requested[x] = false; 703537Sgblack@eecs.umich.edu } 713537Sgblack@eecs.umich.edu 723537Sgblack@eecs.umich.edu bool check_interrupts(ThreadContext * tc) const 733537Sgblack@eecs.umich.edu { 743537Sgblack@eecs.umich.edu return true; 753537Sgblack@eecs.umich.edu } 763537Sgblack@eecs.umich.edu 773537Sgblack@eecs.umich.edu Fault getInterrupt(ThreadContext * tc) 783537Sgblack@eecs.umich.edu { 793537Sgblack@eecs.umich.edu return NoFault; 803537Sgblack@eecs.umich.edu } 813537Sgblack@eecs.umich.edu 823537Sgblack@eecs.umich.edu void serialize(std::ostream &os) 833537Sgblack@eecs.umich.edu { 843537Sgblack@eecs.umich.edu } 853537Sgblack@eecs.umich.edu 863537Sgblack@eecs.umich.edu void unserialize(Checkpoint *cp, const std::string §ion) 873537Sgblack@eecs.umich.edu { 883537Sgblack@eecs.umich.edu } 893537Sgblack@eecs.umich.edu }; 903537Sgblack@eecs.umich.edu} 913537Sgblack@eecs.umich.edu 923537Sgblack@eecs.umich.edu#endif // __ARCH_SPARC_INTERRUPT_HH__ 93