OpenCores
URL https://opencores.org/ocsvn/test_project/test_project/trunk

Subversion Repositories test_project

[/] [test_project/] [trunk/] [linux_sd_driver/] [net/] [irda/] [irmod.c] - Blame information for rev 62

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 62 marcus.erl
/*********************************************************************
2
 *
3
 * Filename:      irmod.c
4
 * Version:       0.9
5
 * Description:   IrDA stack main entry points
6
 * Status:        Experimental.
7
 * Author:        Dag Brattli <dagb@cs.uit.no>
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 <dagb@cs.uit.no>
11
 *
12
 *     Copyright (c) 1997, 1999-2000 Dag Brattli, All Rights Reserved.
13
 *     Copyright (c) 2000-2004 Jean Tourrilhes <jt@hpl.hp.com>
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 = {
59
        .type   = __constant_htons(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", __FUNCTION__);
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 <dagb@cs.uit.no> & Jean Tourrilhes <jt@hpl.hp.com>");
209
MODULE_DESCRIPTION("The Linux IrDA Protocol Stack");
210
MODULE_LICENSE("GPL");
211
MODULE_ALIAS_NETPROTO(PF_IRDA);

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.