base_gic.hh revision 11943
19525SAndreas.Sandberg@ARM.com/* 211943SCurtis.Dunham@arm.com * Copyright (c) 2012-2013, 2017 ARM Limited 39525SAndreas.Sandberg@ARM.com * All rights reserved 49525SAndreas.Sandberg@ARM.com * 59525SAndreas.Sandberg@ARM.com * The license below extends only to copyright in the software and shall 69525SAndreas.Sandberg@ARM.com * not be construed as granting a license to any other intellectual 79525SAndreas.Sandberg@ARM.com * property including but not limited to intellectual property relating 89525SAndreas.Sandberg@ARM.com * to a hardware implementation of the functionality of the software 99525SAndreas.Sandberg@ARM.com * licensed hereunder. You may use the software subject to the license 109525SAndreas.Sandberg@ARM.com * terms below provided that you ensure that this notice is replicated 119525SAndreas.Sandberg@ARM.com * unmodified and in its entirety in all distributions of the software, 129525SAndreas.Sandberg@ARM.com * modified or unmodified, in source code or in binary form. 139525SAndreas.Sandberg@ARM.com * 149525SAndreas.Sandberg@ARM.com * Redistribution and use in source and binary forms, with or without 159525SAndreas.Sandberg@ARM.com * modification, are permitted provided that the following conditions are 169525SAndreas.Sandberg@ARM.com * met: redistributions of source code must retain the above copyright 179525SAndreas.Sandberg@ARM.com * notice, this list of conditions and the following disclaimer; 189525SAndreas.Sandberg@ARM.com * redistributions in binary form must reproduce the above copyright 199525SAndreas.Sandberg@ARM.com * notice, this list of conditions and the following disclaimer in the 209525SAndreas.Sandberg@ARM.com * documentation and/or other materials provided with the distribution; 219525SAndreas.Sandberg@ARM.com * neither the name of the copyright holders nor the names of its 229525SAndreas.Sandberg@ARM.com * contributors may be used to endorse or promote products derived from 239525SAndreas.Sandberg@ARM.com * this software without specific prior written permission. 249525SAndreas.Sandberg@ARM.com * 259525SAndreas.Sandberg@ARM.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 269525SAndreas.Sandberg@ARM.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 279525SAndreas.Sandberg@ARM.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 289525SAndreas.Sandberg@ARM.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 299525SAndreas.Sandberg@ARM.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 309525SAndreas.Sandberg@ARM.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 319525SAndreas.Sandberg@ARM.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 329525SAndreas.Sandberg@ARM.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 339525SAndreas.Sandberg@ARM.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 349525SAndreas.Sandberg@ARM.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 359525SAndreas.Sandberg@ARM.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 369525SAndreas.Sandberg@ARM.com * 379525SAndreas.Sandberg@ARM.com * Authors: Andreas Sandberg 389525SAndreas.Sandberg@ARM.com */ 399525SAndreas.Sandberg@ARM.com 409525SAndreas.Sandberg@ARM.com/** @file 419525SAndreas.Sandberg@ARM.com * Base class for ARM GIC implementations 429525SAndreas.Sandberg@ARM.com */ 439525SAndreas.Sandberg@ARM.com 449525SAndreas.Sandberg@ARM.com#ifndef __DEV_ARM_BASE_GIC_H__ 459525SAndreas.Sandberg@ARM.com#define __DEV_ARM_BASE_GIC_H__ 469525SAndreas.Sandberg@ARM.com 479525SAndreas.Sandberg@ARM.com#include "dev/io_device.hh" 489525SAndreas.Sandberg@ARM.com 499525SAndreas.Sandberg@ARM.comclass Platform; 509525SAndreas.Sandberg@ARM.com 519525SAndreas.Sandberg@ARM.comclass BaseGic : public PioDevice 529525SAndreas.Sandberg@ARM.com{ 539525SAndreas.Sandberg@ARM.com public: 549525SAndreas.Sandberg@ARM.com typedef struct BaseGicParams Params; 559525SAndreas.Sandberg@ARM.com 569525SAndreas.Sandberg@ARM.com BaseGic(const Params *p); 579525SAndreas.Sandberg@ARM.com virtual ~BaseGic(); 589525SAndreas.Sandberg@ARM.com 599525SAndreas.Sandberg@ARM.com const Params * params() const; 609525SAndreas.Sandberg@ARM.com 619525SAndreas.Sandberg@ARM.com /** 629525SAndreas.Sandberg@ARM.com * Post an interrupt from a device that is connected to the GIC. 639525SAndreas.Sandberg@ARM.com * 649525SAndreas.Sandberg@ARM.com * Depending on the configuration, the GIC will pass this interrupt 659525SAndreas.Sandberg@ARM.com * on through to a CPU. 669525SAndreas.Sandberg@ARM.com * 679525SAndreas.Sandberg@ARM.com * @param num number of interrupt to send 689525SAndreas.Sandberg@ARM.com */ 699525SAndreas.Sandberg@ARM.com virtual void sendInt(uint32_t num) = 0; 709525SAndreas.Sandberg@ARM.com 719525SAndreas.Sandberg@ARM.com /** 729525SAndreas.Sandberg@ARM.com * Interface call for private peripheral interrupts. 739525SAndreas.Sandberg@ARM.com * 749525SAndreas.Sandberg@ARM.com * @param num number of interrupt to send 759525SAndreas.Sandberg@ARM.com * @param cpu CPU to forward interrupt to 769525SAndreas.Sandberg@ARM.com */ 779525SAndreas.Sandberg@ARM.com virtual void sendPPInt(uint32_t num, uint32_t cpu) = 0; 789942Smatt.evans@arm.com virtual void clearPPInt(uint32_t num, uint32_t cpu) = 0; 799525SAndreas.Sandberg@ARM.com 809525SAndreas.Sandberg@ARM.com /** 819525SAndreas.Sandberg@ARM.com * Clear an interrupt from a device that is connected to the GIC. 829525SAndreas.Sandberg@ARM.com * 839525SAndreas.Sandberg@ARM.com * Depending on the configuration, the GIC may de-assert it's CPU 849525SAndreas.Sandberg@ARM.com * line. 859525SAndreas.Sandberg@ARM.com * 869525SAndreas.Sandberg@ARM.com * @param num number of interrupt to send 879525SAndreas.Sandberg@ARM.com */ 889525SAndreas.Sandberg@ARM.com virtual void clearInt(uint32_t num) = 0; 899525SAndreas.Sandberg@ARM.com 909525SAndreas.Sandberg@ARM.com protected: 919525SAndreas.Sandberg@ARM.com /** Platform this GIC belongs to. */ 929525SAndreas.Sandberg@ARM.com Platform *platform; 939525SAndreas.Sandberg@ARM.com}; 949525SAndreas.Sandberg@ARM.com 9511943SCurtis.Dunham@arm.comclass BaseGicRegisters 9611943SCurtis.Dunham@arm.com{ 9711943SCurtis.Dunham@arm.com public: 9811943SCurtis.Dunham@arm.com virtual uint32_t readDistributor(ContextID ctx, Addr daddr) = 0; 9911943SCurtis.Dunham@arm.com virtual uint32_t readCpu(ContextID ctx, Addr daddr) = 0; 10011943SCurtis.Dunham@arm.com 10111943SCurtis.Dunham@arm.com virtual void writeDistributor(ContextID ctx, Addr daddr, 10211943SCurtis.Dunham@arm.com uint32_t data) = 0; 10311943SCurtis.Dunham@arm.com virtual void writeCpu(ContextID ctx, Addr daddr, uint32_t data) = 0; 10411943SCurtis.Dunham@arm.com}; 10511943SCurtis.Dunham@arm.com 1069525SAndreas.Sandberg@ARM.com#endif 107