mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-26 00:41:08 +00:00
47744e0019
fix #874
83 lines
1.6 KiB
C++
83 lines
1.6 KiB
C++
/*
|
|
* \brief IRQ session interface
|
|
* \author Martin Stein
|
|
* \date 2013-10-24
|
|
*/
|
|
|
|
/*
|
|
* Copyright (C) 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.
|
|
*/
|
|
|
|
#ifndef _IRQ_SESSION__IRQ_SESSION_H_
|
|
#define _IRQ_SESSION__IRQ_SESSION_H_
|
|
|
|
/* Genode includes */
|
|
#include <base/capability.h>
|
|
#include <session/session.h>
|
|
|
|
namespace Genode
|
|
{
|
|
/**
|
|
* Information that enables a user to await and ack an IRQ directly
|
|
*/
|
|
struct Irq_signal
|
|
{
|
|
unsigned receiver_id;
|
|
unsigned context_id;
|
|
};
|
|
|
|
/**
|
|
* IRQ session interface
|
|
*/
|
|
struct Irq_session : Session
|
|
{
|
|
/**
|
|
* Interrupt trigger
|
|
*/
|
|
enum Trigger { TRIGGER_UNCHANGED = 0, TRIGGER_LEVEL, TRIGGER_EDGE };
|
|
|
|
/**
|
|
* Interrupt trigger polarity
|
|
*/
|
|
enum Polarity { POLARITY_UNCHANGED = 0, POLARITY_HIGH, POLARITY_LOW };
|
|
|
|
/**
|
|
* Destructor
|
|
*/
|
|
virtual ~Irq_session() { }
|
|
|
|
/**
|
|
* Await the next occurence of the interrupt of this session
|
|
*/
|
|
virtual void wait_for_irq() = 0;
|
|
|
|
/**
|
|
* Get information for direct interrupt handling
|
|
*
|
|
* FIXME: This is used only client-internal and could thus be protected.
|
|
*/
|
|
virtual Irq_signal signal() = 0;
|
|
|
|
|
|
/*************
|
|
** Session **
|
|
*************/
|
|
|
|
static const char * service_name() { return "IRQ"; }
|
|
|
|
|
|
/*********************
|
|
** RPC declaration **
|
|
*********************/
|
|
|
|
GENODE_RPC(Rpc_wait_for_irq, void, wait_for_irq);
|
|
GENODE_RPC(Rpc_signal, Irq_signal, signal);
|
|
GENODE_RPC_INTERFACE(Rpc_wait_for_irq, Rpc_signal);
|
|
};
|
|
}
|
|
|
|
#endif /* _IRQ_SESSION__IRQ_SESSION_H_ */
|