interrupts.hh revision 3827
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" 353827Shsul@eecs.umich.edu#include "cpu/thread_context.hh" 363827Shsul@eecs.umich.edu 373537Sgblack@eecs.umich.edu 383537Sgblack@eecs.umich.edunamespace SparcISA 393537Sgblack@eecs.umich.edu{ 403537Sgblack@eecs.umich.edu class Interrupts 413537Sgblack@eecs.umich.edu { 423537Sgblack@eecs.umich.edu protected: 433827Shsul@eecs.umich.edu 443537Sgblack@eecs.umich.edu 453537Sgblack@eecs.umich.edu public: 463537Sgblack@eecs.umich.edu Interrupts() 473537Sgblack@eecs.umich.edu { 483827Shsul@eecs.umich.edu 493537Sgblack@eecs.umich.edu } 503537Sgblack@eecs.umich.edu void post(int int_num, int index) 513537Sgblack@eecs.umich.edu { 523537Sgblack@eecs.umich.edu 533537Sgblack@eecs.umich.edu } 543537Sgblack@eecs.umich.edu 553537Sgblack@eecs.umich.edu void clear(int int_num, int index) 563537Sgblack@eecs.umich.edu { 573827Shsul@eecs.umich.edu 583537Sgblack@eecs.umich.edu } 593537Sgblack@eecs.umich.edu 603537Sgblack@eecs.umich.edu void clear_all() 613537Sgblack@eecs.umich.edu { 623827Shsul@eecs.umich.edu 633537Sgblack@eecs.umich.edu } 643537Sgblack@eecs.umich.edu 653537Sgblack@eecs.umich.edu bool check_interrupts(ThreadContext * tc) const 663537Sgblack@eecs.umich.edu { 673827Shsul@eecs.umich.edu // so far only handle softint interrupts 683827Shsul@eecs.umich.edu int int_level = InterruptLevel(tc->readMiscReg(MISCREG_SOFTINT)); 693827Shsul@eecs.umich.edu if (int_level) 703827Shsul@eecs.umich.edu return true; 713827Shsul@eecs.umich.edu else 723827Shsul@eecs.umich.edu return false; 733537Sgblack@eecs.umich.edu } 743537Sgblack@eecs.umich.edu 753537Sgblack@eecs.umich.edu Fault getInterrupt(ThreadContext * tc) 763537Sgblack@eecs.umich.edu { 773827Shsul@eecs.umich.edu // conditioning the softint interrups 783827Shsul@eecs.umich.edu if (tc->readMiscReg(MISCREG_HPSTATE) & hpriv) { 793827Shsul@eecs.umich.edu // if running in privileged mode, then pend the interrupt 803827Shsul@eecs.umich.edu return NoFault; 813827Shsul@eecs.umich.edu } else { 823827Shsul@eecs.umich.edu int int_level = InterruptLevel(tc->readMiscReg(MISCREG_SOFTINT)); 833827Shsul@eecs.umich.edu if ((int_level <= tc->readMiscReg(MISCREG_PIL)) || 843827Shsul@eecs.umich.edu !(tc->readMiscReg(MISCREG_PSTATE) & ie)) { 853827Shsul@eecs.umich.edu // if PIL or no interrupt enabled, then pend the interrupt 863827Shsul@eecs.umich.edu return NoFault; 873827Shsul@eecs.umich.edu } else { 883827Shsul@eecs.umich.edu return new InterruptLevelN(int_level); 893827Shsul@eecs.umich.edu } 903827Shsul@eecs.umich.edu } 913537Sgblack@eecs.umich.edu } 923537Sgblack@eecs.umich.edu 933654Shsul@eecs.umich.edu void updateIntrInfo(ThreadContext * tc) 943654Shsul@eecs.umich.edu { 953654Shsul@eecs.umich.edu 963654Shsul@eecs.umich.edu } 973654Shsul@eecs.umich.edu 983537Sgblack@eecs.umich.edu void serialize(std::ostream &os) 993537Sgblack@eecs.umich.edu { 1003537Sgblack@eecs.umich.edu } 1013537Sgblack@eecs.umich.edu 1023537Sgblack@eecs.umich.edu void unserialize(Checkpoint *cp, const std::string §ion) 1033537Sgblack@eecs.umich.edu { 1043537Sgblack@eecs.umich.edu } 1053537Sgblack@eecs.umich.edu }; 1063537Sgblack@eecs.umich.edu} 1073537Sgblack@eecs.umich.edu 1083537Sgblack@eecs.umich.edu#endif // __ARCH_SPARC_INTERRUPT_HH__ 109