diff options
Diffstat (limited to 'at76c503-i3863.c')
-rw-r--r-- | at76c503-i3863.c | 149 |
1 files changed, 23 insertions, 126 deletions
diff --git a/at76c503-i3863.c b/at76c503-i3863.c index b995934..812db8e 100644 --- a/at76c503-i3863.c +++ b/at76c503-i3863.c @@ -1,11 +1,12 @@ /* -*- linux-c -*- */ /* - * at76c503-i3863.c: + * $Id: at76c503-i3863.c,v 1.6 2003/12/25 22:40:26 jal2 Exp $ * * Driver for at76c503-based devices based on the Atmel "Fast-Vnet" reference - * design using the Intersil 3863 radio chip + * design using a Intersil 3863 radio chip * * 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 @@ -16,40 +17,38 @@ * This driver is derived from usb-skeleton.c * * This driver contains code specific to Atmel AT76C503 (USB wireless 802.11) - * devices which use the Intersil 3863 radio chip. 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. - * - * History: - * - * 2003_02_15 0.1: (alex) - * - created 3863-specific driver file - * - * 2003_02_18 0.2: (alex) - * - Reduced duplicated code and moved as much as possible into at76c503.c - * - Changed default netdev name to "wlan%d" + * devices which use the Intersil 3863 radio chip. Almost + * all of the actual driver is handled by the generic at76c503.c module, this + * file just registers for the USB ids and passes the correct firmware to + * at76c503. */ +#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-i3863.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-i3863.h" +#endif /* Version Information */ #define DRIVER_NAME "at76c503-i3863" #define DRIVER_AUTHOR \ "Oliver Kurth <oku@masqmail.cx>, Joerg Albert <joerg.albert@gmx.de>, Alex <alex@foogod.com>" -#define DRIVER_DESC "Atmel at76c503 (Intersil 3863) Wireless LAN Driver" +#define DRIVER_DESC "Atmel at76c503 (i3863) Wireless LAN Driver" -/* USB Device IDs supported by this driver */ +#define BOARDTYPE BOARDTYPE_INTERSIL + +/* firmware name to load if above include file contains empty fw only */ +#define FW_NAME DRIVER_NAME "-fw" #define VENDOR_ID_ATMEL 0x03eb #define PRODUCT_ID_ATMEL_503_I3863 0x7604 /* Generic AT76C503/3863 device */ @@ -63,109 +62,7 @@ static struct usb_device_id dev_table[] = { { } }; -/* firmware / config variables */ - -static unsigned char fw_internal[] = FW_I3863_INTERNAL; -static unsigned char fw_external[] = FW_I3863_EXTERNAL; - -static int board_type = BOARDTYPE_INTERSIL; - -/*---------------------------------------------------------------------------*/ - -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" |