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
uwb
driver.c
Go to the documentation of this file.
1
/*
2
* Ultra Wide Band
3
* Driver initialization, etc
4
*
5
* Copyright (C) 2005-2006 Intel Corporation
6
* Inaky Perez-Gonzalez <
[email protected]
>
7
*
8
* This program is free software; you can redistribute it and/or
9
* modify it under the terms of the GNU General Public License version
10
* 2 as published by the Free Software Foundation.
11
*
12
* This program is distributed in the hope that it will be useful,
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
* GNU General Public License for more details.
16
*
17
* You should have received a copy of the GNU General Public License
18
* along with this program; if not, write to the Free Software
19
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
20
* 02110-1301, USA.
21
*
22
*
23
* FIXME: docs
24
*
25
* Life cycle: FIXME: explain
26
*
27
* UWB radio controller:
28
*
29
* 1. alloc a uwb_rc, zero it
30
* 2. call uwb_rc_init() on it to set it up + ops (won't do any
31
* kind of allocation)
32
* 3. register (now it is owned by the UWB stack--deregister before
33
* freeing/destroying).
34
* 4. It lives on it's own now (UWB stack handles)--when it
35
* disconnects, call unregister()
36
* 5. free it.
37
*
38
* Make sure you have a reference to the uwb_rc before calling
39
* any of the UWB API functions.
40
*
41
* TODO:
42
*
43
* 1. Locking and life cycle management is crappy still. All entry
44
* points to the UWB HCD API assume you have a reference on the
45
* uwb_rc structure and that it won't go away. They mutex lock it
46
* before doing anything.
47
*/
48
49
#include <linux/kernel.h>
50
#include <
linux/init.h
>
51
#include <linux/module.h>
52
#include <linux/device.h>
53
#include <
linux/err.h
>
54
#include <linux/kdev_t.h>
55
#include <linux/random.h>
56
57
#include "
uwb-internal.h
"
58
59
60
/* UWB stack attributes (or 'global' constants) */
61
62
74
unsigned
long
beacon_timeout_ms
= 500;
75
76
static
77
ssize_t
beacon_timeout_ms_show(
struct
class
*
class
,
78
struct
class_attribute
*
attr
,
79
char
*
buf
)
80
{
81
return
scnprintf
(buf,
PAGE_SIZE
,
"%lu\n"
,
beacon_timeout_ms
);
82
}
83
84
static
85
ssize_t
beacon_timeout_ms_store(
struct
class
*
class
,
86
struct
class_attribute
*
attr
,
87
const
char
*
buf
,
size_t
size
)
88
{
89
unsigned
long
bt
;
90
ssize_t
result
;
91
result =
sscanf
(buf,
"%lu"
, &bt);
92
if
(result != 1)
93
return
-
EINVAL
;
94
beacon_timeout_ms
=
bt
;
95
return
size
;
96
}
97
98
static
struct
class_attribute
uwb_class_attrs[] = {
99
__ATTR
(
beacon_timeout_ms
,
S_IWUSR
|
S_IRUGO
,
100
beacon_timeout_ms_show, beacon_timeout_ms_store),
101
__ATTR_NULL
,
102
};
103
105
struct
class
uwb_rc_class
= {
106
.name =
"uwb_rc"
,
107
.class_attrs = uwb_class_attrs,
108
};
109
110
111
static
int
__init
uwb_subsys_init(
void
)
112
{
113
int
result = 0;
114
115
result =
uwb_est_create
();
116
if
(result < 0) {
117
printk
(
KERN_ERR
"uwb: Can't initialize EST subsystem\n"
);
118
goto
error_est_init;
119
}
120
121
result =
class_register
(&uwb_rc_class);
122
if
(result < 0)
123
goto
error_uwb_rc_class_register;
124
uwb_dbg_init
();
125
return
0;
126
127
error_uwb_rc_class_register:
128
uwb_est_destroy
();
129
error_est_init:
130
return
result
;
131
}
132
module_init
(uwb_subsys_init);
133
134
static
void
__exit
uwb_subsys_exit(
void
)
135
{
136
uwb_dbg_exit
();
137
class_unregister
(&uwb_rc_class);
138
uwb_est_destroy
();
139
return
;
140
}
141
module_exit
(uwb_subsys_exit);
142
143
MODULE_AUTHOR
(
"Inaky Perez-Gonzalez <
[email protected]
>"
);
144
MODULE_DESCRIPTION
(
"Ultra Wide Band core"
);
145
MODULE_LICENSE
(
"GPL"
);
Generated on Thu Jan 10 2013 13:13:04 for Linux Kernel by
1.8.2