1
/*
2
* \brief IRQ session interface
3
* \author Christian Helmuth
4
* \author Martin Stein
5
* \date 2007-09-13
6
*
7
* An open IRQ session represents a valid IRQ attachment/association.
8
* Initially, the interrupt is masked and will only occur if enabled. This is
9
* done by calling ack_irq().
10
*
11
* Disassociation from an IRQ is done by closing the session.
12
*/
13
14
/*
15
* Copyright (C) 2007-2015 Genode Labs GmbH
16
*
17
* This file is part of the Genode OS framework, which is distributed
18
* under the terms of the GNU General Public License version 2.
19
*/
20
21
#
ifndef _INCLUDE__IRQ_SESSION__IRQ_SESSION_H_
22
#
define _INCLUDE__IRQ_SESSION__IRQ_SESSION_H_
23
24
#
include <base/signal.h>
25
#
include <base/capability.h>
26
#
include <session/session.h>
27
28
namespace
Genode {
29
struct
Irq_session;
30
}
31
32
33
struct
Genode::
Irq_session :
Session
34
{
35
struct
Info {
36
enum
Type {
INVALID
,
MSI
}
type;
37
unsigned
long address;
38
unsigned
long value;
39
}
;
40
41
/**
42
* Interrupt trigger
43
*/
44
enum
Trigger {
TRIGGER_UNCHANGED =
0
,
TRIGGER_LEVEL
,
TRIGGER_EDGE
}
;
45
46
/**
47
* Interrupt trigger polarity
48
*/
49
enum
Polarity {
POLARITY_UNCHANGED =
0
,
POLARITY_HIGH
,
POLARITY_LOW
}
;
50
51
/**
52
* Destructor
53
*/
54
virtual
~
Irq_session(
)
{
}
55
56
/**
57
* Acknowledge handling of last interrupt - re-enables interrupt reception
58
*/
59
virtual
void
ack_irq(
)
=
0
;
60
61
/**
62
* Register irq signal handler
63
*/
64
virtual
void
sigh(
Genode::
Signal_context_capability
sigh
)
=
0
;
65
66
/**
67
* Request information about IRQ, e.g. on x86 request MSI address and
68
* MSI value to be programmed to device specific PCI registers.
69
*/
70
virtual
Info
info(
)
=
0
;
71
72
/*************
73
** Session **
74
*************/
75
76
static
const
char *
service_name(
)
{
return
"IRQ"
;
}
77
78
79
/*********************
80
** RPC declaration **
81
*********************/
82
83
GENODE_RPC
(
Rpc_ack_irq,
void,
ack_irq)
;
84
GENODE_RPC
(
Rpc_sigh,
void,
sigh,
Genode::
Signal_context_capability)
;
85
GENODE_RPC
(
Rpc_info,
Info,
info)
;
86
GENODE_RPC_INTERFACE
(
Rpc_ack_irq,
Rpc_sigh,
Rpc_info)
;
87
}
;
88
89
#
endif /* _INCLUDE__IRQ_SESSION__IRQ_SESSION_H_ */