devices/r8169-2.6.36-orig.c
author Gavin Lambert <gavinl@compacsort.com>
Tue, 14 Apr 2015 09:33:24 -0400
changeset 2618 3affe9cd0b66
parent 2400 7c9c12c61104
permissions -rw-r--r--
Ignore NXIO error otherwise this causes spam if network is empty or refclk not
selected yet, and syncing refclk time to master.
2400
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     1
/*
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     2
 * r8169.c: RealTek 8169/8168/8101 ethernet driver.
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     3
 *
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     4
 * Copyright (c) 2002 ShuChen <shuchen@realtek.com.tw>
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     5
 * Copyright (c) 2003 - 2007 Francois Romieu <romieu@fr.zoreil.com>
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     6
 * Copyright (c) a lot of people too. Please respect their work.
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     7
 *
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     8
 * See MAINTAINERS file for support contact information.
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     9
 */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    10
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    11
#include <linux/module.h>
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    12
#include <linux/moduleparam.h>
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    13
#include <linux/pci.h>
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    14
#include <linux/netdevice.h>
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    15
#include <linux/etherdevice.h>
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    16
#include <linux/delay.h>
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    17
#include <linux/ethtool.h>
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    18
#include <linux/mii.h>
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    19
#include <linux/if_vlan.h>
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    20
#include <linux/crc32.h>
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    21
#include <linux/in.h>
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    22
#include <linux/ip.h>
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    23
#include <linux/tcp.h>
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    24
#include <linux/init.h>
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    25
#include <linux/dma-mapping.h>
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    26
#include <linux/pm_runtime.h>
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    27
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    28
#include <asm/system.h>
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    29
#include <asm/io.h>
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    30
#include <asm/irq.h>
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    31
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    32
#define RTL8169_VERSION "2.3LK-NAPI"
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    33
#define MODULENAME "r8169"
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    34
#define PFX MODULENAME ": "
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    35
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    36
#ifdef RTL8169_DEBUG
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    37
#define assert(expr) \
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    38
	if (!(expr)) {					\
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    39
		printk( "Assertion failed! %s,%s,%s,line=%d\n",	\
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    40
		#expr,__FILE__,__func__,__LINE__);		\
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    41
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    42
#define dprintk(fmt, args...) \
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    43
	do { printk(KERN_DEBUG PFX fmt, ## args); } while (0)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    44
#else
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    45
#define assert(expr) do {} while (0)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    46
#define dprintk(fmt, args...)	do {} while (0)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    47
#endif /* RTL8169_DEBUG */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    48
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    49
#define R8169_MSG_DEFAULT \
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    50
	(NETIF_MSG_DRV | NETIF_MSG_PROBE | NETIF_MSG_IFUP | NETIF_MSG_IFDOWN)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    51
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    52
#define TX_BUFFS_AVAIL(tp) \
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    53
	(tp->dirty_tx + NUM_TX_DESC - tp->cur_tx - 1)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    54
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    55
/* Maximum number of multicast addresses to filter (vs. Rx-all-multicast).
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    56
   The RTL chips use a 64 element hash table based on the Ethernet CRC. */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    57
static const int multicast_filter_limit = 32;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    58
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    59
/* MAC address length */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    60
#define MAC_ADDR_LEN	6
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    61
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    62
#define MAX_READ_REQUEST_SHIFT	12
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    63
#define RX_FIFO_THRESH	7	/* 7 means NO threshold, Rx buffer level before first PCI xfer. */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    64
#define RX_DMA_BURST	6	/* Maximum PCI burst, '6' is 1024 */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    65
#define TX_DMA_BURST	6	/* Maximum PCI burst, '6' is 1024 */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    66
#define EarlyTxThld	0x3F	/* 0x3F means NO early transmit */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    67
#define SafeMtu		0x1c20	/* ... actually life sucks beyond ~7k */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    68
#define InterFrameGap	0x03	/* 3 means InterFrameGap = the shortest one */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    69
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    70
#define R8169_REGS_SIZE		256
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    71
#define R8169_NAPI_WEIGHT	64
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    72
#define NUM_TX_DESC	64	/* Number of Tx descriptor registers */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    73
#define NUM_RX_DESC	256	/* Number of Rx descriptor registers */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    74
#define RX_BUF_SIZE	1536	/* Rx Buffer size */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    75
#define R8169_TX_RING_BYTES	(NUM_TX_DESC * sizeof(struct TxDesc))
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    76
#define R8169_RX_RING_BYTES	(NUM_RX_DESC * sizeof(struct RxDesc))
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    77
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    78
#define RTL8169_TX_TIMEOUT	(6*HZ)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    79
#define RTL8169_PHY_TIMEOUT	(10*HZ)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    80
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    81
#define RTL_EEPROM_SIG		cpu_to_le32(0x8129)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    82
#define RTL_EEPROM_SIG_MASK	cpu_to_le32(0xffff)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    83
#define RTL_EEPROM_SIG_ADDR	0x0000
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    84
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    85
/* write/read MMIO register */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    86
#define RTL_W8(reg, val8)	writeb ((val8), ioaddr + (reg))
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    87
#define RTL_W16(reg, val16)	writew ((val16), ioaddr + (reg))
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    88
#define RTL_W32(reg, val32)	writel ((val32), ioaddr + (reg))
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    89
#define RTL_R8(reg)		readb (ioaddr + (reg))
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    90
#define RTL_R16(reg)		readw (ioaddr + (reg))
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    91
#define RTL_R32(reg)		readl (ioaddr + (reg))
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    92
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    93
enum mac_version {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    94
	RTL_GIGA_MAC_NONE   = 0x00,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    95
	RTL_GIGA_MAC_VER_01 = 0x01, // 8169
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    96
	RTL_GIGA_MAC_VER_02 = 0x02, // 8169S
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    97
	RTL_GIGA_MAC_VER_03 = 0x03, // 8110S
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    98
	RTL_GIGA_MAC_VER_04 = 0x04, // 8169SB
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    99
	RTL_GIGA_MAC_VER_05 = 0x05, // 8110SCd
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   100
	RTL_GIGA_MAC_VER_06 = 0x06, // 8110SCe
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   101
	RTL_GIGA_MAC_VER_07 = 0x07, // 8102e
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   102
	RTL_GIGA_MAC_VER_08 = 0x08, // 8102e
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   103
	RTL_GIGA_MAC_VER_09 = 0x09, // 8102e
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   104
	RTL_GIGA_MAC_VER_10 = 0x0a, // 8101e
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   105
	RTL_GIGA_MAC_VER_11 = 0x0b, // 8168Bb
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   106
	RTL_GIGA_MAC_VER_12 = 0x0c, // 8168Be
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   107
	RTL_GIGA_MAC_VER_13 = 0x0d, // 8101Eb
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   108
	RTL_GIGA_MAC_VER_14 = 0x0e, // 8101 ?
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   109
	RTL_GIGA_MAC_VER_15 = 0x0f, // 8101 ?
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   110
	RTL_GIGA_MAC_VER_16 = 0x11, // 8101Ec
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   111
	RTL_GIGA_MAC_VER_17 = 0x10, // 8168Bf
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   112
	RTL_GIGA_MAC_VER_18 = 0x12, // 8168CP
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   113
	RTL_GIGA_MAC_VER_19 = 0x13, // 8168C
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   114
	RTL_GIGA_MAC_VER_20 = 0x14, // 8168C
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   115
	RTL_GIGA_MAC_VER_21 = 0x15, // 8168C
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   116
	RTL_GIGA_MAC_VER_22 = 0x16, // 8168C
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   117
	RTL_GIGA_MAC_VER_23 = 0x17, // 8168CP
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   118
	RTL_GIGA_MAC_VER_24 = 0x18, // 8168CP
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   119
	RTL_GIGA_MAC_VER_25 = 0x19, // 8168D
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   120
	RTL_GIGA_MAC_VER_26 = 0x1a, // 8168D
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   121
	RTL_GIGA_MAC_VER_27 = 0x1b  // 8168DP
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   122
};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   123
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   124
#define _R(NAME,MAC,MASK) \
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   125
	{ .name = NAME, .mac_version = MAC, .RxConfigMask = MASK }
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   126
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   127
static const struct {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   128
	const char *name;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   129
	u8 mac_version;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   130
	u32 RxConfigMask;	/* Clears the bits supported by this chip */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   131
} rtl_chip_info[] = {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   132
	_R("RTL8169",		RTL_GIGA_MAC_VER_01, 0xff7e1880), // 8169
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   133
	_R("RTL8169s",		RTL_GIGA_MAC_VER_02, 0xff7e1880), // 8169S
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   134
	_R("RTL8110s",		RTL_GIGA_MAC_VER_03, 0xff7e1880), // 8110S
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   135
	_R("RTL8169sb/8110sb",	RTL_GIGA_MAC_VER_04, 0xff7e1880), // 8169SB
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   136
	_R("RTL8169sc/8110sc",	RTL_GIGA_MAC_VER_05, 0xff7e1880), // 8110SCd
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   137
	_R("RTL8169sc/8110sc",	RTL_GIGA_MAC_VER_06, 0xff7e1880), // 8110SCe
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   138
	_R("RTL8102e",		RTL_GIGA_MAC_VER_07, 0xff7e1880), // PCI-E
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   139
	_R("RTL8102e",		RTL_GIGA_MAC_VER_08, 0xff7e1880), // PCI-E
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   140
	_R("RTL8102e",		RTL_GIGA_MAC_VER_09, 0xff7e1880), // PCI-E
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   141
	_R("RTL8101e",		RTL_GIGA_MAC_VER_10, 0xff7e1880), // PCI-E
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   142
	_R("RTL8168b/8111b",	RTL_GIGA_MAC_VER_11, 0xff7e1880), // PCI-E
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   143
	_R("RTL8168b/8111b",	RTL_GIGA_MAC_VER_12, 0xff7e1880), // PCI-E
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   144
	_R("RTL8101e",		RTL_GIGA_MAC_VER_13, 0xff7e1880), // PCI-E 8139
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   145
	_R("RTL8100e",		RTL_GIGA_MAC_VER_14, 0xff7e1880), // PCI-E 8139
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   146
	_R("RTL8100e",		RTL_GIGA_MAC_VER_15, 0xff7e1880), // PCI-E 8139
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   147
	_R("RTL8168b/8111b",	RTL_GIGA_MAC_VER_17, 0xff7e1880), // PCI-E
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   148
	_R("RTL8101e",		RTL_GIGA_MAC_VER_16, 0xff7e1880), // PCI-E
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   149
	_R("RTL8168cp/8111cp",	RTL_GIGA_MAC_VER_18, 0xff7e1880), // PCI-E
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   150
	_R("RTL8168c/8111c",	RTL_GIGA_MAC_VER_19, 0xff7e1880), // PCI-E
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   151
	_R("RTL8168c/8111c",	RTL_GIGA_MAC_VER_20, 0xff7e1880), // PCI-E
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   152
	_R("RTL8168c/8111c",	RTL_GIGA_MAC_VER_21, 0xff7e1880), // PCI-E
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   153
	_R("RTL8168c/8111c",	RTL_GIGA_MAC_VER_22, 0xff7e1880), // PCI-E
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   154
	_R("RTL8168cp/8111cp",	RTL_GIGA_MAC_VER_23, 0xff7e1880), // PCI-E
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   155
	_R("RTL8168cp/8111cp",	RTL_GIGA_MAC_VER_24, 0xff7e1880), // PCI-E
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   156
	_R("RTL8168d/8111d",	RTL_GIGA_MAC_VER_25, 0xff7e1880), // PCI-E
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   157
	_R("RTL8168d/8111d",	RTL_GIGA_MAC_VER_26, 0xff7e1880), // PCI-E
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   158
	_R("RTL8168dp/8111dp",	RTL_GIGA_MAC_VER_27, 0xff7e1880)  // PCI-E
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   159
};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   160
#undef _R
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   161
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   162
enum cfg_version {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   163
	RTL_CFG_0 = 0x00,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   164
	RTL_CFG_1,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   165
	RTL_CFG_2
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   166
};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   167
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   168
static void rtl_hw_start_8169(struct net_device *);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   169
static void rtl_hw_start_8168(struct net_device *);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   170
static void rtl_hw_start_8101(struct net_device *);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   171
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   172
static DEFINE_PCI_DEVICE_TABLE(rtl8169_pci_tbl) = {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   173
	{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK,	0x8129), 0, 0, RTL_CFG_0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   174
	{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK,	0x8136), 0, 0, RTL_CFG_2 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   175
	{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK,	0x8167), 0, 0, RTL_CFG_0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   176
	{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK,	0x8168), 0, 0, RTL_CFG_1 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   177
	{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK,	0x8169), 0, 0, RTL_CFG_0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   178
	{ PCI_DEVICE(PCI_VENDOR_ID_DLINK,	0x4300), 0, 0, RTL_CFG_0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   179
	{ PCI_DEVICE(PCI_VENDOR_ID_AT,		0xc107), 0, 0, RTL_CFG_0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   180
	{ PCI_DEVICE(0x16ec,			0x0116), 0, 0, RTL_CFG_0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   181
	{ PCI_VENDOR_ID_LINKSYS,		0x1032,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   182
		PCI_ANY_ID, 0x0024, 0, 0, RTL_CFG_0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   183
	{ 0x0001,				0x8168,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   184
		PCI_ANY_ID, 0x2410, 0, 0, RTL_CFG_2 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   185
	{0,},
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   186
};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   187
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   188
MODULE_DEVICE_TABLE(pci, rtl8169_pci_tbl);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   189
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   190
/*
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   191
 * we set our copybreak very high so that we don't have
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   192
 * to allocate 16k frames all the time (see note in
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   193
 * rtl8169_open()
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   194
 */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   195
static int rx_copybreak = 16383;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   196
static int use_dac;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   197
static struct {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   198
	u32 msg_enable;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   199
} debug = { -1 };
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   200
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   201
enum rtl_registers {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   202
	MAC0		= 0,	/* Ethernet hardware address. */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   203
	MAC4		= 4,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   204
	MAR0		= 8,	/* Multicast filter. */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   205
	CounterAddrLow		= 0x10,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   206
	CounterAddrHigh		= 0x14,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   207
	TxDescStartAddrLow	= 0x20,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   208
	TxDescStartAddrHigh	= 0x24,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   209
	TxHDescStartAddrLow	= 0x28,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   210
	TxHDescStartAddrHigh	= 0x2c,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   211
	FLASH		= 0x30,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   212
	ERSR		= 0x36,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   213
	ChipCmd		= 0x37,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   214
	TxPoll		= 0x38,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   215
	IntrMask	= 0x3c,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   216
	IntrStatus	= 0x3e,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   217
	TxConfig	= 0x40,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   218
	RxConfig	= 0x44,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   219
	RxMissed	= 0x4c,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   220
	Cfg9346		= 0x50,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   221
	Config0		= 0x51,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   222
	Config1		= 0x52,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   223
	Config2		= 0x53,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   224
	Config3		= 0x54,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   225
	Config4		= 0x55,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   226
	Config5		= 0x56,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   227
	MultiIntr	= 0x5c,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   228
	PHYAR		= 0x60,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   229
	PHYstatus	= 0x6c,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   230
	RxMaxSize	= 0xda,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   231
	CPlusCmd	= 0xe0,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   232
	IntrMitigate	= 0xe2,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   233
	RxDescAddrLow	= 0xe4,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   234
	RxDescAddrHigh	= 0xe8,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   235
	EarlyTxThres	= 0xec,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   236
	FuncEvent	= 0xf0,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   237
	FuncEventMask	= 0xf4,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   238
	FuncPresetState	= 0xf8,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   239
	FuncForceEvent	= 0xfc,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   240
};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   241
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   242
enum rtl8110_registers {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   243
	TBICSR			= 0x64,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   244
	TBI_ANAR		= 0x68,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   245
	TBI_LPAR		= 0x6a,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   246
};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   247
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   248
enum rtl8168_8101_registers {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   249
	CSIDR			= 0x64,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   250
	CSIAR			= 0x68,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   251
#define	CSIAR_FLAG			0x80000000
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   252
#define	CSIAR_WRITE_CMD			0x80000000
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   253
#define	CSIAR_BYTE_ENABLE		0x0f
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   254
#define	CSIAR_BYTE_ENABLE_SHIFT		12
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   255
#define	CSIAR_ADDR_MASK			0x0fff
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   256
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   257
	EPHYAR			= 0x80,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   258
#define	EPHYAR_FLAG			0x80000000
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   259
#define	EPHYAR_WRITE_CMD		0x80000000
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   260
#define	EPHYAR_REG_MASK			0x1f
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   261
#define	EPHYAR_REG_SHIFT		16
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   262
#define	EPHYAR_DATA_MASK		0xffff
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   263
	DBG_REG			= 0xd1,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   264
#define	FIX_NAK_1			(1 << 4)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   265
#define	FIX_NAK_2			(1 << 3)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   266
	EFUSEAR			= 0xdc,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   267
#define	EFUSEAR_FLAG			0x80000000
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   268
#define	EFUSEAR_WRITE_CMD		0x80000000
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   269
#define	EFUSEAR_READ_CMD		0x00000000
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   270
#define	EFUSEAR_REG_MASK		0x03ff
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   271
#define	EFUSEAR_REG_SHIFT		8
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   272
#define	EFUSEAR_DATA_MASK		0xff
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   273
};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   274
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   275
enum rtl_register_content {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   276
	/* InterruptStatusBits */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   277
	SYSErr		= 0x8000,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   278
	PCSTimeout	= 0x4000,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   279
	SWInt		= 0x0100,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   280
	TxDescUnavail	= 0x0080,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   281
	RxFIFOOver	= 0x0040,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   282
	LinkChg		= 0x0020,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   283
	RxOverflow	= 0x0010,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   284
	TxErr		= 0x0008,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   285
	TxOK		= 0x0004,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   286
	RxErr		= 0x0002,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   287
	RxOK		= 0x0001,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   288
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   289
	/* RxStatusDesc */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   290
	RxFOVF	= (1 << 23),
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   291
	RxRWT	= (1 << 22),
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   292
	RxRES	= (1 << 21),
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   293
	RxRUNT	= (1 << 20),
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   294
	RxCRC	= (1 << 19),
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   295
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   296
	/* ChipCmdBits */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   297
	CmdReset	= 0x10,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   298
	CmdRxEnb	= 0x08,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   299
	CmdTxEnb	= 0x04,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   300
	RxBufEmpty	= 0x01,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   301
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   302
	/* TXPoll register p.5 */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   303
	HPQ		= 0x80,		/* Poll cmd on the high prio queue */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   304
	NPQ		= 0x40,		/* Poll cmd on the low prio queue */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   305
	FSWInt		= 0x01,		/* Forced software interrupt */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   306
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   307
	/* Cfg9346Bits */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   308
	Cfg9346_Lock	= 0x00,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   309
	Cfg9346_Unlock	= 0xc0,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   310
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   311
	/* rx_mode_bits */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   312
	AcceptErr	= 0x20,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   313
	AcceptRunt	= 0x10,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   314
	AcceptBroadcast	= 0x08,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   315
	AcceptMulticast	= 0x04,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   316
	AcceptMyPhys	= 0x02,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   317
	AcceptAllPhys	= 0x01,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   318
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   319
	/* RxConfigBits */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   320
	RxCfgFIFOShift	= 13,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   321
	RxCfgDMAShift	=  8,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   322
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   323
	/* TxConfigBits */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   324
	TxInterFrameGapShift = 24,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   325
	TxDMAShift = 8,	/* DMA burst value (0-7) is shift this many bits */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   326
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   327
	/* Config1 register p.24 */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   328
	LEDS1		= (1 << 7),
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   329
	LEDS0		= (1 << 6),
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   330
	MSIEnable	= (1 << 5),	/* Enable Message Signaled Interrupt */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   331
	Speed_down	= (1 << 4),
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   332
	MEMMAP		= (1 << 3),
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   333
	IOMAP		= (1 << 2),
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   334
	VPD		= (1 << 1),
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   335
	PMEnable	= (1 << 0),	/* Power Management Enable */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   336
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   337
	/* Config2 register p. 25 */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   338
	PCI_Clock_66MHz = 0x01,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   339
	PCI_Clock_33MHz = 0x00,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   340
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   341
	/* Config3 register p.25 */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   342
	MagicPacket	= (1 << 5),	/* Wake up when receives a Magic Packet */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   343
	LinkUp		= (1 << 4),	/* Wake up when the cable connection is re-established */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   344
	Beacon_en	= (1 << 0),	/* 8168 only. Reserved in the 8168b */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   345
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   346
	/* Config5 register p.27 */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   347
	BWF		= (1 << 6),	/* Accept Broadcast wakeup frame */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   348
	MWF		= (1 << 5),	/* Accept Multicast wakeup frame */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   349
	UWF		= (1 << 4),	/* Accept Unicast wakeup frame */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   350
	LanWake		= (1 << 1),	/* LanWake enable/disable */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   351
	PMEStatus	= (1 << 0),	/* PME status can be reset by PCI RST# */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   352
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   353
	/* TBICSR p.28 */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   354
	TBIReset	= 0x80000000,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   355
	TBILoopback	= 0x40000000,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   356
	TBINwEnable	= 0x20000000,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   357
	TBINwRestart	= 0x10000000,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   358
	TBILinkOk	= 0x02000000,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   359
	TBINwComplete	= 0x01000000,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   360
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   361
	/* CPlusCmd p.31 */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   362
	EnableBist	= (1 << 15),	// 8168 8101
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   363
	Mac_dbgo_oe	= (1 << 14),	// 8168 8101
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   364
	Normal_mode	= (1 << 13),	// unused
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   365
	Force_half_dup	= (1 << 12),	// 8168 8101
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   366
	Force_rxflow_en	= (1 << 11),	// 8168 8101
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   367
	Force_txflow_en	= (1 << 10),	// 8168 8101
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   368
	Cxpl_dbg_sel	= (1 << 9),	// 8168 8101
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   369
	ASF		= (1 << 8),	// 8168 8101
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   370
	PktCntrDisable	= (1 << 7),	// 8168 8101
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   371
	Mac_dbgo_sel	= 0x001c,	// 8168
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   372
	RxVlan		= (1 << 6),
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   373
	RxChkSum	= (1 << 5),
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   374
	PCIDAC		= (1 << 4),
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   375
	PCIMulRW	= (1 << 3),
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   376
	INTT_0		= 0x0000,	// 8168
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   377
	INTT_1		= 0x0001,	// 8168
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   378
	INTT_2		= 0x0002,	// 8168
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   379
	INTT_3		= 0x0003,	// 8168
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   380
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   381
	/* rtl8169_PHYstatus */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   382
	TBI_Enable	= 0x80,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   383
	TxFlowCtrl	= 0x40,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   384
	RxFlowCtrl	= 0x20,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   385
	_1000bpsF	= 0x10,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   386
	_100bps		= 0x08,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   387
	_10bps		= 0x04,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   388
	LinkStatus	= 0x02,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   389
	FullDup		= 0x01,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   390
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   391
	/* _TBICSRBit */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   392
	TBILinkOK	= 0x02000000,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   393
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   394
	/* DumpCounterCommand */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   395
	CounterDump	= 0x8,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   396
};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   397
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   398
enum desc_status_bit {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   399
	DescOwn		= (1 << 31), /* Descriptor is owned by NIC */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   400
	RingEnd		= (1 << 30), /* End of descriptor ring */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   401
	FirstFrag	= (1 << 29), /* First segment of a packet */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   402
	LastFrag	= (1 << 28), /* Final segment of a packet */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   403
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   404
	/* Tx private */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   405
	LargeSend	= (1 << 27), /* TCP Large Send Offload (TSO) */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   406
	MSSShift	= 16,        /* MSS value position */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   407
	MSSMask		= 0xfff,     /* MSS value + LargeSend bit: 12 bits */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   408
	IPCS		= (1 << 18), /* Calculate IP checksum */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   409
	UDPCS		= (1 << 17), /* Calculate UDP/IP checksum */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   410
	TCPCS		= (1 << 16), /* Calculate TCP/IP checksum */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   411
	TxVlanTag	= (1 << 17), /* Add VLAN tag */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   412
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   413
	/* Rx private */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   414
	PID1		= (1 << 18), /* Protocol ID bit 1/2 */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   415
	PID0		= (1 << 17), /* Protocol ID bit 2/2 */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   416
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   417
#define RxProtoUDP	(PID1)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   418
#define RxProtoTCP	(PID0)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   419
#define RxProtoIP	(PID1 | PID0)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   420
#define RxProtoMask	RxProtoIP
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   421
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   422
	IPFail		= (1 << 16), /* IP checksum failed */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   423
	UDPFail		= (1 << 15), /* UDP/IP checksum failed */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   424
	TCPFail		= (1 << 14), /* TCP/IP checksum failed */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   425
	RxVlanTag	= (1 << 16), /* VLAN tag available */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   426
};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   427
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   428
#define RsvdMask	0x3fffc000
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   429
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   430
struct TxDesc {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   431
	__le32 opts1;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   432
	__le32 opts2;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   433
	__le64 addr;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   434
};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   435
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   436
struct RxDesc {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   437
	__le32 opts1;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   438
	__le32 opts2;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   439
	__le64 addr;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   440
};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   441
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   442
struct ring_info {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   443
	struct sk_buff	*skb;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   444
	u32		len;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   445
	u8		__pad[sizeof(void *) - sizeof(u32)];
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   446
};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   447
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   448
enum features {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   449
	RTL_FEATURE_WOL		= (1 << 0),
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   450
	RTL_FEATURE_MSI		= (1 << 1),
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   451
	RTL_FEATURE_GMII	= (1 << 2),
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   452
};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   453
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   454
struct rtl8169_counters {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   455
	__le64	tx_packets;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   456
	__le64	rx_packets;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   457
	__le64	tx_errors;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   458
	__le32	rx_errors;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   459
	__le16	rx_missed;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   460
	__le16	align_errors;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   461
	__le32	tx_one_collision;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   462
	__le32	tx_multi_collision;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   463
	__le64	rx_unicast;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   464
	__le64	rx_broadcast;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   465
	__le32	rx_multicast;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   466
	__le16	tx_aborted;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   467
	__le16	tx_underun;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   468
};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   469
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   470
struct rtl8169_private {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   471
	void __iomem *mmio_addr;	/* memory map physical address */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   472
	struct pci_dev *pci_dev;	/* Index of PCI device */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   473
	struct net_device *dev;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   474
	struct napi_struct napi;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   475
	spinlock_t lock;		/* spin lock flag */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   476
	u32 msg_enable;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   477
	int chipset;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   478
	int mac_version;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   479
	u32 cur_rx; /* Index into the Rx descriptor buffer of next Rx pkt. */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   480
	u32 cur_tx; /* Index into the Tx descriptor buffer of next Rx pkt. */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   481
	u32 dirty_rx;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   482
	u32 dirty_tx;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   483
	struct TxDesc *TxDescArray;	/* 256-aligned Tx descriptor ring */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   484
	struct RxDesc *RxDescArray;	/* 256-aligned Rx descriptor ring */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   485
	dma_addr_t TxPhyAddr;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   486
	dma_addr_t RxPhyAddr;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   487
	struct sk_buff *Rx_skbuff[NUM_RX_DESC];	/* Rx data buffers */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   488
	struct ring_info tx_skb[NUM_TX_DESC];	/* Tx data buffers */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   489
	unsigned align;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   490
	unsigned rx_buf_sz;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   491
	struct timer_list timer;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   492
	u16 cp_cmd;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   493
	u16 intr_event;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   494
	u16 napi_event;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   495
	u16 intr_mask;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   496
	int phy_1000_ctrl_reg;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   497
#ifdef CONFIG_R8169_VLAN
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   498
	struct vlan_group *vlgrp;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   499
#endif
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   500
	int (*set_speed)(struct net_device *, u8 autoneg, u16 speed, u8 duplex);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   501
	int (*get_settings)(struct net_device *, struct ethtool_cmd *);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   502
	void (*phy_reset_enable)(void __iomem *);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   503
	void (*hw_start)(struct net_device *);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   504
	unsigned int (*phy_reset_pending)(void __iomem *);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   505
	unsigned int (*link_ok)(void __iomem *);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   506
	int (*do_ioctl)(struct rtl8169_private *tp, struct mii_ioctl_data *data, int cmd);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   507
	int pcie_cap;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   508
	struct delayed_work task;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   509
	unsigned features;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   510
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   511
	struct mii_if_info mii;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   512
	struct rtl8169_counters counters;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   513
	u32 saved_wolopts;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   514
};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   515
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   516
MODULE_AUTHOR("Realtek and the Linux r8169 crew <netdev@vger.kernel.org>");
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   517
MODULE_DESCRIPTION("RealTek RTL-8169 Gigabit Ethernet driver");
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   518
module_param(rx_copybreak, int, 0);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   519
MODULE_PARM_DESC(rx_copybreak, "Copy breakpoint for copy-only-tiny-frames");
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   520
module_param(use_dac, int, 0);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   521
MODULE_PARM_DESC(use_dac, "Enable PCI DAC. Unsafe on 32 bit PCI slot.");
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   522
module_param_named(debug, debug.msg_enable, int, 0);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   523
MODULE_PARM_DESC(debug, "Debug verbosity level (0=none, ..., 16=all)");
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   524
MODULE_LICENSE("GPL");
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   525
MODULE_VERSION(RTL8169_VERSION);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   526
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   527
static int rtl8169_open(struct net_device *dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   528
static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   529
				      struct net_device *dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   530
static irqreturn_t rtl8169_interrupt(int irq, void *dev_instance);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   531
static int rtl8169_init_ring(struct net_device *dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   532
static void rtl_hw_start(struct net_device *dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   533
static int rtl8169_close(struct net_device *dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   534
static void rtl_set_rx_mode(struct net_device *dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   535
static void rtl8169_tx_timeout(struct net_device *dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   536
static struct net_device_stats *rtl8169_get_stats(struct net_device *dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   537
static int rtl8169_rx_interrupt(struct net_device *, struct rtl8169_private *,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   538
				void __iomem *, u32 budget);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   539
static int rtl8169_change_mtu(struct net_device *dev, int new_mtu);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   540
static void rtl8169_down(struct net_device *dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   541
static void rtl8169_rx_clear(struct rtl8169_private *tp);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   542
static int rtl8169_poll(struct napi_struct *napi, int budget);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   543
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   544
static const unsigned int rtl8169_rx_config =
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   545
	(RX_FIFO_THRESH << RxCfgFIFOShift) | (RX_DMA_BURST << RxCfgDMAShift);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   546
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   547
static void mdio_write(void __iomem *ioaddr, int reg_addr, int value)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   548
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   549
	int i;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   550
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   551
	RTL_W32(PHYAR, 0x80000000 | (reg_addr & 0x1f) << 16 | (value & 0xffff));
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   552
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   553
	for (i = 20; i > 0; i--) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   554
		/*
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   555
		 * Check if the RTL8169 has completed writing to the specified
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   556
		 * MII register.
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   557
		 */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   558
		if (!(RTL_R32(PHYAR) & 0x80000000))
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   559
			break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   560
		udelay(25);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   561
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   562
	/*
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   563
	 * According to hardware specs a 20us delay is required after write
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   564
	 * complete indication, but before sending next command.
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   565
	 */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   566
	udelay(20);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   567
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   568
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   569
static int mdio_read(void __iomem *ioaddr, int reg_addr)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   570
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   571
	int i, value = -1;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   572
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   573
	RTL_W32(PHYAR, 0x0 | (reg_addr & 0x1f) << 16);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   574
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   575
	for (i = 20; i > 0; i--) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   576
		/*
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   577
		 * Check if the RTL8169 has completed retrieving data from
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   578
		 * the specified MII register.
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   579
		 */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   580
		if (RTL_R32(PHYAR) & 0x80000000) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   581
			value = RTL_R32(PHYAR) & 0xffff;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   582
			break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   583
		}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   584
		udelay(25);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   585
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   586
	/*
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   587
	 * According to hardware specs a 20us delay is required after read
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   588
	 * complete indication, but before sending next command.
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   589
	 */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   590
	udelay(20);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   591
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   592
	return value;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   593
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   594
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   595
static void mdio_patch(void __iomem *ioaddr, int reg_addr, int value)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   596
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   597
	mdio_write(ioaddr, reg_addr, mdio_read(ioaddr, reg_addr) | value);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   598
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   599
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   600
static void mdio_plus_minus(void __iomem *ioaddr, int reg_addr, int p, int m)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   601
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   602
	int val;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   603
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   604
	val = mdio_read(ioaddr, reg_addr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   605
	mdio_write(ioaddr, reg_addr, (val | p) & ~m);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   606
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   607
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   608
static void rtl_mdio_write(struct net_device *dev, int phy_id, int location,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   609
			   int val)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   610
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   611
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   612
	void __iomem *ioaddr = tp->mmio_addr;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   613
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   614
	mdio_write(ioaddr, location, val);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   615
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   616
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   617
static int rtl_mdio_read(struct net_device *dev, int phy_id, int location)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   618
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   619
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   620
	void __iomem *ioaddr = tp->mmio_addr;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   621
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   622
	return mdio_read(ioaddr, location);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   623
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   624
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   625
static void rtl_ephy_write(void __iomem *ioaddr, int reg_addr, int value)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   626
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   627
	unsigned int i;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   628
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   629
	RTL_W32(EPHYAR, EPHYAR_WRITE_CMD | (value & EPHYAR_DATA_MASK) |
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   630
		(reg_addr & EPHYAR_REG_MASK) << EPHYAR_REG_SHIFT);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   631
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   632
	for (i = 0; i < 100; i++) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   633
		if (!(RTL_R32(EPHYAR) & EPHYAR_FLAG))
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   634
			break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   635
		udelay(10);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   636
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   637
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   638
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   639
static u16 rtl_ephy_read(void __iomem *ioaddr, int reg_addr)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   640
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   641
	u16 value = 0xffff;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   642
	unsigned int i;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   643
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   644
	RTL_W32(EPHYAR, (reg_addr & EPHYAR_REG_MASK) << EPHYAR_REG_SHIFT);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   645
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   646
	for (i = 0; i < 100; i++) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   647
		if (RTL_R32(EPHYAR) & EPHYAR_FLAG) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   648
			value = RTL_R32(EPHYAR) & EPHYAR_DATA_MASK;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   649
			break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   650
		}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   651
		udelay(10);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   652
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   653
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   654
	return value;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   655
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   656
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   657
static void rtl_csi_write(void __iomem *ioaddr, int addr, int value)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   658
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   659
	unsigned int i;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   660
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   661
	RTL_W32(CSIDR, value);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   662
	RTL_W32(CSIAR, CSIAR_WRITE_CMD | (addr & CSIAR_ADDR_MASK) |
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   663
		CSIAR_BYTE_ENABLE << CSIAR_BYTE_ENABLE_SHIFT);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   664
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   665
	for (i = 0; i < 100; i++) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   666
		if (!(RTL_R32(CSIAR) & CSIAR_FLAG))
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   667
			break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   668
		udelay(10);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   669
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   670
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   671
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   672
static u32 rtl_csi_read(void __iomem *ioaddr, int addr)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   673
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   674
	u32 value = ~0x00;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   675
	unsigned int i;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   676
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   677
	RTL_W32(CSIAR, (addr & CSIAR_ADDR_MASK) |
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   678
		CSIAR_BYTE_ENABLE << CSIAR_BYTE_ENABLE_SHIFT);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   679
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   680
	for (i = 0; i < 100; i++) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   681
		if (RTL_R32(CSIAR) & CSIAR_FLAG) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   682
			value = RTL_R32(CSIDR);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   683
			break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   684
		}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   685
		udelay(10);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   686
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   687
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   688
	return value;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   689
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   690
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   691
static u8 rtl8168d_efuse_read(void __iomem *ioaddr, int reg_addr)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   692
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   693
	u8 value = 0xff;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   694
	unsigned int i;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   695
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   696
	RTL_W32(EFUSEAR, (reg_addr & EFUSEAR_REG_MASK) << EFUSEAR_REG_SHIFT);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   697
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   698
	for (i = 0; i < 300; i++) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   699
		if (RTL_R32(EFUSEAR) & EFUSEAR_FLAG) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   700
			value = RTL_R32(EFUSEAR) & EFUSEAR_DATA_MASK;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   701
			break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   702
		}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   703
		udelay(100);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   704
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   705
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   706
	return value;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   707
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   708
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   709
static void rtl8169_irq_mask_and_ack(void __iomem *ioaddr)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   710
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   711
	RTL_W16(IntrMask, 0x0000);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   712
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   713
	RTL_W16(IntrStatus, 0xffff);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   714
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   715
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   716
static void rtl8169_asic_down(void __iomem *ioaddr)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   717
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   718
	RTL_W8(ChipCmd, 0x00);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   719
	rtl8169_irq_mask_and_ack(ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   720
	RTL_R16(CPlusCmd);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   721
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   722
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   723
static unsigned int rtl8169_tbi_reset_pending(void __iomem *ioaddr)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   724
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   725
	return RTL_R32(TBICSR) & TBIReset;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   726
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   727
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   728
static unsigned int rtl8169_xmii_reset_pending(void __iomem *ioaddr)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   729
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   730
	return mdio_read(ioaddr, MII_BMCR) & BMCR_RESET;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   731
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   732
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   733
static unsigned int rtl8169_tbi_link_ok(void __iomem *ioaddr)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   734
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   735
	return RTL_R32(TBICSR) & TBILinkOk;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   736
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   737
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   738
static unsigned int rtl8169_xmii_link_ok(void __iomem *ioaddr)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   739
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   740
	return RTL_R8(PHYstatus) & LinkStatus;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   741
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   742
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   743
static void rtl8169_tbi_reset_enable(void __iomem *ioaddr)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   744
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   745
	RTL_W32(TBICSR, RTL_R32(TBICSR) | TBIReset);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   746
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   747
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   748
static void rtl8169_xmii_reset_enable(void __iomem *ioaddr)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   749
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   750
	unsigned int val;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   751
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   752
	val = mdio_read(ioaddr, MII_BMCR) | BMCR_RESET;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   753
	mdio_write(ioaddr, MII_BMCR, val & 0xffff);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   754
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   755
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   756
static void rtl8169_check_link_status(struct net_device *dev,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   757
				      struct rtl8169_private *tp,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   758
				      void __iomem *ioaddr)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   759
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   760
	unsigned long flags;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   761
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   762
	spin_lock_irqsave(&tp->lock, flags);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   763
	if (tp->link_ok(ioaddr)) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   764
		/* This is to cancel a scheduled suspend if there's one. */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   765
		pm_request_resume(&tp->pci_dev->dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   766
		netif_carrier_on(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   767
		netif_info(tp, ifup, dev, "link up\n");
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   768
	} else {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   769
		netif_carrier_off(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   770
		netif_info(tp, ifdown, dev, "link down\n");
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   771
		pm_schedule_suspend(&tp->pci_dev->dev, 100);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   772
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   773
	spin_unlock_irqrestore(&tp->lock, flags);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   774
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   775
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   776
#define WAKE_ANY (WAKE_PHY | WAKE_MAGIC | WAKE_UCAST | WAKE_BCAST | WAKE_MCAST)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   777
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   778
static u32 __rtl8169_get_wol(struct rtl8169_private *tp)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   779
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   780
	void __iomem *ioaddr = tp->mmio_addr;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   781
	u8 options;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   782
	u32 wolopts = 0;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   783
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   784
	options = RTL_R8(Config1);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   785
	if (!(options & PMEnable))
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   786
		return 0;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   787
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   788
	options = RTL_R8(Config3);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   789
	if (options & LinkUp)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   790
		wolopts |= WAKE_PHY;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   791
	if (options & MagicPacket)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   792
		wolopts |= WAKE_MAGIC;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   793
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   794
	options = RTL_R8(Config5);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   795
	if (options & UWF)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   796
		wolopts |= WAKE_UCAST;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   797
	if (options & BWF)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   798
		wolopts |= WAKE_BCAST;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   799
	if (options & MWF)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   800
		wolopts |= WAKE_MCAST;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   801
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   802
	return wolopts;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   803
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   804
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   805
static void rtl8169_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   806
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   807
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   808
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   809
	spin_lock_irq(&tp->lock);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   810
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   811
	wol->supported = WAKE_ANY;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   812
	wol->wolopts = __rtl8169_get_wol(tp);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   813
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   814
	spin_unlock_irq(&tp->lock);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   815
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   816
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   817
static void __rtl8169_set_wol(struct rtl8169_private *tp, u32 wolopts)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   818
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   819
	void __iomem *ioaddr = tp->mmio_addr;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   820
	unsigned int i;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   821
	static const struct {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   822
		u32 opt;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   823
		u16 reg;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   824
		u8  mask;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   825
	} cfg[] = {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   826
		{ WAKE_ANY,   Config1, PMEnable },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   827
		{ WAKE_PHY,   Config3, LinkUp },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   828
		{ WAKE_MAGIC, Config3, MagicPacket },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   829
		{ WAKE_UCAST, Config5, UWF },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   830
		{ WAKE_BCAST, Config5, BWF },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   831
		{ WAKE_MCAST, Config5, MWF },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   832
		{ WAKE_ANY,   Config5, LanWake }
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   833
	};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   834
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   835
	RTL_W8(Cfg9346, Cfg9346_Unlock);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   836
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   837
	for (i = 0; i < ARRAY_SIZE(cfg); i++) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   838
		u8 options = RTL_R8(cfg[i].reg) & ~cfg[i].mask;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   839
		if (wolopts & cfg[i].opt)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   840
			options |= cfg[i].mask;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   841
		RTL_W8(cfg[i].reg, options);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   842
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   843
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   844
	RTL_W8(Cfg9346, Cfg9346_Lock);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   845
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   846
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   847
static int rtl8169_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   848
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   849
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   850
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   851
	spin_lock_irq(&tp->lock);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   852
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   853
	if (wol->wolopts)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   854
		tp->features |= RTL_FEATURE_WOL;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   855
	else
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   856
		tp->features &= ~RTL_FEATURE_WOL;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   857
	__rtl8169_set_wol(tp, wol->wolopts);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   858
	device_set_wakeup_enable(&tp->pci_dev->dev, wol->wolopts);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   859
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   860
	spin_unlock_irq(&tp->lock);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   861
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   862
	return 0;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   863
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   864
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   865
static void rtl8169_get_drvinfo(struct net_device *dev,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   866
				struct ethtool_drvinfo *info)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   867
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   868
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   869
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   870
	strcpy(info->driver, MODULENAME);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   871
	strcpy(info->version, RTL8169_VERSION);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   872
	strcpy(info->bus_info, pci_name(tp->pci_dev));
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   873
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   874
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   875
static int rtl8169_get_regs_len(struct net_device *dev)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   876
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   877
	return R8169_REGS_SIZE;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   878
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   879
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   880
static int rtl8169_set_speed_tbi(struct net_device *dev,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   881
				 u8 autoneg, u16 speed, u8 duplex)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   882
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   883
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   884
	void __iomem *ioaddr = tp->mmio_addr;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   885
	int ret = 0;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   886
	u32 reg;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   887
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   888
	reg = RTL_R32(TBICSR);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   889
	if ((autoneg == AUTONEG_DISABLE) && (speed == SPEED_1000) &&
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   890
	    (duplex == DUPLEX_FULL)) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   891
		RTL_W32(TBICSR, reg & ~(TBINwEnable | TBINwRestart));
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   892
	} else if (autoneg == AUTONEG_ENABLE)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   893
		RTL_W32(TBICSR, reg | TBINwEnable | TBINwRestart);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   894
	else {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   895
		netif_warn(tp, link, dev,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   896
			   "incorrect speed setting refused in TBI mode\n");
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   897
		ret = -EOPNOTSUPP;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   898
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   899
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   900
	return ret;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   901
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   902
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   903
static int rtl8169_set_speed_xmii(struct net_device *dev,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   904
				  u8 autoneg, u16 speed, u8 duplex)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   905
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   906
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   907
	void __iomem *ioaddr = tp->mmio_addr;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   908
	int giga_ctrl, bmcr;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   909
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   910
	if (autoneg == AUTONEG_ENABLE) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   911
		int auto_nego;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   912
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   913
		auto_nego = mdio_read(ioaddr, MII_ADVERTISE);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   914
		auto_nego |= (ADVERTISE_10HALF | ADVERTISE_10FULL |
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   915
			      ADVERTISE_100HALF | ADVERTISE_100FULL);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   916
		auto_nego |= ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   917
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   918
		giga_ctrl = mdio_read(ioaddr, MII_CTRL1000);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   919
		giga_ctrl &= ~(ADVERTISE_1000FULL | ADVERTISE_1000HALF);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   920
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   921
		/* The 8100e/8101e/8102e do Fast Ethernet only. */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   922
		if ((tp->mac_version != RTL_GIGA_MAC_VER_07) &&
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   923
		    (tp->mac_version != RTL_GIGA_MAC_VER_08) &&
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   924
		    (tp->mac_version != RTL_GIGA_MAC_VER_09) &&
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   925
		    (tp->mac_version != RTL_GIGA_MAC_VER_10) &&
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   926
		    (tp->mac_version != RTL_GIGA_MAC_VER_13) &&
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   927
		    (tp->mac_version != RTL_GIGA_MAC_VER_14) &&
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   928
		    (tp->mac_version != RTL_GIGA_MAC_VER_15) &&
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   929
		    (tp->mac_version != RTL_GIGA_MAC_VER_16)) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   930
			giga_ctrl |= ADVERTISE_1000FULL | ADVERTISE_1000HALF;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   931
		} else {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   932
			netif_info(tp, link, dev,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   933
				   "PHY does not support 1000Mbps\n");
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   934
		}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   935
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   936
		bmcr = BMCR_ANENABLE | BMCR_ANRESTART;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   937
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   938
		if ((tp->mac_version == RTL_GIGA_MAC_VER_11) ||
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   939
		    (tp->mac_version == RTL_GIGA_MAC_VER_12) ||
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   940
		    (tp->mac_version >= RTL_GIGA_MAC_VER_17)) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   941
			/*
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   942
			 * Wake up the PHY.
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   943
			 * Vendor specific (0x1f) and reserved (0x0e) MII
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   944
			 * registers.
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   945
			 */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   946
			mdio_write(ioaddr, 0x1f, 0x0000);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   947
			mdio_write(ioaddr, 0x0e, 0x0000);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   948
		}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   949
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   950
		mdio_write(ioaddr, MII_ADVERTISE, auto_nego);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   951
		mdio_write(ioaddr, MII_CTRL1000, giga_ctrl);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   952
	} else {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   953
		giga_ctrl = 0;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   954
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   955
		if (speed == SPEED_10)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   956
			bmcr = 0;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   957
		else if (speed == SPEED_100)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   958
			bmcr = BMCR_SPEED100;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   959
		else
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   960
			return -EINVAL;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   961
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   962
		if (duplex == DUPLEX_FULL)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   963
			bmcr |= BMCR_FULLDPLX;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   964
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   965
		mdio_write(ioaddr, 0x1f, 0x0000);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   966
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   967
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   968
	tp->phy_1000_ctrl_reg = giga_ctrl;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   969
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   970
	mdio_write(ioaddr, MII_BMCR, bmcr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   971
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   972
	if ((tp->mac_version == RTL_GIGA_MAC_VER_02) ||
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   973
	    (tp->mac_version == RTL_GIGA_MAC_VER_03)) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   974
		if ((speed == SPEED_100) && (autoneg != AUTONEG_ENABLE)) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   975
			mdio_write(ioaddr, 0x17, 0x2138);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   976
			mdio_write(ioaddr, 0x0e, 0x0260);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   977
		} else {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   978
			mdio_write(ioaddr, 0x17, 0x2108);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   979
			mdio_write(ioaddr, 0x0e, 0x0000);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   980
		}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   981
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   982
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   983
	return 0;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   984
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   985
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   986
static int rtl8169_set_speed(struct net_device *dev,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   987
			     u8 autoneg, u16 speed, u8 duplex)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   988
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   989
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   990
	int ret;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   991
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   992
	ret = tp->set_speed(dev, autoneg, speed, duplex);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   993
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   994
	if (netif_running(dev) && (tp->phy_1000_ctrl_reg & ADVERTISE_1000FULL))
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   995
		mod_timer(&tp->timer, jiffies + RTL8169_PHY_TIMEOUT);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   996
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   997
	return ret;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   998
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   999
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1000
static int rtl8169_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1001
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1002
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1003
	unsigned long flags;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1004
	int ret;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1005
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1006
	spin_lock_irqsave(&tp->lock, flags);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1007
	ret = rtl8169_set_speed(dev, cmd->autoneg, cmd->speed, cmd->duplex);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1008
	spin_unlock_irqrestore(&tp->lock, flags);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1009
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1010
	return ret;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1011
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1012
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1013
static u32 rtl8169_get_rx_csum(struct net_device *dev)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1014
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1015
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1016
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1017
	return tp->cp_cmd & RxChkSum;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1018
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1019
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1020
static int rtl8169_set_rx_csum(struct net_device *dev, u32 data)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1021
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1022
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1023
	void __iomem *ioaddr = tp->mmio_addr;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1024
	unsigned long flags;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1025
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1026
	spin_lock_irqsave(&tp->lock, flags);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1027
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1028
	if (data)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1029
		tp->cp_cmd |= RxChkSum;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1030
	else
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1031
		tp->cp_cmd &= ~RxChkSum;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1032
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1033
	RTL_W16(CPlusCmd, tp->cp_cmd);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1034
	RTL_R16(CPlusCmd);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1035
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1036
	spin_unlock_irqrestore(&tp->lock, flags);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1037
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1038
	return 0;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1039
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1040
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1041
#ifdef CONFIG_R8169_VLAN
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1042
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1043
static inline u32 rtl8169_tx_vlan_tag(struct rtl8169_private *tp,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1044
				      struct sk_buff *skb)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1045
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1046
	return (tp->vlgrp && vlan_tx_tag_present(skb)) ?
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1047
		TxVlanTag | swab16(vlan_tx_tag_get(skb)) : 0x00;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1048
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1049
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1050
static void rtl8169_vlan_rx_register(struct net_device *dev,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1051
				     struct vlan_group *grp)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1052
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1053
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1054
	void __iomem *ioaddr = tp->mmio_addr;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1055
	unsigned long flags;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1056
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1057
	spin_lock_irqsave(&tp->lock, flags);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1058
	tp->vlgrp = grp;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1059
	/*
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1060
	 * Do not disable RxVlan on 8110SCd.
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1061
	 */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1062
	if (tp->vlgrp || (tp->mac_version == RTL_GIGA_MAC_VER_05))
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1063
		tp->cp_cmd |= RxVlan;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1064
	else
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1065
		tp->cp_cmd &= ~RxVlan;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1066
	RTL_W16(CPlusCmd, tp->cp_cmd);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1067
	RTL_R16(CPlusCmd);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1068
	spin_unlock_irqrestore(&tp->lock, flags);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1069
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1070
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1071
static int rtl8169_rx_vlan_skb(struct rtl8169_private *tp, struct RxDesc *desc,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1072
			       struct sk_buff *skb, int polling)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1073
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1074
	u32 opts2 = le32_to_cpu(desc->opts2);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1075
	struct vlan_group *vlgrp = tp->vlgrp;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1076
	int ret;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1077
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1078
	if (vlgrp && (opts2 & RxVlanTag)) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1079
		__vlan_hwaccel_rx(skb, vlgrp, swab16(opts2 & 0xffff), polling);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1080
		ret = 0;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1081
	} else
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1082
		ret = -1;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1083
	desc->opts2 = 0;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1084
	return ret;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1085
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1086
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1087
#else /* !CONFIG_R8169_VLAN */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1088
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1089
static inline u32 rtl8169_tx_vlan_tag(struct rtl8169_private *tp,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1090
				      struct sk_buff *skb)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1091
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1092
	return 0;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1093
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1094
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1095
static int rtl8169_rx_vlan_skb(struct rtl8169_private *tp, struct RxDesc *desc,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1096
			       struct sk_buff *skb, int polling)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1097
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1098
	return -1;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1099
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1100
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1101
#endif
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1102
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1103
static int rtl8169_gset_tbi(struct net_device *dev, struct ethtool_cmd *cmd)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1104
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1105
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1106
	void __iomem *ioaddr = tp->mmio_addr;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1107
	u32 status;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1108
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1109
	cmd->supported =
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1110
		SUPPORTED_1000baseT_Full | SUPPORTED_Autoneg | SUPPORTED_FIBRE;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1111
	cmd->port = PORT_FIBRE;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1112
	cmd->transceiver = XCVR_INTERNAL;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1113
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1114
	status = RTL_R32(TBICSR);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1115
	cmd->advertising = (status & TBINwEnable) ?  ADVERTISED_Autoneg : 0;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1116
	cmd->autoneg = !!(status & TBINwEnable);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1117
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1118
	cmd->speed = SPEED_1000;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1119
	cmd->duplex = DUPLEX_FULL; /* Always set */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1120
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1121
	return 0;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1122
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1123
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1124
static int rtl8169_gset_xmii(struct net_device *dev, struct ethtool_cmd *cmd)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1125
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1126
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1127
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1128
	return mii_ethtool_gset(&tp->mii, cmd);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1129
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1130
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1131
static int rtl8169_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1132
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1133
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1134
	unsigned long flags;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1135
	int rc;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1136
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1137
	spin_lock_irqsave(&tp->lock, flags);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1138
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1139
	rc = tp->get_settings(dev, cmd);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1140
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1141
	spin_unlock_irqrestore(&tp->lock, flags);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1142
	return rc;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1143
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1144
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1145
static void rtl8169_get_regs(struct net_device *dev, struct ethtool_regs *regs,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1146
			     void *p)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1147
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1148
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1149
	unsigned long flags;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1150
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1151
	if (regs->len > R8169_REGS_SIZE)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1152
		regs->len = R8169_REGS_SIZE;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1153
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1154
	spin_lock_irqsave(&tp->lock, flags);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1155
	memcpy_fromio(p, tp->mmio_addr, regs->len);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1156
	spin_unlock_irqrestore(&tp->lock, flags);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1157
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1158
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1159
static u32 rtl8169_get_msglevel(struct net_device *dev)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1160
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1161
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1162
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1163
	return tp->msg_enable;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1164
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1165
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1166
static void rtl8169_set_msglevel(struct net_device *dev, u32 value)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1167
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1168
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1169
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1170
	tp->msg_enable = value;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1171
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1172
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1173
static const char rtl8169_gstrings[][ETH_GSTRING_LEN] = {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1174
	"tx_packets",
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1175
	"rx_packets",
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1176
	"tx_errors",
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1177
	"rx_errors",
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1178
	"rx_missed",
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1179
	"align_errors",
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1180
	"tx_single_collisions",
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1181
	"tx_multi_collisions",
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1182
	"unicast",
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1183
	"broadcast",
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1184
	"multicast",
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1185
	"tx_aborted",
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1186
	"tx_underrun",
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1187
};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1188
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1189
static int rtl8169_get_sset_count(struct net_device *dev, int sset)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1190
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1191
	switch (sset) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1192
	case ETH_SS_STATS:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1193
		return ARRAY_SIZE(rtl8169_gstrings);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1194
	default:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1195
		return -EOPNOTSUPP;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1196
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1197
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1198
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1199
static void rtl8169_update_counters(struct net_device *dev)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1200
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1201
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1202
	void __iomem *ioaddr = tp->mmio_addr;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1203
	struct rtl8169_counters *counters;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1204
	dma_addr_t paddr;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1205
	u32 cmd;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1206
	int wait = 1000;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1207
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1208
	/*
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1209
	 * Some chips are unable to dump tally counters when the receiver
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1210
	 * is disabled.
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1211
	 */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1212
	if ((RTL_R8(ChipCmd) & CmdRxEnb) == 0)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1213
		return;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1214
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1215
	counters = dma_alloc_coherent(&tp->pci_dev->dev, sizeof(*counters),
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1216
				      &paddr, GFP_KERNEL);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1217
	if (!counters)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1218
		return;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1219
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1220
	RTL_W32(CounterAddrHigh, (u64)paddr >> 32);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1221
	cmd = (u64)paddr & DMA_BIT_MASK(32);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1222
	RTL_W32(CounterAddrLow, cmd);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1223
	RTL_W32(CounterAddrLow, cmd | CounterDump);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1224
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1225
	while (wait--) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1226
		if ((RTL_R32(CounterAddrLow) & CounterDump) == 0) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1227
			/* copy updated counters */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1228
			memcpy(&tp->counters, counters, sizeof(*counters));
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1229
			break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1230
		}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1231
		udelay(10);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1232
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1233
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1234
	RTL_W32(CounterAddrLow, 0);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1235
	RTL_W32(CounterAddrHigh, 0);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1236
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1237
	dma_free_coherent(&tp->pci_dev->dev, sizeof(*counters), counters,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1238
			  paddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1239
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1240
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1241
static void rtl8169_get_ethtool_stats(struct net_device *dev,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1242
				      struct ethtool_stats *stats, u64 *data)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1243
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1244
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1245
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1246
	ASSERT_RTNL();
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1247
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1248
	rtl8169_update_counters(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1249
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1250
	data[0] = le64_to_cpu(tp->counters.tx_packets);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1251
	data[1] = le64_to_cpu(tp->counters.rx_packets);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1252
	data[2] = le64_to_cpu(tp->counters.tx_errors);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1253
	data[3] = le32_to_cpu(tp->counters.rx_errors);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1254
	data[4] = le16_to_cpu(tp->counters.rx_missed);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1255
	data[5] = le16_to_cpu(tp->counters.align_errors);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1256
	data[6] = le32_to_cpu(tp->counters.tx_one_collision);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1257
	data[7] = le32_to_cpu(tp->counters.tx_multi_collision);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1258
	data[8] = le64_to_cpu(tp->counters.rx_unicast);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1259
	data[9] = le64_to_cpu(tp->counters.rx_broadcast);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1260
	data[10] = le32_to_cpu(tp->counters.rx_multicast);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1261
	data[11] = le16_to_cpu(tp->counters.tx_aborted);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1262
	data[12] = le16_to_cpu(tp->counters.tx_underun);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1263
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1264
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1265
static void rtl8169_get_strings(struct net_device *dev, u32 stringset, u8 *data)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1266
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1267
	switch(stringset) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1268
	case ETH_SS_STATS:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1269
		memcpy(data, *rtl8169_gstrings, sizeof(rtl8169_gstrings));
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1270
		break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1271
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1272
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1273
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1274
static const struct ethtool_ops rtl8169_ethtool_ops = {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1275
	.get_drvinfo		= rtl8169_get_drvinfo,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1276
	.get_regs_len		= rtl8169_get_regs_len,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1277
	.get_link		= ethtool_op_get_link,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1278
	.get_settings		= rtl8169_get_settings,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1279
	.set_settings		= rtl8169_set_settings,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1280
	.get_msglevel		= rtl8169_get_msglevel,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1281
	.set_msglevel		= rtl8169_set_msglevel,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1282
	.get_rx_csum		= rtl8169_get_rx_csum,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1283
	.set_rx_csum		= rtl8169_set_rx_csum,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1284
	.set_tx_csum		= ethtool_op_set_tx_csum,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1285
	.set_sg			= ethtool_op_set_sg,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1286
	.set_tso		= ethtool_op_set_tso,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1287
	.get_regs		= rtl8169_get_regs,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1288
	.get_wol		= rtl8169_get_wol,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1289
	.set_wol		= rtl8169_set_wol,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1290
	.get_strings		= rtl8169_get_strings,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1291
	.get_sset_count		= rtl8169_get_sset_count,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1292
	.get_ethtool_stats	= rtl8169_get_ethtool_stats,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1293
};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1294
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1295
static void rtl8169_get_mac_version(struct rtl8169_private *tp,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1296
				    void __iomem *ioaddr)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1297
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1298
	/*
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1299
	 * The driver currently handles the 8168Bf and the 8168Be identically
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1300
	 * but they can be identified more specifically through the test below
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1301
	 * if needed:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1302
	 *
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1303
	 * (RTL_R32(TxConfig) & 0x700000) == 0x500000 ? 8168Bf : 8168Be
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1304
	 *
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1305
	 * Same thing for the 8101Eb and the 8101Ec:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1306
	 *
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1307
	 * (RTL_R32(TxConfig) & 0x700000) == 0x200000 ? 8101Eb : 8101Ec
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1308
	 */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1309
	static const struct {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1310
		u32 mask;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1311
		u32 val;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1312
		int mac_version;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1313
	} mac_info[] = {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1314
		/* 8168D family. */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1315
		{ 0x7cf00000, 0x28300000,	RTL_GIGA_MAC_VER_26 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1316
		{ 0x7cf00000, 0x28100000,	RTL_GIGA_MAC_VER_25 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1317
		{ 0x7c800000, 0x28800000,	RTL_GIGA_MAC_VER_27 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1318
		{ 0x7c800000, 0x28000000,	RTL_GIGA_MAC_VER_26 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1319
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1320
		/* 8168C family. */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1321
		{ 0x7cf00000, 0x3cb00000,	RTL_GIGA_MAC_VER_24 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1322
		{ 0x7cf00000, 0x3c900000,	RTL_GIGA_MAC_VER_23 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1323
		{ 0x7cf00000, 0x3c800000,	RTL_GIGA_MAC_VER_18 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1324
		{ 0x7c800000, 0x3c800000,	RTL_GIGA_MAC_VER_24 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1325
		{ 0x7cf00000, 0x3c000000,	RTL_GIGA_MAC_VER_19 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1326
		{ 0x7cf00000, 0x3c200000,	RTL_GIGA_MAC_VER_20 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1327
		{ 0x7cf00000, 0x3c300000,	RTL_GIGA_MAC_VER_21 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1328
		{ 0x7cf00000, 0x3c400000,	RTL_GIGA_MAC_VER_22 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1329
		{ 0x7c800000, 0x3c000000,	RTL_GIGA_MAC_VER_22 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1330
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1331
		/* 8168B family. */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1332
		{ 0x7cf00000, 0x38000000,	RTL_GIGA_MAC_VER_12 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1333
		{ 0x7cf00000, 0x38500000,	RTL_GIGA_MAC_VER_17 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1334
		{ 0x7c800000, 0x38000000,	RTL_GIGA_MAC_VER_17 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1335
		{ 0x7c800000, 0x30000000,	RTL_GIGA_MAC_VER_11 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1336
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1337
		/* 8101 family. */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1338
		{ 0x7cf00000, 0x34a00000,	RTL_GIGA_MAC_VER_09 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1339
		{ 0x7cf00000, 0x24a00000,	RTL_GIGA_MAC_VER_09 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1340
		{ 0x7cf00000, 0x34900000,	RTL_GIGA_MAC_VER_08 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1341
		{ 0x7cf00000, 0x24900000,	RTL_GIGA_MAC_VER_08 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1342
		{ 0x7cf00000, 0x34800000,	RTL_GIGA_MAC_VER_07 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1343
		{ 0x7cf00000, 0x24800000,	RTL_GIGA_MAC_VER_07 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1344
		{ 0x7cf00000, 0x34000000,	RTL_GIGA_MAC_VER_13 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1345
		{ 0x7cf00000, 0x34300000,	RTL_GIGA_MAC_VER_10 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1346
		{ 0x7cf00000, 0x34200000,	RTL_GIGA_MAC_VER_16 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1347
		{ 0x7c800000, 0x34800000,	RTL_GIGA_MAC_VER_09 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1348
		{ 0x7c800000, 0x24800000,	RTL_GIGA_MAC_VER_09 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1349
		{ 0x7c800000, 0x34000000,	RTL_GIGA_MAC_VER_16 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1350
		/* FIXME: where did these entries come from ? -- FR */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1351
		{ 0xfc800000, 0x38800000,	RTL_GIGA_MAC_VER_15 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1352
		{ 0xfc800000, 0x30800000,	RTL_GIGA_MAC_VER_14 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1353
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1354
		/* 8110 family. */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1355
		{ 0xfc800000, 0x98000000,	RTL_GIGA_MAC_VER_06 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1356
		{ 0xfc800000, 0x18000000,	RTL_GIGA_MAC_VER_05 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1357
		{ 0xfc800000, 0x10000000,	RTL_GIGA_MAC_VER_04 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1358
		{ 0xfc800000, 0x04000000,	RTL_GIGA_MAC_VER_03 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1359
		{ 0xfc800000, 0x00800000,	RTL_GIGA_MAC_VER_02 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1360
		{ 0xfc800000, 0x00000000,	RTL_GIGA_MAC_VER_01 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1361
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1362
		/* Catch-all */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1363
		{ 0x00000000, 0x00000000,	RTL_GIGA_MAC_NONE   }
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1364
	}, *p = mac_info;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1365
	u32 reg;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1366
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1367
	reg = RTL_R32(TxConfig);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1368
	while ((reg & p->mask) != p->val)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1369
		p++;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1370
	tp->mac_version = p->mac_version;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1371
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1372
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1373
static void rtl8169_print_mac_version(struct rtl8169_private *tp)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1374
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1375
	dprintk("mac_version = 0x%02x\n", tp->mac_version);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1376
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1377
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1378
struct phy_reg {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1379
	u16 reg;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1380
	u16 val;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1381
};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1382
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1383
static void rtl_phy_write(void __iomem *ioaddr, const struct phy_reg *regs, int len)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1384
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1385
	while (len-- > 0) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1386
		mdio_write(ioaddr, regs->reg, regs->val);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1387
		regs++;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1388
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1389
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1390
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1391
static void rtl8169s_hw_phy_config(void __iomem *ioaddr)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1392
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1393
	static const struct phy_reg phy_reg_init[] = {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1394
		{ 0x1f, 0x0001 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1395
		{ 0x06, 0x006e },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1396
		{ 0x08, 0x0708 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1397
		{ 0x15, 0x4000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1398
		{ 0x18, 0x65c7 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1399
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1400
		{ 0x1f, 0x0001 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1401
		{ 0x03, 0x00a1 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1402
		{ 0x02, 0x0008 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1403
		{ 0x01, 0x0120 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1404
		{ 0x00, 0x1000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1405
		{ 0x04, 0x0800 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1406
		{ 0x04, 0x0000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1407
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1408
		{ 0x03, 0xff41 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1409
		{ 0x02, 0xdf60 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1410
		{ 0x01, 0x0140 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1411
		{ 0x00, 0x0077 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1412
		{ 0x04, 0x7800 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1413
		{ 0x04, 0x7000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1414
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1415
		{ 0x03, 0x802f },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1416
		{ 0x02, 0x4f02 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1417
		{ 0x01, 0x0409 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1418
		{ 0x00, 0xf0f9 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1419
		{ 0x04, 0x9800 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1420
		{ 0x04, 0x9000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1421
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1422
		{ 0x03, 0xdf01 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1423
		{ 0x02, 0xdf20 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1424
		{ 0x01, 0xff95 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1425
		{ 0x00, 0xba00 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1426
		{ 0x04, 0xa800 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1427
		{ 0x04, 0xa000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1428
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1429
		{ 0x03, 0xff41 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1430
		{ 0x02, 0xdf20 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1431
		{ 0x01, 0x0140 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1432
		{ 0x00, 0x00bb },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1433
		{ 0x04, 0xb800 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1434
		{ 0x04, 0xb000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1435
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1436
		{ 0x03, 0xdf41 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1437
		{ 0x02, 0xdc60 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1438
		{ 0x01, 0x6340 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1439
		{ 0x00, 0x007d },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1440
		{ 0x04, 0xd800 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1441
		{ 0x04, 0xd000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1442
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1443
		{ 0x03, 0xdf01 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1444
		{ 0x02, 0xdf20 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1445
		{ 0x01, 0x100a },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1446
		{ 0x00, 0xa0ff },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1447
		{ 0x04, 0xf800 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1448
		{ 0x04, 0xf000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1449
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1450
		{ 0x1f, 0x0000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1451
		{ 0x0b, 0x0000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1452
		{ 0x00, 0x9200 }
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1453
	};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1454
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1455
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1456
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1457
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1458
static void rtl8169sb_hw_phy_config(void __iomem *ioaddr)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1459
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1460
	static const struct phy_reg phy_reg_init[] = {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1461
		{ 0x1f, 0x0002 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1462
		{ 0x01, 0x90d0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1463
		{ 0x1f, 0x0000 }
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1464
	};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1465
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1466
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1467
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1468
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1469
static void rtl8169scd_hw_phy_config_quirk(struct rtl8169_private *tp,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1470
					   void __iomem *ioaddr)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1471
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1472
	struct pci_dev *pdev = tp->pci_dev;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1473
	u16 vendor_id, device_id;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1474
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1475
	pci_read_config_word(pdev, PCI_SUBSYSTEM_VENDOR_ID, &vendor_id);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1476
	pci_read_config_word(pdev, PCI_SUBSYSTEM_ID, &device_id);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1477
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1478
	if ((vendor_id != PCI_VENDOR_ID_GIGABYTE) || (device_id != 0xe000))
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1479
		return;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1480
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1481
	mdio_write(ioaddr, 0x1f, 0x0001);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1482
	mdio_write(ioaddr, 0x10, 0xf01b);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1483
	mdio_write(ioaddr, 0x1f, 0x0000);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1484
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1485
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1486
static void rtl8169scd_hw_phy_config(struct rtl8169_private *tp,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1487
				     void __iomem *ioaddr)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1488
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1489
	static const struct phy_reg phy_reg_init[] = {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1490
		{ 0x1f, 0x0001 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1491
		{ 0x04, 0x0000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1492
		{ 0x03, 0x00a1 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1493
		{ 0x02, 0x0008 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1494
		{ 0x01, 0x0120 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1495
		{ 0x00, 0x1000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1496
		{ 0x04, 0x0800 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1497
		{ 0x04, 0x9000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1498
		{ 0x03, 0x802f },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1499
		{ 0x02, 0x4f02 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1500
		{ 0x01, 0x0409 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1501
		{ 0x00, 0xf099 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1502
		{ 0x04, 0x9800 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1503
		{ 0x04, 0xa000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1504
		{ 0x03, 0xdf01 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1505
		{ 0x02, 0xdf20 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1506
		{ 0x01, 0xff95 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1507
		{ 0x00, 0xba00 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1508
		{ 0x04, 0xa800 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1509
		{ 0x04, 0xf000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1510
		{ 0x03, 0xdf01 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1511
		{ 0x02, 0xdf20 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1512
		{ 0x01, 0x101a },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1513
		{ 0x00, 0xa0ff },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1514
		{ 0x04, 0xf800 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1515
		{ 0x04, 0x0000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1516
		{ 0x1f, 0x0000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1517
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1518
		{ 0x1f, 0x0001 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1519
		{ 0x10, 0xf41b },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1520
		{ 0x14, 0xfb54 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1521
		{ 0x18, 0xf5c7 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1522
		{ 0x1f, 0x0000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1523
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1524
		{ 0x1f, 0x0001 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1525
		{ 0x17, 0x0cc0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1526
		{ 0x1f, 0x0000 }
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1527
	};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1528
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1529
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1530
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1531
	rtl8169scd_hw_phy_config_quirk(tp, ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1532
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1533
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1534
static void rtl8169sce_hw_phy_config(void __iomem *ioaddr)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1535
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1536
	static const struct phy_reg phy_reg_init[] = {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1537
		{ 0x1f, 0x0001 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1538
		{ 0x04, 0x0000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1539
		{ 0x03, 0x00a1 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1540
		{ 0x02, 0x0008 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1541
		{ 0x01, 0x0120 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1542
		{ 0x00, 0x1000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1543
		{ 0x04, 0x0800 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1544
		{ 0x04, 0x9000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1545
		{ 0x03, 0x802f },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1546
		{ 0x02, 0x4f02 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1547
		{ 0x01, 0x0409 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1548
		{ 0x00, 0xf099 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1549
		{ 0x04, 0x9800 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1550
		{ 0x04, 0xa000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1551
		{ 0x03, 0xdf01 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1552
		{ 0x02, 0xdf20 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1553
		{ 0x01, 0xff95 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1554
		{ 0x00, 0xba00 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1555
		{ 0x04, 0xa800 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1556
		{ 0x04, 0xf000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1557
		{ 0x03, 0xdf01 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1558
		{ 0x02, 0xdf20 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1559
		{ 0x01, 0x101a },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1560
		{ 0x00, 0xa0ff },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1561
		{ 0x04, 0xf800 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1562
		{ 0x04, 0x0000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1563
		{ 0x1f, 0x0000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1564
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1565
		{ 0x1f, 0x0001 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1566
		{ 0x0b, 0x8480 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1567
		{ 0x1f, 0x0000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1568
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1569
		{ 0x1f, 0x0001 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1570
		{ 0x18, 0x67c7 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1571
		{ 0x04, 0x2000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1572
		{ 0x03, 0x002f },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1573
		{ 0x02, 0x4360 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1574
		{ 0x01, 0x0109 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1575
		{ 0x00, 0x3022 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1576
		{ 0x04, 0x2800 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1577
		{ 0x1f, 0x0000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1578
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1579
		{ 0x1f, 0x0001 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1580
		{ 0x17, 0x0cc0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1581
		{ 0x1f, 0x0000 }
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1582
	};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1583
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1584
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1585
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1586
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1587
static void rtl8168bb_hw_phy_config(void __iomem *ioaddr)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1588
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1589
	static const struct phy_reg phy_reg_init[] = {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1590
		{ 0x10, 0xf41b },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1591
		{ 0x1f, 0x0000 }
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1592
	};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1593
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1594
	mdio_write(ioaddr, 0x1f, 0x0001);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1595
	mdio_patch(ioaddr, 0x16, 1 << 0);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1596
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1597
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1598
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1599
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1600
static void rtl8168bef_hw_phy_config(void __iomem *ioaddr)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1601
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1602
	static const struct phy_reg phy_reg_init[] = {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1603
		{ 0x1f, 0x0001 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1604
		{ 0x10, 0xf41b },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1605
		{ 0x1f, 0x0000 }
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1606
	};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1607
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1608
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1609
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1610
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1611
static void rtl8168cp_1_hw_phy_config(void __iomem *ioaddr)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1612
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1613
	static const struct phy_reg phy_reg_init[] = {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1614
		{ 0x1f, 0x0000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1615
		{ 0x1d, 0x0f00 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1616
		{ 0x1f, 0x0002 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1617
		{ 0x0c, 0x1ec8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1618
		{ 0x1f, 0x0000 }
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1619
	};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1620
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1621
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1622
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1623
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1624
static void rtl8168cp_2_hw_phy_config(void __iomem *ioaddr)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1625
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1626
	static const struct phy_reg phy_reg_init[] = {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1627
		{ 0x1f, 0x0001 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1628
		{ 0x1d, 0x3d98 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1629
		{ 0x1f, 0x0000 }
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1630
	};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1631
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1632
	mdio_write(ioaddr, 0x1f, 0x0000);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1633
	mdio_patch(ioaddr, 0x14, 1 << 5);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1634
	mdio_patch(ioaddr, 0x0d, 1 << 5);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1635
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1636
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1637
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1638
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1639
static void rtl8168c_1_hw_phy_config(void __iomem *ioaddr)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1640
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1641
	static const struct phy_reg phy_reg_init[] = {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1642
		{ 0x1f, 0x0001 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1643
		{ 0x12, 0x2300 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1644
		{ 0x1f, 0x0002 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1645
		{ 0x00, 0x88d4 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1646
		{ 0x01, 0x82b1 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1647
		{ 0x03, 0x7002 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1648
		{ 0x08, 0x9e30 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1649
		{ 0x09, 0x01f0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1650
		{ 0x0a, 0x5500 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1651
		{ 0x0c, 0x00c8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1652
		{ 0x1f, 0x0003 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1653
		{ 0x12, 0xc096 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1654
		{ 0x16, 0x000a },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1655
		{ 0x1f, 0x0000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1656
		{ 0x1f, 0x0000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1657
		{ 0x09, 0x2000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1658
		{ 0x09, 0x0000 }
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1659
	};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1660
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1661
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1662
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1663
	mdio_patch(ioaddr, 0x14, 1 << 5);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1664
	mdio_patch(ioaddr, 0x0d, 1 << 5);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1665
	mdio_write(ioaddr, 0x1f, 0x0000);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1666
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1667
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1668
static void rtl8168c_2_hw_phy_config(void __iomem *ioaddr)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1669
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1670
	static const struct phy_reg phy_reg_init[] = {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1671
		{ 0x1f, 0x0001 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1672
		{ 0x12, 0x2300 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1673
		{ 0x03, 0x802f },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1674
		{ 0x02, 0x4f02 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1675
		{ 0x01, 0x0409 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1676
		{ 0x00, 0xf099 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1677
		{ 0x04, 0x9800 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1678
		{ 0x04, 0x9000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1679
		{ 0x1d, 0x3d98 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1680
		{ 0x1f, 0x0002 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1681
		{ 0x0c, 0x7eb8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1682
		{ 0x06, 0x0761 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1683
		{ 0x1f, 0x0003 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1684
		{ 0x16, 0x0f0a },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1685
		{ 0x1f, 0x0000 }
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1686
	};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1687
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1688
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1689
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1690
	mdio_patch(ioaddr, 0x16, 1 << 0);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1691
	mdio_patch(ioaddr, 0x14, 1 << 5);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1692
	mdio_patch(ioaddr, 0x0d, 1 << 5);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1693
	mdio_write(ioaddr, 0x1f, 0x0000);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1694
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1695
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1696
static void rtl8168c_3_hw_phy_config(void __iomem *ioaddr)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1697
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1698
	static const struct phy_reg phy_reg_init[] = {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1699
		{ 0x1f, 0x0001 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1700
		{ 0x12, 0x2300 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1701
		{ 0x1d, 0x3d98 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1702
		{ 0x1f, 0x0002 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1703
		{ 0x0c, 0x7eb8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1704
		{ 0x06, 0x5461 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1705
		{ 0x1f, 0x0003 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1706
		{ 0x16, 0x0f0a },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1707
		{ 0x1f, 0x0000 }
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1708
	};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1709
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1710
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1711
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1712
	mdio_patch(ioaddr, 0x16, 1 << 0);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1713
	mdio_patch(ioaddr, 0x14, 1 << 5);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1714
	mdio_patch(ioaddr, 0x0d, 1 << 5);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1715
	mdio_write(ioaddr, 0x1f, 0x0000);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1716
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1717
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1718
static void rtl8168c_4_hw_phy_config(void __iomem *ioaddr)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1719
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1720
	rtl8168c_3_hw_phy_config(ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1721
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1722
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1723
static void rtl8168d_1_hw_phy_config(void __iomem *ioaddr)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1724
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1725
	static const struct phy_reg phy_reg_init_0[] = {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1726
		{ 0x1f, 0x0001 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1727
		{ 0x06, 0x4064 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1728
		{ 0x07, 0x2863 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1729
		{ 0x08, 0x059c },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1730
		{ 0x09, 0x26b4 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1731
		{ 0x0a, 0x6a19 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1732
		{ 0x0b, 0xdcc8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1733
		{ 0x10, 0xf06d },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1734
		{ 0x14, 0x7f68 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1735
		{ 0x18, 0x7fd9 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1736
		{ 0x1c, 0xf0ff },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1737
		{ 0x1d, 0x3d9c },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1738
		{ 0x1f, 0x0003 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1739
		{ 0x12, 0xf49f },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1740
		{ 0x13, 0x070b },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1741
		{ 0x1a, 0x05ad },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1742
		{ 0x14, 0x94c0 }
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1743
	};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1744
	static const struct phy_reg phy_reg_init_1[] = {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1745
		{ 0x1f, 0x0002 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1746
		{ 0x06, 0x5561 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1747
		{ 0x1f, 0x0005 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1748
		{ 0x05, 0x8332 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1749
		{ 0x06, 0x5561 }
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1750
	};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1751
	static const struct phy_reg phy_reg_init_2[] = {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1752
		{ 0x1f, 0x0005 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1753
		{ 0x05, 0xffc2 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1754
		{ 0x1f, 0x0005 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1755
		{ 0x05, 0x8000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1756
		{ 0x06, 0xf8f9 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1757
		{ 0x06, 0xfaef },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1758
		{ 0x06, 0x59ee },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1759
		{ 0x06, 0xf8ea },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1760
		{ 0x06, 0x00ee },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1761
		{ 0x06, 0xf8eb },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1762
		{ 0x06, 0x00e0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1763
		{ 0x06, 0xf87c },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1764
		{ 0x06, 0xe1f8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1765
		{ 0x06, 0x7d59 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1766
		{ 0x06, 0x0fef },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1767
		{ 0x06, 0x0139 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1768
		{ 0x06, 0x029e },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1769
		{ 0x06, 0x06ef },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1770
		{ 0x06, 0x1039 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1771
		{ 0x06, 0x089f },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1772
		{ 0x06, 0x2aee },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1773
		{ 0x06, 0xf8ea },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1774
		{ 0x06, 0x00ee },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1775
		{ 0x06, 0xf8eb },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1776
		{ 0x06, 0x01e0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1777
		{ 0x06, 0xf87c },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1778
		{ 0x06, 0xe1f8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1779
		{ 0x06, 0x7d58 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1780
		{ 0x06, 0x409e },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1781
		{ 0x06, 0x0f39 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1782
		{ 0x06, 0x46aa },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1783
		{ 0x06, 0x0bbf },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1784
		{ 0x06, 0x8290 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1785
		{ 0x06, 0xd682 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1786
		{ 0x06, 0x9802 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1787
		{ 0x06, 0x014f },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1788
		{ 0x06, 0xae09 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1789
		{ 0x06, 0xbf82 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1790
		{ 0x06, 0x98d6 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1791
		{ 0x06, 0x82a0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1792
		{ 0x06, 0x0201 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1793
		{ 0x06, 0x4fef },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1794
		{ 0x06, 0x95fe },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1795
		{ 0x06, 0xfdfc },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1796
		{ 0x06, 0x05f8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1797
		{ 0x06, 0xf9fa },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1798
		{ 0x06, 0xeef8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1799
		{ 0x06, 0xea00 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1800
		{ 0x06, 0xeef8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1801
		{ 0x06, 0xeb00 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1802
		{ 0x06, 0xe2f8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1803
		{ 0x06, 0x7ce3 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1804
		{ 0x06, 0xf87d },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1805
		{ 0x06, 0xa511 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1806
		{ 0x06, 0x1112 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1807
		{ 0x06, 0xd240 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1808
		{ 0x06, 0xd644 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1809
		{ 0x06, 0x4402 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1810
		{ 0x06, 0x8217 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1811
		{ 0x06, 0xd2a0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1812
		{ 0x06, 0xd6aa },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1813
		{ 0x06, 0xaa02 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1814
		{ 0x06, 0x8217 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1815
		{ 0x06, 0xae0f },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1816
		{ 0x06, 0xa544 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1817
		{ 0x06, 0x4402 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1818
		{ 0x06, 0xae4d },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1819
		{ 0x06, 0xa5aa },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1820
		{ 0x06, 0xaa02 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1821
		{ 0x06, 0xae47 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1822
		{ 0x06, 0xaf82 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1823
		{ 0x06, 0x13ee },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1824
		{ 0x06, 0x834e },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1825
		{ 0x06, 0x00ee },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1826
		{ 0x06, 0x834d },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1827
		{ 0x06, 0x0fee },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1828
		{ 0x06, 0x834c },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1829
		{ 0x06, 0x0fee },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1830
		{ 0x06, 0x834f },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1831
		{ 0x06, 0x00ee },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1832
		{ 0x06, 0x8351 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1833
		{ 0x06, 0x00ee },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1834
		{ 0x06, 0x834a },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1835
		{ 0x06, 0xffee },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1836
		{ 0x06, 0x834b },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1837
		{ 0x06, 0xffe0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1838
		{ 0x06, 0x8330 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1839
		{ 0x06, 0xe183 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1840
		{ 0x06, 0x3158 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1841
		{ 0x06, 0xfee4 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1842
		{ 0x06, 0xf88a },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1843
		{ 0x06, 0xe5f8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1844
		{ 0x06, 0x8be0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1845
		{ 0x06, 0x8332 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1846
		{ 0x06, 0xe183 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1847
		{ 0x06, 0x3359 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1848
		{ 0x06, 0x0fe2 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1849
		{ 0x06, 0x834d },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1850
		{ 0x06, 0x0c24 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1851
		{ 0x06, 0x5af0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1852
		{ 0x06, 0x1e12 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1853
		{ 0x06, 0xe4f8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1854
		{ 0x06, 0x8ce5 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1855
		{ 0x06, 0xf88d },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1856
		{ 0x06, 0xaf82 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1857
		{ 0x06, 0x13e0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1858
		{ 0x06, 0x834f },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1859
		{ 0x06, 0x10e4 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1860
		{ 0x06, 0x834f },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1861
		{ 0x06, 0xe083 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1862
		{ 0x06, 0x4e78 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1863
		{ 0x06, 0x009f },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1864
		{ 0x06, 0x0ae0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1865
		{ 0x06, 0x834f },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1866
		{ 0x06, 0xa010 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1867
		{ 0x06, 0xa5ee },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1868
		{ 0x06, 0x834e },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1869
		{ 0x06, 0x01e0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1870
		{ 0x06, 0x834e },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1871
		{ 0x06, 0x7805 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1872
		{ 0x06, 0x9e9a },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1873
		{ 0x06, 0xe083 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1874
		{ 0x06, 0x4e78 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1875
		{ 0x06, 0x049e },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1876
		{ 0x06, 0x10e0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1877
		{ 0x06, 0x834e },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1878
		{ 0x06, 0x7803 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1879
		{ 0x06, 0x9e0f },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1880
		{ 0x06, 0xe083 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1881
		{ 0x06, 0x4e78 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1882
		{ 0x06, 0x019e },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1883
		{ 0x06, 0x05ae },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1884
		{ 0x06, 0x0caf },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1885
		{ 0x06, 0x81f8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1886
		{ 0x06, 0xaf81 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1887
		{ 0x06, 0xa3af },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1888
		{ 0x06, 0x81dc },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1889
		{ 0x06, 0xaf82 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1890
		{ 0x06, 0x13ee },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1891
		{ 0x06, 0x8348 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1892
		{ 0x06, 0x00ee },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1893
		{ 0x06, 0x8349 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1894
		{ 0x06, 0x00e0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1895
		{ 0x06, 0x8351 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1896
		{ 0x06, 0x10e4 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1897
		{ 0x06, 0x8351 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1898
		{ 0x06, 0x5801 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1899
		{ 0x06, 0x9fea },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1900
		{ 0x06, 0xd000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1901
		{ 0x06, 0xd180 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1902
		{ 0x06, 0x1f66 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1903
		{ 0x06, 0xe2f8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1904
		{ 0x06, 0xeae3 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1905
		{ 0x06, 0xf8eb },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1906
		{ 0x06, 0x5af8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1907
		{ 0x06, 0x1e20 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1908
		{ 0x06, 0xe6f8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1909
		{ 0x06, 0xeae5 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1910
		{ 0x06, 0xf8eb },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1911
		{ 0x06, 0xd302 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1912
		{ 0x06, 0xb3fe },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1913
		{ 0x06, 0xe2f8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1914
		{ 0x06, 0x7cef },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1915
		{ 0x06, 0x325b },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1916
		{ 0x06, 0x80e3 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1917
		{ 0x06, 0xf87d },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1918
		{ 0x06, 0x9e03 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1919
		{ 0x06, 0x7dff },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1920
		{ 0x06, 0xff0d },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1921
		{ 0x06, 0x581c },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1922
		{ 0x06, 0x551a },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1923
		{ 0x06, 0x6511 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1924
		{ 0x06, 0xa190 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1925
		{ 0x06, 0xd3e2 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1926
		{ 0x06, 0x8348 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1927
		{ 0x06, 0xe383 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1928
		{ 0x06, 0x491b },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1929
		{ 0x06, 0x56ab },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1930
		{ 0x06, 0x08ef },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1931
		{ 0x06, 0x56e6 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1932
		{ 0x06, 0x8348 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1933
		{ 0x06, 0xe783 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1934
		{ 0x06, 0x4910 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1935
		{ 0x06, 0xd180 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1936
		{ 0x06, 0x1f66 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1937
		{ 0x06, 0xa004 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1938
		{ 0x06, 0xb9e2 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1939
		{ 0x06, 0x8348 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1940
		{ 0x06, 0xe383 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1941
		{ 0x06, 0x49ef },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1942
		{ 0x06, 0x65e2 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1943
		{ 0x06, 0x834a },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1944
		{ 0x06, 0xe383 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1945
		{ 0x06, 0x4b1b },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1946
		{ 0x06, 0x56aa },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1947
		{ 0x06, 0x0eef },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1948
		{ 0x06, 0x56e6 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1949
		{ 0x06, 0x834a },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1950
		{ 0x06, 0xe783 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1951
		{ 0x06, 0x4be2 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1952
		{ 0x06, 0x834d },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1953
		{ 0x06, 0xe683 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1954
		{ 0x06, 0x4ce0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1955
		{ 0x06, 0x834d },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1956
		{ 0x06, 0xa000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1957
		{ 0x06, 0x0caf },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1958
		{ 0x06, 0x81dc },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1959
		{ 0x06, 0xe083 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1960
		{ 0x06, 0x4d10 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1961
		{ 0x06, 0xe483 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1962
		{ 0x06, 0x4dae },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1963
		{ 0x06, 0x0480 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1964
		{ 0x06, 0xe483 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1965
		{ 0x06, 0x4de0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1966
		{ 0x06, 0x834e },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1967
		{ 0x06, 0x7803 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1968
		{ 0x06, 0x9e0b },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1969
		{ 0x06, 0xe083 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1970
		{ 0x06, 0x4e78 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1971
		{ 0x06, 0x049e },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1972
		{ 0x06, 0x04ee },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1973
		{ 0x06, 0x834e },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1974
		{ 0x06, 0x02e0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1975
		{ 0x06, 0x8332 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1976
		{ 0x06, 0xe183 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1977
		{ 0x06, 0x3359 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1978
		{ 0x06, 0x0fe2 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1979
		{ 0x06, 0x834d },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1980
		{ 0x06, 0x0c24 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1981
		{ 0x06, 0x5af0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1982
		{ 0x06, 0x1e12 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1983
		{ 0x06, 0xe4f8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1984
		{ 0x06, 0x8ce5 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1985
		{ 0x06, 0xf88d },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1986
		{ 0x06, 0xe083 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1987
		{ 0x06, 0x30e1 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1988
		{ 0x06, 0x8331 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1989
		{ 0x06, 0x6801 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1990
		{ 0x06, 0xe4f8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1991
		{ 0x06, 0x8ae5 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1992
		{ 0x06, 0xf88b },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1993
		{ 0x06, 0xae37 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1994
		{ 0x06, 0xee83 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1995
		{ 0x06, 0x4e03 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1996
		{ 0x06, 0xe083 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1997
		{ 0x06, 0x4ce1 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1998
		{ 0x06, 0x834d },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1999
		{ 0x06, 0x1b01 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2000
		{ 0x06, 0x9e04 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2001
		{ 0x06, 0xaaa1 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2002
		{ 0x06, 0xaea8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2003
		{ 0x06, 0xee83 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2004
		{ 0x06, 0x4e04 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2005
		{ 0x06, 0xee83 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2006
		{ 0x06, 0x4f00 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2007
		{ 0x06, 0xaeab },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2008
		{ 0x06, 0xe083 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2009
		{ 0x06, 0x4f78 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2010
		{ 0x06, 0x039f },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2011
		{ 0x06, 0x14ee },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2012
		{ 0x06, 0x834e },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2013
		{ 0x06, 0x05d2 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2014
		{ 0x06, 0x40d6 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2015
		{ 0x06, 0x5554 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2016
		{ 0x06, 0x0282 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2017
		{ 0x06, 0x17d2 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2018
		{ 0x06, 0xa0d6 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2019
		{ 0x06, 0xba00 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2020
		{ 0x06, 0x0282 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2021
		{ 0x06, 0x17fe },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2022
		{ 0x06, 0xfdfc },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2023
		{ 0x06, 0x05f8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2024
		{ 0x06, 0xe0f8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2025
		{ 0x06, 0x60e1 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2026
		{ 0x06, 0xf861 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2027
		{ 0x06, 0x6802 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2028
		{ 0x06, 0xe4f8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2029
		{ 0x06, 0x60e5 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2030
		{ 0x06, 0xf861 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2031
		{ 0x06, 0xe0f8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2032
		{ 0x06, 0x48e1 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2033
		{ 0x06, 0xf849 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2034
		{ 0x06, 0x580f },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2035
		{ 0x06, 0x1e02 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2036
		{ 0x06, 0xe4f8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2037
		{ 0x06, 0x48e5 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2038
		{ 0x06, 0xf849 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2039
		{ 0x06, 0xd000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2040
		{ 0x06, 0x0282 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2041
		{ 0x06, 0x5bbf },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2042
		{ 0x06, 0x8350 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2043
		{ 0x06, 0xef46 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2044
		{ 0x06, 0xdc19 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2045
		{ 0x06, 0xddd0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2046
		{ 0x06, 0x0102 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2047
		{ 0x06, 0x825b },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2048
		{ 0x06, 0x0282 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2049
		{ 0x06, 0x77e0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2050
		{ 0x06, 0xf860 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2051
		{ 0x06, 0xe1f8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2052
		{ 0x06, 0x6158 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2053
		{ 0x06, 0xfde4 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2054
		{ 0x06, 0xf860 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2055
		{ 0x06, 0xe5f8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2056
		{ 0x06, 0x61fc },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2057
		{ 0x06, 0x04f9 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2058
		{ 0x06, 0xfafb },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2059
		{ 0x06, 0xc6bf },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2060
		{ 0x06, 0xf840 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2061
		{ 0x06, 0xbe83 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2062
		{ 0x06, 0x50a0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2063
		{ 0x06, 0x0101 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2064
		{ 0x06, 0x071b },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2065
		{ 0x06, 0x89cf },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2066
		{ 0x06, 0xd208 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2067
		{ 0x06, 0xebdb },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2068
		{ 0x06, 0x19b2 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2069
		{ 0x06, 0xfbff },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2070
		{ 0x06, 0xfefd },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2071
		{ 0x06, 0x04f8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2072
		{ 0x06, 0xe0f8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2073
		{ 0x06, 0x48e1 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2074
		{ 0x06, 0xf849 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2075
		{ 0x06, 0x6808 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2076
		{ 0x06, 0xe4f8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2077
		{ 0x06, 0x48e5 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2078
		{ 0x06, 0xf849 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2079
		{ 0x06, 0x58f7 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2080
		{ 0x06, 0xe4f8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2081
		{ 0x06, 0x48e5 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2082
		{ 0x06, 0xf849 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2083
		{ 0x06, 0xfc04 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2084
		{ 0x06, 0x4d20 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2085
		{ 0x06, 0x0002 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2086
		{ 0x06, 0x4e22 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2087
		{ 0x06, 0x0002 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2088
		{ 0x06, 0x4ddf },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2089
		{ 0x06, 0xff01 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2090
		{ 0x06, 0x4edd },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2091
		{ 0x06, 0xff01 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2092
		{ 0x05, 0x83d4 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2093
		{ 0x06, 0x8000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2094
		{ 0x05, 0x83d8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2095
		{ 0x06, 0x8051 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2096
		{ 0x02, 0x6010 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2097
		{ 0x03, 0xdc00 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2098
		{ 0x05, 0xfff6 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2099
		{ 0x06, 0x00fc },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2100
		{ 0x1f, 0x0000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2101
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2102
		{ 0x1f, 0x0000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2103
		{ 0x0d, 0xf880 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2104
		{ 0x1f, 0x0000 }
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2105
	};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2106
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2107
	rtl_phy_write(ioaddr, phy_reg_init_0, ARRAY_SIZE(phy_reg_init_0));
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2108
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2109
	mdio_write(ioaddr, 0x1f, 0x0002);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2110
	mdio_plus_minus(ioaddr, 0x0b, 0x0010, 0x00ef);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2111
	mdio_plus_minus(ioaddr, 0x0c, 0xa200, 0x5d00);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2112
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2113
	rtl_phy_write(ioaddr, phy_reg_init_1, ARRAY_SIZE(phy_reg_init_1));
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2114
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2115
	if (rtl8168d_efuse_read(ioaddr, 0x01) == 0xb1) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2116
		static const struct phy_reg phy_reg_init[] = {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2117
			{ 0x1f, 0x0002 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2118
			{ 0x05, 0x669a },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2119
			{ 0x1f, 0x0005 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2120
			{ 0x05, 0x8330 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2121
			{ 0x06, 0x669a },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2122
			{ 0x1f, 0x0002 }
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2123
		};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2124
		int val;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2125
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2126
		rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2127
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2128
		val = mdio_read(ioaddr, 0x0d);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2129
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2130
		if ((val & 0x00ff) != 0x006c) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2131
			static const u32 set[] = {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2132
				0x0065, 0x0066, 0x0067, 0x0068,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2133
				0x0069, 0x006a, 0x006b, 0x006c
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2134
			};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2135
			int i;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2136
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2137
			mdio_write(ioaddr, 0x1f, 0x0002);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2138
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2139
			val &= 0xff00;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2140
			for (i = 0; i < ARRAY_SIZE(set); i++)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2141
				mdio_write(ioaddr, 0x0d, val | set[i]);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2142
		}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2143
	} else {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2144
		static const struct phy_reg phy_reg_init[] = {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2145
			{ 0x1f, 0x0002 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2146
			{ 0x05, 0x6662 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2147
			{ 0x1f, 0x0005 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2148
			{ 0x05, 0x8330 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2149
			{ 0x06, 0x6662 }
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2150
		};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2151
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2152
		rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2153
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2154
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2155
	mdio_write(ioaddr, 0x1f, 0x0002);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2156
	mdio_patch(ioaddr, 0x0d, 0x0300);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2157
	mdio_patch(ioaddr, 0x0f, 0x0010);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2158
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2159
	mdio_write(ioaddr, 0x1f, 0x0002);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2160
	mdio_plus_minus(ioaddr, 0x02, 0x0100, 0x0600);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2161
	mdio_plus_minus(ioaddr, 0x03, 0x0000, 0xe000);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2162
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2163
	rtl_phy_write(ioaddr, phy_reg_init_2, ARRAY_SIZE(phy_reg_init_2));
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2164
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2165
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2166
static void rtl8168d_2_hw_phy_config(void __iomem *ioaddr)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2167
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2168
	static const struct phy_reg phy_reg_init_0[] = {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2169
		{ 0x1f, 0x0001 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2170
		{ 0x06, 0x4064 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2171
		{ 0x07, 0x2863 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2172
		{ 0x08, 0x059c },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2173
		{ 0x09, 0x26b4 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2174
		{ 0x0a, 0x6a19 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2175
		{ 0x0b, 0xdcc8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2176
		{ 0x10, 0xf06d },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2177
		{ 0x14, 0x7f68 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2178
		{ 0x18, 0x7fd9 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2179
		{ 0x1c, 0xf0ff },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2180
		{ 0x1d, 0x3d9c },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2181
		{ 0x1f, 0x0003 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2182
		{ 0x12, 0xf49f },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2183
		{ 0x13, 0x070b },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2184
		{ 0x1a, 0x05ad },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2185
		{ 0x14, 0x94c0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2186
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2187
		{ 0x1f, 0x0002 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2188
		{ 0x06, 0x5561 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2189
		{ 0x1f, 0x0005 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2190
		{ 0x05, 0x8332 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2191
		{ 0x06, 0x5561 }
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2192
	};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2193
	static const struct phy_reg phy_reg_init_1[] = {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2194
		{ 0x1f, 0x0005 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2195
		{ 0x05, 0xffc2 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2196
		{ 0x1f, 0x0005 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2197
		{ 0x05, 0x8000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2198
		{ 0x06, 0xf8f9 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2199
		{ 0x06, 0xfaee },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2200
		{ 0x06, 0xf8ea },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2201
		{ 0x06, 0x00ee },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2202
		{ 0x06, 0xf8eb },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2203
		{ 0x06, 0x00e2 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2204
		{ 0x06, 0xf87c },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2205
		{ 0x06, 0xe3f8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2206
		{ 0x06, 0x7da5 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2207
		{ 0x06, 0x1111 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2208
		{ 0x06, 0x12d2 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2209
		{ 0x06, 0x40d6 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2210
		{ 0x06, 0x4444 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2211
		{ 0x06, 0x0281 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2212
		{ 0x06, 0xc6d2 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2213
		{ 0x06, 0xa0d6 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2214
		{ 0x06, 0xaaaa },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2215
		{ 0x06, 0x0281 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2216
		{ 0x06, 0xc6ae },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2217
		{ 0x06, 0x0fa5 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2218
		{ 0x06, 0x4444 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2219
		{ 0x06, 0x02ae },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2220
		{ 0x06, 0x4da5 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2221
		{ 0x06, 0xaaaa },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2222
		{ 0x06, 0x02ae },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2223
		{ 0x06, 0x47af },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2224
		{ 0x06, 0x81c2 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2225
		{ 0x06, 0xee83 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2226
		{ 0x06, 0x4e00 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2227
		{ 0x06, 0xee83 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2228
		{ 0x06, 0x4d0f },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2229
		{ 0x06, 0xee83 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2230
		{ 0x06, 0x4c0f },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2231
		{ 0x06, 0xee83 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2232
		{ 0x06, 0x4f00 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2233
		{ 0x06, 0xee83 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2234
		{ 0x06, 0x5100 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2235
		{ 0x06, 0xee83 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2236
		{ 0x06, 0x4aff },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2237
		{ 0x06, 0xee83 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2238
		{ 0x06, 0x4bff },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2239
		{ 0x06, 0xe083 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2240
		{ 0x06, 0x30e1 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2241
		{ 0x06, 0x8331 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2242
		{ 0x06, 0x58fe },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2243
		{ 0x06, 0xe4f8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2244
		{ 0x06, 0x8ae5 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2245
		{ 0x06, 0xf88b },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2246
		{ 0x06, 0xe083 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2247
		{ 0x06, 0x32e1 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2248
		{ 0x06, 0x8333 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2249
		{ 0x06, 0x590f },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2250
		{ 0x06, 0xe283 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2251
		{ 0x06, 0x4d0c },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2252
		{ 0x06, 0x245a },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2253
		{ 0x06, 0xf01e },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2254
		{ 0x06, 0x12e4 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2255
		{ 0x06, 0xf88c },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2256
		{ 0x06, 0xe5f8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2257
		{ 0x06, 0x8daf },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2258
		{ 0x06, 0x81c2 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2259
		{ 0x06, 0xe083 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2260
		{ 0x06, 0x4f10 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2261
		{ 0x06, 0xe483 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2262
		{ 0x06, 0x4fe0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2263
		{ 0x06, 0x834e },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2264
		{ 0x06, 0x7800 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2265
		{ 0x06, 0x9f0a },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2266
		{ 0x06, 0xe083 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2267
		{ 0x06, 0x4fa0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2268
		{ 0x06, 0x10a5 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2269
		{ 0x06, 0xee83 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2270
		{ 0x06, 0x4e01 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2271
		{ 0x06, 0xe083 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2272
		{ 0x06, 0x4e78 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2273
		{ 0x06, 0x059e },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2274
		{ 0x06, 0x9ae0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2275
		{ 0x06, 0x834e },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2276
		{ 0x06, 0x7804 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2277
		{ 0x06, 0x9e10 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2278
		{ 0x06, 0xe083 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2279
		{ 0x06, 0x4e78 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2280
		{ 0x06, 0x039e },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2281
		{ 0x06, 0x0fe0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2282
		{ 0x06, 0x834e },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2283
		{ 0x06, 0x7801 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2284
		{ 0x06, 0x9e05 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2285
		{ 0x06, 0xae0c },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2286
		{ 0x06, 0xaf81 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2287
		{ 0x06, 0xa7af },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2288
		{ 0x06, 0x8152 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2289
		{ 0x06, 0xaf81 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2290
		{ 0x06, 0x8baf },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2291
		{ 0x06, 0x81c2 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2292
		{ 0x06, 0xee83 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2293
		{ 0x06, 0x4800 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2294
		{ 0x06, 0xee83 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2295
		{ 0x06, 0x4900 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2296
		{ 0x06, 0xe083 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2297
		{ 0x06, 0x5110 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2298
		{ 0x06, 0xe483 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2299
		{ 0x06, 0x5158 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2300
		{ 0x06, 0x019f },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2301
		{ 0x06, 0xead0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2302
		{ 0x06, 0x00d1 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2303
		{ 0x06, 0x801f },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2304
		{ 0x06, 0x66e2 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2305
		{ 0x06, 0xf8ea },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2306
		{ 0x06, 0xe3f8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2307
		{ 0x06, 0xeb5a },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2308
		{ 0x06, 0xf81e },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2309
		{ 0x06, 0x20e6 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2310
		{ 0x06, 0xf8ea },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2311
		{ 0x06, 0xe5f8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2312
		{ 0x06, 0xebd3 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2313
		{ 0x06, 0x02b3 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2314
		{ 0x06, 0xfee2 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2315
		{ 0x06, 0xf87c },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2316
		{ 0x06, 0xef32 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2317
		{ 0x06, 0x5b80 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2318
		{ 0x06, 0xe3f8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2319
		{ 0x06, 0x7d9e },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2320
		{ 0x06, 0x037d },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2321
		{ 0x06, 0xffff },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2322
		{ 0x06, 0x0d58 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2323
		{ 0x06, 0x1c55 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2324
		{ 0x06, 0x1a65 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2325
		{ 0x06, 0x11a1 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2326
		{ 0x06, 0x90d3 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2327
		{ 0x06, 0xe283 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2328
		{ 0x06, 0x48e3 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2329
		{ 0x06, 0x8349 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2330
		{ 0x06, 0x1b56 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2331
		{ 0x06, 0xab08 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2332
		{ 0x06, 0xef56 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2333
		{ 0x06, 0xe683 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2334
		{ 0x06, 0x48e7 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2335
		{ 0x06, 0x8349 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2336
		{ 0x06, 0x10d1 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2337
		{ 0x06, 0x801f },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2338
		{ 0x06, 0x66a0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2339
		{ 0x06, 0x04b9 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2340
		{ 0x06, 0xe283 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2341
		{ 0x06, 0x48e3 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2342
		{ 0x06, 0x8349 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2343
		{ 0x06, 0xef65 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2344
		{ 0x06, 0xe283 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2345
		{ 0x06, 0x4ae3 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2346
		{ 0x06, 0x834b },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2347
		{ 0x06, 0x1b56 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2348
		{ 0x06, 0xaa0e },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2349
		{ 0x06, 0xef56 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2350
		{ 0x06, 0xe683 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2351
		{ 0x06, 0x4ae7 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2352
		{ 0x06, 0x834b },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2353
		{ 0x06, 0xe283 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2354
		{ 0x06, 0x4de6 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2355
		{ 0x06, 0x834c },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2356
		{ 0x06, 0xe083 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2357
		{ 0x06, 0x4da0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2358
		{ 0x06, 0x000c },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2359
		{ 0x06, 0xaf81 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2360
		{ 0x06, 0x8be0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2361
		{ 0x06, 0x834d },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2362
		{ 0x06, 0x10e4 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2363
		{ 0x06, 0x834d },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2364
		{ 0x06, 0xae04 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2365
		{ 0x06, 0x80e4 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2366
		{ 0x06, 0x834d },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2367
		{ 0x06, 0xe083 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2368
		{ 0x06, 0x4e78 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2369
		{ 0x06, 0x039e },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2370
		{ 0x06, 0x0be0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2371
		{ 0x06, 0x834e },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2372
		{ 0x06, 0x7804 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2373
		{ 0x06, 0x9e04 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2374
		{ 0x06, 0xee83 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2375
		{ 0x06, 0x4e02 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2376
		{ 0x06, 0xe083 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2377
		{ 0x06, 0x32e1 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2378
		{ 0x06, 0x8333 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2379
		{ 0x06, 0x590f },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2380
		{ 0x06, 0xe283 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2381
		{ 0x06, 0x4d0c },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2382
		{ 0x06, 0x245a },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2383
		{ 0x06, 0xf01e },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2384
		{ 0x06, 0x12e4 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2385
		{ 0x06, 0xf88c },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2386
		{ 0x06, 0xe5f8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2387
		{ 0x06, 0x8de0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2388
		{ 0x06, 0x8330 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2389
		{ 0x06, 0xe183 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2390
		{ 0x06, 0x3168 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2391
		{ 0x06, 0x01e4 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2392
		{ 0x06, 0xf88a },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2393
		{ 0x06, 0xe5f8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2394
		{ 0x06, 0x8bae },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2395
		{ 0x06, 0x37ee },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2396
		{ 0x06, 0x834e },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2397
		{ 0x06, 0x03e0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2398
		{ 0x06, 0x834c },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2399
		{ 0x06, 0xe183 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2400
		{ 0x06, 0x4d1b },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2401
		{ 0x06, 0x019e },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2402
		{ 0x06, 0x04aa },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2403
		{ 0x06, 0xa1ae },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2404
		{ 0x06, 0xa8ee },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2405
		{ 0x06, 0x834e },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2406
		{ 0x06, 0x04ee },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2407
		{ 0x06, 0x834f },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2408
		{ 0x06, 0x00ae },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2409
		{ 0x06, 0xabe0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2410
		{ 0x06, 0x834f },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2411
		{ 0x06, 0x7803 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2412
		{ 0x06, 0x9f14 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2413
		{ 0x06, 0xee83 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2414
		{ 0x06, 0x4e05 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2415
		{ 0x06, 0xd240 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2416
		{ 0x06, 0xd655 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2417
		{ 0x06, 0x5402 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2418
		{ 0x06, 0x81c6 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2419
		{ 0x06, 0xd2a0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2420
		{ 0x06, 0xd6ba },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2421
		{ 0x06, 0x0002 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2422
		{ 0x06, 0x81c6 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2423
		{ 0x06, 0xfefd },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2424
		{ 0x06, 0xfc05 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2425
		{ 0x06, 0xf8e0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2426
		{ 0x06, 0xf860 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2427
		{ 0x06, 0xe1f8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2428
		{ 0x06, 0x6168 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2429
		{ 0x06, 0x02e4 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2430
		{ 0x06, 0xf860 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2431
		{ 0x06, 0xe5f8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2432
		{ 0x06, 0x61e0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2433
		{ 0x06, 0xf848 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2434
		{ 0x06, 0xe1f8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2435
		{ 0x06, 0x4958 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2436
		{ 0x06, 0x0f1e },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2437
		{ 0x06, 0x02e4 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2438
		{ 0x06, 0xf848 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2439
		{ 0x06, 0xe5f8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2440
		{ 0x06, 0x49d0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2441
		{ 0x06, 0x0002 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2442
		{ 0x06, 0x820a },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2443
		{ 0x06, 0xbf83 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2444
		{ 0x06, 0x50ef },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2445
		{ 0x06, 0x46dc },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2446
		{ 0x06, 0x19dd },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2447
		{ 0x06, 0xd001 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2448
		{ 0x06, 0x0282 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2449
		{ 0x06, 0x0a02 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2450
		{ 0x06, 0x8226 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2451
		{ 0x06, 0xe0f8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2452
		{ 0x06, 0x60e1 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2453
		{ 0x06, 0xf861 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2454
		{ 0x06, 0x58fd },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2455
		{ 0x06, 0xe4f8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2456
		{ 0x06, 0x60e5 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2457
		{ 0x06, 0xf861 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2458
		{ 0x06, 0xfc04 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2459
		{ 0x06, 0xf9fa },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2460
		{ 0x06, 0xfbc6 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2461
		{ 0x06, 0xbff8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2462
		{ 0x06, 0x40be },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2463
		{ 0x06, 0x8350 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2464
		{ 0x06, 0xa001 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2465
		{ 0x06, 0x0107 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2466
		{ 0x06, 0x1b89 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2467
		{ 0x06, 0xcfd2 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2468
		{ 0x06, 0x08eb },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2469
		{ 0x06, 0xdb19 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2470
		{ 0x06, 0xb2fb },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2471
		{ 0x06, 0xfffe },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2472
		{ 0x06, 0xfd04 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2473
		{ 0x06, 0xf8e0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2474
		{ 0x06, 0xf848 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2475
		{ 0x06, 0xe1f8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2476
		{ 0x06, 0x4968 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2477
		{ 0x06, 0x08e4 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2478
		{ 0x06, 0xf848 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2479
		{ 0x06, 0xe5f8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2480
		{ 0x06, 0x4958 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2481
		{ 0x06, 0xf7e4 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2482
		{ 0x06, 0xf848 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2483
		{ 0x06, 0xe5f8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2484
		{ 0x06, 0x49fc },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2485
		{ 0x06, 0x044d },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2486
		{ 0x06, 0x2000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2487
		{ 0x06, 0x024e },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2488
		{ 0x06, 0x2200 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2489
		{ 0x06, 0x024d },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2490
		{ 0x06, 0xdfff },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2491
		{ 0x06, 0x014e },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2492
		{ 0x06, 0xddff },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2493
		{ 0x06, 0x0100 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2494
		{ 0x05, 0x83d8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2495
		{ 0x06, 0x8000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2496
		{ 0x03, 0xdc00 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2497
		{ 0x05, 0xfff6 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2498
		{ 0x06, 0x00fc },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2499
		{ 0x1f, 0x0000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2500
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2501
		{ 0x1f, 0x0000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2502
		{ 0x0d, 0xf880 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2503
		{ 0x1f, 0x0000 }
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2504
	};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2505
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2506
	rtl_phy_write(ioaddr, phy_reg_init_0, ARRAY_SIZE(phy_reg_init_0));
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2507
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2508
	if (rtl8168d_efuse_read(ioaddr, 0x01) == 0xb1) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2509
		static const struct phy_reg phy_reg_init[] = {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2510
			{ 0x1f, 0x0002 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2511
			{ 0x05, 0x669a },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2512
			{ 0x1f, 0x0005 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2513
			{ 0x05, 0x8330 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2514
			{ 0x06, 0x669a },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2515
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2516
			{ 0x1f, 0x0002 }
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2517
		};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2518
		int val;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2519
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2520
		rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2521
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2522
		val = mdio_read(ioaddr, 0x0d);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2523
		if ((val & 0x00ff) != 0x006c) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2524
			u32 set[] = {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2525
				0x0065, 0x0066, 0x0067, 0x0068,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2526
				0x0069, 0x006a, 0x006b, 0x006c
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2527
			};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2528
			int i;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2529
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2530
			mdio_write(ioaddr, 0x1f, 0x0002);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2531
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2532
			val &= 0xff00;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2533
			for (i = 0; i < ARRAY_SIZE(set); i++)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2534
				mdio_write(ioaddr, 0x0d, val | set[i]);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2535
		}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2536
	} else {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2537
		static const struct phy_reg phy_reg_init[] = {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2538
			{ 0x1f, 0x0002 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2539
			{ 0x05, 0x2642 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2540
			{ 0x1f, 0x0005 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2541
			{ 0x05, 0x8330 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2542
			{ 0x06, 0x2642 }
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2543
		};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2544
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2545
		rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2546
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2547
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2548
	mdio_write(ioaddr, 0x1f, 0x0002);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2549
	mdio_plus_minus(ioaddr, 0x02, 0x0100, 0x0600);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2550
	mdio_plus_minus(ioaddr, 0x03, 0x0000, 0xe000);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2551
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2552
	mdio_write(ioaddr, 0x1f, 0x0001);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2553
	mdio_write(ioaddr, 0x17, 0x0cc0);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2554
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2555
	mdio_write(ioaddr, 0x1f, 0x0002);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2556
	mdio_patch(ioaddr, 0x0f, 0x0017);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2557
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2558
	rtl_phy_write(ioaddr, phy_reg_init_1, ARRAY_SIZE(phy_reg_init_1));
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2559
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2560
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2561
static void rtl8168d_3_hw_phy_config(void __iomem *ioaddr)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2562
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2563
	static const struct phy_reg phy_reg_init[] = {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2564
		{ 0x1f, 0x0002 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2565
		{ 0x10, 0x0008 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2566
		{ 0x0d, 0x006c },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2567
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2568
		{ 0x1f, 0x0000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2569
		{ 0x0d, 0xf880 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2570
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2571
		{ 0x1f, 0x0001 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2572
		{ 0x17, 0x0cc0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2573
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2574
		{ 0x1f, 0x0001 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2575
		{ 0x0b, 0xa4d8 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2576
		{ 0x09, 0x281c },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2577
		{ 0x07, 0x2883 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2578
		{ 0x0a, 0x6b35 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2579
		{ 0x1d, 0x3da4 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2580
		{ 0x1c, 0xeffd },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2581
		{ 0x14, 0x7f52 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2582
		{ 0x18, 0x7fc6 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2583
		{ 0x08, 0x0601 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2584
		{ 0x06, 0x4063 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2585
		{ 0x10, 0xf074 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2586
		{ 0x1f, 0x0003 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2587
		{ 0x13, 0x0789 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2588
		{ 0x12, 0xf4bd },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2589
		{ 0x1a, 0x04fd },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2590
		{ 0x14, 0x84b0 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2591
		{ 0x1f, 0x0000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2592
		{ 0x00, 0x9200 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2593
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2594
		{ 0x1f, 0x0005 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2595
		{ 0x01, 0x0340 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2596
		{ 0x1f, 0x0001 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2597
		{ 0x04, 0x4000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2598
		{ 0x03, 0x1d21 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2599
		{ 0x02, 0x0c32 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2600
		{ 0x01, 0x0200 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2601
		{ 0x00, 0x5554 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2602
		{ 0x04, 0x4800 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2603
		{ 0x04, 0x4000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2604
		{ 0x04, 0xf000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2605
		{ 0x03, 0xdf01 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2606
		{ 0x02, 0xdf20 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2607
		{ 0x01, 0x101a },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2608
		{ 0x00, 0xa0ff },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2609
		{ 0x04, 0xf800 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2610
		{ 0x04, 0xf000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2611
		{ 0x1f, 0x0000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2612
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2613
		{ 0x1f, 0x0007 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2614
		{ 0x1e, 0x0023 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2615
		{ 0x16, 0x0000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2616
		{ 0x1f, 0x0000 }
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2617
	};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2618
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2619
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2620
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2621
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2622
static void rtl8102e_hw_phy_config(void __iomem *ioaddr)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2623
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2624
	static const struct phy_reg phy_reg_init[] = {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2625
		{ 0x1f, 0x0003 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2626
		{ 0x08, 0x441d },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2627
		{ 0x01, 0x9100 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2628
		{ 0x1f, 0x0000 }
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2629
	};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2630
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2631
	mdio_write(ioaddr, 0x1f, 0x0000);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2632
	mdio_patch(ioaddr, 0x11, 1 << 12);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2633
	mdio_patch(ioaddr, 0x19, 1 << 13);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2634
	mdio_patch(ioaddr, 0x10, 1 << 15);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2635
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2636
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2637
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2638
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2639
static void rtl_hw_phy_config(struct net_device *dev)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2640
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2641
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2642
	void __iomem *ioaddr = tp->mmio_addr;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2643
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2644
	rtl8169_print_mac_version(tp);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2645
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2646
	switch (tp->mac_version) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2647
	case RTL_GIGA_MAC_VER_01:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2648
		break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2649
	case RTL_GIGA_MAC_VER_02:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2650
	case RTL_GIGA_MAC_VER_03:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2651
		rtl8169s_hw_phy_config(ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2652
		break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2653
	case RTL_GIGA_MAC_VER_04:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2654
		rtl8169sb_hw_phy_config(ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2655
		break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2656
	case RTL_GIGA_MAC_VER_05:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2657
		rtl8169scd_hw_phy_config(tp, ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2658
		break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2659
	case RTL_GIGA_MAC_VER_06:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2660
		rtl8169sce_hw_phy_config(ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2661
		break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2662
	case RTL_GIGA_MAC_VER_07:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2663
	case RTL_GIGA_MAC_VER_08:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2664
	case RTL_GIGA_MAC_VER_09:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2665
		rtl8102e_hw_phy_config(ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2666
		break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2667
	case RTL_GIGA_MAC_VER_11:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2668
		rtl8168bb_hw_phy_config(ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2669
		break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2670
	case RTL_GIGA_MAC_VER_12:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2671
		rtl8168bef_hw_phy_config(ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2672
		break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2673
	case RTL_GIGA_MAC_VER_17:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2674
		rtl8168bef_hw_phy_config(ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2675
		break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2676
	case RTL_GIGA_MAC_VER_18:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2677
		rtl8168cp_1_hw_phy_config(ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2678
		break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2679
	case RTL_GIGA_MAC_VER_19:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2680
		rtl8168c_1_hw_phy_config(ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2681
		break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2682
	case RTL_GIGA_MAC_VER_20:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2683
		rtl8168c_2_hw_phy_config(ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2684
		break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2685
	case RTL_GIGA_MAC_VER_21:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2686
		rtl8168c_3_hw_phy_config(ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2687
		break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2688
	case RTL_GIGA_MAC_VER_22:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2689
		rtl8168c_4_hw_phy_config(ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2690
		break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2691
	case RTL_GIGA_MAC_VER_23:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2692
	case RTL_GIGA_MAC_VER_24:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2693
		rtl8168cp_2_hw_phy_config(ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2694
		break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2695
	case RTL_GIGA_MAC_VER_25:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2696
		rtl8168d_1_hw_phy_config(ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2697
		break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2698
	case RTL_GIGA_MAC_VER_26:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2699
		rtl8168d_2_hw_phy_config(ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2700
		break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2701
	case RTL_GIGA_MAC_VER_27:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2702
		rtl8168d_3_hw_phy_config(ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2703
		break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2704
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2705
	default:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2706
		break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2707
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2708
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2709
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2710
static void rtl8169_phy_timer(unsigned long __opaque)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2711
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2712
	struct net_device *dev = (struct net_device *)__opaque;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2713
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2714
	struct timer_list *timer = &tp->timer;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2715
	void __iomem *ioaddr = tp->mmio_addr;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2716
	unsigned long timeout = RTL8169_PHY_TIMEOUT;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2717
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2718
	assert(tp->mac_version > RTL_GIGA_MAC_VER_01);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2719
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2720
	if (!(tp->phy_1000_ctrl_reg & ADVERTISE_1000FULL))
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2721
		return;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2722
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2723
	spin_lock_irq(&tp->lock);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2724
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2725
	if (tp->phy_reset_pending(ioaddr)) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2726
		/*
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2727
		 * A busy loop could burn quite a few cycles on nowadays CPU.
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2728
		 * Let's delay the execution of the timer for a few ticks.
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2729
		 */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2730
		timeout = HZ/10;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2731
		goto out_mod_timer;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2732
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2733
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2734
	if (tp->link_ok(ioaddr))
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2735
		goto out_unlock;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2736
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2737
	netif_warn(tp, link, dev, "PHY reset until link up\n");
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2738
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2739
	tp->phy_reset_enable(ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2740
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2741
out_mod_timer:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2742
	mod_timer(timer, jiffies + timeout);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2743
out_unlock:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2744
	spin_unlock_irq(&tp->lock);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2745
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2746
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2747
static inline void rtl8169_delete_timer(struct net_device *dev)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2748
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2749
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2750
	struct timer_list *timer = &tp->timer;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2751
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2752
	if (tp->mac_version <= RTL_GIGA_MAC_VER_01)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2753
		return;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2754
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2755
	del_timer_sync(timer);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2756
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2757
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2758
static inline void rtl8169_request_timer(struct net_device *dev)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2759
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2760
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2761
	struct timer_list *timer = &tp->timer;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2762
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2763
	if (tp->mac_version <= RTL_GIGA_MAC_VER_01)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2764
		return;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2765
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2766
	mod_timer(timer, jiffies + RTL8169_PHY_TIMEOUT);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2767
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2768
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2769
#ifdef CONFIG_NET_POLL_CONTROLLER
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2770
/*
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2771
 * Polling 'interrupt' - used by things like netconsole to send skbs
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2772
 * without having to re-enable interrupts. It's not called while
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2773
 * the interrupt routine is executing.
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2774
 */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2775
static void rtl8169_netpoll(struct net_device *dev)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2776
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2777
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2778
	struct pci_dev *pdev = tp->pci_dev;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2779
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2780
	disable_irq(pdev->irq);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2781
	rtl8169_interrupt(pdev->irq, dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2782
	enable_irq(pdev->irq);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2783
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2784
#endif
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2785
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2786
static void rtl8169_release_board(struct pci_dev *pdev, struct net_device *dev,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2787
				  void __iomem *ioaddr)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2788
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2789
	iounmap(ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2790
	pci_release_regions(pdev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2791
	pci_clear_mwi(pdev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2792
	pci_disable_device(pdev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2793
	free_netdev(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2794
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2795
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2796
static void rtl8169_phy_reset(struct net_device *dev,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2797
			      struct rtl8169_private *tp)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2798
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2799
	void __iomem *ioaddr = tp->mmio_addr;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2800
	unsigned int i;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2801
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2802
	tp->phy_reset_enable(ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2803
	for (i = 0; i < 100; i++) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2804
		if (!tp->phy_reset_pending(ioaddr))
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2805
			return;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2806
		msleep(1);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2807
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2808
	netif_err(tp, link, dev, "PHY reset failed\n");
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2809
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2810
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2811
static void rtl8169_init_phy(struct net_device *dev, struct rtl8169_private *tp)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2812
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2813
	void __iomem *ioaddr = tp->mmio_addr;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2814
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2815
	rtl_hw_phy_config(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2816
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2817
	if (tp->mac_version <= RTL_GIGA_MAC_VER_06) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2818
		dprintk("Set MAC Reg C+CR Offset 0x82h = 0x01h\n");
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2819
		RTL_W8(0x82, 0x01);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2820
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2821
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2822
	pci_write_config_byte(tp->pci_dev, PCI_LATENCY_TIMER, 0x40);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2823
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2824
	if (tp->mac_version <= RTL_GIGA_MAC_VER_06)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2825
		pci_write_config_byte(tp->pci_dev, PCI_CACHE_LINE_SIZE, 0x08);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2826
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2827
	if (tp->mac_version == RTL_GIGA_MAC_VER_02) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2828
		dprintk("Set MAC Reg C+CR Offset 0x82h = 0x01h\n");
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2829
		RTL_W8(0x82, 0x01);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2830
		dprintk("Set PHY Reg 0x0bh = 0x00h\n");
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2831
		mdio_write(ioaddr, 0x0b, 0x0000); //w 0x0b 15 0 0
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2832
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2833
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2834
	rtl8169_phy_reset(dev, tp);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2835
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2836
	/*
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2837
	 * rtl8169_set_speed_xmii takes good care of the Fast Ethernet
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2838
	 * only 8101. Don't panic.
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2839
	 */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2840
	rtl8169_set_speed(dev, AUTONEG_ENABLE, SPEED_1000, DUPLEX_FULL);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2841
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2842
	if (RTL_R8(PHYstatus) & TBI_Enable)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2843
		netif_info(tp, link, dev, "TBI auto-negotiating\n");
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2844
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2845
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2846
static void rtl_rar_set(struct rtl8169_private *tp, u8 *addr)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2847
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2848
	void __iomem *ioaddr = tp->mmio_addr;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2849
	u32 high;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2850
	u32 low;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2851
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2852
	low  = addr[0] | (addr[1] << 8) | (addr[2] << 16) | (addr[3] << 24);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2853
	high = addr[4] | (addr[5] << 8);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2854
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2855
	spin_lock_irq(&tp->lock);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2856
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2857
	RTL_W8(Cfg9346, Cfg9346_Unlock);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2858
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2859
	RTL_W32(MAC4, high);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2860
	RTL_R32(MAC4);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2861
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2862
	RTL_W32(MAC0, low);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2863
	RTL_R32(MAC0);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2864
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2865
	RTL_W8(Cfg9346, Cfg9346_Lock);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2866
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2867
	spin_unlock_irq(&tp->lock);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2868
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2869
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2870
static int rtl_set_mac_address(struct net_device *dev, void *p)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2871
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2872
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2873
	struct sockaddr *addr = p;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2874
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2875
	if (!is_valid_ether_addr(addr->sa_data))
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2876
		return -EADDRNOTAVAIL;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2877
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2878
	memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2879
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2880
	rtl_rar_set(tp, dev->dev_addr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2881
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2882
	return 0;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2883
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2884
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2885
static int rtl8169_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2886
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2887
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2888
	struct mii_ioctl_data *data = if_mii(ifr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2889
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2890
	return netif_running(dev) ? tp->do_ioctl(tp, data, cmd) : -ENODEV;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2891
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2892
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2893
static int rtl_xmii_ioctl(struct rtl8169_private *tp, struct mii_ioctl_data *data, int cmd)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2894
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2895
	switch (cmd) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2896
	case SIOCGMIIPHY:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2897
		data->phy_id = 32; /* Internal PHY */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2898
		return 0;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2899
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2900
	case SIOCGMIIREG:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2901
		data->val_out = mdio_read(tp->mmio_addr, data->reg_num & 0x1f);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2902
		return 0;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2903
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2904
	case SIOCSMIIREG:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2905
		mdio_write(tp->mmio_addr, data->reg_num & 0x1f, data->val_in);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2906
		return 0;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2907
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2908
	return -EOPNOTSUPP;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2909
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2910
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2911
static int rtl_tbi_ioctl(struct rtl8169_private *tp, struct mii_ioctl_data *data, int cmd)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2912
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2913
	return -EOPNOTSUPP;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2914
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2915
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2916
static const struct rtl_cfg_info {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2917
	void (*hw_start)(struct net_device *);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2918
	unsigned int region;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2919
	unsigned int align;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2920
	u16 intr_event;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2921
	u16 napi_event;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2922
	unsigned features;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2923
	u8 default_ver;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2924
} rtl_cfg_infos [] = {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2925
	[RTL_CFG_0] = {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2926
		.hw_start	= rtl_hw_start_8169,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2927
		.region		= 1,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2928
		.align		= 0,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2929
		.intr_event	= SYSErr | LinkChg | RxOverflow |
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2930
				  RxFIFOOver | TxErr | TxOK | RxOK | RxErr,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2931
		.napi_event	= RxFIFOOver | TxErr | TxOK | RxOK | RxOverflow,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2932
		.features	= RTL_FEATURE_GMII,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2933
		.default_ver	= RTL_GIGA_MAC_VER_01,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2934
	},
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2935
	[RTL_CFG_1] = {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2936
		.hw_start	= rtl_hw_start_8168,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2937
		.region		= 2,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2938
		.align		= 8,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2939
		.intr_event	= SYSErr | RxFIFOOver | LinkChg | RxOverflow |
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2940
				  TxErr | TxOK | RxOK | RxErr,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2941
		.napi_event	= TxErr | TxOK | RxOK | RxOverflow,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2942
		.features	= RTL_FEATURE_GMII | RTL_FEATURE_MSI,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2943
		.default_ver	= RTL_GIGA_MAC_VER_11,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2944
	},
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2945
	[RTL_CFG_2] = {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2946
		.hw_start	= rtl_hw_start_8101,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2947
		.region		= 2,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2948
		.align		= 8,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2949
		.intr_event	= SYSErr | LinkChg | RxOverflow | PCSTimeout |
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2950
				  RxFIFOOver | TxErr | TxOK | RxOK | RxErr,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2951
		.napi_event	= RxFIFOOver | TxErr | TxOK | RxOK | RxOverflow,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2952
		.features	= RTL_FEATURE_MSI,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2953
		.default_ver	= RTL_GIGA_MAC_VER_13,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2954
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2955
};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2956
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2957
/* Cfg9346_Unlock assumed. */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2958
static unsigned rtl_try_msi(struct pci_dev *pdev, void __iomem *ioaddr,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2959
			    const struct rtl_cfg_info *cfg)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2960
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2961
	unsigned msi = 0;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2962
	u8 cfg2;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2963
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2964
	cfg2 = RTL_R8(Config2) & ~MSIEnable;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2965
	if (cfg->features & RTL_FEATURE_MSI) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2966
		if (pci_enable_msi(pdev)) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2967
			dev_info(&pdev->dev, "no MSI. Back to INTx.\n");
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2968
		} else {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2969
			cfg2 |= MSIEnable;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2970
			msi = RTL_FEATURE_MSI;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2971
		}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2972
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2973
	RTL_W8(Config2, cfg2);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2974
	return msi;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2975
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2976
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2977
static void rtl_disable_msi(struct pci_dev *pdev, struct rtl8169_private *tp)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2978
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2979
	if (tp->features & RTL_FEATURE_MSI) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2980
		pci_disable_msi(pdev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2981
		tp->features &= ~RTL_FEATURE_MSI;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2982
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2983
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2984
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2985
static const struct net_device_ops rtl8169_netdev_ops = {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2986
	.ndo_open		= rtl8169_open,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2987
	.ndo_stop		= rtl8169_close,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2988
	.ndo_get_stats		= rtl8169_get_stats,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2989
	.ndo_start_xmit		= rtl8169_start_xmit,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2990
	.ndo_tx_timeout		= rtl8169_tx_timeout,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2991
	.ndo_validate_addr	= eth_validate_addr,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2992
	.ndo_change_mtu		= rtl8169_change_mtu,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2993
	.ndo_set_mac_address	= rtl_set_mac_address,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2994
	.ndo_do_ioctl		= rtl8169_ioctl,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2995
	.ndo_set_multicast_list	= rtl_set_rx_mode,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2996
#ifdef CONFIG_R8169_VLAN
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2997
	.ndo_vlan_rx_register	= rtl8169_vlan_rx_register,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2998
#endif
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2999
#ifdef CONFIG_NET_POLL_CONTROLLER
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3000
	.ndo_poll_controller	= rtl8169_netpoll,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3001
#endif
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3002
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3003
};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3004
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3005
static int __devinit
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3006
rtl8169_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3007
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3008
	const struct rtl_cfg_info *cfg = rtl_cfg_infos + ent->driver_data;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3009
	const unsigned int region = cfg->region;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3010
	struct rtl8169_private *tp;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3011
	struct mii_if_info *mii;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3012
	struct net_device *dev;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3013
	void __iomem *ioaddr;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3014
	unsigned int i;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3015
	int rc;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3016
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3017
	if (netif_msg_drv(&debug)) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3018
		printk(KERN_INFO "%s Gigabit Ethernet driver %s loaded\n",
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3019
		       MODULENAME, RTL8169_VERSION);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3020
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3021
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3022
	dev = alloc_etherdev(sizeof (*tp));
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3023
	if (!dev) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3024
		if (netif_msg_drv(&debug))
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3025
			dev_err(&pdev->dev, "unable to alloc new ethernet\n");
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3026
		rc = -ENOMEM;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3027
		goto out;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3028
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3029
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3030
	SET_NETDEV_DEV(dev, &pdev->dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3031
	dev->netdev_ops = &rtl8169_netdev_ops;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3032
	tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3033
	tp->dev = dev;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3034
	tp->pci_dev = pdev;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3035
	tp->msg_enable = netif_msg_init(debug.msg_enable, R8169_MSG_DEFAULT);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3036
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3037
	mii = &tp->mii;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3038
	mii->dev = dev;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3039
	mii->mdio_read = rtl_mdio_read;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3040
	mii->mdio_write = rtl_mdio_write;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3041
	mii->phy_id_mask = 0x1f;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3042
	mii->reg_num_mask = 0x1f;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3043
	mii->supports_gmii = !!(cfg->features & RTL_FEATURE_GMII);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3044
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3045
	/* enable device (incl. PCI PM wakeup and hotplug setup) */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3046
	rc = pci_enable_device(pdev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3047
	if (rc < 0) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3048
		netif_err(tp, probe, dev, "enable failure\n");
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3049
		goto err_out_free_dev_1;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3050
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3051
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3052
	if (pci_set_mwi(pdev) < 0)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3053
		netif_info(tp, probe, dev, "Mem-Wr-Inval unavailable\n");
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3054
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3055
	/* make sure PCI base addr 1 is MMIO */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3056
	if (!(pci_resource_flags(pdev, region) & IORESOURCE_MEM)) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3057
		netif_err(tp, probe, dev,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3058
			  "region #%d not an MMIO resource, aborting\n",
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3059
			  region);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3060
		rc = -ENODEV;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3061
		goto err_out_mwi_2;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3062
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3063
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3064
	/* check for weird/broken PCI region reporting */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3065
	if (pci_resource_len(pdev, region) < R8169_REGS_SIZE) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3066
		netif_err(tp, probe, dev,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3067
			  "Invalid PCI region size(s), aborting\n");
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3068
		rc = -ENODEV;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3069
		goto err_out_mwi_2;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3070
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3071
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3072
	rc = pci_request_regions(pdev, MODULENAME);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3073
	if (rc < 0) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3074
		netif_err(tp, probe, dev, "could not request regions\n");
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3075
		goto err_out_mwi_2;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3076
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3077
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3078
	tp->cp_cmd = PCIMulRW | RxChkSum;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3079
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3080
	if ((sizeof(dma_addr_t) > 4) &&
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3081
	    !pci_set_dma_mask(pdev, DMA_BIT_MASK(64)) && use_dac) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3082
		tp->cp_cmd |= PCIDAC;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3083
		dev->features |= NETIF_F_HIGHDMA;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3084
	} else {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3085
		rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3086
		if (rc < 0) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3087
			netif_err(tp, probe, dev, "DMA configuration failed\n");
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3088
			goto err_out_free_res_3;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3089
		}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3090
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3091
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3092
	/* ioremap MMIO region */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3093
	ioaddr = ioremap(pci_resource_start(pdev, region), R8169_REGS_SIZE);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3094
	if (!ioaddr) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3095
		netif_err(tp, probe, dev, "cannot remap MMIO, aborting\n");
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3096
		rc = -EIO;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3097
		goto err_out_free_res_3;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3098
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3099
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3100
	tp->pcie_cap = pci_find_capability(pdev, PCI_CAP_ID_EXP);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3101
	if (!tp->pcie_cap)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3102
		netif_info(tp, probe, dev, "no PCI Express capability\n");
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3103
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3104
	RTL_W16(IntrMask, 0x0000);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3105
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3106
	/* Soft reset the chip. */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3107
	RTL_W8(ChipCmd, CmdReset);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3108
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3109
	/* Check that the chip has finished the reset. */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3110
	for (i = 0; i < 100; i++) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3111
		if ((RTL_R8(ChipCmd) & CmdReset) == 0)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3112
			break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3113
		msleep_interruptible(1);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3114
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3115
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3116
	RTL_W16(IntrStatus, 0xffff);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3117
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3118
	pci_set_master(pdev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3119
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3120
	/* Identify chip attached to board */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3121
	rtl8169_get_mac_version(tp, ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3122
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3123
	/* Use appropriate default if unknown */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3124
	if (tp->mac_version == RTL_GIGA_MAC_NONE) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3125
		netif_notice(tp, probe, dev,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3126
			     "unknown MAC, using family default\n");
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3127
		tp->mac_version = cfg->default_ver;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3128
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3129
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3130
	rtl8169_print_mac_version(tp);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3131
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3132
	for (i = 0; i < ARRAY_SIZE(rtl_chip_info); i++) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3133
		if (tp->mac_version == rtl_chip_info[i].mac_version)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3134
			break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3135
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3136
	if (i == ARRAY_SIZE(rtl_chip_info)) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3137
		dev_err(&pdev->dev,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3138
			"driver bug, MAC version not found in rtl_chip_info\n");
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3139
		goto err_out_msi_4;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3140
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3141
	tp->chipset = i;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3142
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3143
	RTL_W8(Cfg9346, Cfg9346_Unlock);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3144
	RTL_W8(Config1, RTL_R8(Config1) | PMEnable);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3145
	RTL_W8(Config5, RTL_R8(Config5) & PMEStatus);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3146
	if ((RTL_R8(Config3) & (LinkUp | MagicPacket)) != 0)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3147
		tp->features |= RTL_FEATURE_WOL;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3148
	if ((RTL_R8(Config5) & (UWF | BWF | MWF)) != 0)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3149
		tp->features |= RTL_FEATURE_WOL;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3150
	tp->features |= rtl_try_msi(pdev, ioaddr, cfg);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3151
	RTL_W8(Cfg9346, Cfg9346_Lock);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3152
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3153
	if ((tp->mac_version <= RTL_GIGA_MAC_VER_06) &&
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3154
	    (RTL_R8(PHYstatus) & TBI_Enable)) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3155
		tp->set_speed = rtl8169_set_speed_tbi;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3156
		tp->get_settings = rtl8169_gset_tbi;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3157
		tp->phy_reset_enable = rtl8169_tbi_reset_enable;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3158
		tp->phy_reset_pending = rtl8169_tbi_reset_pending;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3159
		tp->link_ok = rtl8169_tbi_link_ok;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3160
		tp->do_ioctl = rtl_tbi_ioctl;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3161
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3162
		tp->phy_1000_ctrl_reg = ADVERTISE_1000FULL; /* Implied by TBI */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3163
	} else {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3164
		tp->set_speed = rtl8169_set_speed_xmii;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3165
		tp->get_settings = rtl8169_gset_xmii;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3166
		tp->phy_reset_enable = rtl8169_xmii_reset_enable;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3167
		tp->phy_reset_pending = rtl8169_xmii_reset_pending;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3168
		tp->link_ok = rtl8169_xmii_link_ok;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3169
		tp->do_ioctl = rtl_xmii_ioctl;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3170
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3171
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3172
	spin_lock_init(&tp->lock);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3173
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3174
	tp->mmio_addr = ioaddr;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3175
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3176
	/* Get MAC address */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3177
	for (i = 0; i < MAC_ADDR_LEN; i++)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3178
		dev->dev_addr[i] = RTL_R8(MAC0 + i);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3179
	memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3180
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3181
	SET_ETHTOOL_OPS(dev, &rtl8169_ethtool_ops);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3182
	dev->watchdog_timeo = RTL8169_TX_TIMEOUT;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3183
	dev->irq = pdev->irq;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3184
	dev->base_addr = (unsigned long) ioaddr;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3185
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3186
	netif_napi_add(dev, &tp->napi, rtl8169_poll, R8169_NAPI_WEIGHT);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3187
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3188
#ifdef CONFIG_R8169_VLAN
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3189
	dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3190
#endif
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3191
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3192
	tp->intr_mask = 0xffff;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3193
	tp->align = cfg->align;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3194
	tp->hw_start = cfg->hw_start;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3195
	tp->intr_event = cfg->intr_event;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3196
	tp->napi_event = cfg->napi_event;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3197
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3198
	init_timer(&tp->timer);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3199
	tp->timer.data = (unsigned long) dev;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3200
	tp->timer.function = rtl8169_phy_timer;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3201
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3202
	rc = register_netdev(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3203
	if (rc < 0)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3204
		goto err_out_msi_4;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3205
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3206
	pci_set_drvdata(pdev, dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3207
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3208
	netif_info(tp, probe, dev, "%s at 0x%lx, %pM, XID %08x IRQ %d\n",
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3209
		   rtl_chip_info[tp->chipset].name,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3210
		   dev->base_addr, dev->dev_addr,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3211
		   (u32)(RTL_R32(TxConfig) & 0x9cf0f8ff), dev->irq);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3212
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3213
	rtl8169_init_phy(dev, tp);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3214
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3215
	/*
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3216
	 * Pretend we are using VLANs; This bypasses a nasty bug where
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3217
	 * Interrupts stop flowing on high load on 8110SCd controllers.
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3218
	 */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3219
	if (tp->mac_version == RTL_GIGA_MAC_VER_05)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3220
		RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) | RxVlan);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3221
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3222
	device_set_wakeup_enable(&pdev->dev, tp->features & RTL_FEATURE_WOL);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3223
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3224
	if (pci_dev_run_wake(pdev))
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3225
		pm_runtime_put_noidle(&pdev->dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3226
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3227
out:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3228
	return rc;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3229
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3230
err_out_msi_4:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3231
	rtl_disable_msi(pdev, tp);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3232
	iounmap(ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3233
err_out_free_res_3:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3234
	pci_release_regions(pdev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3235
err_out_mwi_2:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3236
	pci_clear_mwi(pdev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3237
	pci_disable_device(pdev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3238
err_out_free_dev_1:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3239
	free_netdev(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3240
	goto out;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3241
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3242
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3243
static void __devexit rtl8169_remove_one(struct pci_dev *pdev)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3244
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3245
	struct net_device *dev = pci_get_drvdata(pdev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3246
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3247
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3248
	flush_scheduled_work();
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3249
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3250
	unregister_netdev(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3251
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3252
	if (pci_dev_run_wake(pdev))
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3253
		pm_runtime_get_noresume(&pdev->dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3254
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3255
	/* restore original MAC address */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3256
	rtl_rar_set(tp, dev->perm_addr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3257
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3258
	rtl_disable_msi(pdev, tp);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3259
	rtl8169_release_board(pdev, dev, tp->mmio_addr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3260
	pci_set_drvdata(pdev, NULL);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3261
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3262
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3263
static void rtl8169_set_rxbufsize(struct rtl8169_private *tp,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3264
				  unsigned int mtu)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3265
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3266
	unsigned int max_frame = mtu + VLAN_ETH_HLEN + ETH_FCS_LEN;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3267
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3268
	if (max_frame != 16383)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3269
		printk(KERN_WARNING PFX "WARNING! Changing of MTU on this "
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3270
			"NIC may lead to frame reception errors!\n");
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3271
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3272
	tp->rx_buf_sz = (max_frame > RX_BUF_SIZE) ? max_frame : RX_BUF_SIZE;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3273
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3274
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3275
static int rtl8169_open(struct net_device *dev)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3276
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3277
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3278
	struct pci_dev *pdev = tp->pci_dev;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3279
	int retval = -ENOMEM;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3280
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3281
	pm_runtime_get_sync(&pdev->dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3282
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3283
	/*
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3284
	 * Note that we use a magic value here, its wierd I know
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3285
	 * its done because, some subset of rtl8169 hardware suffers from
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3286
	 * a problem in which frames received that are longer than
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3287
	 * the size set in RxMaxSize register return garbage sizes
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3288
	 * when received.  To avoid this we need to turn off filtering,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3289
	 * which is done by setting a value of 16383 in the RxMaxSize register
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3290
	 * and allocating 16k frames to handle the largest possible rx value
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3291
	 * thats what the magic math below does.
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3292
	 */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3293
	rtl8169_set_rxbufsize(tp, 16383 - VLAN_ETH_HLEN - ETH_FCS_LEN);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3294
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3295
	/*
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3296
	 * Rx and Tx desscriptors needs 256 bytes alignment.
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3297
	 * dma_alloc_coherent provides more.
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3298
	 */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3299
	tp->TxDescArray = dma_alloc_coherent(&pdev->dev, R8169_TX_RING_BYTES,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3300
					     &tp->TxPhyAddr, GFP_KERNEL);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3301
	if (!tp->TxDescArray)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3302
		goto err_pm_runtime_put;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3303
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3304
	tp->RxDescArray = dma_alloc_coherent(&pdev->dev, R8169_RX_RING_BYTES,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3305
					     &tp->RxPhyAddr, GFP_KERNEL);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3306
	if (!tp->RxDescArray)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3307
		goto err_free_tx_0;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3308
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3309
	retval = rtl8169_init_ring(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3310
	if (retval < 0)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3311
		goto err_free_rx_1;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3312
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3313
	INIT_DELAYED_WORK(&tp->task, NULL);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3314
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3315
	smp_mb();
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3316
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3317
	retval = request_irq(dev->irq, rtl8169_interrupt,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3318
			     (tp->features & RTL_FEATURE_MSI) ? 0 : IRQF_SHARED,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3319
			     dev->name, dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3320
	if (retval < 0)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3321
		goto err_release_ring_2;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3322
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3323
	napi_enable(&tp->napi);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3324
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3325
	rtl_hw_start(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3326
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3327
	rtl8169_request_timer(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3328
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3329
	tp->saved_wolopts = 0;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3330
	pm_runtime_put_noidle(&pdev->dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3331
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3332
	rtl8169_check_link_status(dev, tp, tp->mmio_addr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3333
out:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3334
	return retval;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3335
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3336
err_release_ring_2:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3337
	rtl8169_rx_clear(tp);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3338
err_free_rx_1:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3339
	dma_free_coherent(&pdev->dev, R8169_RX_RING_BYTES, tp->RxDescArray,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3340
			  tp->RxPhyAddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3341
	tp->RxDescArray = NULL;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3342
err_free_tx_0:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3343
	dma_free_coherent(&pdev->dev, R8169_TX_RING_BYTES, tp->TxDescArray,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3344
			  tp->TxPhyAddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3345
	tp->TxDescArray = NULL;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3346
err_pm_runtime_put:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3347
	pm_runtime_put_noidle(&pdev->dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3348
	goto out;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3349
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3350
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3351
static void rtl8169_hw_reset(void __iomem *ioaddr)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3352
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3353
	/* Disable interrupts */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3354
	rtl8169_irq_mask_and_ack(ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3355
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3356
	/* Reset the chipset */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3357
	RTL_W8(ChipCmd, CmdReset);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3358
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3359
	/* PCI commit */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3360
	RTL_R8(ChipCmd);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3361
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3362
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3363
static void rtl_set_rx_tx_config_registers(struct rtl8169_private *tp)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3364
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3365
	void __iomem *ioaddr = tp->mmio_addr;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3366
	u32 cfg = rtl8169_rx_config;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3367
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3368
	cfg |= (RTL_R32(RxConfig) & rtl_chip_info[tp->chipset].RxConfigMask);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3369
	RTL_W32(RxConfig, cfg);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3370
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3371
	/* Set DMA burst size and Interframe Gap Time */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3372
	RTL_W32(TxConfig, (TX_DMA_BURST << TxDMAShift) |
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3373
		(InterFrameGap << TxInterFrameGapShift));
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3374
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3375
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3376
static void rtl_hw_start(struct net_device *dev)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3377
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3378
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3379
	void __iomem *ioaddr = tp->mmio_addr;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3380
	unsigned int i;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3381
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3382
	/* Soft reset the chip. */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3383
	RTL_W8(ChipCmd, CmdReset);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3384
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3385
	/* Check that the chip has finished the reset. */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3386
	for (i = 0; i < 100; i++) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3387
		if ((RTL_R8(ChipCmd) & CmdReset) == 0)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3388
			break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3389
		msleep_interruptible(1);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3390
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3391
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3392
	tp->hw_start(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3393
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3394
	netif_start_queue(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3395
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3396
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3397
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3398
static void rtl_set_rx_tx_desc_registers(struct rtl8169_private *tp,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3399
					 void __iomem *ioaddr)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3400
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3401
	/*
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3402
	 * Magic spell: some iop3xx ARM board needs the TxDescAddrHigh
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3403
	 * register to be written before TxDescAddrLow to work.
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3404
	 * Switching from MMIO to I/O access fixes the issue as well.
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3405
	 */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3406
	RTL_W32(TxDescStartAddrHigh, ((u64) tp->TxPhyAddr) >> 32);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3407
	RTL_W32(TxDescStartAddrLow, ((u64) tp->TxPhyAddr) & DMA_BIT_MASK(32));
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3408
	RTL_W32(RxDescAddrHigh, ((u64) tp->RxPhyAddr) >> 32);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3409
	RTL_W32(RxDescAddrLow, ((u64) tp->RxPhyAddr) & DMA_BIT_MASK(32));
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3410
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3411
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3412
static u16 rtl_rw_cpluscmd(void __iomem *ioaddr)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3413
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3414
	u16 cmd;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3415
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3416
	cmd = RTL_R16(CPlusCmd);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3417
	RTL_W16(CPlusCmd, cmd);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3418
	return cmd;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3419
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3420
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3421
static void rtl_set_rx_max_size(void __iomem *ioaddr, unsigned int rx_buf_sz)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3422
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3423
	/* Low hurts. Let's disable the filtering. */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3424
	RTL_W16(RxMaxSize, rx_buf_sz + 1);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3425
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3426
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3427
static void rtl8169_set_magic_reg(void __iomem *ioaddr, unsigned mac_version)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3428
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3429
	static const struct {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3430
		u32 mac_version;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3431
		u32 clk;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3432
		u32 val;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3433
	} cfg2_info [] = {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3434
		{ RTL_GIGA_MAC_VER_05, PCI_Clock_33MHz, 0x000fff00 }, // 8110SCd
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3435
		{ RTL_GIGA_MAC_VER_05, PCI_Clock_66MHz, 0x000fffff },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3436
		{ RTL_GIGA_MAC_VER_06, PCI_Clock_33MHz, 0x00ffff00 }, // 8110SCe
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3437
		{ RTL_GIGA_MAC_VER_06, PCI_Clock_66MHz, 0x00ffffff }
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3438
	}, *p = cfg2_info;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3439
	unsigned int i;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3440
	u32 clk;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3441
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3442
	clk = RTL_R8(Config2) & PCI_Clock_66MHz;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3443
	for (i = 0; i < ARRAY_SIZE(cfg2_info); i++, p++) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3444
		if ((p->mac_version == mac_version) && (p->clk == clk)) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3445
			RTL_W32(0x7c, p->val);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3446
			break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3447
		}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3448
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3449
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3450
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3451
static void rtl_hw_start_8169(struct net_device *dev)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3452
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3453
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3454
	void __iomem *ioaddr = tp->mmio_addr;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3455
	struct pci_dev *pdev = tp->pci_dev;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3456
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3457
	if (tp->mac_version == RTL_GIGA_MAC_VER_05) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3458
		RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) | PCIMulRW);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3459
		pci_write_config_byte(pdev, PCI_CACHE_LINE_SIZE, 0x08);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3460
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3461
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3462
	RTL_W8(Cfg9346, Cfg9346_Unlock);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3463
	if ((tp->mac_version == RTL_GIGA_MAC_VER_01) ||
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3464
	    (tp->mac_version == RTL_GIGA_MAC_VER_02) ||
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3465
	    (tp->mac_version == RTL_GIGA_MAC_VER_03) ||
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3466
	    (tp->mac_version == RTL_GIGA_MAC_VER_04))
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3467
		RTL_W8(ChipCmd, CmdTxEnb | CmdRxEnb);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3468
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3469
	RTL_W8(EarlyTxThres, EarlyTxThld);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3470
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3471
	rtl_set_rx_max_size(ioaddr, tp->rx_buf_sz);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3472
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3473
	if ((tp->mac_version == RTL_GIGA_MAC_VER_01) ||
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3474
	    (tp->mac_version == RTL_GIGA_MAC_VER_02) ||
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3475
	    (tp->mac_version == RTL_GIGA_MAC_VER_03) ||
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3476
	    (tp->mac_version == RTL_GIGA_MAC_VER_04))
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3477
		rtl_set_rx_tx_config_registers(tp);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3478
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3479
	tp->cp_cmd |= rtl_rw_cpluscmd(ioaddr) | PCIMulRW;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3480
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3481
	if ((tp->mac_version == RTL_GIGA_MAC_VER_02) ||
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3482
	    (tp->mac_version == RTL_GIGA_MAC_VER_03)) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3483
		dprintk("Set MAC Reg C+CR Offset 0xE0. "
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3484
			"Bit-3 and bit-14 MUST be 1\n");
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3485
		tp->cp_cmd |= (1 << 14);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3486
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3487
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3488
	RTL_W16(CPlusCmd, tp->cp_cmd);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3489
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3490
	rtl8169_set_magic_reg(ioaddr, tp->mac_version);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3491
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3492
	/*
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3493
	 * Undocumented corner. Supposedly:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3494
	 * (TxTimer << 12) | (TxPackets << 8) | (RxTimer << 4) | RxPackets
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3495
	 */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3496
	RTL_W16(IntrMitigate, 0x0000);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3497
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3498
	rtl_set_rx_tx_desc_registers(tp, ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3499
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3500
	if ((tp->mac_version != RTL_GIGA_MAC_VER_01) &&
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3501
	    (tp->mac_version != RTL_GIGA_MAC_VER_02) &&
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3502
	    (tp->mac_version != RTL_GIGA_MAC_VER_03) &&
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3503
	    (tp->mac_version != RTL_GIGA_MAC_VER_04)) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3504
		RTL_W8(ChipCmd, CmdTxEnb | CmdRxEnb);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3505
		rtl_set_rx_tx_config_registers(tp);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3506
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3507
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3508
	RTL_W8(Cfg9346, Cfg9346_Lock);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3509
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3510
	/* Initially a 10 us delay. Turned it into a PCI commit. - FR */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3511
	RTL_R8(IntrMask);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3512
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3513
	RTL_W32(RxMissed, 0);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3514
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3515
	rtl_set_rx_mode(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3516
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3517
	/* no early-rx interrupts */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3518
	RTL_W16(MultiIntr, RTL_R16(MultiIntr) & 0xF000);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3519
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3520
	/* Enable all known interrupts by setting the interrupt mask. */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3521
	RTL_W16(IntrMask, tp->intr_event);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3522
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3523
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3524
static void rtl_tx_performance_tweak(struct pci_dev *pdev, u16 force)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3525
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3526
	struct net_device *dev = pci_get_drvdata(pdev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3527
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3528
	int cap = tp->pcie_cap;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3529
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3530
	if (cap) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3531
		u16 ctl;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3532
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3533
		pci_read_config_word(pdev, cap + PCI_EXP_DEVCTL, &ctl);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3534
		ctl = (ctl & ~PCI_EXP_DEVCTL_READRQ) | force;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3535
		pci_write_config_word(pdev, cap + PCI_EXP_DEVCTL, ctl);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3536
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3537
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3538
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3539
static void rtl_csi_access_enable(void __iomem *ioaddr)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3540
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3541
	u32 csi;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3542
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3543
	csi = rtl_csi_read(ioaddr, 0x070c) & 0x00ffffff;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3544
	rtl_csi_write(ioaddr, 0x070c, csi | 0x27000000);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3545
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3546
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3547
struct ephy_info {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3548
	unsigned int offset;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3549
	u16 mask;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3550
	u16 bits;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3551
};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3552
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3553
static void rtl_ephy_init(void __iomem *ioaddr, const struct ephy_info *e, int len)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3554
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3555
	u16 w;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3556
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3557
	while (len-- > 0) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3558
		w = (rtl_ephy_read(ioaddr, e->offset) & ~e->mask) | e->bits;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3559
		rtl_ephy_write(ioaddr, e->offset, w);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3560
		e++;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3561
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3562
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3563
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3564
static void rtl_disable_clock_request(struct pci_dev *pdev)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3565
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3566
	struct net_device *dev = pci_get_drvdata(pdev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3567
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3568
	int cap = tp->pcie_cap;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3569
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3570
	if (cap) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3571
		u16 ctl;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3572
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3573
		pci_read_config_word(pdev, cap + PCI_EXP_LNKCTL, &ctl);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3574
		ctl &= ~PCI_EXP_LNKCTL_CLKREQ_EN;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3575
		pci_write_config_word(pdev, cap + PCI_EXP_LNKCTL, ctl);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3576
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3577
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3578
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3579
#define R8168_CPCMD_QUIRK_MASK (\
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3580
	EnableBist | \
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3581
	Mac_dbgo_oe | \
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3582
	Force_half_dup | \
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3583
	Force_rxflow_en | \
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3584
	Force_txflow_en | \
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3585
	Cxpl_dbg_sel | \
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3586
	ASF | \
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3587
	PktCntrDisable | \
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3588
	Mac_dbgo_sel)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3589
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3590
static void rtl_hw_start_8168bb(void __iomem *ioaddr, struct pci_dev *pdev)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3591
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3592
	RTL_W8(Config3, RTL_R8(Config3) & ~Beacon_en);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3593
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3594
	RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3595
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3596
	rtl_tx_performance_tweak(pdev,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3597
		(0x5 << MAX_READ_REQUEST_SHIFT) | PCI_EXP_DEVCTL_NOSNOOP_EN);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3598
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3599
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3600
static void rtl_hw_start_8168bef(void __iomem *ioaddr, struct pci_dev *pdev)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3601
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3602
	rtl_hw_start_8168bb(ioaddr, pdev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3603
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3604
	RTL_W8(EarlyTxThres, EarlyTxThld);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3605
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3606
	RTL_W8(Config4, RTL_R8(Config4) & ~(1 << 0));
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3607
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3608
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3609
static void __rtl_hw_start_8168cp(void __iomem *ioaddr, struct pci_dev *pdev)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3610
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3611
	RTL_W8(Config1, RTL_R8(Config1) | Speed_down);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3612
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3613
	RTL_W8(Config3, RTL_R8(Config3) & ~Beacon_en);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3614
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3615
	rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3616
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3617
	rtl_disable_clock_request(pdev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3618
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3619
	RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3620
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3621
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3622
static void rtl_hw_start_8168cp_1(void __iomem *ioaddr, struct pci_dev *pdev)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3623
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3624
	static const struct ephy_info e_info_8168cp[] = {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3625
		{ 0x01, 0,	0x0001 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3626
		{ 0x02, 0x0800,	0x1000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3627
		{ 0x03, 0,	0x0042 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3628
		{ 0x06, 0x0080,	0x0000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3629
		{ 0x07, 0,	0x2000 }
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3630
	};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3631
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3632
	rtl_csi_access_enable(ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3633
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3634
	rtl_ephy_init(ioaddr, e_info_8168cp, ARRAY_SIZE(e_info_8168cp));
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3635
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3636
	__rtl_hw_start_8168cp(ioaddr, pdev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3637
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3638
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3639
static void rtl_hw_start_8168cp_2(void __iomem *ioaddr, struct pci_dev *pdev)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3640
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3641
	rtl_csi_access_enable(ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3642
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3643
	RTL_W8(Config3, RTL_R8(Config3) & ~Beacon_en);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3644
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3645
	rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3646
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3647
	RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3648
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3649
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3650
static void rtl_hw_start_8168cp_3(void __iomem *ioaddr, struct pci_dev *pdev)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3651
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3652
	rtl_csi_access_enable(ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3653
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3654
	RTL_W8(Config3, RTL_R8(Config3) & ~Beacon_en);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3655
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3656
	/* Magic. */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3657
	RTL_W8(DBG_REG, 0x20);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3658
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3659
	RTL_W8(EarlyTxThres, EarlyTxThld);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3660
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3661
	rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3662
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3663
	RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3664
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3665
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3666
static void rtl_hw_start_8168c_1(void __iomem *ioaddr, struct pci_dev *pdev)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3667
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3668
	static const struct ephy_info e_info_8168c_1[] = {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3669
		{ 0x02, 0x0800,	0x1000 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3670
		{ 0x03, 0,	0x0002 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3671
		{ 0x06, 0x0080,	0x0000 }
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3672
	};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3673
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3674
	rtl_csi_access_enable(ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3675
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3676
	RTL_W8(DBG_REG, 0x06 | FIX_NAK_1 | FIX_NAK_2);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3677
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3678
	rtl_ephy_init(ioaddr, e_info_8168c_1, ARRAY_SIZE(e_info_8168c_1));
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3679
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3680
	__rtl_hw_start_8168cp(ioaddr, pdev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3681
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3682
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3683
static void rtl_hw_start_8168c_2(void __iomem *ioaddr, struct pci_dev *pdev)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3684
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3685
	static const struct ephy_info e_info_8168c_2[] = {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3686
		{ 0x01, 0,	0x0001 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3687
		{ 0x03, 0x0400,	0x0220 }
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3688
	};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3689
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3690
	rtl_csi_access_enable(ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3691
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3692
	rtl_ephy_init(ioaddr, e_info_8168c_2, ARRAY_SIZE(e_info_8168c_2));
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3693
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3694
	__rtl_hw_start_8168cp(ioaddr, pdev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3695
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3696
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3697
static void rtl_hw_start_8168c_3(void __iomem *ioaddr, struct pci_dev *pdev)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3698
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3699
	rtl_hw_start_8168c_2(ioaddr, pdev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3700
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3701
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3702
static void rtl_hw_start_8168c_4(void __iomem *ioaddr, struct pci_dev *pdev)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3703
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3704
	rtl_csi_access_enable(ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3705
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3706
	__rtl_hw_start_8168cp(ioaddr, pdev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3707
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3708
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3709
static void rtl_hw_start_8168d(void __iomem *ioaddr, struct pci_dev *pdev)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3710
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3711
	rtl_csi_access_enable(ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3712
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3713
	rtl_disable_clock_request(pdev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3714
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3715
	RTL_W8(EarlyTxThres, EarlyTxThld);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3716
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3717
	rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3718
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3719
	RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3720
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3721
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3722
static void rtl_hw_start_8168(struct net_device *dev)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3723
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3724
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3725
	void __iomem *ioaddr = tp->mmio_addr;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3726
	struct pci_dev *pdev = tp->pci_dev;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3727
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3728
	RTL_W8(Cfg9346, Cfg9346_Unlock);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3729
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3730
	RTL_W8(EarlyTxThres, EarlyTxThld);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3731
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3732
	rtl_set_rx_max_size(ioaddr, tp->rx_buf_sz);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3733
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3734
	tp->cp_cmd |= RTL_R16(CPlusCmd) | PktCntrDisable | INTT_1;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3735
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3736
	RTL_W16(CPlusCmd, tp->cp_cmd);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3737
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3738
	RTL_W16(IntrMitigate, 0x5151);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3739
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3740
	/* Work around for RxFIFO overflow. */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3741
	if (tp->mac_version == RTL_GIGA_MAC_VER_11) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3742
		tp->intr_event |= RxFIFOOver | PCSTimeout;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3743
		tp->intr_event &= ~RxOverflow;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3744
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3745
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3746
	rtl_set_rx_tx_desc_registers(tp, ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3747
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3748
	rtl_set_rx_mode(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3749
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3750
	RTL_W32(TxConfig, (TX_DMA_BURST << TxDMAShift) |
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3751
		(InterFrameGap << TxInterFrameGapShift));
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3752
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3753
	RTL_R8(IntrMask);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3754
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3755
	switch (tp->mac_version) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3756
	case RTL_GIGA_MAC_VER_11:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3757
		rtl_hw_start_8168bb(ioaddr, pdev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3758
	break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3759
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3760
	case RTL_GIGA_MAC_VER_12:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3761
	case RTL_GIGA_MAC_VER_17:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3762
		rtl_hw_start_8168bef(ioaddr, pdev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3763
	break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3764
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3765
	case RTL_GIGA_MAC_VER_18:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3766
		rtl_hw_start_8168cp_1(ioaddr, pdev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3767
	break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3768
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3769
	case RTL_GIGA_MAC_VER_19:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3770
		rtl_hw_start_8168c_1(ioaddr, pdev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3771
	break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3772
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3773
	case RTL_GIGA_MAC_VER_20:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3774
		rtl_hw_start_8168c_2(ioaddr, pdev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3775
	break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3776
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3777
	case RTL_GIGA_MAC_VER_21:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3778
		rtl_hw_start_8168c_3(ioaddr, pdev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3779
	break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3780
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3781
	case RTL_GIGA_MAC_VER_22:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3782
		rtl_hw_start_8168c_4(ioaddr, pdev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3783
	break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3784
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3785
	case RTL_GIGA_MAC_VER_23:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3786
		rtl_hw_start_8168cp_2(ioaddr, pdev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3787
	break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3788
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3789
	case RTL_GIGA_MAC_VER_24:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3790
		rtl_hw_start_8168cp_3(ioaddr, pdev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3791
	break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3792
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3793
	case RTL_GIGA_MAC_VER_25:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3794
	case RTL_GIGA_MAC_VER_26:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3795
	case RTL_GIGA_MAC_VER_27:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3796
		rtl_hw_start_8168d(ioaddr, pdev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3797
	break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3798
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3799
	default:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3800
		printk(KERN_ERR PFX "%s: unknown chipset (mac_version = %d).\n",
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3801
			dev->name, tp->mac_version);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3802
	break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3803
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3804
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3805
	RTL_W8(ChipCmd, CmdTxEnb | CmdRxEnb);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3806
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3807
	RTL_W8(Cfg9346, Cfg9346_Lock);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3808
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3809
	RTL_W16(MultiIntr, RTL_R16(MultiIntr) & 0xF000);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3810
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3811
	RTL_W16(IntrMask, tp->intr_event);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3812
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3813
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3814
#define R810X_CPCMD_QUIRK_MASK (\
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3815
	EnableBist | \
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3816
	Mac_dbgo_oe | \
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3817
	Force_half_dup | \
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3818
	Force_rxflow_en | \
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3819
	Force_txflow_en | \
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3820
	Cxpl_dbg_sel | \
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3821
	ASF | \
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3822
	PktCntrDisable | \
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3823
	PCIDAC | \
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3824
	PCIMulRW)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3825
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3826
static void rtl_hw_start_8102e_1(void __iomem *ioaddr, struct pci_dev *pdev)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3827
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3828
	static const struct ephy_info e_info_8102e_1[] = {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3829
		{ 0x01,	0, 0x6e65 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3830
		{ 0x02,	0, 0x091f },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3831
		{ 0x03,	0, 0xc2f9 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3832
		{ 0x06,	0, 0xafb5 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3833
		{ 0x07,	0, 0x0e00 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3834
		{ 0x19,	0, 0xec80 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3835
		{ 0x01,	0, 0x2e65 },
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3836
		{ 0x01,	0, 0x6e65 }
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3837
	};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3838
	u8 cfg1;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3839
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3840
	rtl_csi_access_enable(ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3841
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3842
	RTL_W8(DBG_REG, FIX_NAK_1);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3843
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3844
	rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3845
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3846
	RTL_W8(Config1,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3847
	       LEDS1 | LEDS0 | Speed_down | MEMMAP | IOMAP | VPD | PMEnable);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3848
	RTL_W8(Config3, RTL_R8(Config3) & ~Beacon_en);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3849
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3850
	cfg1 = RTL_R8(Config1);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3851
	if ((cfg1 & LEDS0) && (cfg1 & LEDS1))
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3852
		RTL_W8(Config1, cfg1 & ~LEDS0);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3853
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3854
	RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R810X_CPCMD_QUIRK_MASK);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3855
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3856
	rtl_ephy_init(ioaddr, e_info_8102e_1, ARRAY_SIZE(e_info_8102e_1));
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3857
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3858
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3859
static void rtl_hw_start_8102e_2(void __iomem *ioaddr, struct pci_dev *pdev)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3860
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3861
	rtl_csi_access_enable(ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3862
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3863
	rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3864
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3865
	RTL_W8(Config1, MEMMAP | IOMAP | VPD | PMEnable);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3866
	RTL_W8(Config3, RTL_R8(Config3) & ~Beacon_en);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3867
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3868
	RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R810X_CPCMD_QUIRK_MASK);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3869
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3870
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3871
static void rtl_hw_start_8102e_3(void __iomem *ioaddr, struct pci_dev *pdev)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3872
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3873
	rtl_hw_start_8102e_2(ioaddr, pdev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3874
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3875
	rtl_ephy_write(ioaddr, 0x03, 0xc2f9);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3876
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3877
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3878
static void rtl_hw_start_8101(struct net_device *dev)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3879
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3880
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3881
	void __iomem *ioaddr = tp->mmio_addr;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3882
	struct pci_dev *pdev = tp->pci_dev;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3883
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3884
	if ((tp->mac_version == RTL_GIGA_MAC_VER_13) ||
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3885
	    (tp->mac_version == RTL_GIGA_MAC_VER_16)) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3886
		int cap = tp->pcie_cap;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3887
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3888
		if (cap) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3889
			pci_write_config_word(pdev, cap + PCI_EXP_DEVCTL,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3890
					      PCI_EXP_DEVCTL_NOSNOOP_EN);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3891
		}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3892
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3893
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3894
	switch (tp->mac_version) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3895
	case RTL_GIGA_MAC_VER_07:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3896
		rtl_hw_start_8102e_1(ioaddr, pdev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3897
		break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3898
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3899
	case RTL_GIGA_MAC_VER_08:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3900
		rtl_hw_start_8102e_3(ioaddr, pdev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3901
		break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3902
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3903
	case RTL_GIGA_MAC_VER_09:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3904
		rtl_hw_start_8102e_2(ioaddr, pdev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3905
		break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3906
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3907
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3908
	RTL_W8(Cfg9346, Cfg9346_Unlock);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3909
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3910
	RTL_W8(EarlyTxThres, EarlyTxThld);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3911
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3912
	rtl_set_rx_max_size(ioaddr, tp->rx_buf_sz);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3913
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3914
	tp->cp_cmd |= rtl_rw_cpluscmd(ioaddr) | PCIMulRW;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3915
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3916
	RTL_W16(CPlusCmd, tp->cp_cmd);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3917
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3918
	RTL_W16(IntrMitigate, 0x0000);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3919
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3920
	rtl_set_rx_tx_desc_registers(tp, ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3921
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3922
	RTL_W8(ChipCmd, CmdTxEnb | CmdRxEnb);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3923
	rtl_set_rx_tx_config_registers(tp);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3924
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3925
	RTL_W8(Cfg9346, Cfg9346_Lock);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3926
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3927
	RTL_R8(IntrMask);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3928
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3929
	rtl_set_rx_mode(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3930
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3931
	RTL_W8(ChipCmd, CmdTxEnb | CmdRxEnb);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3932
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3933
	RTL_W16(MultiIntr, RTL_R16(MultiIntr) & 0xf000);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3934
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3935
	RTL_W16(IntrMask, tp->intr_event);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3936
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3937
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3938
static int rtl8169_change_mtu(struct net_device *dev, int new_mtu)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3939
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3940
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3941
	int ret = 0;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3942
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3943
	if (new_mtu < ETH_ZLEN || new_mtu > SafeMtu)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3944
		return -EINVAL;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3945
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3946
	dev->mtu = new_mtu;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3947
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3948
	if (!netif_running(dev))
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3949
		goto out;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3950
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3951
	rtl8169_down(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3952
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3953
	rtl8169_set_rxbufsize(tp, dev->mtu);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3954
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3955
	ret = rtl8169_init_ring(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3956
	if (ret < 0)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3957
		goto out;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3958
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3959
	napi_enable(&tp->napi);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3960
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3961
	rtl_hw_start(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3962
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3963
	rtl8169_request_timer(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3964
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3965
out:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3966
	return ret;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3967
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3968
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3969
static inline void rtl8169_make_unusable_by_asic(struct RxDesc *desc)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3970
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3971
	desc->addr = cpu_to_le64(0x0badbadbadbadbadull);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3972
	desc->opts1 &= ~cpu_to_le32(DescOwn | RsvdMask);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3973
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3974
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3975
static void rtl8169_free_rx_skb(struct rtl8169_private *tp,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3976
				struct sk_buff **sk_buff, struct RxDesc *desc)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3977
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3978
	struct pci_dev *pdev = tp->pci_dev;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3979
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3980
	dma_unmap_single(&pdev->dev, le64_to_cpu(desc->addr), tp->rx_buf_sz,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3981
			 PCI_DMA_FROMDEVICE);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3982
	dev_kfree_skb(*sk_buff);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3983
	*sk_buff = NULL;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3984
	rtl8169_make_unusable_by_asic(desc);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3985
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3986
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3987
static inline void rtl8169_mark_to_asic(struct RxDesc *desc, u32 rx_buf_sz)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3988
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3989
	u32 eor = le32_to_cpu(desc->opts1) & RingEnd;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3990
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3991
	desc->opts1 = cpu_to_le32(DescOwn | eor | rx_buf_sz);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3992
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3993
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3994
static inline void rtl8169_map_to_asic(struct RxDesc *desc, dma_addr_t mapping,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3995
				       u32 rx_buf_sz)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3996
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3997
	desc->addr = cpu_to_le64(mapping);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3998
	wmb();
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3999
	rtl8169_mark_to_asic(desc, rx_buf_sz);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4000
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4001
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4002
static struct sk_buff *rtl8169_alloc_rx_skb(struct pci_dev *pdev,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4003
					    struct net_device *dev,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4004
					    struct RxDesc *desc, int rx_buf_sz,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4005
					    unsigned int align, gfp_t gfp)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4006
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4007
	struct sk_buff *skb;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4008
	dma_addr_t mapping;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4009
	unsigned int pad;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4010
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4011
	pad = align ? align : NET_IP_ALIGN;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4012
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4013
	skb = __netdev_alloc_skb(dev, rx_buf_sz + pad, gfp);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4014
	if (!skb)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4015
		goto err_out;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4016
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4017
	skb_reserve(skb, align ? ((pad - 1) & (unsigned long)skb->data) : pad);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4018
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4019
	mapping = dma_map_single(&pdev->dev, skb->data, rx_buf_sz,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4020
				 PCI_DMA_FROMDEVICE);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4021
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4022
	rtl8169_map_to_asic(desc, mapping, rx_buf_sz);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4023
out:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4024
	return skb;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4025
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4026
err_out:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4027
	rtl8169_make_unusable_by_asic(desc);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4028
	goto out;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4029
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4030
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4031
static void rtl8169_rx_clear(struct rtl8169_private *tp)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4032
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4033
	unsigned int i;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4034
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4035
	for (i = 0; i < NUM_RX_DESC; i++) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4036
		if (tp->Rx_skbuff[i]) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4037
			rtl8169_free_rx_skb(tp, tp->Rx_skbuff + i,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4038
					    tp->RxDescArray + i);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4039
		}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4040
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4041
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4042
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4043
static u32 rtl8169_rx_fill(struct rtl8169_private *tp, struct net_device *dev,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4044
			   u32 start, u32 end, gfp_t gfp)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4045
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4046
	u32 cur;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4047
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4048
	for (cur = start; end - cur != 0; cur++) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4049
		struct sk_buff *skb;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4050
		unsigned int i = cur % NUM_RX_DESC;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4051
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4052
		WARN_ON((s32)(end - cur) < 0);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4053
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4054
		if (tp->Rx_skbuff[i])
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4055
			continue;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4056
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4057
		skb = rtl8169_alloc_rx_skb(tp->pci_dev, dev,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4058
					   tp->RxDescArray + i,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4059
					   tp->rx_buf_sz, tp->align, gfp);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4060
		if (!skb)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4061
			break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4062
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4063
		tp->Rx_skbuff[i] = skb;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4064
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4065
	return cur - start;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4066
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4067
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4068
static inline void rtl8169_mark_as_last_descriptor(struct RxDesc *desc)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4069
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4070
	desc->opts1 |= cpu_to_le32(RingEnd);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4071
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4072
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4073
static void rtl8169_init_ring_indexes(struct rtl8169_private *tp)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4074
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4075
	tp->dirty_tx = tp->dirty_rx = tp->cur_tx = tp->cur_rx = 0;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4076
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4077
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4078
static int rtl8169_init_ring(struct net_device *dev)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4079
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4080
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4081
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4082
	rtl8169_init_ring_indexes(tp);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4083
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4084
	memset(tp->tx_skb, 0x0, NUM_TX_DESC * sizeof(struct ring_info));
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4085
	memset(tp->Rx_skbuff, 0x0, NUM_RX_DESC * sizeof(struct sk_buff *));
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4086
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4087
	if (rtl8169_rx_fill(tp, dev, 0, NUM_RX_DESC, GFP_KERNEL) != NUM_RX_DESC)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4088
		goto err_out;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4089
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4090
	rtl8169_mark_as_last_descriptor(tp->RxDescArray + NUM_RX_DESC - 1);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4091
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4092
	return 0;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4093
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4094
err_out:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4095
	rtl8169_rx_clear(tp);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4096
	return -ENOMEM;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4097
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4098
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4099
static void rtl8169_unmap_tx_skb(struct pci_dev *pdev, struct ring_info *tx_skb,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4100
				 struct TxDesc *desc)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4101
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4102
	unsigned int len = tx_skb->len;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4103
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4104
	dma_unmap_single(&pdev->dev, le64_to_cpu(desc->addr), len,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4105
			 PCI_DMA_TODEVICE);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4106
	desc->opts1 = 0x00;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4107
	desc->opts2 = 0x00;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4108
	desc->addr = 0x00;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4109
	tx_skb->len = 0;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4110
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4111
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4112
static void rtl8169_tx_clear(struct rtl8169_private *tp)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4113
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4114
	unsigned int i;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4115
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4116
	for (i = tp->dirty_tx; i < tp->dirty_tx + NUM_TX_DESC; i++) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4117
		unsigned int entry = i % NUM_TX_DESC;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4118
		struct ring_info *tx_skb = tp->tx_skb + entry;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4119
		unsigned int len = tx_skb->len;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4120
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4121
		if (len) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4122
			struct sk_buff *skb = tx_skb->skb;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4123
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4124
			rtl8169_unmap_tx_skb(tp->pci_dev, tx_skb,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4125
					     tp->TxDescArray + entry);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4126
			if (skb) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4127
				dev_kfree_skb(skb);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4128
				tx_skb->skb = NULL;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4129
			}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4130
			tp->dev->stats.tx_dropped++;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4131
		}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4132
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4133
	tp->cur_tx = tp->dirty_tx = 0;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4134
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4135
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4136
static void rtl8169_schedule_work(struct net_device *dev, work_func_t task)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4137
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4138
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4139
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4140
	PREPARE_DELAYED_WORK(&tp->task, task);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4141
	schedule_delayed_work(&tp->task, 4);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4142
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4143
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4144
static void rtl8169_wait_for_quiescence(struct net_device *dev)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4145
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4146
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4147
	void __iomem *ioaddr = tp->mmio_addr;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4148
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4149
	synchronize_irq(dev->irq);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4150
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4151
	/* Wait for any pending NAPI task to complete */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4152
	napi_disable(&tp->napi);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4153
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4154
	rtl8169_irq_mask_and_ack(ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4155
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4156
	tp->intr_mask = 0xffff;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4157
	RTL_W16(IntrMask, tp->intr_event);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4158
	napi_enable(&tp->napi);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4159
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4160
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4161
static void rtl8169_reinit_task(struct work_struct *work)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4162
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4163
	struct rtl8169_private *tp =
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4164
		container_of(work, struct rtl8169_private, task.work);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4165
	struct net_device *dev = tp->dev;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4166
	int ret;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4167
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4168
	rtnl_lock();
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4169
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4170
	if (!netif_running(dev))
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4171
		goto out_unlock;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4172
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4173
	rtl8169_wait_for_quiescence(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4174
	rtl8169_close(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4175
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4176
	ret = rtl8169_open(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4177
	if (unlikely(ret < 0)) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4178
		if (net_ratelimit())
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4179
			netif_err(tp, drv, dev,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4180
				  "reinit failure (status = %d). Rescheduling\n",
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4181
				  ret);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4182
		rtl8169_schedule_work(dev, rtl8169_reinit_task);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4183
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4184
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4185
out_unlock:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4186
	rtnl_unlock();
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4187
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4188
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4189
static void rtl8169_reset_task(struct work_struct *work)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4190
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4191
	struct rtl8169_private *tp =
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4192
		container_of(work, struct rtl8169_private, task.work);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4193
	struct net_device *dev = tp->dev;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4194
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4195
	rtnl_lock();
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4196
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4197
	if (!netif_running(dev))
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4198
		goto out_unlock;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4199
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4200
	rtl8169_wait_for_quiescence(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4201
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4202
	rtl8169_rx_interrupt(dev, tp, tp->mmio_addr, ~(u32)0);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4203
	rtl8169_tx_clear(tp);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4204
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4205
	if (tp->dirty_rx == tp->cur_rx) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4206
		rtl8169_init_ring_indexes(tp);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4207
		rtl_hw_start(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4208
		netif_wake_queue(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4209
		rtl8169_check_link_status(dev, tp, tp->mmio_addr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4210
	} else {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4211
		if (net_ratelimit())
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4212
			netif_emerg(tp, intr, dev, "Rx buffers shortage\n");
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4213
		rtl8169_schedule_work(dev, rtl8169_reset_task);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4214
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4215
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4216
out_unlock:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4217
	rtnl_unlock();
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4218
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4219
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4220
static void rtl8169_tx_timeout(struct net_device *dev)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4221
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4222
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4223
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4224
	rtl8169_hw_reset(tp->mmio_addr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4225
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4226
	/* Let's wait a bit while any (async) irq lands on */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4227
	rtl8169_schedule_work(dev, rtl8169_reset_task);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4228
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4229
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4230
static int rtl8169_xmit_frags(struct rtl8169_private *tp, struct sk_buff *skb,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4231
			      u32 opts1)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4232
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4233
	struct skb_shared_info *info = skb_shinfo(skb);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4234
	unsigned int cur_frag, entry;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4235
	struct TxDesc * uninitialized_var(txd);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4236
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4237
	entry = tp->cur_tx;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4238
	for (cur_frag = 0; cur_frag < info->nr_frags; cur_frag++) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4239
		skb_frag_t *frag = info->frags + cur_frag;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4240
		dma_addr_t mapping;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4241
		u32 status, len;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4242
		void *addr;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4243
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4244
		entry = (entry + 1) % NUM_TX_DESC;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4245
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4246
		txd = tp->TxDescArray + entry;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4247
		len = frag->size;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4248
		addr = ((void *) page_address(frag->page)) + frag->page_offset;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4249
		mapping = dma_map_single(&tp->pci_dev->dev, addr, len,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4250
					 PCI_DMA_TODEVICE);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4251
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4252
		/* anti gcc 2.95.3 bugware (sic) */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4253
		status = opts1 | len | (RingEnd * !((entry + 1) % NUM_TX_DESC));
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4254
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4255
		txd->opts1 = cpu_to_le32(status);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4256
		txd->addr = cpu_to_le64(mapping);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4257
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4258
		tp->tx_skb[entry].len = len;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4259
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4260
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4261
	if (cur_frag) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4262
		tp->tx_skb[entry].skb = skb;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4263
		txd->opts1 |= cpu_to_le32(LastFrag);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4264
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4265
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4266
	return cur_frag;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4267
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4268
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4269
static inline u32 rtl8169_tso_csum(struct sk_buff *skb, struct net_device *dev)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4270
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4271
	if (dev->features & NETIF_F_TSO) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4272
		u32 mss = skb_shinfo(skb)->gso_size;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4273
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4274
		if (mss)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4275
			return LargeSend | ((mss & MSSMask) << MSSShift);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4276
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4277
	if (skb->ip_summed == CHECKSUM_PARTIAL) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4278
		const struct iphdr *ip = ip_hdr(skb);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4279
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4280
		if (ip->protocol == IPPROTO_TCP)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4281
			return IPCS | TCPCS;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4282
		else if (ip->protocol == IPPROTO_UDP)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4283
			return IPCS | UDPCS;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4284
		WARN_ON(1);	/* we need a WARN() */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4285
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4286
	return 0;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4287
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4288
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4289
static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4290
				      struct net_device *dev)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4291
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4292
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4293
	unsigned int frags, entry = tp->cur_tx % NUM_TX_DESC;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4294
	struct TxDesc *txd = tp->TxDescArray + entry;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4295
	void __iomem *ioaddr = tp->mmio_addr;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4296
	dma_addr_t mapping;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4297
	u32 status, len;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4298
	u32 opts1;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4299
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4300
	if (unlikely(TX_BUFFS_AVAIL(tp) < skb_shinfo(skb)->nr_frags)) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4301
		netif_err(tp, drv, dev, "BUG! Tx Ring full when queue awake!\n");
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4302
		goto err_stop;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4303
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4304
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4305
	if (unlikely(le32_to_cpu(txd->opts1) & DescOwn))
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4306
		goto err_stop;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4307
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4308
	opts1 = DescOwn | rtl8169_tso_csum(skb, dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4309
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4310
	frags = rtl8169_xmit_frags(tp, skb, opts1);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4311
	if (frags) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4312
		len = skb_headlen(skb);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4313
		opts1 |= FirstFrag;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4314
	} else {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4315
		len = skb->len;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4316
		opts1 |= FirstFrag | LastFrag;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4317
		tp->tx_skb[entry].skb = skb;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4318
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4319
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4320
	mapping = dma_map_single(&tp->pci_dev->dev, skb->data, len,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4321
				 PCI_DMA_TODEVICE);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4322
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4323
	tp->tx_skb[entry].len = len;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4324
	txd->addr = cpu_to_le64(mapping);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4325
	txd->opts2 = cpu_to_le32(rtl8169_tx_vlan_tag(tp, skb));
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4326
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4327
	wmb();
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4328
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4329
	/* anti gcc 2.95.3 bugware (sic) */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4330
	status = opts1 | len | (RingEnd * !((entry + 1) % NUM_TX_DESC));
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4331
	txd->opts1 = cpu_to_le32(status);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4332
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4333
	tp->cur_tx += frags + 1;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4334
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4335
	wmb();
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4336
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4337
	RTL_W8(TxPoll, NPQ);	/* set polling bit */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4338
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4339
	if (TX_BUFFS_AVAIL(tp) < MAX_SKB_FRAGS) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4340
		netif_stop_queue(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4341
		smp_rmb();
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4342
		if (TX_BUFFS_AVAIL(tp) >= MAX_SKB_FRAGS)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4343
			netif_wake_queue(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4344
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4345
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4346
	return NETDEV_TX_OK;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4347
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4348
err_stop:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4349
	netif_stop_queue(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4350
	dev->stats.tx_dropped++;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4351
	return NETDEV_TX_BUSY;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4352
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4353
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4354
static void rtl8169_pcierr_interrupt(struct net_device *dev)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4355
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4356
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4357
	struct pci_dev *pdev = tp->pci_dev;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4358
	void __iomem *ioaddr = tp->mmio_addr;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4359
	u16 pci_status, pci_cmd;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4360
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4361
	pci_read_config_word(pdev, PCI_COMMAND, &pci_cmd);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4362
	pci_read_config_word(pdev, PCI_STATUS, &pci_status);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4363
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4364
	netif_err(tp, intr, dev, "PCI error (cmd = 0x%04x, status = 0x%04x)\n",
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4365
		  pci_cmd, pci_status);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4366
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4367
	/*
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4368
	 * The recovery sequence below admits a very elaborated explanation:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4369
	 * - it seems to work;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4370
	 * - I did not see what else could be done;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4371
	 * - it makes iop3xx happy.
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4372
	 *
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4373
	 * Feel free to adjust to your needs.
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4374
	 */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4375
	if (pdev->broken_parity_status)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4376
		pci_cmd &= ~PCI_COMMAND_PARITY;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4377
	else
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4378
		pci_cmd |= PCI_COMMAND_SERR | PCI_COMMAND_PARITY;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4379
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4380
	pci_write_config_word(pdev, PCI_COMMAND, pci_cmd);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4381
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4382
	pci_write_config_word(pdev, PCI_STATUS,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4383
		pci_status & (PCI_STATUS_DETECTED_PARITY |
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4384
		PCI_STATUS_SIG_SYSTEM_ERROR | PCI_STATUS_REC_MASTER_ABORT |
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4385
		PCI_STATUS_REC_TARGET_ABORT | PCI_STATUS_SIG_TARGET_ABORT));
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4386
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4387
	/* The infamous DAC f*ckup only happens at boot time */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4388
	if ((tp->cp_cmd & PCIDAC) && !tp->dirty_rx && !tp->cur_rx) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4389
		netif_info(tp, intr, dev, "disabling PCI DAC\n");
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4390
		tp->cp_cmd &= ~PCIDAC;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4391
		RTL_W16(CPlusCmd, tp->cp_cmd);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4392
		dev->features &= ~NETIF_F_HIGHDMA;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4393
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4394
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4395
	rtl8169_hw_reset(ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4396
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4397
	rtl8169_schedule_work(dev, rtl8169_reinit_task);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4398
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4399
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4400
static void rtl8169_tx_interrupt(struct net_device *dev,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4401
				 struct rtl8169_private *tp,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4402
				 void __iomem *ioaddr)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4403
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4404
	unsigned int dirty_tx, tx_left;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4405
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4406
	dirty_tx = tp->dirty_tx;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4407
	smp_rmb();
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4408
	tx_left = tp->cur_tx - dirty_tx;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4409
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4410
	while (tx_left > 0) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4411
		unsigned int entry = dirty_tx % NUM_TX_DESC;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4412
		struct ring_info *tx_skb = tp->tx_skb + entry;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4413
		u32 len = tx_skb->len;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4414
		u32 status;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4415
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4416
		rmb();
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4417
		status = le32_to_cpu(tp->TxDescArray[entry].opts1);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4418
		if (status & DescOwn)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4419
			break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4420
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4421
		dev->stats.tx_bytes += len;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4422
		dev->stats.tx_packets++;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4423
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4424
		rtl8169_unmap_tx_skb(tp->pci_dev, tx_skb, tp->TxDescArray + entry);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4425
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4426
		if (status & LastFrag) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4427
			dev_kfree_skb(tx_skb->skb);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4428
			tx_skb->skb = NULL;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4429
		}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4430
		dirty_tx++;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4431
		tx_left--;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4432
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4433
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4434
	if (tp->dirty_tx != dirty_tx) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4435
		tp->dirty_tx = dirty_tx;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4436
		smp_wmb();
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4437
		if (netif_queue_stopped(dev) &&
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4438
		    (TX_BUFFS_AVAIL(tp) >= MAX_SKB_FRAGS)) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4439
			netif_wake_queue(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4440
		}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4441
		/*
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4442
		 * 8168 hack: TxPoll requests are lost when the Tx packets are
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4443
		 * too close. Let's kick an extra TxPoll request when a burst
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4444
		 * of start_xmit activity is detected (if it is not detected,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4445
		 * it is slow enough). -- FR
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4446
		 */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4447
		smp_rmb();
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4448
		if (tp->cur_tx != dirty_tx)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4449
			RTL_W8(TxPoll, NPQ);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4450
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4451
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4452
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4453
static inline int rtl8169_fragmented_frame(u32 status)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4454
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4455
	return (status & (FirstFrag | LastFrag)) != (FirstFrag | LastFrag);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4456
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4457
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4458
static inline void rtl8169_rx_csum(struct sk_buff *skb, struct RxDesc *desc)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4459
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4460
	u32 opts1 = le32_to_cpu(desc->opts1);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4461
	u32 status = opts1 & RxProtoMask;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4462
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4463
	if (((status == RxProtoTCP) && !(opts1 & TCPFail)) ||
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4464
	    ((status == RxProtoUDP) && !(opts1 & UDPFail)) ||
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4465
	    ((status == RxProtoIP) && !(opts1 & IPFail)))
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4466
		skb->ip_summed = CHECKSUM_UNNECESSARY;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4467
	else
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4468
		skb->ip_summed = CHECKSUM_NONE;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4469
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4470
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4471
static inline bool rtl8169_try_rx_copy(struct sk_buff **sk_buff,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4472
				       struct rtl8169_private *tp, int pkt_size,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4473
				       dma_addr_t addr)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4474
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4475
	struct sk_buff *skb;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4476
	bool done = false;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4477
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4478
	if (pkt_size >= rx_copybreak)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4479
		goto out;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4480
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4481
	skb = netdev_alloc_skb_ip_align(tp->dev, pkt_size);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4482
	if (!skb)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4483
		goto out;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4484
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4485
	dma_sync_single_for_cpu(&tp->pci_dev->dev, addr, pkt_size,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4486
				PCI_DMA_FROMDEVICE);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4487
	skb_copy_from_linear_data(*sk_buff, skb->data, pkt_size);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4488
	*sk_buff = skb;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4489
	done = true;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4490
out:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4491
	return done;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4492
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4493
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4494
/*
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4495
 * Warning : rtl8169_rx_interrupt() might be called :
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4496
 * 1) from NAPI (softirq) context
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4497
 *	(polling = 1 : we should call netif_receive_skb())
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4498
 * 2) from process context (rtl8169_reset_task())
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4499
 *	(polling = 0 : we must call netif_rx() instead)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4500
 */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4501
static int rtl8169_rx_interrupt(struct net_device *dev,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4502
				struct rtl8169_private *tp,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4503
				void __iomem *ioaddr, u32 budget)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4504
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4505
	unsigned int cur_rx, rx_left;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4506
	unsigned int delta, count;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4507
	int polling = (budget != ~(u32)0) ? 1 : 0;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4508
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4509
	cur_rx = tp->cur_rx;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4510
	rx_left = NUM_RX_DESC + tp->dirty_rx - cur_rx;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4511
	rx_left = min(rx_left, budget);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4512
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4513
	for (; rx_left > 0; rx_left--, cur_rx++) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4514
		unsigned int entry = cur_rx % NUM_RX_DESC;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4515
		struct RxDesc *desc = tp->RxDescArray + entry;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4516
		u32 status;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4517
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4518
		rmb();
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4519
		status = le32_to_cpu(desc->opts1);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4520
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4521
		if (status & DescOwn)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4522
			break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4523
		if (unlikely(status & RxRES)) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4524
			netif_info(tp, rx_err, dev, "Rx ERROR. status = %08x\n",
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4525
				   status);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4526
			dev->stats.rx_errors++;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4527
			if (status & (RxRWT | RxRUNT))
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4528
				dev->stats.rx_length_errors++;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4529
			if (status & RxCRC)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4530
				dev->stats.rx_crc_errors++;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4531
			if (status & RxFOVF) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4532
				rtl8169_schedule_work(dev, rtl8169_reset_task);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4533
				dev->stats.rx_fifo_errors++;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4534
			}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4535
			rtl8169_mark_to_asic(desc, tp->rx_buf_sz);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4536
		} else {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4537
			struct sk_buff *skb = tp->Rx_skbuff[entry];
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4538
			dma_addr_t addr = le64_to_cpu(desc->addr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4539
			int pkt_size = (status & 0x00001FFF) - 4;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4540
			struct pci_dev *pdev = tp->pci_dev;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4541
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4542
			/*
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4543
			 * The driver does not support incoming fragmented
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4544
			 * frames. They are seen as a symptom of over-mtu
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4545
			 * sized frames.
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4546
			 */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4547
			if (unlikely(rtl8169_fragmented_frame(status))) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4548
				dev->stats.rx_dropped++;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4549
				dev->stats.rx_length_errors++;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4550
				rtl8169_mark_to_asic(desc, tp->rx_buf_sz);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4551
				continue;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4552
			}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4553
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4554
			rtl8169_rx_csum(skb, desc);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4555
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4556
			if (rtl8169_try_rx_copy(&skb, tp, pkt_size, addr)) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4557
				dma_sync_single_for_device(&pdev->dev, addr,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4558
					pkt_size, PCI_DMA_FROMDEVICE);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4559
				rtl8169_mark_to_asic(desc, tp->rx_buf_sz);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4560
			} else {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4561
				dma_unmap_single(&pdev->dev, addr, tp->rx_buf_sz,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4562
						 PCI_DMA_FROMDEVICE);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4563
				tp->Rx_skbuff[entry] = NULL;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4564
			}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4565
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4566
			skb_put(skb, pkt_size);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4567
			skb->protocol = eth_type_trans(skb, dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4568
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4569
			if (rtl8169_rx_vlan_skb(tp, desc, skb, polling) < 0) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4570
				if (likely(polling))
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4571
					netif_receive_skb(skb);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4572
				else
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4573
					netif_rx(skb);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4574
			}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4575
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4576
			dev->stats.rx_bytes += pkt_size;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4577
			dev->stats.rx_packets++;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4578
		}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4579
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4580
		/* Work around for AMD plateform. */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4581
		if ((desc->opts2 & cpu_to_le32(0xfffe000)) &&
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4582
		    (tp->mac_version == RTL_GIGA_MAC_VER_05)) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4583
			desc->opts2 = 0;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4584
			cur_rx++;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4585
		}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4586
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4587
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4588
	count = cur_rx - tp->cur_rx;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4589
	tp->cur_rx = cur_rx;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4590
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4591
	delta = rtl8169_rx_fill(tp, dev, tp->dirty_rx, tp->cur_rx, GFP_ATOMIC);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4592
	if (!delta && count)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4593
		netif_info(tp, intr, dev, "no Rx buffer allocated\n");
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4594
	tp->dirty_rx += delta;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4595
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4596
	/*
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4597
	 * FIXME: until there is periodic timer to try and refill the ring,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4598
	 * a temporary shortage may definitely kill the Rx process.
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4599
	 * - disable the asic to try and avoid an overflow and kick it again
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4600
	 *   after refill ?
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4601
	 * - how do others driver handle this condition (Uh oh...).
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4602
	 */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4603
	if (tp->dirty_rx + NUM_RX_DESC == tp->cur_rx)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4604
		netif_emerg(tp, intr, dev, "Rx buffers exhausted\n");
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4605
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4606
	return count;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4607
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4608
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4609
static irqreturn_t rtl8169_interrupt(int irq, void *dev_instance)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4610
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4611
	struct net_device *dev = dev_instance;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4612
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4613
	void __iomem *ioaddr = tp->mmio_addr;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4614
	int handled = 0;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4615
	int status;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4616
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4617
	/* loop handling interrupts until we have no new ones or
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4618
	 * we hit a invalid/hotplug case.
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4619
	 */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4620
	status = RTL_R16(IntrStatus);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4621
	while (status && status != 0xffff) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4622
		handled = 1;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4623
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4624
		/* Handle all of the error cases first. These will reset
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4625
		 * the chip, so just exit the loop.
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4626
		 */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4627
		if (unlikely(!netif_running(dev))) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4628
			rtl8169_asic_down(ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4629
			break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4630
		}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4631
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4632
		/* Work around for rx fifo overflow */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4633
		if (unlikely(status & RxFIFOOver)) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4634
			netif_stop_queue(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4635
			rtl8169_tx_timeout(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4636
			break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4637
		}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4638
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4639
		if (unlikely(status & SYSErr)) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4640
			rtl8169_pcierr_interrupt(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4641
			break;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4642
		}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4643
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4644
		if (status & LinkChg)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4645
			rtl8169_check_link_status(dev, tp, ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4646
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4647
		/* We need to see the lastest version of tp->intr_mask to
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4648
		 * avoid ignoring an MSI interrupt and having to wait for
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4649
		 * another event which may never come.
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4650
		 */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4651
		smp_rmb();
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4652
		if (status & tp->intr_mask & tp->napi_event) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4653
			RTL_W16(IntrMask, tp->intr_event & ~tp->napi_event);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4654
			tp->intr_mask = ~tp->napi_event;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4655
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4656
			if (likely(napi_schedule_prep(&tp->napi)))
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4657
				__napi_schedule(&tp->napi);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4658
			else
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4659
				netif_info(tp, intr, dev,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4660
					   "interrupt %04x in poll\n", status);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4661
		}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4662
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4663
		/* We only get a new MSI interrupt when all active irq
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4664
		 * sources on the chip have been acknowledged. So, ack
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4665
		 * everything we've seen and check if new sources have become
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4666
		 * active to avoid blocking all interrupts from the chip.
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4667
		 */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4668
		RTL_W16(IntrStatus,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4669
			(status & RxFIFOOver) ? (status | RxOverflow) : status);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4670
		status = RTL_R16(IntrStatus);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4671
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4672
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4673
	return IRQ_RETVAL(handled);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4674
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4675
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4676
static int rtl8169_poll(struct napi_struct *napi, int budget)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4677
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4678
	struct rtl8169_private *tp = container_of(napi, struct rtl8169_private, napi);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4679
	struct net_device *dev = tp->dev;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4680
	void __iomem *ioaddr = tp->mmio_addr;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4681
	int work_done;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4682
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4683
	work_done = rtl8169_rx_interrupt(dev, tp, ioaddr, (u32) budget);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4684
	rtl8169_tx_interrupt(dev, tp, ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4685
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4686
	if (work_done < budget) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4687
		napi_complete(napi);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4688
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4689
		/* We need for force the visibility of tp->intr_mask
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4690
		 * for other CPUs, as we can loose an MSI interrupt
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4691
		 * and potentially wait for a retransmit timeout if we don't.
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4692
		 * The posted write to IntrMask is safe, as it will
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4693
		 * eventually make it to the chip and we won't loose anything
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4694
		 * until it does.
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4695
		 */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4696
		tp->intr_mask = 0xffff;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4697
		wmb();
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4698
		RTL_W16(IntrMask, tp->intr_event);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4699
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4700
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4701
	return work_done;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4702
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4703
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4704
static void rtl8169_rx_missed(struct net_device *dev, void __iomem *ioaddr)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4705
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4706
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4707
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4708
	if (tp->mac_version > RTL_GIGA_MAC_VER_06)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4709
		return;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4710
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4711
	dev->stats.rx_missed_errors += (RTL_R32(RxMissed) & 0xffffff);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4712
	RTL_W32(RxMissed, 0);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4713
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4714
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4715
static void rtl8169_down(struct net_device *dev)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4716
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4717
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4718
	void __iomem *ioaddr = tp->mmio_addr;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4719
	unsigned int intrmask;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4720
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4721
	rtl8169_delete_timer(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4722
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4723
	netif_stop_queue(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4724
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4725
	napi_disable(&tp->napi);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4726
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4727
core_down:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4728
	spin_lock_irq(&tp->lock);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4729
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4730
	rtl8169_asic_down(ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4731
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4732
	rtl8169_rx_missed(dev, ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4733
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4734
	spin_unlock_irq(&tp->lock);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4735
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4736
	synchronize_irq(dev->irq);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4737
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4738
	/* Give a racing hard_start_xmit a few cycles to complete. */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4739
	synchronize_sched();  /* FIXME: should this be synchronize_irq()? */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4740
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4741
	/*
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4742
	 * And now for the 50k$ question: are IRQ disabled or not ?
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4743
	 *
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4744
	 * Two paths lead here:
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4745
	 * 1) dev->close
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4746
	 *    -> netif_running() is available to sync the current code and the
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4747
	 *       IRQ handler. See rtl8169_interrupt for details.
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4748
	 * 2) dev->change_mtu
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4749
	 *    -> rtl8169_poll can not be issued again and re-enable the
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4750
	 *       interruptions. Let's simply issue the IRQ down sequence again.
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4751
	 *
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4752
	 * No loop if hotpluged or major error (0xffff).
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4753
	 */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4754
	intrmask = RTL_R16(IntrMask);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4755
	if (intrmask && (intrmask != 0xffff))
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4756
		goto core_down;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4757
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4758
	rtl8169_tx_clear(tp);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4759
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4760
	rtl8169_rx_clear(tp);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4761
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4762
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4763
static int rtl8169_close(struct net_device *dev)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4764
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4765
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4766
	struct pci_dev *pdev = tp->pci_dev;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4767
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4768
	pm_runtime_get_sync(&pdev->dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4769
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4770
	/* update counters before going down */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4771
	rtl8169_update_counters(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4772
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4773
	rtl8169_down(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4774
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4775
	free_irq(dev->irq, dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4776
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4777
	dma_free_coherent(&pdev->dev, R8169_RX_RING_BYTES, tp->RxDescArray,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4778
			  tp->RxPhyAddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4779
	dma_free_coherent(&pdev->dev, R8169_TX_RING_BYTES, tp->TxDescArray,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4780
			  tp->TxPhyAddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4781
	tp->TxDescArray = NULL;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4782
	tp->RxDescArray = NULL;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4783
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4784
	pm_runtime_put_sync(&pdev->dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4785
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4786
	return 0;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4787
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4788
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4789
static void rtl_set_rx_mode(struct net_device *dev)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4790
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4791
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4792
	void __iomem *ioaddr = tp->mmio_addr;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4793
	unsigned long flags;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4794
	u32 mc_filter[2];	/* Multicast hash filter */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4795
	int rx_mode;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4796
	u32 tmp = 0;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4797
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4798
	if (dev->flags & IFF_PROMISC) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4799
		/* Unconditionally log net taps. */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4800
		netif_notice(tp, link, dev, "Promiscuous mode enabled\n");
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4801
		rx_mode =
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4802
		    AcceptBroadcast | AcceptMulticast | AcceptMyPhys |
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4803
		    AcceptAllPhys;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4804
		mc_filter[1] = mc_filter[0] = 0xffffffff;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4805
	} else if ((netdev_mc_count(dev) > multicast_filter_limit) ||
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4806
		   (dev->flags & IFF_ALLMULTI)) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4807
		/* Too many to filter perfectly -- accept all multicasts. */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4808
		rx_mode = AcceptBroadcast | AcceptMulticast | AcceptMyPhys;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4809
		mc_filter[1] = mc_filter[0] = 0xffffffff;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4810
	} else {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4811
		struct netdev_hw_addr *ha;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4812
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4813
		rx_mode = AcceptBroadcast | AcceptMyPhys;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4814
		mc_filter[1] = mc_filter[0] = 0;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4815
		netdev_for_each_mc_addr(ha, dev) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4816
			int bit_nr = ether_crc(ETH_ALEN, ha->addr) >> 26;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4817
			mc_filter[bit_nr >> 5] |= 1 << (bit_nr & 31);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4818
			rx_mode |= AcceptMulticast;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4819
		}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4820
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4821
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4822
	spin_lock_irqsave(&tp->lock, flags);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4823
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4824
	tmp = rtl8169_rx_config | rx_mode |
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4825
	      (RTL_R32(RxConfig) & rtl_chip_info[tp->chipset].RxConfigMask);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4826
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4827
	if (tp->mac_version > RTL_GIGA_MAC_VER_06) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4828
		u32 data = mc_filter[0];
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4829
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4830
		mc_filter[0] = swab32(mc_filter[1]);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4831
		mc_filter[1] = swab32(data);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4832
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4833
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4834
	RTL_W32(MAR0 + 4, mc_filter[1]);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4835
	RTL_W32(MAR0 + 0, mc_filter[0]);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4836
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4837
	RTL_W32(RxConfig, tmp);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4838
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4839
	spin_unlock_irqrestore(&tp->lock, flags);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4840
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4841
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4842
/**
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4843
 *  rtl8169_get_stats - Get rtl8169 read/write statistics
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4844
 *  @dev: The Ethernet Device to get statistics for
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4845
 *
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4846
 *  Get TX/RX statistics for rtl8169
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4847
 */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4848
static struct net_device_stats *rtl8169_get_stats(struct net_device *dev)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4849
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4850
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4851
	void __iomem *ioaddr = tp->mmio_addr;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4852
	unsigned long flags;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4853
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4854
	if (netif_running(dev)) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4855
		spin_lock_irqsave(&tp->lock, flags);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4856
		rtl8169_rx_missed(dev, ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4857
		spin_unlock_irqrestore(&tp->lock, flags);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4858
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4859
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4860
	return &dev->stats;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4861
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4862
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4863
static void rtl8169_net_suspend(struct net_device *dev)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4864
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4865
	if (!netif_running(dev))
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4866
		return;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4867
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4868
	netif_device_detach(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4869
	netif_stop_queue(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4870
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4871
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4872
#ifdef CONFIG_PM
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4873
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4874
static int rtl8169_suspend(struct device *device)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4875
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4876
	struct pci_dev *pdev = to_pci_dev(device);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4877
	struct net_device *dev = pci_get_drvdata(pdev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4878
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4879
	rtl8169_net_suspend(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4880
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4881
	return 0;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4882
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4883
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4884
static void __rtl8169_resume(struct net_device *dev)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4885
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4886
	netif_device_attach(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4887
	rtl8169_schedule_work(dev, rtl8169_reset_task);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4888
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4889
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4890
static int rtl8169_resume(struct device *device)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4891
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4892
	struct pci_dev *pdev = to_pci_dev(device);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4893
	struct net_device *dev = pci_get_drvdata(pdev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4894
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4895
	if (netif_running(dev))
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4896
		__rtl8169_resume(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4897
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4898
	return 0;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4899
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4900
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4901
static int rtl8169_runtime_suspend(struct device *device)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4902
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4903
	struct pci_dev *pdev = to_pci_dev(device);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4904
	struct net_device *dev = pci_get_drvdata(pdev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4905
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4906
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4907
	if (!tp->TxDescArray)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4908
		return 0;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4909
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4910
	spin_lock_irq(&tp->lock);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4911
	tp->saved_wolopts = __rtl8169_get_wol(tp);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4912
	__rtl8169_set_wol(tp, WAKE_ANY);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4913
	spin_unlock_irq(&tp->lock);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4914
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4915
	rtl8169_net_suspend(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4916
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4917
	return 0;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4918
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4919
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4920
static int rtl8169_runtime_resume(struct device *device)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4921
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4922
	struct pci_dev *pdev = to_pci_dev(device);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4923
	struct net_device *dev = pci_get_drvdata(pdev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4924
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4925
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4926
	if (!tp->TxDescArray)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4927
		return 0;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4928
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4929
	spin_lock_irq(&tp->lock);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4930
	__rtl8169_set_wol(tp, tp->saved_wolopts);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4931
	tp->saved_wolopts = 0;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4932
	spin_unlock_irq(&tp->lock);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4933
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4934
	__rtl8169_resume(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4935
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4936
	return 0;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4937
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4938
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4939
static int rtl8169_runtime_idle(struct device *device)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4940
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4941
	struct pci_dev *pdev = to_pci_dev(device);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4942
	struct net_device *dev = pci_get_drvdata(pdev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4943
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4944
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4945
	if (!tp->TxDescArray)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4946
		return 0;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4947
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4948
	rtl8169_check_link_status(dev, tp, tp->mmio_addr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4949
	return -EBUSY;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4950
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4951
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4952
static const struct dev_pm_ops rtl8169_pm_ops = {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4953
	.suspend = rtl8169_suspend,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4954
	.resume = rtl8169_resume,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4955
	.freeze = rtl8169_suspend,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4956
	.thaw = rtl8169_resume,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4957
	.poweroff = rtl8169_suspend,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4958
	.restore = rtl8169_resume,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4959
	.runtime_suspend = rtl8169_runtime_suspend,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4960
	.runtime_resume = rtl8169_runtime_resume,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4961
	.runtime_idle = rtl8169_runtime_idle,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4962
};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4963
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4964
#define RTL8169_PM_OPS	(&rtl8169_pm_ops)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4965
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4966
#else /* !CONFIG_PM */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4967
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4968
#define RTL8169_PM_OPS	NULL
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4969
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4970
#endif /* !CONFIG_PM */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4971
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4972
static void rtl_shutdown(struct pci_dev *pdev)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4973
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4974
	struct net_device *dev = pci_get_drvdata(pdev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4975
	struct rtl8169_private *tp = netdev_priv(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4976
	void __iomem *ioaddr = tp->mmio_addr;
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4977
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4978
	rtl8169_net_suspend(dev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4979
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4980
	/* restore original MAC address */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4981
	rtl_rar_set(tp, dev->perm_addr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4982
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4983
	spin_lock_irq(&tp->lock);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4984
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4985
	rtl8169_asic_down(ioaddr);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4986
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4987
	spin_unlock_irq(&tp->lock);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4988
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4989
	if (system_state == SYSTEM_POWER_OFF) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4990
		/* WoL fails with some 8168 when the receiver is disabled. */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4991
		if (tp->features & RTL_FEATURE_WOL) {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4992
			pci_clear_master(pdev);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4993
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4994
			RTL_W8(ChipCmd, CmdRxEnb);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4995
			/* PCI commit */
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4996
			RTL_R8(ChipCmd);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4997
		}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4998
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4999
		pci_wake_from_d3(pdev, true);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5000
		pci_set_power_state(pdev, PCI_D3hot);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5001
	}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5002
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5003
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5004
static struct pci_driver rtl8169_pci_driver = {
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5005
	.name		= MODULENAME,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5006
	.id_table	= rtl8169_pci_tbl,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5007
	.probe		= rtl8169_init_one,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5008
	.remove		= __devexit_p(rtl8169_remove_one),
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5009
	.shutdown	= rtl_shutdown,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5010
	.driver.pm	= RTL8169_PM_OPS,
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5011
};
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5012
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5013
static int __init rtl8169_init_module(void)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5014
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5015
	return pci_register_driver(&rtl8169_pci_driver);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5016
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5017
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5018
static void __exit rtl8169_cleanup_module(void)
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5019
{
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5020
	pci_unregister_driver(&rtl8169_pci_driver);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5021
}
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5022
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5023
module_init(rtl8169_init_module);
7c9c12c61104 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5024
module_exit(rtl8169_cleanup_module);