diff options
Diffstat (limited to 'drivers/uwb')
30 files changed, 101 insertions, 54 deletions
diff --git a/drivers/uwb/address.c b/drivers/uwb/address.c index ad21b1d7218..973321327c4 100644 --- a/drivers/uwb/address.c +++ b/drivers/uwb/address.c @@ -23,6 +23,7 @@   * FIXME: docs   */ +#include <linux/slab.h>  #include <linux/errno.h>  #include <linux/module.h>  #include <linux/device.h> diff --git a/drivers/uwb/allocator.c b/drivers/uwb/allocator.c index c13cec7dcbc..436e4f7110c 100644 --- a/drivers/uwb/allocator.c +++ b/drivers/uwb/allocator.c @@ -16,6 +16,7 @@   * along with this program.  If not, see <http://www.gnu.org/licenses/>.   */  #include <linux/kernel.h> +#include <linux/slab.h>  #include <linux/uwb.h>  #include "uwb-internal.h" diff --git a/drivers/uwb/beacon.c b/drivers/uwb/beacon.c index 36bc3158006..dcdd59bfcd0 100644 --- a/drivers/uwb/beacon.c +++ b/drivers/uwb/beacon.c @@ -28,6 +28,7 @@  #include <linux/device.h>  #include <linux/err.h>  #include <linux/kdev_t.h> +#include <linux/slab.h>  #include "uwb-internal.h" diff --git a/drivers/uwb/drp-ie.c b/drivers/uwb/drp-ie.c index 2840d7bf9e6..520673109a7 100644 --- a/drivers/uwb/drp-ie.c +++ b/drivers/uwb/drp-ie.c @@ -18,6 +18,7 @@   */  #include <linux/kernel.h>  #include <linux/random.h> +#include <linux/slab.h>  #include <linux/uwb.h>  #include "uwb-internal.h" diff --git a/drivers/uwb/drp.c b/drivers/uwb/drp.c index 4f5ca99a04b..a8d83e25e3b 100644 --- a/drivers/uwb/drp.c +++ b/drivers/uwb/drp.c @@ -20,6 +20,7 @@   */  #include <linux/kthread.h>  #include <linux/freezer.h> +#include <linux/slab.h>  #include <linux/delay.h>  #include "uwb-internal.h" diff --git a/drivers/uwb/est.c b/drivers/uwb/est.c index 328fcc2b609..a2eaa3c33b0 100644 --- a/drivers/uwb/est.c +++ b/drivers/uwb/est.c @@ -40,6 +40,7 @@   *   uwb_est_get_size()   */  #include <linux/spinlock.h> +#include <linux/slab.h>  #include "uwb-internal.h" diff --git a/drivers/uwb/hwa-rc.c b/drivers/uwb/hwa-rc.c index e7eeb63fab2..2babcd4fbfc 100644 --- a/drivers/uwb/hwa-rc.c +++ b/drivers/uwb/hwa-rc.c @@ -53,6 +53,7 @@   */  #include <linux/init.h>  #include <linux/module.h> +#include <linux/slab.h>  #include <linux/usb.h>  #include <linux/usb/wusb.h>  #include <linux/usb/wusb-wa.h> @@ -891,7 +892,7 @@ static int hwarc_post_reset(struct usb_interface *iface)  }  /** USB device ID's that we handle */ -static struct usb_device_id hwarc_id_table[] = { +static const struct usb_device_id hwarc_id_table[] = {  	/* D-Link DUB-1210 */  	{ USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3d02, 0xe0, 0x01, 0x02),  	  .driver_info = WUSB_QUIRK_WHCI_CMD_EVT }, diff --git a/drivers/uwb/i1480/dfu/mac.c b/drivers/uwb/i1480/dfu/mac.c index 694d0daf88a..6ec14f5fcde 100644 --- a/drivers/uwb/i1480/dfu/mac.c +++ b/drivers/uwb/i1480/dfu/mac.c @@ -28,6 +28,7 @@   */  #include <linux/delay.h>  #include <linux/firmware.h> +#include <linux/slab.h>  #include <linux/uwb.h>  #include "i1480-dfu.h" diff --git a/drivers/uwb/i1480/dfu/usb.c b/drivers/uwb/i1480/dfu/usb.c index 0bb665a0c02..ba8664328af 100644 --- a/drivers/uwb/i1480/dfu/usb.c +++ b/drivers/uwb/i1480/dfu/usb.c @@ -37,6 +37,7 @@  #include <linux/module.h>  #include <linux/usb.h>  #include <linux/interrupt.h> +#include <linux/slab.h>  #include <linux/delay.h>  #include <linux/uwb.h>  #include <linux/usb/wusb.h> @@ -120,8 +121,7 @@ int i1480_usb_write(struct i1480 *i1480, u32 memory_address,  		result = usb_control_msg(  			i1480_usb->usb_dev, usb_sndctrlpipe(i1480_usb->usb_dev, 0),  			0xf0, USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE, -			cpu_to_le16(memory_address & 0xffff), -			cpu_to_le16((memory_address >> 16) & 0xffff), +			memory_address,	(memory_address >> 16),  			i1480->cmd_buf, buffer_size, 100 /* FIXME: arbitrary */);  		if (result < 0)  			break; @@ -166,8 +166,7 @@ int i1480_usb_read(struct i1480 *i1480, u32 addr, size_t size)  		result = usb_control_msg(  			i1480_usb->usb_dev, usb_rcvctrlpipe(i1480_usb->usb_dev, 0),  			0xf0, USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE, -			cpu_to_le16(itr_addr & 0xffff), -			cpu_to_le16((itr_addr >> 16) & 0xffff), +			itr_addr, (itr_addr >> 16),  			i1480->cmd_buf + itr, itr_size,  			100 /* FIXME: arbitrary */);  		if (result < 0) { @@ -413,6 +412,10 @@ error:  	return result;  } +MODULE_FIRMWARE("i1480-pre-phy-0.0.bin"); +MODULE_FIRMWARE("i1480-usb-0.0.bin"); +MODULE_FIRMWARE("i1480-phy-0.0.bin"); +  #define i1480_USB_DEV(v, p)				\  {							\  	.match_flags = USB_DEVICE_ID_MATCH_DEVICE	\ @@ -430,7 +433,7 @@ error:  /** USB device ID's that we handle */ -static struct usb_device_id i1480_usb_id_table[] = { +static const struct usb_device_id i1480_usb_id_table[] = {  	i1480_USB_DEV(0x8086, 0xdf3b),  	i1480_USB_DEV(0x15a9, 0x0005),  	i1480_USB_DEV(0x07d1, 0x3802), diff --git a/drivers/uwb/i1480/i1480-est.c b/drivers/uwb/i1480/i1480-est.c index 7bf8c6febae..f2eb4d8b76c 100644 --- a/drivers/uwb/i1480/i1480-est.c +++ b/drivers/uwb/i1480/i1480-est.c @@ -54,7 +54,7 @@ static struct uwb_est_entry i1480_est_fd01[] = {  		.size = sizeof(struct i1480_rceb) + 2 },  }; -static int i1480_est_init(void) +static int __init i1480_est_init(void)  {  	int result = uwb_est_register(i1480_CET_VS1, 0x00, 0x8086, 0x0c3b,  				      i1480_est_fd00, @@ -73,7 +73,7 @@ static int i1480_est_init(void)  }  module_init(i1480_est_init); -static void i1480_est_exit(void) +static void __exit i1480_est_exit(void)  {  	uwb_est_unregister(i1480_CET_VS1, 0x00, 0x8086, 0x0c3b,  			   i1480_est_fd00, ARRAY_SIZE(i1480_est_fd00)); diff --git a/drivers/uwb/i1480/i1480u-wlp/lc.c b/drivers/uwb/i1480/i1480u-wlp/lc.c index f272dfe54d4..def778cf221 100644 --- a/drivers/uwb/i1480/i1480u-wlp/lc.c +++ b/drivers/uwb/i1480/i1480u-wlp/lc.c @@ -55,6 +55,7 @@   *                          is being removed.   *         i1480u_rm()   */ +#include <linux/gfp.h>  #include <linux/if_arp.h>  #include <linux/etherdevice.h> diff --git a/drivers/uwb/i1480/i1480u-wlp/netdev.c b/drivers/uwb/i1480/i1480u-wlp/netdev.c index b236e696994..f98f6ce8b9e 100644 --- a/drivers/uwb/i1480/i1480u-wlp/netdev.c +++ b/drivers/uwb/i1480/i1480u-wlp/netdev.c @@ -39,6 +39,7 @@   *     i1480u_set_config():   */ +#include <linux/slab.h>  #include <linux/if_arp.h>  #include <linux/etherdevice.h> diff --git a/drivers/uwb/i1480/i1480u-wlp/rx.c b/drivers/uwb/i1480/i1480u-wlp/rx.c index 25a2758beb6..d4e51e108aa 100644 --- a/drivers/uwb/i1480/i1480u-wlp/rx.c +++ b/drivers/uwb/i1480/i1480u-wlp/rx.c @@ -64,6 +64,7 @@   *   */ +#include <linux/gfp.h>  #include <linux/netdevice.h>  #include <linux/etherdevice.h>  #include "i1480u-wlp.h" diff --git a/drivers/uwb/i1480/i1480u-wlp/tx.c b/drivers/uwb/i1480/i1480u-wlp/tx.c index 3db3449dbda..3c117a36456 100644 --- a/drivers/uwb/i1480/i1480u-wlp/tx.c +++ b/drivers/uwb/i1480/i1480u-wlp/tx.c @@ -54,6 +54,7 @@   *          the times the MTU will be smaller than one page...   */ +#include <linux/slab.h>  #include "i1480u-wlp.h"  enum { diff --git a/drivers/uwb/ie.c b/drivers/uwb/ie.c index ab976686175..30acec74042 100644 --- a/drivers/uwb/ie.c +++ b/drivers/uwb/ie.c @@ -24,6 +24,7 @@   * FIXME: docs   */ +#include <linux/slab.h>  #include "uwb-internal.h"  /** diff --git a/drivers/uwb/lc-dev.c b/drivers/uwb/lc-dev.c index 1097e81b56d..90113bafefc 100644 --- a/drivers/uwb/lc-dev.c +++ b/drivers/uwb/lc-dev.c @@ -23,6 +23,7 @@   * FIXME: docs   */  #include <linux/kernel.h> +#include <linux/slab.h>  #include <linux/device.h>  #include <linux/err.h>  #include <linux/kdev_t.h> diff --git a/drivers/uwb/lc-rc.c b/drivers/uwb/lc-rc.c index 9611ef3b787..b0091c771b9 100644 --- a/drivers/uwb/lc-rc.c +++ b/drivers/uwb/lc-rc.c @@ -35,6 +35,7 @@  #include <linux/kdev_t.h>  #include <linux/etherdevice.h>  #include <linux/usb.h> +#include <linux/slab.h>  #include "uwb-internal.h" diff --git a/drivers/uwb/neh.c b/drivers/uwb/neh.c index 78510a1f410..697e56a5bcd 100644 --- a/drivers/uwb/neh.c +++ b/drivers/uwb/neh.c @@ -83,6 +83,7 @@   */  #include <linux/kernel.h>  #include <linux/timer.h> +#include <linux/slab.h>  #include <linux/err.h>  #include "uwb-internal.h" diff --git a/drivers/uwb/reset.c b/drivers/uwb/reset.c index 7f0512e43d9..27849292b55 100644 --- a/drivers/uwb/reset.c +++ b/drivers/uwb/reset.c @@ -30,6 +30,7 @@   */  #include <linux/kernel.h>  #include <linux/err.h> +#include <linux/slab.h>  #include <linux/delay.h>  #include "uwb-internal.h" diff --git a/drivers/uwb/rsv.c b/drivers/uwb/rsv.c index 6b76f4bb4cc..78c892233cf 100644 --- a/drivers/uwb/rsv.c +++ b/drivers/uwb/rsv.c @@ -17,6 +17,7 @@   */  #include <linux/kernel.h>  #include <linux/uwb.h> +#include <linux/slab.h>  #include <linux/random.h>  #include "uwb-internal.h" diff --git a/drivers/uwb/scan.c b/drivers/uwb/scan.c index 2d270748f32..76a1a1ed7d3 100644 --- a/drivers/uwb/scan.c +++ b/drivers/uwb/scan.c @@ -35,6 +35,7 @@  #include <linux/device.h>  #include <linux/err.h> +#include <linux/slab.h>  #include "uwb-internal.h" diff --git a/drivers/uwb/umc-dev.c b/drivers/uwb/umc-dev.c index 1fc7d8270bb..43ea9982e68 100644 --- a/drivers/uwb/umc-dev.c +++ b/drivers/uwb/umc-dev.c @@ -6,6 +6,7 @@   * This file is released under the GNU GPL v2.   */  #include <linux/kernel.h> +#include <linux/slab.h>  #include <linux/uwb/umc.h>  static void umc_device_release(struct device *dev) diff --git a/drivers/uwb/uwbd.c b/drivers/uwb/uwbd.c index 5a777d8624d..001c8b4020a 100644 --- a/drivers/uwb/uwbd.c +++ b/drivers/uwb/uwbd.c @@ -43,7 +43,7 @@   *   * EVENTS   * - * Events have a type, a subtype, a lenght, some other stuff and the + * Events have a type, a subtype, a length, some other stuff and the   * data blob, which depends on the event. The header is 'struct   * uwb_event'; for payloads, see 'struct uwbd_evt_*'.   * @@ -69,6 +69,7 @@   * Handler functions are called normally uwbd_evt_handle_*().   */  #include <linux/kthread.h> +#include <linux/slab.h>  #include <linux/module.h>  #include <linux/freezer.h> diff --git a/drivers/uwb/whc-rc.c b/drivers/uwb/whc-rc.c index 01950c62dc8..73495583c44 100644 --- a/drivers/uwb/whc-rc.c +++ b/drivers/uwb/whc-rc.c @@ -45,6 +45,7 @@  #include <linux/sched.h>  #include <linux/dma-mapping.h>  #include <linux/interrupt.h> +#include <linux/slab.h>  #include <linux/workqueue.h>  #include <linux/uwb.h>  #include <linux/uwb/whci.h> diff --git a/drivers/uwb/whci.c b/drivers/uwb/whci.c index 2e2784627ad..b221142446a 100644 --- a/drivers/uwb/whci.c +++ b/drivers/uwb/whci.c @@ -9,6 +9,7 @@  #include <linux/kernel.h>  #include <linux/pci.h>  #include <linux/dma-mapping.h> +#include <linux/slab.h>  #include <linux/uwb/whci.h>  #include <linux/uwb/umc.h> diff --git a/drivers/uwb/wlp/eda.c b/drivers/uwb/wlp/eda.c index 69e02003971..086fc0cf940 100644 --- a/drivers/uwb/wlp/eda.c +++ b/drivers/uwb/wlp/eda.c @@ -53,6 +53,7 @@  #include <linux/netdevice.h>  #include <linux/etherdevice.h> +#include <linux/slab.h>  #include <linux/wlp.h>  #include "wlp-internal.h" diff --git a/drivers/uwb/wlp/messages.c b/drivers/uwb/wlp/messages.c index aa42fcee4c4..3a8e033dce2 100644 --- a/drivers/uwb/wlp/messages.c +++ b/drivers/uwb/wlp/messages.c @@ -24,6 +24,7 @@   */  #include <linux/wlp.h> +#include <linux/slab.h>  #include "wlp-internal.h" @@ -259,6 +260,63 @@ out:  } +static ssize_t wlp_get_attribute(struct wlp *wlp, u16 type_code, +	struct wlp_attr_hdr *attr_hdr, void *value, ssize_t value_len, +	ssize_t buflen) +{ +	struct device *dev = &wlp->rc->uwb_dev.dev; +	ssize_t attr_len = sizeof(*attr_hdr) + value_len; +	if (buflen < 0) +		return -EINVAL; +	if (buflen < attr_len) { +		dev_err(dev, "WLP: Not enough space in buffer to parse" +			" attribute field. Need %d, received %zu\n", +			(int)attr_len, buflen); +		return -EIO; +	} +	if (wlp_check_attr_hdr(wlp, attr_hdr, type_code, value_len) < 0) { +		dev_err(dev, "WLP: Header verification failed. \n"); +		return -EINVAL; +	} +	memcpy(value, (void *)attr_hdr + sizeof(*attr_hdr), value_len); +	return attr_len; +} + +static ssize_t wlp_vget_attribute(struct wlp *wlp, u16 type_code, +	struct wlp_attr_hdr *attr_hdr, void *value, ssize_t max_value_len, +	ssize_t buflen) +{ +	struct device *dev = &wlp->rc->uwb_dev.dev; +	size_t len; +	if (buflen < 0) +		return -EINVAL; +	if (buflen < sizeof(*attr_hdr)) { +		dev_err(dev, "WLP: Not enough space in buffer to parse" +			" header.\n"); +		return -EIO; +	} +	if (le16_to_cpu(attr_hdr->type) != type_code) { +		dev_err(dev, "WLP: Unexpected attribute type. Got %u, " +			"expected %u.\n", le16_to_cpu(attr_hdr->type), +			type_code); +		return -EINVAL; +	} +	len = le16_to_cpu(attr_hdr->length); +	if (len > max_value_len) { +		dev_err(dev, "WLP: Attribute larger than maximum " +			"allowed. Received %zu, max is %d.\n", len, +			(int)max_value_len); +		return -EFBIG; +	} +	if (buflen < sizeof(*attr_hdr) + len) { +		dev_err(dev, "WLP: Not enough space in buffer to parse " +			"variable data.\n"); +		return -EIO; +	} +	memcpy(value, (void *)attr_hdr + sizeof(*attr_hdr), len); +	return sizeof(*attr_hdr) + len; +} +  /**   * Get value of attribute from fixed size attribute field.   * @@ -274,22 +332,8 @@ out:  ssize_t wlp_get_##name(struct wlp *wlp, struct wlp_attr_##name *attr,	\  		      type *value, ssize_t buflen)			\  {									\ -	struct device *dev = &wlp->rc->uwb_dev.dev;			\ -	if (buflen < 0)							\ -		return -EINVAL;						\ -	if (buflen < sizeof(*attr)) {					\ -		dev_err(dev, "WLP: Not enough space in buffer to parse"	\ -			" attribute field. Need %d, received %zu\n",	\ -			(int)sizeof(*attr), buflen);			\ -		return -EIO;						\ -	}								\ -	if (wlp_check_attr_hdr(wlp, &attr->hdr, type_code,		\ -			       sizeof(attr->name)) < 0) {		\ -		dev_err(dev, "WLP: Header verification failed. \n");	\ -		return -EINVAL;						\ -	}								\ -	*value = attr->name;						\ -	return sizeof(*attr);						\ +	return wlp_get_attribute(wlp, (type_code), &attr->hdr,		\ +				 value, sizeof(*value), buflen);	\  }  #define wlp_get_sparse(type, type_code, name) \ @@ -313,35 +357,8 @@ static ssize_t wlp_get_##name(struct wlp *wlp,				\  			      struct wlp_attr_##name *attr,		\  			      type_val *value, ssize_t buflen)		\  {									\ -	struct device *dev = &wlp->rc->uwb_dev.dev;			\ -	size_t len;							\ -	if (buflen < 0)							\ -		return -EINVAL;						\ -	if (buflen < sizeof(*attr)) {					\ -		dev_err(dev, "WLP: Not enough space in buffer to parse"	\ -			" header.\n");					\ -		return -EIO;						\ -	}								\ -	if (le16_to_cpu(attr->hdr.type) != type_code) {			\ -		dev_err(dev, "WLP: Unexpected attribute type. Got %u, "	\ -			"expected %u.\n", le16_to_cpu(attr->hdr.type),	\ -			type_code);					\ -		return -EINVAL;						\ -	}								\ -	len = le16_to_cpu(attr->hdr.length);				\ -	if (len > max) {						\ -		dev_err(dev, "WLP: Attribute larger than maximum "	\ -			"allowed. Received %zu, max is %d.\n", len,	\ -			(int)max);					\ -		return -EFBIG;						\ -	}								\ -	if (buflen < sizeof(*attr) + len) {				\ -		dev_err(dev, "WLP: Not enough space in buffer to parse "\ -			"variable data.\n");				\ -		return -EIO;						\ -	}								\ -	memcpy(value, (void *) attr + sizeof(*attr), len);		\ -	return sizeof(*attr) + len;					\ +	return wlp_vget_attribute(wlp, (type_code), &attr->hdr, 	\ +			      value, (max), buflen);			\  }  wlp_get(u8, WLP_ATTR_WLP_VER, version) diff --git a/drivers/uwb/wlp/txrx.c b/drivers/uwb/wlp/txrx.c index 7350ed6909f..05dde44b359 100644 --- a/drivers/uwb/wlp/txrx.c +++ b/drivers/uwb/wlp/txrx.c @@ -25,6 +25,7 @@   */  #include <linux/etherdevice.h> +#include <linux/slab.h>  #include <linux/wlp.h>  #include "wlp-internal.h" diff --git a/drivers/uwb/wlp/wlp-lc.c b/drivers/uwb/wlp/wlp-lc.c index 13db739c4e3..7f6a630bf26 100644 --- a/drivers/uwb/wlp/wlp-lc.c +++ b/drivers/uwb/wlp/wlp-lc.c @@ -22,6 +22,7 @@   * FIXME: docs   */  #include <linux/wlp.h> +#include <linux/slab.h>  #include "wlp-internal.h" diff --git a/drivers/uwb/wlp/wss-lc.c b/drivers/uwb/wlp/wss-lc.c index 5913c7a5d92..90accdd54c0 100644 --- a/drivers/uwb/wlp/wss-lc.c +++ b/drivers/uwb/wlp/wss-lc.c @@ -45,6 +45,7 @@   */  #include <linux/etherdevice.h> /* for is_valid_ether_addr */  #include <linux/skbuff.h> +#include <linux/slab.h>  #include <linux/wlp.h>  #include "wlp-internal.h"  |