|
|
|
@ -450,6 +450,459 @@ static struct usb_device_id usb_prism_tbl[] = { |
|
|
|
|
{PRISM_USB_DEVICE(0x045e, 0x006e, "Microsoft MN510 Wireless USB Adapter")}, |
|
|
|
|
{PRISM_USB_DEVICE(0x0967, 0x0204, "Acer Warplink USB Adapter")}, |
|
|
|
|
{PRISM_USB_DEVICE(0x0cde, 0x0002, "Z-Com 725/726 Prism2.5 USB/USB Integrated")}, |
|
|
|
|
/* src/prism2/driver/prism2sta.c
|
|
|
|
|
* |
|
|
|
|
* Implements the station functionality for prism2 |
|
|
|
|
* |
|
|
|
|
* Copyright (C) 1999 AbsoluteValue Systems, Inc. All Rights Reserved. |
|
|
|
|
* -------------------------------------------------------------------- |
|
|
|
|
* |
|
|
|
|
* linux-wlan |
|
|
|
|
* |
|
|
|
|
* The contents of this file are subject to the Mozilla Public |
|
|
|
|
* License Version 1.1 (the "License"); you may not use this file |
|
|
|
|
* except in compliance with the License. You may obtain a copy of |
|
|
|
|
* the License at http://www.mozilla.org/MPL/
|
|
|
|
|
* |
|
|
|
|
* Software distributed under the License is distributed on an "AS |
|
|
|
|
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or |
|
|
|
|
* implied. See the License for the specific language governing |
|
|
|
|
* rights and limitations under the License. |
|
|
|
|
* |
|
|
|
|
* Alternatively, the contents of this file may be used under the |
|
|
|
|
* terms of the GNU Public License version 2 (the "GPL"), in which |
|
|
|
|
* case the provisions of the GPL are applicable instead of the |
|
|
|
|
* above. If you wish to allow the use of your version of this file |
|
|
|
|
* only under the terms of the GPL and not to allow others to use |
|
|
|
|
* your version of this file under the MPL, indicate your decision |
|
|
|
|
* by deleting the provisions above and replace them with the notice |
|
|
|
|
* and other provisions required by the GPL. If you do not delete |
|
|
|
|
* the provisions above, a recipient may use your version of this |
|
|
|
|
* file under either the MPL or the GPL. |
|
|
|
|
* |
|
|
|
|
* -------------------------------------------------------------------- |
|
|
|
|
* |
|
|
|
|
* Inquiries regarding the linux-wlan Open Source project can be |
|
|
|
|
* made directly to: |
|
|
|
|
* |
|
|
|
|
* AbsoluteValue Systems Inc. |
|
|
|
|
* info@linux-wlan.com |
|
|
|
|
* http://www.linux-wlan.com
|
|
|
|
|
* |
|
|
|
|
* -------------------------------------------------------------------- |
|
|
|
|
* |
|
|
|
|
* Portions of the development of this software were funded by
|
|
|
|
|
* Intersil Corporation as part of PRISM(R) chipset product development. |
|
|
|
|
* |
|
|
|
|
* -------------------------------------------------------------------- |
|
|
|
|
* |
|
|
|
|
* This file implements the module and linux pcmcia routines for the |
|
|
|
|
* prism2 driver. |
|
|
|
|
* |
|
|
|
|
* -------------------------------------------------------------------- |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
/*================================================================*/ |
|
|
|
|
/* System Includes */ |
|
|
|
|
|
|
|
|
|
#include <linux/config.h> |
|
|
|
|
#define WLAN_DBVAR prism2_debug |
|
|
|
|
#include <linux/version.h> |
|
|
|
|
|
|
|
|
|
#include <linux/module.h> |
|
|
|
|
#include <linux/kernel.h> |
|
|
|
|
#include <linux/sched.h> |
|
|
|
|
#include <linux/types.h> |
|
|
|
|
#include <linux/slab.h> |
|
|
|
|
#include <linux/wireless.h> |
|
|
|
|
#include <linux/netdevice.h> |
|
|
|
|
#include <linux/tqueue.h> |
|
|
|
|
#include <asm/io.h> |
|
|
|
|
#include <linux/delay.h> |
|
|
|
|
#include <asm/byteorder.h> |
|
|
|
|
|
|
|
|
|
#include <wlan/wlan_compat.h> |
|
|
|
|
|
|
|
|
|
#if (WLAN_HOSTIF == WLAN_PCMCIA) |
|
|
|
|
#include <pcmcia/version.h> |
|
|
|
|
#include <pcmcia/cs_types.h> |
|
|
|
|
#include <pcmcia/cs.h> |
|
|
|
|
#include <pcmcia/cistpl.h> |
|
|
|
|
#include <pcmcia/ds.h> |
|
|
|
|
#include <pcmcia/cisreg.h> |
|
|
|
|
#include <pcmcia/driver_ops.h> |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
#if ((WLAN_HOSTIF == WLAN_PLX) || (WLAN_HOSTIF == WLAN_PCI)) |
|
|
|
|
#include <linux/ioport.h> |
|
|
|
|
#include <linux/pci.h> |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
#if (WLAN_HOSTIF == WLAN_USB) |
|
|
|
|
#include <linux/usb.h> |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
/*================================================================*/ |
|
|
|
|
/* Project Includes */ |
|
|
|
|
|
|
|
|
|
#include <wlan/version.h> |
|
|
|
|
#include <wlan/p80211types.h> |
|
|
|
|
#include <wlan/p80211hdr.h> |
|
|
|
|
#include <wlan/p80211mgmt.h> |
|
|
|
|
#include <wlan/p80211conv.h> |
|
|
|
|
#include <wlan/p80211msg.h> |
|
|
|
|
#include <wlan/p80211netdev.h> |
|
|
|
|
#include <wlan/p80211req.h> |
|
|
|
|
#include <wlan/p80211metadef.h> |
|
|
|
|
#include <wlan/p80211metastruct.h> |
|
|
|
|
#include <prism2/hfa384x.h> |
|
|
|
|
#include <prism2/prism2mgmt.h> |
|
|
|
|
|
|
|
|
|
/*================================================================*/ |
|
|
|
|
/* Local Constants */ |
|
|
|
|
|
|
|
|
|
#if (WLAN_HOSTIF == WLAN_PLX) |
|
|
|
|
#define PLX_ATTR_SIZE 0x1000 /* Attribute memory size - 4K bytes */ |
|
|
|
|
#define COR_OFFSET 0x3e0 /* COR attribute offset of Prism2 PC card */ |
|
|
|
|
#define COR_VALUE 0x41 /* Enable PC card with irq in level trigger */ |
|
|
|
|
#define PLX_INTCSR 0x4c /* Interrupt Control and Status Register */ |
|
|
|
|
#define PLX_INTCSR_INTEN (1<<6) /* Interrupt Enable bit */ |
|
|
|
|
#define PLX_MIN_ATTR_LEN 512 /* at least 2 x 256 is needed for CIS */ |
|
|
|
|
|
|
|
|
|
/* 3Com 3CRW777A (PLX) board ID */ |
|
|
|
|
#define PCIVENDOR_3COM 0x10B7 |
|
|
|
|
#define PCIDEVICE_AIRCONNECT 0x7770 |
|
|
|
|
|
|
|
|
|
/* Eumitcom PCI WL11000 PCI Adapter (PLX) board device+vendor ID */ |
|
|
|
|
#define PCIVENDOR_EUMITCOM 0x1638UL |
|
|
|
|
#define PCIDEVICE_WL11000 0x1100UL |
|
|
|
|
|
|
|
|
|
/* Global Sun Tech GL24110P PCI Adapter (PLX) board device+vendor ID */ |
|
|
|
|
#define PCIVENDOR_GLOBALSUN 0x16abUL |
|
|
|
|
#define PCIDEVICE_GL24110P 0x1101UL |
|
|
|
|
#define PCIDEVICE_GL24110P_ALT 0x1102UL |
|
|
|
|
|
|
|
|
|
/* Netgear MA301 PCI Adapter (PLX) board device+vendor ID */ |
|
|
|
|
#define PCIVENDOR_NETGEAR 0x1385UL |
|
|
|
|
#define PCIDEVICE_MA301 0x4100UL |
|
|
|
|
|
|
|
|
|
/* US Robotics USR2410 PCI Adapter (PLX) board device+vendor ID */ |
|
|
|
|
#define PCIVENDOR_USROBOTICS 0x16ecUL |
|
|
|
|
#define PCIDEVICE_USR2410 0x3685UL |
|
|
|
|
|
|
|
|
|
/* Linksys WPC11 card with the WDT11 adapter (PLX) board device+vendor ID */ |
|
|
|
|
#define PCIVENDOR_Linksys 0x16abUL |
|
|
|
|
#define PCIDEVICE_Wpc11Wdt11 0x1102UL |
|
|
|
|
|
|
|
|
|
/* National Datacomm Corp SOHOware Netblaster II PCI */ |
|
|
|
|
#define PCIVENDOR_NDC 0x15e8UL |
|
|
|
|
#define PCIDEVICE_NCP130_PLX 0x0130UL |
|
|
|
|
#define PCIDEVICE_NCP130_ASIC 0x0131UL |
|
|
|
|
|
|
|
|
|
/* NDC NCP130_PLX is also sold by Corega. Their name is CGWLPCIA11 */ |
|
|
|
|
#define PCIVENDOR_COREGA PCIVENDOR_NDC |
|
|
|
|
#define PCIDEVICE_CGWLPCIA11 PCIDEVICE_NCP130_PLX |
|
|
|
|
|
|
|
|
|
/* PCI Class & Sub-Class code, Network-'Other controller' */ |
|
|
|
|
#define PCI_CLASS_NETWORK_OTHERS 0x280 |
|
|
|
|
#endif /* WLAN_PLX */ |
|
|
|
|
|
|
|
|
|
#if (WLAN_HOSTIF == WLAN_PCI) |
|
|
|
|
#define PCI_TYPE (PCI_USES_MEM | PCI_ADDR0 | PCI_NO_ACPI_WAKE) |
|
|
|
|
#define PCI_SIZE 0x1000 /* Memory size - 4K bytes */ |
|
|
|
|
|
|
|
|
|
/* ISL3874A 11Mb/s WLAN controller */ |
|
|
|
|
#define PCIVENDOR_INTERSIL 0x1260UL |
|
|
|
|
#define PCIDEVICE_ISL3874 0x3873UL /* [MSM] yeah I know...the ID says |
|
|
|
|
3873. Trust me, it's a 3874. */ |
|
|
|
|
|
|
|
|
|
/* PCI Class & Sub-Class code, Network-'Other controller' */ |
|
|
|
|
#define PCI_CLASS_NETWORK_OTHERS 0x280 |
|
|
|
|
|
|
|
|
|
#endif /* WLAN_PCI */ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*================================================================*/ |
|
|
|
|
/* Local Macros */ |
|
|
|
|
|
|
|
|
|
/*================================================================*/ |
|
|
|
|
/* Local Types */ |
|
|
|
|
|
|
|
|
|
/*================================================================*/ |
|
|
|
|
/* Local Static Definitions */ |
|
|
|
|
|
|
|
|
|
#if (WLAN_HOSTIF == WLAN_PCMCIA) |
|
|
|
|
#define DRIVER_SUFFIX "_cs" |
|
|
|
|
#elif (WLAN_HOSTIF == WLAN_PLX) |
|
|
|
|
#define DRIVER_SUFFIX "_plx" |
|
|
|
|
typedef char* dev_info_t; |
|
|
|
|
#elif (WLAN_HOSTIF == WLAN_PCI) |
|
|
|
|
#define DRIVER_SUFFIX "_pci" |
|
|
|
|
typedef char* dev_info_t; |
|
|
|
|
#elif (WLAN_HOSTIF == WLAN_USB) |
|
|
|
|
#define DRIVER_SUFFIX "_usb" |
|
|
|
|
typedef char* dev_info_t; |
|
|
|
|
#else |
|
|
|
|
#error "HOSTIF unsupported or undefined!" |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
static char *version = "prism2" DRIVER_SUFFIX ".o: " WLAN_RELEASE; |
|
|
|
|
static dev_info_t dev_info = "prism2" DRIVER_SUFFIX; |
|
|
|
|
|
|
|
|
|
#if (WLAN_HOSTIF == WLAN_PCMCIA) |
|
|
|
|
|
|
|
|
|
static dev_link_t *dev_list = NULL; /* head of instance list */ |
|
|
|
|
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
/*-----------------------------------------------------------------*/
|
|
|
|
|
#if (WLAN_HOSTIF == WLAN_PLX || WLAN_HOSTIF == WLAN_PCI) |
|
|
|
|
#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)) |
|
|
|
|
/* NOTE: The pci code in this driver is written to the
|
|
|
|
|
* 2.4.x (or some 2.3.x and newer) pci support. The declarations |
|
|
|
|
* inside this #if block are to provide backward compatibility to 2.2.x. |
|
|
|
|
* NOTE2: If you want to modify the pci support, please make sure you do
|
|
|
|
|
* it in a 2.4.x compliant way. |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
struct pci_driver_mapping { |
|
|
|
|
struct pci_dev *dev; |
|
|
|
|
struct pci_driver *drv; |
|
|
|
|
void *driver_data; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
struct pci_device_id |
|
|
|
|
{ |
|
|
|
|
unsigned int vendor, device; |
|
|
|
|
unsigned int subvendor, subdevice; |
|
|
|
|
unsigned int class, class_mask; |
|
|
|
|
unsigned long driver_data; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
struct pci_driver |
|
|
|
|
{ |
|
|
|
|
struct {int a;} dummy; |
|
|
|
|
char *name; |
|
|
|
|
const struct pci_device_id *id_table; /* NULL if wants all devices */ |
|
|
|
|
int (*probe) (struct pci_dev *dev, const struct pci_device_id *id); |
|
|
|
|
void (*remove) (struct pci_dev *dev); |
|
|
|
|
int (*save_state) (struct pci_dev *dev, u32 state); |
|
|
|
|
int (*suspend)(struct pci_dev *dev, u32 state); |
|
|
|
|
int (*resume) (struct pci_dev *dev); |
|
|
|
|
int (*enable_wake) (struct pci_dev *dev, u32 state, int enable); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
#define PCI_MAX_MAPPINGS 16 |
|
|
|
|
static struct pci_driver_mapping drvmap [PCI_MAX_MAPPINGS] = { { NULL, } , }; |
|
|
|
|
|
|
|
|
|
#define PCI_ANY_ID 0xffff |
|
|
|
|
|
|
|
|
|
static int pci_register_driver(struct pci_driver *drv); |
|
|
|
|
static void pci_unregister_driver(struct pci_driver *drv); |
|
|
|
|
static int pci_populate_drvmap (struct pci_dev *dev, struct pci_driver *drv); |
|
|
|
|
static void *pci_get_drvdata (struct pci_dev *dev); |
|
|
|
|
static void pci_set_drvdata (struct pci_dev *dev, void *driver_data); |
|
|
|
|
|
|
|
|
|
/* no-ops */ |
|
|
|
|
#define pci_enable_device(a) 0 |
|
|
|
|
#define pci_disable_device(a) 0 |
|
|
|
|
#define request_mem_region(x,y,z) (1) |
|
|
|
|
#define release_mem_region(x,y) do {} while (0) |
|
|
|
|
|
|
|
|
|
#ifndef pci_resource_start |
|
|
|
|
static unsigned long pci_resource_len (struct pci_dev *dev, int n_base) |
|
|
|
|
{ |
|
|
|
|
u32 l, sz; |
|
|
|
|
int reg = PCI_BASE_ADDRESS_0 + (n_base << 2); |
|
|
|
|
|
|
|
|
|
/* XXX temporarily disable I/O and memory decoding for this device? */ |
|
|
|
|
|
|
|
|
|
pci_read_config_dword (dev, reg, &l); |
|
|
|
|
if (l == 0xffffffff) |
|
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
pci_write_config_dword (dev, reg, ~0); |
|
|
|
|
pci_read_config_dword (dev, reg, &sz); |
|
|
|
|
pci_write_config_dword (dev, reg, l); |
|
|
|
|
|
|
|
|
|
if (!sz || sz == 0xffffffff) |
|
|
|
|
return 0; |
|
|
|
|
if ((l & PCI_BASE_ADDRESS_SPACE) == PCI_BASE_ADDRESS_SPACE_MEMORY) { |
|
|
|
|
sz = ~(sz & PCI_BASE_ADDRESS_MEM_MASK); |
|
|
|
|
} else { |
|
|
|
|
sz = ~(sz & PCI_BASE_ADDRESS_IO_MASK) & 0xffff; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return sz + 1; |
|
|
|
|
} |
|
|
|
|
#define pci_resource_start(dev, i) \ |
|
|
|
|
(((dev)->base_address[i] & PCI_BASE_ADDRESS_SPACE) ? \
|
|
|
|
|
((dev)->base_address[i] & PCI_BASE_ADDRESS_IO_MASK) : \
|
|
|
|
|
((dev)->base_address[i] & PCI_BASE_ADDRESS_MEM_MASK)) |
|
|
|
|
#define pci_resource_end(dev,bar) \ |
|
|
|
|
(pci_resource_len((dev),(bar)) == 0 ? \
|
|
|
|
|
pci_resource_start(dev,bar) : \
|
|
|
|
|
(pci_resource_start(dev,bar) + pci_resource_len((dev),(bar)) - 1) |
|
|
|
|
#define pci_resource_flags(dev, i) \ |
|
|
|
|
(dev->base_address[i] & IORESOURCE_IO) |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
#endif /* (WLAN_HOSTIF == WLAN_PLX || WLAN_HOSTIF == WLAN_PCI) */ |
|
|
|
|
#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)) */ |
|
|
|
|
/*-----------------------------------------------------------------*/
|
|
|
|
|
|
|
|
|
|
#if (WLAN_HOSTIF == WLAN_PLX || WLAN_HOSTIF == WLAN_PCI) |
|
|
|
|
static int prism2sta_suspend_pci(struct pci_dev *pdev, u32 state); |
|
|
|
|
static int prism2sta_resume_pci(struct pci_dev *pdev); |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
#if (WLAN_HOSTIF == WLAN_PLX) |
|
|
|
|
static struct pci_device_id plx_id_tbl[] = { |
|
|
|
|
{ |
|
|
|
|
PCIVENDOR_EUMITCOM, PCIDEVICE_WL11000, |
|
|
|
|
PCI_ANY_ID, PCI_ANY_ID, |
|
|
|
|
0, 0, |
|
|
|
|
/* Driver data, we just put the name here */ |
|
|
|
|
(unsigned long)"Eumitcom WL11000 PCI(PLX) card"
|
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
PCIVENDOR_GLOBALSUN, PCIDEVICE_GL24110P, |
|
|
|
|
PCI_ANY_ID, PCI_ANY_ID, |
|
|
|
|
0, 0,
|
|
|
|
|
/* Driver data, we just put the name here */ |
|
|
|
|
(unsigned long)"Global Sun Tech GL24110P PCI(PLX) card" |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
PCIVENDOR_GLOBALSUN, PCIDEVICE_GL24110P_ALT, |
|
|
|
|
PCI_ANY_ID, PCI_ANY_ID, |
|
|
|
|
0, 0,
|
|
|
|
|
/* Driver data, we just put the name here */ |
|
|
|
|
(unsigned long)"Global Sun Tech GL24110P PCI(PLX) card" |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
PCIVENDOR_NETGEAR, PCIDEVICE_MA301, |
|
|
|
|
PCI_ANY_ID, PCI_ANY_ID, |
|
|
|
|
0, 0,
|
|
|
|
|
/* Driver data, we just put the name here */ |
|
|
|
|
(unsigned long)"Global Sun Tech GL24110P PCI(PLX) card" |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
PCIVENDOR_USROBOTICS, PCIDEVICE_USR2410, |
|
|
|
|
PCI_ANY_ID, PCI_ANY_ID, |
|
|
|
|
0, 0, |
|
|
|
|
/* Driver data, we just put the name here */ |
|
|
|
|
(unsigned long)"US Robotics USR2410 PCI(PLX) card"
|
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
PCIVENDOR_Linksys, PCIDEVICE_Wpc11Wdt11, |
|
|
|
|
PCI_ANY_ID, PCI_ANY_ID, |
|
|
|
|
0, 0, |
|
|
|
|
/* Driver data, we just put the name here */ |
|
|
|
|
(unsigned long)"Linksys WPC11 with WDT11 PCI(PLX) adapter"
|
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
PCIVENDOR_NDC, PCIDEVICE_NCP130_PLX, |
|
|
|
|
PCI_ANY_ID, PCI_ANY_ID, |
|
|
|
|
0, 0,
|
|
|
|
|
/* Driver data, we just put the name here */ |
|
|
|
|
(unsigned long)"NDC Netblaster II PCI(PLX)" |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
PCIVENDOR_NDC, PCIDEVICE_NCP130_ASIC, |
|
|
|
|
PCI_ANY_ID, PCI_ANY_ID, |
|
|
|
|
0, 0,
|
|
|
|
|
/* Driver data, we just put the name here */ |
|
|
|
|
(unsigned long)"NDC Netblaster II PCI(TMC7160)" |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
PCIVENDOR_3COM, PCIDEVICE_AIRCONNECT,
|
|
|
|
|
PCI_ANY_ID, PCI_ANY_ID, |
|
|
|
|
0, 0,
|
|
|
|
|
/* Driver data, we just put the name here */ |
|
|
|
|
(unsigned long)"3Com AirConnect PCI 802.11b 11Mb/s WLAN Controller" |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
0, 0, 0, 0, 0, 0, 0 |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
MODULE_DEVICE_TABLE(pci, plx_id_tbl); |
|
|
|
|
|
|
|
|
|
/* Function declared here because of ptr reference below */ |
|
|
|
|
static int prism2sta_probe_plx(struct pci_dev *pdev,
|
|
|
|
|
const struct pci_device_id *id); |
|
|
|
|
static void prism2sta_remove_plx(struct pci_dev *pdev); |
|
|
|
|
|
|
|
|
|
struct pci_driver prism2_plx_drv_id = { |
|
|
|
|
name: "prism2_plx", |
|
|
|
|
id_table: plx_id_tbl, |
|
|
|
|
probe: prism2sta_probe_plx, |
|
|
|
|
remove: prism2sta_remove_plx, |
|
|
|
|
#ifdef CONFIG_PM |
|
|
|
|
suspend: prism2sta_suspend_pci, |
|
|
|
|
resume: prism2sta_resume_pci, |
|
|
|
|
#endif |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
#endif /* WLAN_PLX */ |
|
|
|
|
|
|
|
|
|
#if (WLAN_HOSTIF == WLAN_PCI) |
|
|
|
|
|
|
|
|
|
static struct pci_device_id pci_id_tbl[] = { |
|
|
|
|
{ |
|
|
|
|
PCIVENDOR_INTERSIL, PCIDEVICE_ISL3874,
|
|
|
|
|
PCI_ANY_ID, PCI_ANY_ID, |
|
|
|
|
0, 0,
|
|
|
|
|
/* Driver data, we just put the name here */ |
|
|
|
|
(unsigned long)"Intersil Prism2.5 ISL3874 11Mb/s WLAN Controller" |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
0, 0, 0, 0, 0, 0, 0 |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
MODULE_DEVICE_TABLE(pci, pci_id_tbl); |
|
|
|
|
|
|
|
|
|
/* Function declared here because of ptr reference below */ |
|
|
|
|
static int prism2sta_probe_pci(struct pci_dev *pdev,
|
|
|
|
|
const struct pci_device_id *id); |
|
|
|
|
static void prism2sta_remove_pci(struct pci_dev *pdev); |
|
|
|
|
|
|
|
|
|
struct pci_driver prism2_pci_drv_id = { |
|
|
|
|
name: "prism2_pci", |
|
|
|
|
id_table: pci_id_tbl, |
|
|
|
|
probe: prism2sta_probe_pci, |
|
|
|
|
remove: prism2sta_remove_pci, |
|
|
|
|
#ifdef CONFIG_PM |
|
|
|
|
suspend: prism2sta_suspend_pci, |
|
|
|
|
resume: prism2sta_resume_pci, |
|
|
|
|
#endif |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
#endif /* WLAN_PCI */ |
|
|
|
|
|
|
|
|
|
#if (WLAN_HOSTIF == WLAN_USB) |
|
|
|
|
|
|
|
|
|
#define PRISM_USB_DEVICE(vid, pid, name) \ |
|
|
|
|
USB_DEVICE(vid, pid), \
|
|
|
|
|
driver_info: (unsigned long) name |
|
|
|
|
|
|
|
|
|
static struct usb_device_id usb_prism_tbl[] = { |
|
|
|
|
{PRISM_USB_DEVICE(0x09aa, 0x3642, "Prism2.x 11Mbps WLAN USB Adapter")}, |
|
|
|
|
{PRISM_USB_DEVICE(0x1668, 0x0408, "Actiontec Prism2.5 11Mbps WLAN USB Adapter")}, |
|
|
|
|
{PRISM_USB_DEVICE(0x1668, 0x0421, "Actiontec Prism2.5 11Mbps WLAN USB Adapter")}, |
|
|
|
|
{PRISM_USB_DEVICE(0x066b, 0x2212, "Linksys WUSB11v2.5 11Mbps WLAN USB Adapter")}, |
|
|
|
|
{PRISM_USB_DEVICE(0x067c, 0x1022, "Siemens SpeedStream 1022 11Mbps WLAN USB Adapter")}, |
|
|
|
|
{PRISM_USB_DEVICE(0x049f, 0x0033, "Compaq/Intel W100 PRO/Wireless 11Mbps multiport WLAN Adapter")}, |
|
|
|
|
{PRISM_USB_DEVICE(0x049f, 0x0076, "Compaq/Intel W200 PRO/Wireless 11Mbps multiport WLAN Adapter")}, |
|
|
|
|
{PRISM_USB_DEVICE(0x0411, 0x0016, "Melco WLI-USB-S11 11Mbps WLAN Adapter")}, |
|
|
|
|
{PRISM_USB_DEVICE(0x08de, 0x7a01, "PRISM25 IEEE 802.11 Mini USB Adapter")}, |
|
|
|
|
{PRISM_USB_DEVICE(0x8086, 0x1111, "Intel PRO/Wireless 2011B LAN USB Adapter")}, |
|
|
|
|
{PRISM_USB_DEVICE(0x0d8e, 0x7a01, "PRISM25 IEEE 802.11 Mini USB Adapter")}, |
|
|
|
|
{PRISM_USB_DEVICE(0x045e, 0x006e, "Microsoft MN510 Wireless USB Adapter")}, |
|
|
|
|
{PRISM_USB_DEVICE(0x0967, 0x0204, "Acer Warplink USB Adapter")}, |
|
|
|
|
{PRISM_USB_DEVICE(0x0cde, 0x0002, "Z-Com 725/726 Prism2.5 USB/USB Integrated")}, |
|
|
|
|
|
|
|
|
|
{ /* terminator */ } |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|