diff options
Diffstat (limited to 'at76c503-rfmd.c')
-rw-r--r-- | at76c503-rfmd.c | 133 |
1 files changed, 21 insertions, 112 deletions
diff --git a/at76c503-rfmd.c b/at76c503-rfmd.c index 0975ccb..dd324a7 100644 --- a/at76c503-rfmd.c +++ b/at76c503-rfmd.c @@ -1,11 +1,12 @@ /* -*- linux-c -*- */ /* - * at76c503-rfmd.c: + * $Id: at76c503-rfmd.c,v 1.17 2003/12/25 22:40:26 jal2 Exp $ * * Driver for at76c503-based devices based on the Atmel "Fast-Vnet" reference * design using RFMD radio chips * * Copyright (c) 2002 - 2003 Oliver Kurth <oku@masqmail.cx> + * Changes Copyright (c) 2003 Joerg Albert <joerg.albert@gmx.de> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -18,8 +19,8 @@ * This driver contains code specific to Atmel AT76C503 (USB wireless 802.11) * devices which use radio chips from RF Micro Devices (RFMD). Almost * all of the actual driver is handled by the generic at76c503.c module, this - * file mostly just deals with the initial probes and downloading the correct - * firmware to the device before handing it off to at76c503. + * file just registers for the USB ids and passes the correct firmware to + * at76c503. * * History: * @@ -32,16 +33,20 @@ * - Changed default netdev name to "wlan%d" */ +#include <linux/config.h> #include <linux/module.h> #include <linux/usb.h> #include <linux/init.h> +#include <linux/firmware.h> #include "at76c503.h" -#include "usbdfu.h" -/* Include firmware data definition */ - -#include "fw-rfmd-1.101.0-84.h" +/* Include firmware data definition: a dummy or a statically compiled-in fw */ +#ifdef CONFIG_AT76C503_FIRMWARE_DOWNLOAD +# include "fw-empty.h" +#else +# include "fw-pkg-rfmd-1.101.0-84.h" +#endif /* Version Information */ @@ -50,6 +55,11 @@ "Oliver Kurth <oku@masqmail.cx>, Joerg Albert <joerg.albert@gmx.de>, Alex <alex@foogod.com>" #define DRIVER_DESC "Atmel at76c503 (RFMD) Wireless LAN Driver" +/* firmware name to load if above include file contains empty fw only */ +#define FW_NAME DRIVER_NAME "-fw" + +#define BOARDTYPE BOARDTYPE_RFMD + /* USB Device IDs supported by this driver */ #define VENDOR_ID_ATMEL 0x03eb @@ -93,6 +103,7 @@ #define VENDOR_ID_BELKIN_2 0x50d #define PRODUCT_ID_BELKIN_F5D6050_V2 0x50 /* Belkin F5D6050, version 2 */ + static struct usb_device_id dev_table[] = { { USB_DEVICE(VENDOR_ID_ATMEL, PRODUCT_ID_ATMEL_503R ) }, { USB_DEVICE(VENDOR_ID_BELKIN, PRODUCT_ID_BELKIN_F5D6050 ) }, @@ -112,109 +123,7 @@ static struct usb_device_id dev_table[] = { { } }; -/* firmware / config variables */ - -static unsigned char fw_internal[] = FW_503RFMD_INTERNAL; -static unsigned char fw_external[] = FW_503RFMD_EXTERNAL; - -static int board_type = BOARDTYPE_RFMD; - -/*---------------------------------------------------------------------------*/ - -MODULE_DEVICE_TABLE (usb, dev_table); - -/* Module paramaters */ - -static char netdev_name[IFNAMSIZ+1] = "wlan%d"; -MODULE_PARM(netdev_name, "c" __MODULE_STRING(IFNAMSIZ)); -MODULE_PARM_DESC(netdev_name, - "network device name (default is wlan%d)"); - -/* local function prototypes */ - -static void *at76c50x_probe(struct usb_device *dev, unsigned int ifnum, - const struct usb_device_id *id); -static void at76c50x_disconnect(struct usb_device *dev, void *ptr); - -/* structure for registering this driver with the usb subsystem */ - -static struct usb_driver module_usb = { -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20) - owner: THIS_MODULE, -#endif - name: DRIVER_NAME, - probe: at76c50x_probe, - disconnect: at76c50x_disconnect, - id_table: dev_table, -}; - -/* structure for registering this firmware with the usbdfu subsystem */ - -static struct usbdfu_info module_usbdfu = { - name: DRIVER_NAME, - id_table: dev_table, - fw_buf: fw_internal, - fw_buf_len: sizeof(fw_internal), - post_download_hook: at76c503_usbdfu_post -}; -/* Module and USB entry points */ - -static void *at76c50x_probe(struct usb_device *udev, unsigned int ifnum, const struct usb_device_id *id) -{ - if (usbdfu_in_use(udev, ifnum)) { - /* the device is in DFU mode and usbdfu.c is handling it */ - return NULL; - } - - return at76c503_do_probe(THIS_MODULE, udev, fw_external, sizeof(fw_external), board_type, netdev_name); -} - -static void at76c50x_disconnect(struct usb_device *udev, void *ptr) -{ - info("%s disconnected", ((struct at76c503 *)ptr)->netdev->name); - at76c503_delete_device(ptr); -} - -static int __init mod_init(void) -{ - int result; - - info(DRIVER_DESC " " DRIVER_VERSION); - - /* HZ became a variable with 2.4.23-preX */ - module_usbdfu.reset_delay=2*HZ; - - /* register with usbdfu so that the firmware will be automatically - * downloaded to the device on detection */ - result = usbdfu_register(&module_usbdfu); - if (result < 0) { - err("usbdfu_register failed (status %d)", result); - return -1; - } - - /* register this driver with the USB subsystem */ - result = usb_register(&module_usb); - if (result < 0) { - err("usb_register failed (status %d)", result); - usbdfu_deregister(&module_usbdfu); - return -1; - } - - return 0; -} - -static void __exit mod_exit(void) -{ - info(DRIVER_DESC " " DRIVER_VERSION " unloading"); - /* deregister this driver with the USB subsystem */ - usbdfu_deregister(&module_usbdfu); - usb_deregister(&module_usb); -} - -module_init (mod_init); -module_exit (mod_exit); - -MODULE_AUTHOR(DRIVER_AUTHOR); -MODULE_DESCRIPTION(DRIVER_DESC); -MODULE_LICENSE("GPL"); +/* jal: not really good style to include a .c file, but all but the above + is constant in the at76c503-*.c files ... */ +#include "at76c503-fw_skel.c" |