| /* | |
| * Ultra Wide Band | |
| * IE Received notification handling. | |
| * | |
| * Copyright (C) 2008 Cambridge Silicon Radio Ltd. | |
| * | |
| * This program is free software; you can redistribute it and/or | |
| * modify it under the terms of the GNU General Public License version | |
| * 2 as published by the Free Software Foundation. | |
| * | |
| * This program is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| * GNU General Public License for more details. | |
| * | |
| * You should have received a copy of the GNU General Public License | |
| * along with this program. If not, see <http://www.gnu.org/licenses/>. | |
| */ | |
| #include <linux/errno.h> | |
| #include <linux/module.h> | |
| #include <linux/device.h> | |
| #include <linux/bitmap.h> | |
| #include "uwb-internal.h" | |
| /* | |
| * Process an incoming IE Received notification. | |
| */ | |
| int uwbd_evt_handle_rc_ie_rcv(struct uwb_event *evt) | |
| { | |
| int result = -EINVAL; | |
| struct device *dev = &evt->rc->uwb_dev.dev; | |
| struct uwb_rc_evt_ie_rcv *iercv; | |
| /* Is there enough data to decode it? */ | |
| if (evt->notif.size < sizeof(*iercv)) { | |
| dev_err(dev, "IE Received notification: Not enough data to " | |
| "decode (%zu vs %zu bytes needed)\n", | |
| evt->notif.size, sizeof(*iercv)); | |
| goto error; | |
| } | |
| iercv = container_of(evt->notif.rceb, struct uwb_rc_evt_ie_rcv, rceb); | |
| dev_dbg(dev, "IE received, element ID=%d\n", iercv->IEData[0]); | |
| if (iercv->IEData[0] == UWB_RELINQUISH_REQUEST_IE) { | |
| dev_warn(dev, "unhandled Relinquish Request IE\n"); | |
| } | |
| return 0; | |
| error: | |
| return result; | |
| } |