Commit c7cace64 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'upstream-linus' of

* 'upstream-linus' of (150 commits)
  [PATCH] ipw2100: Update version ipw2100 stamp to 1.2.2
  [PATCH] ipw2100: move mutex.h include from ipw2100.c to ipw2100.h
  [PATCH] ipw2100: semaphore to mutexes conversion
  [PATCH] ipw2100: Fix radiotap code gcc warning
  [PATCH] ipw2100: add radiotap headers to packtes captured in monitor mode
  [PATCH] ipw2x00: expend Copyright to 2006
  [PATCH] drivers/net/wireless/ipw2200.c: fix an array overun
  [PATCH] ieee80211: Don't update network statistics from off-channel packets.
  [PATCH] ipw2200: Update ipw2200 version stamp to 1.1.1
  [PATCH] ipw2200: switch to the new ipw2200-fw-3.0 image format
  [PATCH] ipw2200: wireless extension sensitivity threshold support
  [PATCH] ipw2200: Enables the "slow diversity" algorithm
  [PATCH] ipw2200: Set a meaningful silence threshold value
  [PATCH] ipw2200: export `debug' module param only if CONFIG_IPW2200_DEBUG
  [PATCH] ipw2200: Change debug level for firmware error logging
  [PATCH] ipw2200: Filter unsupported channels out in ad-hoc mode
  [PATCH] ipw2200: Fix ipw_sw_reset() implementation inconsistent with comment
  [PATCH] ipw2200: Fix rf_kill is activated after mode change with 'disable=1'
  [PATCH] ipw2200: remove the WPA card associates to non-WPA AP checking
  [PATCH] ipw2200: Add signal level to iwlist scan output
parents a90779bf 2e9ff56e
......@@ -9,7 +9,7 @@
DOCBOOKS := wanbook.xml z8530book.xml mcabook.xml videobook.xml \
kernel-hacking.xml kernel-locking.xml deviceiobook.xml \
procfs-guide.xml writing_usb_driver.xml \
sis900.xml kernel-api.xml journal-api.xml lsm.xml usb.xml \
kernel-api.xml journal-api.xml lsm.xml usb.xml \
gadget.xml libata.xml mtdnand.xml librs.xml rapidio.xml
This diff is collapsed.
......@@ -151,6 +151,13 @@ Who: Ralf Baechle <>
What: eepro100 network driver
When: January 2007
Why: replaced by the e100 driver
Who: Adrian Bunk <>
What: Legacy /proc/pci interface (PCI_LEGACY_PROC)
When: March 2006
Why: deprecated since 2.5.53 in favor of lspci(8)
......@@ -92,8 +92,6 @@ routing.txt
- the new routing mechanism
- info on the module that can shape/limit transmitted traffic.
- SiS 900/7016 Fast Ethernet device driver info.
- Marvell Yukon Chipset / SysKonnect SK-98xx compliant Gigabit
Ethernet Adapter family driver info
......@@ -3,18 +3,18 @@ Intel(R) PRO/Wireless 2100 Driver for Linux in support of:
Intel(R) PRO/Wireless 2100 Network Connection
Copyright (C) 2003-2005, Intel Corporation
Copyright (C) 2003-2006, Intel Corporation
Version: 1.1.3
Date : October 17, 2005
Version: git-1.1.5
Date : January 25, 2006
1. Introduction
2. Release 1.1.3 Current Features
2. Release git-1.1.5 Current Features
3. Command Line Parameters
4. Sysfs Helper Files
5. Radio Kill Switch
......@@ -89,7 +89,7 @@ potential fixes and patches, as well as links to the development mailing list
for the driver project.
2. Release 1.1.3 Current Supported Features
2. Release git-1.1.5 Current Supported Features
- Managed (BSS) and Ad-Hoc (IBSS)
- WEP (shared key and open)
......@@ -270,7 +270,7 @@ For installation support on the ipw2100 1.1.0 driver on Linux kernels
9. License
Copyright(c) 2003 - 2005 Intel Corporation. All rights reserved.
Copyright(c) 2003 - 2006 Intel Corporation. All rights reserved.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License (version 2) as
......@@ -10,7 +10,7 @@ both hardware adapters listed above. In this document the Intel(R)
PRO/Wireless 2915ABG Driver for Linux will be used to reference the
unified driver.
Copyright (C) 2004-2005, Intel Corporation
Copyright (C) 2004-2006, Intel Corporation
......@@ -26,9 +26,11 @@ Index
1.2. Module parameters
1.3. Wireless Extension Private Methods
1.4. Sysfs Helper Files
1.5. Supported channels
2. Ad-Hoc Networking
3. Interacting with Wireless Tools
3.1. iwconfig mode
3.2. iwconfig sens
4. About the Version Numbers
5. Firmware installation
6. Support
......@@ -314,6 +316,35 @@ For the device level files, see /sys/bus/pci/drivers/ipw2200:
running ifconfig and is therefore disabled by default.
1.5. Supported channels
Upon loading the Intel(R) PRO/Wireless 2915ABG Driver for Linux, a
message stating the detected geography code and the number of 802.11
channels supported by the card will be displayed in the log.
The geography code corresponds to a regulatory domain as shown in the
table below.
Supported channels
Code Geography 802.11bg 802.11a
--- Restricted 11 0
ZZF Custom US/Canada 11 8
ZZD Rest of World 13 0
ZZA Custom USA & Europe & High 11 13
ZZB Custom NA & Europe 11 13
ZZC Custom Japan 11 4
ZZM Custom 11 0
ZZE Europe 13 19
ZZJ Custom Japan 14 4
ZZR Rest of World 14 0
ZZH High Band 13 4
ZZG Custom Europe 13 4
ZZK Europe 13 24
ZZL Europe 11 13
2. Ad-Hoc Networking
......@@ -353,6 +384,15 @@ When configuring the mode of the adapter, all run-time configured parameters
are reset to the value used when the module was loaded. This includes
channels, rates, ESSID, etc.
3.2 iwconfig sens
The 'iwconfig ethX sens XX' command will not set the signal sensitivity
threshold, as described in iwconfig documentation, but rather the number
of consecutive missed beacons that will trigger handover, i.e. roaming
to another access point. At the same time, it will set the disassociation
threshold to 3 times the given value.
4. About the Version Numbers
......@@ -408,7 +448,7 @@ For general information and support, go to:
7. License
Copyright(c) 2003 - 2005 Intel Corporation. All rights reserved.
Copyright(c) 2003 - 2006 Intel Corporation. All rights reserved.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License version 2 as
SiS 900/7016 Fast Ethernet Device Driver
Ollie Lho
Lei Chun Chang
Copyright © 1999 by Silicon Integrated System Corp.
This document gives some information on installation and usage of SiS
900/7016 device driver under Linux.
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
the Free Software Foundation; either version 2 of the License, or (at
your option) any later version.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
Table of Contents
1. Introduction
2. Changes
3. Tested Environment
4. Files in This Package
5. Installation
Building the driver as loadable module
Building the driver into kernel
6. Known Problems and Bugs
7. Revision History
8. Acknowledgements
Chapter 1. Introduction
This document describes the revision 1.06 and 1.07 of SiS 900/7016
Fast Ethernet device driver under Linux. The driver is developed by
Silicon Integrated System Corp. and distributed freely under the GNU
General Public License (GPL). The driver can be compiled as a loadable
module and used under Linux kernel version 2.2.x. (rev. 1.06) With
minimal changes, the driver can also be used under 2.3.x and 2.4.x
kernel (rev. 1.07), please see Chapter 5. If you are intended to use
the driver for earlier kernels, you are on your own.
The driver is tested with usual TCP/IP applications including FTP,
Telnet, Netscape etc. and is used constantly by the developers.
Please send all comments/fixes/questions to Lei-Chun Chang.
Chapter 2. Changes
Changes made in Revision 1.07
1. Separation of sis900.c and sis900.h in order to move most constant
definition to sis900.h (many of those constants were corrected)
2. Clean up PCI detection, the pci-scan from Donald Becker were not
used, just simple pci_find_*.
3. MII detection is modified to support multiple mii transceiver.
4. Bugs in read_eeprom, mdio_* were removed.
5. Lot of sis900 irrelevant comments were removed/changed and more
comments were added to reflect the real situation.
6. Clean up of physical/virtual address space mess in buffer
7. Better transmit/receive error handling.
8. The driver now uses zero-copy single buffer management scheme to
improve performance.
9. Names of variables were changed to be more consistent.
10. Clean up of auo-negotiation and timer code.
11. Automatic detection and change of PHY on the fly.
12. Bug in mac probing fixed.
13. Fix 630E equalier problem by modifying the equalizer workaround
14. Support for ICS1893 10/100 Interated PHYceiver.
15. Support for media select by ifconfig.
16. Added kernel-doc extratable documentation.
Chapter 3. Tested Environment
This driver is developed on the following hardware
* Intel Celeron 500 with SiS 630 (rev 02) chipset
* SiS 900 (rev 01) and SiS 7016/7014 Fast Ethernet Card
and tested with these software environments
* Red Hat Linux version 6.2
* Linux kernel version 2.4.0
* Netscape version 4.6
* NcFTP 3.0.0 beta 18
* Samba version 2.0.3
Chapter 4. Files in This Package
In the package you can find these files:
Driver source file in C
Header file for sis900.c
DocBook SGML source of the document
Driver document in plain text
Chapter 5. Installation
Silicon Integrated System Corp. is cooperating closely with core Linux
Kernel developers. The revisions of SiS 900 driver are distributed by
the usuall channels for kernel tar files and patches. Those kernel tar
files for official kernel and patches for kernel pre-release can be
download at official kernel ftp site and its mirrors. The 1.06
revision can be found in kernel version later than 2.3.15 and
pre-2.2.14, and 1.07 revision can be found in kernel version 2.4.0. If
you have no prior experience in networking under Linux, please read
Ethernet HOWTO and Networking HOWTO available from Linux Documentation
Project (LDP).
The driver is bundled in release later than 2.2.11 and 2.3.15 so this
is the most easy case. Be sure you have the appropriate packages for
compiling kernel source. Those packages are listed in Document/Changes
in kernel source distribution. If you have to install the driver other
than those bundled in kernel release, you should have your driver file
sis900.c and sis900.h copied into /usr/src/linux/drivers/net/ first.
There are two alternative ways to install the driver
Building the driver as loadable module
To build the driver as a loadable kernel module you have to
reconfigure the kernel to activate network support by
make menuconfig
Choose "Loadable module support --->", then select "Enable loadable
module support".
Choose "Network Device Support --->", select "Ethernet (10 or
100Mbit)". Then select "EISA, VLB, PCI and on board controllers", and
choose "SiS 900/7016 PCI Fast Ethernet Adapter support" to "M".
After reconfiguring the kernel, you can make the driver module by
make modules
The driver should be compiled with no errors. After compiling the
driver, the driver can be installed to proper place by
make modules_install
Load the driver into kernel by
insmod sis900
When loading the driver into memory, some information message can be
view by
cat /var/log/message
If the driver is loaded properly you will have messages similar to
sis900.c: v1.07.06 11/07/2000
eth0: SiS 900 PCI Fast Ethernet at 0xd000, IRQ 10, 00:00:e8:83:7f:a4.
eth0: SiS 900 Internal MII PHY transceiver found at address 1.
eth0: Using SiS 900 Internal MII PHY as default
showing the version of the driver and the results of probing routine.
Once the driver is loaded, network can be brought up by
/sbin/ifconfig eth0 IPADDR broadcast BROADCAST netmask NETMASK media TYPE
where IPADDR, BROADCAST, NETMASK are your IP address, broadcast
address and netmask respectively. TYPE is used to set medium type used
by the device. Typical values are "10baseT"(twisted-pair 10Mbps
Ethernet) or "100baseT" (twisted-pair 100Mbps Ethernet). For more
information on how to configure network interface, please refer to
Networking HOWTO.
The link status is also shown by kernel messages. For example, after
the network interface is activated, you may have the message:
eth0: Media Link On 100mbps full-duplex
If you try to unplug the twist pair (TP) cable you will get
eth0: Media Link Off
indicating that the link is failed.
Building the driver into kernel
If you want to make the driver into kernel, choose "Y" rather than "M"
on "SiS 900/7016 PCI Fast Ethernet Adapter support" when configuring
the kernel. Build the kernel image in the usual way
make clean
make bzlilo
Next time the system reboot, you have the driver in memory.
Chapter 6. Known Problems and Bugs
There are some known problems and bugs. If you find any other bugs
please mail to
1. AM79C901 HomePNA PHY is not thoroughly tested, there may be some
bugs in the "on the fly" change of transceiver.
2. A bug is hidden somewhere in the receive buffer management code,
the bug causes NULL pointer reference in the kernel. This fault is
caught before bad things happen and reported with the message:
eth0: NULL pointer encountered in Rx ring, skipping which can be
viewed with dmesg or cat /var/log/message.
3. The media type change from 10Mbps to 100Mbps twisted-pair ethernet
by ifconfig causes the media link down.
Chapter 7. Revision History
* November 13, 2000, Revision 1.07, seventh release, 630E problem
fixed and further clean up.
* November 4, 1999, Revision 1.06, Second release, lots of clean up
and optimization.
* August 8, 1999, Revision 1.05, Initial Public Release
Chapter 8. Acknowledgements
This driver was originally derived form Donald Becker's pci-skeleton
and rtl8139 drivers. Donald also provided various suggestion regarded
with improvements made in revision 1.06.
The 1.05 revision was created by Jim Huang, AMD 79c901 support was
added by Chin-Shan Li.
......@@ -319,11 +319,10 @@ static void __init hdpu_fixup_eth_pdata(struct platform_device *pd)
struct mv643xx_eth_platform_data *eth_pd;
eth_pd = pd->dev.platform_data;
eth_pd->port_serial_control =
mv64x60_read(&bh, MV643XX_ETH_PORT_SERIAL_CONTROL_REG(pd->id) & ~1);
eth_pd->force_phy_addr = 1;
eth_pd->phy_addr = pd->id;
eth_pd->speed = SPEED_100;
eth_pd->duplex = DUPLEX_FULL;
eth_pd->tx_queue_size = 400;
eth_pd->rx_queue_size = 800;
......@@ -100,6 +100,10 @@ static int max_interrupt_work = 10;
static char versionA[] __initdata = DRV_NAME ".c:" DRV_VERSION " " DRV_RELDATE "\n";
static char versionB[] __initdata = "\n";
#if defined(CONFIG_PM) && (defined(CONFIG_MCA) || defined(CONFIG_EISA))
#define EL3_SUSPEND
#ifdef EL3_DEBUG
static int el3_debug = EL3_DEBUG;
......@@ -174,9 +178,6 @@ struct el3_private {
/* skb send-queue */
int head, size;
struct sk_buff *queue[SKB_QUEUE_SIZE];
struct pm_dev *pmdev;
enum {
......@@ -201,11 +202,15 @@ static void el3_tx_timeout (struct net_device *dev);
static void el3_down(struct net_device *dev);
static void el3_up(struct net_device *dev);
static struct ethtool_ops ethtool_ops;
static int el3_suspend(struct pm_dev *pdev);
static int el3_resume(struct pm_dev *pdev);
static int el3_pm_callback(struct pm_dev *pdev, pm_request_t rqst, void *data);
#ifdef EL3_SUSPEND
static int el3_suspend(struct device *, pm_message_t);
static int el3_resume(struct device *);
#define el3_suspend NULL
#define el3_resume NULL
/* generic device remove for all device types */
#if defined(CONFIG_EISA) || defined(CONFIG_MCA)
static int el3_device_remove (struct device *device);
......@@ -229,7 +234,9 @@ static struct eisa_driver el3_eisa_driver = {
.driver = {
.name = "3c509",
.probe = el3_eisa_probe,
.remove = __devexit_p (el3_device_remove)
.remove = __devexit_p (el3_device_remove),
.suspend = el3_suspend,
.resume = el3_resume,
......@@ -262,6 +269,8 @@ static struct mca_driver el3_mca_driver = {
.bus = &mca_bus_type,
.probe = el3_mca_probe,
.remove = __devexit_p(el3_device_remove),
.suspend = el3_suspend,
.resume = el3_resume,
#endif /* CONFIG_MCA */
......@@ -362,10 +371,6 @@ static void el3_common_remove (struct net_device *dev)
struct el3_private *lp = netdev_priv(dev);
(void) lp; /* Keep gcc quiet... */
if (lp->pmdev)
#if defined(__ISAPNP__)
if (lp->type == EL3_PNP)
......@@ -572,16 +577,6 @@ no_pnp:
if (err)
goto out1;
/* register power management */
lp->pmdev = pm_register(PM_ISA_DEV, card_idx, el3_pm_callback);
if (lp->pmdev) {
struct pm_dev *p;
p = lp->pmdev;
p->data = (struct net_device *)dev;
lp->next_dev = el3_root_dev;
el3_root_dev = dev;
......@@ -1480,20 +1475,17 @@ el3_up(struct net_device *dev)
/* Power Management support functions */
#ifdef EL3_SUSPEND
static int
el3_suspend(struct pm_dev *pdev)
el3_suspend(struct device *pdev, pm_message_t state)
unsigned long flags;
struct net_device *dev;
struct el3_private *lp;
int ioaddr;
if (!pdev && !pdev->data)
return -EINVAL;
dev = (struct net_device *)pdev->data;
dev = pdev->driver_data;
lp = netdev_priv(dev);
ioaddr = dev->base_addr;
......@@ -1510,17 +1502,14 @@ el3_suspend(struct pm_dev *pdev)
static int
el3_resume(struct pm_dev *pdev)
el3_resume(struct device *pdev)
unsigned long flags;
struct net_device *dev;
struct el3_private *lp;
int ioaddr;
if (!pdev && !pdev->data)
return -EINVAL;
dev = (struct net_device *)pdev->data;
dev = pdev->driver_data;
lp = netdev_priv(dev);
ioaddr = dev->base_addr;
......@@ -1536,20 +1525,7 @@ el3_resume(struct pm_dev *pdev)
return 0;
static int
el3_pm_callback(struct pm_dev *pdev, pm_request_t rqst, void *data)
switch (rqst) {
return el3_suspend(pdev);
return el3_resume(pdev);
return 0;
#endif /* CONFIG_PM_LEGACY */
#endif /* EL3_SUSPEND */
/* Parameters that may be passed into the module. */
static int debug = -1;
......@@ -105,6 +105,7 @@
#include <linux/mca-legacy.h>
#include <linux/ethtool.h>
#include <linux/bitops.h>
#include <linux/jiffies.h>
#include <asm/uaccess.h>
#include <asm/processor.h>
......@@ -658,7 +659,7 @@ static int init586(struct net_device *dev)
s = jiffies; /* warning: only active with interrupts on !! */
while (!(cfg_cmd->cmd_status & STAT_COMPL)) {
if (jiffies - s > 30*HZ/100)
if (time_after(jiffies, s + 30*HZ/100))
......@@ -684,7 +685,7 @@ static int init586(struct net_device *dev)
s = jiffies;
while (!(ias_cmd->cmd_status & STAT_COMPL)) {
if (jiffies - s > 30*HZ/100)
if (time_after(jiffies, s + 30*HZ/100))
......@@ -709,7 +710,7 @@ static int init586(struct net_device *dev)
s = jiffies;
while (!(tdr_cmd->cmd_status & STAT_COMPL)) {
if (jiffies - s > 30*HZ/100) {
if (time_after(jiffies, s + 30*HZ/100)) {
printk(KERN_WARNING "%s: %d Problems while running the TDR.\n", dev->name, __LINE__);
result = 1;
......@@ -798,7 +799,7 @@ static int init586(struct net_device *dev)
s = jiffies;
while (!(mc_cmd->cmd_status & STAT_COMPL)) {
if (jiffies - s > 30*HZ/100)
if (time_after(jiffies, s + 30*HZ/100))
if (!(mc_cmd->cmd_status & STAT_COMPL)) {
......@@ -258,6 +258,7 @@ static int vortex_debug = 1;
#include <linux/highmem.h>
#include <linux/eisa.h>
#include <linux/bitops.h>
#include <linux/jiffies.h>
#include <asm/irq.h> /* For NR_IRQS only. */
#include <asm/io.h>
#include <asm/uaccess.h>
......@@ -841,7 +842,7 @@ enum xcvr_types {
XCVR_100baseFx, XCVR_MII=6, XCVR_NWAY=8, XCVR_ExtMII=9, XCVR_Default=10,
static struct media_table {
static const struct media_table {
char *name;
unsigned int media_bits:16, /* Bits to set in Wn4_Media register. */
mask:8, /* The transceiver-present bit in Wn3_Config.*/
......@@ -1445,7 +1446,7 @@ static int __devinit vortex_probe1(struct device *gendev,
static const char * ram_split[] = {"5:3", "3:1", "1:1", "3:5"};
static const char * const ram_split[] = {"5:3", "3:1", "1:1", "3:5"};
unsigned int config;
vp->available_media = ioread16(ioaddr + Wn3_Options);
......@@ -2724,7 +2725,7 @@ boomerang_rx(struct net_device *dev)
skb = dev_alloc_skb(PKT_BUF_SZ);
if (skb == NULL) {
static unsigned long last_jif;
if ((jiffies - last_jif) > 10 * HZ) {
if (time_after(jiffies, last_jif + 10 * HZ)) {
printk(KERN_WARNING "%s: memory shortage\n", dev->name);
last_jif = jiffies;
......@@ -29,7 +29,7 @@
#include <linux/slab.h>
#include <linux/string.h>
#include <linux/skbuff.h>
#include <linux/irq.h>
#include <asm/irq.h>
/* Used for the temporal inet entries and routing */
#include <linux/socket.h>
#include <linux/bitops.h>
......@@ -1276,7 +1276,7 @@ static int cp_change_mtu(struct net_device *dev, int new_mtu)
#endif /* BROKEN */
static char mii_2_8139_map[8] = {
static const char mii_2_8139_map[8] = {
......@@ -229,7 +229,7 @@ typedef enum {
/* indexed by board_t, above */
static struct {
static const struct {
const char *name;
u32 hw_flags;
} board_info[] __devinitdata = {
......@@ -1192,7 +1192,7 @@ static int __devinit read_eeprom (void __iomem *ioaddr, int location, int addr_l
#define mdio_delay() RTL_R8(Config4)