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
net
irda
irmod.c
Go to the documentation of this file.
1
/*********************************************************************
2
*
3
* Filename: irmod.c
4
* Version: 0.9
5
* Description: IrDA stack main entry points
6
* Status: Experimental.
7
* Author: Dag Brattli <
[email protected]
>
8
* Created at: Mon Dec 15 13:55:39 1997
9
* Modified at: Wed Jan 5 15:12:41 2000
10
* Modified by: Dag Brattli <
[email protected]
>
11
*
12
* Copyright (c) 1997, 1999-2000 Dag Brattli, All Rights Reserved.
13
* Copyright (c) 2000-2004 Jean Tourrilhes <
[email protected]
>
14
*
15
* This program is free software; you can redistribute it and/or
16
* modify it under the terms of the GNU General Public License as
17
* published by the Free Software Foundation; either version 2 of
18
* the License, or (at your option) any later version.
19
*
20
* Neither Dag Brattli nor University of Tromsø admit liability nor
21
* provide warranty for any of this software. This material is
22
* provided "AS-IS" and at no charge.
23
*
24
********************************************************************/
25
26
/*
27
* This file contains the main entry points of the IrDA stack.
28
* They are in this file and not af_irda.c because some developpers
29
* are using the IrDA stack without the socket API (compiling out
30
* af_irda.c).
31
* Jean II
32
*/
33
34
#include <linux/module.h>
35
#include <
linux/moduleparam.h
>
36
37
#include <
net/irda/irda.h
>
38
#include <
net/irda/irmod.h
>
/* notify_t */
39
#include <
net/irda/irlap.h
>
/* irlap_init */
40
#include <
net/irda/irlmp.h
>
/* irlmp_init */
41
#include <
net/irda/iriap.h
>
/* iriap_init */
42
#include <
net/irda/irttp.h
>
/* irttp_init */
43
#include <
net/irda/irda_device.h
>
/* irda_device_init */
44
45
/*
46
* Module parameters
47
*/
48
#ifdef CONFIG_IRDA_DEBUG
49
unsigned
int
irda_debug = IRDA_DEBUG_LEVEL;
50
module_param_named
(
debug
, irda_debug,
uint
, 0);
51
MODULE_PARM_DESC
(
debug
,
"IRDA debugging level"
);
52
EXPORT_SYMBOL
(irda_debug);
53
#endif
54
55
/* Packet type handler.
56
* Tell the kernel how IrDA packets should be handled.
57
*/
58
static
struct
packet_type
irda_packet_type
__read_mostly
= {
59
.type =
cpu_to_be16
(
ETH_P_IRDA
),
60
.func =
irlap_driver_rcv
,
/* Packet type handler irlap_frame.c */
61
};
62
63
/*
64
* Function irda_notify_init (notify)
65
*
66
* Used for initializing the notify structure
67
*
68
*/
69
void
irda_notify_init
(
notify_t
*
notify
)
70
{
71
notify->
data_indication
=
NULL
;
72
notify->
udata_indication
=
NULL
;
73
notify->
connect_confirm
=
NULL
;
74
notify->
connect_indication
=
NULL
;
75
notify->
disconnect_indication
=
NULL
;
76
notify->
flow_indication
=
NULL
;
77
notify->
status_indication
=
NULL
;
78
notify->
instance
=
NULL
;
79
strlcpy
(notify->
name
,
"Unknown"
,
sizeof
(notify->
name
));
80
}
81
EXPORT_SYMBOL
(
irda_notify_init
);
82
83
/*
84
* Function irda_init (void)
85
*
86
* Protocol stack initialisation entry point.
87
* Initialise the various components of the IrDA stack
88
*/
89
static
int
__init
irda_init(
void
)
90
{
91
int
ret
= 0;
92
93
IRDA_DEBUG
(0,
"%s()\n"
, __func__);
94
95
/* Lower layer of the stack */
96
irlmp_init
();
97
irlap_init
();
98
99
/* Driver/dongle support */
100
irda_device_init
();
101
102
/* Higher layers of the stack */
103
iriap_init
();
104
irttp_init
();
105
ret =
irsock_init
();
106
if
(ret < 0)
107
goto
out_err_1;
108
109
/* Add IrDA packet type (Start receiving packets) */
110
dev_add_pack
(&irda_packet_type);
111
112
/* External APIs */
113
#ifdef CONFIG_PROC_FS
114
irda_proc_register
();
115
#endif
116
#ifdef CONFIG_SYSCTL
117
ret =
irda_sysctl_register
();
118
if
(ret < 0)
119
goto
out_err_2;
120
#endif
121
122
ret =
irda_nl_register
();
123
if
(ret < 0)
124
goto
out_err_3;
125
126
return
0;
127
128
out_err_3:
129
#ifdef CONFIG_SYSCTL
130
irda_sysctl_unregister
();
131
out_err_2:
132
#endif
133
#ifdef CONFIG_PROC_FS
134
irda_proc_unregister
();
135
#endif
136
137
/* Remove IrDA packet type (stop receiving packets) */
138
dev_remove_pack
(&irda_packet_type);
139
140
/* Remove higher layers */
141
irsock_cleanup
();
142
out_err_1:
143
irttp_cleanup
();
144
iriap_cleanup
();
145
146
/* Remove lower layers */
147
irda_device_cleanup
();
148
irlap_cleanup
();
/* Must be done before irlmp_cleanup()! DB */
149
150
/* Remove middle layer */
151
irlmp_cleanup
();
152
153
154
return
ret
;
155
}
156
157
/*
158
* Function irda_cleanup (void)
159
*
160
* Protocol stack cleanup/removal entry point.
161
* Cleanup the various components of the IrDA stack
162
*/
163
static
void
__exit
irda_cleanup(
void
)
164
{
165
/* Remove External APIs */
166
irda_nl_unregister
();
167
168
#ifdef CONFIG_SYSCTL
169
irda_sysctl_unregister
();
170
#endif
171
#ifdef CONFIG_PROC_FS
172
irda_proc_unregister
();
173
#endif
174
175
/* Remove IrDA packet type (stop receiving packets) */
176
dev_remove_pack
(&irda_packet_type);
177
178
/* Remove higher layers */
179
irsock_cleanup
();
180
irttp_cleanup
();
181
iriap_cleanup
();
182
183
/* Remove lower layers */
184
irda_device_cleanup
();
185
irlap_cleanup
();
/* Must be done before irlmp_cleanup()! DB */
186
187
/* Remove middle layer */
188
irlmp_cleanup
();
189
}
190
191
/*
192
* The IrDA stack must be initialised *before* drivers get initialised,
193
* and *before* higher protocols (IrLAN/IrCOMM/IrNET) get initialised,
194
* otherwise bad things will happen (hashbins will be NULL for example).
195
* Those modules are at module_init()/device_initcall() level.
196
*
197
* On the other hand, it needs to be initialised *after* the basic
198
* networking, the /proc/net filesystem and sysctl module. Those are
199
* currently initialised in .../init/main.c (before initcalls).
200
* Also, IrDA drivers needs to be initialised *after* the random number
201
* generator (main stack and higher layer init don't need it anymore).
202
*
203
* Jean II
204
*/
205
subsys_initcall
(irda_init);
206
module_exit
(irda_cleanup);
207
208
MODULE_AUTHOR
(
"Dag Brattli <
[email protected]
> & Jean Tourrilhes <
[email protected]
>"
);
209
MODULE_DESCRIPTION
(
"The Linux IrDA Protocol Stack"
);
210
MODULE_LICENSE
(
"GPL"
);
211
MODULE_ALIAS_NETPROTO
(
PF_IRDA
);
Generated on Thu Jan 10 2013 14:59:39 for Linux Kernel by
1.8.2