devices/r8169-2.6.35-orig.c
author Patrick Bruenn <p.bruenn@beckhoff.com>
Tue, 12 Apr 2016 11:17:36 +0200
branchstable-1.5
changeset 2654 b3f6b3e5ef29
parent 2279 416575d0ab37
permissions -rw-r--r--
devices/ccat: revert "limit rx processing to one frame per poll"

revert "limit rx processing to one frame per poll", which caused etherlab
frame timeouts in setups with more than one frame per cycle.
2279
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     1
/*
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     2
 * r8169.c: RealTek 8169/8168/8101 ethernet driver.
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     3
 *
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     4
 * Copyright (c) 2002 ShuChen <shuchen@realtek.com.tw>
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     5
 * Copyright (c) 2003 - 2007 Francois Romieu <romieu@fr.zoreil.com>
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     6
 * Copyright (c) a lot of people too. Please respect their work.
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     7
 *
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     8
 * See MAINTAINERS file for support contact information.
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     9
 */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    10
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    11
#include <linux/module.h>
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    12
#include <linux/moduleparam.h>
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    13
#include <linux/pci.h>
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    14
#include <linux/netdevice.h>
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    15
#include <linux/etherdevice.h>
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    16
#include <linux/delay.h>
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    17
#include <linux/ethtool.h>
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    18
#include <linux/mii.h>
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    19
#include <linux/if_vlan.h>
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    20
#include <linux/crc32.h>
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    21
#include <linux/in.h>
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    22
#include <linux/ip.h>
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    23
#include <linux/tcp.h>
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    24
#include <linux/init.h>
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    25
#include <linux/dma-mapping.h>
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    26
#include <linux/pm_runtime.h>
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    27
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    28
#include <asm/system.h>
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    29
#include <asm/io.h>
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    30
#include <asm/irq.h>
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    31
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    32
#define RTL8169_VERSION "2.3LK-NAPI"
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    33
#define MODULENAME "r8169"
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    34
#define PFX MODULENAME ": "
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    35
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    36
#ifdef RTL8169_DEBUG
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    37
#define assert(expr) \
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    38
	if (!(expr)) {					\
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    39
		printk( "Assertion failed! %s,%s,%s,line=%d\n",	\
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    40
		#expr,__FILE__,__func__,__LINE__);		\
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    41
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    42
#define dprintk(fmt, args...) \
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    43
	do { printk(KERN_DEBUG PFX fmt, ## args); } while (0)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    44
#else
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    45
#define assert(expr) do {} while (0)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    46
#define dprintk(fmt, args...)	do {} while (0)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    47
#endif /* RTL8169_DEBUG */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    48
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    49
#define R8169_MSG_DEFAULT \
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    50
	(NETIF_MSG_DRV | NETIF_MSG_PROBE | NETIF_MSG_IFUP | NETIF_MSG_IFDOWN)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    51
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    52
#define TX_BUFFS_AVAIL(tp) \
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    53
	(tp->dirty_tx + NUM_TX_DESC - tp->cur_tx - 1)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    54
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    55
/* Maximum number of multicast addresses to filter (vs. Rx-all-multicast).
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    56
   The RTL chips use a 64 element hash table based on the Ethernet CRC. */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    57
static const int multicast_filter_limit = 32;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    58
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    59
/* MAC address length */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    60
#define MAC_ADDR_LEN	6
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    61
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    62
#define MAX_READ_REQUEST_SHIFT	12
416575d0ab37 Added r8169 driver for 2.6.35.
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. */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    64
#define RX_DMA_BURST	6	/* Maximum PCI burst, '6' is 1024 */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    65
#define TX_DMA_BURST	6	/* Maximum PCI burst, '6' is 1024 */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    66
#define EarlyTxThld	0x3F	/* 0x3F means NO early transmit */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    67
#define SafeMtu		0x1c20	/* ... actually life sucks beyond ~7k */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    68
#define InterFrameGap	0x03	/* 3 means InterFrameGap = the shortest one */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    69
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    70
#define R8169_REGS_SIZE		256
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    71
#define R8169_NAPI_WEIGHT	64
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    72
#define NUM_TX_DESC	64	/* Number of Tx descriptor registers */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    73
#define NUM_RX_DESC	256	/* Number of Rx descriptor registers */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    74
#define RX_BUF_SIZE	1536	/* Rx Buffer size */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    75
#define R8169_TX_RING_BYTES	(NUM_TX_DESC * sizeof(struct TxDesc))
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    76
#define R8169_RX_RING_BYTES	(NUM_RX_DESC * sizeof(struct RxDesc))
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    77
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    78
#define RTL8169_TX_TIMEOUT	(6*HZ)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    79
#define RTL8169_PHY_TIMEOUT	(10*HZ)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    80
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    81
#define RTL_EEPROM_SIG		cpu_to_le32(0x8129)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    82
#define RTL_EEPROM_SIG_MASK	cpu_to_le32(0xffff)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    83
#define RTL_EEPROM_SIG_ADDR	0x0000
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    84
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    85
/* write/read MMIO register */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    86
#define RTL_W8(reg, val8)	writeb ((val8), ioaddr + (reg))
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    87
#define RTL_W16(reg, val16)	writew ((val16), ioaddr + (reg))
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    88
#define RTL_W32(reg, val32)	writel ((val32), ioaddr + (reg))
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    89
#define RTL_R8(reg)		readb (ioaddr + (reg))
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    90
#define RTL_R16(reg)		readw (ioaddr + (reg))
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    91
#define RTL_R32(reg)		((unsigned long) readl (ioaddr + (reg)))
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    92
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    93
enum mac_version {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    94
	RTL_GIGA_MAC_NONE   = 0x00,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    95
	RTL_GIGA_MAC_VER_01 = 0x01, // 8169
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    96
	RTL_GIGA_MAC_VER_02 = 0x02, // 8169S
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    97
	RTL_GIGA_MAC_VER_03 = 0x03, // 8110S
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    98
	RTL_GIGA_MAC_VER_04 = 0x04, // 8169SB
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    99
	RTL_GIGA_MAC_VER_05 = 0x05, // 8110SCd
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   100
	RTL_GIGA_MAC_VER_06 = 0x06, // 8110SCe
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   101
	RTL_GIGA_MAC_VER_07 = 0x07, // 8102e
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   102
	RTL_GIGA_MAC_VER_08 = 0x08, // 8102e
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   103
	RTL_GIGA_MAC_VER_09 = 0x09, // 8102e
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   104
	RTL_GIGA_MAC_VER_10 = 0x0a, // 8101e
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   105
	RTL_GIGA_MAC_VER_11 = 0x0b, // 8168Bb
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   106
	RTL_GIGA_MAC_VER_12 = 0x0c, // 8168Be
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   107
	RTL_GIGA_MAC_VER_13 = 0x0d, // 8101Eb
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   108
	RTL_GIGA_MAC_VER_14 = 0x0e, // 8101 ?
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   109
	RTL_GIGA_MAC_VER_15 = 0x0f, // 8101 ?
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   110
	RTL_GIGA_MAC_VER_16 = 0x11, // 8101Ec
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   111
	RTL_GIGA_MAC_VER_17 = 0x10, // 8168Bf
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   112
	RTL_GIGA_MAC_VER_18 = 0x12, // 8168CP
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   113
	RTL_GIGA_MAC_VER_19 = 0x13, // 8168C
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   114
	RTL_GIGA_MAC_VER_20 = 0x14, // 8168C
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   115
	RTL_GIGA_MAC_VER_21 = 0x15, // 8168C
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   116
	RTL_GIGA_MAC_VER_22 = 0x16, // 8168C
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   117
	RTL_GIGA_MAC_VER_23 = 0x17, // 8168CP
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   118
	RTL_GIGA_MAC_VER_24 = 0x18, // 8168CP
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   119
	RTL_GIGA_MAC_VER_25 = 0x19, // 8168D
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   120
	RTL_GIGA_MAC_VER_26 = 0x1a, // 8168D
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   121
	RTL_GIGA_MAC_VER_27 = 0x1b  // 8168DP
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   122
};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   123
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   124
#define _R(NAME,MAC,MASK) \
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   125
	{ .name = NAME, .mac_version = MAC, .RxConfigMask = MASK }
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   126
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   127
static const struct {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   128
	const char *name;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   129
	u8 mac_version;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   130
	u32 RxConfigMask;	/* Clears the bits supported by this chip */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   131
} rtl_chip_info[] = {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   132
	_R("RTL8169",		RTL_GIGA_MAC_VER_01, 0xff7e1880), // 8169
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   133
	_R("RTL8169s",		RTL_GIGA_MAC_VER_02, 0xff7e1880), // 8169S
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   134
	_R("RTL8110s",		RTL_GIGA_MAC_VER_03, 0xff7e1880), // 8110S
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   135
	_R("RTL8169sb/8110sb",	RTL_GIGA_MAC_VER_04, 0xff7e1880), // 8169SB
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   136
	_R("RTL8169sc/8110sc",	RTL_GIGA_MAC_VER_05, 0xff7e1880), // 8110SCd
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   137
	_R("RTL8169sc/8110sc",	RTL_GIGA_MAC_VER_06, 0xff7e1880), // 8110SCe
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   138
	_R("RTL8102e",		RTL_GIGA_MAC_VER_07, 0xff7e1880), // PCI-E
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   139
	_R("RTL8102e",		RTL_GIGA_MAC_VER_08, 0xff7e1880), // PCI-E
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   140
	_R("RTL8102e",		RTL_GIGA_MAC_VER_09, 0xff7e1880), // PCI-E
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   141
	_R("RTL8101e",		RTL_GIGA_MAC_VER_10, 0xff7e1880), // PCI-E
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   142
	_R("RTL8168b/8111b",	RTL_GIGA_MAC_VER_11, 0xff7e1880), // PCI-E
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   143
	_R("RTL8168b/8111b",	RTL_GIGA_MAC_VER_12, 0xff7e1880), // PCI-E
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   144
	_R("RTL8101e",		RTL_GIGA_MAC_VER_13, 0xff7e1880), // PCI-E 8139
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   145
	_R("RTL8100e",		RTL_GIGA_MAC_VER_14, 0xff7e1880), // PCI-E 8139
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   146
	_R("RTL8100e",		RTL_GIGA_MAC_VER_15, 0xff7e1880), // PCI-E 8139
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   147
	_R("RTL8168b/8111b",	RTL_GIGA_MAC_VER_17, 0xff7e1880), // PCI-E
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   148
	_R("RTL8101e",		RTL_GIGA_MAC_VER_16, 0xff7e1880), // PCI-E
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   149
	_R("RTL8168cp/8111cp",	RTL_GIGA_MAC_VER_18, 0xff7e1880), // PCI-E
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   150
	_R("RTL8168c/8111c",	RTL_GIGA_MAC_VER_19, 0xff7e1880), // PCI-E
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   151
	_R("RTL8168c/8111c",	RTL_GIGA_MAC_VER_20, 0xff7e1880), // PCI-E
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   152
	_R("RTL8168c/8111c",	RTL_GIGA_MAC_VER_21, 0xff7e1880), // PCI-E
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   153
	_R("RTL8168c/8111c",	RTL_GIGA_MAC_VER_22, 0xff7e1880), // PCI-E
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   154
	_R("RTL8168cp/8111cp",	RTL_GIGA_MAC_VER_23, 0xff7e1880), // PCI-E
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   155
	_R("RTL8168cp/8111cp",	RTL_GIGA_MAC_VER_24, 0xff7e1880), // PCI-E
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   156
	_R("RTL8168d/8111d",	RTL_GIGA_MAC_VER_25, 0xff7e1880), // PCI-E
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   157
	_R("RTL8168d/8111d",	RTL_GIGA_MAC_VER_26, 0xff7e1880), // PCI-E
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   158
	_R("RTL8168dp/8111dp",	RTL_GIGA_MAC_VER_27, 0xff7e1880)  // PCI-E
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   159
};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   160
#undef _R
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   161
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   162
enum cfg_version {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   163
	RTL_CFG_0 = 0x00,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   164
	RTL_CFG_1,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   165
	RTL_CFG_2
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   166
};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   167
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   168
static void rtl_hw_start_8169(struct net_device *);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   169
static void rtl_hw_start_8168(struct net_device *);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   170
static void rtl_hw_start_8101(struct net_device *);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   171
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   172
static DEFINE_PCI_DEVICE_TABLE(rtl8169_pci_tbl) = {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   173
	{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK,	0x8129), 0, 0, RTL_CFG_0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   174
	{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK,	0x8136), 0, 0, RTL_CFG_2 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   175
	{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK,	0x8167), 0, 0, RTL_CFG_0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   176
	{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK,	0x8168), 0, 0, RTL_CFG_1 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   177
	{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK,	0x8169), 0, 0, RTL_CFG_0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   178
	{ PCI_DEVICE(PCI_VENDOR_ID_DLINK,	0x4300), 0, 0, RTL_CFG_0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   179
	{ PCI_DEVICE(PCI_VENDOR_ID_AT,		0xc107), 0, 0, RTL_CFG_0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   180
	{ PCI_DEVICE(0x16ec,			0x0116), 0, 0, RTL_CFG_0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   181
	{ PCI_VENDOR_ID_LINKSYS,		0x1032,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   182
		PCI_ANY_ID, 0x0024, 0, 0, RTL_CFG_0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   183
	{ 0x0001,				0x8168,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   184
		PCI_ANY_ID, 0x2410, 0, 0, RTL_CFG_2 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   185
	{0,},
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   186
};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   187
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   188
MODULE_DEVICE_TABLE(pci, rtl8169_pci_tbl);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   189
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   190
/*
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   191
 * we set our copybreak very high so that we don't have
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   192
 * to allocate 16k frames all the time (see note in
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   193
 * rtl8169_open()
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   194
 */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   195
static int rx_copybreak = 16383;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   196
static int use_dac;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   197
static struct {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   198
	u32 msg_enable;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   199
} debug = { -1 };
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   200
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   201
enum rtl_registers {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   202
	MAC0		= 0,	/* Ethernet hardware address. */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   203
	MAC4		= 4,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   204
	MAR0		= 8,	/* Multicast filter. */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   205
	CounterAddrLow		= 0x10,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   206
	CounterAddrHigh		= 0x14,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   207
	TxDescStartAddrLow	= 0x20,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   208
	TxDescStartAddrHigh	= 0x24,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   209
	TxHDescStartAddrLow	= 0x28,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   210
	TxHDescStartAddrHigh	= 0x2c,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   211
	FLASH		= 0x30,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   212
	ERSR		= 0x36,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   213
	ChipCmd		= 0x37,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   214
	TxPoll		= 0x38,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   215
	IntrMask	= 0x3c,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   216
	IntrStatus	= 0x3e,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   217
	TxConfig	= 0x40,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   218
	RxConfig	= 0x44,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   219
	RxMissed	= 0x4c,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   220
	Cfg9346		= 0x50,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   221
	Config0		= 0x51,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   222
	Config1		= 0x52,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   223
	Config2		= 0x53,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   224
	Config3		= 0x54,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   225
	Config4		= 0x55,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   226
	Config5		= 0x56,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   227
	MultiIntr	= 0x5c,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   228
	PHYAR		= 0x60,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   229
	PHYstatus	= 0x6c,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   230
	RxMaxSize	= 0xda,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   231
	CPlusCmd	= 0xe0,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   232
	IntrMitigate	= 0xe2,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   233
	RxDescAddrLow	= 0xe4,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   234
	RxDescAddrHigh	= 0xe8,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   235
	EarlyTxThres	= 0xec,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   236
	FuncEvent	= 0xf0,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   237
	FuncEventMask	= 0xf4,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   238
	FuncPresetState	= 0xf8,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   239
	FuncForceEvent	= 0xfc,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   240
};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   241
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   242
enum rtl8110_registers {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   243
	TBICSR			= 0x64,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   244
	TBI_ANAR		= 0x68,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   245
	TBI_LPAR		= 0x6a,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   246
};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   247
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   248
enum rtl8168_8101_registers {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   249
	CSIDR			= 0x64,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   250
	CSIAR			= 0x68,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   251
#define	CSIAR_FLAG			0x80000000
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   252
#define	CSIAR_WRITE_CMD			0x80000000
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   253
#define	CSIAR_BYTE_ENABLE		0x0f
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   254
#define	CSIAR_BYTE_ENABLE_SHIFT		12
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   255
#define	CSIAR_ADDR_MASK			0x0fff
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   256
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   257
	EPHYAR			= 0x80,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   258
#define	EPHYAR_FLAG			0x80000000
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   259
#define	EPHYAR_WRITE_CMD		0x80000000
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   260
#define	EPHYAR_REG_MASK			0x1f
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   261
#define	EPHYAR_REG_SHIFT		16
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   262
#define	EPHYAR_DATA_MASK		0xffff
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   263
	DBG_REG			= 0xd1,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   264
#define	FIX_NAK_1			(1 << 4)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   265
#define	FIX_NAK_2			(1 << 3)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   266
	EFUSEAR			= 0xdc,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   267
#define	EFUSEAR_FLAG			0x80000000
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   268
#define	EFUSEAR_WRITE_CMD		0x80000000
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   269
#define	EFUSEAR_READ_CMD		0x00000000
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   270
#define	EFUSEAR_REG_MASK		0x03ff
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   271
#define	EFUSEAR_REG_SHIFT		8
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   272
#define	EFUSEAR_DATA_MASK		0xff
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   273
};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   274
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   275
enum rtl_register_content {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   276
	/* InterruptStatusBits */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   277
	SYSErr		= 0x8000,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   278
	PCSTimeout	= 0x4000,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   279
	SWInt		= 0x0100,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   280
	TxDescUnavail	= 0x0080,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   281
	RxFIFOOver	= 0x0040,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   282
	LinkChg		= 0x0020,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   283
	RxOverflow	= 0x0010,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   284
	TxErr		= 0x0008,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   285
	TxOK		= 0x0004,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   286
	RxErr		= 0x0002,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   287
	RxOK		= 0x0001,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   288
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   289
	/* RxStatusDesc */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   290
	RxFOVF	= (1 << 23),
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   291
	RxRWT	= (1 << 22),
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   292
	RxRES	= (1 << 21),
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   293
	RxRUNT	= (1 << 20),
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   294
	RxCRC	= (1 << 19),
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   295
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   296
	/* ChipCmdBits */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   297
	CmdReset	= 0x10,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   298
	CmdRxEnb	= 0x08,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   299
	CmdTxEnb	= 0x04,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   300
	RxBufEmpty	= 0x01,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   301
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   302
	/* TXPoll register p.5 */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   303
	HPQ		= 0x80,		/* Poll cmd on the high prio queue */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   304
	NPQ		= 0x40,		/* Poll cmd on the low prio queue */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   305
	FSWInt		= 0x01,		/* Forced software interrupt */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   306
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   307
	/* Cfg9346Bits */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   308
	Cfg9346_Lock	= 0x00,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   309
	Cfg9346_Unlock	= 0xc0,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   310
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   311
	/* rx_mode_bits */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   312
	AcceptErr	= 0x20,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   313
	AcceptRunt	= 0x10,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   314
	AcceptBroadcast	= 0x08,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   315
	AcceptMulticast	= 0x04,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   316
	AcceptMyPhys	= 0x02,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   317
	AcceptAllPhys	= 0x01,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   318
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   319
	/* RxConfigBits */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   320
	RxCfgFIFOShift	= 13,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   321
	RxCfgDMAShift	=  8,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   322
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   323
	/* TxConfigBits */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   324
	TxInterFrameGapShift = 24,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   325
	TxDMAShift = 8,	/* DMA burst value (0-7) is shift this many bits */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   326
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   327
	/* Config1 register p.24 */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   328
	LEDS1		= (1 << 7),
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   329
	LEDS0		= (1 << 6),
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   330
	MSIEnable	= (1 << 5),	/* Enable Message Signaled Interrupt */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   331
	Speed_down	= (1 << 4),
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   332
	MEMMAP		= (1 << 3),
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   333
	IOMAP		= (1 << 2),
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   334
	VPD		= (1 << 1),
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   335
	PMEnable	= (1 << 0),	/* Power Management Enable */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   336
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   337
	/* Config2 register p. 25 */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   338
	PCI_Clock_66MHz = 0x01,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   339
	PCI_Clock_33MHz = 0x00,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   340
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   341
	/* Config3 register p.25 */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   342
	MagicPacket	= (1 << 5),	/* Wake up when receives a Magic Packet */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   343
	LinkUp		= (1 << 4),	/* Wake up when the cable connection is re-established */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   344
	Beacon_en	= (1 << 0),	/* 8168 only. Reserved in the 8168b */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   345
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   346
	/* Config5 register p.27 */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   347
	BWF		= (1 << 6),	/* Accept Broadcast wakeup frame */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   348
	MWF		= (1 << 5),	/* Accept Multicast wakeup frame */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   349
	UWF		= (1 << 4),	/* Accept Unicast wakeup frame */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   350
	LanWake		= (1 << 1),	/* LanWake enable/disable */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   351
	PMEStatus	= (1 << 0),	/* PME status can be reset by PCI RST# */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   352
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   353
	/* TBICSR p.28 */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   354
	TBIReset	= 0x80000000,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   355
	TBILoopback	= 0x40000000,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   356
	TBINwEnable	= 0x20000000,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   357
	TBINwRestart	= 0x10000000,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   358
	TBILinkOk	= 0x02000000,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   359
	TBINwComplete	= 0x01000000,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   360
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   361
	/* CPlusCmd p.31 */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   362
	EnableBist	= (1 << 15),	// 8168 8101
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   363
	Mac_dbgo_oe	= (1 << 14),	// 8168 8101
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   364
	Normal_mode	= (1 << 13),	// unused
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   365
	Force_half_dup	= (1 << 12),	// 8168 8101
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   366
	Force_rxflow_en	= (1 << 11),	// 8168 8101
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   367
	Force_txflow_en	= (1 << 10),	// 8168 8101
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   368
	Cxpl_dbg_sel	= (1 << 9),	// 8168 8101
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   369
	ASF		= (1 << 8),	// 8168 8101
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   370
	PktCntrDisable	= (1 << 7),	// 8168 8101
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   371
	Mac_dbgo_sel	= 0x001c,	// 8168
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   372
	RxVlan		= (1 << 6),
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   373
	RxChkSum	= (1 << 5),
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   374
	PCIDAC		= (1 << 4),
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   375
	PCIMulRW	= (1 << 3),
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   376
	INTT_0		= 0x0000,	// 8168
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   377
	INTT_1		= 0x0001,	// 8168
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   378
	INTT_2		= 0x0002,	// 8168
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   379
	INTT_3		= 0x0003,	// 8168
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   380
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   381
	/* rtl8169_PHYstatus */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   382
	TBI_Enable	= 0x80,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   383
	TxFlowCtrl	= 0x40,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   384
	RxFlowCtrl	= 0x20,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   385
	_1000bpsF	= 0x10,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   386
	_100bps		= 0x08,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   387
	_10bps		= 0x04,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   388
	LinkStatus	= 0x02,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   389
	FullDup		= 0x01,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   390
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   391
	/* _TBICSRBit */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   392
	TBILinkOK	= 0x02000000,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   393
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   394
	/* DumpCounterCommand */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   395
	CounterDump	= 0x8,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   396
};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   397
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   398
enum desc_status_bit {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   399
	DescOwn		= (1 << 31), /* Descriptor is owned by NIC */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   400
	RingEnd		= (1 << 30), /* End of descriptor ring */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   401
	FirstFrag	= (1 << 29), /* First segment of a packet */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   402
	LastFrag	= (1 << 28), /* Final segment of a packet */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   403
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   404
	/* Tx private */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   405
	LargeSend	= (1 << 27), /* TCP Large Send Offload (TSO) */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   406
	MSSShift	= 16,        /* MSS value position */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   407
	MSSMask		= 0xfff,     /* MSS value + LargeSend bit: 12 bits */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   408
	IPCS		= (1 << 18), /* Calculate IP checksum */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   409
	UDPCS		= (1 << 17), /* Calculate UDP/IP checksum */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   410
	TCPCS		= (1 << 16), /* Calculate TCP/IP checksum */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   411
	TxVlanTag	= (1 << 17), /* Add VLAN tag */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   412
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   413
	/* Rx private */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   414
	PID1		= (1 << 18), /* Protocol ID bit 1/2 */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   415
	PID0		= (1 << 17), /* Protocol ID bit 2/2 */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   416
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   417
#define RxProtoUDP	(PID1)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   418
#define RxProtoTCP	(PID0)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   419
#define RxProtoIP	(PID1 | PID0)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   420
#define RxProtoMask	RxProtoIP
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   421
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   422
	IPFail		= (1 << 16), /* IP checksum failed */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   423
	UDPFail		= (1 << 15), /* UDP/IP checksum failed */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   424
	TCPFail		= (1 << 14), /* TCP/IP checksum failed */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   425
	RxVlanTag	= (1 << 16), /* VLAN tag available */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   426
};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   427
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   428
#define RsvdMask	0x3fffc000
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   429
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   430
struct TxDesc {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   431
	__le32 opts1;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   432
	__le32 opts2;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   433
	__le64 addr;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   434
};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   435
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   436
struct RxDesc {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   437
	__le32 opts1;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   438
	__le32 opts2;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   439
	__le64 addr;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   440
};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   441
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   442
struct ring_info {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   443
	struct sk_buff	*skb;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   444
	u32		len;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   445
	u8		__pad[sizeof(void *) - sizeof(u32)];
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   446
};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   447
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   448
enum features {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   449
	RTL_FEATURE_WOL		= (1 << 0),
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   450
	RTL_FEATURE_MSI		= (1 << 1),
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   451
	RTL_FEATURE_GMII	= (1 << 2),
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   452
};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   453
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   454
struct rtl8169_counters {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   455
	__le64	tx_packets;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   456
	__le64	rx_packets;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   457
	__le64	tx_errors;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   458
	__le32	rx_errors;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   459
	__le16	rx_missed;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   460
	__le16	align_errors;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   461
	__le32	tx_one_collision;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   462
	__le32	tx_multi_collision;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   463
	__le64	rx_unicast;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   464
	__le64	rx_broadcast;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   465
	__le32	rx_multicast;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   466
	__le16	tx_aborted;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   467
	__le16	tx_underun;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   468
};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   469
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   470
struct rtl8169_private {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   471
	void __iomem *mmio_addr;	/* memory map physical address */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   472
	struct pci_dev *pci_dev;	/* Index of PCI device */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   473
	struct net_device *dev;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   474
	struct napi_struct napi;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   475
	spinlock_t lock;		/* spin lock flag */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   476
	u32 msg_enable;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   477
	int chipset;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   478
	int mac_version;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   479
	u32 cur_rx; /* Index into the Rx descriptor buffer of next Rx pkt. */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   480
	u32 cur_tx; /* Index into the Tx descriptor buffer of next Rx pkt. */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   481
	u32 dirty_rx;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   482
	u32 dirty_tx;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   483
	struct TxDesc *TxDescArray;	/* 256-aligned Tx descriptor ring */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   484
	struct RxDesc *RxDescArray;	/* 256-aligned Rx descriptor ring */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   485
	dma_addr_t TxPhyAddr;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   486
	dma_addr_t RxPhyAddr;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   487
	struct sk_buff *Rx_skbuff[NUM_RX_DESC];	/* Rx data buffers */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   488
	struct ring_info tx_skb[NUM_TX_DESC];	/* Tx data buffers */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   489
	unsigned align;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   490
	unsigned rx_buf_sz;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   491
	struct timer_list timer;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   492
	u16 cp_cmd;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   493
	u16 intr_event;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   494
	u16 napi_event;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   495
	u16 intr_mask;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   496
	int phy_1000_ctrl_reg;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   497
#ifdef CONFIG_R8169_VLAN
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   498
	struct vlan_group *vlgrp;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   499
#endif
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   500
	int (*set_speed)(struct net_device *, u8 autoneg, u16 speed, u8 duplex);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   501
	int (*get_settings)(struct net_device *, struct ethtool_cmd *);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   502
	void (*phy_reset_enable)(void __iomem *);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   503
	void (*hw_start)(struct net_device *);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   504
	unsigned int (*phy_reset_pending)(void __iomem *);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   505
	unsigned int (*link_ok)(void __iomem *);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   506
	int (*do_ioctl)(struct rtl8169_private *tp, struct mii_ioctl_data *data, int cmd);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   507
	int pcie_cap;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   508
	struct delayed_work task;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   509
	unsigned features;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   510
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   511
	struct mii_if_info mii;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   512
	struct rtl8169_counters counters;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   513
	u32 saved_wolopts;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   514
};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   515
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   516
MODULE_AUTHOR("Realtek and the Linux r8169 crew <netdev@vger.kernel.org>");
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   517
MODULE_DESCRIPTION("RealTek RTL-8169 Gigabit Ethernet driver");
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   518
module_param(rx_copybreak, int, 0);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   519
MODULE_PARM_DESC(rx_copybreak, "Copy breakpoint for copy-only-tiny-frames");
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   520
module_param(use_dac, int, 0);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   521
MODULE_PARM_DESC(use_dac, "Enable PCI DAC. Unsafe on 32 bit PCI slot.");
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   522
module_param_named(debug, debug.msg_enable, int, 0);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   523
MODULE_PARM_DESC(debug, "Debug verbosity level (0=none, ..., 16=all)");
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   524
MODULE_LICENSE("GPL");
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   525
MODULE_VERSION(RTL8169_VERSION);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   526
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   527
static int rtl8169_open(struct net_device *dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   528
static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   529
				      struct net_device *dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   530
static irqreturn_t rtl8169_interrupt(int irq, void *dev_instance);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   531
static int rtl8169_init_ring(struct net_device *dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   532
static void rtl_hw_start(struct net_device *dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   533
static int rtl8169_close(struct net_device *dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   534
static void rtl_set_rx_mode(struct net_device *dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   535
static void rtl8169_tx_timeout(struct net_device *dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   536
static struct net_device_stats *rtl8169_get_stats(struct net_device *dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   537
static int rtl8169_rx_interrupt(struct net_device *, struct rtl8169_private *,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   538
				void __iomem *, u32 budget);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   539
static int rtl8169_change_mtu(struct net_device *dev, int new_mtu);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   540
static void rtl8169_down(struct net_device *dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   541
static void rtl8169_rx_clear(struct rtl8169_private *tp);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   542
static int rtl8169_poll(struct napi_struct *napi, int budget);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   543
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   544
static const unsigned int rtl8169_rx_config =
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   545
	(RX_FIFO_THRESH << RxCfgFIFOShift) | (RX_DMA_BURST << RxCfgDMAShift);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   546
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   547
static void mdio_write(void __iomem *ioaddr, int reg_addr, int value)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   548
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   549
	int i;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   550
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   551
	RTL_W32(PHYAR, 0x80000000 | (reg_addr & 0x1f) << 16 | (value & 0xffff));
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   552
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   553
	for (i = 20; i > 0; i--) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   554
		/*
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   555
		 * Check if the RTL8169 has completed writing to the specified
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   556
		 * MII register.
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   557
		 */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   558
		if (!(RTL_R32(PHYAR) & 0x80000000))
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   559
			break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   560
		udelay(25);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   561
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   562
	/*
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   563
	 * According to hardware specs a 20us delay is required after write
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   564
	 * complete indication, but before sending next command.
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   565
	 */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   566
	udelay(20);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   567
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   568
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   569
static int mdio_read(void __iomem *ioaddr, int reg_addr)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   570
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   571
	int i, value = -1;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   572
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   573
	RTL_W32(PHYAR, 0x0 | (reg_addr & 0x1f) << 16);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   574
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   575
	for (i = 20; i > 0; i--) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   576
		/*
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   577
		 * Check if the RTL8169 has completed retrieving data from
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   578
		 * the specified MII register.
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   579
		 */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   580
		if (RTL_R32(PHYAR) & 0x80000000) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   581
			value = RTL_R32(PHYAR) & 0xffff;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   582
			break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   583
		}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   584
		udelay(25);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   585
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   586
	/*
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   587
	 * According to hardware specs a 20us delay is required after read
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   588
	 * complete indication, but before sending next command.
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   589
	 */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   590
	udelay(20);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   591
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   592
	return value;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   593
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   594
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   595
static void mdio_patch(void __iomem *ioaddr, int reg_addr, int value)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   596
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   597
	mdio_write(ioaddr, reg_addr, mdio_read(ioaddr, reg_addr) | value);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   598
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   599
416575d0ab37 Added r8169 driver for 2.6.35.
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)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   601
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   602
	int val;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   603
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   604
	val = mdio_read(ioaddr, reg_addr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   605
	mdio_write(ioaddr, reg_addr, (val | p) & ~m);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   606
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   607
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   608
static void rtl_mdio_write(struct net_device *dev, int phy_id, int location,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   609
			   int val)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   610
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   611
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   612
	void __iomem *ioaddr = tp->mmio_addr;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   613
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   614
	mdio_write(ioaddr, location, val);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   615
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   616
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   617
static int rtl_mdio_read(struct net_device *dev, int phy_id, int location)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   618
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   619
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   620
	void __iomem *ioaddr = tp->mmio_addr;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   621
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   622
	return mdio_read(ioaddr, location);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   623
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   624
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   625
static void rtl_ephy_write(void __iomem *ioaddr, int reg_addr, int value)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   626
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   627
	unsigned int i;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   628
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   629
	RTL_W32(EPHYAR, EPHYAR_WRITE_CMD | (value & EPHYAR_DATA_MASK) |
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   630
		(reg_addr & EPHYAR_REG_MASK) << EPHYAR_REG_SHIFT);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   631
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   632
	for (i = 0; i < 100; i++) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   633
		if (!(RTL_R32(EPHYAR) & EPHYAR_FLAG))
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   634
			break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   635
		udelay(10);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   636
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   637
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   638
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   639
static u16 rtl_ephy_read(void __iomem *ioaddr, int reg_addr)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   640
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   641
	u16 value = 0xffff;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   642
	unsigned int i;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   643
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   644
	RTL_W32(EPHYAR, (reg_addr & EPHYAR_REG_MASK) << EPHYAR_REG_SHIFT);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   645
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   646
	for (i = 0; i < 100; i++) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   647
		if (RTL_R32(EPHYAR) & EPHYAR_FLAG) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   648
			value = RTL_R32(EPHYAR) & EPHYAR_DATA_MASK;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   649
			break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   650
		}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   651
		udelay(10);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   652
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   653
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   654
	return value;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   655
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   656
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   657
static void rtl_csi_write(void __iomem *ioaddr, int addr, int value)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   658
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   659
	unsigned int i;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   660
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   661
	RTL_W32(CSIDR, value);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   662
	RTL_W32(CSIAR, CSIAR_WRITE_CMD | (addr & CSIAR_ADDR_MASK) |
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   663
		CSIAR_BYTE_ENABLE << CSIAR_BYTE_ENABLE_SHIFT);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   664
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   665
	for (i = 0; i < 100; i++) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   666
		if (!(RTL_R32(CSIAR) & CSIAR_FLAG))
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   667
			break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   668
		udelay(10);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   669
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   670
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   671
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   672
static u32 rtl_csi_read(void __iomem *ioaddr, int addr)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   673
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   674
	u32 value = ~0x00;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   675
	unsigned int i;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   676
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   677
	RTL_W32(CSIAR, (addr & CSIAR_ADDR_MASK) |
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   678
		CSIAR_BYTE_ENABLE << CSIAR_BYTE_ENABLE_SHIFT);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   679
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   680
	for (i = 0; i < 100; i++) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   681
		if (RTL_R32(CSIAR) & CSIAR_FLAG) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   682
			value = RTL_R32(CSIDR);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   683
			break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   684
		}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   685
		udelay(10);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   686
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   687
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   688
	return value;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   689
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   690
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   691
static u8 rtl8168d_efuse_read(void __iomem *ioaddr, int reg_addr)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   692
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   693
	u8 value = 0xff;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   694
	unsigned int i;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   695
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   696
	RTL_W32(EFUSEAR, (reg_addr & EFUSEAR_REG_MASK) << EFUSEAR_REG_SHIFT);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   697
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   698
	for (i = 0; i < 300; i++) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   699
		if (RTL_R32(EFUSEAR) & EFUSEAR_FLAG) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   700
			value = RTL_R32(EFUSEAR) & EFUSEAR_DATA_MASK;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   701
			break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   702
		}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   703
		udelay(100);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   704
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   705
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   706
	return value;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   707
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   708
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   709
static void rtl8169_irq_mask_and_ack(void __iomem *ioaddr)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   710
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   711
	RTL_W16(IntrMask, 0x0000);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   712
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   713
	RTL_W16(IntrStatus, 0xffff);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   714
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   715
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   716
static void rtl8169_asic_down(void __iomem *ioaddr)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   717
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   718
	RTL_W8(ChipCmd, 0x00);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   719
	rtl8169_irq_mask_and_ack(ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   720
	RTL_R16(CPlusCmd);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   721
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   722
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   723
static unsigned int rtl8169_tbi_reset_pending(void __iomem *ioaddr)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   724
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   725
	return RTL_R32(TBICSR) & TBIReset;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   726
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   727
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   728
static unsigned int rtl8169_xmii_reset_pending(void __iomem *ioaddr)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   729
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   730
	return mdio_read(ioaddr, MII_BMCR) & BMCR_RESET;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   731
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   732
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   733
static unsigned int rtl8169_tbi_link_ok(void __iomem *ioaddr)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   734
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   735
	return RTL_R32(TBICSR) & TBILinkOk;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   736
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   737
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   738
static unsigned int rtl8169_xmii_link_ok(void __iomem *ioaddr)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   739
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   740
	return RTL_R8(PHYstatus) & LinkStatus;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   741
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   742
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   743
static void rtl8169_tbi_reset_enable(void __iomem *ioaddr)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   744
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   745
	RTL_W32(TBICSR, RTL_R32(TBICSR) | TBIReset);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   746
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   747
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   748
static void rtl8169_xmii_reset_enable(void __iomem *ioaddr)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   749
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   750
	unsigned int val;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   751
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   752
	val = mdio_read(ioaddr, MII_BMCR) | BMCR_RESET;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   753
	mdio_write(ioaddr, MII_BMCR, val & 0xffff);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   754
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   755
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   756
static void rtl8169_check_link_status(struct net_device *dev,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   757
				      struct rtl8169_private *tp,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   758
				      void __iomem *ioaddr)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   759
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   760
	unsigned long flags;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   761
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   762
	spin_lock_irqsave(&tp->lock, flags);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   763
	if (tp->link_ok(ioaddr)) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   764
		/* This is to cancel a scheduled suspend if there's one. */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   765
		pm_request_resume(&tp->pci_dev->dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   766
		netif_carrier_on(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   767
		netif_info(tp, ifup, dev, "link up\n");
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   768
	} else {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   769
		netif_carrier_off(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   770
		netif_info(tp, ifdown, dev, "link down\n");
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   771
		pm_schedule_suspend(&tp->pci_dev->dev, 100);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   772
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   773
	spin_unlock_irqrestore(&tp->lock, flags);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   774
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   775
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   776
#define WAKE_ANY (WAKE_PHY | WAKE_MAGIC | WAKE_UCAST | WAKE_BCAST | WAKE_MCAST)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   777
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   778
static u32 __rtl8169_get_wol(struct rtl8169_private *tp)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   779
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   780
	void __iomem *ioaddr = tp->mmio_addr;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   781
	u8 options;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   782
	u32 wolopts = 0;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   783
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   784
	options = RTL_R8(Config1);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   785
	if (!(options & PMEnable))
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   786
		return 0;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   787
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   788
	options = RTL_R8(Config3);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   789
	if (options & LinkUp)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   790
		wolopts |= WAKE_PHY;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   791
	if (options & MagicPacket)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   792
		wolopts |= WAKE_MAGIC;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   793
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   794
	options = RTL_R8(Config5);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   795
	if (options & UWF)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   796
		wolopts |= WAKE_UCAST;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   797
	if (options & BWF)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   798
		wolopts |= WAKE_BCAST;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   799
	if (options & MWF)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   800
		wolopts |= WAKE_MCAST;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   801
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   802
	return wolopts;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   803
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   804
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   805
static void rtl8169_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   806
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   807
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   808
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   809
	spin_lock_irq(&tp->lock);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   810
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   811
	wol->supported = WAKE_ANY;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   812
	wol->wolopts = __rtl8169_get_wol(tp);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   813
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   814
	spin_unlock_irq(&tp->lock);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   815
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   816
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   817
static void __rtl8169_set_wol(struct rtl8169_private *tp, u32 wolopts)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   818
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   819
	void __iomem *ioaddr = tp->mmio_addr;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   820
	unsigned int i;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   821
	static const struct {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   822
		u32 opt;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   823
		u16 reg;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   824
		u8  mask;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   825
	} cfg[] = {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   826
		{ WAKE_ANY,   Config1, PMEnable },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   827
		{ WAKE_PHY,   Config3, LinkUp },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   828
		{ WAKE_MAGIC, Config3, MagicPacket },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   829
		{ WAKE_UCAST, Config5, UWF },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   830
		{ WAKE_BCAST, Config5, BWF },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   831
		{ WAKE_MCAST, Config5, MWF },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   832
		{ WAKE_ANY,   Config5, LanWake }
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   833
	};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   834
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   835
	RTL_W8(Cfg9346, Cfg9346_Unlock);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   836
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   837
	for (i = 0; i < ARRAY_SIZE(cfg); i++) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   838
		u8 options = RTL_R8(cfg[i].reg) & ~cfg[i].mask;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   839
		if (wolopts & cfg[i].opt)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   840
			options |= cfg[i].mask;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   841
		RTL_W8(cfg[i].reg, options);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   842
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   843
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   844
	RTL_W8(Cfg9346, Cfg9346_Lock);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   845
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   846
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   847
static int rtl8169_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   848
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   849
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   850
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   851
	spin_lock_irq(&tp->lock);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   852
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   853
	if (wol->wolopts)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   854
		tp->features |= RTL_FEATURE_WOL;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   855
	else
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   856
		tp->features &= ~RTL_FEATURE_WOL;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   857
	__rtl8169_set_wol(tp, wol->wolopts);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   858
	device_set_wakeup_enable(&tp->pci_dev->dev, wol->wolopts);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   859
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   860
	spin_unlock_irq(&tp->lock);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   861
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   862
	return 0;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   863
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   864
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   865
static void rtl8169_get_drvinfo(struct net_device *dev,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   866
				struct ethtool_drvinfo *info)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   867
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   868
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   869
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   870
	strcpy(info->driver, MODULENAME);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   871
	strcpy(info->version, RTL8169_VERSION);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   872
	strcpy(info->bus_info, pci_name(tp->pci_dev));
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   873
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   874
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   875
static int rtl8169_get_regs_len(struct net_device *dev)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   876
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   877
	return R8169_REGS_SIZE;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   878
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   879
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   880
static int rtl8169_set_speed_tbi(struct net_device *dev,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   881
				 u8 autoneg, u16 speed, u8 duplex)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   882
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   883
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   884
	void __iomem *ioaddr = tp->mmio_addr;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   885
	int ret = 0;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   886
	u32 reg;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   887
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   888
	reg = RTL_R32(TBICSR);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   889
	if ((autoneg == AUTONEG_DISABLE) && (speed == SPEED_1000) &&
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   890
	    (duplex == DUPLEX_FULL)) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   891
		RTL_W32(TBICSR, reg & ~(TBINwEnable | TBINwRestart));
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   892
	} else if (autoneg == AUTONEG_ENABLE)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   893
		RTL_W32(TBICSR, reg | TBINwEnable | TBINwRestart);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   894
	else {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   895
		netif_warn(tp, link, dev,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   896
			   "incorrect speed setting refused in TBI mode\n");
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   897
		ret = -EOPNOTSUPP;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   898
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   899
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   900
	return ret;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   901
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   902
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   903
static int rtl8169_set_speed_xmii(struct net_device *dev,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   904
				  u8 autoneg, u16 speed, u8 duplex)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   905
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   906
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   907
	void __iomem *ioaddr = tp->mmio_addr;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   908
	int giga_ctrl, bmcr;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   909
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   910
	if (autoneg == AUTONEG_ENABLE) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   911
		int auto_nego;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   912
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   913
		auto_nego = mdio_read(ioaddr, MII_ADVERTISE);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   914
		auto_nego |= (ADVERTISE_10HALF | ADVERTISE_10FULL |
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   915
			      ADVERTISE_100HALF | ADVERTISE_100FULL);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   916
		auto_nego |= ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   917
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   918
		giga_ctrl = mdio_read(ioaddr, MII_CTRL1000);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   919
		giga_ctrl &= ~(ADVERTISE_1000FULL | ADVERTISE_1000HALF);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   920
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   921
		/* The 8100e/8101e/8102e do Fast Ethernet only. */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   922
		if ((tp->mac_version != RTL_GIGA_MAC_VER_07) &&
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   923
		    (tp->mac_version != RTL_GIGA_MAC_VER_08) &&
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   924
		    (tp->mac_version != RTL_GIGA_MAC_VER_09) &&
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   925
		    (tp->mac_version != RTL_GIGA_MAC_VER_10) &&
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   926
		    (tp->mac_version != RTL_GIGA_MAC_VER_13) &&
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   927
		    (tp->mac_version != RTL_GIGA_MAC_VER_14) &&
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   928
		    (tp->mac_version != RTL_GIGA_MAC_VER_15) &&
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   929
		    (tp->mac_version != RTL_GIGA_MAC_VER_16)) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   930
			giga_ctrl |= ADVERTISE_1000FULL | ADVERTISE_1000HALF;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   931
		} else {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   932
			netif_info(tp, link, dev,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   933
				   "PHY does not support 1000Mbps\n");
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   934
		}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   935
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   936
		bmcr = BMCR_ANENABLE | BMCR_ANRESTART;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   937
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   938
		if ((tp->mac_version == RTL_GIGA_MAC_VER_11) ||
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   939
		    (tp->mac_version == RTL_GIGA_MAC_VER_12) ||
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   940
		    (tp->mac_version >= RTL_GIGA_MAC_VER_17)) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   941
			/*
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   942
			 * Wake up the PHY.
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   943
			 * Vendor specific (0x1f) and reserved (0x0e) MII
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   944
			 * registers.
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   945
			 */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   946
			mdio_write(ioaddr, 0x1f, 0x0000);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   947
			mdio_write(ioaddr, 0x0e, 0x0000);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   948
		}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   949
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   950
		mdio_write(ioaddr, MII_ADVERTISE, auto_nego);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   951
		mdio_write(ioaddr, MII_CTRL1000, giga_ctrl);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   952
	} else {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   953
		giga_ctrl = 0;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   954
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   955
		if (speed == SPEED_10)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   956
			bmcr = 0;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   957
		else if (speed == SPEED_100)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   958
			bmcr = BMCR_SPEED100;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   959
		else
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   960
			return -EINVAL;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   961
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   962
		if (duplex == DUPLEX_FULL)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   963
			bmcr |= BMCR_FULLDPLX;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   964
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   965
		mdio_write(ioaddr, 0x1f, 0x0000);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   966
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   967
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   968
	tp->phy_1000_ctrl_reg = giga_ctrl;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   969
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   970
	mdio_write(ioaddr, MII_BMCR, bmcr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   971
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   972
	if ((tp->mac_version == RTL_GIGA_MAC_VER_02) ||
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   973
	    (tp->mac_version == RTL_GIGA_MAC_VER_03)) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   974
		if ((speed == SPEED_100) && (autoneg != AUTONEG_ENABLE)) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   975
			mdio_write(ioaddr, 0x17, 0x2138);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   976
			mdio_write(ioaddr, 0x0e, 0x0260);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   977
		} else {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   978
			mdio_write(ioaddr, 0x17, 0x2108);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   979
			mdio_write(ioaddr, 0x0e, 0x0000);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   980
		}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   981
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   982
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   983
	return 0;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   984
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   985
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   986
static int rtl8169_set_speed(struct net_device *dev,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   987
			     u8 autoneg, u16 speed, u8 duplex)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   988
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   989
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   990
	int ret;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   991
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   992
	ret = tp->set_speed(dev, autoneg, speed, duplex);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   993
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   994
	if (netif_running(dev) && (tp->phy_1000_ctrl_reg & ADVERTISE_1000FULL))
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   995
		mod_timer(&tp->timer, jiffies + RTL8169_PHY_TIMEOUT);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   996
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   997
	return ret;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   998
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   999
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1000
static int rtl8169_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1001
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1002
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1003
	unsigned long flags;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1004
	int ret;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1005
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1006
	spin_lock_irqsave(&tp->lock, flags);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1007
	ret = rtl8169_set_speed(dev, cmd->autoneg, cmd->speed, cmd->duplex);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1008
	spin_unlock_irqrestore(&tp->lock, flags);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1009
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1010
	return ret;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1011
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1012
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1013
static u32 rtl8169_get_rx_csum(struct net_device *dev)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1014
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1015
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1016
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1017
	return tp->cp_cmd & RxChkSum;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1018
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1019
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1020
static int rtl8169_set_rx_csum(struct net_device *dev, u32 data)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1021
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1022
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1023
	void __iomem *ioaddr = tp->mmio_addr;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1024
	unsigned long flags;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1025
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1026
	spin_lock_irqsave(&tp->lock, flags);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1027
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1028
	if (data)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1029
		tp->cp_cmd |= RxChkSum;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1030
	else
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1031
		tp->cp_cmd &= ~RxChkSum;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1032
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1033
	RTL_W16(CPlusCmd, tp->cp_cmd);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1034
	RTL_R16(CPlusCmd);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1035
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1036
	spin_unlock_irqrestore(&tp->lock, flags);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1037
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1038
	return 0;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1039
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1040
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1041
#ifdef CONFIG_R8169_VLAN
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1042
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1043
static inline u32 rtl8169_tx_vlan_tag(struct rtl8169_private *tp,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1044
				      struct sk_buff *skb)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1045
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1046
	return (tp->vlgrp && vlan_tx_tag_present(skb)) ?
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1047
		TxVlanTag | swab16(vlan_tx_tag_get(skb)) : 0x00;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1048
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1049
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1050
static void rtl8169_vlan_rx_register(struct net_device *dev,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1051
				     struct vlan_group *grp)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1052
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1053
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1054
	void __iomem *ioaddr = tp->mmio_addr;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1055
	unsigned long flags;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1056
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1057
	spin_lock_irqsave(&tp->lock, flags);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1058
	tp->vlgrp = grp;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1059
	/*
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1060
	 * Do not disable RxVlan on 8110SCd.
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1061
	 */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1062
	if (tp->vlgrp || (tp->mac_version == RTL_GIGA_MAC_VER_05))
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1063
		tp->cp_cmd |= RxVlan;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1064
	else
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1065
		tp->cp_cmd &= ~RxVlan;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1066
	RTL_W16(CPlusCmd, tp->cp_cmd);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1067
	RTL_R16(CPlusCmd);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1068
	spin_unlock_irqrestore(&tp->lock, flags);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1069
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1070
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1071
static int rtl8169_rx_vlan_skb(struct rtl8169_private *tp, struct RxDesc *desc,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1072
			       struct sk_buff *skb, int polling)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1073
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1074
	u32 opts2 = le32_to_cpu(desc->opts2);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1075
	struct vlan_group *vlgrp = tp->vlgrp;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1076
	int ret;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1077
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1078
	if (vlgrp && (opts2 & RxVlanTag)) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1079
		__vlan_hwaccel_rx(skb, vlgrp, swab16(opts2 & 0xffff), polling);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1080
		ret = 0;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1081
	} else
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1082
		ret = -1;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1083
	desc->opts2 = 0;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1084
	return ret;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1085
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1086
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1087
#else /* !CONFIG_R8169_VLAN */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1088
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1089
static inline u32 rtl8169_tx_vlan_tag(struct rtl8169_private *tp,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1090
				      struct sk_buff *skb)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1091
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1092
	return 0;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1093
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1094
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1095
static int rtl8169_rx_vlan_skb(struct rtl8169_private *tp, struct RxDesc *desc,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1096
			       struct sk_buff *skb, int polling)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1097
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1098
	return -1;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1099
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1100
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1101
#endif
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1102
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1103
static int rtl8169_gset_tbi(struct net_device *dev, struct ethtool_cmd *cmd)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1104
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1105
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1106
	void __iomem *ioaddr = tp->mmio_addr;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1107
	u32 status;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1108
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1109
	cmd->supported =
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1110
		SUPPORTED_1000baseT_Full | SUPPORTED_Autoneg | SUPPORTED_FIBRE;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1111
	cmd->port = PORT_FIBRE;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1112
	cmd->transceiver = XCVR_INTERNAL;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1113
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1114
	status = RTL_R32(TBICSR);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1115
	cmd->advertising = (status & TBINwEnable) ?  ADVERTISED_Autoneg : 0;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1116
	cmd->autoneg = !!(status & TBINwEnable);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1117
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1118
	cmd->speed = SPEED_1000;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1119
	cmd->duplex = DUPLEX_FULL; /* Always set */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1120
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1121
	return 0;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1122
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1123
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1124
static int rtl8169_gset_xmii(struct net_device *dev, struct ethtool_cmd *cmd)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1125
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1126
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1127
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1128
	return mii_ethtool_gset(&tp->mii, cmd);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1129
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1130
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1131
static int rtl8169_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1132
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1133
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1134
	unsigned long flags;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1135
	int rc;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1136
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1137
	spin_lock_irqsave(&tp->lock, flags);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1138
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1139
	rc = tp->get_settings(dev, cmd);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1140
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1141
	spin_unlock_irqrestore(&tp->lock, flags);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1142
	return rc;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1143
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1144
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1145
static void rtl8169_get_regs(struct net_device *dev, struct ethtool_regs *regs,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1146
			     void *p)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1147
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1148
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1149
	unsigned long flags;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1150
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1151
	if (regs->len > R8169_REGS_SIZE)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1152
		regs->len = R8169_REGS_SIZE;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1153
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1154
	spin_lock_irqsave(&tp->lock, flags);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1155
	memcpy_fromio(p, tp->mmio_addr, regs->len);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1156
	spin_unlock_irqrestore(&tp->lock, flags);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1157
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1158
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1159
static u32 rtl8169_get_msglevel(struct net_device *dev)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1160
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1161
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1162
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1163
	return tp->msg_enable;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1164
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1165
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1166
static void rtl8169_set_msglevel(struct net_device *dev, u32 value)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1167
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1168
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1169
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1170
	tp->msg_enable = value;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1171
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1172
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1173
static const char rtl8169_gstrings[][ETH_GSTRING_LEN] = {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1174
	"tx_packets",
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1175
	"rx_packets",
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1176
	"tx_errors",
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1177
	"rx_errors",
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1178
	"rx_missed",
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1179
	"align_errors",
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1180
	"tx_single_collisions",
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1181
	"tx_multi_collisions",
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1182
	"unicast",
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1183
	"broadcast",
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1184
	"multicast",
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1185
	"tx_aborted",
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1186
	"tx_underrun",
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1187
};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1188
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1189
static int rtl8169_get_sset_count(struct net_device *dev, int sset)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1190
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1191
	switch (sset) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1192
	case ETH_SS_STATS:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1193
		return ARRAY_SIZE(rtl8169_gstrings);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1194
	default:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1195
		return -EOPNOTSUPP;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1196
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1197
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1198
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1199
static void rtl8169_update_counters(struct net_device *dev)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1200
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1201
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1202
	void __iomem *ioaddr = tp->mmio_addr;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1203
	struct rtl8169_counters *counters;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1204
	dma_addr_t paddr;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1205
	u32 cmd;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1206
	int wait = 1000;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1207
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1208
	/*
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1209
	 * Some chips are unable to dump tally counters when the receiver
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1210
	 * is disabled.
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1211
	 */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1212
	if ((RTL_R8(ChipCmd) & CmdRxEnb) == 0)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1213
		return;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1214
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1215
	counters = pci_alloc_consistent(tp->pci_dev, sizeof(*counters), &paddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1216
	if (!counters)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1217
		return;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1218
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1219
	RTL_W32(CounterAddrHigh, (u64)paddr >> 32);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1220
	cmd = (u64)paddr & DMA_BIT_MASK(32);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1221
	RTL_W32(CounterAddrLow, cmd);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1222
	RTL_W32(CounterAddrLow, cmd | CounterDump);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1223
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1224
	while (wait--) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1225
		if ((RTL_R32(CounterAddrLow) & CounterDump) == 0) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1226
			/* copy updated counters */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1227
			memcpy(&tp->counters, counters, sizeof(*counters));
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1228
			break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1229
		}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1230
		udelay(10);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1231
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1232
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1233
	RTL_W32(CounterAddrLow, 0);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1234
	RTL_W32(CounterAddrHigh, 0);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1235
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1236
	pci_free_consistent(tp->pci_dev, sizeof(*counters), counters, paddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1237
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1238
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1239
static void rtl8169_get_ethtool_stats(struct net_device *dev,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1240
				      struct ethtool_stats *stats, u64 *data)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1241
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1242
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1243
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1244
	ASSERT_RTNL();
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1245
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1246
	rtl8169_update_counters(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1247
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1248
	data[0] = le64_to_cpu(tp->counters.tx_packets);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1249
	data[1] = le64_to_cpu(tp->counters.rx_packets);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1250
	data[2] = le64_to_cpu(tp->counters.tx_errors);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1251
	data[3] = le32_to_cpu(tp->counters.rx_errors);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1252
	data[4] = le16_to_cpu(tp->counters.rx_missed);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1253
	data[5] = le16_to_cpu(tp->counters.align_errors);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1254
	data[6] = le32_to_cpu(tp->counters.tx_one_collision);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1255
	data[7] = le32_to_cpu(tp->counters.tx_multi_collision);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1256
	data[8] = le64_to_cpu(tp->counters.rx_unicast);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1257
	data[9] = le64_to_cpu(tp->counters.rx_broadcast);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1258
	data[10] = le32_to_cpu(tp->counters.rx_multicast);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1259
	data[11] = le16_to_cpu(tp->counters.tx_aborted);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1260
	data[12] = le16_to_cpu(tp->counters.tx_underun);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1261
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1262
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1263
static void rtl8169_get_strings(struct net_device *dev, u32 stringset, u8 *data)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1264
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1265
	switch(stringset) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1266
	case ETH_SS_STATS:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1267
		memcpy(data, *rtl8169_gstrings, sizeof(rtl8169_gstrings));
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1268
		break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1269
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1270
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1271
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1272
static const struct ethtool_ops rtl8169_ethtool_ops = {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1273
	.get_drvinfo		= rtl8169_get_drvinfo,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1274
	.get_regs_len		= rtl8169_get_regs_len,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1275
	.get_link		= ethtool_op_get_link,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1276
	.get_settings		= rtl8169_get_settings,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1277
	.set_settings		= rtl8169_set_settings,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1278
	.get_msglevel		= rtl8169_get_msglevel,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1279
	.set_msglevel		= rtl8169_set_msglevel,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1280
	.get_rx_csum		= rtl8169_get_rx_csum,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1281
	.set_rx_csum		= rtl8169_set_rx_csum,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1282
	.set_tx_csum		= ethtool_op_set_tx_csum,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1283
	.set_sg			= ethtool_op_set_sg,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1284
	.set_tso		= ethtool_op_set_tso,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1285
	.get_regs		= rtl8169_get_regs,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1286
	.get_wol		= rtl8169_get_wol,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1287
	.set_wol		= rtl8169_set_wol,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1288
	.get_strings		= rtl8169_get_strings,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1289
	.get_sset_count		= rtl8169_get_sset_count,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1290
	.get_ethtool_stats	= rtl8169_get_ethtool_stats,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1291
};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1292
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1293
static void rtl8169_get_mac_version(struct rtl8169_private *tp,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1294
				    void __iomem *ioaddr)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1295
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1296
	/*
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1297
	 * The driver currently handles the 8168Bf and the 8168Be identically
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1298
	 * but they can be identified more specifically through the test below
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1299
	 * if needed:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1300
	 *
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1301
	 * (RTL_R32(TxConfig) & 0x700000) == 0x500000 ? 8168Bf : 8168Be
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1302
	 *
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1303
	 * Same thing for the 8101Eb and the 8101Ec:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1304
	 *
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1305
	 * (RTL_R32(TxConfig) & 0x700000) == 0x200000 ? 8101Eb : 8101Ec
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1306
	 */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1307
	static const struct {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1308
		u32 mask;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1309
		u32 val;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1310
		int mac_version;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1311
	} mac_info[] = {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1312
		/* 8168D family. */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1313
		{ 0x7cf00000, 0x28300000,	RTL_GIGA_MAC_VER_26 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1314
		{ 0x7cf00000, 0x28100000,	RTL_GIGA_MAC_VER_25 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1315
		{ 0x7c800000, 0x28800000,	RTL_GIGA_MAC_VER_27 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1316
		{ 0x7c800000, 0x28000000,	RTL_GIGA_MAC_VER_26 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1317
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1318
		/* 8168C family. */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1319
		{ 0x7cf00000, 0x3cb00000,	RTL_GIGA_MAC_VER_24 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1320
		{ 0x7cf00000, 0x3c900000,	RTL_GIGA_MAC_VER_23 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1321
		{ 0x7cf00000, 0x3c800000,	RTL_GIGA_MAC_VER_18 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1322
		{ 0x7c800000, 0x3c800000,	RTL_GIGA_MAC_VER_24 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1323
		{ 0x7cf00000, 0x3c000000,	RTL_GIGA_MAC_VER_19 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1324
		{ 0x7cf00000, 0x3c200000,	RTL_GIGA_MAC_VER_20 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1325
		{ 0x7cf00000, 0x3c300000,	RTL_GIGA_MAC_VER_21 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1326
		{ 0x7cf00000, 0x3c400000,	RTL_GIGA_MAC_VER_22 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1327
		{ 0x7c800000, 0x3c000000,	RTL_GIGA_MAC_VER_22 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1328
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1329
		/* 8168B family. */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1330
		{ 0x7cf00000, 0x38000000,	RTL_GIGA_MAC_VER_12 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1331
		{ 0x7cf00000, 0x38500000,	RTL_GIGA_MAC_VER_17 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1332
		{ 0x7c800000, 0x38000000,	RTL_GIGA_MAC_VER_17 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1333
		{ 0x7c800000, 0x30000000,	RTL_GIGA_MAC_VER_11 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1334
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1335
		/* 8101 family. */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1336
		{ 0x7cf00000, 0x34a00000,	RTL_GIGA_MAC_VER_09 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1337
		{ 0x7cf00000, 0x24a00000,	RTL_GIGA_MAC_VER_09 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1338
		{ 0x7cf00000, 0x34900000,	RTL_GIGA_MAC_VER_08 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1339
		{ 0x7cf00000, 0x24900000,	RTL_GIGA_MAC_VER_08 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1340
		{ 0x7cf00000, 0x34800000,	RTL_GIGA_MAC_VER_07 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1341
		{ 0x7cf00000, 0x24800000,	RTL_GIGA_MAC_VER_07 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1342
		{ 0x7cf00000, 0x34000000,	RTL_GIGA_MAC_VER_13 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1343
		{ 0x7cf00000, 0x34300000,	RTL_GIGA_MAC_VER_10 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1344
		{ 0x7cf00000, 0x34200000,	RTL_GIGA_MAC_VER_16 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1345
		{ 0x7c800000, 0x34800000,	RTL_GIGA_MAC_VER_09 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1346
		{ 0x7c800000, 0x24800000,	RTL_GIGA_MAC_VER_09 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1347
		{ 0x7c800000, 0x34000000,	RTL_GIGA_MAC_VER_16 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1348
		/* FIXME: where did these entries come from ? -- FR */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1349
		{ 0xfc800000, 0x38800000,	RTL_GIGA_MAC_VER_15 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1350
		{ 0xfc800000, 0x30800000,	RTL_GIGA_MAC_VER_14 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1351
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1352
		/* 8110 family. */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1353
		{ 0xfc800000, 0x98000000,	RTL_GIGA_MAC_VER_06 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1354
		{ 0xfc800000, 0x18000000,	RTL_GIGA_MAC_VER_05 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1355
		{ 0xfc800000, 0x10000000,	RTL_GIGA_MAC_VER_04 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1356
		{ 0xfc800000, 0x04000000,	RTL_GIGA_MAC_VER_03 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1357
		{ 0xfc800000, 0x00800000,	RTL_GIGA_MAC_VER_02 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1358
		{ 0xfc800000, 0x00000000,	RTL_GIGA_MAC_VER_01 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1359
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1360
		/* Catch-all */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1361
		{ 0x00000000, 0x00000000,	RTL_GIGA_MAC_NONE   }
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1362
	}, *p = mac_info;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1363
	u32 reg;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1364
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1365
	reg = RTL_R32(TxConfig);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1366
	while ((reg & p->mask) != p->val)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1367
		p++;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1368
	tp->mac_version = p->mac_version;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1369
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1370
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1371
static void rtl8169_print_mac_version(struct rtl8169_private *tp)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1372
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1373
	dprintk("mac_version = 0x%02x\n", tp->mac_version);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1374
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1375
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1376
struct phy_reg {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1377
	u16 reg;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1378
	u16 val;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1379
};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1380
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1381
static void rtl_phy_write(void __iomem *ioaddr, const struct phy_reg *regs, int len)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1382
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1383
	while (len-- > 0) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1384
		mdio_write(ioaddr, regs->reg, regs->val);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1385
		regs++;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1386
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1387
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1388
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1389
static void rtl8169s_hw_phy_config(void __iomem *ioaddr)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1390
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1391
	static const struct phy_reg phy_reg_init[] = {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1392
		{ 0x1f, 0x0001 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1393
		{ 0x06, 0x006e },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1394
		{ 0x08, 0x0708 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1395
		{ 0x15, 0x4000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1396
		{ 0x18, 0x65c7 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1397
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1398
		{ 0x1f, 0x0001 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1399
		{ 0x03, 0x00a1 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1400
		{ 0x02, 0x0008 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1401
		{ 0x01, 0x0120 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1402
		{ 0x00, 0x1000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1403
		{ 0x04, 0x0800 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1404
		{ 0x04, 0x0000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1405
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1406
		{ 0x03, 0xff41 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1407
		{ 0x02, 0xdf60 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1408
		{ 0x01, 0x0140 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1409
		{ 0x00, 0x0077 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1410
		{ 0x04, 0x7800 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1411
		{ 0x04, 0x7000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1412
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1413
		{ 0x03, 0x802f },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1414
		{ 0x02, 0x4f02 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1415
		{ 0x01, 0x0409 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1416
		{ 0x00, 0xf0f9 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1417
		{ 0x04, 0x9800 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1418
		{ 0x04, 0x9000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1419
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1420
		{ 0x03, 0xdf01 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1421
		{ 0x02, 0xdf20 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1422
		{ 0x01, 0xff95 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1423
		{ 0x00, 0xba00 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1424
		{ 0x04, 0xa800 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1425
		{ 0x04, 0xa000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1426
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1427
		{ 0x03, 0xff41 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1428
		{ 0x02, 0xdf20 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1429
		{ 0x01, 0x0140 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1430
		{ 0x00, 0x00bb },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1431
		{ 0x04, 0xb800 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1432
		{ 0x04, 0xb000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1433
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1434
		{ 0x03, 0xdf41 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1435
		{ 0x02, 0xdc60 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1436
		{ 0x01, 0x6340 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1437
		{ 0x00, 0x007d },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1438
		{ 0x04, 0xd800 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1439
		{ 0x04, 0xd000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1440
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1441
		{ 0x03, 0xdf01 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1442
		{ 0x02, 0xdf20 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1443
		{ 0x01, 0x100a },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1444
		{ 0x00, 0xa0ff },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1445
		{ 0x04, 0xf800 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1446
		{ 0x04, 0xf000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1447
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1448
		{ 0x1f, 0x0000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1449
		{ 0x0b, 0x0000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1450
		{ 0x00, 0x9200 }
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1451
	};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1452
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1453
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1454
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1455
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1456
static void rtl8169sb_hw_phy_config(void __iomem *ioaddr)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1457
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1458
	static const struct phy_reg phy_reg_init[] = {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1459
		{ 0x1f, 0x0002 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1460
		{ 0x01, 0x90d0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1461
		{ 0x1f, 0x0000 }
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1462
	};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1463
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1464
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1465
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1466
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1467
static void rtl8169scd_hw_phy_config_quirk(struct rtl8169_private *tp,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1468
					   void __iomem *ioaddr)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1469
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1470
	struct pci_dev *pdev = tp->pci_dev;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1471
	u16 vendor_id, device_id;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1472
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1473
	pci_read_config_word(pdev, PCI_SUBSYSTEM_VENDOR_ID, &vendor_id);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1474
	pci_read_config_word(pdev, PCI_SUBSYSTEM_ID, &device_id);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1475
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1476
	if ((vendor_id != PCI_VENDOR_ID_GIGABYTE) || (device_id != 0xe000))
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1477
		return;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1478
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1479
	mdio_write(ioaddr, 0x1f, 0x0001);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1480
	mdio_write(ioaddr, 0x10, 0xf01b);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1481
	mdio_write(ioaddr, 0x1f, 0x0000);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1482
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1483
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1484
static void rtl8169scd_hw_phy_config(struct rtl8169_private *tp,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1485
				     void __iomem *ioaddr)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1486
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1487
	static const struct phy_reg phy_reg_init[] = {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1488
		{ 0x1f, 0x0001 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1489
		{ 0x04, 0x0000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1490
		{ 0x03, 0x00a1 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1491
		{ 0x02, 0x0008 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1492
		{ 0x01, 0x0120 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1493
		{ 0x00, 0x1000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1494
		{ 0x04, 0x0800 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1495
		{ 0x04, 0x9000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1496
		{ 0x03, 0x802f },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1497
		{ 0x02, 0x4f02 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1498
		{ 0x01, 0x0409 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1499
		{ 0x00, 0xf099 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1500
		{ 0x04, 0x9800 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1501
		{ 0x04, 0xa000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1502
		{ 0x03, 0xdf01 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1503
		{ 0x02, 0xdf20 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1504
		{ 0x01, 0xff95 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1505
		{ 0x00, 0xba00 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1506
		{ 0x04, 0xa800 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1507
		{ 0x04, 0xf000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1508
		{ 0x03, 0xdf01 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1509
		{ 0x02, 0xdf20 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1510
		{ 0x01, 0x101a },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1511
		{ 0x00, 0xa0ff },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1512
		{ 0x04, 0xf800 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1513
		{ 0x04, 0x0000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1514
		{ 0x1f, 0x0000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1515
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1516
		{ 0x1f, 0x0001 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1517
		{ 0x10, 0xf41b },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1518
		{ 0x14, 0xfb54 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1519
		{ 0x18, 0xf5c7 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1520
		{ 0x1f, 0x0000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1521
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1522
		{ 0x1f, 0x0001 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1523
		{ 0x17, 0x0cc0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1524
		{ 0x1f, 0x0000 }
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1525
	};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1526
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1527
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1528
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1529
	rtl8169scd_hw_phy_config_quirk(tp, ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1530
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1531
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1532
static void rtl8169sce_hw_phy_config(void __iomem *ioaddr)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1533
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1534
	static const struct phy_reg phy_reg_init[] = {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1535
		{ 0x1f, 0x0001 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1536
		{ 0x04, 0x0000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1537
		{ 0x03, 0x00a1 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1538
		{ 0x02, 0x0008 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1539
		{ 0x01, 0x0120 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1540
		{ 0x00, 0x1000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1541
		{ 0x04, 0x0800 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1542
		{ 0x04, 0x9000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1543
		{ 0x03, 0x802f },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1544
		{ 0x02, 0x4f02 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1545
		{ 0x01, 0x0409 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1546
		{ 0x00, 0xf099 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1547
		{ 0x04, 0x9800 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1548
		{ 0x04, 0xa000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1549
		{ 0x03, 0xdf01 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1550
		{ 0x02, 0xdf20 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1551
		{ 0x01, 0xff95 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1552
		{ 0x00, 0xba00 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1553
		{ 0x04, 0xa800 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1554
		{ 0x04, 0xf000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1555
		{ 0x03, 0xdf01 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1556
		{ 0x02, 0xdf20 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1557
		{ 0x01, 0x101a },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1558
		{ 0x00, 0xa0ff },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1559
		{ 0x04, 0xf800 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1560
		{ 0x04, 0x0000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1561
		{ 0x1f, 0x0000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1562
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1563
		{ 0x1f, 0x0001 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1564
		{ 0x0b, 0x8480 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1565
		{ 0x1f, 0x0000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1566
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1567
		{ 0x1f, 0x0001 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1568
		{ 0x18, 0x67c7 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1569
		{ 0x04, 0x2000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1570
		{ 0x03, 0x002f },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1571
		{ 0x02, 0x4360 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1572
		{ 0x01, 0x0109 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1573
		{ 0x00, 0x3022 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1574
		{ 0x04, 0x2800 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1575
		{ 0x1f, 0x0000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1576
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1577
		{ 0x1f, 0x0001 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1578
		{ 0x17, 0x0cc0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1579
		{ 0x1f, 0x0000 }
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1580
	};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1581
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1582
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1583
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1584
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1585
static void rtl8168bb_hw_phy_config(void __iomem *ioaddr)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1586
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1587
	static const struct phy_reg phy_reg_init[] = {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1588
		{ 0x10, 0xf41b },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1589
		{ 0x1f, 0x0000 }
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1590
	};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1591
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1592
	mdio_write(ioaddr, 0x1f, 0x0001);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1593
	mdio_patch(ioaddr, 0x16, 1 << 0);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1594
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1595
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1596
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1597
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1598
static void rtl8168bef_hw_phy_config(void __iomem *ioaddr)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1599
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1600
	static const struct phy_reg phy_reg_init[] = {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1601
		{ 0x1f, 0x0001 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1602
		{ 0x10, 0xf41b },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1603
		{ 0x1f, 0x0000 }
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1604
	};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1605
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1606
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1607
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1608
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1609
static void rtl8168cp_1_hw_phy_config(void __iomem *ioaddr)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1610
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1611
	static const struct phy_reg phy_reg_init[] = {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1612
		{ 0x1f, 0x0000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1613
		{ 0x1d, 0x0f00 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1614
		{ 0x1f, 0x0002 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1615
		{ 0x0c, 0x1ec8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1616
		{ 0x1f, 0x0000 }
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1617
	};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1618
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1619
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1620
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1621
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1622
static void rtl8168cp_2_hw_phy_config(void __iomem *ioaddr)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1623
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1624
	static const struct phy_reg phy_reg_init[] = {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1625
		{ 0x1f, 0x0001 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1626
		{ 0x1d, 0x3d98 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1627
		{ 0x1f, 0x0000 }
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1628
	};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1629
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1630
	mdio_write(ioaddr, 0x1f, 0x0000);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1631
	mdio_patch(ioaddr, 0x14, 1 << 5);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1632
	mdio_patch(ioaddr, 0x0d, 1 << 5);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1633
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1634
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1635
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1636
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1637
static void rtl8168c_1_hw_phy_config(void __iomem *ioaddr)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1638
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1639
	static const struct phy_reg phy_reg_init[] = {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1640
		{ 0x1f, 0x0001 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1641
		{ 0x12, 0x2300 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1642
		{ 0x1f, 0x0002 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1643
		{ 0x00, 0x88d4 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1644
		{ 0x01, 0x82b1 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1645
		{ 0x03, 0x7002 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1646
		{ 0x08, 0x9e30 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1647
		{ 0x09, 0x01f0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1648
		{ 0x0a, 0x5500 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1649
		{ 0x0c, 0x00c8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1650
		{ 0x1f, 0x0003 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1651
		{ 0x12, 0xc096 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1652
		{ 0x16, 0x000a },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1653
		{ 0x1f, 0x0000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1654
		{ 0x1f, 0x0000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1655
		{ 0x09, 0x2000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1656
		{ 0x09, 0x0000 }
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1657
	};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1658
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1659
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1660
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1661
	mdio_patch(ioaddr, 0x14, 1 << 5);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1662
	mdio_patch(ioaddr, 0x0d, 1 << 5);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1663
	mdio_write(ioaddr, 0x1f, 0x0000);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1664
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1665
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1666
static void rtl8168c_2_hw_phy_config(void __iomem *ioaddr)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1667
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1668
	static const struct phy_reg phy_reg_init[] = {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1669
		{ 0x1f, 0x0001 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1670
		{ 0x12, 0x2300 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1671
		{ 0x03, 0x802f },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1672
		{ 0x02, 0x4f02 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1673
		{ 0x01, 0x0409 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1674
		{ 0x00, 0xf099 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1675
		{ 0x04, 0x9800 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1676
		{ 0x04, 0x9000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1677
		{ 0x1d, 0x3d98 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1678
		{ 0x1f, 0x0002 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1679
		{ 0x0c, 0x7eb8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1680
		{ 0x06, 0x0761 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1681
		{ 0x1f, 0x0003 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1682
		{ 0x16, 0x0f0a },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1683
		{ 0x1f, 0x0000 }
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1684
	};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1685
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1686
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1687
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1688
	mdio_patch(ioaddr, 0x16, 1 << 0);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1689
	mdio_patch(ioaddr, 0x14, 1 << 5);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1690
	mdio_patch(ioaddr, 0x0d, 1 << 5);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1691
	mdio_write(ioaddr, 0x1f, 0x0000);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1692
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1693
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1694
static void rtl8168c_3_hw_phy_config(void __iomem *ioaddr)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1695
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1696
	static const struct phy_reg phy_reg_init[] = {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1697
		{ 0x1f, 0x0001 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1698
		{ 0x12, 0x2300 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1699
		{ 0x1d, 0x3d98 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1700
		{ 0x1f, 0x0002 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1701
		{ 0x0c, 0x7eb8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1702
		{ 0x06, 0x5461 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1703
		{ 0x1f, 0x0003 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1704
		{ 0x16, 0x0f0a },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1705
		{ 0x1f, 0x0000 }
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1706
	};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1707
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1708
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1709
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1710
	mdio_patch(ioaddr, 0x16, 1 << 0);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1711
	mdio_patch(ioaddr, 0x14, 1 << 5);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1712
	mdio_patch(ioaddr, 0x0d, 1 << 5);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1713
	mdio_write(ioaddr, 0x1f, 0x0000);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1714
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1715
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1716
static void rtl8168c_4_hw_phy_config(void __iomem *ioaddr)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1717
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1718
	rtl8168c_3_hw_phy_config(ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1719
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1720
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1721
static void rtl8168d_1_hw_phy_config(void __iomem *ioaddr)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1722
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1723
	static const struct phy_reg phy_reg_init_0[] = {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1724
		{ 0x1f, 0x0001 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1725
		{ 0x06, 0x4064 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1726
		{ 0x07, 0x2863 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1727
		{ 0x08, 0x059c },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1728
		{ 0x09, 0x26b4 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1729
		{ 0x0a, 0x6a19 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1730
		{ 0x0b, 0xdcc8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1731
		{ 0x10, 0xf06d },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1732
		{ 0x14, 0x7f68 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1733
		{ 0x18, 0x7fd9 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1734
		{ 0x1c, 0xf0ff },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1735
		{ 0x1d, 0x3d9c },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1736
		{ 0x1f, 0x0003 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1737
		{ 0x12, 0xf49f },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1738
		{ 0x13, 0x070b },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1739
		{ 0x1a, 0x05ad },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1740
		{ 0x14, 0x94c0 }
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1741
	};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1742
	static const struct phy_reg phy_reg_init_1[] = {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1743
		{ 0x1f, 0x0002 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1744
		{ 0x06, 0x5561 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1745
		{ 0x1f, 0x0005 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1746
		{ 0x05, 0x8332 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1747
		{ 0x06, 0x5561 }
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1748
	};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1749
	static const struct phy_reg phy_reg_init_2[] = {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1750
		{ 0x1f, 0x0005 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1751
		{ 0x05, 0xffc2 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1752
		{ 0x1f, 0x0005 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1753
		{ 0x05, 0x8000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1754
		{ 0x06, 0xf8f9 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1755
		{ 0x06, 0xfaef },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1756
		{ 0x06, 0x59ee },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1757
		{ 0x06, 0xf8ea },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1758
		{ 0x06, 0x00ee },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1759
		{ 0x06, 0xf8eb },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1760
		{ 0x06, 0x00e0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1761
		{ 0x06, 0xf87c },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1762
		{ 0x06, 0xe1f8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1763
		{ 0x06, 0x7d59 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1764
		{ 0x06, 0x0fef },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1765
		{ 0x06, 0x0139 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1766
		{ 0x06, 0x029e },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1767
		{ 0x06, 0x06ef },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1768
		{ 0x06, 0x1039 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1769
		{ 0x06, 0x089f },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1770
		{ 0x06, 0x2aee },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1771
		{ 0x06, 0xf8ea },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1772
		{ 0x06, 0x00ee },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1773
		{ 0x06, 0xf8eb },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1774
		{ 0x06, 0x01e0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1775
		{ 0x06, 0xf87c },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1776
		{ 0x06, 0xe1f8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1777
		{ 0x06, 0x7d58 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1778
		{ 0x06, 0x409e },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1779
		{ 0x06, 0x0f39 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1780
		{ 0x06, 0x46aa },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1781
		{ 0x06, 0x0bbf },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1782
		{ 0x06, 0x8290 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1783
		{ 0x06, 0xd682 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1784
		{ 0x06, 0x9802 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1785
		{ 0x06, 0x014f },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1786
		{ 0x06, 0xae09 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1787
		{ 0x06, 0xbf82 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1788
		{ 0x06, 0x98d6 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1789
		{ 0x06, 0x82a0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1790
		{ 0x06, 0x0201 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1791
		{ 0x06, 0x4fef },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1792
		{ 0x06, 0x95fe },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1793
		{ 0x06, 0xfdfc },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1794
		{ 0x06, 0x05f8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1795
		{ 0x06, 0xf9fa },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1796
		{ 0x06, 0xeef8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1797
		{ 0x06, 0xea00 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1798
		{ 0x06, 0xeef8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1799
		{ 0x06, 0xeb00 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1800
		{ 0x06, 0xe2f8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1801
		{ 0x06, 0x7ce3 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1802
		{ 0x06, 0xf87d },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1803
		{ 0x06, 0xa511 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1804
		{ 0x06, 0x1112 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1805
		{ 0x06, 0xd240 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1806
		{ 0x06, 0xd644 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1807
		{ 0x06, 0x4402 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1808
		{ 0x06, 0x8217 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1809
		{ 0x06, 0xd2a0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1810
		{ 0x06, 0xd6aa },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1811
		{ 0x06, 0xaa02 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1812
		{ 0x06, 0x8217 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1813
		{ 0x06, 0xae0f },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1814
		{ 0x06, 0xa544 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1815
		{ 0x06, 0x4402 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1816
		{ 0x06, 0xae4d },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1817
		{ 0x06, 0xa5aa },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1818
		{ 0x06, 0xaa02 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1819
		{ 0x06, 0xae47 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1820
		{ 0x06, 0xaf82 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1821
		{ 0x06, 0x13ee },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1822
		{ 0x06, 0x834e },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1823
		{ 0x06, 0x00ee },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1824
		{ 0x06, 0x834d },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1825
		{ 0x06, 0x0fee },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1826
		{ 0x06, 0x834c },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1827
		{ 0x06, 0x0fee },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1828
		{ 0x06, 0x834f },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1829
		{ 0x06, 0x00ee },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1830
		{ 0x06, 0x8351 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1831
		{ 0x06, 0x00ee },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1832
		{ 0x06, 0x834a },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1833
		{ 0x06, 0xffee },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1834
		{ 0x06, 0x834b },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1835
		{ 0x06, 0xffe0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1836
		{ 0x06, 0x8330 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1837
		{ 0x06, 0xe183 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1838
		{ 0x06, 0x3158 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1839
		{ 0x06, 0xfee4 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1840
		{ 0x06, 0xf88a },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1841
		{ 0x06, 0xe5f8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1842
		{ 0x06, 0x8be0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1843
		{ 0x06, 0x8332 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1844
		{ 0x06, 0xe183 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1845
		{ 0x06, 0x3359 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1846
		{ 0x06, 0x0fe2 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1847
		{ 0x06, 0x834d },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1848
		{ 0x06, 0x0c24 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1849
		{ 0x06, 0x5af0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1850
		{ 0x06, 0x1e12 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1851
		{ 0x06, 0xe4f8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1852
		{ 0x06, 0x8ce5 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1853
		{ 0x06, 0xf88d },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1854
		{ 0x06, 0xaf82 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1855
		{ 0x06, 0x13e0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1856
		{ 0x06, 0x834f },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1857
		{ 0x06, 0x10e4 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1858
		{ 0x06, 0x834f },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1859
		{ 0x06, 0xe083 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1860
		{ 0x06, 0x4e78 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1861
		{ 0x06, 0x009f },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1862
		{ 0x06, 0x0ae0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1863
		{ 0x06, 0x834f },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1864
		{ 0x06, 0xa010 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1865
		{ 0x06, 0xa5ee },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1866
		{ 0x06, 0x834e },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1867
		{ 0x06, 0x01e0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1868
		{ 0x06, 0x834e },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1869
		{ 0x06, 0x7805 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1870
		{ 0x06, 0x9e9a },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1871
		{ 0x06, 0xe083 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1872
		{ 0x06, 0x4e78 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1873
		{ 0x06, 0x049e },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1874
		{ 0x06, 0x10e0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1875
		{ 0x06, 0x834e },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1876
		{ 0x06, 0x7803 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1877
		{ 0x06, 0x9e0f },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1878
		{ 0x06, 0xe083 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1879
		{ 0x06, 0x4e78 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1880
		{ 0x06, 0x019e },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1881
		{ 0x06, 0x05ae },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1882
		{ 0x06, 0x0caf },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1883
		{ 0x06, 0x81f8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1884
		{ 0x06, 0xaf81 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1885
		{ 0x06, 0xa3af },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1886
		{ 0x06, 0x81dc },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1887
		{ 0x06, 0xaf82 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1888
		{ 0x06, 0x13ee },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1889
		{ 0x06, 0x8348 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1890
		{ 0x06, 0x00ee },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1891
		{ 0x06, 0x8349 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1892
		{ 0x06, 0x00e0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1893
		{ 0x06, 0x8351 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1894
		{ 0x06, 0x10e4 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1895
		{ 0x06, 0x8351 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1896
		{ 0x06, 0x5801 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1897
		{ 0x06, 0x9fea },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1898
		{ 0x06, 0xd000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1899
		{ 0x06, 0xd180 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1900
		{ 0x06, 0x1f66 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1901
		{ 0x06, 0xe2f8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1902
		{ 0x06, 0xeae3 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1903
		{ 0x06, 0xf8eb },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1904
		{ 0x06, 0x5af8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1905
		{ 0x06, 0x1e20 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1906
		{ 0x06, 0xe6f8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1907
		{ 0x06, 0xeae5 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1908
		{ 0x06, 0xf8eb },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1909
		{ 0x06, 0xd302 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1910
		{ 0x06, 0xb3fe },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1911
		{ 0x06, 0xe2f8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1912
		{ 0x06, 0x7cef },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1913
		{ 0x06, 0x325b },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1914
		{ 0x06, 0x80e3 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1915
		{ 0x06, 0xf87d },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1916
		{ 0x06, 0x9e03 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1917
		{ 0x06, 0x7dff },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1918
		{ 0x06, 0xff0d },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1919
		{ 0x06, 0x581c },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1920
		{ 0x06, 0x551a },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1921
		{ 0x06, 0x6511 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1922
		{ 0x06, 0xa190 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1923
		{ 0x06, 0xd3e2 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1924
		{ 0x06, 0x8348 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1925
		{ 0x06, 0xe383 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1926
		{ 0x06, 0x491b },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1927
		{ 0x06, 0x56ab },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1928
		{ 0x06, 0x08ef },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1929
		{ 0x06, 0x56e6 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1930
		{ 0x06, 0x8348 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1931
		{ 0x06, 0xe783 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1932
		{ 0x06, 0x4910 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1933
		{ 0x06, 0xd180 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1934
		{ 0x06, 0x1f66 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1935
		{ 0x06, 0xa004 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1936
		{ 0x06, 0xb9e2 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1937
		{ 0x06, 0x8348 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1938
		{ 0x06, 0xe383 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1939
		{ 0x06, 0x49ef },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1940
		{ 0x06, 0x65e2 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1941
		{ 0x06, 0x834a },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1942
		{ 0x06, 0xe383 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1943
		{ 0x06, 0x4b1b },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1944
		{ 0x06, 0x56aa },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1945
		{ 0x06, 0x0eef },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1946
		{ 0x06, 0x56e6 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1947
		{ 0x06, 0x834a },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1948
		{ 0x06, 0xe783 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1949
		{ 0x06, 0x4be2 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1950
		{ 0x06, 0x834d },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1951
		{ 0x06, 0xe683 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1952
		{ 0x06, 0x4ce0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1953
		{ 0x06, 0x834d },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1954
		{ 0x06, 0xa000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1955
		{ 0x06, 0x0caf },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1956
		{ 0x06, 0x81dc },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1957
		{ 0x06, 0xe083 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1958
		{ 0x06, 0x4d10 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1959
		{ 0x06, 0xe483 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1960
		{ 0x06, 0x4dae },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1961
		{ 0x06, 0x0480 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1962
		{ 0x06, 0xe483 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1963
		{ 0x06, 0x4de0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1964
		{ 0x06, 0x834e },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1965
		{ 0x06, 0x7803 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1966
		{ 0x06, 0x9e0b },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1967
		{ 0x06, 0xe083 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1968
		{ 0x06, 0x4e78 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1969
		{ 0x06, 0x049e },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1970
		{ 0x06, 0x04ee },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1971
		{ 0x06, 0x834e },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1972
		{ 0x06, 0x02e0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1973
		{ 0x06, 0x8332 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1974
		{ 0x06, 0xe183 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1975
		{ 0x06, 0x3359 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1976
		{ 0x06, 0x0fe2 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1977
		{ 0x06, 0x834d },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1978
		{ 0x06, 0x0c24 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1979
		{ 0x06, 0x5af0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1980
		{ 0x06, 0x1e12 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1981
		{ 0x06, 0xe4f8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1982
		{ 0x06, 0x8ce5 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1983
		{ 0x06, 0xf88d },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1984
		{ 0x06, 0xe083 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1985
		{ 0x06, 0x30e1 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1986
		{ 0x06, 0x8331 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1987
		{ 0x06, 0x6801 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1988
		{ 0x06, 0xe4f8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1989
		{ 0x06, 0x8ae5 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1990
		{ 0x06, 0xf88b },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1991
		{ 0x06, 0xae37 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1992
		{ 0x06, 0xee83 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1993
		{ 0x06, 0x4e03 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1994
		{ 0x06, 0xe083 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1995
		{ 0x06, 0x4ce1 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1996
		{ 0x06, 0x834d },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1997
		{ 0x06, 0x1b01 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1998
		{ 0x06, 0x9e04 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1999
		{ 0x06, 0xaaa1 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2000
		{ 0x06, 0xaea8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2001
		{ 0x06, 0xee83 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2002
		{ 0x06, 0x4e04 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2003
		{ 0x06, 0xee83 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2004
		{ 0x06, 0x4f00 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2005
		{ 0x06, 0xaeab },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2006
		{ 0x06, 0xe083 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2007
		{ 0x06, 0x4f78 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2008
		{ 0x06, 0x039f },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2009
		{ 0x06, 0x14ee },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2010
		{ 0x06, 0x834e },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2011
		{ 0x06, 0x05d2 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2012
		{ 0x06, 0x40d6 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2013
		{ 0x06, 0x5554 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2014
		{ 0x06, 0x0282 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2015
		{ 0x06, 0x17d2 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2016
		{ 0x06, 0xa0d6 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2017
		{ 0x06, 0xba00 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2018
		{ 0x06, 0x0282 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2019
		{ 0x06, 0x17fe },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2020
		{ 0x06, 0xfdfc },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2021
		{ 0x06, 0x05f8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2022
		{ 0x06, 0xe0f8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2023
		{ 0x06, 0x60e1 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2024
		{ 0x06, 0xf861 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2025
		{ 0x06, 0x6802 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2026
		{ 0x06, 0xe4f8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2027
		{ 0x06, 0x60e5 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2028
		{ 0x06, 0xf861 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2029
		{ 0x06, 0xe0f8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2030
		{ 0x06, 0x48e1 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2031
		{ 0x06, 0xf849 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2032
		{ 0x06, 0x580f },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2033
		{ 0x06, 0x1e02 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2034
		{ 0x06, 0xe4f8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2035
		{ 0x06, 0x48e5 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2036
		{ 0x06, 0xf849 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2037
		{ 0x06, 0xd000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2038
		{ 0x06, 0x0282 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2039
		{ 0x06, 0x5bbf },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2040
		{ 0x06, 0x8350 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2041
		{ 0x06, 0xef46 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2042
		{ 0x06, 0xdc19 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2043
		{ 0x06, 0xddd0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2044
		{ 0x06, 0x0102 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2045
		{ 0x06, 0x825b },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2046
		{ 0x06, 0x0282 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2047
		{ 0x06, 0x77e0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2048
		{ 0x06, 0xf860 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2049
		{ 0x06, 0xe1f8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2050
		{ 0x06, 0x6158 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2051
		{ 0x06, 0xfde4 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2052
		{ 0x06, 0xf860 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2053
		{ 0x06, 0xe5f8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2054
		{ 0x06, 0x61fc },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2055
		{ 0x06, 0x04f9 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2056
		{ 0x06, 0xfafb },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2057
		{ 0x06, 0xc6bf },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2058
		{ 0x06, 0xf840 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2059
		{ 0x06, 0xbe83 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2060
		{ 0x06, 0x50a0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2061
		{ 0x06, 0x0101 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2062
		{ 0x06, 0x071b },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2063
		{ 0x06, 0x89cf },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2064
		{ 0x06, 0xd208 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2065
		{ 0x06, 0xebdb },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2066
		{ 0x06, 0x19b2 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2067
		{ 0x06, 0xfbff },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2068
		{ 0x06, 0xfefd },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2069
		{ 0x06, 0x04f8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2070
		{ 0x06, 0xe0f8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2071
		{ 0x06, 0x48e1 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2072
		{ 0x06, 0xf849 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2073
		{ 0x06, 0x6808 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2074
		{ 0x06, 0xe4f8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2075
		{ 0x06, 0x48e5 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2076
		{ 0x06, 0xf849 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2077
		{ 0x06, 0x58f7 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2078
		{ 0x06, 0xe4f8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2079
		{ 0x06, 0x48e5 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2080
		{ 0x06, 0xf849 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2081
		{ 0x06, 0xfc04 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2082
		{ 0x06, 0x4d20 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2083
		{ 0x06, 0x0002 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2084
		{ 0x06, 0x4e22 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2085
		{ 0x06, 0x0002 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2086
		{ 0x06, 0x4ddf },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2087
		{ 0x06, 0xff01 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2088
		{ 0x06, 0x4edd },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2089
		{ 0x06, 0xff01 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2090
		{ 0x05, 0x83d4 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2091
		{ 0x06, 0x8000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2092
		{ 0x05, 0x83d8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2093
		{ 0x06, 0x8051 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2094
		{ 0x02, 0x6010 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2095
		{ 0x03, 0xdc00 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2096
		{ 0x05, 0xfff6 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2097
		{ 0x06, 0x00fc },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2098
		{ 0x1f, 0x0000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2099
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2100
		{ 0x1f, 0x0000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2101
		{ 0x0d, 0xf880 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2102
		{ 0x1f, 0x0000 }
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2103
	};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2104
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2105
	rtl_phy_write(ioaddr, phy_reg_init_0, ARRAY_SIZE(phy_reg_init_0));
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2106
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2107
	mdio_write(ioaddr, 0x1f, 0x0002);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2108
	mdio_plus_minus(ioaddr, 0x0b, 0x0010, 0x00ef);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2109
	mdio_plus_minus(ioaddr, 0x0c, 0xa200, 0x5d00);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2110
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2111
	rtl_phy_write(ioaddr, phy_reg_init_1, ARRAY_SIZE(phy_reg_init_1));
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2112
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2113
	if (rtl8168d_efuse_read(ioaddr, 0x01) == 0xb1) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2114
		static const struct phy_reg phy_reg_init[] = {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2115
			{ 0x1f, 0x0002 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2116
			{ 0x05, 0x669a },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2117
			{ 0x1f, 0x0005 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2118
			{ 0x05, 0x8330 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2119
			{ 0x06, 0x669a },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2120
			{ 0x1f, 0x0002 }
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2121
		};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2122
		int val;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2123
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2124
		rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2125
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2126
		val = mdio_read(ioaddr, 0x0d);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2127
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2128
		if ((val & 0x00ff) != 0x006c) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2129
			static const u32 set[] = {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2130
				0x0065, 0x0066, 0x0067, 0x0068,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2131
				0x0069, 0x006a, 0x006b, 0x006c
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2132
			};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2133
			int i;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2134
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2135
			mdio_write(ioaddr, 0x1f, 0x0002);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2136
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2137
			val &= 0xff00;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2138
			for (i = 0; i < ARRAY_SIZE(set); i++)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2139
				mdio_write(ioaddr, 0x0d, val | set[i]);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2140
		}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2141
	} else {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2142
		static const struct phy_reg phy_reg_init[] = {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2143
			{ 0x1f, 0x0002 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2144
			{ 0x05, 0x6662 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2145
			{ 0x1f, 0x0005 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2146
			{ 0x05, 0x8330 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2147
			{ 0x06, 0x6662 }
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2148
		};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2149
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2150
		rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2151
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2152
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2153
	mdio_write(ioaddr, 0x1f, 0x0002);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2154
	mdio_patch(ioaddr, 0x0d, 0x0300);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2155
	mdio_patch(ioaddr, 0x0f, 0x0010);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2156
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2157
	mdio_write(ioaddr, 0x1f, 0x0002);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2158
	mdio_plus_minus(ioaddr, 0x02, 0x0100, 0x0600);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2159
	mdio_plus_minus(ioaddr, 0x03, 0x0000, 0xe000);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2160
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2161
	rtl_phy_write(ioaddr, phy_reg_init_2, ARRAY_SIZE(phy_reg_init_2));
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2162
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2163
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2164
static void rtl8168d_2_hw_phy_config(void __iomem *ioaddr)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2165
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2166
	static const struct phy_reg phy_reg_init_0[] = {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2167
		{ 0x1f, 0x0001 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2168
		{ 0x06, 0x4064 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2169
		{ 0x07, 0x2863 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2170
		{ 0x08, 0x059c },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2171
		{ 0x09, 0x26b4 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2172
		{ 0x0a, 0x6a19 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2173
		{ 0x0b, 0xdcc8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2174
		{ 0x10, 0xf06d },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2175
		{ 0x14, 0x7f68 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2176
		{ 0x18, 0x7fd9 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2177
		{ 0x1c, 0xf0ff },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2178
		{ 0x1d, 0x3d9c },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2179
		{ 0x1f, 0x0003 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2180
		{ 0x12, 0xf49f },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2181
		{ 0x13, 0x070b },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2182
		{ 0x1a, 0x05ad },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2183
		{ 0x14, 0x94c0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2184
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2185
		{ 0x1f, 0x0002 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2186
		{ 0x06, 0x5561 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2187
		{ 0x1f, 0x0005 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2188
		{ 0x05, 0x8332 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2189
		{ 0x06, 0x5561 }
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2190
	};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2191
	static const struct phy_reg phy_reg_init_1[] = {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2192
		{ 0x1f, 0x0005 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2193
		{ 0x05, 0xffc2 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2194
		{ 0x1f, 0x0005 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2195
		{ 0x05, 0x8000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2196
		{ 0x06, 0xf8f9 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2197
		{ 0x06, 0xfaee },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2198
		{ 0x06, 0xf8ea },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2199
		{ 0x06, 0x00ee },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2200
		{ 0x06, 0xf8eb },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2201
		{ 0x06, 0x00e2 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2202
		{ 0x06, 0xf87c },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2203
		{ 0x06, 0xe3f8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2204
		{ 0x06, 0x7da5 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2205
		{ 0x06, 0x1111 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2206
		{ 0x06, 0x12d2 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2207
		{ 0x06, 0x40d6 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2208
		{ 0x06, 0x4444 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2209
		{ 0x06, 0x0281 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2210
		{ 0x06, 0xc6d2 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2211
		{ 0x06, 0xa0d6 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2212
		{ 0x06, 0xaaaa },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2213
		{ 0x06, 0x0281 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2214
		{ 0x06, 0xc6ae },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2215
		{ 0x06, 0x0fa5 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2216
		{ 0x06, 0x4444 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2217
		{ 0x06, 0x02ae },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2218
		{ 0x06, 0x4da5 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2219
		{ 0x06, 0xaaaa },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2220
		{ 0x06, 0x02ae },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2221
		{ 0x06, 0x47af },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2222
		{ 0x06, 0x81c2 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2223
		{ 0x06, 0xee83 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2224
		{ 0x06, 0x4e00 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2225
		{ 0x06, 0xee83 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2226
		{ 0x06, 0x4d0f },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2227
		{ 0x06, 0xee83 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2228
		{ 0x06, 0x4c0f },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2229
		{ 0x06, 0xee83 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2230
		{ 0x06, 0x4f00 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2231
		{ 0x06, 0xee83 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2232
		{ 0x06, 0x5100 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2233
		{ 0x06, 0xee83 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2234
		{ 0x06, 0x4aff },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2235
		{ 0x06, 0xee83 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2236
		{ 0x06, 0x4bff },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2237
		{ 0x06, 0xe083 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2238
		{ 0x06, 0x30e1 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2239
		{ 0x06, 0x8331 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2240
		{ 0x06, 0x58fe },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2241
		{ 0x06, 0xe4f8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2242
		{ 0x06, 0x8ae5 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2243
		{ 0x06, 0xf88b },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2244
		{ 0x06, 0xe083 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2245
		{ 0x06, 0x32e1 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2246
		{ 0x06, 0x8333 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2247
		{ 0x06, 0x590f },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2248
		{ 0x06, 0xe283 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2249
		{ 0x06, 0x4d0c },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2250
		{ 0x06, 0x245a },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2251
		{ 0x06, 0xf01e },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2252
		{ 0x06, 0x12e4 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2253
		{ 0x06, 0xf88c },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2254
		{ 0x06, 0xe5f8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2255
		{ 0x06, 0x8daf },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2256
		{ 0x06, 0x81c2 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2257
		{ 0x06, 0xe083 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2258
		{ 0x06, 0x4f10 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2259
		{ 0x06, 0xe483 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2260
		{ 0x06, 0x4fe0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2261
		{ 0x06, 0x834e },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2262
		{ 0x06, 0x7800 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2263
		{ 0x06, 0x9f0a },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2264
		{ 0x06, 0xe083 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2265
		{ 0x06, 0x4fa0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2266
		{ 0x06, 0x10a5 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2267
		{ 0x06, 0xee83 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2268
		{ 0x06, 0x4e01 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2269
		{ 0x06, 0xe083 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2270
		{ 0x06, 0x4e78 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2271
		{ 0x06, 0x059e },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2272
		{ 0x06, 0x9ae0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2273
		{ 0x06, 0x834e },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2274
		{ 0x06, 0x7804 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2275
		{ 0x06, 0x9e10 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2276
		{ 0x06, 0xe083 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2277
		{ 0x06, 0x4e78 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2278
		{ 0x06, 0x039e },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2279
		{ 0x06, 0x0fe0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2280
		{ 0x06, 0x834e },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2281
		{ 0x06, 0x7801 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2282
		{ 0x06, 0x9e05 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2283
		{ 0x06, 0xae0c },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2284
		{ 0x06, 0xaf81 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2285
		{ 0x06, 0xa7af },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2286
		{ 0x06, 0x8152 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2287
		{ 0x06, 0xaf81 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2288
		{ 0x06, 0x8baf },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2289
		{ 0x06, 0x81c2 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2290
		{ 0x06, 0xee83 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2291
		{ 0x06, 0x4800 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2292
		{ 0x06, 0xee83 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2293
		{ 0x06, 0x4900 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2294
		{ 0x06, 0xe083 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2295
		{ 0x06, 0x5110 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2296
		{ 0x06, 0xe483 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2297
		{ 0x06, 0x5158 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2298
		{ 0x06, 0x019f },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2299
		{ 0x06, 0xead0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2300
		{ 0x06, 0x00d1 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2301
		{ 0x06, 0x801f },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2302
		{ 0x06, 0x66e2 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2303
		{ 0x06, 0xf8ea },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2304
		{ 0x06, 0xe3f8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2305
		{ 0x06, 0xeb5a },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2306
		{ 0x06, 0xf81e },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2307
		{ 0x06, 0x20e6 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2308
		{ 0x06, 0xf8ea },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2309
		{ 0x06, 0xe5f8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2310
		{ 0x06, 0xebd3 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2311
		{ 0x06, 0x02b3 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2312
		{ 0x06, 0xfee2 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2313
		{ 0x06, 0xf87c },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2314
		{ 0x06, 0xef32 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2315
		{ 0x06, 0x5b80 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2316
		{ 0x06, 0xe3f8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2317
		{ 0x06, 0x7d9e },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2318
		{ 0x06, 0x037d },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2319
		{ 0x06, 0xffff },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2320
		{ 0x06, 0x0d58 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2321
		{ 0x06, 0x1c55 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2322
		{ 0x06, 0x1a65 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2323
		{ 0x06, 0x11a1 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2324
		{ 0x06, 0x90d3 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2325
		{ 0x06, 0xe283 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2326
		{ 0x06, 0x48e3 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2327
		{ 0x06, 0x8349 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2328
		{ 0x06, 0x1b56 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2329
		{ 0x06, 0xab08 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2330
		{ 0x06, 0xef56 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2331
		{ 0x06, 0xe683 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2332
		{ 0x06, 0x48e7 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2333
		{ 0x06, 0x8349 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2334
		{ 0x06, 0x10d1 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2335
		{ 0x06, 0x801f },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2336
		{ 0x06, 0x66a0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2337
		{ 0x06, 0x04b9 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2338
		{ 0x06, 0xe283 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2339
		{ 0x06, 0x48e3 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2340
		{ 0x06, 0x8349 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2341
		{ 0x06, 0xef65 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2342
		{ 0x06, 0xe283 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2343
		{ 0x06, 0x4ae3 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2344
		{ 0x06, 0x834b },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2345
		{ 0x06, 0x1b56 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2346
		{ 0x06, 0xaa0e },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2347
		{ 0x06, 0xef56 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2348
		{ 0x06, 0xe683 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2349
		{ 0x06, 0x4ae7 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2350
		{ 0x06, 0x834b },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2351
		{ 0x06, 0xe283 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2352
		{ 0x06, 0x4de6 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2353
		{ 0x06, 0x834c },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2354
		{ 0x06, 0xe083 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2355
		{ 0x06, 0x4da0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2356
		{ 0x06, 0x000c },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2357
		{ 0x06, 0xaf81 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2358
		{ 0x06, 0x8be0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2359
		{ 0x06, 0x834d },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2360
		{ 0x06, 0x10e4 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2361
		{ 0x06, 0x834d },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2362
		{ 0x06, 0xae04 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2363
		{ 0x06, 0x80e4 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2364
		{ 0x06, 0x834d },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2365
		{ 0x06, 0xe083 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2366
		{ 0x06, 0x4e78 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2367
		{ 0x06, 0x039e },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2368
		{ 0x06, 0x0be0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2369
		{ 0x06, 0x834e },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2370
		{ 0x06, 0x7804 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2371
		{ 0x06, 0x9e04 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2372
		{ 0x06, 0xee83 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2373
		{ 0x06, 0x4e02 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2374
		{ 0x06, 0xe083 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2375
		{ 0x06, 0x32e1 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2376
		{ 0x06, 0x8333 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2377
		{ 0x06, 0x590f },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2378
		{ 0x06, 0xe283 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2379
		{ 0x06, 0x4d0c },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2380
		{ 0x06, 0x245a },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2381
		{ 0x06, 0xf01e },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2382
		{ 0x06, 0x12e4 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2383
		{ 0x06, 0xf88c },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2384
		{ 0x06, 0xe5f8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2385
		{ 0x06, 0x8de0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2386
		{ 0x06, 0x8330 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2387
		{ 0x06, 0xe183 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2388
		{ 0x06, 0x3168 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2389
		{ 0x06, 0x01e4 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2390
		{ 0x06, 0xf88a },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2391
		{ 0x06, 0xe5f8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2392
		{ 0x06, 0x8bae },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2393
		{ 0x06, 0x37ee },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2394
		{ 0x06, 0x834e },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2395
		{ 0x06, 0x03e0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2396
		{ 0x06, 0x834c },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2397
		{ 0x06, 0xe183 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2398
		{ 0x06, 0x4d1b },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2399
		{ 0x06, 0x019e },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2400
		{ 0x06, 0x04aa },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2401
		{ 0x06, 0xa1ae },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2402
		{ 0x06, 0xa8ee },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2403
		{ 0x06, 0x834e },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2404
		{ 0x06, 0x04ee },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2405
		{ 0x06, 0x834f },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2406
		{ 0x06, 0x00ae },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2407
		{ 0x06, 0xabe0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2408
		{ 0x06, 0x834f },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2409
		{ 0x06, 0x7803 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2410
		{ 0x06, 0x9f14 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2411
		{ 0x06, 0xee83 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2412
		{ 0x06, 0x4e05 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2413
		{ 0x06, 0xd240 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2414
		{ 0x06, 0xd655 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2415
		{ 0x06, 0x5402 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2416
		{ 0x06, 0x81c6 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2417
		{ 0x06, 0xd2a0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2418
		{ 0x06, 0xd6ba },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2419
		{ 0x06, 0x0002 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2420
		{ 0x06, 0x81c6 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2421
		{ 0x06, 0xfefd },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2422
		{ 0x06, 0xfc05 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2423
		{ 0x06, 0xf8e0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2424
		{ 0x06, 0xf860 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2425
		{ 0x06, 0xe1f8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2426
		{ 0x06, 0x6168 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2427
		{ 0x06, 0x02e4 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2428
		{ 0x06, 0xf860 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2429
		{ 0x06, 0xe5f8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2430
		{ 0x06, 0x61e0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2431
		{ 0x06, 0xf848 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2432
		{ 0x06, 0xe1f8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2433
		{ 0x06, 0x4958 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2434
		{ 0x06, 0x0f1e },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2435
		{ 0x06, 0x02e4 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2436
		{ 0x06, 0xf848 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2437
		{ 0x06, 0xe5f8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2438
		{ 0x06, 0x49d0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2439
		{ 0x06, 0x0002 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2440
		{ 0x06, 0x820a },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2441
		{ 0x06, 0xbf83 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2442
		{ 0x06, 0x50ef },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2443
		{ 0x06, 0x46dc },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2444
		{ 0x06, 0x19dd },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2445
		{ 0x06, 0xd001 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2446
		{ 0x06, 0x0282 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2447
		{ 0x06, 0x0a02 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2448
		{ 0x06, 0x8226 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2449
		{ 0x06, 0xe0f8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2450
		{ 0x06, 0x60e1 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2451
		{ 0x06, 0xf861 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2452
		{ 0x06, 0x58fd },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2453
		{ 0x06, 0xe4f8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2454
		{ 0x06, 0x60e5 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2455
		{ 0x06, 0xf861 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2456
		{ 0x06, 0xfc04 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2457
		{ 0x06, 0xf9fa },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2458
		{ 0x06, 0xfbc6 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2459
		{ 0x06, 0xbff8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2460
		{ 0x06, 0x40be },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2461
		{ 0x06, 0x8350 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2462
		{ 0x06, 0xa001 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2463
		{ 0x06, 0x0107 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2464
		{ 0x06, 0x1b89 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2465
		{ 0x06, 0xcfd2 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2466
		{ 0x06, 0x08eb },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2467
		{ 0x06, 0xdb19 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2468
		{ 0x06, 0xb2fb },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2469
		{ 0x06, 0xfffe },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2470
		{ 0x06, 0xfd04 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2471
		{ 0x06, 0xf8e0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2472
		{ 0x06, 0xf848 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2473
		{ 0x06, 0xe1f8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2474
		{ 0x06, 0x4968 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2475
		{ 0x06, 0x08e4 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2476
		{ 0x06, 0xf848 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2477
		{ 0x06, 0xe5f8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2478
		{ 0x06, 0x4958 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2479
		{ 0x06, 0xf7e4 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2480
		{ 0x06, 0xf848 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2481
		{ 0x06, 0xe5f8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2482
		{ 0x06, 0x49fc },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2483
		{ 0x06, 0x044d },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2484
		{ 0x06, 0x2000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2485
		{ 0x06, 0x024e },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2486
		{ 0x06, 0x2200 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2487
		{ 0x06, 0x024d },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2488
		{ 0x06, 0xdfff },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2489
		{ 0x06, 0x014e },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2490
		{ 0x06, 0xddff },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2491
		{ 0x06, 0x0100 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2492
		{ 0x05, 0x83d8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2493
		{ 0x06, 0x8000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2494
		{ 0x03, 0xdc00 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2495
		{ 0x05, 0xfff6 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2496
		{ 0x06, 0x00fc },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2497
		{ 0x1f, 0x0000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2498
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2499
		{ 0x1f, 0x0000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2500
		{ 0x0d, 0xf880 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2501
		{ 0x1f, 0x0000 }
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2502
	};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2503
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2504
	rtl_phy_write(ioaddr, phy_reg_init_0, ARRAY_SIZE(phy_reg_init_0));
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2505
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2506
	if (rtl8168d_efuse_read(ioaddr, 0x01) == 0xb1) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2507
		static const struct phy_reg phy_reg_init[] = {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2508
			{ 0x1f, 0x0002 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2509
			{ 0x05, 0x669a },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2510
			{ 0x1f, 0x0005 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2511
			{ 0x05, 0x8330 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2512
			{ 0x06, 0x669a },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2513
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2514
			{ 0x1f, 0x0002 }
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2515
		};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2516
		int val;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2517
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2518
		rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2519
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2520
		val = mdio_read(ioaddr, 0x0d);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2521
		if ((val & 0x00ff) != 0x006c) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2522
			u32 set[] = {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2523
				0x0065, 0x0066, 0x0067, 0x0068,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2524
				0x0069, 0x006a, 0x006b, 0x006c
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2525
			};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2526
			int i;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2527
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2528
			mdio_write(ioaddr, 0x1f, 0x0002);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2529
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2530
			val &= 0xff00;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2531
			for (i = 0; i < ARRAY_SIZE(set); i++)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2532
				mdio_write(ioaddr, 0x0d, val | set[i]);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2533
		}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2534
	} else {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2535
		static const struct phy_reg phy_reg_init[] = {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2536
			{ 0x1f, 0x0002 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2537
			{ 0x05, 0x2642 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2538
			{ 0x1f, 0x0005 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2539
			{ 0x05, 0x8330 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2540
			{ 0x06, 0x2642 }
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2541
		};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2542
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2543
		rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2544
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2545
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2546
	mdio_write(ioaddr, 0x1f, 0x0002);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2547
	mdio_plus_minus(ioaddr, 0x02, 0x0100, 0x0600);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2548
	mdio_plus_minus(ioaddr, 0x03, 0x0000, 0xe000);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2549
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2550
	mdio_write(ioaddr, 0x1f, 0x0001);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2551
	mdio_write(ioaddr, 0x17, 0x0cc0);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2552
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2553
	mdio_write(ioaddr, 0x1f, 0x0002);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2554
	mdio_patch(ioaddr, 0x0f, 0x0017);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2555
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2556
	rtl_phy_write(ioaddr, phy_reg_init_1, ARRAY_SIZE(phy_reg_init_1));
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2557
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2558
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2559
static void rtl8168d_3_hw_phy_config(void __iomem *ioaddr)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2560
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2561
	static const struct phy_reg phy_reg_init[] = {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2562
		{ 0x1f, 0x0002 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2563
		{ 0x10, 0x0008 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2564
		{ 0x0d, 0x006c },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2565
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2566
		{ 0x1f, 0x0000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2567
		{ 0x0d, 0xf880 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2568
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2569
		{ 0x1f, 0x0001 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2570
		{ 0x17, 0x0cc0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2571
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2572
		{ 0x1f, 0x0001 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2573
		{ 0x0b, 0xa4d8 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2574
		{ 0x09, 0x281c },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2575
		{ 0x07, 0x2883 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2576
		{ 0x0a, 0x6b35 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2577
		{ 0x1d, 0x3da4 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2578
		{ 0x1c, 0xeffd },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2579
		{ 0x14, 0x7f52 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2580
		{ 0x18, 0x7fc6 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2581
		{ 0x08, 0x0601 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2582
		{ 0x06, 0x4063 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2583
		{ 0x10, 0xf074 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2584
		{ 0x1f, 0x0003 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2585
		{ 0x13, 0x0789 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2586
		{ 0x12, 0xf4bd },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2587
		{ 0x1a, 0x04fd },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2588
		{ 0x14, 0x84b0 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2589
		{ 0x1f, 0x0000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2590
		{ 0x00, 0x9200 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2591
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2592
		{ 0x1f, 0x0005 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2593
		{ 0x01, 0x0340 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2594
		{ 0x1f, 0x0001 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2595
		{ 0x04, 0x4000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2596
		{ 0x03, 0x1d21 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2597
		{ 0x02, 0x0c32 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2598
		{ 0x01, 0x0200 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2599
		{ 0x00, 0x5554 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2600
		{ 0x04, 0x4800 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2601
		{ 0x04, 0x4000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2602
		{ 0x04, 0xf000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2603
		{ 0x03, 0xdf01 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2604
		{ 0x02, 0xdf20 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2605
		{ 0x01, 0x101a },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2606
		{ 0x00, 0xa0ff },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2607
		{ 0x04, 0xf800 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2608
		{ 0x04, 0xf000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2609
		{ 0x1f, 0x0000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2610
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2611
		{ 0x1f, 0x0007 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2612
		{ 0x1e, 0x0023 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2613
		{ 0x16, 0x0000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2614
		{ 0x1f, 0x0000 }
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2615
	};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2616
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2617
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2618
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2619
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2620
static void rtl8102e_hw_phy_config(void __iomem *ioaddr)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2621
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2622
	static const struct phy_reg phy_reg_init[] = {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2623
		{ 0x1f, 0x0003 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2624
		{ 0x08, 0x441d },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2625
		{ 0x01, 0x9100 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2626
		{ 0x1f, 0x0000 }
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2627
	};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2628
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2629
	mdio_write(ioaddr, 0x1f, 0x0000);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2630
	mdio_patch(ioaddr, 0x11, 1 << 12);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2631
	mdio_patch(ioaddr, 0x19, 1 << 13);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2632
	mdio_patch(ioaddr, 0x10, 1 << 15);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2633
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2634
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2635
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2636
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2637
static void rtl_hw_phy_config(struct net_device *dev)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2638
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2639
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2640
	void __iomem *ioaddr = tp->mmio_addr;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2641
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2642
	rtl8169_print_mac_version(tp);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2643
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2644
	switch (tp->mac_version) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2645
	case RTL_GIGA_MAC_VER_01:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2646
		break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2647
	case RTL_GIGA_MAC_VER_02:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2648
	case RTL_GIGA_MAC_VER_03:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2649
		rtl8169s_hw_phy_config(ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2650
		break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2651
	case RTL_GIGA_MAC_VER_04:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2652
		rtl8169sb_hw_phy_config(ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2653
		break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2654
	case RTL_GIGA_MAC_VER_05:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2655
		rtl8169scd_hw_phy_config(tp, ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2656
		break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2657
	case RTL_GIGA_MAC_VER_06:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2658
		rtl8169sce_hw_phy_config(ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2659
		break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2660
	case RTL_GIGA_MAC_VER_07:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2661
	case RTL_GIGA_MAC_VER_08:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2662
	case RTL_GIGA_MAC_VER_09:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2663
		rtl8102e_hw_phy_config(ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2664
		break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2665
	case RTL_GIGA_MAC_VER_11:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2666
		rtl8168bb_hw_phy_config(ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2667
		break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2668
	case RTL_GIGA_MAC_VER_12:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2669
		rtl8168bef_hw_phy_config(ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2670
		break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2671
	case RTL_GIGA_MAC_VER_17:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2672
		rtl8168bef_hw_phy_config(ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2673
		break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2674
	case RTL_GIGA_MAC_VER_18:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2675
		rtl8168cp_1_hw_phy_config(ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2676
		break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2677
	case RTL_GIGA_MAC_VER_19:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2678
		rtl8168c_1_hw_phy_config(ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2679
		break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2680
	case RTL_GIGA_MAC_VER_20:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2681
		rtl8168c_2_hw_phy_config(ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2682
		break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2683
	case RTL_GIGA_MAC_VER_21:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2684
		rtl8168c_3_hw_phy_config(ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2685
		break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2686
	case RTL_GIGA_MAC_VER_22:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2687
		rtl8168c_4_hw_phy_config(ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2688
		break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2689
	case RTL_GIGA_MAC_VER_23:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2690
	case RTL_GIGA_MAC_VER_24:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2691
		rtl8168cp_2_hw_phy_config(ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2692
		break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2693
	case RTL_GIGA_MAC_VER_25:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2694
		rtl8168d_1_hw_phy_config(ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2695
		break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2696
	case RTL_GIGA_MAC_VER_26:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2697
		rtl8168d_2_hw_phy_config(ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2698
		break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2699
	case RTL_GIGA_MAC_VER_27:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2700
		rtl8168d_3_hw_phy_config(ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2701
		break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2702
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2703
	default:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2704
		break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2705
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2706
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2707
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2708
static void rtl8169_phy_timer(unsigned long __opaque)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2709
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2710
	struct net_device *dev = (struct net_device *)__opaque;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2711
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2712
	struct timer_list *timer = &tp->timer;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2713
	void __iomem *ioaddr = tp->mmio_addr;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2714
	unsigned long timeout = RTL8169_PHY_TIMEOUT;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2715
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2716
	assert(tp->mac_version > RTL_GIGA_MAC_VER_01);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2717
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2718
	if (!(tp->phy_1000_ctrl_reg & ADVERTISE_1000FULL))
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2719
		return;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2720
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2721
	spin_lock_irq(&tp->lock);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2722
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2723
	if (tp->phy_reset_pending(ioaddr)) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2724
		/*
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2725
		 * A busy loop could burn quite a few cycles on nowadays CPU.
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2726
		 * Let's delay the execution of the timer for a few ticks.
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2727
		 */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2728
		timeout = HZ/10;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2729
		goto out_mod_timer;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2730
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2731
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2732
	if (tp->link_ok(ioaddr))
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2733
		goto out_unlock;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2734
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2735
	netif_warn(tp, link, dev, "PHY reset until link up\n");
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2736
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2737
	tp->phy_reset_enable(ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2738
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2739
out_mod_timer:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2740
	mod_timer(timer, jiffies + timeout);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2741
out_unlock:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2742
	spin_unlock_irq(&tp->lock);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2743
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2744
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2745
static inline void rtl8169_delete_timer(struct net_device *dev)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2746
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2747
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2748
	struct timer_list *timer = &tp->timer;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2749
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2750
	if (tp->mac_version <= RTL_GIGA_MAC_VER_01)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2751
		return;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2752
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2753
	del_timer_sync(timer);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2754
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2755
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2756
static inline void rtl8169_request_timer(struct net_device *dev)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2757
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2758
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2759
	struct timer_list *timer = &tp->timer;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2760
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2761
	if (tp->mac_version <= RTL_GIGA_MAC_VER_01)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2762
		return;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2763
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2764
	mod_timer(timer, jiffies + RTL8169_PHY_TIMEOUT);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2765
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2766
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2767
#ifdef CONFIG_NET_POLL_CONTROLLER
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2768
/*
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2769
 * Polling 'interrupt' - used by things like netconsole to send skbs
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2770
 * without having to re-enable interrupts. It's not called while
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2771
 * the interrupt routine is executing.
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2772
 */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2773
static void rtl8169_netpoll(struct net_device *dev)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2774
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2775
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2776
	struct pci_dev *pdev = tp->pci_dev;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2777
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2778
	disable_irq(pdev->irq);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2779
	rtl8169_interrupt(pdev->irq, dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2780
	enable_irq(pdev->irq);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2781
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2782
#endif
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2783
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2784
static void rtl8169_release_board(struct pci_dev *pdev, struct net_device *dev,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2785
				  void __iomem *ioaddr)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2786
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2787
	iounmap(ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2788
	pci_release_regions(pdev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2789
	pci_clear_mwi(pdev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2790
	pci_disable_device(pdev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2791
	free_netdev(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2792
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2793
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2794
static void rtl8169_phy_reset(struct net_device *dev,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2795
			      struct rtl8169_private *tp)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2796
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2797
	void __iomem *ioaddr = tp->mmio_addr;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2798
	unsigned int i;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2799
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2800
	tp->phy_reset_enable(ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2801
	for (i = 0; i < 100; i++) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2802
		if (!tp->phy_reset_pending(ioaddr))
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2803
			return;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2804
		msleep(1);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2805
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2806
	netif_err(tp, link, dev, "PHY reset failed\n");
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2807
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2808
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2809
static void rtl8169_init_phy(struct net_device *dev, struct rtl8169_private *tp)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2810
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2811
	void __iomem *ioaddr = tp->mmio_addr;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2812
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2813
	rtl_hw_phy_config(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2814
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2815
	if (tp->mac_version <= RTL_GIGA_MAC_VER_06) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2816
		dprintk("Set MAC Reg C+CR Offset 0x82h = 0x01h\n");
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2817
		RTL_W8(0x82, 0x01);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2818
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2819
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2820
	pci_write_config_byte(tp->pci_dev, PCI_LATENCY_TIMER, 0x40);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2821
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2822
	if (tp->mac_version <= RTL_GIGA_MAC_VER_06)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2823
		pci_write_config_byte(tp->pci_dev, PCI_CACHE_LINE_SIZE, 0x08);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2824
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2825
	if (tp->mac_version == RTL_GIGA_MAC_VER_02) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2826
		dprintk("Set MAC Reg C+CR Offset 0x82h = 0x01h\n");
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2827
		RTL_W8(0x82, 0x01);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2828
		dprintk("Set PHY Reg 0x0bh = 0x00h\n");
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2829
		mdio_write(ioaddr, 0x0b, 0x0000); //w 0x0b 15 0 0
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2830
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2831
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2832
	rtl8169_phy_reset(dev, tp);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2833
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2834
	/*
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2835
	 * rtl8169_set_speed_xmii takes good care of the Fast Ethernet
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2836
	 * only 8101. Don't panic.
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2837
	 */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2838
	rtl8169_set_speed(dev, AUTONEG_ENABLE, SPEED_1000, DUPLEX_FULL);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2839
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2840
	if (RTL_R8(PHYstatus) & TBI_Enable)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2841
		netif_info(tp, link, dev, "TBI auto-negotiating\n");
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2842
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2843
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2844
static void rtl_rar_set(struct rtl8169_private *tp, u8 *addr)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2845
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2846
	void __iomem *ioaddr = tp->mmio_addr;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2847
	u32 high;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2848
	u32 low;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2849
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2850
	low  = addr[0] | (addr[1] << 8) | (addr[2] << 16) | (addr[3] << 24);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2851
	high = addr[4] | (addr[5] << 8);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2852
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2853
	spin_lock_irq(&tp->lock);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2854
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2855
	RTL_W8(Cfg9346, Cfg9346_Unlock);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2856
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2857
	RTL_W32(MAC4, high);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2858
	RTL_R32(MAC4);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2859
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2860
	RTL_W32(MAC0, low);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2861
	RTL_R32(MAC0);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2862
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2863
	RTL_W8(Cfg9346, Cfg9346_Lock);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2864
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2865
	spin_unlock_irq(&tp->lock);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2866
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2867
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2868
static int rtl_set_mac_address(struct net_device *dev, void *p)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2869
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2870
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2871
	struct sockaddr *addr = p;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2872
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2873
	if (!is_valid_ether_addr(addr->sa_data))
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2874
		return -EADDRNOTAVAIL;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2875
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2876
	memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2877
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2878
	rtl_rar_set(tp, dev->dev_addr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2879
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2880
	return 0;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2881
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2882
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2883
static int rtl8169_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2884
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2885
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2886
	struct mii_ioctl_data *data = if_mii(ifr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2887
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2888
	return netif_running(dev) ? tp->do_ioctl(tp, data, cmd) : -ENODEV;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2889
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2890
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2891
static int rtl_xmii_ioctl(struct rtl8169_private *tp, struct mii_ioctl_data *data, int cmd)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2892
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2893
	switch (cmd) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2894
	case SIOCGMIIPHY:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2895
		data->phy_id = 32; /* Internal PHY */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2896
		return 0;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2897
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2898
	case SIOCGMIIREG:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2899
		data->val_out = mdio_read(tp->mmio_addr, data->reg_num & 0x1f);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2900
		return 0;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2901
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2902
	case SIOCSMIIREG:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2903
		mdio_write(tp->mmio_addr, data->reg_num & 0x1f, data->val_in);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2904
		return 0;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2905
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2906
	return -EOPNOTSUPP;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2907
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2908
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2909
static int rtl_tbi_ioctl(struct rtl8169_private *tp, struct mii_ioctl_data *data, int cmd)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2910
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2911
	return -EOPNOTSUPP;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2912
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2913
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2914
static const struct rtl_cfg_info {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2915
	void (*hw_start)(struct net_device *);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2916
	unsigned int region;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2917
	unsigned int align;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2918
	u16 intr_event;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2919
	u16 napi_event;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2920
	unsigned features;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2921
	u8 default_ver;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2922
} rtl_cfg_infos [] = {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2923
	[RTL_CFG_0] = {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2924
		.hw_start	= rtl_hw_start_8169,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2925
		.region		= 1,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2926
		.align		= 0,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2927
		.intr_event	= SYSErr | LinkChg | RxOverflow |
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2928
				  RxFIFOOver | TxErr | TxOK | RxOK | RxErr,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2929
		.napi_event	= RxFIFOOver | TxErr | TxOK | RxOK | RxOverflow,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2930
		.features	= RTL_FEATURE_GMII,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2931
		.default_ver	= RTL_GIGA_MAC_VER_01,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2932
	},
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2933
	[RTL_CFG_1] = {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2934
		.hw_start	= rtl_hw_start_8168,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2935
		.region		= 2,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2936
		.align		= 8,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2937
		.intr_event	= SYSErr | LinkChg | RxOverflow |
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2938
				  TxErr | TxOK | RxOK | RxErr,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2939
		.napi_event	= TxErr | TxOK | RxOK | RxOverflow,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2940
		.features	= RTL_FEATURE_GMII | RTL_FEATURE_MSI,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2941
		.default_ver	= RTL_GIGA_MAC_VER_11,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2942
	},
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2943
	[RTL_CFG_2] = {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2944
		.hw_start	= rtl_hw_start_8101,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2945
		.region		= 2,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2946
		.align		= 8,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2947
		.intr_event	= SYSErr | LinkChg | RxOverflow | PCSTimeout |
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2948
				  RxFIFOOver | TxErr | TxOK | RxOK | RxErr,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2949
		.napi_event	= RxFIFOOver | TxErr | TxOK | RxOK | RxOverflow,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2950
		.features	= RTL_FEATURE_MSI,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2951
		.default_ver	= RTL_GIGA_MAC_VER_13,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2952
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2953
};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2954
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2955
/* Cfg9346_Unlock assumed. */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2956
static unsigned rtl_try_msi(struct pci_dev *pdev, void __iomem *ioaddr,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2957
			    const struct rtl_cfg_info *cfg)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2958
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2959
	unsigned msi = 0;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2960
	u8 cfg2;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2961
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2962
	cfg2 = RTL_R8(Config2) & ~MSIEnable;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2963
	if (cfg->features & RTL_FEATURE_MSI) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2964
		if (pci_enable_msi(pdev)) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2965
			dev_info(&pdev->dev, "no MSI. Back to INTx.\n");
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2966
		} else {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2967
			cfg2 |= MSIEnable;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2968
			msi = RTL_FEATURE_MSI;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2969
		}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2970
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2971
	RTL_W8(Config2, cfg2);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2972
	return msi;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2973
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2974
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2975
static void rtl_disable_msi(struct pci_dev *pdev, struct rtl8169_private *tp)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2976
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2977
	if (tp->features & RTL_FEATURE_MSI) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2978
		pci_disable_msi(pdev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2979
		tp->features &= ~RTL_FEATURE_MSI;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2980
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2981
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2982
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2983
static const struct net_device_ops rtl8169_netdev_ops = {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2984
	.ndo_open		= rtl8169_open,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2985
	.ndo_stop		= rtl8169_close,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2986
	.ndo_get_stats		= rtl8169_get_stats,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2987
	.ndo_start_xmit		= rtl8169_start_xmit,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2988
	.ndo_tx_timeout		= rtl8169_tx_timeout,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2989
	.ndo_validate_addr	= eth_validate_addr,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2990
	.ndo_change_mtu		= rtl8169_change_mtu,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2991
	.ndo_set_mac_address	= rtl_set_mac_address,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2992
	.ndo_do_ioctl		= rtl8169_ioctl,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2993
	.ndo_set_multicast_list	= rtl_set_rx_mode,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2994
#ifdef CONFIG_R8169_VLAN
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2995
	.ndo_vlan_rx_register	= rtl8169_vlan_rx_register,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2996
#endif
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2997
#ifdef CONFIG_NET_POLL_CONTROLLER
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2998
	.ndo_poll_controller	= rtl8169_netpoll,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2999
#endif
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3000
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3001
};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3002
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3003
static int __devinit
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3004
rtl8169_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3005
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3006
	const struct rtl_cfg_info *cfg = rtl_cfg_infos + ent->driver_data;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3007
	const unsigned int region = cfg->region;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3008
	struct rtl8169_private *tp;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3009
	struct mii_if_info *mii;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3010
	struct net_device *dev;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3011
	void __iomem *ioaddr;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3012
	unsigned int i;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3013
	int rc;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3014
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3015
	if (netif_msg_drv(&debug)) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3016
		printk(KERN_INFO "%s Gigabit Ethernet driver %s loaded\n",
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3017
		       MODULENAME, RTL8169_VERSION);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3018
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3019
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3020
	dev = alloc_etherdev(sizeof (*tp));
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3021
	if (!dev) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3022
		if (netif_msg_drv(&debug))
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3023
			dev_err(&pdev->dev, "unable to alloc new ethernet\n");
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3024
		rc = -ENOMEM;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3025
		goto out;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3026
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3027
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3028
	SET_NETDEV_DEV(dev, &pdev->dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3029
	dev->netdev_ops = &rtl8169_netdev_ops;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3030
	tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3031
	tp->dev = dev;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3032
	tp->pci_dev = pdev;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3033
	tp->msg_enable = netif_msg_init(debug.msg_enable, R8169_MSG_DEFAULT);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3034
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3035
	mii = &tp->mii;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3036
	mii->dev = dev;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3037
	mii->mdio_read = rtl_mdio_read;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3038
	mii->mdio_write = rtl_mdio_write;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3039
	mii->phy_id_mask = 0x1f;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3040
	mii->reg_num_mask = 0x1f;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3041
	mii->supports_gmii = !!(cfg->features & RTL_FEATURE_GMII);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3042
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3043
	/* enable device (incl. PCI PM wakeup and hotplug setup) */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3044
	rc = pci_enable_device(pdev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3045
	if (rc < 0) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3046
		netif_err(tp, probe, dev, "enable failure\n");
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3047
		goto err_out_free_dev_1;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3048
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3049
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3050
	if (pci_set_mwi(pdev) < 0)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3051
		netif_info(tp, probe, dev, "Mem-Wr-Inval unavailable\n");
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3052
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3053
	/* make sure PCI base addr 1 is MMIO */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3054
	if (!(pci_resource_flags(pdev, region) & IORESOURCE_MEM)) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3055
		netif_err(tp, probe, dev,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3056
			  "region #%d not an MMIO resource, aborting\n",
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3057
			  region);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3058
		rc = -ENODEV;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3059
		goto err_out_mwi_2;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3060
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3061
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3062
	/* check for weird/broken PCI region reporting */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3063
	if (pci_resource_len(pdev, region) < R8169_REGS_SIZE) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3064
		netif_err(tp, probe, dev,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3065
			  "Invalid PCI region size(s), aborting\n");
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3066
		rc = -ENODEV;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3067
		goto err_out_mwi_2;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3068
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3069
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3070
	rc = pci_request_regions(pdev, MODULENAME);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3071
	if (rc < 0) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3072
		netif_err(tp, probe, dev, "could not request regions\n");
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3073
		goto err_out_mwi_2;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3074
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3075
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3076
	tp->cp_cmd = PCIMulRW | RxChkSum;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3077
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3078
	if ((sizeof(dma_addr_t) > 4) &&
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3079
	    !pci_set_dma_mask(pdev, DMA_BIT_MASK(64)) && use_dac) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3080
		tp->cp_cmd |= PCIDAC;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3081
		dev->features |= NETIF_F_HIGHDMA;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3082
	} else {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3083
		rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3084
		if (rc < 0) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3085
			netif_err(tp, probe, dev, "DMA configuration failed\n");
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3086
			goto err_out_free_res_3;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3087
		}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3088
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3089
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3090
	/* ioremap MMIO region */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3091
	ioaddr = ioremap(pci_resource_start(pdev, region), R8169_REGS_SIZE);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3092
	if (!ioaddr) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3093
		netif_err(tp, probe, dev, "cannot remap MMIO, aborting\n");
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3094
		rc = -EIO;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3095
		goto err_out_free_res_3;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3096
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3097
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3098
	tp->pcie_cap = pci_find_capability(pdev, PCI_CAP_ID_EXP);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3099
	if (!tp->pcie_cap)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3100
		netif_info(tp, probe, dev, "no PCI Express capability\n");
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3101
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3102
	RTL_W16(IntrMask, 0x0000);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3103
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3104
	/* Soft reset the chip. */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3105
	RTL_W8(ChipCmd, CmdReset);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3106
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3107
	/* Check that the chip has finished the reset. */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3108
	for (i = 0; i < 100; i++) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3109
		if ((RTL_R8(ChipCmd) & CmdReset) == 0)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3110
			break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3111
		msleep_interruptible(1);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3112
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3113
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3114
	RTL_W16(IntrStatus, 0xffff);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3115
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3116
	pci_set_master(pdev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3117
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3118
	/* Identify chip attached to board */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3119
	rtl8169_get_mac_version(tp, ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3120
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3121
	/* Use appropriate default if unknown */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3122
	if (tp->mac_version == RTL_GIGA_MAC_NONE) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3123
		netif_notice(tp, probe, dev,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3124
			     "unknown MAC, using family default\n");
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3125
		tp->mac_version = cfg->default_ver;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3126
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3127
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3128
	rtl8169_print_mac_version(tp);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3129
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3130
	for (i = 0; i < ARRAY_SIZE(rtl_chip_info); i++) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3131
		if (tp->mac_version == rtl_chip_info[i].mac_version)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3132
			break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3133
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3134
	if (i == ARRAY_SIZE(rtl_chip_info)) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3135
		dev_err(&pdev->dev,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3136
			"driver bug, MAC version not found in rtl_chip_info\n");
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3137
		goto err_out_msi_4;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3138
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3139
	tp->chipset = i;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3140
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3141
	RTL_W8(Cfg9346, Cfg9346_Unlock);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3142
	RTL_W8(Config1, RTL_R8(Config1) | PMEnable);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3143
	RTL_W8(Config5, RTL_R8(Config5) & PMEStatus);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3144
	if ((RTL_R8(Config3) & (LinkUp | MagicPacket)) != 0)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3145
		tp->features |= RTL_FEATURE_WOL;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3146
	if ((RTL_R8(Config5) & (UWF | BWF | MWF)) != 0)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3147
		tp->features |= RTL_FEATURE_WOL;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3148
	tp->features |= rtl_try_msi(pdev, ioaddr, cfg);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3149
	RTL_W8(Cfg9346, Cfg9346_Lock);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3150
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3151
	if ((tp->mac_version <= RTL_GIGA_MAC_VER_06) &&
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3152
	    (RTL_R8(PHYstatus) & TBI_Enable)) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3153
		tp->set_speed = rtl8169_set_speed_tbi;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3154
		tp->get_settings = rtl8169_gset_tbi;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3155
		tp->phy_reset_enable = rtl8169_tbi_reset_enable;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3156
		tp->phy_reset_pending = rtl8169_tbi_reset_pending;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3157
		tp->link_ok = rtl8169_tbi_link_ok;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3158
		tp->do_ioctl = rtl_tbi_ioctl;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3159
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3160
		tp->phy_1000_ctrl_reg = ADVERTISE_1000FULL; /* Implied by TBI */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3161
	} else {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3162
		tp->set_speed = rtl8169_set_speed_xmii;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3163
		tp->get_settings = rtl8169_gset_xmii;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3164
		tp->phy_reset_enable = rtl8169_xmii_reset_enable;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3165
		tp->phy_reset_pending = rtl8169_xmii_reset_pending;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3166
		tp->link_ok = rtl8169_xmii_link_ok;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3167
		tp->do_ioctl = rtl_xmii_ioctl;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3168
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3169
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3170
	spin_lock_init(&tp->lock);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3171
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3172
	tp->mmio_addr = ioaddr;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3173
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3174
	/* Get MAC address */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3175
	for (i = 0; i < MAC_ADDR_LEN; i++)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3176
		dev->dev_addr[i] = RTL_R8(MAC0 + i);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3177
	memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3178
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3179
	SET_ETHTOOL_OPS(dev, &rtl8169_ethtool_ops);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3180
	dev->watchdog_timeo = RTL8169_TX_TIMEOUT;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3181
	dev->irq = pdev->irq;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3182
	dev->base_addr = (unsigned long) ioaddr;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3183
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3184
	netif_napi_add(dev, &tp->napi, rtl8169_poll, R8169_NAPI_WEIGHT);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3185
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3186
#ifdef CONFIG_R8169_VLAN
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3187
	dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3188
#endif
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3189
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3190
	tp->intr_mask = 0xffff;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3191
	tp->align = cfg->align;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3192
	tp->hw_start = cfg->hw_start;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3193
	tp->intr_event = cfg->intr_event;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3194
	tp->napi_event = cfg->napi_event;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3195
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3196
	init_timer(&tp->timer);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3197
	tp->timer.data = (unsigned long) dev;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3198
	tp->timer.function = rtl8169_phy_timer;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3199
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3200
	rc = register_netdev(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3201
	if (rc < 0)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3202
		goto err_out_msi_4;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3203
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3204
	pci_set_drvdata(pdev, dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3205
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3206
	netif_info(tp, probe, dev, "%s at 0x%lx, %pM, XID %08x IRQ %d\n",
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3207
		   rtl_chip_info[tp->chipset].name,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3208
		   dev->base_addr, dev->dev_addr,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3209
		   (u32)(RTL_R32(TxConfig) & 0x9cf0f8ff), dev->irq);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3210
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3211
	rtl8169_init_phy(dev, tp);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3212
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3213
	/*
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3214
	 * Pretend we are using VLANs; This bypasses a nasty bug where
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3215
	 * Interrupts stop flowing on high load on 8110SCd controllers.
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3216
	 */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3217
	if (tp->mac_version == RTL_GIGA_MAC_VER_05)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3218
		RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) | RxVlan);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3219
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3220
	device_set_wakeup_enable(&pdev->dev, tp->features & RTL_FEATURE_WOL);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3221
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3222
	if (pci_dev_run_wake(pdev)) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3223
		pm_runtime_set_active(&pdev->dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3224
		pm_runtime_enable(&pdev->dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3225
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3226
	pm_runtime_idle(&pdev->dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3227
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3228
out:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3229
	return rc;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3230
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3231
err_out_msi_4:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3232
	rtl_disable_msi(pdev, tp);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3233
	iounmap(ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3234
err_out_free_res_3:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3235
	pci_release_regions(pdev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3236
err_out_mwi_2:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3237
	pci_clear_mwi(pdev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3238
	pci_disable_device(pdev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3239
err_out_free_dev_1:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3240
	free_netdev(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3241
	goto out;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3242
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3243
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3244
static void __devexit rtl8169_remove_one(struct pci_dev *pdev)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3245
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3246
	struct net_device *dev = pci_get_drvdata(pdev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3247
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3248
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3249
	pm_runtime_get_sync(&pdev->dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3250
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3251
	flush_scheduled_work();
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3252
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3253
	unregister_netdev(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3254
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3255
	if (pci_dev_run_wake(pdev)) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3256
		pm_runtime_disable(&pdev->dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3257
		pm_runtime_set_suspended(&pdev->dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3258
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3259
	pm_runtime_put_noidle(&pdev->dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3260
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3261
	/* restore original MAC address */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3262
	rtl_rar_set(tp, dev->perm_addr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3263
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3264
	rtl_disable_msi(pdev, tp);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3265
	rtl8169_release_board(pdev, dev, tp->mmio_addr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3266
	pci_set_drvdata(pdev, NULL);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3267
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3268
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3269
static void rtl8169_set_rxbufsize(struct rtl8169_private *tp,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3270
				  unsigned int mtu)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3271
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3272
	unsigned int max_frame = mtu + VLAN_ETH_HLEN + ETH_FCS_LEN;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3273
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3274
	if (max_frame != 16383)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3275
		printk(KERN_WARNING PFX "WARNING! Changing of MTU on this "
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3276
			"NIC may lead to frame reception errors!\n");
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3277
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3278
	tp->rx_buf_sz = (max_frame > RX_BUF_SIZE) ? max_frame : RX_BUF_SIZE;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3279
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3280
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3281
static int rtl8169_open(struct net_device *dev)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3282
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3283
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3284
	struct pci_dev *pdev = tp->pci_dev;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3285
	int retval = -ENOMEM;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3286
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3287
	pm_runtime_get_sync(&pdev->dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3288
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3289
	/*
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3290
	 * Note that we use a magic value here, its wierd I know
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3291
	 * its done because, some subset of rtl8169 hardware suffers from
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3292
	 * a problem in which frames received that are longer than
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3293
	 * the size set in RxMaxSize register return garbage sizes
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3294
	 * when received.  To avoid this we need to turn off filtering,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3295
	 * which is done by setting a value of 16383 in the RxMaxSize register
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3296
	 * and allocating 16k frames to handle the largest possible rx value
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3297
	 * thats what the magic math below does.
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3298
	 */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3299
	rtl8169_set_rxbufsize(tp, 16383 - VLAN_ETH_HLEN - ETH_FCS_LEN);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3300
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3301
	/*
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3302
	 * Rx and Tx desscriptors needs 256 bytes alignment.
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3303
	 * pci_alloc_consistent provides more.
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3304
	 */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3305
	tp->TxDescArray = pci_alloc_consistent(pdev, R8169_TX_RING_BYTES,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3306
					       &tp->TxPhyAddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3307
	if (!tp->TxDescArray)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3308
		goto err_pm_runtime_put;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3309
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3310
	tp->RxDescArray = pci_alloc_consistent(pdev, R8169_RX_RING_BYTES,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3311
					       &tp->RxPhyAddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3312
	if (!tp->RxDescArray)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3313
		goto err_free_tx_0;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3314
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3315
	retval = rtl8169_init_ring(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3316
	if (retval < 0)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3317
		goto err_free_rx_1;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3318
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3319
	INIT_DELAYED_WORK(&tp->task, NULL);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3320
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3321
	smp_mb();
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3322
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3323
	retval = request_irq(dev->irq, rtl8169_interrupt,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3324
			     (tp->features & RTL_FEATURE_MSI) ? 0 : IRQF_SHARED,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3325
			     dev->name, dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3326
	if (retval < 0)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3327
		goto err_release_ring_2;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3328
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3329
	napi_enable(&tp->napi);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3330
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3331
	rtl_hw_start(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3332
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3333
	rtl8169_request_timer(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3334
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3335
	tp->saved_wolopts = 0;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3336
	pm_runtime_put_noidle(&pdev->dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3337
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3338
	rtl8169_check_link_status(dev, tp, tp->mmio_addr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3339
out:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3340
	return retval;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3341
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3342
err_release_ring_2:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3343
	rtl8169_rx_clear(tp);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3344
err_free_rx_1:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3345
	pci_free_consistent(pdev, R8169_RX_RING_BYTES, tp->RxDescArray,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3346
			    tp->RxPhyAddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3347
	tp->RxDescArray = NULL;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3348
err_free_tx_0:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3349
	pci_free_consistent(pdev, R8169_TX_RING_BYTES, tp->TxDescArray,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3350
			    tp->TxPhyAddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3351
	tp->TxDescArray = NULL;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3352
err_pm_runtime_put:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3353
	pm_runtime_put_noidle(&pdev->dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3354
	goto out;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3355
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3356
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3357
static void rtl8169_hw_reset(void __iomem *ioaddr)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3358
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3359
	/* Disable interrupts */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3360
	rtl8169_irq_mask_and_ack(ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3361
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3362
	/* Reset the chipset */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3363
	RTL_W8(ChipCmd, CmdReset);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3364
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3365
	/* PCI commit */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3366
	RTL_R8(ChipCmd);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3367
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3368
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3369
static void rtl_set_rx_tx_config_registers(struct rtl8169_private *tp)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3370
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3371
	void __iomem *ioaddr = tp->mmio_addr;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3372
	u32 cfg = rtl8169_rx_config;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3373
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3374
	cfg |= (RTL_R32(RxConfig) & rtl_chip_info[tp->chipset].RxConfigMask);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3375
	RTL_W32(RxConfig, cfg);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3376
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3377
	/* Set DMA burst size and Interframe Gap Time */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3378
	RTL_W32(TxConfig, (TX_DMA_BURST << TxDMAShift) |
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3379
		(InterFrameGap << TxInterFrameGapShift));
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3380
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3381
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3382
static void rtl_hw_start(struct net_device *dev)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3383
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3384
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3385
	void __iomem *ioaddr = tp->mmio_addr;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3386
	unsigned int i;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3387
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3388
	/* Soft reset the chip. */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3389
	RTL_W8(ChipCmd, CmdReset);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3390
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3391
	/* Check that the chip has finished the reset. */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3392
	for (i = 0; i < 100; i++) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3393
		if ((RTL_R8(ChipCmd) & CmdReset) == 0)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3394
			break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3395
		msleep_interruptible(1);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3396
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3397
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3398
	tp->hw_start(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3399
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3400
	netif_start_queue(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3401
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3402
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3403
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3404
static void rtl_set_rx_tx_desc_registers(struct rtl8169_private *tp,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3405
					 void __iomem *ioaddr)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3406
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3407
	/*
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3408
	 * Magic spell: some iop3xx ARM board needs the TxDescAddrHigh
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3409
	 * register to be written before TxDescAddrLow to work.
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3410
	 * Switching from MMIO to I/O access fixes the issue as well.
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3411
	 */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3412
	RTL_W32(TxDescStartAddrHigh, ((u64) tp->TxPhyAddr) >> 32);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3413
	RTL_W32(TxDescStartAddrLow, ((u64) tp->TxPhyAddr) & DMA_BIT_MASK(32));
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3414
	RTL_W32(RxDescAddrHigh, ((u64) tp->RxPhyAddr) >> 32);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3415
	RTL_W32(RxDescAddrLow, ((u64) tp->RxPhyAddr) & DMA_BIT_MASK(32));
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3416
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3417
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3418
static u16 rtl_rw_cpluscmd(void __iomem *ioaddr)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3419
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3420
	u16 cmd;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3421
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3422
	cmd = RTL_R16(CPlusCmd);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3423
	RTL_W16(CPlusCmd, cmd);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3424
	return cmd;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3425
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3426
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3427
static void rtl_set_rx_max_size(void __iomem *ioaddr, unsigned int rx_buf_sz)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3428
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3429
	/* Low hurts. Let's disable the filtering. */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3430
	RTL_W16(RxMaxSize, rx_buf_sz + 1);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3431
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3432
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3433
static void rtl8169_set_magic_reg(void __iomem *ioaddr, unsigned mac_version)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3434
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3435
	static const struct {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3436
		u32 mac_version;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3437
		u32 clk;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3438
		u32 val;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3439
	} cfg2_info [] = {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3440
		{ RTL_GIGA_MAC_VER_05, PCI_Clock_33MHz, 0x000fff00 }, // 8110SCd
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3441
		{ RTL_GIGA_MAC_VER_05, PCI_Clock_66MHz, 0x000fffff },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3442
		{ RTL_GIGA_MAC_VER_06, PCI_Clock_33MHz, 0x00ffff00 }, // 8110SCe
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3443
		{ RTL_GIGA_MAC_VER_06, PCI_Clock_66MHz, 0x00ffffff }
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3444
	}, *p = cfg2_info;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3445
	unsigned int i;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3446
	u32 clk;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3447
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3448
	clk = RTL_R8(Config2) & PCI_Clock_66MHz;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3449
	for (i = 0; i < ARRAY_SIZE(cfg2_info); i++, p++) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3450
		if ((p->mac_version == mac_version) && (p->clk == clk)) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3451
			RTL_W32(0x7c, p->val);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3452
			break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3453
		}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3454
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3455
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3456
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3457
static void rtl_hw_start_8169(struct net_device *dev)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3458
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3459
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3460
	void __iomem *ioaddr = tp->mmio_addr;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3461
	struct pci_dev *pdev = tp->pci_dev;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3462
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3463
	if (tp->mac_version == RTL_GIGA_MAC_VER_05) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3464
		RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) | PCIMulRW);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3465
		pci_write_config_byte(pdev, PCI_CACHE_LINE_SIZE, 0x08);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3466
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3467
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3468
	RTL_W8(Cfg9346, Cfg9346_Unlock);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3469
	if ((tp->mac_version == RTL_GIGA_MAC_VER_01) ||
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3470
	    (tp->mac_version == RTL_GIGA_MAC_VER_02) ||
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3471
	    (tp->mac_version == RTL_GIGA_MAC_VER_03) ||
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3472
	    (tp->mac_version == RTL_GIGA_MAC_VER_04))
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3473
		RTL_W8(ChipCmd, CmdTxEnb | CmdRxEnb);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3474
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3475
	RTL_W8(EarlyTxThres, EarlyTxThld);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3476
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3477
	rtl_set_rx_max_size(ioaddr, tp->rx_buf_sz);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3478
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3479
	if ((tp->mac_version == RTL_GIGA_MAC_VER_01) ||
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3480
	    (tp->mac_version == RTL_GIGA_MAC_VER_02) ||
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3481
	    (tp->mac_version == RTL_GIGA_MAC_VER_03) ||
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3482
	    (tp->mac_version == RTL_GIGA_MAC_VER_04))
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3483
		rtl_set_rx_tx_config_registers(tp);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3484
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3485
	tp->cp_cmd |= rtl_rw_cpluscmd(ioaddr) | PCIMulRW;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3486
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3487
	if ((tp->mac_version == RTL_GIGA_MAC_VER_02) ||
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3488
	    (tp->mac_version == RTL_GIGA_MAC_VER_03)) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3489
		dprintk("Set MAC Reg C+CR Offset 0xE0. "
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3490
			"Bit-3 and bit-14 MUST be 1\n");
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3491
		tp->cp_cmd |= (1 << 14);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3492
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3493
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3494
	RTL_W16(CPlusCmd, tp->cp_cmd);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3495
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3496
	rtl8169_set_magic_reg(ioaddr, tp->mac_version);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3497
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3498
	/*
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3499
	 * Undocumented corner. Supposedly:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3500
	 * (TxTimer << 12) | (TxPackets << 8) | (RxTimer << 4) | RxPackets
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3501
	 */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3502
	RTL_W16(IntrMitigate, 0x0000);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3503
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3504
	rtl_set_rx_tx_desc_registers(tp, ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3505
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3506
	if ((tp->mac_version != RTL_GIGA_MAC_VER_01) &&
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3507
	    (tp->mac_version != RTL_GIGA_MAC_VER_02) &&
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3508
	    (tp->mac_version != RTL_GIGA_MAC_VER_03) &&
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3509
	    (tp->mac_version != RTL_GIGA_MAC_VER_04)) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3510
		RTL_W8(ChipCmd, CmdTxEnb | CmdRxEnb);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3511
		rtl_set_rx_tx_config_registers(tp);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3512
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3513
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3514
	RTL_W8(Cfg9346, Cfg9346_Lock);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3515
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3516
	/* Initially a 10 us delay. Turned it into a PCI commit. - FR */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3517
	RTL_R8(IntrMask);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3518
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3519
	RTL_W32(RxMissed, 0);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3520
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3521
	rtl_set_rx_mode(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3522
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3523
	/* no early-rx interrupts */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3524
	RTL_W16(MultiIntr, RTL_R16(MultiIntr) & 0xF000);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3525
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3526
	/* Enable all known interrupts by setting the interrupt mask. */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3527
	RTL_W16(IntrMask, tp->intr_event);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3528
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3529
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3530
static void rtl_tx_performance_tweak(struct pci_dev *pdev, u16 force)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3531
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3532
	struct net_device *dev = pci_get_drvdata(pdev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3533
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3534
	int cap = tp->pcie_cap;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3535
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3536
	if (cap) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3537
		u16 ctl;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3538
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3539
		pci_read_config_word(pdev, cap + PCI_EXP_DEVCTL, &ctl);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3540
		ctl = (ctl & ~PCI_EXP_DEVCTL_READRQ) | force;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3541
		pci_write_config_word(pdev, cap + PCI_EXP_DEVCTL, ctl);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3542
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3543
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3544
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3545
static void rtl_csi_access_enable(void __iomem *ioaddr)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3546
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3547
	u32 csi;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3548
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3549
	csi = rtl_csi_read(ioaddr, 0x070c) & 0x00ffffff;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3550
	rtl_csi_write(ioaddr, 0x070c, csi | 0x27000000);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3551
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3552
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3553
struct ephy_info {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3554
	unsigned int offset;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3555
	u16 mask;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3556
	u16 bits;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3557
};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3558
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3559
static void rtl_ephy_init(void __iomem *ioaddr, const struct ephy_info *e, int len)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3560
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3561
	u16 w;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3562
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3563
	while (len-- > 0) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3564
		w = (rtl_ephy_read(ioaddr, e->offset) & ~e->mask) | e->bits;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3565
		rtl_ephy_write(ioaddr, e->offset, w);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3566
		e++;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3567
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3568
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3569
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3570
static void rtl_disable_clock_request(struct pci_dev *pdev)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3571
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3572
	struct net_device *dev = pci_get_drvdata(pdev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3573
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3574
	int cap = tp->pcie_cap;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3575
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3576
	if (cap) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3577
		u16 ctl;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3578
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3579
		pci_read_config_word(pdev, cap + PCI_EXP_LNKCTL, &ctl);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3580
		ctl &= ~PCI_EXP_LNKCTL_CLKREQ_EN;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3581
		pci_write_config_word(pdev, cap + PCI_EXP_LNKCTL, ctl);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3582
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3583
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3584
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3585
#define R8168_CPCMD_QUIRK_MASK (\
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3586
	EnableBist | \
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3587
	Mac_dbgo_oe | \
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3588
	Force_half_dup | \
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3589
	Force_rxflow_en | \
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3590
	Force_txflow_en | \
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3591
	Cxpl_dbg_sel | \
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3592
	ASF | \
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3593
	PktCntrDisable | \
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3594
	Mac_dbgo_sel)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3595
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3596
static void rtl_hw_start_8168bb(void __iomem *ioaddr, struct pci_dev *pdev)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3597
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3598
	RTL_W8(Config3, RTL_R8(Config3) & ~Beacon_en);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3599
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3600
	RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3601
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3602
	rtl_tx_performance_tweak(pdev,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3603
		(0x5 << MAX_READ_REQUEST_SHIFT) | PCI_EXP_DEVCTL_NOSNOOP_EN);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3604
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3605
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3606
static void rtl_hw_start_8168bef(void __iomem *ioaddr, struct pci_dev *pdev)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3607
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3608
	rtl_hw_start_8168bb(ioaddr, pdev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3609
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3610
	RTL_W8(EarlyTxThres, EarlyTxThld);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3611
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3612
	RTL_W8(Config4, RTL_R8(Config4) & ~(1 << 0));
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3613
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3614
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3615
static void __rtl_hw_start_8168cp(void __iomem *ioaddr, struct pci_dev *pdev)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3616
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3617
	RTL_W8(Config1, RTL_R8(Config1) | Speed_down);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3618
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3619
	RTL_W8(Config3, RTL_R8(Config3) & ~Beacon_en);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3620
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3621
	rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3622
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3623
	rtl_disable_clock_request(pdev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3624
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3625
	RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3626
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3627
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3628
static void rtl_hw_start_8168cp_1(void __iomem *ioaddr, struct pci_dev *pdev)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3629
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3630
	static const struct ephy_info e_info_8168cp[] = {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3631
		{ 0x01, 0,	0x0001 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3632
		{ 0x02, 0x0800,	0x1000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3633
		{ 0x03, 0,	0x0042 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3634
		{ 0x06, 0x0080,	0x0000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3635
		{ 0x07, 0,	0x2000 }
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3636
	};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3637
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3638
	rtl_csi_access_enable(ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3639
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3640
	rtl_ephy_init(ioaddr, e_info_8168cp, ARRAY_SIZE(e_info_8168cp));
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3641
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3642
	__rtl_hw_start_8168cp(ioaddr, pdev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3643
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3644
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3645
static void rtl_hw_start_8168cp_2(void __iomem *ioaddr, struct pci_dev *pdev)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3646
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3647
	rtl_csi_access_enable(ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3648
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3649
	RTL_W8(Config3, RTL_R8(Config3) & ~Beacon_en);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3650
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3651
	rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3652
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3653
	RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3654
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3655
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3656
static void rtl_hw_start_8168cp_3(void __iomem *ioaddr, struct pci_dev *pdev)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3657
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3658
	rtl_csi_access_enable(ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3659
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3660
	RTL_W8(Config3, RTL_R8(Config3) & ~Beacon_en);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3661
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3662
	/* Magic. */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3663
	RTL_W8(DBG_REG, 0x20);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3664
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3665
	RTL_W8(EarlyTxThres, EarlyTxThld);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3666
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3667
	rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3668
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3669
	RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3670
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3671
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3672
static void rtl_hw_start_8168c_1(void __iomem *ioaddr, struct pci_dev *pdev)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3673
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3674
	static const struct ephy_info e_info_8168c_1[] = {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3675
		{ 0x02, 0x0800,	0x1000 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3676
		{ 0x03, 0,	0x0002 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3677
		{ 0x06, 0x0080,	0x0000 }
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3678
	};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3679
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3680
	rtl_csi_access_enable(ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3681
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3682
	RTL_W8(DBG_REG, 0x06 | FIX_NAK_1 | FIX_NAK_2);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3683
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3684
	rtl_ephy_init(ioaddr, e_info_8168c_1, ARRAY_SIZE(e_info_8168c_1));
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3685
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3686
	__rtl_hw_start_8168cp(ioaddr, pdev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3687
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3688
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3689
static void rtl_hw_start_8168c_2(void __iomem *ioaddr, struct pci_dev *pdev)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3690
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3691
	static const struct ephy_info e_info_8168c_2[] = {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3692
		{ 0x01, 0,	0x0001 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3693
		{ 0x03, 0x0400,	0x0220 }
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3694
	};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3695
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3696
	rtl_csi_access_enable(ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3697
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3698
	rtl_ephy_init(ioaddr, e_info_8168c_2, ARRAY_SIZE(e_info_8168c_2));
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3699
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3700
	__rtl_hw_start_8168cp(ioaddr, pdev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3701
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3702
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3703
static void rtl_hw_start_8168c_3(void __iomem *ioaddr, struct pci_dev *pdev)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3704
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3705
	rtl_hw_start_8168c_2(ioaddr, pdev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3706
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3707
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3708
static void rtl_hw_start_8168c_4(void __iomem *ioaddr, struct pci_dev *pdev)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3709
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3710
	rtl_csi_access_enable(ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3711
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3712
	__rtl_hw_start_8168cp(ioaddr, pdev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3713
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3714
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3715
static void rtl_hw_start_8168d(void __iomem *ioaddr, struct pci_dev *pdev)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3716
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3717
	rtl_csi_access_enable(ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3718
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3719
	rtl_disable_clock_request(pdev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3720
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3721
	RTL_W8(EarlyTxThres, EarlyTxThld);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3722
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3723
	rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3724
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3725
	RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3726
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3727
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3728
static void rtl_hw_start_8168(struct net_device *dev)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3729
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3730
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3731
	void __iomem *ioaddr = tp->mmio_addr;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3732
	struct pci_dev *pdev = tp->pci_dev;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3733
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3734
	RTL_W8(Cfg9346, Cfg9346_Unlock);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3735
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3736
	RTL_W8(EarlyTxThres, EarlyTxThld);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3737
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3738
	rtl_set_rx_max_size(ioaddr, tp->rx_buf_sz);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3739
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3740
	tp->cp_cmd |= RTL_R16(CPlusCmd) | PktCntrDisable | INTT_1;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3741
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3742
	RTL_W16(CPlusCmd, tp->cp_cmd);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3743
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3744
	RTL_W16(IntrMitigate, 0x5151);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3745
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3746
	/* Work around for RxFIFO overflow. */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3747
	if (tp->mac_version == RTL_GIGA_MAC_VER_11) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3748
		tp->intr_event |= RxFIFOOver | PCSTimeout;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3749
		tp->intr_event &= ~RxOverflow;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3750
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3751
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3752
	rtl_set_rx_tx_desc_registers(tp, ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3753
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3754
	rtl_set_rx_mode(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3755
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3756
	RTL_W32(TxConfig, (TX_DMA_BURST << TxDMAShift) |
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3757
		(InterFrameGap << TxInterFrameGapShift));
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3758
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3759
	RTL_R8(IntrMask);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3760
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3761
	switch (tp->mac_version) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3762
	case RTL_GIGA_MAC_VER_11:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3763
		rtl_hw_start_8168bb(ioaddr, pdev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3764
	break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3765
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3766
	case RTL_GIGA_MAC_VER_12:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3767
	case RTL_GIGA_MAC_VER_17:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3768
		rtl_hw_start_8168bef(ioaddr, pdev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3769
	break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3770
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3771
	case RTL_GIGA_MAC_VER_18:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3772
		rtl_hw_start_8168cp_1(ioaddr, pdev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3773
	break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3774
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3775
	case RTL_GIGA_MAC_VER_19:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3776
		rtl_hw_start_8168c_1(ioaddr, pdev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3777
	break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3778
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3779
	case RTL_GIGA_MAC_VER_20:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3780
		rtl_hw_start_8168c_2(ioaddr, pdev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3781
	break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3782
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3783
	case RTL_GIGA_MAC_VER_21:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3784
		rtl_hw_start_8168c_3(ioaddr, pdev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3785
	break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3786
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3787
	case RTL_GIGA_MAC_VER_22:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3788
		rtl_hw_start_8168c_4(ioaddr, pdev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3789
	break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3790
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3791
	case RTL_GIGA_MAC_VER_23:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3792
		rtl_hw_start_8168cp_2(ioaddr, pdev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3793
	break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3794
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3795
	case RTL_GIGA_MAC_VER_24:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3796
		rtl_hw_start_8168cp_3(ioaddr, pdev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3797
	break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3798
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3799
	case RTL_GIGA_MAC_VER_25:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3800
	case RTL_GIGA_MAC_VER_26:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3801
	case RTL_GIGA_MAC_VER_27:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3802
		rtl_hw_start_8168d(ioaddr, pdev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3803
	break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3804
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3805
	default:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3806
		printk(KERN_ERR PFX "%s: unknown chipset (mac_version = %d).\n",
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3807
			dev->name, tp->mac_version);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3808
	break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3809
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3810
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3811
	RTL_W8(ChipCmd, CmdTxEnb | CmdRxEnb);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3812
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3813
	RTL_W8(Cfg9346, Cfg9346_Lock);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3814
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3815
	RTL_W16(MultiIntr, RTL_R16(MultiIntr) & 0xF000);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3816
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3817
	RTL_W16(IntrMask, tp->intr_event);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3818
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3819
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3820
#define R810X_CPCMD_QUIRK_MASK (\
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3821
	EnableBist | \
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3822
	Mac_dbgo_oe | \
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3823
	Force_half_dup | \
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3824
	Force_rxflow_en | \
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3825
	Force_txflow_en | \
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3826
	Cxpl_dbg_sel | \
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3827
	ASF | \
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3828
	PktCntrDisable | \
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3829
	PCIDAC | \
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3830
	PCIMulRW)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3831
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3832
static void rtl_hw_start_8102e_1(void __iomem *ioaddr, struct pci_dev *pdev)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3833
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3834
	static const struct ephy_info e_info_8102e_1[] = {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3835
		{ 0x01,	0, 0x6e65 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3836
		{ 0x02,	0, 0x091f },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3837
		{ 0x03,	0, 0xc2f9 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3838
		{ 0x06,	0, 0xafb5 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3839
		{ 0x07,	0, 0x0e00 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3840
		{ 0x19,	0, 0xec80 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3841
		{ 0x01,	0, 0x2e65 },
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3842
		{ 0x01,	0, 0x6e65 }
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3843
	};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3844
	u8 cfg1;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3845
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3846
	rtl_csi_access_enable(ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3847
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3848
	RTL_W8(DBG_REG, FIX_NAK_1);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3849
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3850
	rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3851
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3852
	RTL_W8(Config1,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3853
	       LEDS1 | LEDS0 | Speed_down | MEMMAP | IOMAP | VPD | PMEnable);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3854
	RTL_W8(Config3, RTL_R8(Config3) & ~Beacon_en);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3855
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3856
	cfg1 = RTL_R8(Config1);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3857
	if ((cfg1 & LEDS0) && (cfg1 & LEDS1))
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3858
		RTL_W8(Config1, cfg1 & ~LEDS0);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3859
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3860
	RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R810X_CPCMD_QUIRK_MASK);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3861
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3862
	rtl_ephy_init(ioaddr, e_info_8102e_1, ARRAY_SIZE(e_info_8102e_1));
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3863
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3864
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3865
static void rtl_hw_start_8102e_2(void __iomem *ioaddr, struct pci_dev *pdev)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3866
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3867
	rtl_csi_access_enable(ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3868
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3869
	rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3870
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3871
	RTL_W8(Config1, MEMMAP | IOMAP | VPD | PMEnable);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3872
	RTL_W8(Config3, RTL_R8(Config3) & ~Beacon_en);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3873
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3874
	RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R810X_CPCMD_QUIRK_MASK);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3875
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3876
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3877
static void rtl_hw_start_8102e_3(void __iomem *ioaddr, struct pci_dev *pdev)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3878
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3879
	rtl_hw_start_8102e_2(ioaddr, pdev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3880
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3881
	rtl_ephy_write(ioaddr, 0x03, 0xc2f9);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3882
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3883
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3884
static void rtl_hw_start_8101(struct net_device *dev)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3885
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3886
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3887
	void __iomem *ioaddr = tp->mmio_addr;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3888
	struct pci_dev *pdev = tp->pci_dev;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3889
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3890
	if ((tp->mac_version == RTL_GIGA_MAC_VER_13) ||
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3891
	    (tp->mac_version == RTL_GIGA_MAC_VER_16)) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3892
		int cap = tp->pcie_cap;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3893
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3894
		if (cap) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3895
			pci_write_config_word(pdev, cap + PCI_EXP_DEVCTL,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3896
					      PCI_EXP_DEVCTL_NOSNOOP_EN);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3897
		}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3898
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3899
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3900
	switch (tp->mac_version) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3901
	case RTL_GIGA_MAC_VER_07:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3902
		rtl_hw_start_8102e_1(ioaddr, pdev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3903
		break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3904
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3905
	case RTL_GIGA_MAC_VER_08:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3906
		rtl_hw_start_8102e_3(ioaddr, pdev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3907
		break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3908
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3909
	case RTL_GIGA_MAC_VER_09:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3910
		rtl_hw_start_8102e_2(ioaddr, pdev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3911
		break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3912
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3913
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3914
	RTL_W8(Cfg9346, Cfg9346_Unlock);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3915
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3916
	RTL_W8(EarlyTxThres, EarlyTxThld);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3917
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3918
	rtl_set_rx_max_size(ioaddr, tp->rx_buf_sz);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3919
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3920
	tp->cp_cmd |= rtl_rw_cpluscmd(ioaddr) | PCIMulRW;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3921
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3922
	RTL_W16(CPlusCmd, tp->cp_cmd);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3923
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3924
	RTL_W16(IntrMitigate, 0x0000);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3925
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3926
	rtl_set_rx_tx_desc_registers(tp, ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3927
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3928
	RTL_W8(ChipCmd, CmdTxEnb | CmdRxEnb);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3929
	rtl_set_rx_tx_config_registers(tp);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3930
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3931
	RTL_W8(Cfg9346, Cfg9346_Lock);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3932
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3933
	RTL_R8(IntrMask);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3934
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3935
	rtl_set_rx_mode(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3936
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3937
	RTL_W8(ChipCmd, CmdTxEnb | CmdRxEnb);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3938
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3939
	RTL_W16(MultiIntr, RTL_R16(MultiIntr) & 0xf000);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3940
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3941
	RTL_W16(IntrMask, tp->intr_event);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3942
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3943
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3944
static int rtl8169_change_mtu(struct net_device *dev, int new_mtu)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3945
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3946
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3947
	int ret = 0;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3948
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3949
	if (new_mtu < ETH_ZLEN || new_mtu > SafeMtu)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3950
		return -EINVAL;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3951
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3952
	dev->mtu = new_mtu;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3953
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3954
	if (!netif_running(dev))
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3955
		goto out;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3956
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3957
	rtl8169_down(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3958
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3959
	rtl8169_set_rxbufsize(tp, dev->mtu);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3960
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3961
	ret = rtl8169_init_ring(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3962
	if (ret < 0)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3963
		goto out;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3964
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3965
	napi_enable(&tp->napi);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3966
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3967
	rtl_hw_start(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3968
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3969
	rtl8169_request_timer(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3970
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3971
out:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3972
	return ret;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3973
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3974
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3975
static inline void rtl8169_make_unusable_by_asic(struct RxDesc *desc)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3976
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3977
	desc->addr = cpu_to_le64(0x0badbadbadbadbadull);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3978
	desc->opts1 &= ~cpu_to_le32(DescOwn | RsvdMask);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3979
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3980
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3981
static void rtl8169_free_rx_skb(struct rtl8169_private *tp,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3982
				struct sk_buff **sk_buff, struct RxDesc *desc)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3983
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3984
	struct pci_dev *pdev = tp->pci_dev;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3985
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3986
	pci_unmap_single(pdev, le64_to_cpu(desc->addr), tp->rx_buf_sz,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3987
			 PCI_DMA_FROMDEVICE);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3988
	dev_kfree_skb(*sk_buff);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3989
	*sk_buff = NULL;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3990
	rtl8169_make_unusable_by_asic(desc);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3991
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3992
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3993
static inline void rtl8169_mark_to_asic(struct RxDesc *desc, u32 rx_buf_sz)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3994
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3995
	u32 eor = le32_to_cpu(desc->opts1) & RingEnd;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3996
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3997
	desc->opts1 = cpu_to_le32(DescOwn | eor | rx_buf_sz);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3998
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3999
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4000
static inline void rtl8169_map_to_asic(struct RxDesc *desc, dma_addr_t mapping,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4001
				       u32 rx_buf_sz)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4002
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4003
	desc->addr = cpu_to_le64(mapping);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4004
	wmb();
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4005
	rtl8169_mark_to_asic(desc, rx_buf_sz);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4006
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4007
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4008
static struct sk_buff *rtl8169_alloc_rx_skb(struct pci_dev *pdev,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4009
					    struct net_device *dev,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4010
					    struct RxDesc *desc, int rx_buf_sz,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4011
					    unsigned int align, gfp_t gfp)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4012
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4013
	struct sk_buff *skb;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4014
	dma_addr_t mapping;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4015
	unsigned int pad;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4016
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4017
	pad = align ? align : NET_IP_ALIGN;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4018
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4019
	skb = __netdev_alloc_skb(dev, rx_buf_sz + pad, gfp);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4020
	if (!skb)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4021
		goto err_out;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4022
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4023
	skb_reserve(skb, align ? ((pad - 1) & (unsigned long)skb->data) : pad);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4024
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4025
	mapping = pci_map_single(pdev, skb->data, rx_buf_sz,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4026
				 PCI_DMA_FROMDEVICE);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4027
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4028
	rtl8169_map_to_asic(desc, mapping, rx_buf_sz);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4029
out:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4030
	return skb;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4031
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4032
err_out:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4033
	rtl8169_make_unusable_by_asic(desc);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4034
	goto out;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4035
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4036
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4037
static void rtl8169_rx_clear(struct rtl8169_private *tp)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4038
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4039
	unsigned int i;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4040
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4041
	for (i = 0; i < NUM_RX_DESC; i++) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4042
		if (tp->Rx_skbuff[i]) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4043
			rtl8169_free_rx_skb(tp, tp->Rx_skbuff + i,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4044
					    tp->RxDescArray + i);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4045
		}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4046
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4047
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4048
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4049
static u32 rtl8169_rx_fill(struct rtl8169_private *tp, struct net_device *dev,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4050
			   u32 start, u32 end, gfp_t gfp)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4051
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4052
	u32 cur;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4053
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4054
	for (cur = start; end - cur != 0; cur++) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4055
		struct sk_buff *skb;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4056
		unsigned int i = cur % NUM_RX_DESC;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4057
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4058
		WARN_ON((s32)(end - cur) < 0);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4059
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4060
		if (tp->Rx_skbuff[i])
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4061
			continue;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4062
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4063
		skb = rtl8169_alloc_rx_skb(tp->pci_dev, dev,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4064
					   tp->RxDescArray + i,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4065
					   tp->rx_buf_sz, tp->align, gfp);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4066
		if (!skb)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4067
			break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4068
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4069
		tp->Rx_skbuff[i] = skb;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4070
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4071
	return cur - start;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4072
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4073
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4074
static inline void rtl8169_mark_as_last_descriptor(struct RxDesc *desc)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4075
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4076
	desc->opts1 |= cpu_to_le32(RingEnd);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4077
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4078
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4079
static void rtl8169_init_ring_indexes(struct rtl8169_private *tp)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4080
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4081
	tp->dirty_tx = tp->dirty_rx = tp->cur_tx = tp->cur_rx = 0;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4082
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4083
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4084
static int rtl8169_init_ring(struct net_device *dev)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4085
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4086
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4087
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4088
	rtl8169_init_ring_indexes(tp);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4089
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4090
	memset(tp->tx_skb, 0x0, NUM_TX_DESC * sizeof(struct ring_info));
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4091
	memset(tp->Rx_skbuff, 0x0, NUM_RX_DESC * sizeof(struct sk_buff *));
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4092
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4093
	if (rtl8169_rx_fill(tp, dev, 0, NUM_RX_DESC, GFP_KERNEL) != NUM_RX_DESC)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4094
		goto err_out;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4095
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4096
	rtl8169_mark_as_last_descriptor(tp->RxDescArray + NUM_RX_DESC - 1);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4097
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4098
	return 0;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4099
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4100
err_out:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4101
	rtl8169_rx_clear(tp);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4102
	return -ENOMEM;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4103
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4104
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4105
static void rtl8169_unmap_tx_skb(struct pci_dev *pdev, struct ring_info *tx_skb,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4106
				 struct TxDesc *desc)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4107
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4108
	unsigned int len = tx_skb->len;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4109
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4110
	pci_unmap_single(pdev, le64_to_cpu(desc->addr), len, PCI_DMA_TODEVICE);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4111
	desc->opts1 = 0x00;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4112
	desc->opts2 = 0x00;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4113
	desc->addr = 0x00;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4114
	tx_skb->len = 0;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4115
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4116
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4117
static void rtl8169_tx_clear(struct rtl8169_private *tp)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4118
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4119
	unsigned int i;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4120
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4121
	for (i = tp->dirty_tx; i < tp->dirty_tx + NUM_TX_DESC; i++) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4122
		unsigned int entry = i % NUM_TX_DESC;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4123
		struct ring_info *tx_skb = tp->tx_skb + entry;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4124
		unsigned int len = tx_skb->len;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4125
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4126
		if (len) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4127
			struct sk_buff *skb = tx_skb->skb;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4128
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4129
			rtl8169_unmap_tx_skb(tp->pci_dev, tx_skb,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4130
					     tp->TxDescArray + entry);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4131
			if (skb) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4132
				dev_kfree_skb(skb);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4133
				tx_skb->skb = NULL;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4134
			}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4135
			tp->dev->stats.tx_dropped++;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4136
		}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4137
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4138
	tp->cur_tx = tp->dirty_tx = 0;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4139
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4140
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4141
static void rtl8169_schedule_work(struct net_device *dev, work_func_t task)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4142
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4143
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4144
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4145
	PREPARE_DELAYED_WORK(&tp->task, task);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4146
	schedule_delayed_work(&tp->task, 4);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4147
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4148
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4149
static void rtl8169_wait_for_quiescence(struct net_device *dev)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4150
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4151
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4152
	void __iomem *ioaddr = tp->mmio_addr;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4153
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4154
	synchronize_irq(dev->irq);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4155
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4156
	/* Wait for any pending NAPI task to complete */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4157
	napi_disable(&tp->napi);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4158
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4159
	rtl8169_irq_mask_and_ack(ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4160
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4161
	tp->intr_mask = 0xffff;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4162
	RTL_W16(IntrMask, tp->intr_event);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4163
	napi_enable(&tp->napi);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4164
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4165
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4166
static void rtl8169_reinit_task(struct work_struct *work)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4167
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4168
	struct rtl8169_private *tp =
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4169
		container_of(work, struct rtl8169_private, task.work);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4170
	struct net_device *dev = tp->dev;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4171
	int ret;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4172
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4173
	rtnl_lock();
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4174
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4175
	if (!netif_running(dev))
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4176
		goto out_unlock;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4177
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4178
	rtl8169_wait_for_quiescence(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4179
	rtl8169_close(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4180
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4181
	ret = rtl8169_open(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4182
	if (unlikely(ret < 0)) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4183
		if (net_ratelimit())
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4184
			netif_err(tp, drv, dev,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4185
				  "reinit failure (status = %d). Rescheduling\n",
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4186
				  ret);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4187
		rtl8169_schedule_work(dev, rtl8169_reinit_task);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4188
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4189
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4190
out_unlock:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4191
	rtnl_unlock();
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4192
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4193
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4194
static void rtl8169_reset_task(struct work_struct *work)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4195
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4196
	struct rtl8169_private *tp =
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4197
		container_of(work, struct rtl8169_private, task.work);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4198
	struct net_device *dev = tp->dev;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4199
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4200
	rtnl_lock();
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4201
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4202
	if (!netif_running(dev))
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4203
		goto out_unlock;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4204
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4205
	rtl8169_wait_for_quiescence(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4206
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4207
	rtl8169_rx_interrupt(dev, tp, tp->mmio_addr, ~(u32)0);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4208
	rtl8169_tx_clear(tp);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4209
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4210
	if (tp->dirty_rx == tp->cur_rx) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4211
		rtl8169_init_ring_indexes(tp);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4212
		rtl_hw_start(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4213
		netif_wake_queue(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4214
		rtl8169_check_link_status(dev, tp, tp->mmio_addr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4215
	} else {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4216
		if (net_ratelimit())
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4217
			netif_emerg(tp, intr, dev, "Rx buffers shortage\n");
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4218
		rtl8169_schedule_work(dev, rtl8169_reset_task);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4219
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4220
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4221
out_unlock:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4222
	rtnl_unlock();
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4223
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4224
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4225
static void rtl8169_tx_timeout(struct net_device *dev)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4226
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4227
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4228
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4229
	rtl8169_hw_reset(tp->mmio_addr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4230
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4231
	/* Let's wait a bit while any (async) irq lands on */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4232
	rtl8169_schedule_work(dev, rtl8169_reset_task);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4233
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4234
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4235
static int rtl8169_xmit_frags(struct rtl8169_private *tp, struct sk_buff *skb,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4236
			      u32 opts1)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4237
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4238
	struct skb_shared_info *info = skb_shinfo(skb);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4239
	unsigned int cur_frag, entry;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4240
	struct TxDesc * uninitialized_var(txd);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4241
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4242
	entry = tp->cur_tx;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4243
	for (cur_frag = 0; cur_frag < info->nr_frags; cur_frag++) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4244
		skb_frag_t *frag = info->frags + cur_frag;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4245
		dma_addr_t mapping;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4246
		u32 status, len;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4247
		void *addr;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4248
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4249
		entry = (entry + 1) % NUM_TX_DESC;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4250
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4251
		txd = tp->TxDescArray + entry;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4252
		len = frag->size;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4253
		addr = ((void *) page_address(frag->page)) + frag->page_offset;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4254
		mapping = pci_map_single(tp->pci_dev, addr, len, PCI_DMA_TODEVICE);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4255
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4256
		/* anti gcc 2.95.3 bugware (sic) */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4257
		status = opts1 | len | (RingEnd * !((entry + 1) % NUM_TX_DESC));
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4258
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4259
		txd->opts1 = cpu_to_le32(status);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4260
		txd->addr = cpu_to_le64(mapping);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4261
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4262
		tp->tx_skb[entry].len = len;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4263
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4264
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4265
	if (cur_frag) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4266
		tp->tx_skb[entry].skb = skb;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4267
		txd->opts1 |= cpu_to_le32(LastFrag);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4268
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4269
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4270
	return cur_frag;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4271
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4272
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4273
static inline u32 rtl8169_tso_csum(struct sk_buff *skb, struct net_device *dev)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4274
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4275
	if (dev->features & NETIF_F_TSO) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4276
		u32 mss = skb_shinfo(skb)->gso_size;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4277
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4278
		if (mss)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4279
			return LargeSend | ((mss & MSSMask) << MSSShift);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4280
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4281
	if (skb->ip_summed == CHECKSUM_PARTIAL) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4282
		const struct iphdr *ip = ip_hdr(skb);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4283
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4284
		if (ip->protocol == IPPROTO_TCP)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4285
			return IPCS | TCPCS;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4286
		else if (ip->protocol == IPPROTO_UDP)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4287
			return IPCS | UDPCS;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4288
		WARN_ON(1);	/* we need a WARN() */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4289
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4290
	return 0;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4291
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4292
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4293
static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4294
				      struct net_device *dev)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4295
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4296
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4297
	unsigned int frags, entry = tp->cur_tx % NUM_TX_DESC;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4298
	struct TxDesc *txd = tp->TxDescArray + entry;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4299
	void __iomem *ioaddr = tp->mmio_addr;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4300
	dma_addr_t mapping;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4301
	u32 status, len;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4302
	u32 opts1;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4303
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4304
	if (unlikely(TX_BUFFS_AVAIL(tp) < skb_shinfo(skb)->nr_frags)) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4305
		netif_err(tp, drv, dev, "BUG! Tx Ring full when queue awake!\n");
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4306
		goto err_stop;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4307
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4308
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4309
	if (unlikely(le32_to_cpu(txd->opts1) & DescOwn))
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4310
		goto err_stop;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4311
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4312
	opts1 = DescOwn | rtl8169_tso_csum(skb, dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4313
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4314
	frags = rtl8169_xmit_frags(tp, skb, opts1);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4315
	if (frags) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4316
		len = skb_headlen(skb);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4317
		opts1 |= FirstFrag;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4318
	} else {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4319
		len = skb->len;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4320
		opts1 |= FirstFrag | LastFrag;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4321
		tp->tx_skb[entry].skb = skb;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4322
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4323
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4324
	mapping = pci_map_single(tp->pci_dev, skb->data, len, PCI_DMA_TODEVICE);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4325
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4326
	tp->tx_skb[entry].len = len;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4327
	txd->addr = cpu_to_le64(mapping);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4328
	txd->opts2 = cpu_to_le32(rtl8169_tx_vlan_tag(tp, skb));
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4329
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4330
	wmb();
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4331
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4332
	/* anti gcc 2.95.3 bugware (sic) */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4333
	status = opts1 | len | (RingEnd * !((entry + 1) % NUM_TX_DESC));
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4334
	txd->opts1 = cpu_to_le32(status);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4335
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4336
	tp->cur_tx += frags + 1;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4337
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4338
	wmb();
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4339
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4340
	RTL_W8(TxPoll, NPQ);	/* set polling bit */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4341
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4342
	if (TX_BUFFS_AVAIL(tp) < MAX_SKB_FRAGS) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4343
		netif_stop_queue(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4344
		smp_rmb();
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4345
		if (TX_BUFFS_AVAIL(tp) >= MAX_SKB_FRAGS)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4346
			netif_wake_queue(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4347
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4348
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4349
	return NETDEV_TX_OK;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4350
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4351
err_stop:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4352
	netif_stop_queue(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4353
	dev->stats.tx_dropped++;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4354
	return NETDEV_TX_BUSY;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4355
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4356
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4357
static void rtl8169_pcierr_interrupt(struct net_device *dev)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4358
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4359
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4360
	struct pci_dev *pdev = tp->pci_dev;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4361
	void __iomem *ioaddr = tp->mmio_addr;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4362
	u16 pci_status, pci_cmd;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4363
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4364
	pci_read_config_word(pdev, PCI_COMMAND, &pci_cmd);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4365
	pci_read_config_word(pdev, PCI_STATUS, &pci_status);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4366
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4367
	netif_err(tp, intr, dev, "PCI error (cmd = 0x%04x, status = 0x%04x)\n",
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4368
		  pci_cmd, pci_status);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4369
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4370
	/*
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4371
	 * The recovery sequence below admits a very elaborated explanation:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4372
	 * - it seems to work;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4373
	 * - I did not see what else could be done;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4374
	 * - it makes iop3xx happy.
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4375
	 *
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4376
	 * Feel free to adjust to your needs.
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4377
	 */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4378
	if (pdev->broken_parity_status)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4379
		pci_cmd &= ~PCI_COMMAND_PARITY;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4380
	else
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4381
		pci_cmd |= PCI_COMMAND_SERR | PCI_COMMAND_PARITY;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4382
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4383
	pci_write_config_word(pdev, PCI_COMMAND, pci_cmd);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4384
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4385
	pci_write_config_word(pdev, PCI_STATUS,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4386
		pci_status & (PCI_STATUS_DETECTED_PARITY |
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4387
		PCI_STATUS_SIG_SYSTEM_ERROR | PCI_STATUS_REC_MASTER_ABORT |
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4388
		PCI_STATUS_REC_TARGET_ABORT | PCI_STATUS_SIG_TARGET_ABORT));
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4389
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4390
	/* The infamous DAC f*ckup only happens at boot time */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4391
	if ((tp->cp_cmd & PCIDAC) && !tp->dirty_rx && !tp->cur_rx) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4392
		netif_info(tp, intr, dev, "disabling PCI DAC\n");
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4393
		tp->cp_cmd &= ~PCIDAC;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4394
		RTL_W16(CPlusCmd, tp->cp_cmd);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4395
		dev->features &= ~NETIF_F_HIGHDMA;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4396
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4397
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4398
	rtl8169_hw_reset(ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4399
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4400
	rtl8169_schedule_work(dev, rtl8169_reinit_task);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4401
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4402
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4403
static void rtl8169_tx_interrupt(struct net_device *dev,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4404
				 struct rtl8169_private *tp,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4405
				 void __iomem *ioaddr)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4406
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4407
	unsigned int dirty_tx, tx_left;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4408
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4409
	dirty_tx = tp->dirty_tx;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4410
	smp_rmb();
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4411
	tx_left = tp->cur_tx - dirty_tx;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4412
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4413
	while (tx_left > 0) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4414
		unsigned int entry = dirty_tx % NUM_TX_DESC;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4415
		struct ring_info *tx_skb = tp->tx_skb + entry;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4416
		u32 len = tx_skb->len;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4417
		u32 status;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4418
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4419
		rmb();
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4420
		status = le32_to_cpu(tp->TxDescArray[entry].opts1);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4421
		if (status & DescOwn)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4422
			break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4423
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4424
		dev->stats.tx_bytes += len;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4425
		dev->stats.tx_packets++;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4426
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4427
		rtl8169_unmap_tx_skb(tp->pci_dev, tx_skb, tp->TxDescArray + entry);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4428
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4429
		if (status & LastFrag) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4430
			dev_kfree_skb(tx_skb->skb);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4431
			tx_skb->skb = NULL;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4432
		}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4433
		dirty_tx++;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4434
		tx_left--;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4435
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4436
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4437
	if (tp->dirty_tx != dirty_tx) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4438
		tp->dirty_tx = dirty_tx;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4439
		smp_wmb();
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4440
		if (netif_queue_stopped(dev) &&
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4441
		    (TX_BUFFS_AVAIL(tp) >= MAX_SKB_FRAGS)) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4442
			netif_wake_queue(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4443
		}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4444
		/*
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4445
		 * 8168 hack: TxPoll requests are lost when the Tx packets are
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4446
		 * too close. Let's kick an extra TxPoll request when a burst
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4447
		 * of start_xmit activity is detected (if it is not detected,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4448
		 * it is slow enough). -- FR
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4449
		 */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4450
		smp_rmb();
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4451
		if (tp->cur_tx != dirty_tx)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4452
			RTL_W8(TxPoll, NPQ);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4453
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4454
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4455
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4456
static inline int rtl8169_fragmented_frame(u32 status)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4457
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4458
	return (status & (FirstFrag | LastFrag)) != (FirstFrag | LastFrag);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4459
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4460
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4461
static inline void rtl8169_rx_csum(struct sk_buff *skb, struct RxDesc *desc)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4462
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4463
	u32 opts1 = le32_to_cpu(desc->opts1);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4464
	u32 status = opts1 & RxProtoMask;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4465
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4466
	if (((status == RxProtoTCP) && !(opts1 & TCPFail)) ||
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4467
	    ((status == RxProtoUDP) && !(opts1 & UDPFail)) ||
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4468
	    ((status == RxProtoIP) && !(opts1 & IPFail)))
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4469
		skb->ip_summed = CHECKSUM_UNNECESSARY;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4470
	else
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4471
		skb->ip_summed = CHECKSUM_NONE;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4472
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4473
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4474
static inline bool rtl8169_try_rx_copy(struct sk_buff **sk_buff,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4475
				       struct rtl8169_private *tp, int pkt_size,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4476
				       dma_addr_t addr)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4477
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4478
	struct sk_buff *skb;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4479
	bool done = false;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4480
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4481
	if (pkt_size >= rx_copybreak)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4482
		goto out;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4483
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4484
	skb = netdev_alloc_skb_ip_align(tp->dev, pkt_size);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4485
	if (!skb)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4486
		goto out;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4487
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4488
	pci_dma_sync_single_for_cpu(tp->pci_dev, addr, pkt_size,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4489
				    PCI_DMA_FROMDEVICE);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4490
	skb_copy_from_linear_data(*sk_buff, skb->data, pkt_size);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4491
	*sk_buff = skb;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4492
	done = true;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4493
out:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4494
	return done;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4495
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4496
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4497
/*
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4498
 * Warning : rtl8169_rx_interrupt() might be called :
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4499
 * 1) from NAPI (softirq) context
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4500
 *	(polling = 1 : we should call netif_receive_skb())
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4501
 * 2) from process context (rtl8169_reset_task())
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4502
 *	(polling = 0 : we must call netif_rx() instead)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4503
 */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4504
static int rtl8169_rx_interrupt(struct net_device *dev,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4505
				struct rtl8169_private *tp,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4506
				void __iomem *ioaddr, u32 budget)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4507
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4508
	unsigned int cur_rx, rx_left;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4509
	unsigned int delta, count;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4510
	int polling = (budget != ~(u32)0) ? 1 : 0;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4511
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4512
	cur_rx = tp->cur_rx;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4513
	rx_left = NUM_RX_DESC + tp->dirty_rx - cur_rx;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4514
	rx_left = min(rx_left, budget);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4515
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4516
	for (; rx_left > 0; rx_left--, cur_rx++) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4517
		unsigned int entry = cur_rx % NUM_RX_DESC;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4518
		struct RxDesc *desc = tp->RxDescArray + entry;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4519
		u32 status;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4520
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4521
		rmb();
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4522
		status = le32_to_cpu(desc->opts1);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4523
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4524
		if (status & DescOwn)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4525
			break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4526
		if (unlikely(status & RxRES)) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4527
			netif_info(tp, rx_err, dev, "Rx ERROR. status = %08x\n",
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4528
				   status);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4529
			dev->stats.rx_errors++;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4530
			if (status & (RxRWT | RxRUNT))
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4531
				dev->stats.rx_length_errors++;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4532
			if (status & RxCRC)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4533
				dev->stats.rx_crc_errors++;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4534
			if (status & RxFOVF) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4535
				rtl8169_schedule_work(dev, rtl8169_reset_task);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4536
				dev->stats.rx_fifo_errors++;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4537
			}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4538
			rtl8169_mark_to_asic(desc, tp->rx_buf_sz);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4539
		} else {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4540
			struct sk_buff *skb = tp->Rx_skbuff[entry];
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4541
			dma_addr_t addr = le64_to_cpu(desc->addr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4542
			int pkt_size = (status & 0x00001FFF) - 4;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4543
			struct pci_dev *pdev = tp->pci_dev;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4544
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4545
			/*
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4546
			 * The driver does not support incoming fragmented
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4547
			 * frames. They are seen as a symptom of over-mtu
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4548
			 * sized frames.
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4549
			 */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4550
			if (unlikely(rtl8169_fragmented_frame(status))) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4551
				dev->stats.rx_dropped++;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4552
				dev->stats.rx_length_errors++;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4553
				rtl8169_mark_to_asic(desc, tp->rx_buf_sz);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4554
				continue;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4555
			}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4556
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4557
			rtl8169_rx_csum(skb, desc);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4558
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4559
			if (rtl8169_try_rx_copy(&skb, tp, pkt_size, addr)) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4560
				pci_dma_sync_single_for_device(pdev, addr,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4561
					pkt_size, PCI_DMA_FROMDEVICE);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4562
				rtl8169_mark_to_asic(desc, tp->rx_buf_sz);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4563
			} else {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4564
				pci_unmap_single(pdev, addr, tp->rx_buf_sz,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4565
						 PCI_DMA_FROMDEVICE);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4566
				tp->Rx_skbuff[entry] = NULL;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4567
			}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4568
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4569
			skb_put(skb, pkt_size);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4570
			skb->protocol = eth_type_trans(skb, dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4571
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4572
			if (rtl8169_rx_vlan_skb(tp, desc, skb, polling) < 0) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4573
				if (likely(polling))
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4574
					netif_receive_skb(skb);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4575
				else
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4576
					netif_rx(skb);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4577
			}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4578
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4579
			dev->stats.rx_bytes += pkt_size;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4580
			dev->stats.rx_packets++;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4581
		}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4582
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4583
		/* Work around for AMD plateform. */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4584
		if ((desc->opts2 & cpu_to_le32(0xfffe000)) &&
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4585
		    (tp->mac_version == RTL_GIGA_MAC_VER_05)) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4586
			desc->opts2 = 0;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4587
			cur_rx++;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4588
		}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4589
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4590
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4591
	count = cur_rx - tp->cur_rx;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4592
	tp->cur_rx = cur_rx;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4593
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4594
	delta = rtl8169_rx_fill(tp, dev, tp->dirty_rx, tp->cur_rx, GFP_ATOMIC);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4595
	if (!delta && count)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4596
		netif_info(tp, intr, dev, "no Rx buffer allocated\n");
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4597
	tp->dirty_rx += delta;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4598
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4599
	/*
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4600
	 * FIXME: until there is periodic timer to try and refill the ring,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4601
	 * a temporary shortage may definitely kill the Rx process.
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4602
	 * - disable the asic to try and avoid an overflow and kick it again
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4603
	 *   after refill ?
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4604
	 * - how do others driver handle this condition (Uh oh...).
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4605
	 */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4606
	if (tp->dirty_rx + NUM_RX_DESC == tp->cur_rx)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4607
		netif_emerg(tp, intr, dev, "Rx buffers exhausted\n");
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4608
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4609
	return count;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4610
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4611
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4612
static irqreturn_t rtl8169_interrupt(int irq, void *dev_instance)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4613
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4614
	struct net_device *dev = dev_instance;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4615
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4616
	void __iomem *ioaddr = tp->mmio_addr;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4617
	int handled = 0;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4618
	int status;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4619
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4620
	/* loop handling interrupts until we have no new ones or
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4621
	 * we hit a invalid/hotplug case.
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4622
	 */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4623
	status = RTL_R16(IntrStatus);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4624
	while (status && status != 0xffff) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4625
		handled = 1;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4626
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4627
		/* Handle all of the error cases first. These will reset
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4628
		 * the chip, so just exit the loop.
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4629
		 */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4630
		if (unlikely(!netif_running(dev))) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4631
			rtl8169_asic_down(ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4632
			break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4633
		}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4634
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4635
		/* Work around for rx fifo overflow */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4636
		if (unlikely(status & RxFIFOOver) &&
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4637
		(tp->mac_version == RTL_GIGA_MAC_VER_11)) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4638
			netif_stop_queue(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4639
			rtl8169_tx_timeout(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4640
			break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4641
		}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4642
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4643
		if (unlikely(status & SYSErr)) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4644
			rtl8169_pcierr_interrupt(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4645
			break;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4646
		}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4647
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4648
		if (status & LinkChg)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4649
			rtl8169_check_link_status(dev, tp, ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4650
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4651
		/* We need to see the lastest version of tp->intr_mask to
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4652
		 * avoid ignoring an MSI interrupt and having to wait for
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4653
		 * another event which may never come.
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4654
		 */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4655
		smp_rmb();
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4656
		if (status & tp->intr_mask & tp->napi_event) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4657
			RTL_W16(IntrMask, tp->intr_event & ~tp->napi_event);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4658
			tp->intr_mask = ~tp->napi_event;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4659
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4660
			if (likely(napi_schedule_prep(&tp->napi)))
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4661
				__napi_schedule(&tp->napi);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4662
			else
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4663
				netif_info(tp, intr, dev,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4664
					   "interrupt %04x in poll\n", status);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4665
		}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4666
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4667
		/* We only get a new MSI interrupt when all active irq
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4668
		 * sources on the chip have been acknowledged. So, ack
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4669
		 * everything we've seen and check if new sources have become
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4670
		 * active to avoid blocking all interrupts from the chip.
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4671
		 */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4672
		RTL_W16(IntrStatus,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4673
			(status & RxFIFOOver) ? (status | RxOverflow) : status);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4674
		status = RTL_R16(IntrStatus);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4675
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4676
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4677
	return IRQ_RETVAL(handled);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4678
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4679
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4680
static int rtl8169_poll(struct napi_struct *napi, int budget)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4681
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4682
	struct rtl8169_private *tp = container_of(napi, struct rtl8169_private, napi);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4683
	struct net_device *dev = tp->dev;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4684
	void __iomem *ioaddr = tp->mmio_addr;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4685
	int work_done;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4686
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4687
	work_done = rtl8169_rx_interrupt(dev, tp, ioaddr, (u32) budget);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4688
	rtl8169_tx_interrupt(dev, tp, ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4689
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4690
	if (work_done < budget) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4691
		napi_complete(napi);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4692
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4693
		/* We need for force the visibility of tp->intr_mask
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4694
		 * for other CPUs, as we can loose an MSI interrupt
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4695
		 * and potentially wait for a retransmit timeout if we don't.
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4696
		 * The posted write to IntrMask is safe, as it will
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4697
		 * eventually make it to the chip and we won't loose anything
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4698
		 * until it does.
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4699
		 */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4700
		tp->intr_mask = 0xffff;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4701
		wmb();
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4702
		RTL_W16(IntrMask, tp->intr_event);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4703
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4704
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4705
	return work_done;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4706
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4707
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4708
static void rtl8169_rx_missed(struct net_device *dev, void __iomem *ioaddr)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4709
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4710
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4711
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4712
	if (tp->mac_version > RTL_GIGA_MAC_VER_06)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4713
		return;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4714
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4715
	dev->stats.rx_missed_errors += (RTL_R32(RxMissed) & 0xffffff);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4716
	RTL_W32(RxMissed, 0);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4717
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4718
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4719
static void rtl8169_down(struct net_device *dev)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4720
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4721
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4722
	void __iomem *ioaddr = tp->mmio_addr;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4723
	unsigned int intrmask;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4724
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4725
	rtl8169_delete_timer(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4726
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4727
	netif_stop_queue(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4728
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4729
	napi_disable(&tp->napi);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4730
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4731
core_down:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4732
	spin_lock_irq(&tp->lock);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4733
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4734
	rtl8169_asic_down(ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4735
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4736
	rtl8169_rx_missed(dev, ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4737
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4738
	spin_unlock_irq(&tp->lock);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4739
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4740
	synchronize_irq(dev->irq);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4741
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4742
	/* Give a racing hard_start_xmit a few cycles to complete. */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4743
	synchronize_sched();  /* FIXME: should this be synchronize_irq()? */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4744
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4745
	/*
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4746
	 * And now for the 50k$ question: are IRQ disabled or not ?
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4747
	 *
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4748
	 * Two paths lead here:
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4749
	 * 1) dev->close
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4750
	 *    -> netif_running() is available to sync the current code and the
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4751
	 *       IRQ handler. See rtl8169_interrupt for details.
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4752
	 * 2) dev->change_mtu
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4753
	 *    -> rtl8169_poll can not be issued again and re-enable the
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4754
	 *       interruptions. Let's simply issue the IRQ down sequence again.
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4755
	 *
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4756
	 * No loop if hotpluged or major error (0xffff).
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4757
	 */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4758
	intrmask = RTL_R16(IntrMask);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4759
	if (intrmask && (intrmask != 0xffff))
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4760
		goto core_down;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4761
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4762
	rtl8169_tx_clear(tp);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4763
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4764
	rtl8169_rx_clear(tp);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4765
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4766
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4767
static int rtl8169_close(struct net_device *dev)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4768
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4769
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4770
	struct pci_dev *pdev = tp->pci_dev;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4771
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4772
	pm_runtime_get_sync(&pdev->dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4773
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4774
	/* update counters before going down */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4775
	rtl8169_update_counters(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4776
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4777
	rtl8169_down(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4778
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4779
	free_irq(dev->irq, dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4780
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4781
	pci_free_consistent(pdev, R8169_RX_RING_BYTES, tp->RxDescArray,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4782
			    tp->RxPhyAddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4783
	pci_free_consistent(pdev, R8169_TX_RING_BYTES, tp->TxDescArray,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4784
			    tp->TxPhyAddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4785
	tp->TxDescArray = NULL;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4786
	tp->RxDescArray = NULL;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4787
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4788
	pm_runtime_put_sync(&pdev->dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4789
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4790
	return 0;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4791
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4792
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4793
static void rtl_set_rx_mode(struct net_device *dev)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4794
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4795
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4796
	void __iomem *ioaddr = tp->mmio_addr;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4797
	unsigned long flags;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4798
	u32 mc_filter[2];	/* Multicast hash filter */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4799
	int rx_mode;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4800
	u32 tmp = 0;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4801
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4802
	if (dev->flags & IFF_PROMISC) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4803
		/* Unconditionally log net taps. */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4804
		netif_notice(tp, link, dev, "Promiscuous mode enabled\n");
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4805
		rx_mode =
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4806
		    AcceptBroadcast | AcceptMulticast | AcceptMyPhys |
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4807
		    AcceptAllPhys;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4808
		mc_filter[1] = mc_filter[0] = 0xffffffff;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4809
	} else if ((netdev_mc_count(dev) > multicast_filter_limit) ||
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4810
		   (dev->flags & IFF_ALLMULTI)) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4811
		/* Too many to filter perfectly -- accept all multicasts. */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4812
		rx_mode = AcceptBroadcast | AcceptMulticast | AcceptMyPhys;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4813
		mc_filter[1] = mc_filter[0] = 0xffffffff;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4814
	} else {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4815
		struct netdev_hw_addr *ha;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4816
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4817
		rx_mode = AcceptBroadcast | AcceptMyPhys;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4818
		mc_filter[1] = mc_filter[0] = 0;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4819
		netdev_for_each_mc_addr(ha, dev) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4820
			int bit_nr = ether_crc(ETH_ALEN, ha->addr) >> 26;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4821
			mc_filter[bit_nr >> 5] |= 1 << (bit_nr & 31);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4822
			rx_mode |= AcceptMulticast;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4823
		}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4824
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4825
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4826
	spin_lock_irqsave(&tp->lock, flags);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4827
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4828
	tmp = rtl8169_rx_config | rx_mode |
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4829
	      (RTL_R32(RxConfig) & rtl_chip_info[tp->chipset].RxConfigMask);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4830
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4831
	if (tp->mac_version > RTL_GIGA_MAC_VER_06) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4832
		u32 data = mc_filter[0];
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4833
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4834
		mc_filter[0] = swab32(mc_filter[1]);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4835
		mc_filter[1] = swab32(data);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4836
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4837
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4838
	RTL_W32(MAR0 + 4, mc_filter[1]);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4839
	RTL_W32(MAR0 + 0, mc_filter[0]);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4840
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4841
	RTL_W32(RxConfig, tmp);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4842
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4843
	spin_unlock_irqrestore(&tp->lock, flags);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4844
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4845
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4846
/**
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4847
 *  rtl8169_get_stats - Get rtl8169 read/write statistics
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4848
 *  @dev: The Ethernet Device to get statistics for
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4849
 *
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4850
 *  Get TX/RX statistics for rtl8169
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4851
 */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4852
static struct net_device_stats *rtl8169_get_stats(struct net_device *dev)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4853
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4854
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4855
	void __iomem *ioaddr = tp->mmio_addr;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4856
	unsigned long flags;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4857
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4858
	if (netif_running(dev)) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4859
		spin_lock_irqsave(&tp->lock, flags);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4860
		rtl8169_rx_missed(dev, ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4861
		spin_unlock_irqrestore(&tp->lock, flags);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4862
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4863
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4864
	return &dev->stats;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4865
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4866
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4867
static void rtl8169_net_suspend(struct net_device *dev)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4868
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4869
	if (!netif_running(dev))
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4870
		return;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4871
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4872
	netif_device_detach(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4873
	netif_stop_queue(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4874
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4875
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4876
#ifdef CONFIG_PM
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4877
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4878
static int rtl8169_suspend(struct device *device)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4879
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4880
	struct pci_dev *pdev = to_pci_dev(device);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4881
	struct net_device *dev = pci_get_drvdata(pdev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4882
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4883
	rtl8169_net_suspend(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4884
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4885
	return 0;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4886
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4887
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4888
static void __rtl8169_resume(struct net_device *dev)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4889
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4890
	netif_device_attach(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4891
	rtl8169_schedule_work(dev, rtl8169_reset_task);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4892
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4893
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4894
static int rtl8169_resume(struct device *device)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4895
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4896
	struct pci_dev *pdev = to_pci_dev(device);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4897
	struct net_device *dev = pci_get_drvdata(pdev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4898
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4899
	if (netif_running(dev))
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4900
		__rtl8169_resume(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4901
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4902
	return 0;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4903
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4904
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4905
static int rtl8169_runtime_suspend(struct device *device)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4906
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4907
	struct pci_dev *pdev = to_pci_dev(device);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4908
	struct net_device *dev = pci_get_drvdata(pdev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4909
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4910
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4911
	if (!tp->TxDescArray)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4912
		return 0;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4913
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4914
	spin_lock_irq(&tp->lock);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4915
	tp->saved_wolopts = __rtl8169_get_wol(tp);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4916
	__rtl8169_set_wol(tp, WAKE_ANY);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4917
	spin_unlock_irq(&tp->lock);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4918
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4919
	rtl8169_net_suspend(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4920
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4921
	return 0;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4922
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4923
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4924
static int rtl8169_runtime_resume(struct device *device)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4925
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4926
	struct pci_dev *pdev = to_pci_dev(device);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4927
	struct net_device *dev = pci_get_drvdata(pdev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4928
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4929
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4930
	if (!tp->TxDescArray)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4931
		return 0;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4932
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4933
	spin_lock_irq(&tp->lock);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4934
	__rtl8169_set_wol(tp, tp->saved_wolopts);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4935
	tp->saved_wolopts = 0;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4936
	spin_unlock_irq(&tp->lock);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4937
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4938
	__rtl8169_resume(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4939
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4940
	return 0;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4941
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4942
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4943
static int rtl8169_runtime_idle(struct device *device)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4944
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4945
	struct pci_dev *pdev = to_pci_dev(device);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4946
	struct net_device *dev = pci_get_drvdata(pdev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4947
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4948
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4949
	if (!tp->TxDescArray)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4950
		return 0;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4951
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4952
	rtl8169_check_link_status(dev, tp, tp->mmio_addr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4953
	return -EBUSY;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4954
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4955
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4956
static const struct dev_pm_ops rtl8169_pm_ops = {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4957
	.suspend = rtl8169_suspend,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4958
	.resume = rtl8169_resume,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4959
	.freeze = rtl8169_suspend,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4960
	.thaw = rtl8169_resume,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4961
	.poweroff = rtl8169_suspend,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4962
	.restore = rtl8169_resume,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4963
	.runtime_suspend = rtl8169_runtime_suspend,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4964
	.runtime_resume = rtl8169_runtime_resume,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4965
	.runtime_idle = rtl8169_runtime_idle,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4966
};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4967
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4968
#define RTL8169_PM_OPS	(&rtl8169_pm_ops)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4969
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4970
#else /* !CONFIG_PM */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4971
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4972
#define RTL8169_PM_OPS	NULL
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4973
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4974
#endif /* !CONFIG_PM */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4975
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4976
static void rtl_shutdown(struct pci_dev *pdev)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4977
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4978
	struct net_device *dev = pci_get_drvdata(pdev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4979
	struct rtl8169_private *tp = netdev_priv(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4980
	void __iomem *ioaddr = tp->mmio_addr;
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4981
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4982
	rtl8169_net_suspend(dev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4983
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4984
	/* restore original MAC address */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4985
	rtl_rar_set(tp, dev->perm_addr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4986
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4987
	spin_lock_irq(&tp->lock);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4988
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4989
	rtl8169_asic_down(ioaddr);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4990
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4991
	spin_unlock_irq(&tp->lock);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4992
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4993
	if (system_state == SYSTEM_POWER_OFF) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4994
		/* WoL fails with some 8168 when the receiver is disabled. */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4995
		if (tp->features & RTL_FEATURE_WOL) {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4996
			pci_clear_master(pdev);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4997
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4998
			RTL_W8(ChipCmd, CmdRxEnb);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4999
			/* PCI commit */
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5000
			RTL_R8(ChipCmd);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5001
		}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5002
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5003
		pci_wake_from_d3(pdev, true);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5004
		pci_set_power_state(pdev, PCI_D3hot);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5005
	}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5006
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5007
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5008
static struct pci_driver rtl8169_pci_driver = {
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5009
	.name		= MODULENAME,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5010
	.id_table	= rtl8169_pci_tbl,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5011
	.probe		= rtl8169_init_one,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5012
	.remove		= __devexit_p(rtl8169_remove_one),
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5013
	.shutdown	= rtl_shutdown,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5014
	.driver.pm	= RTL8169_PM_OPS,
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5015
};
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5016
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5017
static int __init rtl8169_init_module(void)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5018
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5019
	return pci_register_driver(&rtl8169_pci_driver);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5020
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5021
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5022
static void __exit rtl8169_cleanup_module(void)
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5023
{
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5024
	pci_unregister_driver(&rtl8169_pci_driver);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5025
}
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5026
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5027
module_init(rtl8169_init_module);
416575d0ab37 Added r8169 driver for 2.6.35.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5028
module_exit(rtl8169_cleanup_module);