summaryrefslogtreecommitdiff
path: root/at76c503-rfmd.c
diff options
context:
space:
mode:
Diffstat (limited to 'at76c503-rfmd.c')
-rw-r--r--at76c503-rfmd.c133
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"