|
|
|
@ -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 */ }
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|