diff options
author | Stefano Panella <stefano.panella@csr.com> | 2008-11-04 09:06:31 -0500 |
---|---|---|
committer | David Vrabel <david.vrabel@csr.com> | 2008-11-04 10:53:29 -0500 |
commit | c5995bd2819dc577d0b32b26be0836d16c977e24 (patch) | |
tree | 2cc5122623ace2571b7b3080b1b9a61f8282cfd4 /drivers/uwb | |
parent | f88518d122f1b007f47a46aff37ca2885126a923 (diff) |
uwb: infrastructure for handling Relinquish Request IEs
The structures and event handler needed to handle Relinish Request IEs
received from neighbors. Nothing is done with these IEs yet.
Signed-off-by: Stefano Panella <stefano.panella@csr.com>
Signed-off-by: David Vrabel <david.vrabel@csr.com>
Diffstat (limited to 'drivers/uwb')
-rw-r--r-- | drivers/uwb/Makefile | 1 | ||||
-rw-r--r-- | drivers/uwb/ie-rcv.c | 55 | ||||
-rw-r--r-- | drivers/uwb/uwb-internal.h | 1 | ||||
-rw-r--r-- | drivers/uwb/uwbd.c | 4 |
4 files changed, 61 insertions, 0 deletions
diff --git a/drivers/uwb/Makefile b/drivers/uwb/Makefile index 257e6908304c..2b99c3e61671 100644 --- a/drivers/uwb/Makefile +++ b/drivers/uwb/Makefile | |||
@@ -13,6 +13,7 @@ uwb-objs := \ | |||
13 | drp-ie.o \ | 13 | drp-ie.o \ |
14 | est.o \ | 14 | est.o \ |
15 | ie.o \ | 15 | ie.o \ |
16 | ie-rcv.o \ | ||
16 | lc-dev.o \ | 17 | lc-dev.o \ |
17 | lc-rc.o \ | 18 | lc-rc.o \ |
18 | neh.o \ | 19 | neh.o \ |
diff --git a/drivers/uwb/ie-rcv.c b/drivers/uwb/ie-rcv.c new file mode 100644 index 000000000000..917e6d78a798 --- /dev/null +++ b/drivers/uwb/ie-rcv.c | |||
@@ -0,0 +1,55 @@ | |||
1 | /* | ||
2 | * Ultra Wide Band | ||
3 | * IE Received notification handling. | ||
4 | * | ||
5 | * Copyright (C) 2008 Cambridge Silicon Radio Ltd. | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or | ||
8 | * modify it under the terms of the GNU General Public License version | ||
9 | * 2 as published by the Free Software Foundation. | ||
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, see <http://www.gnu.org/licenses/>. | ||
18 | */ | ||
19 | |||
20 | #include <linux/errno.h> | ||
21 | #include <linux/module.h> | ||
22 | #include <linux/device.h> | ||
23 | #include <linux/bitmap.h> | ||
24 | #include "uwb-internal.h" | ||
25 | |||
26 | /* | ||
27 | * Process an incoming IE Received notification. | ||
28 | */ | ||
29 | int uwbd_evt_handle_rc_ie_rcv(struct uwb_event *evt) | ||
30 | { | ||
31 | int result = -EINVAL; | ||
32 | struct device *dev = &evt->rc->uwb_dev.dev; | ||
33 | struct uwb_rc_evt_ie_rcv *iercv; | ||
34 | size_t iesize; | ||
35 | |||
36 | /* Is there enough data to decode it? */ | ||
37 | if (evt->notif.size < sizeof(*iercv)) { | ||
38 | dev_err(dev, "IE Received notification: Not enough data to " | ||
39 | "decode (%zu vs %zu bytes needed)\n", | ||
40 | evt->notif.size, sizeof(*iercv)); | ||
41 | goto error; | ||
42 | } | ||
43 | iercv = container_of(evt->notif.rceb, struct uwb_rc_evt_ie_rcv, rceb); | ||
44 | iesize = le16_to_cpu(iercv->wIELength); | ||
45 | |||
46 | dev_dbg(dev, "IE received, element ID=%d\n", iercv->IEData[0]); | ||
47 | |||
48 | if (iercv->IEData[0] == UWB_RELINQUISH_REQUEST_IE) { | ||
49 | dev_warn(dev, "unhandled Relinquish Request IE\n"); | ||
50 | } | ||
51 | |||
52 | return 0; | ||
53 | error: | ||
54 | return result; | ||
55 | } | ||
diff --git a/drivers/uwb/uwb-internal.h b/drivers/uwb/uwb-internal.h index 983ebc4dd8d5..031e8a885681 100644 --- a/drivers/uwb/uwb-internal.h +++ b/drivers/uwb/uwb-internal.h | |||
@@ -167,6 +167,7 @@ extern void uwbd_event_queue(struct uwb_event *); | |||
167 | void uwbd_flush(struct uwb_rc *rc); | 167 | void uwbd_flush(struct uwb_rc *rc); |
168 | 168 | ||
169 | /* UWB event handlers */ | 169 | /* UWB event handlers */ |
170 | extern int uwbd_evt_handle_rc_ie_rcv(struct uwb_event *); | ||
170 | extern int uwbd_evt_handle_rc_beacon(struct uwb_event *); | 171 | extern int uwbd_evt_handle_rc_beacon(struct uwb_event *); |
171 | extern int uwbd_evt_handle_rc_beacon_size(struct uwb_event *); | 172 | extern int uwbd_evt_handle_rc_beacon_size(struct uwb_event *); |
172 | extern int uwbd_evt_handle_rc_bpoie_change(struct uwb_event *); | 173 | extern int uwbd_evt_handle_rc_bpoie_change(struct uwb_event *); |
diff --git a/drivers/uwb/uwbd.c b/drivers/uwb/uwbd.c index 78908416e42c..f75113571f4a 100644 --- a/drivers/uwb/uwbd.c +++ b/drivers/uwb/uwbd.c | |||
@@ -104,6 +104,10 @@ struct uwbd_event { | |||
104 | /** Table of handlers for and properties of the UWBD Radio Control Events */ | 104 | /** Table of handlers for and properties of the UWBD Radio Control Events */ |
105 | static | 105 | static |
106 | struct uwbd_event uwbd_events[] = { | 106 | struct uwbd_event uwbd_events[] = { |
107 | [UWB_RC_EVT_IE_RCV] = { | ||
108 | .handler = uwbd_evt_handle_rc_ie_rcv, | ||
109 | .name = "IE_RECEIVED" | ||
110 | }, | ||
107 | [UWB_RC_EVT_BEACON] = { | 111 | [UWB_RC_EVT_BEACON] = { |
108 | .handler = uwbd_evt_handle_rc_beacon, | 112 | .handler = uwbd_evt_handle_rc_beacon, |
109 | .name = "BEACON_RECEIVED" | 113 | .name = "BEACON_RECEIVED" |