Commit 88c3cbad authored by Linus Torvalds's avatar Linus Torvalds

Merge bk://gkernel.bkbits.net/net-drivers-2.6

into ppc970.osdl.org:/home/torvalds/v2.6/linux
parents 4e0162be 4bef4172
Linux* Base Driver for the Intel(R) PRO/100 Family of Adapters Linux* Base Driver for the Intel(R) PRO/100 Family of Adapters
============================================================== ==============================================================
November 19, 2002 March 15, 2004
Contents Contents
...@@ -9,9 +9,6 @@ Contents ...@@ -9,9 +9,6 @@ Contents
- In This Release - In This Release
- Supported Adapters - Supported Adapters
- Command Line Parameters
- CPU Cycle Saver
- Additional Configurations
- Support - Support
...@@ -19,64 +16,13 @@ In This Release ...@@ -19,64 +16,13 @@ In This Release
=============== ===============
This file describes the Linux* Base Driver for the Intel(R) PRO/100 Family of This file describes the Linux* Base Driver for the Intel(R) PRO/100 Family of
Adapters, version 2.2.x. This driver includes support for Itanium(TM)-based Adapters, version 3.x.x. This driver includes support for Itanium(TM)-based
systems. systems.
Supported Adapters Supported Adapters
================== ==================
The following Intel network adapters are compatible with the drivers
in this release:
Controller Adapter Name Board IDs
---------- ------------ ---------
82558 PRO/100+ PCI Adapter 668081-xxx, 689661-xxx
82558 PRO/100+ Management Adapter 691334-xxx, 701738-xxx,
721383-xxx
82558 PRO/100+ Dual Port Server Adapter 714303-xxx, 711269-xxx,
A28276-xxx
82558 PRO/100+ PCI Server Adapter 710550-xxx
82550 PRO/100 S Server Adapter 752438-xxx (82550)
82559 A56831-xxx, A10563-xxx,
A12171-xxx, A12321-xxx,
A12320-xxx, A12170-xxx
748568-xxx (82559)
748565-xxx (82559)
82550 PRO/100 S Desktop Adapter 751767-xxx (82550)
82559 748592-xxx, A12167-xxx,
A12318-xxx, A12317-xxx,
A12165-xxx
748569-xxx (82559)
82559 PRO/100+ Server Adapter 729757-xxx
82559 PRO/100 S Management Adapter 748566-xxx, 748564-xxx
82550 PRO/100 S Dual Port Server Adapter A56831-xxx
82551 PRO/100 M Desktop Adapter A80897-xxx
PRO/100 S Advanced Management Adapter 747842-xxx, 745171-xxx
CNR PRO/100 VE Desktop Adapter A10386-xxx, A10725-xxx,
A23801-xxx, A19716-xxx
PRO/100 VM Desktop Adapter A14323-xxx, A19725-xxx,
A23801-xxx, A22220-xxx,
A23796-xxx
To verify that your adapter is supported, find the board ID number on the To verify that your adapter is supported, find the board ID number on the
adapter. Look for a label that has a barcode and a number in the format adapter. Look for a label that has a barcode and a number in the format
A12345-001. Match this to the list of numbers above. A12345-001. Match this to the list of numbers above.
...@@ -91,143 +37,6 @@ For the latest Intel PRO/100 network driver for Linux, see: ...@@ -91,143 +37,6 @@ For the latest Intel PRO/100 network driver for Linux, see:
http://downloadfinder.intel.com/scripts-df/support_intel.asp http://downloadfinder.intel.com/scripts-df/support_intel.asp
Command Line Parameters
=======================
If the driver is built as a module, the following optional parameters are
used by entering them on the command line with the modprobe or insmod command
using this syntax:
modprobe e100 [<option>=<VAL1>,<VAL2>,...]
insmod e100 [<option>=<VAL1>,<VAL2>,...]
For example, with two Intel PRO/100 PCI adapters, entering:
modprobe e100 TxDescriptors=32,128
loads the e100 driver with 32 TX resources for the first adapter and 128 TX
resources for the second adapter. This configuration favors the second
adapter. The driver supports up to 16 network adapters concurrently.
The default value for each parameter is generally the recommended setting,
unless otherwise noted.
NOTE: Giving any command line option the value "-1" causes the driver to use
the appropriate default value for that option, as if no value was
specified.
BundleMax
Valid Range: 1-65535
Default Value: 6
This parameter holds the maximum number of small packets (less than 128
bytes) in a bundle. Suggested values range from 2 to 10. See "CPU Cycle
Saver."
BundleSmallFr
Valid Range: 0-1 (0=off, 1=on)
Default Value: 0
The value 1 (on) causes small packets (less than 128 bytes) to be bundled.
See "CPU Cycle Saver."
e100_speed_duplex
Valid Range: 0-4 (1=10half;2=10full;3=100half;4=100full)
Default Value: 0
The default value of 0 sets the adapter to auto-negotiate. Other values
set the adapter to forced speed and duplex.
Example usage: insmod e100.o e100_speed_duplex=4,4 (for two adapters)
flow_control
Valid Range: 0-1 (0=off, 1=on)
Default Value: 0
This parameter controls the automatic generation(Tx) and response(Rx) to
Ethernet PAUSE frames. flow_control should NOT be set to 1 when the
adapter is connected to an interface that does not support Ethernet PAUSE
frames and when the e100_speed_duplex parameter is NOT set to zero.
IntDelay
Valid Range: 0-65535 (0=off)
Default Value: 1536
This parameter holds the number of time units (in adapter terminology)
until the adapter generates an interrupt. The recommended value for
IntDelay is 1536 (upon initialization). Suggested values range from
512 to 2048. See "CPU Cycle Saver."
IFS
Valid Range: 0-1 (0=off, 1=on)
Default Value: 1
Inter Frame Spacing (IFS) aims to reduce the number of Ethernet frame
collisions by altering the time between frame transmissions. When IFS is
enabled the driver tries to find an optimal IFS value. It is used only at
half duplex.
RxDescriptors
Valid Range: 8-1024
Default Value: 64
This parameter defines the number of receive descriptors allocated by
the driver. Increasing this value allows the driver to buffer more
incoming packets before the driver is required to service an interrupt.
The maximum value for Itanium-based systems is 64.
TxDescriptors
Valid Range: 19-1024
Default Value: 64
This value is the number of transmit descriptors allocated by the driver.
Increasing this value allows the protocol stack to queue more transmits at
the driver level. The maximum value for Itanium-based systems is 64.
ucode
Valid Range: 0-1 (0=off, 1=on)
Default Value: 0 for 82558-based adapters
1 for 82559, 82550, and 82551-based adapters
On uploads the micro code to the adapter, which enables CPU Cycle Saver.
See the section "CPU Cycle Saver" below.
Example usage: insmod e100.o ucode=1
Not available on 82557-based adapters.
XsumRX
Valid Range: 0-1 (0=off, 1=on)
Default Value: 1
On allows Rx checksum offloading for TCP/UDP packets. Requires that the
hardware support this feature.
Not available on 82557 and 82558-based adapters.
CPU Cycle Saver
================
CPU Cycle Saver reduces CPU utilization by reducing the number of interrupts
that the adapter generates.
When CPU Cycle Saver is turned off, the adapter generates one interrupt for
every frame that is received. This means that the operating system stops what
it is doing and switches to the network driver in order to process the
receive.
When CPU Cycle Saver is on, the adapter does not generate an interrupt for
every frame it receives. Instead, it waits until it receives several frames
before generating an interrupt. This reduces the amount of time spent
switching to and from the driver.
CPU Cycle Saver consists of these arguments: IntDelay, BundleMax and
BundleSmallFr. When IntDelay is increased, the adapter waits longer for
frames to arrive before generating the interrupt. By increasing BundleMax,
the network adapter waits for the number of small frames (less than 128 bytes)
specified to arrive before generating the interrupt. When BundleSmallFr is
disabled, the adapter does not bundle small packets. Such small packets are
often, but not always, control packets that are better served immediately;
therefore, BundleSmallFr is disabled by default.
For most users, it is recommended that CPU Cycle Saver be used with the
default values specified in the Command Line Parameters section. However, in
some cases, performance problems may occur with CPU Cycle Saver. If such
problems are observed, we recommend turning off this feature by setting
ucode=0.
Support Support
======= =======
......
This diff is collapsed.
...@@ -123,7 +123,7 @@ static void emulate_large_send_offload(struct sk_buff *skb) ...@@ -123,7 +123,7 @@ static void emulate_large_send_offload(struct sk_buff *skb)
*/ */
static int loopback_xmit(struct sk_buff *skb, struct net_device *dev) static int loopback_xmit(struct sk_buff *skb, struct net_device *dev)
{ {
struct net_device_stats *stats = netdev_priv(dev); struct net_device_stats *stats = dev->priv;
skb_orphan(skb); skb_orphan(skb);
......
...@@ -28,8 +28,8 @@ ...@@ -28,8 +28,8 @@
*/ */
#define DRV_NAME "de2104x" #define DRV_NAME "de2104x"
#define DRV_VERSION "0.6" #define DRV_VERSION "0.7"
#define DRV_RELDATE "Sep 1, 2003" #define DRV_RELDATE "Mar 17, 2004"
#include <linux/config.h> #include <linux/config.h>
#include <linux/module.h> #include <linux/module.h>
...@@ -303,7 +303,6 @@ struct de_private { ...@@ -303,7 +303,6 @@ struct de_private {
struct net_device_stats net_stats; struct net_device_stats net_stats;
struct pci_dev *pdev; struct pci_dev *pdev;
u32 macmode;
u16 setup_frame[DE_SETUP_FRAME_WORDS]; u16 setup_frame[DE_SETUP_FRAME_WORDS];
...@@ -732,7 +731,7 @@ static void __de_set_rx_mode (struct net_device *dev) ...@@ -732,7 +731,7 @@ static void __de_set_rx_mode (struct net_device *dev)
struct de_desc *txd; struct de_desc *txd;
struct de_desc *dummy_txd = NULL; struct de_desc *dummy_txd = NULL;
macmode = de->macmode & ~(AcceptAllMulticast | AcceptAllPhys); macmode = dr32(MacMode) & ~(AcceptAllMulticast | AcceptAllPhys);
if (dev->flags & IFF_PROMISC) { /* Set promiscuous. */ if (dev->flags & IFF_PROMISC) { /* Set promiscuous. */
macmode |= AcceptAllMulticast | AcceptAllPhys; macmode |= AcceptAllMulticast | AcceptAllPhys;
...@@ -805,10 +804,8 @@ static void __de_set_rx_mode (struct net_device *dev) ...@@ -805,10 +804,8 @@ static void __de_set_rx_mode (struct net_device *dev)
dw32(TxPoll, NormalTxPoll); dw32(TxPoll, NormalTxPoll);
out: out:
if (macmode != de->macmode) { if (macmode != dr32(MacMode))
dw32 (MacMode, macmode); dw32(MacMode, macmode);
de->macmode = macmode;
}
} }
static void de_set_rx_mode (struct net_device *dev) static void de_set_rx_mode (struct net_device *dev)
...@@ -923,6 +920,7 @@ static void de_link_down(struct de_private *de) ...@@ -923,6 +920,7 @@ static void de_link_down(struct de_private *de)
static void de_set_media (struct de_private *de) static void de_set_media (struct de_private *de)
{ {
unsigned media = de->media_type; unsigned media = de->media_type;
u32 macmode = dr32(MacMode);
if (de_is_running(de)) if (de_is_running(de))
BUG(); BUG();
...@@ -940,9 +938,9 @@ static void de_set_media (struct de_private *de) ...@@ -940,9 +938,9 @@ static void de_set_media (struct de_private *de)
mdelay(10); mdelay(10);
if (media == DE_MEDIA_TP_FD) if (media == DE_MEDIA_TP_FD)
de->macmode |= FullDuplex; macmode |= FullDuplex;
else else
de->macmode &= ~FullDuplex; macmode &= ~FullDuplex;
if (netif_msg_link(de)) { if (netif_msg_link(de)) {
printk(KERN_INFO "%s: set link %s\n" printk(KERN_INFO "%s: set link %s\n"
...@@ -951,9 +949,11 @@ static void de_set_media (struct de_private *de) ...@@ -951,9 +949,11 @@ static void de_set_media (struct de_private *de)
de->dev->name, media_name[media], de->dev->name, media_name[media],
de->dev->name, dr32(MacMode), dr32(SIAStatus), de->dev->name, dr32(MacMode), dr32(SIAStatus),
dr32(CSR13), dr32(CSR14), dr32(CSR15), dr32(CSR13), dr32(CSR14), dr32(CSR15),
de->dev->name, de->macmode, de->media[media].csr13, de->dev->name, macmode, de->media[media].csr13,
de->media[media].csr14, de->media[media].csr15); de->media[media].csr14, de->media[media].csr15);
} }
if (macmode != dr32(MacMode))
dw32(MacMode, macmode);
} }
static void de_next_media (struct de_private *de, u32 *media, static void de_next_media (struct de_private *de, u32 *media,
...@@ -1173,18 +1173,18 @@ static int de_reset_mac (struct de_private *de) ...@@ -1173,18 +1173,18 @@ static int de_reset_mac (struct de_private *de)
u32 status, tmp; u32 status, tmp;
/* /*
* Reset MAC. Copied from de4x5.c. * Reset MAC. de4x5.c and tulip.c examined for "advice"
* in this area.
*/ */
tmp = dr32 (BusMode); if (dr32(BusMode) == 0xffffffff)
if (tmp == 0xffffffff) return -EBUSY;
return -ENODEV;
mdelay (1);
dw32 (BusMode, tmp | CmdReset); /* Reset the chip, holding bit 0 set at least 50 PCI cycles. */
dw32 (BusMode, CmdReset);
mdelay (1); mdelay (1);
dw32 (BusMode, tmp); dw32 (BusMode, de_bus_mode);
mdelay (1); mdelay (1);
for (tmp = 0; tmp < 5; tmp++) { for (tmp = 0; tmp < 5; tmp++) {
...@@ -1235,11 +1235,12 @@ static void de_adapter_sleep (struct de_private *de) ...@@ -1235,11 +1235,12 @@ static void de_adapter_sleep (struct de_private *de)
static int de_init_hw (struct de_private *de) static int de_init_hw (struct de_private *de)
{ {
struct net_device *dev = de->dev; struct net_device *dev = de->dev;
u32 macmode;
int rc; int rc;
de_adapter_wake(de); de_adapter_wake(de);
de->macmode = dr32(MacMode) & ~MacModeClear; macmode = dr32(MacMode) & ~MacModeClear;
rc = de_reset_mac(de); rc = de_reset_mac(de);
if (rc) if (rc)
...@@ -1250,7 +1251,7 @@ static int de_init_hw (struct de_private *de) ...@@ -1250,7 +1251,7 @@ static int de_init_hw (struct de_private *de)
dw32(RxRingAddr, de->ring_dma); dw32(RxRingAddr, de->ring_dma);
dw32(TxRingAddr, de->ring_dma + (sizeof(struct de_desc) * DE_RX_RING_SIZE)); dw32(TxRingAddr, de->ring_dma + (sizeof(struct de_desc) * DE_RX_RING_SIZE));
dw32(MacMode, RxTx | de->macmode); dw32(MacMode, RxTx | macmode);
dr32(RxMissed); /* self-clearing */ dr32(RxMissed); /* self-clearing */
...@@ -1501,7 +1502,7 @@ static int __de_get_settings(struct de_private *de, struct ethtool_cmd *ecmd) ...@@ -1501,7 +1502,7 @@ static int __de_get_settings(struct de_private *de, struct ethtool_cmd *ecmd)
break; break;
} }
if (de->macmode & FullDuplex) if (dr32(MacMode) & FullDuplex)
ecmd->duplex = DUPLEX_FULL; ecmd->duplex = DUPLEX_FULL;
else else
ecmd->duplex = DUPLEX_HALF; ecmd->duplex = DUPLEX_HALF;
......
...@@ -253,8 +253,9 @@ static void tulip_down(struct net_device *dev); ...@@ -253,8 +253,9 @@ static void tulip_down(struct net_device *dev);
static struct net_device_stats *tulip_get_stats(struct net_device *dev); static struct net_device_stats *tulip_get_stats(struct net_device *dev);
static int private_ioctl(struct net_device *dev, struct ifreq *rq, int cmd); static int private_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
static void set_rx_mode(struct net_device *dev); static void set_rx_mode(struct net_device *dev);
#ifdef CONFIG_NET_POLL_CONTROLLER
static void poll_tulip(struct net_device *dev); static void poll_tulip(struct net_device *dev);
#endif
static void tulip_set_power_state (struct tulip_private *tp, static void tulip_set_power_state (struct tulip_private *tp,
int sleep, int snooze) int sleep, int snooze)
......
...@@ -307,10 +307,10 @@ config PCMCIA_WL3501 ...@@ -307,10 +307,10 @@ config PCMCIA_WL3501
It has basic support for Linux wireless extensions and initial It has basic support for Linux wireless extensions and initial
micro support for ethtool. micro support for ethtool.
comment "Prism GT/Duette 802.11(a/b/g) PCI/PCMCIA support" comment "Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support"
depends on NET_RADIO && PCI depends on NET_RADIO && PCI
config PRISM54 config PRISM54
tristate 'Intersil Prism GT/Duette/Indigo PCI/PCMCIA' tristate 'Intersil Prism GT/Duette/Indigo PCI/Cardbus'
depends on PCI && NET_RADIO && EXPERIMENTAL && HOTPLUG depends on PCI && NET_RADIO && EXPERIMENTAL && HOTPLUG
select FW_LOADER select FW_LOADER
---help--- ---help---
...@@ -337,6 +337,7 @@ config PRISM54 ...@@ -337,6 +337,7 @@ config PRISM54
Sitecom WL-110i PCI Card Sitecom WL-110i PCI Card
SMC2802W - EZ Connect g 2.4GHz 54 Mbps Wireless PCI Card SMC2802W - EZ Connect g 2.4GHz 54 Mbps Wireless PCI Card
SMC2835W - EZ Connect g 2.4GHz 54 Mbps Wireless Cardbus Card SMC2835W - EZ Connect g 2.4GHz 54 Mbps Wireless Cardbus Card
SMC2835W-V2 - EZ Connect g 2.4GHz 54 Mbps Wireless Cardbus Card
Z-Com XG-900 PCI Card Z-Com XG-900 PCI Card
Zyxel G-100 Cardbus Card Zyxel G-100 Cardbus Card
......
This diff is collapsed.
/* /*
* $Id: isl_oid.h,v 1.2 2004/01/30 16:24:00 ajfa Exp $ * $Id: isl_oid.h,v 1.3 2004/03/09 09:05:27 mcgrof Exp $
* *
* Copyright (C) 2003 Herbert Valerio Riedel <hvr@gnu.org> * Copyright (C) 2003 Herbert Valerio Riedel <hvr@gnu.org>
* Copyright (C) 2004 Luis R. Rodriguez <mcgrof@ruslug.rutgers.edu>
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
...@@ -142,14 +143,130 @@ enum dot11_priv_t { ...@@ -142,14 +143,130 @@ enum dot11_priv_t {
DOT11_PRIV_TKIP = 1 DOT11_PRIV_TKIP = 1
}; };
/* Prism "Nitro" / Frameburst / "Packet Frame Grouping"
* Value is in microseconds. Represents the # microseconds
* the firmware will take to group frames before sending out then out
* together with a CSMA contention. Without this all frames are
* sent with a CSMA contention.
* Bibliography:
* http://www.hpl.hp.com/personal/Jean_Tourrilhes/Papers/Packet.Frame.Grouping.html
*/
enum dot11_maxframeburst_t {
/* Values for DOT11_OID_MAXFRAMEBURST */
DOT11_MAXFRAMEBURST_OFF = 0, /* Card firmware default */
DOT11_MAXFRAMEBURST_MIXED_SAFE = 650, /* 802.11 a,b,g safe */
DOT11_MAXFRAMEBURST_IDEAL = 1300, /* Theoretical ideal level */
DOT11_MAXFRAMEBURST_MAX = 5000, /* Use this as max,
* Note: firmware allows for greater values. This is a
* recommended max. I'll update this as I find
* out what the real MAX is. Also note that you don't necessarily
* get better results with a greater value here.
*/
};
/* Support for 802.11 long and short frame preambles.
* Long preamble uses 128-bit sync field, 8-bit CRC
* Short preamble uses 56-bit sync field, 16-bit CRC
*
* 802.11a -- not sure, both optionally ?
* 802.11b supports long and optionally short
* 802.11g supports both */
enum dot11_preamblesettings_t {
DOT11_PREAMBLESETTING_LONG = 0,
/* Allows *only* long 802.11 preambles */
DOT11_PREAMBLESETTING_SHORT = 1,
/* Allows *only* short 802.11 preambles */
DOT11_PREAMBLESETTING_DYNAMIC = 2
/* AutomatiGically set */
};
/* Support for 802.11 slot timing (time between packets).
*
* Long uses 802.11a slot timing (9 usec ?)
* Short uses 802.11b slot timing (20 use ?) */
enum dot11_slotsettings_t {
DOT11_SLOTSETTINGS_LONG = 0,
/* Allows *only* long 802.11b slot timing */
DOT11_SLOTSETTINGS_SHORT = 1,
/* Allows *only* long 802.11a slot timing */
DOT11_SLOTSETTINGS_DYNAMIC = 2
/* AutomatiGically set */
};
/* All you need to know, ERP is "Extended Rate PHY".
* An Extended Rate PHY (ERP) STA or AP shall support three different
* preamble and header formats:
* Long preamble (refer to above)
* Short preamble (refer to above)
* OFDM preamble ( ? )
*
* I'm assuming here Protection tells the AP
* to be careful, a STA which cannot handle the long pre-amble
* has joined.
*/
enum do11_nonerpstatus_t {
DOT11_ERPSTAT_NONEPRESENT = 0,
DOT11_ERPSTAT_USEPROTECTION = 1
};
/* (ERP is "Extended Rate PHY") Way to read NONERP is NON-ERP-*
* The key here is DOT11 NON ERP NEVER protects against
* NON ERP STA's. You *don't* want this unless
* you know what you are doing. It means you will only
* get Extended Rate capabilities */
enum dot11_nonerpprotection_t {
DOT11_NONERP_NEVER = 0,
DOT11_NONERP_ALWAYS = 1,
DOT11_NONERP_DYNAMIC = 2
};
/* Preset OID configuration for 802.11 modes
* Note: DOT11_OID_CW[MIN|MAX] hold the values of the
* DCS MIN|MAX backoff used */
enum dot11_profile_t { /* And set/allowed values */
/* Allowed values for DOT11_OID_PROFILES */
DOT11_PROFILE_B_ONLY = 0,
/* DOT11_OID_RATES: 1, 2, 5.5, 11Mbps
* DOT11_OID_PREAMBLESETTINGS: DOT11_PREAMBLESETTING_DYNAMIC
* DOT11_OID_CWMIN: 31
* DOT11_OID_NONEPROTECTION: DOT11_NOERP_DYNAMIC
* DOT11_OID_SLOTSETTINGS: DOT11_SLOTSETTINGS_LONG
*/
DOT11_PROFILE_MIXED_G_WIFI = 1,
/* DOT11_OID_RATES: 1, 2, 5.5, 11, 6, 9, 12, 18, 24, 36, 48, 54Mbs
* DOT11_OID_PREAMBLESETTINGS: DOT11_PREAMBLESETTING_DYNAMIC
* DOT11_OID_CWMIN: 15
* DOT11_OID_NONEPROTECTION: DOT11_NOERP_DYNAMIC
* DOT11_OID_SLOTSETTINGS: DOT11_SLOTSETTINGS_DYNAMIC
*/
DOT11_PROFILE_MIXED_LONG = 2, /* "Long range" */
/* Same as Profile MIXED_G_WIFI */
DOT11_PROFILE_G_ONLY = 3,
/* Same as Profile MIXED_G_WIFI */
DOT11_PROFILE_TEST = 4,
/* Same as Profile MIXED_G_WIFI except:
* DOT11_OID_PREAMBLESETTINGS: DOT11_PREAMBLESETTING_SHORT
* DOT11_OID_NONEPROTECTION: DOT11_NOERP_NEVER
* DOT11_OID_SLOTSETTINGS: DOT11_SLOTSETTINGS_SHORT
*/
DOT11_PROFILE_B_WIFI = 5,
/* Same as Profile B_ONLY */
DOT11_PROFILE_A_ONLY = 6,
/* Same as Profile MIXED_G_WIFI except:
* DOT11_OID_RATES: 6, 9, 12, 18, 24, 36, 48, 54Mbs
*/
DOT11_PROFILE_MIXED_SHORT = 7
/* Same as MIXED_G_WIFI */
};
/* The dot11d conformance level configures the 802.11d conformance levels. /* The dot11d conformance level configures the 802.11d conformance levels.
* The following conformance levels exist:*/ * The following conformance levels exist:*/
enum oid_inl_conformance_t { enum oid_inl_conformance_t {
OID_INL_CONFORMANCE_NONE = 0, /* Perform active scanning */ OID_INL_CONFORMANCE_NONE = 0, /* Perform active scanning */
OID_INL_CONFORMANCE_STRICT = 1, /* Strictly adhere to 802.11d */ OID_INL_CONFORMANCE_STRICT = 1, /* Strictly adhere to 802.11d */
OID_INL_CONFORMANCE_FLEXIBLE = 2, /* Use passed 802.11d info to OID_INL_CONFORMANCE_FLEXIBLE = 2, /* Use passed 802.11d info to
* determine channel AND/OR just make * determine channel AND/OR just make assumption that active
* assumption that active
* channels are valid channels */ * channels are valid channels */
}; };
...@@ -176,6 +293,7 @@ enum oid_inl_phycap_t { ...@@ -176,6 +293,7 @@ enum oid_inl_phycap_t {
INL_PHYCAP_FAA = 0x80000000, /* Means card supports the FAA switch */ INL_PHYCAP_FAA = 0x80000000, /* Means card supports the FAA switch */
}; };
enum oid_num_t { enum oid_num_t {
GEN_OID_MACADDRESS = 0, GEN_OID_MACADDRESS = 0,
GEN_OID_LINKSTATE, GEN_OID_LINKSTATE,
...@@ -269,8 +387,8 @@ enum oid_num_t { ...@@ -269,8 +387,8 @@ enum oid_num_t {
DOT11_OID_FRAMEABORTSPHY, DOT11_OID_FRAMEABORTSPHY,
DOT11_OID_SLOTTIME, DOT11_OID_SLOTTIME,
DOT11_OID_CWMIN, DOT11_OID_CWMIN, /* MIN DCS backoff */
DOT11_OID_CWMAX, DOT11_OID_CWMAX, /* MAX DCS backoff */
DOT11_OID_ACKWINDOW, DOT11_OID_ACKWINDOW,
DOT11_OID_ANTENNARX, DOT11_OID_ANTENNARX,
DOT11_OID_ANTENNATX, DOT11_OID_ANTENNATX,
......
...@@ -245,7 +245,7 @@ static int ...@@ -245,7 +245,7 @@ static int
islpci_open(struct net_device *ndev) islpci_open(struct net_device *ndev)
{ {
u32 rc; u32 rc;
islpci_private *priv = ndev->priv; islpci_private *priv = netdev_priv(ndev);
printk(KERN_DEBUG "%s: islpci_open()\n", ndev->name); printk(KERN_DEBUG "%s: islpci_open()\n", ndev->name);
...@@ -265,7 +265,7 @@ islpci_open(struct net_device *ndev) ...@@ -265,7 +265,7 @@ islpci_open(struct net_device *ndev)
static int static int
islpci_close(struct net_device *ndev) islpci_close(struct net_device *ndev)
{ {
islpci_private *priv = ndev->priv; islpci_private *priv = netdev_priv(ndev);
printk(KERN_DEBUG "%s: islpci_close ()\n", ndev->name); printk(KERN_DEBUG "%s: islpci_close ()\n", ndev->name);
...@@ -491,7 +491,7 @@ islpci_reset(islpci_private *priv, int reload_firmware) ...@@ -491,7 +491,7 @@ islpci_reset(islpci_private *priv, int reload_firmware)
struct net_device_stats * struct net_device_stats *
islpci_statistics(struct net_device *ndev) islpci_statistics(struct net_device *ndev)
{ {
islpci_private *priv = ndev->priv; islpci_private *priv = netdev_priv(ndev);
#if VERBOSE > SHOW_ERROR_MESSAGES #if VERBOSE > SHOW_ERROR_MESSAGES
DEBUG(SHOW_FUNCTION_CALLS, "islpci_statistics \n"); DEBUG(SHOW_FUNCTION_CALLS, "islpci_statistics \n");
......
...@@ -63,6 +63,7 @@ islpci_eth_cleanup_transmit(islpci_private *priv, ...@@ -63,6 +63,7 @@ islpci_eth_cleanup_transmit(islpci_private *priv,
priv->pci_map_tx_address[index], priv->pci_map_tx_address[index],
skb->len, PCI_DMA_TODEVICE); skb->len, PCI_DMA_TODEVICE);
dev_kfree_skb_irq(skb); dev_kfree_skb_irq(skb);
skb = NULL;
} }
/* increment the free data low queue pointer */ /* increment the free data low queue pointer */
priv->free_data_tx++; priv->free_data_tx++;
...@@ -72,7 +73,7 @@ islpci_eth_cleanup_transmit(islpci_private *priv, ...@@ -72,7 +73,7 @@ islpci_eth_cleanup_transmit(islpci_private *priv,
int int
islpci_eth_transmit(struct sk_buff *skb, struct net_device *ndev) islpci_eth_transmit(struct sk_buff *skb, struct net_device *ndev)
{ {
islpci_private *priv = ndev->priv; islpci_private *priv = netdev_priv(ndev);
isl38xx_control_block *cb = priv->control_block; isl38xx_control_block *cb = priv->control_block;
u32 index; u32 index;
dma_addr_t pci_map_address; dma_addr_t pci_map_address;
...@@ -238,6 +239,7 @@ islpci_eth_transmit(struct sk_buff *skb, struct net_device *ndev) ...@@ -238,6 +239,7 @@ islpci_eth_transmit(struct sk_buff *skb, struct net_device *ndev)
drop_free: drop_free:
/* free the skbuf structure before aborting */ /* free the skbuf structure before aborting */
dev_kfree_skb(skb); dev_kfree_skb(skb);
skb = NULL;
priv->statistics.tx_dropped++; priv->statistics.tx_dropped++;
spin_unlock_irqrestore(&priv->slock, flags); spin_unlock_irqrestore(&priv->slock, flags);
...@@ -346,8 +348,10 @@ islpci_eth_receive(islpci_private *priv) ...@@ -346,8 +348,10 @@ islpci_eth_receive(islpci_private *priv)
skb->data[0], skb->data[1], skb->data[2], skb->data[3], skb->data[0], skb->data[1], skb->data[2], skb->data[3],
skb->data[4], skb->data[5]); skb->data[4], skb->data[5]);
#endif #endif
if (discard) if (discard) {
dev_kfree_skb(skb); dev_kfree_skb(skb);
skb = NULL;
}
else else
netif_rx(skb); netif_rx(skb);
...@@ -388,6 +392,7 @@ islpci_eth_receive(islpci_private *priv) ...@@ -388,6 +392,7 @@ islpci_eth_receive(islpci_private *priv)
/* free the skbuf structure before aborting */ /* free the skbuf structure before aborting */
dev_kfree_skb((struct sk_buff *) skb); dev_kfree_skb((struct sk_buff *) skb);
skb = NULL;
break; break;
} }
/* update the fragment address */ /* update the fragment address */
...@@ -411,7 +416,7 @@ islpci_eth_receive(islpci_private *priv) ...@@ -411,7 +416,7 @@ islpci_eth_receive(islpci_private *priv)
void void
islpci_eth_tx_timeout(struct net_device *ndev) islpci_eth_tx_timeout(struct net_device *ndev)
{ {
islpci_private *priv = ndev->priv; islpci_private *priv = netdev_priv(ndev);
struct net_device_stats *statistics = &priv->statistics; struct net_device_stats *statistics = &priv->statistics;
/* increment the transmit error counter */ /* increment the transmit error counter */
......
...@@ -29,10 +29,10 @@ ...@@ -29,10 +29,10 @@
#include "isl_oid.h" #include "isl_oid.h"
#define DRV_NAME "prism54" #define DRV_NAME "prism54"
#define DRV_VERSION "1.0.2.2" #define DRV_VERSION "1.1"
MODULE_AUTHOR("W.Termorshuizen, R.Bastings, H.V.Riedel, prism54.org team"); MODULE_AUTHOR("[Intersil] R.Bastings and W.Termorshuizen, The prism54.org Development Team <prism54-devel@prism54.org>");
MODULE_DESCRIPTION("Intersil 802.11 Wireless LAN adapter"); MODULE_DESCRIPTION("The Prism54 802.11 Wireless LAN adapter");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
/* In this order: vendor, device, subvendor, subdevice, class, class_mask, /* In this order: vendor, device, subvendor, subdevice, class, class_mask,
...@@ -96,6 +96,11 @@ static const struct pci_device_id prism54_id_tbl[] = { ...@@ -96,6 +96,11 @@ static const struct pci_device_id prism54_id_tbl[] = {
PCIVENDOR_ACCTON, 0xee03UL, PCIVENDOR_ACCTON, 0xee03UL,
0, 0, 0, 0,
(unsigned long) "SMC 2802Wv2"}, (unsigned long) "SMC 2802Wv2"},
{
PCIVENDOR_INTERSIL, PCIDEVICE_ISL3890,
PCIVENDOR_SMC, 0xa835UL,
0, 0,
(unsigned long) "SMC 2835Wv2"},
{ {
PCIVENDOR_INTERSIL, PCIDEVICE_ISL3877, PCIVENDOR_INTERSIL, PCIDEVICE_ISL3877,
PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
...@@ -133,7 +138,7 @@ prism54_get_card_model(struct net_device *ndev) ...@@ -133,7 +138,7 @@ prism54_get_card_model(struct net_device *ndev)
islpci_private *priv; islpci_private *priv;
char *modelp; char *modelp;
priv = ndev->priv; priv = netdev_priv(ndev);
switch (priv->pdev->subsystem_device) { switch (priv->pdev->subsystem_device) {
case PCIDEVICE_ISL3877: case PCIDEVICE_ISL3877:
modelp = "PRISM Indigo"; modelp = "PRISM Indigo";
...@@ -159,6 +164,9 @@ prism54_get_card_model(struct net_device *ndev) ...@@ -159,6 +164,9 @@ prism54_get_card_model(struct net_device *ndev)
case 0x2835UL: case 0x2835UL:
modelp = "SMC2835W"; modelp = "SMC2835W";
break; break;
case 0xa835UL:
modelp = "SMC2835W V2";
break;
/* Let's leave this one out for now since it seems bogus/wrong /* Let's leave this one out for now since it seems bogus/wrong
* Even if the manufacturer did use 0x0000UL it may not be correct * Even if the manufacturer did use 0x0000UL it may not be correct
* by their part, therefore deserving no name ;) */ * by their part, therefore deserving no name ;) */
...@@ -269,7 +277,7 @@ prism54_probe(struct pci_dev *pdev, const struct pci_device_id *id) ...@@ -269,7 +277,7 @@ prism54_probe(struct pci_dev *pdev, const struct pci_device_id *id)
goto do_pci_release_regions; goto do_pci_release_regions;
} }
priv = ndev->priv; priv = netdev_priv(ndev);
islpci_set_state(priv, PRV_STATE_PREBOOT); /* we are attempting to boot */ islpci_set_state(priv, PRV_STATE_PREBOOT); /* we are attempting to boot */
/* card is in unknown state yet, might have some interrupts pending */ /* card is in unknown state yet, might have some interrupts pending */
...@@ -314,7 +322,7 @@ void ...@@ -314,7 +322,7 @@ void
prism54_remove(struct pci_dev *pdev) prism54_remove(struct pci_dev *pdev)
{ {
struct net_device *ndev = pci_get_drvdata(pdev); struct net_device *ndev = pci_get_drvdata(pdev);
islpci_private *priv = ndev ? ndev->priv : 0; islpci_private *priv = ndev ? netdev_priv(ndev) : 0;
BUG_ON(!priv); BUG_ON(!priv);
if (!__in_cleanup_module) { if (!__in_cleanup_module) {
...@@ -355,7 +363,7 @@ int ...@@ -355,7 +363,7 @@ int
prism54_suspend(struct pci_dev *pdev, u32 state) prism54_suspend(struct pci_dev *pdev, u32 state)
{ {
struct net_device *ndev = pci_get_drvdata(pdev); struct net_device *ndev = pci_get_drvdata(pdev);
islpci_private *priv = ndev ? ndev->priv : 0; islpci_private *priv = ndev ? netdev_priv(ndev) : 0;
BUG_ON(!priv); BUG_ON(!priv);
printk(KERN_NOTICE "%s: got suspend request (state %d)\n", printk(KERN_NOTICE "%s: got suspend request (state %d)\n",
...@@ -380,7 +388,7 @@ int ...@@ -380,7 +388,7 @@ int
prism54_resume(struct pci_dev *pdev) prism54_resume(struct pci_dev *pdev)
{ {
struct net_device *ndev = pci_get_drvdata(pdev); struct net_device *ndev = pci_get_drvdata(pdev);
islpci_private *priv = ndev ? ndev->priv : 0; islpci_private *priv = ndev ? netdev_priv(ndev) : 0;
BUG_ON(!priv); BUG_ON(!priv);
printk(KERN_NOTICE "%s: got resume request\n", ndev->name); printk(KERN_NOTICE "%s: got resume request\n", ndev->name);
......
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
#include <linux/netdevice.h> #include <linux/netdevice.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/moduleparam.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/system.h> #include <asm/system.h>
...@@ -38,7 +39,7 @@ ...@@ -38,7 +39,7 @@
Global variable definition section Global variable definition section
******************************************************************************/ ******************************************************************************/
int pc_debug = VERBOSE; int pc_debug = VERBOSE;
MODULE_PARM(pc_debug, "i"); module_param(pc_debug, int, 0);
/****************************************************************************** /******************************************************************************
Driver general functions Driver general functions
...@@ -106,7 +107,7 @@ pimfor_decode_header(void *data, int len) ...@@ -106,7 +107,7 @@ pimfor_decode_header(void *data, int len)
int int
islpci_mgmt_rx_fill(struct net_device *ndev) islpci_mgmt_rx_fill(struct net_device *ndev)
{ {
islpci_private *priv = ndev->priv; islpci_private *priv = netdev_priv(ndev);
isl38xx_control_block *cb = /* volatile not needed */ isl38xx_control_block *cb = /* volatile not needed */
(isl38xx_control_block *) priv->control_block; (isl38xx_control_block *) priv->control_block;
u32 curr = le32_to_cpu(cb->driver_curr_frag[ISL38XX_CB_RX_MGMTQ]); u32 curr = le32_to_cpu(cb->driver_curr_frag[ISL38XX_CB_RX_MGMTQ]);
...@@ -165,7 +166,7 @@ static int ...@@ -165,7 +166,7 @@ static int
islpci_mgt_transmit(struct net_device *ndev, int operation, unsigned long oid, islpci_mgt_transmit(struct net_device *ndev, int operation, unsigned long oid,
void *data, int length) void *data, int length)
{ {
islpci_private *priv = ndev->priv; islpci_private *priv = netdev_priv(ndev);
isl38xx_control_block *cb = isl38xx_control_block *cb =
(isl38xx_control_block *) priv->control_block; (isl38xx_control_block *) priv->control_block;
void *p; void *p;
...@@ -271,7 +272,7 @@ islpci_mgt_transmit(struct net_device *ndev, int operation, unsigned long oid, ...@@ -271,7 +272,7 @@ islpci_mgt_transmit(struct net_device *ndev, int operation, unsigned long oid,
int int
islpci_mgt_receive(struct net_device *ndev) islpci_mgt_receive(struct net_device *ndev)
{ {
islpci_private *priv = ndev->priv; islpci_private *priv = netdev_priv(ndev);
isl38xx_control_block *cb = isl38xx_control_block *cb =
(isl38xx_control_block *) priv->control_block; (isl38xx_control_block *) priv->control_block;
u32 curr_frag; u32 curr_frag;
...@@ -414,7 +415,7 @@ n", ...@@ -414,7 +415,7 @@ n",
void void
islpci_mgt_cleanup_transmit(struct net_device *ndev) islpci_mgt_cleanup_transmit(struct net_device *ndev)
{ {
islpci_private *priv = ndev->priv; islpci_private *priv = netdev_priv(ndev);
isl38xx_control_block *cb = /* volatile not needed */ isl38xx_control_block *cb = /* volatile not needed */
(isl38xx_control_block *) priv->control_block; (isl38xx_control_block *) priv->control_block;
u32 curr_frag; u32 curr_frag;
...@@ -451,7 +452,7 @@ islpci_mgt_transaction(struct net_device *ndev, ...@@ -451,7 +452,7 @@ islpci_mgt_transaction(struct net_device *ndev,
void *senddata, int sendlen, void *senddata, int sendlen,
struct islpci_mgmtframe **recvframe) struct islpci_mgmtframe **recvframe)
{ {
islpci_private *priv = ndev->priv; islpci_private *priv = netdev_priv(ndev);
const long wait_cycle_jiffies = (ISL38XX_WAIT_CYCLE * 10 * HZ) / 1000; const long wait_cycle_jiffies = (ISL38XX_WAIT_CYCLE * 10 * HZ) / 1000;
long timeout_left = ISL38XX_MAX_WAIT_CYCLES * wait_cycle_jiffies; long timeout_left = ISL38XX_MAX_WAIT_CYCLES * wait_cycle_jiffies;
int err; int err;
......
...@@ -87,11 +87,13 @@ static const int init_wds = 0; /* help compiler optimize away dead code */ ...@@ -87,11 +87,13 @@ static const int init_wds = 0; /* help compiler optimize away dead code */
#define CARD_DEFAULT_KEY4 "default_key_4" #define CARD_DEFAULT_KEY4 "default_key_4"
#define CARD_DEFAULT_WEP 0 #define CARD_DEFAULT_WEP 0
#define CARD_DEFAULT_FILTER 0 #define CARD_DEFAULT_FILTER 0
# define CARD_DEFAULT_WDS 0 #define CARD_DEFAULT_WDS 0
#define CARD_DEFAULT_AUTHEN DOT11_AUTH_OS #define CARD_DEFAULT_AUTHEN DOT11_AUTH_OS
#define CARD_DEFAULT_DOT1X 0 #define CARD_DEFAULT_DOT1X 0
#define CARD_DEFAULT_MLME_MODE DOT11_MLME_AUTO #define CARD_DEFAULT_MLME_MODE DOT11_MLME_AUTO
#define CARD_DEFAULT_CONFORMANCE OID_INL_CONFORMANCE_NONE #define CARD_DEFAULT_CONFORMANCE OID_INL_CONFORMANCE_NONE
#define CARD_DEFAULT_PROFILE DOT11_PROFILE_MIXED_G_WIFI
#define CARD_DEFAULT_MAXFRAMEBURST DOT11_MAXFRAMEBURST_MIXED_SAFE
/* PIMFOR package definitions */ /* PIMFOR package definitions */
#define PIMFOR_ETHERTYPE 0x8828 #define PIMFOR_ETHERTYPE 0x8828
......
...@@ -97,7 +97,7 @@ struct oid_t isl_oid[] = { ...@@ -97,7 +97,7 @@ struct oid_t isl_oid[] = {
[DOT11_OID_ALOFT_CONFIG] = OID_UNKNOWN(0x1d000006), [DOT11_OID_ALOFT_CONFIG] = OID_UNKNOWN(0x1d000006),
[DOT11_OID_VDCFX] = {0x1b000000, 7, 0, 0}, [DOT11_OID_VDCFX] = {0x1b000000, 7, 0, 0},
[DOT11_OID_MAXFRAMEBURST] = OID_U32(0x1b000008), [DOT11_OID_MAXFRAMEBURST] = OID_U32(0x1b000008), /* in microseconds */
[DOT11_OID_PSM] = OID_U32(0x14000000), [DOT11_OID_PSM] = OID_U32(0x14000000),
[DOT11_OID_CAMTIMEOUT] = OID_U32(0x14000001), [DOT11_OID_CAMTIMEOUT] = OID_U32(0x14000001),
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment