Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
media
pci
mantis
mantis_evm.c
Go to the documentation of this file.
1
/*
2
Mantis PCI bridge driver
3
4
Copyright (C) Manu Abraham (
[email protected]
)
5
6
This program is free software; you can redistribute it and/or modify
7
it under the terms of the GNU General Public License as published by
8
the Free Software Foundation; either version 2 of the License, or
9
(at your option) any later version.
10
11
This program is distributed in the hope that it will be useful,
12
but WITHOUT ANY WARRANTY; without even the implied warranty of
13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
GNU General Public License for more details.
15
16
You should have received a copy of the GNU General Public License
17
along with this program; if not, write to the Free Software
18
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19
*/
20
21
#include <linux/kernel.h>
22
23
#include <linux/signal.h>
24
#include <linux/sched.h>
25
#include <
linux/interrupt.h
>
26
#include <asm/io.h>
27
28
#include "
dmxdev.h
"
29
#include "
dvbdev.h
"
30
#include "
dvb_demux.h
"
31
#include "
dvb_frontend.h
"
32
#include "
dvb_net.h
"
33
34
#include "
mantis_common.h
"
35
#include "
mantis_link.h
"
36
#include "
mantis_hif.h
"
37
#include "
mantis_reg.h
"
38
39
static
void
mantis_hifevm_work(
struct
work_struct
*
work
)
40
{
41
struct
mantis_ca
*
ca
=
container_of
(work,
struct
mantis_ca
,
hif_evm_work
);
42
struct
mantis_pci
*mantis = ca->
ca_priv
;
43
44
u32
gpif_stat;
45
46
gpif_stat =
mmread
(
MANTIS_GPIF_STATUS
);
47
48
if
(gpif_stat &
MANTIS_GPIF_DETSTAT
) {
49
if
(gpif_stat &
MANTIS_CARD_PLUGIN
) {
50
dprintk
(
MANTIS_DEBUG
, 1,
"Event Mgr: Adapter(%d) Slot(0): CAM Plugin"
, mantis->
num
);
51
mmwrite
(0xdada0000,
MANTIS_CARD_RESET
);
52
mantis_event_cam_plugin
(ca);
53
dvb_ca_en50221_camchange_irq
(&ca->
en50221
,
54
0,
55
DVB_CA_EN50221_CAMCHANGE_INSERTED
);
56
}
57
}
else
{
58
if
(gpif_stat &
MANTIS_CARD_PLUGOUT
) {
59
dprintk
(
MANTIS_DEBUG
, 1,
"Event Mgr: Adapter(%d) Slot(0): CAM Unplug"
, mantis->
num
);
60
mmwrite
(0xdada0000,
MANTIS_CARD_RESET
);
61
mantis_event_cam_unplug
(ca);
62
dvb_ca_en50221_camchange_irq
(&ca->
en50221
,
63
0,
64
DVB_CA_EN50221_CAMCHANGE_REMOVED
);
65
}
66
}
67
68
if
(mantis->
gpif_status
&
MANTIS_GPIF_EXTIRQ
)
69
dprintk
(
MANTIS_DEBUG
, 1,
"Event Mgr: Adapter(%d) Slot(0): Ext IRQ"
, mantis->
num
);
70
71
if
(mantis->
gpif_status
&
MANTIS_SBUF_WSTO
)
72
dprintk
(
MANTIS_DEBUG
, 1,
"Event Mgr: Adapter(%d) Slot(0): Smart Buffer Timeout"
, mantis->
num
);
73
74
if
(mantis->
gpif_status
&
MANTIS_GPIF_OTHERR
)
75
dprintk
(
MANTIS_DEBUG
, 1,
"Event Mgr: Adapter(%d) Slot(0): Alignment Error"
, mantis->
num
);
76
77
if
(gpif_stat &
MANTIS_SBUF_OVFLW
)
78
dprintk
(
MANTIS_DEBUG
, 1,
"Event Mgr: Adapter(%d) Slot(0): Smart Buffer Overflow"
, mantis->
num
);
79
80
if
(gpif_stat &
MANTIS_GPIF_BRRDY
)
81
dprintk
(
MANTIS_DEBUG
, 1,
"Event Mgr: Adapter(%d) Slot(0): Smart Buffer Read Ready"
, mantis->
num
);
82
83
if
(gpif_stat &
MANTIS_GPIF_INTSTAT
)
84
dprintk
(
MANTIS_DEBUG
, 1,
"Event Mgr: Adapter(%d) Slot(0): GPIF IRQ"
, mantis->
num
);
85
86
if
(gpif_stat &
MANTIS_SBUF_EMPTY
)
87
dprintk
(
MANTIS_DEBUG
, 1,
"Event Mgr: Adapter(%d) Slot(0): Smart Buffer Empty"
, mantis->
num
);
88
89
if
(gpif_stat &
MANTIS_SBUF_OPDONE
) {
90
dprintk
(
MANTIS_DEBUG
, 1,
"Event Mgr: Adapter(%d) Slot(0): Smart Buffer operation complete"
, mantis->
num
);
91
ca->
sbuf_status
=
MANTIS_SBUF_DATA_AVAIL
;
92
ca->
hif_event
=
MANTIS_SBUF_OPDONE
;
93
wake_up
(&ca->
hif_opdone_wq
);
94
}
95
}
96
97
int
mantis_evmgr_init
(
struct
mantis_ca
*ca)
98
{
99
struct
mantis_pci
*mantis = ca->
ca_priv
;
100
101
dprintk
(
MANTIS_DEBUG
, 1,
"Initializing Mantis Host I/F Event manager"
);
102
INIT_WORK
(&ca->
hif_evm_work
, mantis_hifevm_work);
103
mantis_pcmcia_init
(ca);
104
schedule_work
(&ca->
hif_evm_work
);
105
mantis_hif_init
(ca);
106
return
0;
107
}
108
109
void
mantis_evmgr_exit
(
struct
mantis_ca
*ca)
110
{
111
struct
mantis_pci
*mantis = ca->
ca_priv
;
112
113
dprintk
(
MANTIS_DEBUG
, 1,
"Mantis Host I/F Event manager exiting"
);
114
flush_work
(&ca->
hif_evm_work
);
115
mantis_hif_exit
(ca);
116
mantis_pcmcia_exit
(ca);
117
}
Generated on Thu Jan 10 2013 13:48:21 for Linux Kernel by
1.8.2