/* * \brief Programmable interrupt controller for core * \author Stefan Kalkowski * \author Martin Stein * \date 2011-10-26 */ /* * Copyright (C) 2011-2013 Genode Labs GmbH * * This file is part of the Genode OS framework, which is distributed * under the terms of the GNU General Public License version 2. */ /* core includes */ #include using namespace Genode; void Arm_gic::_init() { /* configure every shared peripheral interrupt */ for (unsigned i = min_spi; i <= _max_irq; i++) { _distr.write(0, i); _distr.write(0, i); _distr.write(~0, i); } /* disable the priority filter */ _cpui.write(~0); /* signal secure IRQ via FIQ interface */ typedef Cpui::Ctlr Ctlr; Ctlr::access_t v = 0; Ctlr::Enable_grp0::set(v, 1); Ctlr::Enable_grp1::set(v, 1); Ctlr::Fiq_en::set(v, 1); _cpui.write(v); /* use whole band of prios */ _cpui.write(~0); /* enable device */ _distr.write(Distr::Ctlr::Enable::bits(1)); } void Pic::unsecure(unsigned const i) { _distr.write(1, i); }