devices/r8169-2.6.32-ethercat.c
author Gavin Lambert <gavinl@compacsort.com>
Tue, 14 Apr 2015 09:33:24 -0400
changeset 2618 3affe9cd0b66
parent 2589 2b9c78543663
permissions -rw-r--r--
Ignore NXIO error otherwise this causes spam if network is empty or refclk not
selected yet, and syncing refclk time to master.
1973
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     1
/*
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     2
 * r8169.c: RealTek 8169/8168/8101 ethernet driver.
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     3
 *
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     4
 * Copyright (c) 2002 ShuChen <shuchen@realtek.com.tw>
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     5
 * Copyright (c) 2003 - 2007 Francois Romieu <romieu@fr.zoreil.com>
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     6
 * Copyright (c) a lot of people too. Please respect their work.
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     7
 *
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     8
 * See MAINTAINERS file for support contact information.
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     9
 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    10
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    11
#include <linux/module.h>
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    12
#include <linux/moduleparam.h>
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    13
#include <linux/pci.h>
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    14
#include <linux/netdevice.h>
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    15
#include <linux/etherdevice.h>
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    16
#include <linux/delay.h>
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    17
#include <linux/ethtool.h>
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    18
#include <linux/mii.h>
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    19
#include <linux/if_vlan.h>
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    20
#include <linux/crc32.h>
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    21
#include <linux/in.h>
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    22
#include <linux/ip.h>
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    23
#include <linux/tcp.h>
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    24
#include <linux/init.h>
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    25
#include <linux/dma-mapping.h>
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    26
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    27
#include <asm/system.h>
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    28
#include <asm/io.h>
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    29
#include <asm/irq.h>
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    30
#include "../globals.h"
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    31
#include "ecdev.h"
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    32
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    33
#define RTL8169_VERSION "2.3LK-NAPI"
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    34
#define MODULENAME "ec_r8169"
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    35
#define PFX MODULENAME ": "
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    36
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    37
#ifdef RTL8169_DEBUG
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    38
#define assert(expr) \
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    39
	if (!(expr)) {					\
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    40
		printk( "Assertion failed! %s,%s,%s,line=%d\n",	\
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    41
		#expr,__FILE__,__func__,__LINE__);		\
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    42
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    43
#define dprintk(fmt, args...) \
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    44
	do { printk(KERN_DEBUG PFX fmt, ## args); } while (0)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    45
#else
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    46
#define assert(expr) do {} while (0)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    47
#define dprintk(fmt, args...)	do {} while (0)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    48
#endif /* RTL8169_DEBUG */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    49
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    50
#define R8169_MSG_DEFAULT \
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    51
	(NETIF_MSG_DRV | NETIF_MSG_PROBE | NETIF_MSG_IFUP | NETIF_MSG_IFDOWN)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    52
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    53
#define TX_BUFFS_AVAIL(tp) \
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    54
	(tp->dirty_tx + NUM_TX_DESC - tp->cur_tx - 1)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    55
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    56
/* Maximum number of multicast addresses to filter (vs. Rx-all-multicast).
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    57
   The RTL chips use a 64 element hash table based on the Ethernet CRC. */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    58
static const int multicast_filter_limit = 32;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    59
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    60
/* MAC address length */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    61
#define MAC_ADDR_LEN	6
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    62
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    63
#define MAX_READ_REQUEST_SHIFT	12
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    64
#define RX_FIFO_THRESH	7	/* 7 means NO threshold, Rx buffer level before first PCI xfer. */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    65
#define RX_DMA_BURST	6	/* Maximum PCI burst, '6' is 1024 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    66
#define TX_DMA_BURST	6	/* Maximum PCI burst, '6' is 1024 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    67
#define EarlyTxThld	0x3F	/* 0x3F means NO early transmit */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    68
#define SafeMtu		0x1c20	/* ... actually life sucks beyond ~7k */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    69
#define InterFrameGap	0x03	/* 3 means InterFrameGap = the shortest one */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    70
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    71
#define R8169_REGS_SIZE		256
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    72
#define R8169_NAPI_WEIGHT	64
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    73
#define NUM_TX_DESC	64	/* Number of Tx descriptor registers */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    74
#define NUM_RX_DESC	256	/* Number of Rx descriptor registers */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    75
#define RX_BUF_SIZE	1536	/* Rx Buffer size */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    76
#define R8169_TX_RING_BYTES	(NUM_TX_DESC * sizeof(struct TxDesc))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    77
#define R8169_RX_RING_BYTES	(NUM_RX_DESC * sizeof(struct RxDesc))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    78
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    79
#define RTL8169_TX_TIMEOUT	(6*HZ)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    80
#define RTL8169_PHY_TIMEOUT	(10*HZ)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    81
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    82
#define RTL_EEPROM_SIG		cpu_to_le32(0x8129)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    83
#define RTL_EEPROM_SIG_MASK	cpu_to_le32(0xffff)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    84
#define RTL_EEPROM_SIG_ADDR	0x0000
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    85
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    86
/* write/read MMIO register */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    87
#define RTL_W8(reg, val8)	writeb ((val8), ioaddr + (reg))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    88
#define RTL_W16(reg, val16)	writew ((val16), ioaddr + (reg))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    89
#define RTL_W32(reg, val32)	writel ((val32), ioaddr + (reg))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    90
#define RTL_R8(reg)		readb (ioaddr + (reg))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    91
#define RTL_R16(reg)		readw (ioaddr + (reg))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    92
#define RTL_R32(reg)		((unsigned long) readl (ioaddr + (reg)))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    93
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    94
enum mac_version {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    95
	RTL_GIGA_MAC_NONE   = 0x00,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    96
	RTL_GIGA_MAC_VER_01 = 0x01, // 8169
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    97
	RTL_GIGA_MAC_VER_02 = 0x02, // 8169S
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    98
	RTL_GIGA_MAC_VER_03 = 0x03, // 8110S
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    99
	RTL_GIGA_MAC_VER_04 = 0x04, // 8169SB
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   100
	RTL_GIGA_MAC_VER_05 = 0x05, // 8110SCd
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   101
	RTL_GIGA_MAC_VER_06 = 0x06, // 8110SCe
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   102
	RTL_GIGA_MAC_VER_07 = 0x07, // 8102e
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   103
	RTL_GIGA_MAC_VER_08 = 0x08, // 8102e
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   104
	RTL_GIGA_MAC_VER_09 = 0x09, // 8102e
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   105
	RTL_GIGA_MAC_VER_10 = 0x0a, // 8101e
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   106
	RTL_GIGA_MAC_VER_11 = 0x0b, // 8168Bb
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   107
	RTL_GIGA_MAC_VER_12 = 0x0c, // 8168Be
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   108
	RTL_GIGA_MAC_VER_13 = 0x0d, // 8101Eb
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   109
	RTL_GIGA_MAC_VER_14 = 0x0e, // 8101 ?
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   110
	RTL_GIGA_MAC_VER_15 = 0x0f, // 8101 ?
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   111
	RTL_GIGA_MAC_VER_16 = 0x11, // 8101Ec
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   112
	RTL_GIGA_MAC_VER_17 = 0x10, // 8168Bf
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   113
	RTL_GIGA_MAC_VER_18 = 0x12, // 8168CP
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   114
	RTL_GIGA_MAC_VER_19 = 0x13, // 8168C
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   115
	RTL_GIGA_MAC_VER_20 = 0x14, // 8168C
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   116
	RTL_GIGA_MAC_VER_21 = 0x15, // 8168C
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   117
	RTL_GIGA_MAC_VER_22 = 0x16, // 8168C
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   118
	RTL_GIGA_MAC_VER_23 = 0x17, // 8168CP
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   119
	RTL_GIGA_MAC_VER_24 = 0x18, // 8168CP
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   120
	RTL_GIGA_MAC_VER_25 = 0x19, // 8168D
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   121
	RTL_GIGA_MAC_VER_26 = 0x1a, // 8168D
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   122
	RTL_GIGA_MAC_VER_27 = 0x1b  // 8168DP
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   123
};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   124
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   125
#define _R(NAME,MAC,MASK) \
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   126
	{ .name = NAME, .mac_version = MAC, .RxConfigMask = MASK }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   127
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   128
static const struct {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   129
	const char *name;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   130
	u8 mac_version;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   131
	u32 RxConfigMask;	/* Clears the bits supported by this chip */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   132
} rtl_chip_info[] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   133
	_R("RTL8169",		RTL_GIGA_MAC_VER_01, 0xff7e1880), // 8169
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   134
	_R("RTL8169s",		RTL_GIGA_MAC_VER_02, 0xff7e1880), // 8169S
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   135
	_R("RTL8110s",		RTL_GIGA_MAC_VER_03, 0xff7e1880), // 8110S
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   136
	_R("RTL8169sb/8110sb",	RTL_GIGA_MAC_VER_04, 0xff7e1880), // 8169SB
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   137
	_R("RTL8169sc/8110sc",	RTL_GIGA_MAC_VER_05, 0xff7e1880), // 8110SCd
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   138
	_R("RTL8169sc/8110sc",	RTL_GIGA_MAC_VER_06, 0xff7e1880), // 8110SCe
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   139
	_R("RTL8102e",		RTL_GIGA_MAC_VER_07, 0xff7e1880), // PCI-E
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   140
	_R("RTL8102e",		RTL_GIGA_MAC_VER_08, 0xff7e1880), // PCI-E
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   141
	_R("RTL8102e",		RTL_GIGA_MAC_VER_09, 0xff7e1880), // PCI-E
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   142
	_R("RTL8101e",		RTL_GIGA_MAC_VER_10, 0xff7e1880), // PCI-E
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   143
	_R("RTL8168b/8111b",	RTL_GIGA_MAC_VER_11, 0xff7e1880), // PCI-E
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   144
	_R("RTL8168b/8111b",	RTL_GIGA_MAC_VER_12, 0xff7e1880), // PCI-E
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   145
	_R("RTL8101e",		RTL_GIGA_MAC_VER_13, 0xff7e1880), // PCI-E 8139
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   146
	_R("RTL8100e",		RTL_GIGA_MAC_VER_14, 0xff7e1880), // PCI-E 8139
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   147
	_R("RTL8100e",		RTL_GIGA_MAC_VER_15, 0xff7e1880), // PCI-E 8139
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   148
	_R("RTL8168b/8111b",	RTL_GIGA_MAC_VER_17, 0xff7e1880), // PCI-E
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   149
	_R("RTL8101e",		RTL_GIGA_MAC_VER_16, 0xff7e1880), // PCI-E
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   150
	_R("RTL8168cp/8111cp",	RTL_GIGA_MAC_VER_18, 0xff7e1880), // PCI-E
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   151
	_R("RTL8168c/8111c",	RTL_GIGA_MAC_VER_19, 0xff7e1880), // PCI-E
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   152
	_R("RTL8168c/8111c",	RTL_GIGA_MAC_VER_20, 0xff7e1880), // PCI-E
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   153
	_R("RTL8168c/8111c",	RTL_GIGA_MAC_VER_21, 0xff7e1880), // PCI-E
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   154
	_R("RTL8168c/8111c",	RTL_GIGA_MAC_VER_22, 0xff7e1880), // PCI-E
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   155
	_R("RTL8168cp/8111cp",	RTL_GIGA_MAC_VER_23, 0xff7e1880), // PCI-E
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   156
	_R("RTL8168cp/8111cp",	RTL_GIGA_MAC_VER_24, 0xff7e1880), // PCI-E
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   157
	_R("RTL8168d/8111d",	RTL_GIGA_MAC_VER_25, 0xff7e1880), // PCI-E
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   158
	_R("RTL8168d/8111d",	RTL_GIGA_MAC_VER_26, 0xff7e1880), // PCI-E
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   159
	_R("RTL8168dp/8111dp",	RTL_GIGA_MAC_VER_27, 0xff7e1880)  // PCI-E
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   160
};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   161
#undef _R
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   162
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   163
enum cfg_version {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   164
	RTL_CFG_0 = 0x00,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   165
	RTL_CFG_1,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   166
	RTL_CFG_2
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   167
};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   168
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   169
static void rtl_hw_start_8169(struct net_device *);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   170
static void rtl_hw_start_8168(struct net_device *);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   171
static void rtl_hw_start_8101(struct net_device *);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   172
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   173
static struct pci_device_id rtl8169_pci_tbl[] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   174
	{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK,	0x8129), 0, 0, RTL_CFG_0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   175
	{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK,	0x8136), 0, 0, RTL_CFG_2 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   176
	{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK,	0x8167), 0, 0, RTL_CFG_0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   177
	{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK,	0x8168), 0, 0, RTL_CFG_1 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   178
	{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK,	0x8169), 0, 0, RTL_CFG_0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   179
	{ PCI_DEVICE(PCI_VENDOR_ID_DLINK,	0x4300), 0, 0, RTL_CFG_0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   180
	{ PCI_DEVICE(PCI_VENDOR_ID_AT,		0xc107), 0, 0, RTL_CFG_0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   181
	{ PCI_DEVICE(0x16ec,			0x0116), 0, 0, RTL_CFG_0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   182
	{ PCI_VENDOR_ID_LINKSYS,		0x1032,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   183
		PCI_ANY_ID, 0x0024, 0, 0, RTL_CFG_0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   184
	{ 0x0001,				0x8168,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   185
		PCI_ANY_ID, 0x2410, 0, 0, RTL_CFG_2 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   186
	{0,},
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   187
};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   188
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   189
/* prevent driver from being loaded automatically */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   190
//MODULE_DEVICE_TABLE(pci, rtl8169_pci_tbl);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   191
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   192
static int rx_copybreak = 200;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   193
static int use_dac;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   194
static struct {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   195
	u32 msg_enable;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   196
} debug = { -1 };
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   197
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   198
enum rtl_registers {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   199
	MAC0		= 0,	/* Ethernet hardware address. */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   200
	MAC4		= 4,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   201
	MAR0		= 8,	/* Multicast filter. */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   202
	CounterAddrLow		= 0x10,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   203
	CounterAddrHigh		= 0x14,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   204
	TxDescStartAddrLow	= 0x20,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   205
	TxDescStartAddrHigh	= 0x24,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   206
	TxHDescStartAddrLow	= 0x28,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   207
	TxHDescStartAddrHigh	= 0x2c,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   208
	FLASH		= 0x30,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   209
	ERSR		= 0x36,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   210
	ChipCmd		= 0x37,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   211
	TxPoll		= 0x38,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   212
	IntrMask	= 0x3c,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   213
	IntrStatus	= 0x3e,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   214
	TxConfig	= 0x40,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   215
	RxConfig	= 0x44,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   216
	RxMissed	= 0x4c,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   217
	Cfg9346		= 0x50,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   218
	Config0		= 0x51,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   219
	Config1		= 0x52,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   220
	Config2		= 0x53,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   221
	Config3		= 0x54,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   222
	Config4		= 0x55,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   223
	Config5		= 0x56,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   224
	MultiIntr	= 0x5c,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   225
	PHYAR		= 0x60,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   226
	PHYstatus	= 0x6c,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   227
	RxMaxSize	= 0xda,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   228
	CPlusCmd	= 0xe0,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   229
	IntrMitigate	= 0xe2,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   230
	RxDescAddrLow	= 0xe4,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   231
	RxDescAddrHigh	= 0xe8,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   232
	EarlyTxThres	= 0xec,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   233
	FuncEvent	= 0xf0,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   234
	FuncEventMask	= 0xf4,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   235
	FuncPresetState	= 0xf8,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   236
	FuncForceEvent	= 0xfc,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   237
};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   238
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   239
enum rtl8110_registers {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   240
	TBICSR			= 0x64,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   241
	TBI_ANAR		= 0x68,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   242
	TBI_LPAR		= 0x6a,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   243
};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   244
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   245
enum rtl8168_8101_registers {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   246
	CSIDR			= 0x64,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   247
	CSIAR			= 0x68,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   248
#define	CSIAR_FLAG			0x80000000
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   249
#define	CSIAR_WRITE_CMD			0x80000000
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   250
#define	CSIAR_BYTE_ENABLE		0x0f
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   251
#define	CSIAR_BYTE_ENABLE_SHIFT		12
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   252
#define	CSIAR_ADDR_MASK			0x0fff
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   253
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   254
	EPHYAR			= 0x80,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   255
#define	EPHYAR_FLAG			0x80000000
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   256
#define	EPHYAR_WRITE_CMD		0x80000000
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   257
#define	EPHYAR_REG_MASK			0x1f
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   258
#define	EPHYAR_REG_SHIFT		16
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   259
#define	EPHYAR_DATA_MASK		0xffff
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   260
	DBG_REG			= 0xd1,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   261
#define	FIX_NAK_1			(1 << 4)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   262
#define	FIX_NAK_2			(1 << 3)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   263
	EFUSEAR			= 0xdc,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   264
#define	EFUSEAR_FLAG			0x80000000
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   265
#define	EFUSEAR_WRITE_CMD		0x80000000
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   266
#define	EFUSEAR_READ_CMD		0x00000000
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   267
#define	EFUSEAR_REG_MASK		0x03ff
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   268
#define	EFUSEAR_REG_SHIFT		8
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   269
#define	EFUSEAR_DATA_MASK		0xff
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   270
};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   271
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   272
enum rtl_register_content {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   273
	/* InterruptStatusBits */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   274
	SYSErr		= 0x8000,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   275
	PCSTimeout	= 0x4000,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   276
	SWInt		= 0x0100,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   277
	TxDescUnavail	= 0x0080,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   278
	RxFIFOOver	= 0x0040,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   279
	LinkChg		= 0x0020,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   280
	RxOverflow	= 0x0010,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   281
	TxErr		= 0x0008,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   282
	TxOK		= 0x0004,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   283
	RxErr		= 0x0002,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   284
	RxOK		= 0x0001,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   285
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   286
	/* RxStatusDesc */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   287
	RxFOVF	= (1 << 23),
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   288
	RxRWT	= (1 << 22),
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   289
	RxRES	= (1 << 21),
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   290
	RxRUNT	= (1 << 20),
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   291
	RxCRC	= (1 << 19),
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   292
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   293
	/* ChipCmdBits */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   294
	CmdReset	= 0x10,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   295
	CmdRxEnb	= 0x08,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   296
	CmdTxEnb	= 0x04,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   297
	RxBufEmpty	= 0x01,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   298
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   299
	/* TXPoll register p.5 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   300
	HPQ		= 0x80,		/* Poll cmd on the high prio queue */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   301
	NPQ		= 0x40,		/* Poll cmd on the low prio queue */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   302
	FSWInt		= 0x01,		/* Forced software interrupt */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   303
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   304
	/* Cfg9346Bits */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   305
	Cfg9346_Lock	= 0x00,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   306
	Cfg9346_Unlock	= 0xc0,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   307
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   308
	/* rx_mode_bits */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   309
	AcceptErr	= 0x20,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   310
	AcceptRunt	= 0x10,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   311
	AcceptBroadcast	= 0x08,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   312
	AcceptMulticast	= 0x04,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   313
	AcceptMyPhys	= 0x02,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   314
	AcceptAllPhys	= 0x01,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   315
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   316
	/* RxConfigBits */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   317
	RxCfgFIFOShift	= 13,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   318
	RxCfgDMAShift	=  8,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   319
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   320
	/* TxConfigBits */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   321
	TxInterFrameGapShift = 24,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   322
	TxDMAShift = 8,	/* DMA burst value (0-7) is shift this many bits */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   323
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   324
	/* Config1 register p.24 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   325
	LEDS1		= (1 << 7),
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   326
	LEDS0		= (1 << 6),
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   327
	MSIEnable	= (1 << 5),	/* Enable Message Signaled Interrupt */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   328
	Speed_down	= (1 << 4),
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   329
	MEMMAP		= (1 << 3),
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   330
	IOMAP		= (1 << 2),
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   331
	VPD		= (1 << 1),
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   332
	PMEnable	= (1 << 0),	/* Power Management Enable */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   333
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   334
	/* Config2 register p. 25 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   335
	PCI_Clock_66MHz = 0x01,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   336
	PCI_Clock_33MHz = 0x00,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   337
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   338
	/* Config3 register p.25 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   339
	MagicPacket	= (1 << 5),	/* Wake up when receives a Magic Packet */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   340
	LinkUp		= (1 << 4),	/* Wake up when the cable connection is re-established */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   341
	Beacon_en	= (1 << 0),	/* 8168 only. Reserved in the 8168b */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   342
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   343
	/* Config5 register p.27 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   344
	BWF		= (1 << 6),	/* Accept Broadcast wakeup frame */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   345
	MWF		= (1 << 5),	/* Accept Multicast wakeup frame */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   346
	UWF		= (1 << 4),	/* Accept Unicast wakeup frame */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   347
	LanWake		= (1 << 1),	/* LanWake enable/disable */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   348
	PMEStatus	= (1 << 0),	/* PME status can be reset by PCI RST# */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   349
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   350
	/* TBICSR p.28 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   351
	TBIReset	= 0x80000000,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   352
	TBILoopback	= 0x40000000,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   353
	TBINwEnable	= 0x20000000,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   354
	TBINwRestart	= 0x10000000,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   355
	TBILinkOk	= 0x02000000,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   356
	TBINwComplete	= 0x01000000,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   357
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   358
	/* CPlusCmd p.31 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   359
	EnableBist	= (1 << 15),	// 8168 8101
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   360
	Mac_dbgo_oe	= (1 << 14),	// 8168 8101
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   361
	Normal_mode	= (1 << 13),	// unused
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   362
	Force_half_dup	= (1 << 12),	// 8168 8101
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   363
	Force_rxflow_en	= (1 << 11),	// 8168 8101
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   364
	Force_txflow_en	= (1 << 10),	// 8168 8101
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   365
	Cxpl_dbg_sel	= (1 << 9),	// 8168 8101
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   366
	ASF		= (1 << 8),	// 8168 8101
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   367
	PktCntrDisable	= (1 << 7),	// 8168 8101
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   368
	Mac_dbgo_sel	= 0x001c,	// 8168
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   369
	RxVlan		= (1 << 6),
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   370
	RxChkSum	= (1 << 5),
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   371
	PCIDAC		= (1 << 4),
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   372
	PCIMulRW	= (1 << 3),
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   373
	INTT_0		= 0x0000,	// 8168
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   374
	INTT_1		= 0x0001,	// 8168
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   375
	INTT_2		= 0x0002,	// 8168
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   376
	INTT_3		= 0x0003,	// 8168
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   377
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   378
	/* rtl8169_PHYstatus */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   379
	TBI_Enable	= 0x80,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   380
	TxFlowCtrl	= 0x40,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   381
	RxFlowCtrl	= 0x20,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   382
	_1000bpsF	= 0x10,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   383
	_100bps		= 0x08,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   384
	_10bps		= 0x04,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   385
	LinkStatus	= 0x02,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   386
	FullDup		= 0x01,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   387
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   388
	/* _TBICSRBit */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   389
	TBILinkOK	= 0x02000000,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   390
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   391
	/* DumpCounterCommand */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   392
	CounterDump	= 0x8,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   393
};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   394
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   395
enum desc_status_bit {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   396
	DescOwn		= (1 << 31), /* Descriptor is owned by NIC */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   397
	RingEnd		= (1 << 30), /* End of descriptor ring */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   398
	FirstFrag	= (1 << 29), /* First segment of a packet */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   399
	LastFrag	= (1 << 28), /* Final segment of a packet */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   400
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   401
	/* Tx private */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   402
	LargeSend	= (1 << 27), /* TCP Large Send Offload (TSO) */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   403
	MSSShift	= 16,        /* MSS value position */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   404
	MSSMask		= 0xfff,     /* MSS value + LargeSend bit: 12 bits */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   405
	IPCS		= (1 << 18), /* Calculate IP checksum */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   406
	UDPCS		= (1 << 17), /* Calculate UDP/IP checksum */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   407
	TCPCS		= (1 << 16), /* Calculate TCP/IP checksum */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   408
	TxVlanTag	= (1 << 17), /* Add VLAN tag */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   409
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   410
	/* Rx private */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   411
	PID1		= (1 << 18), /* Protocol ID bit 1/2 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   412
	PID0		= (1 << 17), /* Protocol ID bit 2/2 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   413
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   414
#define RxProtoUDP	(PID1)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   415
#define RxProtoTCP	(PID0)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   416
#define RxProtoIP	(PID1 | PID0)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   417
#define RxProtoMask	RxProtoIP
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   418
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   419
	IPFail		= (1 << 16), /* IP checksum failed */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   420
	UDPFail		= (1 << 15), /* UDP/IP checksum failed */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   421
	TCPFail		= (1 << 14), /* TCP/IP checksum failed */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   422
	RxVlanTag	= (1 << 16), /* VLAN tag available */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   423
};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   424
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   425
#define RsvdMask	0x3fffc000
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   426
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   427
struct TxDesc {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   428
	__le32 opts1;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   429
	__le32 opts2;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   430
	__le64 addr;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   431
};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   432
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   433
struct RxDesc {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   434
	__le32 opts1;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   435
	__le32 opts2;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   436
	__le64 addr;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   437
};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   438
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   439
struct ring_info {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   440
	struct sk_buff	*skb;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   441
	u32		len;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   442
	u8		__pad[sizeof(void *) - sizeof(u32)];
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   443
};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   444
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   445
enum features {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   446
	RTL_FEATURE_WOL		= (1 << 0),
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   447
	RTL_FEATURE_MSI		= (1 << 1),
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   448
	RTL_FEATURE_GMII	= (1 << 2),
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   449
};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   450
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   451
struct rtl8169_counters {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   452
	__le64	tx_packets;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   453
	__le64	rx_packets;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   454
	__le64	tx_errors;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   455
	__le32	rx_errors;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   456
	__le16	rx_missed;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   457
	__le16	align_errors;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   458
	__le32	tx_one_collision;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   459
	__le32	tx_multi_collision;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   460
	__le64	rx_unicast;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   461
	__le64	rx_broadcast;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   462
	__le32	rx_multicast;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   463
	__le16	tx_aborted;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   464
	__le16	tx_underun;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   465
};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   466
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   467
struct rtl8169_private {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   468
	void __iomem *mmio_addr;	/* memory map physical address */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   469
	struct pci_dev *pci_dev;	/* Index of PCI device */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   470
	struct net_device *dev;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   471
	struct napi_struct napi;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   472
	spinlock_t lock;		/* spin lock flag */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   473
	u32 msg_enable;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   474
	int chipset;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   475
	int mac_version;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   476
	u32 cur_rx; /* Index into the Rx descriptor buffer of next Rx pkt. */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   477
	u32 cur_tx; /* Index into the Tx descriptor buffer of next Rx pkt. */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   478
	u32 dirty_rx;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   479
	u32 dirty_tx;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   480
	struct TxDesc *TxDescArray;	/* 256-aligned Tx descriptor ring */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   481
	struct RxDesc *RxDescArray;	/* 256-aligned Rx descriptor ring */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   482
	dma_addr_t TxPhyAddr;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   483
	dma_addr_t RxPhyAddr;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   484
	struct sk_buff *Rx_skbuff[NUM_RX_DESC];	/* Rx data buffers */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   485
	struct ring_info tx_skb[NUM_TX_DESC];	/* Tx data buffers */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   486
	unsigned align;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   487
	unsigned rx_buf_sz;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   488
	struct timer_list timer;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   489
	u16 cp_cmd;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   490
	u16 intr_event;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   491
	u16 napi_event;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   492
	u16 intr_mask;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   493
	int phy_1000_ctrl_reg;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   494
#ifdef CONFIG_R8169_VLAN
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   495
	struct vlan_group *vlgrp;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   496
#endif
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   497
	int (*set_speed)(struct net_device *, u8 autoneg, u16 speed, u8 duplex);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   498
	int (*get_settings)(struct net_device *, struct ethtool_cmd *);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   499
	void (*phy_reset_enable)(void __iomem *);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   500
	void (*hw_start)(struct net_device *);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   501
	unsigned int (*phy_reset_pending)(void __iomem *);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   502
	unsigned int (*link_ok)(void __iomem *);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   503
	int (*do_ioctl)(struct rtl8169_private *tp, struct mii_ioctl_data *data, int cmd);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   504
	int pcie_cap;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   505
	struct delayed_work task;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   506
	unsigned features;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   507
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   508
	struct mii_if_info mii;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   509
	struct rtl8169_counters counters;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   510
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   511
	ec_device_t *ecdev;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   512
	unsigned long ec_watchdog_jiffies;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   513
};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   514
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   515
MODULE_AUTHOR("Florian Pose <fp@igh-essen.com>");
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   516
MODULE_DESCRIPTION("EtherCAT-capable RealTek RTL-8169 Gigabit Ethernet driver");
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   517
module_param(rx_copybreak, int, 0);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   518
MODULE_PARM_DESC(rx_copybreak, "Copy breakpoint for copy-only-tiny-frames");
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   519
module_param(use_dac, int, 0);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   520
MODULE_PARM_DESC(use_dac, "Enable PCI DAC. Unsafe on 32 bit PCI slot.");
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   521
module_param_named(debug, debug.msg_enable, int, 0);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   522
MODULE_PARM_DESC(debug, "Debug verbosity level (0=none, ..., 16=all)");
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   523
MODULE_LICENSE("GPL");
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   524
MODULE_VERSION(EC_MASTER_VERSION);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   525
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   526
static int rtl8169_open(struct net_device *dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   527
static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   528
				      struct net_device *dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   529
static irqreturn_t rtl8169_interrupt(int irq, void *dev_instance);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   530
static int rtl8169_init_ring(struct net_device *dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   531
static void rtl_hw_start(struct net_device *dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   532
static int rtl8169_close(struct net_device *dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   533
static void rtl_set_rx_mode(struct net_device *dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   534
static void rtl8169_tx_timeout(struct net_device *dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   535
static struct net_device_stats *rtl8169_get_stats(struct net_device *dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   536
static int rtl8169_rx_interrupt(struct net_device *, struct rtl8169_private *,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   537
				void __iomem *, u32 budget);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   538
static int rtl8169_change_mtu(struct net_device *dev, int new_mtu);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   539
static void rtl8169_down(struct net_device *dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   540
static void rtl8169_rx_clear(struct rtl8169_private *tp);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   541
static void ec_poll(struct net_device *dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   542
static int rtl8169_poll(struct napi_struct *napi, int budget);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   543
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   544
static const unsigned int rtl8169_rx_config =
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   545
	(RX_FIFO_THRESH << RxCfgFIFOShift) | (RX_DMA_BURST << RxCfgDMAShift);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   546
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   547
static void mdio_write(void __iomem *ioaddr, int reg_addr, int value)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   548
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   549
	int i;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   550
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   551
	RTL_W32(PHYAR, 0x80000000 | (reg_addr & 0x1f) << 16 | (value & 0xffff));
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   552
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   553
	for (i = 20; i > 0; i--) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   554
		/*
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   555
		 * Check if the RTL8169 has completed writing to the specified
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   556
		 * MII register.
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   557
		 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   558
		if (!(RTL_R32(PHYAR) & 0x80000000))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   559
			break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   560
		udelay(25);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   561
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   562
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   563
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   564
static int mdio_read(void __iomem *ioaddr, int reg_addr)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   565
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   566
	int i, value = -1;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   567
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   568
	RTL_W32(PHYAR, 0x0 | (reg_addr & 0x1f) << 16);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   569
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   570
	for (i = 20; i > 0; i--) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   571
		/*
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   572
		 * Check if the RTL8169 has completed retrieving data from
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   573
		 * the specified MII register.
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   574
		 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   575
		if (RTL_R32(PHYAR) & 0x80000000) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   576
			value = RTL_R32(PHYAR) & 0xffff;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   577
			break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   578
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   579
		udelay(25);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   580
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   581
	return value;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   582
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   583
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   584
static void mdio_patch(void __iomem *ioaddr, int reg_addr, int value)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   585
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   586
	mdio_write(ioaddr, reg_addr, mdio_read(ioaddr, reg_addr) | value);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   587
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   588
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   589
static void mdio_plus_minus(void __iomem *ioaddr, int reg_addr, int p, int m)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   590
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   591
	int val;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   592
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   593
	val = mdio_read(ioaddr, reg_addr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   594
	mdio_write(ioaddr, reg_addr, (val | p) & ~m);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   595
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   596
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   597
static void rtl_mdio_write(struct net_device *dev, int phy_id, int location,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   598
			   int val)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   599
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   600
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   601
	void __iomem *ioaddr = tp->mmio_addr;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   602
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   603
	mdio_write(ioaddr, location, val);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   604
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   605
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   606
static int rtl_mdio_read(struct net_device *dev, int phy_id, int location)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   607
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   608
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   609
	void __iomem *ioaddr = tp->mmio_addr;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   610
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   611
	return mdio_read(ioaddr, location);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   612
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   613
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   614
static void rtl_ephy_write(void __iomem *ioaddr, int reg_addr, int value)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   615
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   616
	unsigned int i;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   617
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   618
	RTL_W32(EPHYAR, EPHYAR_WRITE_CMD | (value & EPHYAR_DATA_MASK) |
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   619
		(reg_addr & EPHYAR_REG_MASK) << EPHYAR_REG_SHIFT);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   620
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   621
	for (i = 0; i < 100; i++) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   622
		if (!(RTL_R32(EPHYAR) & EPHYAR_FLAG))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   623
			break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   624
		udelay(10);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   625
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   626
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   627
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   628
static u16 rtl_ephy_read(void __iomem *ioaddr, int reg_addr)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   629
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   630
	u16 value = 0xffff;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   631
	unsigned int i;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   632
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   633
	RTL_W32(EPHYAR, (reg_addr & EPHYAR_REG_MASK) << EPHYAR_REG_SHIFT);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   634
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   635
	for (i = 0; i < 100; i++) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   636
		if (RTL_R32(EPHYAR) & EPHYAR_FLAG) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   637
			value = RTL_R32(EPHYAR) & EPHYAR_DATA_MASK;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   638
			break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   639
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   640
		udelay(10);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   641
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   642
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   643
	return value;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   644
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   645
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   646
static void rtl_csi_write(void __iomem *ioaddr, int addr, int value)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   647
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   648
	unsigned int i;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   649
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   650
	RTL_W32(CSIDR, value);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   651
	RTL_W32(CSIAR, CSIAR_WRITE_CMD | (addr & CSIAR_ADDR_MASK) |
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   652
		CSIAR_BYTE_ENABLE << CSIAR_BYTE_ENABLE_SHIFT);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   653
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   654
	for (i = 0; i < 100; i++) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   655
		if (!(RTL_R32(CSIAR) & CSIAR_FLAG))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   656
			break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   657
		udelay(10);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   658
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   659
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   660
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   661
static u32 rtl_csi_read(void __iomem *ioaddr, int addr)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   662
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   663
	u32 value = ~0x00;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   664
	unsigned int i;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   665
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   666
	RTL_W32(CSIAR, (addr & CSIAR_ADDR_MASK) |
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   667
		CSIAR_BYTE_ENABLE << CSIAR_BYTE_ENABLE_SHIFT);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   668
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   669
	for (i = 0; i < 100; i++) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   670
		if (RTL_R32(CSIAR) & CSIAR_FLAG) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   671
			value = RTL_R32(CSIDR);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   672
			break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   673
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   674
		udelay(10);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   675
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   676
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   677
	return value;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   678
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   679
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   680
static u8 rtl8168d_efuse_read(void __iomem *ioaddr, int reg_addr)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   681
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   682
	u8 value = 0xff;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   683
	unsigned int i;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   684
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   685
	RTL_W32(EFUSEAR, (reg_addr & EFUSEAR_REG_MASK) << EFUSEAR_REG_SHIFT);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   686
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   687
	for (i = 0; i < 300; i++) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   688
		if (RTL_R32(EFUSEAR) & EFUSEAR_FLAG) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   689
			value = RTL_R32(EFUSEAR) & EFUSEAR_DATA_MASK;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   690
			break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   691
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   692
		udelay(100);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   693
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   694
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   695
	return value;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   696
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   697
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   698
static void rtl8169_irq_mask_and_ack(void __iomem *ioaddr)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   699
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   700
	RTL_W16(IntrMask, 0x0000);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   701
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   702
	RTL_W16(IntrStatus, 0xffff);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   703
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   704
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   705
static void rtl8169_asic_down(void __iomem *ioaddr)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   706
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   707
	RTL_W8(ChipCmd, 0x00);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   708
	rtl8169_irq_mask_and_ack(ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   709
	RTL_R16(CPlusCmd);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   710
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   711
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   712
static unsigned int rtl8169_tbi_reset_pending(void __iomem *ioaddr)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   713
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   714
	return RTL_R32(TBICSR) & TBIReset;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   715
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   716
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   717
static unsigned int rtl8169_xmii_reset_pending(void __iomem *ioaddr)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   718
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   719
	return mdio_read(ioaddr, MII_BMCR) & BMCR_RESET;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   720
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   721
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   722
static unsigned int rtl8169_tbi_link_ok(void __iomem *ioaddr)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   723
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   724
	return RTL_R32(TBICSR) & TBILinkOk;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   725
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   726
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   727
static unsigned int rtl8169_xmii_link_ok(void __iomem *ioaddr)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   728
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   729
	return RTL_R8(PHYstatus) & LinkStatus;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   730
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   731
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   732
static void rtl8169_tbi_reset_enable(void __iomem *ioaddr)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   733
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   734
	RTL_W32(TBICSR, RTL_R32(TBICSR) | TBIReset);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   735
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   736
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   737
static void rtl8169_xmii_reset_enable(void __iomem *ioaddr)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   738
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   739
	unsigned int val;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   740
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   741
	val = mdio_read(ioaddr, MII_BMCR) | BMCR_RESET;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   742
	mdio_write(ioaddr, MII_BMCR, val & 0xffff);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   743
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   744
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   745
static void rtl8169_check_link_status(struct net_device *dev,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   746
				      struct rtl8169_private *tp,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   747
				      void __iomem *ioaddr)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   748
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   749
	unsigned long flags;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   750
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   751
	if (tp->ecdev) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   752
		ecdev_set_link(tp->ecdev, tp->link_ok(ioaddr) ? 1 : 0);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   753
	} else {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   754
		spin_lock_irqsave(&tp->lock, flags);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   755
		if (tp->link_ok(ioaddr)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   756
			netif_carrier_on(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   757
			if (netif_msg_ifup(tp))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   758
				printk(KERN_INFO PFX "%s: link up\n", dev->name);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   759
		} else {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   760
			if (netif_msg_ifdown(tp))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   761
				printk(KERN_INFO PFX "%s: link down\n", dev->name);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   762
			netif_carrier_off(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   763
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   764
		spin_unlock_irqrestore(&tp->lock, flags);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   765
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   766
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   767
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   768
static void rtl8169_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   769
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   770
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   771
	void __iomem *ioaddr = tp->mmio_addr;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   772
	u8 options;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   773
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   774
	wol->wolopts = 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   775
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   776
#define WAKE_ANY (WAKE_PHY | WAKE_MAGIC | WAKE_UCAST | WAKE_BCAST | WAKE_MCAST)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   777
	wol->supported = WAKE_ANY;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   778
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   779
	spin_lock_irq(&tp->lock);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   780
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   781
	options = RTL_R8(Config1);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   782
	if (!(options & PMEnable))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   783
		goto out_unlock;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   784
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   785
	options = RTL_R8(Config3);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   786
	if (options & LinkUp)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   787
		wol->wolopts |= WAKE_PHY;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   788
	if (options & MagicPacket)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   789
		wol->wolopts |= WAKE_MAGIC;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   790
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   791
	options = RTL_R8(Config5);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   792
	if (options & UWF)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   793
		wol->wolopts |= WAKE_UCAST;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   794
	if (options & BWF)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   795
		wol->wolopts |= WAKE_BCAST;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   796
	if (options & MWF)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   797
		wol->wolopts |= WAKE_MCAST;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   798
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   799
out_unlock:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   800
	spin_unlock_irq(&tp->lock);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   801
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   802
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   803
static int rtl8169_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   804
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   805
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   806
	void __iomem *ioaddr = tp->mmio_addr;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   807
	unsigned int i;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   808
	static struct {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   809
		u32 opt;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   810
		u16 reg;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   811
		u8  mask;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   812
	} cfg[] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   813
		{ WAKE_ANY,   Config1, PMEnable },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   814
		{ WAKE_PHY,   Config3, LinkUp },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   815
		{ WAKE_MAGIC, Config3, MagicPacket },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   816
		{ WAKE_UCAST, Config5, UWF },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   817
		{ WAKE_BCAST, Config5, BWF },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   818
		{ WAKE_MCAST, Config5, MWF },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   819
		{ WAKE_ANY,   Config5, LanWake }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   820
	};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   821
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   822
	spin_lock_irq(&tp->lock);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   823
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   824
	RTL_W8(Cfg9346, Cfg9346_Unlock);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   825
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   826
	for (i = 0; i < ARRAY_SIZE(cfg); i++) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   827
		u8 options = RTL_R8(cfg[i].reg) & ~cfg[i].mask;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   828
		if (wol->wolopts & cfg[i].opt)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   829
			options |= cfg[i].mask;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   830
		RTL_W8(cfg[i].reg, options);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   831
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   832
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   833
	RTL_W8(Cfg9346, Cfg9346_Lock);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   834
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   835
	if (wol->wolopts)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   836
		tp->features |= RTL_FEATURE_WOL;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   837
	else
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   838
		tp->features &= ~RTL_FEATURE_WOL;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   839
	device_set_wakeup_enable(&tp->pci_dev->dev, wol->wolopts);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   840
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   841
	spin_unlock_irq(&tp->lock);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   842
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   843
	return 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   844
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   845
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   846
static void rtl8169_get_drvinfo(struct net_device *dev,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   847
				struct ethtool_drvinfo *info)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   848
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   849
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   850
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   851
	strcpy(info->driver, MODULENAME);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   852
	strcpy(info->version, RTL8169_VERSION);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   853
	strcpy(info->bus_info, pci_name(tp->pci_dev));
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   854
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   855
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   856
static int rtl8169_get_regs_len(struct net_device *dev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   857
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   858
	return R8169_REGS_SIZE;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   859
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   860
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   861
static int rtl8169_set_speed_tbi(struct net_device *dev,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   862
				 u8 autoneg, u16 speed, u8 duplex)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   863
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   864
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   865
	void __iomem *ioaddr = tp->mmio_addr;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   866
	int ret = 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   867
	u32 reg;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   868
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   869
	reg = RTL_R32(TBICSR);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   870
	if ((autoneg == AUTONEG_DISABLE) && (speed == SPEED_1000) &&
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   871
	    (duplex == DUPLEX_FULL)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   872
		RTL_W32(TBICSR, reg & ~(TBINwEnable | TBINwRestart));
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   873
	} else if (autoneg == AUTONEG_ENABLE)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   874
		RTL_W32(TBICSR, reg | TBINwEnable | TBINwRestart);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   875
	else {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   876
		if (netif_msg_link(tp)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   877
			printk(KERN_WARNING "%s: "
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   878
			       "incorrect speed setting refused in TBI mode\n",
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   879
			       dev->name);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   880
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   881
		ret = -EOPNOTSUPP;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   882
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   883
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   884
	return ret;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   885
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   886
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   887
static int rtl8169_set_speed_xmii(struct net_device *dev,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   888
				  u8 autoneg, u16 speed, u8 duplex)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   889
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   890
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   891
	void __iomem *ioaddr = tp->mmio_addr;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   892
	int giga_ctrl, bmcr;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   893
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   894
	if (autoneg == AUTONEG_ENABLE) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   895
		int auto_nego;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   896
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   897
		auto_nego = mdio_read(ioaddr, MII_ADVERTISE);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   898
		auto_nego |= (ADVERTISE_10HALF | ADVERTISE_10FULL |
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   899
			      ADVERTISE_100HALF | ADVERTISE_100FULL);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   900
		auto_nego |= ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   901
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   902
		giga_ctrl = mdio_read(ioaddr, MII_CTRL1000);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   903
		giga_ctrl &= ~(ADVERTISE_1000FULL | ADVERTISE_1000HALF);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   904
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   905
		/* The 8100e/8101e/8102e do Fast Ethernet only. */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   906
		if ((tp->mac_version != RTL_GIGA_MAC_VER_07) &&
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   907
		    (tp->mac_version != RTL_GIGA_MAC_VER_08) &&
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   908
		    (tp->mac_version != RTL_GIGA_MAC_VER_09) &&
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   909
		    (tp->mac_version != RTL_GIGA_MAC_VER_10) &&
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   910
		    (tp->mac_version != RTL_GIGA_MAC_VER_13) &&
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   911
		    (tp->mac_version != RTL_GIGA_MAC_VER_14) &&
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   912
		    (tp->mac_version != RTL_GIGA_MAC_VER_15) &&
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   913
		    (tp->mac_version != RTL_GIGA_MAC_VER_16)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   914
			giga_ctrl |= ADVERTISE_1000FULL | ADVERTISE_1000HALF;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   915
		} else if (netif_msg_link(tp)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   916
			printk(KERN_INFO "%s: PHY does not support 1000Mbps.\n",
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   917
			       dev->name);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   918
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   919
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   920
		bmcr = BMCR_ANENABLE | BMCR_ANRESTART;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   921
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   922
		if ((tp->mac_version == RTL_GIGA_MAC_VER_11) ||
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   923
		    (tp->mac_version == RTL_GIGA_MAC_VER_12) ||
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   924
		    (tp->mac_version >= RTL_GIGA_MAC_VER_17)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   925
			/*
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   926
			 * Wake up the PHY.
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   927
			 * Vendor specific (0x1f) and reserved (0x0e) MII
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   928
			 * registers.
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   929
			 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   930
			mdio_write(ioaddr, 0x1f, 0x0000);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   931
			mdio_write(ioaddr, 0x0e, 0x0000);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   932
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   933
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   934
		mdio_write(ioaddr, MII_ADVERTISE, auto_nego);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   935
		mdio_write(ioaddr, MII_CTRL1000, giga_ctrl);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   936
	} else {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   937
		giga_ctrl = 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   938
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   939
		if (speed == SPEED_10)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   940
			bmcr = 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   941
		else if (speed == SPEED_100)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   942
			bmcr = BMCR_SPEED100;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   943
		else
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   944
			return -EINVAL;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   945
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   946
		if (duplex == DUPLEX_FULL)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   947
			bmcr |= BMCR_FULLDPLX;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   948
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   949
		mdio_write(ioaddr, 0x1f, 0x0000);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   950
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   951
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   952
	tp->phy_1000_ctrl_reg = giga_ctrl;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   953
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   954
	mdio_write(ioaddr, MII_BMCR, bmcr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   955
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   956
	if ((tp->mac_version == RTL_GIGA_MAC_VER_02) ||
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   957
	    (tp->mac_version == RTL_GIGA_MAC_VER_03)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   958
		if ((speed == SPEED_100) && (autoneg != AUTONEG_ENABLE)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   959
			mdio_write(ioaddr, 0x17, 0x2138);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   960
			mdio_write(ioaddr, 0x0e, 0x0260);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   961
		} else {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   962
			mdio_write(ioaddr, 0x17, 0x2108);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   963
			mdio_write(ioaddr, 0x0e, 0x0000);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   964
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   965
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   966
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   967
	return 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   968
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   969
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   970
static int rtl8169_set_speed(struct net_device *dev,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   971
			     u8 autoneg, u16 speed, u8 duplex)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   972
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   973
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   974
	int ret;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   975
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   976
	ret = tp->set_speed(dev, autoneg, speed, duplex);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   977
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   978
	if (netif_running(dev) && (tp->phy_1000_ctrl_reg & ADVERTISE_1000FULL))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   979
		mod_timer(&tp->timer, jiffies + RTL8169_PHY_TIMEOUT);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   980
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   981
	return ret;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   982
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   983
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   984
static int rtl8169_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   985
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   986
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   987
	unsigned long flags;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   988
	int ret;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   989
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   990
	spin_lock_irqsave(&tp->lock, flags);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   991
	ret = rtl8169_set_speed(dev, cmd->autoneg, cmd->speed, cmd->duplex);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   992
	spin_unlock_irqrestore(&tp->lock, flags);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   993
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   994
	return ret;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   995
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   996
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   997
static u32 rtl8169_get_rx_csum(struct net_device *dev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   998
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   999
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1000
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1001
	return tp->cp_cmd & RxChkSum;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1002
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1003
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1004
static int rtl8169_set_rx_csum(struct net_device *dev, u32 data)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1005
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1006
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1007
	void __iomem *ioaddr = tp->mmio_addr;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1008
	unsigned long flags;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1009
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1010
	spin_lock_irqsave(&tp->lock, flags);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1011
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1012
	if (data)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1013
		tp->cp_cmd |= RxChkSum;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1014
	else
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1015
		tp->cp_cmd &= ~RxChkSum;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1016
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1017
	RTL_W16(CPlusCmd, tp->cp_cmd);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1018
	RTL_R16(CPlusCmd);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1019
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1020
	spin_unlock_irqrestore(&tp->lock, flags);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1021
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1022
	return 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1023
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1024
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1025
#ifdef CONFIG_R8169_VLAN
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1026
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1027
static inline u32 rtl8169_tx_vlan_tag(struct rtl8169_private *tp,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1028
				      struct sk_buff *skb)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1029
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1030
	return (tp->vlgrp && vlan_tx_tag_present(skb)) ?
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1031
		TxVlanTag | swab16(vlan_tx_tag_get(skb)) : 0x00;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1032
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1033
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1034
static void rtl8169_vlan_rx_register(struct net_device *dev,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1035
				     struct vlan_group *grp)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1036
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1037
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1038
	void __iomem *ioaddr = tp->mmio_addr;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1039
	unsigned long flags;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1040
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1041
	spin_lock_irqsave(&tp->lock, flags);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1042
	tp->vlgrp = grp;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1043
	/*
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1044
	 * Do not disable RxVlan on 8110SCd.
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1045
	 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1046
	if (tp->vlgrp || (tp->mac_version == RTL_GIGA_MAC_VER_05))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1047
		tp->cp_cmd |= RxVlan;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1048
	else
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1049
		tp->cp_cmd &= ~RxVlan;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1050
	RTL_W16(CPlusCmd, tp->cp_cmd);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1051
	RTL_R16(CPlusCmd);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1052
	spin_unlock_irqrestore(&tp->lock, flags);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1053
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1054
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1055
static int rtl8169_rx_vlan_skb(struct rtl8169_private *tp, struct RxDesc *desc,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1056
			       struct sk_buff *skb)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1057
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1058
	u32 opts2 = le32_to_cpu(desc->opts2);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1059
	struct vlan_group *vlgrp = tp->vlgrp;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1060
	int ret;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1061
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1062
	if (vlgrp && (opts2 & RxVlanTag)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1063
		vlan_hwaccel_receive_skb(skb, vlgrp, swab16(opts2 & 0xffff));
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1064
		ret = 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1065
	} else
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1066
		ret = -1;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1067
	desc->opts2 = 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1068
	return ret;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1069
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1070
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1071
#else /* !CONFIG_R8169_VLAN */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1072
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1073
static inline u32 rtl8169_tx_vlan_tag(struct rtl8169_private *tp,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1074
				      struct sk_buff *skb)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1075
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1076
	return 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1077
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1078
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1079
static int rtl8169_rx_vlan_skb(struct rtl8169_private *tp, struct RxDesc *desc,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1080
			       struct sk_buff *skb)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1081
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1082
	return -1;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1083
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1084
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1085
#endif
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1086
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1087
static int rtl8169_gset_tbi(struct net_device *dev, struct ethtool_cmd *cmd)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1088
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1089
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1090
	void __iomem *ioaddr = tp->mmio_addr;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1091
	u32 status;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1092
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1093
	cmd->supported =
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1094
		SUPPORTED_1000baseT_Full | SUPPORTED_Autoneg | SUPPORTED_FIBRE;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1095
	cmd->port = PORT_FIBRE;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1096
	cmd->transceiver = XCVR_INTERNAL;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1097
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1098
	status = RTL_R32(TBICSR);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1099
	cmd->advertising = (status & TBINwEnable) ?  ADVERTISED_Autoneg : 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1100
	cmd->autoneg = !!(status & TBINwEnable);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1101
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1102
	cmd->speed = SPEED_1000;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1103
	cmd->duplex = DUPLEX_FULL; /* Always set */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1104
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1105
	return 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1106
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1107
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1108
static int rtl8169_gset_xmii(struct net_device *dev, struct ethtool_cmd *cmd)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1109
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1110
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1111
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1112
	return mii_ethtool_gset(&tp->mii, cmd);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1113
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1114
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1115
static int rtl8169_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1116
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1117
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1118
	unsigned long flags;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1119
	int rc;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1120
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1121
	spin_lock_irqsave(&tp->lock, flags);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1122
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1123
	rc = tp->get_settings(dev, cmd);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1124
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1125
	spin_unlock_irqrestore(&tp->lock, flags);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1126
	return rc;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1127
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1128
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1129
static void rtl8169_get_regs(struct net_device *dev, struct ethtool_regs *regs,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1130
			     void *p)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1131
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1132
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1133
	unsigned long flags;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1134
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1135
	if (regs->len > R8169_REGS_SIZE)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1136
		regs->len = R8169_REGS_SIZE;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1137
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1138
	spin_lock_irqsave(&tp->lock, flags);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1139
	memcpy_fromio(p, tp->mmio_addr, regs->len);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1140
	spin_unlock_irqrestore(&tp->lock, flags);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1141
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1142
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1143
static u32 rtl8169_get_msglevel(struct net_device *dev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1144
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1145
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1146
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1147
	return tp->msg_enable;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1148
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1149
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1150
static void rtl8169_set_msglevel(struct net_device *dev, u32 value)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1151
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1152
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1153
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1154
	tp->msg_enable = value;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1155
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1156
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1157
static const char rtl8169_gstrings[][ETH_GSTRING_LEN] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1158
	"tx_packets",
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1159
	"rx_packets",
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1160
	"tx_errors",
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1161
	"rx_errors",
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1162
	"rx_missed",
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1163
	"align_errors",
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1164
	"tx_single_collisions",
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1165
	"tx_multi_collisions",
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1166
	"unicast",
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1167
	"broadcast",
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1168
	"multicast",
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1169
	"tx_aborted",
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1170
	"tx_underrun",
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1171
};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1172
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1173
static int rtl8169_get_sset_count(struct net_device *dev, int sset)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1174
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1175
	switch (sset) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1176
	case ETH_SS_STATS:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1177
		return ARRAY_SIZE(rtl8169_gstrings);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1178
	default:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1179
		return -EOPNOTSUPP;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1180
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1181
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1182
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1183
static void rtl8169_update_counters(struct net_device *dev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1184
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1185
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1186
	void __iomem *ioaddr = tp->mmio_addr;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1187
	struct rtl8169_counters *counters;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1188
	dma_addr_t paddr;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1189
	u32 cmd;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1190
	int wait = 1000;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1191
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1192
	/*
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1193
	 * Some chips are unable to dump tally counters when the receiver
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1194
	 * is disabled.
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1195
	 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1196
	if ((RTL_R8(ChipCmd) & CmdRxEnb) == 0)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1197
		return;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1198
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1199
	counters = pci_alloc_consistent(tp->pci_dev, sizeof(*counters), &paddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1200
	if (!counters)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1201
		return;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1202
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1203
	RTL_W32(CounterAddrHigh, (u64)paddr >> 32);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1204
	cmd = (u64)paddr & DMA_BIT_MASK(32);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1205
	RTL_W32(CounterAddrLow, cmd);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1206
	RTL_W32(CounterAddrLow, cmd | CounterDump);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1207
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1208
	while (wait--) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1209
		if ((RTL_R32(CounterAddrLow) & CounterDump) == 0) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1210
			/* copy updated counters */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1211
			memcpy(&tp->counters, counters, sizeof(*counters));
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1212
			break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1213
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1214
		udelay(10);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1215
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1216
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1217
	RTL_W32(CounterAddrLow, 0);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1218
	RTL_W32(CounterAddrHigh, 0);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1219
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1220
	pci_free_consistent(tp->pci_dev, sizeof(*counters), counters, paddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1221
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1222
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1223
static void rtl8169_get_ethtool_stats(struct net_device *dev,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1224
				      struct ethtool_stats *stats, u64 *data)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1225
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1226
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1227
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1228
	ASSERT_RTNL();
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1229
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1230
	rtl8169_update_counters(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1231
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1232
	data[0] = le64_to_cpu(tp->counters.tx_packets);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1233
	data[1] = le64_to_cpu(tp->counters.rx_packets);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1234
	data[2] = le64_to_cpu(tp->counters.tx_errors);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1235
	data[3] = le32_to_cpu(tp->counters.rx_errors);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1236
	data[4] = le16_to_cpu(tp->counters.rx_missed);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1237
	data[5] = le16_to_cpu(tp->counters.align_errors);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1238
	data[6] = le32_to_cpu(tp->counters.tx_one_collision);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1239
	data[7] = le32_to_cpu(tp->counters.tx_multi_collision);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1240
	data[8] = le64_to_cpu(tp->counters.rx_unicast);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1241
	data[9] = le64_to_cpu(tp->counters.rx_broadcast);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1242
	data[10] = le32_to_cpu(tp->counters.rx_multicast);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1243
	data[11] = le16_to_cpu(tp->counters.tx_aborted);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1244
	data[12] = le16_to_cpu(tp->counters.tx_underun);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1245
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1246
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1247
static void rtl8169_get_strings(struct net_device *dev, u32 stringset, u8 *data)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1248
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1249
	switch(stringset) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1250
	case ETH_SS_STATS:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1251
		memcpy(data, *rtl8169_gstrings, sizeof(rtl8169_gstrings));
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1252
		break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1253
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1254
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1255
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1256
static const struct ethtool_ops rtl8169_ethtool_ops = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1257
	.get_drvinfo		= rtl8169_get_drvinfo,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1258
	.get_regs_len		= rtl8169_get_regs_len,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1259
	.get_link		= ethtool_op_get_link,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1260
	.get_settings		= rtl8169_get_settings,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1261
	.set_settings		= rtl8169_set_settings,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1262
	.get_msglevel		= rtl8169_get_msglevel,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1263
	.set_msglevel		= rtl8169_set_msglevel,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1264
	.get_rx_csum		= rtl8169_get_rx_csum,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1265
	.set_rx_csum		= rtl8169_set_rx_csum,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1266
	.set_tx_csum		= ethtool_op_set_tx_csum,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1267
	.set_sg			= ethtool_op_set_sg,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1268
	.set_tso		= ethtool_op_set_tso,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1269
	.get_regs		= rtl8169_get_regs,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1270
	.get_wol		= rtl8169_get_wol,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1271
	.set_wol		= rtl8169_set_wol,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1272
	.get_strings		= rtl8169_get_strings,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1273
	.get_sset_count		= rtl8169_get_sset_count,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1274
	.get_ethtool_stats	= rtl8169_get_ethtool_stats,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1275
};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1276
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1277
static void rtl8169_get_mac_version(struct rtl8169_private *tp,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1278
				    void __iomem *ioaddr)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1279
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1280
	/*
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1281
	 * The driver currently handles the 8168Bf and the 8168Be identically
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1282
	 * but they can be identified more specifically through the test below
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1283
	 * if needed:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1284
	 *
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1285
	 * (RTL_R32(TxConfig) & 0x700000) == 0x500000 ? 8168Bf : 8168Be
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1286
	 *
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1287
	 * Same thing for the 8101Eb and the 8101Ec:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1288
	 *
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1289
	 * (RTL_R32(TxConfig) & 0x700000) == 0x200000 ? 8101Eb : 8101Ec
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1290
	 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1291
	const struct {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1292
		u32 mask;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1293
		u32 val;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1294
		int mac_version;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1295
	} mac_info[] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1296
		/* 8168D family. */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1297
		{ 0x7cf00000, 0x28300000,	RTL_GIGA_MAC_VER_26 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1298
		{ 0x7cf00000, 0x28100000,	RTL_GIGA_MAC_VER_25 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1299
		{ 0x7c800000, 0x28800000,	RTL_GIGA_MAC_VER_27 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1300
		{ 0x7c800000, 0x28000000,	RTL_GIGA_MAC_VER_26 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1301
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1302
		/* 8168C family. */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1303
		{ 0x7cf00000, 0x3ca00000,	RTL_GIGA_MAC_VER_24 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1304
		{ 0x7cf00000, 0x3c900000,	RTL_GIGA_MAC_VER_23 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1305
		{ 0x7cf00000, 0x3c800000,	RTL_GIGA_MAC_VER_18 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1306
		{ 0x7c800000, 0x3c800000,	RTL_GIGA_MAC_VER_24 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1307
		{ 0x7cf00000, 0x3c000000,	RTL_GIGA_MAC_VER_19 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1308
		{ 0x7cf00000, 0x3c200000,	RTL_GIGA_MAC_VER_20 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1309
		{ 0x7cf00000, 0x3c300000,	RTL_GIGA_MAC_VER_21 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1310
		{ 0x7cf00000, 0x3c400000,	RTL_GIGA_MAC_VER_22 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1311
		{ 0x7c800000, 0x3c000000,	RTL_GIGA_MAC_VER_22 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1312
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1313
		/* 8168B family. */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1314
		{ 0x7cf00000, 0x38000000,	RTL_GIGA_MAC_VER_12 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1315
		{ 0x7cf00000, 0x38500000,	RTL_GIGA_MAC_VER_17 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1316
		{ 0x7c800000, 0x38000000,	RTL_GIGA_MAC_VER_17 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1317
		{ 0x7c800000, 0x30000000,	RTL_GIGA_MAC_VER_11 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1318
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1319
		/* 8101 family. */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1320
		{ 0x7cf00000, 0x34a00000,	RTL_GIGA_MAC_VER_09 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1321
		{ 0x7cf00000, 0x24a00000,	RTL_GIGA_MAC_VER_09 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1322
		{ 0x7cf00000, 0x34900000,	RTL_GIGA_MAC_VER_08 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1323
		{ 0x7cf00000, 0x24900000,	RTL_GIGA_MAC_VER_08 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1324
		{ 0x7cf00000, 0x34800000,	RTL_GIGA_MAC_VER_07 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1325
		{ 0x7cf00000, 0x24800000,	RTL_GIGA_MAC_VER_07 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1326
		{ 0x7cf00000, 0x34000000,	RTL_GIGA_MAC_VER_13 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1327
		{ 0x7cf00000, 0x34300000,	RTL_GIGA_MAC_VER_10 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1328
		{ 0x7cf00000, 0x34200000,	RTL_GIGA_MAC_VER_16 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1329
		{ 0x7c800000, 0x34800000,	RTL_GIGA_MAC_VER_09 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1330
		{ 0x7c800000, 0x24800000,	RTL_GIGA_MAC_VER_09 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1331
		{ 0x7c800000, 0x34000000,	RTL_GIGA_MAC_VER_16 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1332
		/* FIXME: where did these entries come from ? -- FR */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1333
		{ 0xfc800000, 0x38800000,	RTL_GIGA_MAC_VER_15 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1334
		{ 0xfc800000, 0x30800000,	RTL_GIGA_MAC_VER_14 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1335
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1336
		/* 8110 family. */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1337
		{ 0xfc800000, 0x98000000,	RTL_GIGA_MAC_VER_06 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1338
		{ 0xfc800000, 0x18000000,	RTL_GIGA_MAC_VER_05 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1339
		{ 0xfc800000, 0x10000000,	RTL_GIGA_MAC_VER_04 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1340
		{ 0xfc800000, 0x04000000,	RTL_GIGA_MAC_VER_03 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1341
		{ 0xfc800000, 0x00800000,	RTL_GIGA_MAC_VER_02 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1342
		{ 0xfc800000, 0x00000000,	RTL_GIGA_MAC_VER_01 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1343
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1344
		/* Catch-all */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1345
		{ 0x00000000, 0x00000000,	RTL_GIGA_MAC_NONE   }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1346
	}, *p = mac_info;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1347
	u32 reg;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1348
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1349
	reg = RTL_R32(TxConfig);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1350
	while ((reg & p->mask) != p->val)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1351
		p++;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1352
	tp->mac_version = p->mac_version;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1353
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1354
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1355
static void rtl8169_print_mac_version(struct rtl8169_private *tp)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1356
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1357
	dprintk("mac_version = 0x%02x\n", tp->mac_version);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1358
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1359
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1360
struct phy_reg {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1361
	u16 reg;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1362
	u16 val;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1363
};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1364
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1365
static void rtl_phy_write(void __iomem *ioaddr, struct phy_reg *regs, int len)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1366
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1367
	while (len-- > 0) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1368
		mdio_write(ioaddr, regs->reg, regs->val);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1369
		regs++;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1370
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1371
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1372
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1373
static void rtl8169s_hw_phy_config(void __iomem *ioaddr)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1374
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1375
	struct phy_reg phy_reg_init[] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1376
		{ 0x1f, 0x0001 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1377
		{ 0x06, 0x006e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1378
		{ 0x08, 0x0708 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1379
		{ 0x15, 0x4000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1380
		{ 0x18, 0x65c7 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1381
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1382
		{ 0x1f, 0x0001 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1383
		{ 0x03, 0x00a1 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1384
		{ 0x02, 0x0008 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1385
		{ 0x01, 0x0120 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1386
		{ 0x00, 0x1000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1387
		{ 0x04, 0x0800 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1388
		{ 0x04, 0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1389
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1390
		{ 0x03, 0xff41 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1391
		{ 0x02, 0xdf60 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1392
		{ 0x01, 0x0140 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1393
		{ 0x00, 0x0077 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1394
		{ 0x04, 0x7800 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1395
		{ 0x04, 0x7000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1396
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1397
		{ 0x03, 0x802f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1398
		{ 0x02, 0x4f02 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1399
		{ 0x01, 0x0409 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1400
		{ 0x00, 0xf0f9 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1401
		{ 0x04, 0x9800 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1402
		{ 0x04, 0x9000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1403
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1404
		{ 0x03, 0xdf01 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1405
		{ 0x02, 0xdf20 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1406
		{ 0x01, 0xff95 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1407
		{ 0x00, 0xba00 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1408
		{ 0x04, 0xa800 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1409
		{ 0x04, 0xa000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1410
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1411
		{ 0x03, 0xff41 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1412
		{ 0x02, 0xdf20 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1413
		{ 0x01, 0x0140 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1414
		{ 0x00, 0x00bb },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1415
		{ 0x04, 0xb800 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1416
		{ 0x04, 0xb000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1417
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1418
		{ 0x03, 0xdf41 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1419
		{ 0x02, 0xdc60 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1420
		{ 0x01, 0x6340 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1421
		{ 0x00, 0x007d },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1422
		{ 0x04, 0xd800 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1423
		{ 0x04, 0xd000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1424
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1425
		{ 0x03, 0xdf01 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1426
		{ 0x02, 0xdf20 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1427
		{ 0x01, 0x100a },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1428
		{ 0x00, 0xa0ff },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1429
		{ 0x04, 0xf800 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1430
		{ 0x04, 0xf000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1431
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1432
		{ 0x1f, 0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1433
		{ 0x0b, 0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1434
		{ 0x00, 0x9200 }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1435
	};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1436
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1437
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1438
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1439
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1440
static void rtl8169sb_hw_phy_config(void __iomem *ioaddr)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1441
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1442
	struct phy_reg phy_reg_init[] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1443
		{ 0x1f, 0x0002 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1444
		{ 0x01, 0x90d0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1445
		{ 0x1f, 0x0000 }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1446
	};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1447
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1448
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1449
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1450
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1451
static void rtl8169scd_hw_phy_config_quirk(struct rtl8169_private *tp,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1452
					   void __iomem *ioaddr)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1453
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1454
	struct pci_dev *pdev = tp->pci_dev;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1455
	u16 vendor_id, device_id;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1456
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1457
	pci_read_config_word(pdev, PCI_SUBSYSTEM_VENDOR_ID, &vendor_id);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1458
	pci_read_config_word(pdev, PCI_SUBSYSTEM_ID, &device_id);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1459
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1460
	if ((vendor_id != PCI_VENDOR_ID_GIGABYTE) || (device_id != 0xe000))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1461
		return;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1462
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1463
	mdio_write(ioaddr, 0x1f, 0x0001);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1464
	mdio_write(ioaddr, 0x10, 0xf01b);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1465
	mdio_write(ioaddr, 0x1f, 0x0000);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1466
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1467
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1468
static void rtl8169scd_hw_phy_config(struct rtl8169_private *tp,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1469
				     void __iomem *ioaddr)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1470
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1471
	struct phy_reg phy_reg_init[] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1472
		{ 0x1f, 0x0001 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1473
		{ 0x04, 0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1474
		{ 0x03, 0x00a1 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1475
		{ 0x02, 0x0008 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1476
		{ 0x01, 0x0120 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1477
		{ 0x00, 0x1000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1478
		{ 0x04, 0x0800 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1479
		{ 0x04, 0x9000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1480
		{ 0x03, 0x802f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1481
		{ 0x02, 0x4f02 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1482
		{ 0x01, 0x0409 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1483
		{ 0x00, 0xf099 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1484
		{ 0x04, 0x9800 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1485
		{ 0x04, 0xa000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1486
		{ 0x03, 0xdf01 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1487
		{ 0x02, 0xdf20 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1488
		{ 0x01, 0xff95 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1489
		{ 0x00, 0xba00 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1490
		{ 0x04, 0xa800 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1491
		{ 0x04, 0xf000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1492
		{ 0x03, 0xdf01 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1493
		{ 0x02, 0xdf20 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1494
		{ 0x01, 0x101a },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1495
		{ 0x00, 0xa0ff },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1496
		{ 0x04, 0xf800 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1497
		{ 0x04, 0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1498
		{ 0x1f, 0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1499
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1500
		{ 0x1f, 0x0001 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1501
		{ 0x10, 0xf41b },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1502
		{ 0x14, 0xfb54 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1503
		{ 0x18, 0xf5c7 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1504
		{ 0x1f, 0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1505
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1506
		{ 0x1f, 0x0001 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1507
		{ 0x17, 0x0cc0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1508
		{ 0x1f, 0x0000 }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1509
	};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1510
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1511
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1512
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1513
	rtl8169scd_hw_phy_config_quirk(tp, ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1514
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1515
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1516
static void rtl8169sce_hw_phy_config(void __iomem *ioaddr)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1517
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1518
	struct phy_reg phy_reg_init[] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1519
		{ 0x1f, 0x0001 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1520
		{ 0x04, 0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1521
		{ 0x03, 0x00a1 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1522
		{ 0x02, 0x0008 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1523
		{ 0x01, 0x0120 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1524
		{ 0x00, 0x1000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1525
		{ 0x04, 0x0800 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1526
		{ 0x04, 0x9000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1527
		{ 0x03, 0x802f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1528
		{ 0x02, 0x4f02 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1529
		{ 0x01, 0x0409 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1530
		{ 0x00, 0xf099 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1531
		{ 0x04, 0x9800 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1532
		{ 0x04, 0xa000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1533
		{ 0x03, 0xdf01 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1534
		{ 0x02, 0xdf20 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1535
		{ 0x01, 0xff95 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1536
		{ 0x00, 0xba00 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1537
		{ 0x04, 0xa800 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1538
		{ 0x04, 0xf000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1539
		{ 0x03, 0xdf01 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1540
		{ 0x02, 0xdf20 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1541
		{ 0x01, 0x101a },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1542
		{ 0x00, 0xa0ff },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1543
		{ 0x04, 0xf800 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1544
		{ 0x04, 0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1545
		{ 0x1f, 0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1546
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1547
		{ 0x1f, 0x0001 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1548
		{ 0x0b, 0x8480 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1549
		{ 0x1f, 0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1550
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1551
		{ 0x1f, 0x0001 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1552
		{ 0x18, 0x67c7 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1553
		{ 0x04, 0x2000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1554
		{ 0x03, 0x002f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1555
		{ 0x02, 0x4360 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1556
		{ 0x01, 0x0109 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1557
		{ 0x00, 0x3022 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1558
		{ 0x04, 0x2800 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1559
		{ 0x1f, 0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1560
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1561
		{ 0x1f, 0x0001 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1562
		{ 0x17, 0x0cc0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1563
		{ 0x1f, 0x0000 }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1564
	};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1565
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1566
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1567
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1568
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1569
static void rtl8168bb_hw_phy_config(void __iomem *ioaddr)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1570
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1571
	struct phy_reg phy_reg_init[] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1572
		{ 0x10, 0xf41b },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1573
		{ 0x1f, 0x0000 }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1574
	};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1575
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1576
	mdio_write(ioaddr, 0x1f, 0x0001);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1577
	mdio_patch(ioaddr, 0x16, 1 << 0);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1578
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1579
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1580
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1581
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1582
static void rtl8168bef_hw_phy_config(void __iomem *ioaddr)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1583
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1584
	struct phy_reg phy_reg_init[] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1585
		{ 0x1f, 0x0001 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1586
		{ 0x10, 0xf41b },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1587
		{ 0x1f, 0x0000 }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1588
	};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1589
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1590
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1591
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1592
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1593
static void rtl8168cp_1_hw_phy_config(void __iomem *ioaddr)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1594
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1595
	struct phy_reg phy_reg_init[] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1596
		{ 0x1f, 0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1597
		{ 0x1d, 0x0f00 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1598
		{ 0x1f, 0x0002 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1599
		{ 0x0c, 0x1ec8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1600
		{ 0x1f, 0x0000 }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1601
	};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1602
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1603
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1604
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1605
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1606
static void rtl8168cp_2_hw_phy_config(void __iomem *ioaddr)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1607
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1608
	struct phy_reg phy_reg_init[] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1609
		{ 0x1f, 0x0001 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1610
		{ 0x1d, 0x3d98 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1611
		{ 0x1f, 0x0000 }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1612
	};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1613
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1614
	mdio_write(ioaddr, 0x1f, 0x0000);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1615
	mdio_patch(ioaddr, 0x14, 1 << 5);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1616
	mdio_patch(ioaddr, 0x0d, 1 << 5);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1617
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1618
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1619
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1620
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1621
static void rtl8168c_1_hw_phy_config(void __iomem *ioaddr)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1622
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1623
	struct phy_reg phy_reg_init[] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1624
		{ 0x1f, 0x0001 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1625
		{ 0x12, 0x2300 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1626
		{ 0x1f, 0x0002 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1627
		{ 0x00, 0x88d4 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1628
		{ 0x01, 0x82b1 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1629
		{ 0x03, 0x7002 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1630
		{ 0x08, 0x9e30 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1631
		{ 0x09, 0x01f0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1632
		{ 0x0a, 0x5500 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1633
		{ 0x0c, 0x00c8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1634
		{ 0x1f, 0x0003 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1635
		{ 0x12, 0xc096 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1636
		{ 0x16, 0x000a },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1637
		{ 0x1f, 0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1638
		{ 0x1f, 0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1639
		{ 0x09, 0x2000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1640
		{ 0x09, 0x0000 }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1641
	};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1642
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1643
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1644
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1645
	mdio_patch(ioaddr, 0x14, 1 << 5);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1646
	mdio_patch(ioaddr, 0x0d, 1 << 5);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1647
	mdio_write(ioaddr, 0x1f, 0x0000);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1648
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1649
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1650
static void rtl8168c_2_hw_phy_config(void __iomem *ioaddr)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1651
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1652
	struct phy_reg phy_reg_init[] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1653
		{ 0x1f, 0x0001 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1654
		{ 0x12, 0x2300 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1655
		{ 0x03, 0x802f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1656
		{ 0x02, 0x4f02 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1657
		{ 0x01, 0x0409 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1658
		{ 0x00, 0xf099 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1659
		{ 0x04, 0x9800 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1660
		{ 0x04, 0x9000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1661
		{ 0x1d, 0x3d98 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1662
		{ 0x1f, 0x0002 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1663
		{ 0x0c, 0x7eb8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1664
		{ 0x06, 0x0761 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1665
		{ 0x1f, 0x0003 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1666
		{ 0x16, 0x0f0a },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1667
		{ 0x1f, 0x0000 }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1668
	};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1669
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1670
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1671
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1672
	mdio_patch(ioaddr, 0x16, 1 << 0);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1673
	mdio_patch(ioaddr, 0x14, 1 << 5);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1674
	mdio_patch(ioaddr, 0x0d, 1 << 5);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1675
	mdio_write(ioaddr, 0x1f, 0x0000);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1676
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1677
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1678
static void rtl8168c_3_hw_phy_config(void __iomem *ioaddr)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1679
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1680
	struct phy_reg phy_reg_init[] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1681
		{ 0x1f, 0x0001 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1682
		{ 0x12, 0x2300 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1683
		{ 0x1d, 0x3d98 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1684
		{ 0x1f, 0x0002 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1685
		{ 0x0c, 0x7eb8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1686
		{ 0x06, 0x5461 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1687
		{ 0x1f, 0x0003 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1688
		{ 0x16, 0x0f0a },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1689
		{ 0x1f, 0x0000 }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1690
	};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1691
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1692
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1693
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1694
	mdio_patch(ioaddr, 0x16, 1 << 0);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1695
	mdio_patch(ioaddr, 0x14, 1 << 5);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1696
	mdio_patch(ioaddr, 0x0d, 1 << 5);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1697
	mdio_write(ioaddr, 0x1f, 0x0000);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1698
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1699
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1700
static void rtl8168c_4_hw_phy_config(void __iomem *ioaddr)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1701
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1702
	rtl8168c_3_hw_phy_config(ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1703
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1704
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1705
static void rtl8168d_1_hw_phy_config(void __iomem *ioaddr)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1706
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1707
	static struct phy_reg phy_reg_init_0[] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1708
		{ 0x1f, 0x0001 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1709
		{ 0x06, 0x4064 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1710
		{ 0x07, 0x2863 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1711
		{ 0x08, 0x059c },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1712
		{ 0x09, 0x26b4 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1713
		{ 0x0a, 0x6a19 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1714
		{ 0x0b, 0xdcc8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1715
		{ 0x10, 0xf06d },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1716
		{ 0x14, 0x7f68 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1717
		{ 0x18, 0x7fd9 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1718
		{ 0x1c, 0xf0ff },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1719
		{ 0x1d, 0x3d9c },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1720
		{ 0x1f, 0x0003 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1721
		{ 0x12, 0xf49f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1722
		{ 0x13, 0x070b },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1723
		{ 0x1a, 0x05ad },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1724
		{ 0x14, 0x94c0 }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1725
	};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1726
	static struct phy_reg phy_reg_init_1[] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1727
		{ 0x1f, 0x0002 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1728
		{ 0x06, 0x5561 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1729
		{ 0x1f, 0x0005 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1730
		{ 0x05, 0x8332 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1731
		{ 0x06, 0x5561 }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1732
	};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1733
	static struct phy_reg phy_reg_init_2[] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1734
		{ 0x1f, 0x0005 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1735
		{ 0x05, 0xffc2 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1736
		{ 0x1f, 0x0005 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1737
		{ 0x05, 0x8000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1738
		{ 0x06, 0xf8f9 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1739
		{ 0x06, 0xfaef },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1740
		{ 0x06, 0x59ee },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1741
		{ 0x06, 0xf8ea },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1742
		{ 0x06, 0x00ee },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1743
		{ 0x06, 0xf8eb },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1744
		{ 0x06, 0x00e0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1745
		{ 0x06, 0xf87c },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1746
		{ 0x06, 0xe1f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1747
		{ 0x06, 0x7d59 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1748
		{ 0x06, 0x0fef },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1749
		{ 0x06, 0x0139 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1750
		{ 0x06, 0x029e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1751
		{ 0x06, 0x06ef },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1752
		{ 0x06, 0x1039 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1753
		{ 0x06, 0x089f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1754
		{ 0x06, 0x2aee },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1755
		{ 0x06, 0xf8ea },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1756
		{ 0x06, 0x00ee },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1757
		{ 0x06, 0xf8eb },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1758
		{ 0x06, 0x01e0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1759
		{ 0x06, 0xf87c },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1760
		{ 0x06, 0xe1f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1761
		{ 0x06, 0x7d58 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1762
		{ 0x06, 0x409e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1763
		{ 0x06, 0x0f39 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1764
		{ 0x06, 0x46aa },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1765
		{ 0x06, 0x0bbf },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1766
		{ 0x06, 0x8290 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1767
		{ 0x06, 0xd682 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1768
		{ 0x06, 0x9802 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1769
		{ 0x06, 0x014f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1770
		{ 0x06, 0xae09 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1771
		{ 0x06, 0xbf82 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1772
		{ 0x06, 0x98d6 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1773
		{ 0x06, 0x82a0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1774
		{ 0x06, 0x0201 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1775
		{ 0x06, 0x4fef },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1776
		{ 0x06, 0x95fe },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1777
		{ 0x06, 0xfdfc },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1778
		{ 0x06, 0x05f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1779
		{ 0x06, 0xf9fa },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1780
		{ 0x06, 0xeef8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1781
		{ 0x06, 0xea00 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1782
		{ 0x06, 0xeef8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1783
		{ 0x06, 0xeb00 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1784
		{ 0x06, 0xe2f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1785
		{ 0x06, 0x7ce3 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1786
		{ 0x06, 0xf87d },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1787
		{ 0x06, 0xa511 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1788
		{ 0x06, 0x1112 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1789
		{ 0x06, 0xd240 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1790
		{ 0x06, 0xd644 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1791
		{ 0x06, 0x4402 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1792
		{ 0x06, 0x8217 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1793
		{ 0x06, 0xd2a0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1794
		{ 0x06, 0xd6aa },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1795
		{ 0x06, 0xaa02 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1796
		{ 0x06, 0x8217 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1797
		{ 0x06, 0xae0f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1798
		{ 0x06, 0xa544 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1799
		{ 0x06, 0x4402 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1800
		{ 0x06, 0xae4d },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1801
		{ 0x06, 0xa5aa },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1802
		{ 0x06, 0xaa02 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1803
		{ 0x06, 0xae47 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1804
		{ 0x06, 0xaf82 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1805
		{ 0x06, 0x13ee },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1806
		{ 0x06, 0x834e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1807
		{ 0x06, 0x00ee },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1808
		{ 0x06, 0x834d },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1809
		{ 0x06, 0x0fee },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1810
		{ 0x06, 0x834c },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1811
		{ 0x06, 0x0fee },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1812
		{ 0x06, 0x834f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1813
		{ 0x06, 0x00ee },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1814
		{ 0x06, 0x8351 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1815
		{ 0x06, 0x00ee },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1816
		{ 0x06, 0x834a },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1817
		{ 0x06, 0xffee },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1818
		{ 0x06, 0x834b },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1819
		{ 0x06, 0xffe0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1820
		{ 0x06, 0x8330 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1821
		{ 0x06, 0xe183 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1822
		{ 0x06, 0x3158 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1823
		{ 0x06, 0xfee4 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1824
		{ 0x06, 0xf88a },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1825
		{ 0x06, 0xe5f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1826
		{ 0x06, 0x8be0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1827
		{ 0x06, 0x8332 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1828
		{ 0x06, 0xe183 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1829
		{ 0x06, 0x3359 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1830
		{ 0x06, 0x0fe2 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1831
		{ 0x06, 0x834d },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1832
		{ 0x06, 0x0c24 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1833
		{ 0x06, 0x5af0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1834
		{ 0x06, 0x1e12 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1835
		{ 0x06, 0xe4f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1836
		{ 0x06, 0x8ce5 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1837
		{ 0x06, 0xf88d },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1838
		{ 0x06, 0xaf82 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1839
		{ 0x06, 0x13e0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1840
		{ 0x06, 0x834f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1841
		{ 0x06, 0x10e4 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1842
		{ 0x06, 0x834f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1843
		{ 0x06, 0xe083 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1844
		{ 0x06, 0x4e78 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1845
		{ 0x06, 0x009f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1846
		{ 0x06, 0x0ae0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1847
		{ 0x06, 0x834f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1848
		{ 0x06, 0xa010 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1849
		{ 0x06, 0xa5ee },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1850
		{ 0x06, 0x834e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1851
		{ 0x06, 0x01e0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1852
		{ 0x06, 0x834e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1853
		{ 0x06, 0x7805 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1854
		{ 0x06, 0x9e9a },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1855
		{ 0x06, 0xe083 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1856
		{ 0x06, 0x4e78 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1857
		{ 0x06, 0x049e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1858
		{ 0x06, 0x10e0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1859
		{ 0x06, 0x834e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1860
		{ 0x06, 0x7803 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1861
		{ 0x06, 0x9e0f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1862
		{ 0x06, 0xe083 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1863
		{ 0x06, 0x4e78 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1864
		{ 0x06, 0x019e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1865
		{ 0x06, 0x05ae },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1866
		{ 0x06, 0x0caf },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1867
		{ 0x06, 0x81f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1868
		{ 0x06, 0xaf81 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1869
		{ 0x06, 0xa3af },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1870
		{ 0x06, 0x81dc },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1871
		{ 0x06, 0xaf82 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1872
		{ 0x06, 0x13ee },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1873
		{ 0x06, 0x8348 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1874
		{ 0x06, 0x00ee },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1875
		{ 0x06, 0x8349 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1876
		{ 0x06, 0x00e0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1877
		{ 0x06, 0x8351 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1878
		{ 0x06, 0x10e4 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1879
		{ 0x06, 0x8351 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1880
		{ 0x06, 0x5801 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1881
		{ 0x06, 0x9fea },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1882
		{ 0x06, 0xd000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1883
		{ 0x06, 0xd180 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1884
		{ 0x06, 0x1f66 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1885
		{ 0x06, 0xe2f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1886
		{ 0x06, 0xeae3 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1887
		{ 0x06, 0xf8eb },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1888
		{ 0x06, 0x5af8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1889
		{ 0x06, 0x1e20 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1890
		{ 0x06, 0xe6f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1891
		{ 0x06, 0xeae5 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1892
		{ 0x06, 0xf8eb },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1893
		{ 0x06, 0xd302 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1894
		{ 0x06, 0xb3fe },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1895
		{ 0x06, 0xe2f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1896
		{ 0x06, 0x7cef },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1897
		{ 0x06, 0x325b },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1898
		{ 0x06, 0x80e3 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1899
		{ 0x06, 0xf87d },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1900
		{ 0x06, 0x9e03 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1901
		{ 0x06, 0x7dff },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1902
		{ 0x06, 0xff0d },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1903
		{ 0x06, 0x581c },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1904
		{ 0x06, 0x551a },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1905
		{ 0x06, 0x6511 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1906
		{ 0x06, 0xa190 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1907
		{ 0x06, 0xd3e2 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1908
		{ 0x06, 0x8348 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1909
		{ 0x06, 0xe383 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1910
		{ 0x06, 0x491b },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1911
		{ 0x06, 0x56ab },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1912
		{ 0x06, 0x08ef },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1913
		{ 0x06, 0x56e6 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1914
		{ 0x06, 0x8348 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1915
		{ 0x06, 0xe783 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1916
		{ 0x06, 0x4910 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1917
		{ 0x06, 0xd180 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1918
		{ 0x06, 0x1f66 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1919
		{ 0x06, 0xa004 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1920
		{ 0x06, 0xb9e2 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1921
		{ 0x06, 0x8348 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1922
		{ 0x06, 0xe383 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1923
		{ 0x06, 0x49ef },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1924
		{ 0x06, 0x65e2 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1925
		{ 0x06, 0x834a },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1926
		{ 0x06, 0xe383 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1927
		{ 0x06, 0x4b1b },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1928
		{ 0x06, 0x56aa },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1929
		{ 0x06, 0x0eef },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1930
		{ 0x06, 0x56e6 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1931
		{ 0x06, 0x834a },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1932
		{ 0x06, 0xe783 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1933
		{ 0x06, 0x4be2 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1934
		{ 0x06, 0x834d },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1935
		{ 0x06, 0xe683 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1936
		{ 0x06, 0x4ce0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1937
		{ 0x06, 0x834d },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1938
		{ 0x06, 0xa000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1939
		{ 0x06, 0x0caf },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1940
		{ 0x06, 0x81dc },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1941
		{ 0x06, 0xe083 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1942
		{ 0x06, 0x4d10 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1943
		{ 0x06, 0xe483 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1944
		{ 0x06, 0x4dae },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1945
		{ 0x06, 0x0480 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1946
		{ 0x06, 0xe483 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1947
		{ 0x06, 0x4de0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1948
		{ 0x06, 0x834e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1949
		{ 0x06, 0x7803 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1950
		{ 0x06, 0x9e0b },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1951
		{ 0x06, 0xe083 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1952
		{ 0x06, 0x4e78 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1953
		{ 0x06, 0x049e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1954
		{ 0x06, 0x04ee },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1955
		{ 0x06, 0x834e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1956
		{ 0x06, 0x02e0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1957
		{ 0x06, 0x8332 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1958
		{ 0x06, 0xe183 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1959
		{ 0x06, 0x3359 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1960
		{ 0x06, 0x0fe2 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1961
		{ 0x06, 0x834d },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1962
		{ 0x06, 0x0c24 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1963
		{ 0x06, 0x5af0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1964
		{ 0x06, 0x1e12 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1965
		{ 0x06, 0xe4f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1966
		{ 0x06, 0x8ce5 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1967
		{ 0x06, 0xf88d },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1968
		{ 0x06, 0xe083 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1969
		{ 0x06, 0x30e1 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1970
		{ 0x06, 0x8331 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1971
		{ 0x06, 0x6801 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1972
		{ 0x06, 0xe4f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1973
		{ 0x06, 0x8ae5 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1974
		{ 0x06, 0xf88b },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1975
		{ 0x06, 0xae37 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1976
		{ 0x06, 0xee83 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1977
		{ 0x06, 0x4e03 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1978
		{ 0x06, 0xe083 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1979
		{ 0x06, 0x4ce1 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1980
		{ 0x06, 0x834d },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1981
		{ 0x06, 0x1b01 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1982
		{ 0x06, 0x9e04 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1983
		{ 0x06, 0xaaa1 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1984
		{ 0x06, 0xaea8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1985
		{ 0x06, 0xee83 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1986
		{ 0x06, 0x4e04 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1987
		{ 0x06, 0xee83 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1988
		{ 0x06, 0x4f00 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1989
		{ 0x06, 0xaeab },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1990
		{ 0x06, 0xe083 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1991
		{ 0x06, 0x4f78 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1992
		{ 0x06, 0x039f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1993
		{ 0x06, 0x14ee },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1994
		{ 0x06, 0x834e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1995
		{ 0x06, 0x05d2 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1996
		{ 0x06, 0x40d6 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1997
		{ 0x06, 0x5554 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1998
		{ 0x06, 0x0282 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1999
		{ 0x06, 0x17d2 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2000
		{ 0x06, 0xa0d6 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2001
		{ 0x06, 0xba00 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2002
		{ 0x06, 0x0282 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2003
		{ 0x06, 0x17fe },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2004
		{ 0x06, 0xfdfc },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2005
		{ 0x06, 0x05f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2006
		{ 0x06, 0xe0f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2007
		{ 0x06, 0x60e1 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2008
		{ 0x06, 0xf861 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2009
		{ 0x06, 0x6802 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2010
		{ 0x06, 0xe4f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2011
		{ 0x06, 0x60e5 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2012
		{ 0x06, 0xf861 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2013
		{ 0x06, 0xe0f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2014
		{ 0x06, 0x48e1 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2015
		{ 0x06, 0xf849 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2016
		{ 0x06, 0x580f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2017
		{ 0x06, 0x1e02 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2018
		{ 0x06, 0xe4f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2019
		{ 0x06, 0x48e5 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2020
		{ 0x06, 0xf849 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2021
		{ 0x06, 0xd000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2022
		{ 0x06, 0x0282 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2023
		{ 0x06, 0x5bbf },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2024
		{ 0x06, 0x8350 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2025
		{ 0x06, 0xef46 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2026
		{ 0x06, 0xdc19 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2027
		{ 0x06, 0xddd0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2028
		{ 0x06, 0x0102 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2029
		{ 0x06, 0x825b },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2030
		{ 0x06, 0x0282 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2031
		{ 0x06, 0x77e0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2032
		{ 0x06, 0xf860 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2033
		{ 0x06, 0xe1f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2034
		{ 0x06, 0x6158 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2035
		{ 0x06, 0xfde4 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2036
		{ 0x06, 0xf860 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2037
		{ 0x06, 0xe5f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2038
		{ 0x06, 0x61fc },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2039
		{ 0x06, 0x04f9 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2040
		{ 0x06, 0xfafb },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2041
		{ 0x06, 0xc6bf },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2042
		{ 0x06, 0xf840 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2043
		{ 0x06, 0xbe83 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2044
		{ 0x06, 0x50a0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2045
		{ 0x06, 0x0101 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2046
		{ 0x06, 0x071b },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2047
		{ 0x06, 0x89cf },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2048
		{ 0x06, 0xd208 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2049
		{ 0x06, 0xebdb },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2050
		{ 0x06, 0x19b2 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2051
		{ 0x06, 0xfbff },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2052
		{ 0x06, 0xfefd },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2053
		{ 0x06, 0x04f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2054
		{ 0x06, 0xe0f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2055
		{ 0x06, 0x48e1 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2056
		{ 0x06, 0xf849 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2057
		{ 0x06, 0x6808 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2058
		{ 0x06, 0xe4f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2059
		{ 0x06, 0x48e5 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2060
		{ 0x06, 0xf849 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2061
		{ 0x06, 0x58f7 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2062
		{ 0x06, 0xe4f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2063
		{ 0x06, 0x48e5 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2064
		{ 0x06, 0xf849 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2065
		{ 0x06, 0xfc04 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2066
		{ 0x06, 0x4d20 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2067
		{ 0x06, 0x0002 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2068
		{ 0x06, 0x4e22 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2069
		{ 0x06, 0x0002 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2070
		{ 0x06, 0x4ddf },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2071
		{ 0x06, 0xff01 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2072
		{ 0x06, 0x4edd },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2073
		{ 0x06, 0xff01 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2074
		{ 0x05, 0x83d4 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2075
		{ 0x06, 0x8000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2076
		{ 0x05, 0x83d8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2077
		{ 0x06, 0x8051 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2078
		{ 0x02, 0x6010 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2079
		{ 0x03, 0xdc00 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2080
		{ 0x05, 0xfff6 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2081
		{ 0x06, 0x00fc },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2082
		{ 0x1f, 0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2083
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2084
		{ 0x1f, 0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2085
		{ 0x0d, 0xf880 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2086
		{ 0x1f, 0x0000 }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2087
	};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2088
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2089
	rtl_phy_write(ioaddr, phy_reg_init_0, ARRAY_SIZE(phy_reg_init_0));
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2090
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2091
	mdio_write(ioaddr, 0x1f, 0x0002);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2092
	mdio_plus_minus(ioaddr, 0x0b, 0x0010, 0x00ef);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2093
	mdio_plus_minus(ioaddr, 0x0c, 0xa200, 0x5d00);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2094
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2095
	rtl_phy_write(ioaddr, phy_reg_init_1, ARRAY_SIZE(phy_reg_init_1));
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2096
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2097
	if (rtl8168d_efuse_read(ioaddr, 0x01) == 0xb1) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2098
		struct phy_reg phy_reg_init[] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2099
			{ 0x1f, 0x0002 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2100
			{ 0x05, 0x669a },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2101
			{ 0x1f, 0x0005 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2102
			{ 0x05, 0x8330 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2103
			{ 0x06, 0x669a },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2104
			{ 0x1f, 0x0002 }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2105
		};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2106
		int val;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2107
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2108
		rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2109
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2110
		val = mdio_read(ioaddr, 0x0d);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2111
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2112
		if ((val & 0x00ff) != 0x006c) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2113
			u32 set[] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2114
				0x0065, 0x0066, 0x0067, 0x0068,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2115
				0x0069, 0x006a, 0x006b, 0x006c
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2116
			};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2117
			int i;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2118
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2119
			mdio_write(ioaddr, 0x1f, 0x0002);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2120
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2121
			val &= 0xff00;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2122
			for (i = 0; i < ARRAY_SIZE(set); i++)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2123
				mdio_write(ioaddr, 0x0d, val | set[i]);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2124
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2125
	} else {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2126
		struct phy_reg phy_reg_init[] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2127
			{ 0x1f, 0x0002 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2128
			{ 0x05, 0x6662 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2129
			{ 0x1f, 0x0005 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2130
			{ 0x05, 0x8330 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2131
			{ 0x06, 0x6662 }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2132
		};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2133
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2134
		rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2135
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2136
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2137
	mdio_write(ioaddr, 0x1f, 0x0002);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2138
	mdio_patch(ioaddr, 0x0d, 0x0300);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2139
	mdio_patch(ioaddr, 0x0f, 0x0010);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2140
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2141
	mdio_write(ioaddr, 0x1f, 0x0002);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2142
	mdio_plus_minus(ioaddr, 0x02, 0x0100, 0x0600);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2143
	mdio_plus_minus(ioaddr, 0x03, 0x0000, 0xe000);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2144
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2145
	rtl_phy_write(ioaddr, phy_reg_init_2, ARRAY_SIZE(phy_reg_init_2));
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2146
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2147
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2148
static void rtl8168d_2_hw_phy_config(void __iomem *ioaddr)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2149
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2150
	static struct phy_reg phy_reg_init_0[] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2151
		{ 0x1f, 0x0001 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2152
		{ 0x06, 0x4064 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2153
		{ 0x07, 0x2863 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2154
		{ 0x08, 0x059c },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2155
		{ 0x09, 0x26b4 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2156
		{ 0x0a, 0x6a19 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2157
		{ 0x0b, 0xdcc8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2158
		{ 0x10, 0xf06d },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2159
		{ 0x14, 0x7f68 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2160
		{ 0x18, 0x7fd9 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2161
		{ 0x1c, 0xf0ff },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2162
		{ 0x1d, 0x3d9c },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2163
		{ 0x1f, 0x0003 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2164
		{ 0x12, 0xf49f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2165
		{ 0x13, 0x070b },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2166
		{ 0x1a, 0x05ad },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2167
		{ 0x14, 0x94c0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2168
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2169
		{ 0x1f, 0x0002 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2170
		{ 0x06, 0x5561 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2171
		{ 0x1f, 0x0005 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2172
		{ 0x05, 0x8332 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2173
		{ 0x06, 0x5561 }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2174
	};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2175
	static struct phy_reg phy_reg_init_1[] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2176
		{ 0x1f, 0x0005 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2177
		{ 0x05, 0xffc2 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2178
		{ 0x1f, 0x0005 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2179
		{ 0x05, 0x8000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2180
		{ 0x06, 0xf8f9 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2181
		{ 0x06, 0xfaee },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2182
		{ 0x06, 0xf8ea },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2183
		{ 0x06, 0x00ee },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2184
		{ 0x06, 0xf8eb },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2185
		{ 0x06, 0x00e2 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2186
		{ 0x06, 0xf87c },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2187
		{ 0x06, 0xe3f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2188
		{ 0x06, 0x7da5 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2189
		{ 0x06, 0x1111 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2190
		{ 0x06, 0x12d2 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2191
		{ 0x06, 0x40d6 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2192
		{ 0x06, 0x4444 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2193
		{ 0x06, 0x0281 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2194
		{ 0x06, 0xc6d2 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2195
		{ 0x06, 0xa0d6 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2196
		{ 0x06, 0xaaaa },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2197
		{ 0x06, 0x0281 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2198
		{ 0x06, 0xc6ae },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2199
		{ 0x06, 0x0fa5 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2200
		{ 0x06, 0x4444 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2201
		{ 0x06, 0x02ae },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2202
		{ 0x06, 0x4da5 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2203
		{ 0x06, 0xaaaa },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2204
		{ 0x06, 0x02ae },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2205
		{ 0x06, 0x47af },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2206
		{ 0x06, 0x81c2 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2207
		{ 0x06, 0xee83 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2208
		{ 0x06, 0x4e00 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2209
		{ 0x06, 0xee83 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2210
		{ 0x06, 0x4d0f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2211
		{ 0x06, 0xee83 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2212
		{ 0x06, 0x4c0f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2213
		{ 0x06, 0xee83 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2214
		{ 0x06, 0x4f00 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2215
		{ 0x06, 0xee83 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2216
		{ 0x06, 0x5100 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2217
		{ 0x06, 0xee83 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2218
		{ 0x06, 0x4aff },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2219
		{ 0x06, 0xee83 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2220
		{ 0x06, 0x4bff },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2221
		{ 0x06, 0xe083 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2222
		{ 0x06, 0x30e1 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2223
		{ 0x06, 0x8331 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2224
		{ 0x06, 0x58fe },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2225
		{ 0x06, 0xe4f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2226
		{ 0x06, 0x8ae5 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2227
		{ 0x06, 0xf88b },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2228
		{ 0x06, 0xe083 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2229
		{ 0x06, 0x32e1 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2230
		{ 0x06, 0x8333 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2231
		{ 0x06, 0x590f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2232
		{ 0x06, 0xe283 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2233
		{ 0x06, 0x4d0c },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2234
		{ 0x06, 0x245a },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2235
		{ 0x06, 0xf01e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2236
		{ 0x06, 0x12e4 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2237
		{ 0x06, 0xf88c },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2238
		{ 0x06, 0xe5f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2239
		{ 0x06, 0x8daf },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2240
		{ 0x06, 0x81c2 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2241
		{ 0x06, 0xe083 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2242
		{ 0x06, 0x4f10 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2243
		{ 0x06, 0xe483 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2244
		{ 0x06, 0x4fe0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2245
		{ 0x06, 0x834e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2246
		{ 0x06, 0x7800 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2247
		{ 0x06, 0x9f0a },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2248
		{ 0x06, 0xe083 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2249
		{ 0x06, 0x4fa0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2250
		{ 0x06, 0x10a5 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2251
		{ 0x06, 0xee83 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2252
		{ 0x06, 0x4e01 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2253
		{ 0x06, 0xe083 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2254
		{ 0x06, 0x4e78 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2255
		{ 0x06, 0x059e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2256
		{ 0x06, 0x9ae0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2257
		{ 0x06, 0x834e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2258
		{ 0x06, 0x7804 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2259
		{ 0x06, 0x9e10 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2260
		{ 0x06, 0xe083 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2261
		{ 0x06, 0x4e78 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2262
		{ 0x06, 0x039e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2263
		{ 0x06, 0x0fe0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2264
		{ 0x06, 0x834e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2265
		{ 0x06, 0x7801 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2266
		{ 0x06, 0x9e05 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2267
		{ 0x06, 0xae0c },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2268
		{ 0x06, 0xaf81 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2269
		{ 0x06, 0xa7af },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2270
		{ 0x06, 0x8152 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2271
		{ 0x06, 0xaf81 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2272
		{ 0x06, 0x8baf },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2273
		{ 0x06, 0x81c2 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2274
		{ 0x06, 0xee83 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2275
		{ 0x06, 0x4800 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2276
		{ 0x06, 0xee83 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2277
		{ 0x06, 0x4900 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2278
		{ 0x06, 0xe083 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2279
		{ 0x06, 0x5110 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2280
		{ 0x06, 0xe483 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2281
		{ 0x06, 0x5158 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2282
		{ 0x06, 0x019f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2283
		{ 0x06, 0xead0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2284
		{ 0x06, 0x00d1 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2285
		{ 0x06, 0x801f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2286
		{ 0x06, 0x66e2 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2287
		{ 0x06, 0xf8ea },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2288
		{ 0x06, 0xe3f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2289
		{ 0x06, 0xeb5a },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2290
		{ 0x06, 0xf81e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2291
		{ 0x06, 0x20e6 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2292
		{ 0x06, 0xf8ea },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2293
		{ 0x06, 0xe5f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2294
		{ 0x06, 0xebd3 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2295
		{ 0x06, 0x02b3 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2296
		{ 0x06, 0xfee2 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2297
		{ 0x06, 0xf87c },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2298
		{ 0x06, 0xef32 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2299
		{ 0x06, 0x5b80 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2300
		{ 0x06, 0xe3f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2301
		{ 0x06, 0x7d9e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2302
		{ 0x06, 0x037d },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2303
		{ 0x06, 0xffff },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2304
		{ 0x06, 0x0d58 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2305
		{ 0x06, 0x1c55 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2306
		{ 0x06, 0x1a65 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2307
		{ 0x06, 0x11a1 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2308
		{ 0x06, 0x90d3 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2309
		{ 0x06, 0xe283 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2310
		{ 0x06, 0x48e3 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2311
		{ 0x06, 0x8349 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2312
		{ 0x06, 0x1b56 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2313
		{ 0x06, 0xab08 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2314
		{ 0x06, 0xef56 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2315
		{ 0x06, 0xe683 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2316
		{ 0x06, 0x48e7 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2317
		{ 0x06, 0x8349 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2318
		{ 0x06, 0x10d1 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2319
		{ 0x06, 0x801f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2320
		{ 0x06, 0x66a0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2321
		{ 0x06, 0x04b9 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2322
		{ 0x06, 0xe283 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2323
		{ 0x06, 0x48e3 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2324
		{ 0x06, 0x8349 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2325
		{ 0x06, 0xef65 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2326
		{ 0x06, 0xe283 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2327
		{ 0x06, 0x4ae3 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2328
		{ 0x06, 0x834b },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2329
		{ 0x06, 0x1b56 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2330
		{ 0x06, 0xaa0e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2331
		{ 0x06, 0xef56 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2332
		{ 0x06, 0xe683 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2333
		{ 0x06, 0x4ae7 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2334
		{ 0x06, 0x834b },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2335
		{ 0x06, 0xe283 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2336
		{ 0x06, 0x4de6 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2337
		{ 0x06, 0x834c },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2338
		{ 0x06, 0xe083 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2339
		{ 0x06, 0x4da0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2340
		{ 0x06, 0x000c },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2341
		{ 0x06, 0xaf81 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2342
		{ 0x06, 0x8be0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2343
		{ 0x06, 0x834d },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2344
		{ 0x06, 0x10e4 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2345
		{ 0x06, 0x834d },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2346
		{ 0x06, 0xae04 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2347
		{ 0x06, 0x80e4 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2348
		{ 0x06, 0x834d },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2349
		{ 0x06, 0xe083 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2350
		{ 0x06, 0x4e78 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2351
		{ 0x06, 0x039e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2352
		{ 0x06, 0x0be0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2353
		{ 0x06, 0x834e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2354
		{ 0x06, 0x7804 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2355
		{ 0x06, 0x9e04 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2356
		{ 0x06, 0xee83 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2357
		{ 0x06, 0x4e02 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2358
		{ 0x06, 0xe083 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2359
		{ 0x06, 0x32e1 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2360
		{ 0x06, 0x8333 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2361
		{ 0x06, 0x590f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2362
		{ 0x06, 0xe283 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2363
		{ 0x06, 0x4d0c },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2364
		{ 0x06, 0x245a },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2365
		{ 0x06, 0xf01e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2366
		{ 0x06, 0x12e4 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2367
		{ 0x06, 0xf88c },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2368
		{ 0x06, 0xe5f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2369
		{ 0x06, 0x8de0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2370
		{ 0x06, 0x8330 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2371
		{ 0x06, 0xe183 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2372
		{ 0x06, 0x3168 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2373
		{ 0x06, 0x01e4 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2374
		{ 0x06, 0xf88a },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2375
		{ 0x06, 0xe5f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2376
		{ 0x06, 0x8bae },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2377
		{ 0x06, 0x37ee },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2378
		{ 0x06, 0x834e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2379
		{ 0x06, 0x03e0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2380
		{ 0x06, 0x834c },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2381
		{ 0x06, 0xe183 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2382
		{ 0x06, 0x4d1b },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2383
		{ 0x06, 0x019e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2384
		{ 0x06, 0x04aa },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2385
		{ 0x06, 0xa1ae },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2386
		{ 0x06, 0xa8ee },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2387
		{ 0x06, 0x834e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2388
		{ 0x06, 0x04ee },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2389
		{ 0x06, 0x834f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2390
		{ 0x06, 0x00ae },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2391
		{ 0x06, 0xabe0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2392
		{ 0x06, 0x834f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2393
		{ 0x06, 0x7803 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2394
		{ 0x06, 0x9f14 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2395
		{ 0x06, 0xee83 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2396
		{ 0x06, 0x4e05 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2397
		{ 0x06, 0xd240 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2398
		{ 0x06, 0xd655 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2399
		{ 0x06, 0x5402 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2400
		{ 0x06, 0x81c6 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2401
		{ 0x06, 0xd2a0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2402
		{ 0x06, 0xd6ba },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2403
		{ 0x06, 0x0002 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2404
		{ 0x06, 0x81c6 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2405
		{ 0x06, 0xfefd },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2406
		{ 0x06, 0xfc05 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2407
		{ 0x06, 0xf8e0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2408
		{ 0x06, 0xf860 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2409
		{ 0x06, 0xe1f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2410
		{ 0x06, 0x6168 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2411
		{ 0x06, 0x02e4 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2412
		{ 0x06, 0xf860 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2413
		{ 0x06, 0xe5f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2414
		{ 0x06, 0x61e0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2415
		{ 0x06, 0xf848 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2416
		{ 0x06, 0xe1f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2417
		{ 0x06, 0x4958 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2418
		{ 0x06, 0x0f1e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2419
		{ 0x06, 0x02e4 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2420
		{ 0x06, 0xf848 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2421
		{ 0x06, 0xe5f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2422
		{ 0x06, 0x49d0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2423
		{ 0x06, 0x0002 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2424
		{ 0x06, 0x820a },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2425
		{ 0x06, 0xbf83 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2426
		{ 0x06, 0x50ef },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2427
		{ 0x06, 0x46dc },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2428
		{ 0x06, 0x19dd },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2429
		{ 0x06, 0xd001 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2430
		{ 0x06, 0x0282 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2431
		{ 0x06, 0x0a02 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2432
		{ 0x06, 0x8226 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2433
		{ 0x06, 0xe0f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2434
		{ 0x06, 0x60e1 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2435
		{ 0x06, 0xf861 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2436
		{ 0x06, 0x58fd },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2437
		{ 0x06, 0xe4f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2438
		{ 0x06, 0x60e5 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2439
		{ 0x06, 0xf861 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2440
		{ 0x06, 0xfc04 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2441
		{ 0x06, 0xf9fa },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2442
		{ 0x06, 0xfbc6 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2443
		{ 0x06, 0xbff8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2444
		{ 0x06, 0x40be },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2445
		{ 0x06, 0x8350 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2446
		{ 0x06, 0xa001 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2447
		{ 0x06, 0x0107 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2448
		{ 0x06, 0x1b89 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2449
		{ 0x06, 0xcfd2 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2450
		{ 0x06, 0x08eb },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2451
		{ 0x06, 0xdb19 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2452
		{ 0x06, 0xb2fb },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2453
		{ 0x06, 0xfffe },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2454
		{ 0x06, 0xfd04 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2455
		{ 0x06, 0xf8e0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2456
		{ 0x06, 0xf848 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2457
		{ 0x06, 0xe1f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2458
		{ 0x06, 0x4968 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2459
		{ 0x06, 0x08e4 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2460
		{ 0x06, 0xf848 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2461
		{ 0x06, 0xe5f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2462
		{ 0x06, 0x4958 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2463
		{ 0x06, 0xf7e4 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2464
		{ 0x06, 0xf848 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2465
		{ 0x06, 0xe5f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2466
		{ 0x06, 0x49fc },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2467
		{ 0x06, 0x044d },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2468
		{ 0x06, 0x2000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2469
		{ 0x06, 0x024e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2470
		{ 0x06, 0x2200 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2471
		{ 0x06, 0x024d },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2472
		{ 0x06, 0xdfff },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2473
		{ 0x06, 0x014e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2474
		{ 0x06, 0xddff },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2475
		{ 0x06, 0x0100 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2476
		{ 0x05, 0x83d8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2477
		{ 0x06, 0x8000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2478
		{ 0x03, 0xdc00 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2479
		{ 0x05, 0xfff6 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2480
		{ 0x06, 0x00fc },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2481
		{ 0x1f, 0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2482
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2483
		{ 0x1f, 0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2484
		{ 0x0d, 0xf880 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2485
		{ 0x1f, 0x0000 }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2486
	};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2487
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2488
	rtl_phy_write(ioaddr, phy_reg_init_0, ARRAY_SIZE(phy_reg_init_0));
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2489
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2490
	if (rtl8168d_efuse_read(ioaddr, 0x01) == 0xb1) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2491
		struct phy_reg phy_reg_init[] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2492
			{ 0x1f, 0x0002 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2493
			{ 0x05, 0x669a },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2494
			{ 0x1f, 0x0005 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2495
			{ 0x05, 0x8330 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2496
			{ 0x06, 0x669a },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2497
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2498
			{ 0x1f, 0x0002 }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2499
		};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2500
		int val;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2501
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2502
		rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2503
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2504
		val = mdio_read(ioaddr, 0x0d);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2505
		if ((val & 0x00ff) != 0x006c) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2506
			u32 set[] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2507
				0x0065, 0x0066, 0x0067, 0x0068,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2508
				0x0069, 0x006a, 0x006b, 0x006c
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2509
			};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2510
			int i;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2511
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2512
			mdio_write(ioaddr, 0x1f, 0x0002);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2513
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2514
			val &= 0xff00;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2515
			for (i = 0; i < ARRAY_SIZE(set); i++)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2516
				mdio_write(ioaddr, 0x0d, val | set[i]);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2517
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2518
	} else {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2519
		struct phy_reg phy_reg_init[] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2520
			{ 0x1f, 0x0002 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2521
			{ 0x05, 0x2642 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2522
			{ 0x1f, 0x0005 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2523
			{ 0x05, 0x8330 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2524
			{ 0x06, 0x2642 }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2525
		};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2526
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2527
		rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2528
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2529
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2530
	mdio_write(ioaddr, 0x1f, 0x0002);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2531
	mdio_plus_minus(ioaddr, 0x02, 0x0100, 0x0600);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2532
	mdio_plus_minus(ioaddr, 0x03, 0x0000, 0xe000);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2533
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2534
	mdio_write(ioaddr, 0x1f, 0x0001);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2535
	mdio_write(ioaddr, 0x17, 0x0cc0);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2536
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2537
	mdio_write(ioaddr, 0x1f, 0x0002);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2538
	mdio_patch(ioaddr, 0x0f, 0x0017);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2539
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2540
	rtl_phy_write(ioaddr, phy_reg_init_1, ARRAY_SIZE(phy_reg_init_1));
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2541
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2542
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2543
static void rtl8168d_3_hw_phy_config(void __iomem *ioaddr)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2544
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2545
	struct phy_reg phy_reg_init[] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2546
		{ 0x1f, 0x0002 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2547
		{ 0x10, 0x0008 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2548
		{ 0x0d, 0x006c },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2549
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2550
		{ 0x1f, 0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2551
		{ 0x0d, 0xf880 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2552
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2553
		{ 0x1f, 0x0001 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2554
		{ 0x17, 0x0cc0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2555
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2556
		{ 0x1f, 0x0001 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2557
		{ 0x0b, 0xa4d8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2558
		{ 0x09, 0x281c },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2559
		{ 0x07, 0x2883 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2560
		{ 0x0a, 0x6b35 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2561
		{ 0x1d, 0x3da4 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2562
		{ 0x1c, 0xeffd },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2563
		{ 0x14, 0x7f52 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2564
		{ 0x18, 0x7fc6 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2565
		{ 0x08, 0x0601 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2566
		{ 0x06, 0x4063 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2567
		{ 0x10, 0xf074 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2568
		{ 0x1f, 0x0003 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2569
		{ 0x13, 0x0789 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2570
		{ 0x12, 0xf4bd },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2571
		{ 0x1a, 0x04fd },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2572
		{ 0x14, 0x84b0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2573
		{ 0x1f, 0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2574
		{ 0x00, 0x9200 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2575
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2576
		{ 0x1f, 0x0005 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2577
		{ 0x01, 0x0340 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2578
		{ 0x1f, 0x0001 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2579
		{ 0x04, 0x4000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2580
		{ 0x03, 0x1d21 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2581
		{ 0x02, 0x0c32 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2582
		{ 0x01, 0x0200 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2583
		{ 0x00, 0x5554 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2584
		{ 0x04, 0x4800 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2585
		{ 0x04, 0x4000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2586
		{ 0x04, 0xf000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2587
		{ 0x03, 0xdf01 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2588
		{ 0x02, 0xdf20 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2589
		{ 0x01, 0x101a },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2590
		{ 0x00, 0xa0ff },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2591
		{ 0x04, 0xf800 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2592
		{ 0x04, 0xf000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2593
		{ 0x1f, 0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2594
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2595
		{ 0x1f, 0x0007 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2596
		{ 0x1e, 0x0023 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2597
		{ 0x16, 0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2598
		{ 0x1f, 0x0000 }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2599
	};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2600
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2601
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2602
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2603
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2604
static void rtl8102e_hw_phy_config(void __iomem *ioaddr)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2605
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2606
	struct phy_reg phy_reg_init[] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2607
		{ 0x1f, 0x0003 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2608
		{ 0x08, 0x441d },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2609
		{ 0x01, 0x9100 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2610
		{ 0x1f, 0x0000 }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2611
	};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2612
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2613
	mdio_write(ioaddr, 0x1f, 0x0000);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2614
	mdio_patch(ioaddr, 0x11, 1 << 12);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2615
	mdio_patch(ioaddr, 0x19, 1 << 13);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2616
	mdio_patch(ioaddr, 0x10, 1 << 15);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2617
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2618
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2619
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2620
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2621
static void rtl_hw_phy_config(struct net_device *dev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2622
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2623
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2624
	void __iomem *ioaddr = tp->mmio_addr;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2625
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2626
	rtl8169_print_mac_version(tp);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2627
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2628
	switch (tp->mac_version) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2629
	case RTL_GIGA_MAC_VER_01:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2630
		break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2631
	case RTL_GIGA_MAC_VER_02:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2632
	case RTL_GIGA_MAC_VER_03:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2633
		rtl8169s_hw_phy_config(ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2634
		break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2635
	case RTL_GIGA_MAC_VER_04:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2636
		rtl8169sb_hw_phy_config(ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2637
		break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2638
	case RTL_GIGA_MAC_VER_05:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2639
		rtl8169scd_hw_phy_config(tp, ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2640
		break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2641
	case RTL_GIGA_MAC_VER_06:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2642
		rtl8169sce_hw_phy_config(ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2643
		break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2644
	case RTL_GIGA_MAC_VER_07:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2645
	case RTL_GIGA_MAC_VER_08:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2646
	case RTL_GIGA_MAC_VER_09:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2647
		rtl8102e_hw_phy_config(ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2648
		break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2649
	case RTL_GIGA_MAC_VER_11:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2650
		rtl8168bb_hw_phy_config(ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2651
		break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2652
	case RTL_GIGA_MAC_VER_12:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2653
		rtl8168bef_hw_phy_config(ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2654
		break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2655
	case RTL_GIGA_MAC_VER_17:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2656
		rtl8168bef_hw_phy_config(ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2657
		break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2658
	case RTL_GIGA_MAC_VER_18:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2659
		rtl8168cp_1_hw_phy_config(ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2660
		break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2661
	case RTL_GIGA_MAC_VER_19:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2662
		rtl8168c_1_hw_phy_config(ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2663
		break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2664
	case RTL_GIGA_MAC_VER_20:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2665
		rtl8168c_2_hw_phy_config(ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2666
		break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2667
	case RTL_GIGA_MAC_VER_21:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2668
		rtl8168c_3_hw_phy_config(ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2669
		break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2670
	case RTL_GIGA_MAC_VER_22:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2671
		rtl8168c_4_hw_phy_config(ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2672
		break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2673
	case RTL_GIGA_MAC_VER_23:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2674
	case RTL_GIGA_MAC_VER_24:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2675
		rtl8168cp_2_hw_phy_config(ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2676
		break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2677
	case RTL_GIGA_MAC_VER_25:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2678
		rtl8168d_1_hw_phy_config(ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2679
		break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2680
	case RTL_GIGA_MAC_VER_26:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2681
		rtl8168d_2_hw_phy_config(ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2682
		break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2683
	case RTL_GIGA_MAC_VER_27:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2684
		rtl8168d_3_hw_phy_config(ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2685
		break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2686
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2687
	default:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2688
		break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2689
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2690
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2691
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2692
static void rtl8169_phy_timer(unsigned long __opaque)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2693
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2694
	struct net_device *dev = (struct net_device *)__opaque;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2695
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2696
	struct timer_list *timer = &tp->timer;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2697
	void __iomem *ioaddr = tp->mmio_addr;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2698
	unsigned long timeout = RTL8169_PHY_TIMEOUT;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2699
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2700
	assert(tp->mac_version > RTL_GIGA_MAC_VER_01);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2701
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2702
	if (!(tp->phy_1000_ctrl_reg & ADVERTISE_1000FULL))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2703
		return;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2704
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2705
	if (!tp->ecdev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2706
		spin_lock_irq(&tp->lock);
2589
2b9c78543663 Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents: 1973
diff changeset
  2707
1973
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2708
	if (tp->phy_reset_pending(ioaddr)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2709
		/*
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2710
		 * A busy loop could burn quite a few cycles on nowadays CPU.
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2711
		 * Let's delay the execution of the timer for a few ticks.
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2712
		 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2713
		timeout = HZ/10;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2714
		goto out_mod_timer;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2715
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2716
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2717
	if (tp->link_ok(ioaddr))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2718
		goto out_unlock;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2719
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2720
	if (netif_msg_link(tp))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2721
		printk(KERN_WARNING "%s: PHY reset until link up\n", dev->name);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2722
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2723
	tp->phy_reset_enable(ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2724
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2725
out_mod_timer:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2726
	if (!tp->ecdev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2727
		mod_timer(timer, jiffies + timeout);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2728
out_unlock:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2729
	if (!tp->ecdev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2730
		spin_unlock_irq(&tp->lock);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2731
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2732
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2733
static inline void rtl8169_delete_timer(struct net_device *dev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2734
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2735
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2736
	struct timer_list *timer = &tp->timer;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2737
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2738
	if (tp->ecdev || tp->mac_version <= RTL_GIGA_MAC_VER_01)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2739
		return;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2740
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2741
	del_timer_sync(timer);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2742
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2743
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2744
static inline void rtl8169_request_timer(struct net_device *dev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2745
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2746
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2747
	struct timer_list *timer = &tp->timer;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2748
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2749
	if (tp->ecdev || tp->mac_version <= RTL_GIGA_MAC_VER_01)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2750
		return;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2751
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2752
	mod_timer(timer, jiffies + RTL8169_PHY_TIMEOUT);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2753
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2754
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2755
#ifdef CONFIG_NET_POLL_CONTROLLER
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2756
/*
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2757
 * Polling 'interrupt' - used by things like netconsole to send skbs
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2758
 * without having to re-enable interrupts. It's not called while
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2759
 * the interrupt routine is executing.
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2760
 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2761
static void rtl8169_netpoll(struct net_device *dev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2762
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2763
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2764
	struct pci_dev *pdev = tp->pci_dev;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2765
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2766
	disable_irq(pdev->irq);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2767
	rtl8169_interrupt(pdev->irq, dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2768
	enable_irq(pdev->irq);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2769
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2770
#endif
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2771
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2772
static void rtl8169_release_board(struct pci_dev *pdev, struct net_device *dev,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2773
				  void __iomem *ioaddr)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2774
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2775
	iounmap(ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2776
	pci_release_regions(pdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2777
	pci_disable_device(pdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2778
	free_netdev(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2779
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2780
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2781
static void rtl8169_phy_reset(struct net_device *dev,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2782
			      struct rtl8169_private *tp)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2783
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2784
	void __iomem *ioaddr = tp->mmio_addr;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2785
	unsigned int i;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2786
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2787
	tp->phy_reset_enable(ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2788
	for (i = 0; i < 100; i++) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2789
		if (!tp->phy_reset_pending(ioaddr))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2790
			return;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2791
		msleep(1);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2792
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2793
	if (netif_msg_link(tp))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2794
		printk(KERN_ERR "%s: PHY reset failed.\n", dev->name);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2795
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2796
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2797
static void rtl8169_init_phy(struct net_device *dev, struct rtl8169_private *tp)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2798
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2799
	void __iomem *ioaddr = tp->mmio_addr;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2800
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2801
	rtl_hw_phy_config(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2802
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2803
	if (tp->mac_version <= RTL_GIGA_MAC_VER_06) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2804
		dprintk("Set MAC Reg C+CR Offset 0x82h = 0x01h\n");
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2805
		RTL_W8(0x82, 0x01);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2806
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2807
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2808
	pci_write_config_byte(tp->pci_dev, PCI_LATENCY_TIMER, 0x40);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2809
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2810
	if (tp->mac_version <= RTL_GIGA_MAC_VER_06)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2811
		pci_write_config_byte(tp->pci_dev, PCI_CACHE_LINE_SIZE, 0x08);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2812
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2813
	if (tp->mac_version == RTL_GIGA_MAC_VER_02) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2814
		dprintk("Set MAC Reg C+CR Offset 0x82h = 0x01h\n");
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2815
		RTL_W8(0x82, 0x01);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2816
		dprintk("Set PHY Reg 0x0bh = 0x00h\n");
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2817
		mdio_write(ioaddr, 0x0b, 0x0000); //w 0x0b 15 0 0
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2818
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2819
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2820
	rtl8169_phy_reset(dev, tp);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2821
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2822
	/*
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2823
	 * rtl8169_set_speed_xmii takes good care of the Fast Ethernet
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2824
	 * only 8101. Don't panic.
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2825
	 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2826
	rtl8169_set_speed(dev, AUTONEG_ENABLE, SPEED_1000, DUPLEX_FULL);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2827
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2828
	if ((RTL_R8(PHYstatus) & TBI_Enable) && netif_msg_link(tp))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2829
		printk(KERN_INFO PFX "%s: TBI auto-negotiating\n", dev->name);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2830
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2831
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2832
static void rtl_rar_set(struct rtl8169_private *tp, u8 *addr)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2833
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2834
	void __iomem *ioaddr = tp->mmio_addr;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2835
	u32 high;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2836
	u32 low;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2837
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2838
	low  = addr[0] | (addr[1] << 8) | (addr[2] << 16) | (addr[3] << 24);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2839
	high = addr[4] | (addr[5] << 8);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2840
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2841
	spin_lock_irq(&tp->lock);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2842
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2843
	RTL_W8(Cfg9346, Cfg9346_Unlock);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2844
	RTL_W32(MAC0, low);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2845
	RTL_W32(MAC4, high);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2846
	RTL_W8(Cfg9346, Cfg9346_Lock);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2847
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2848
	spin_unlock_irq(&tp->lock);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2849
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2850
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2851
static int rtl_set_mac_address(struct net_device *dev, void *p)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2852
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2853
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2854
	struct sockaddr *addr = p;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2855
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2856
	if (!is_valid_ether_addr(addr->sa_data))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2857
		return -EADDRNOTAVAIL;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2858
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2859
	memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2860
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2861
	rtl_rar_set(tp, dev->dev_addr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2862
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2863
	return 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2864
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2865
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2866
static int rtl8169_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2867
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2868
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2869
	struct mii_ioctl_data *data = if_mii(ifr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2870
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2871
	return netif_running(dev) ? tp->do_ioctl(tp, data, cmd) : -ENODEV;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2872
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2873
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2874
static int rtl_xmii_ioctl(struct rtl8169_private *tp, struct mii_ioctl_data *data, int cmd)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2875
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2876
	switch (cmd) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2877
	case SIOCGMIIPHY:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2878
		data->phy_id = 32; /* Internal PHY */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2879
		return 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2880
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2881
	case SIOCGMIIREG:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2882
		data->val_out = mdio_read(tp->mmio_addr, data->reg_num & 0x1f);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2883
		return 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2884
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2885
	case SIOCSMIIREG:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2886
		mdio_write(tp->mmio_addr, data->reg_num & 0x1f, data->val_in);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2887
		return 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2888
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2889
	return -EOPNOTSUPP;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2890
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2891
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2892
static int rtl_tbi_ioctl(struct rtl8169_private *tp, struct mii_ioctl_data *data, int cmd)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2893
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2894
	return -EOPNOTSUPP;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2895
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2896
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2897
static const struct rtl_cfg_info {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2898
	void (*hw_start)(struct net_device *);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2899
	unsigned int region;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2900
	unsigned int align;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2901
	u16 intr_event;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2902
	u16 napi_event;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2903
	unsigned features;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2904
	u8 default_ver;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2905
} rtl_cfg_infos [] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2906
	[RTL_CFG_0] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2907
		.hw_start	= rtl_hw_start_8169,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2908
		.region		= 1,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2909
		.align		= 0,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2910
		.intr_event	= SYSErr | LinkChg | RxOverflow |
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2911
				  RxFIFOOver | TxErr | TxOK | RxOK | RxErr,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2912
		.napi_event	= RxFIFOOver | TxErr | TxOK | RxOK | RxOverflow,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2913
		.features	= RTL_FEATURE_GMII,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2914
		.default_ver	= RTL_GIGA_MAC_VER_01,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2915
	},
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2916
	[RTL_CFG_1] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2917
		.hw_start	= rtl_hw_start_8168,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2918
		.region		= 2,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2919
		.align		= 8,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2920
		.intr_event	= SYSErr | LinkChg | RxOverflow |
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2921
				  TxErr | TxOK | RxOK | RxErr,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2922
		.napi_event	= TxErr | TxOK | RxOK | RxOverflow,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2923
		.features	= RTL_FEATURE_GMII | RTL_FEATURE_MSI,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2924
		.default_ver	= RTL_GIGA_MAC_VER_11,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2925
	},
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2926
	[RTL_CFG_2] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2927
		.hw_start	= rtl_hw_start_8101,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2928
		.region		= 2,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2929
		.align		= 8,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2930
		.intr_event	= SYSErr | LinkChg | RxOverflow | PCSTimeout |
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2931
				  RxFIFOOver | TxErr | TxOK | RxOK | RxErr,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2932
		.napi_event	= RxFIFOOver | TxErr | TxOK | RxOK | RxOverflow,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2933
		.features	= RTL_FEATURE_MSI,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2934
		.default_ver	= RTL_GIGA_MAC_VER_13,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2935
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2936
};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2937
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2938
/* Cfg9346_Unlock assumed. */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2939
static unsigned rtl_try_msi(struct pci_dev *pdev, void __iomem *ioaddr,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2940
			    const struct rtl_cfg_info *cfg)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2941
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2942
	unsigned msi = 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2943
	u8 cfg2;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2944
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2945
	cfg2 = RTL_R8(Config2) & ~MSIEnable;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2946
	if (cfg->features & RTL_FEATURE_MSI) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2947
		if (pci_enable_msi(pdev)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2948
			dev_info(&pdev->dev, "no MSI. Back to INTx.\n");
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2949
		} else {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2950
			cfg2 |= MSIEnable;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2951
			msi = RTL_FEATURE_MSI;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2952
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2953
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2954
	RTL_W8(Config2, cfg2);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2955
	return msi;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2956
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2957
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2958
static void rtl_disable_msi(struct pci_dev *pdev, struct rtl8169_private *tp)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2959
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2960
	if (tp->features & RTL_FEATURE_MSI) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2961
		pci_disable_msi(pdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2962
		tp->features &= ~RTL_FEATURE_MSI;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2963
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2964
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2965
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2966
static const struct net_device_ops rtl8169_netdev_ops = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2967
	.ndo_open		= rtl8169_open,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2968
	.ndo_stop		= rtl8169_close,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2969
	.ndo_get_stats		= rtl8169_get_stats,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2970
	.ndo_start_xmit		= rtl8169_start_xmit,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2971
	.ndo_tx_timeout		= rtl8169_tx_timeout,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2972
	.ndo_validate_addr	= eth_validate_addr,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2973
	.ndo_change_mtu		= rtl8169_change_mtu,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2974
	.ndo_set_mac_address	= rtl_set_mac_address,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2975
	.ndo_do_ioctl		= rtl8169_ioctl,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2976
	.ndo_set_multicast_list	= rtl_set_rx_mode,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2977
#ifdef CONFIG_R8169_VLAN
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2978
	.ndo_vlan_rx_register	= rtl8169_vlan_rx_register,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2979
#endif
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2980
#ifdef CONFIG_NET_POLL_CONTROLLER
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2981
	.ndo_poll_controller	= rtl8169_netpoll,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2982
#endif
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2983
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2984
};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2985
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2986
static int __devinit
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2987
rtl8169_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2988
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2989
	const struct rtl_cfg_info *cfg = rtl_cfg_infos + ent->driver_data;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2990
	const unsigned int region = cfg->region;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2991
	struct rtl8169_private *tp;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2992
	struct mii_if_info *mii;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2993
	struct net_device *dev;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2994
	void __iomem *ioaddr;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2995
	unsigned int i;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2996
	int rc;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2997
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2998
	if (netif_msg_drv(&debug)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2999
		printk(KERN_INFO "%s Gigabit Ethernet driver %s loaded\n",
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3000
		       MODULENAME, RTL8169_VERSION);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3001
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3002
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3003
	dev = alloc_etherdev(sizeof (*tp));
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3004
	if (!dev) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3005
		if (netif_msg_drv(&debug))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3006
			dev_err(&pdev->dev, "unable to alloc new ethernet\n");
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3007
		rc = -ENOMEM;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3008
		goto out;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3009
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3010
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3011
	SET_NETDEV_DEV(dev, &pdev->dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3012
	dev->netdev_ops = &rtl8169_netdev_ops;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3013
	tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3014
	tp->dev = dev;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3015
	tp->pci_dev = pdev;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3016
	tp->msg_enable = netif_msg_init(debug.msg_enable, R8169_MSG_DEFAULT);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3017
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3018
	mii = &tp->mii;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3019
	mii->dev = dev;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3020
	mii->mdio_read = rtl_mdio_read;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3021
	mii->mdio_write = rtl_mdio_write;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3022
	mii->phy_id_mask = 0x1f;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3023
	mii->reg_num_mask = 0x1f;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3024
	mii->supports_gmii = !!(cfg->features & RTL_FEATURE_GMII);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3025
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3026
	/* enable device (incl. PCI PM wakeup and hotplug setup) */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3027
	rc = pci_enable_device(pdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3028
	if (rc < 0) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3029
		if (netif_msg_probe(tp))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3030
			dev_err(&pdev->dev, "enable failure\n");
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3031
		goto err_out_free_dev_1;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3032
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3033
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3034
	rc = pci_set_mwi(pdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3035
	if (rc < 0)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3036
		goto err_out_disable_2;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3037
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3038
	/* make sure PCI base addr 1 is MMIO */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3039
	if (!(pci_resource_flags(pdev, region) & IORESOURCE_MEM)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3040
		if (netif_msg_probe(tp)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3041
			dev_err(&pdev->dev,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3042
				"region #%d not an MMIO resource, aborting\n",
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3043
				region);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3044
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3045
		rc = -ENODEV;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3046
		goto err_out_mwi_3;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3047
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3048
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3049
	/* check for weird/broken PCI region reporting */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3050
	if (pci_resource_len(pdev, region) < R8169_REGS_SIZE) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3051
		if (netif_msg_probe(tp)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3052
			dev_err(&pdev->dev,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3053
				"Invalid PCI region size(s), aborting\n");
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3054
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3055
		rc = -ENODEV;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3056
		goto err_out_mwi_3;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3057
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3058
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3059
	rc = pci_request_regions(pdev, MODULENAME);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3060
	if (rc < 0) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3061
		if (netif_msg_probe(tp))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3062
			dev_err(&pdev->dev, "could not request regions.\n");
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3063
		goto err_out_mwi_3;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3064
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3065
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3066
	tp->cp_cmd = PCIMulRW | RxChkSum;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3067
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3068
	if ((sizeof(dma_addr_t) > 4) &&
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3069
	    !pci_set_dma_mask(pdev, DMA_BIT_MASK(64)) && use_dac) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3070
		tp->cp_cmd |= PCIDAC;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3071
		dev->features |= NETIF_F_HIGHDMA;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3072
	} else {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3073
		rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3074
		if (rc < 0) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3075
			if (netif_msg_probe(tp)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3076
				dev_err(&pdev->dev,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3077
					"DMA configuration failed.\n");
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3078
			}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3079
			goto err_out_free_res_4;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3080
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3081
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3082
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3083
	/* ioremap MMIO region */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3084
	ioaddr = ioremap(pci_resource_start(pdev, region), R8169_REGS_SIZE);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3085
	if (!ioaddr) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3086
		if (netif_msg_probe(tp))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3087
			dev_err(&pdev->dev, "cannot remap MMIO, aborting\n");
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3088
		rc = -EIO;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3089
		goto err_out_free_res_4;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3090
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3091
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3092
	tp->pcie_cap = pci_find_capability(pdev, PCI_CAP_ID_EXP);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3093
	if (!tp->pcie_cap && netif_msg_probe(tp))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3094
		dev_info(&pdev->dev, "no PCI Express capability\n");
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3095
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3096
	RTL_W16(IntrMask, 0x0000);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3097
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3098
	/* Soft reset the chip. */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3099
	RTL_W8(ChipCmd, CmdReset);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3100
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3101
	/* Check that the chip has finished the reset. */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3102
	for (i = 0; i < 100; i++) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3103
		if ((RTL_R8(ChipCmd) & CmdReset) == 0)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3104
			break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3105
		msleep_interruptible(1);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3106
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3107
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3108
	RTL_W16(IntrStatus, 0xffff);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3109
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3110
	pci_set_master(pdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3111
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3112
	/* Identify chip attached to board */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3113
	rtl8169_get_mac_version(tp, ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3114
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3115
	/* Use appropriate default if unknown */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3116
	if (tp->mac_version == RTL_GIGA_MAC_NONE) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3117
		if (netif_msg_probe(tp)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3118
			dev_notice(&pdev->dev,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3119
				   "unknown MAC, using family default\n");
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3120
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3121
		tp->mac_version = cfg->default_ver;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3122
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3123
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3124
	rtl8169_print_mac_version(tp);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3125
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3126
	for (i = 0; i < ARRAY_SIZE(rtl_chip_info); i++) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3127
		if (tp->mac_version == rtl_chip_info[i].mac_version)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3128
			break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3129
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3130
	if (i == ARRAY_SIZE(rtl_chip_info)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3131
		dev_err(&pdev->dev,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3132
			"driver bug, MAC version not found in rtl_chip_info\n");
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3133
		goto err_out_msi_5;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3134
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3135
	tp->chipset = i;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3136
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3137
	RTL_W8(Cfg9346, Cfg9346_Unlock);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3138
	RTL_W8(Config1, RTL_R8(Config1) | PMEnable);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3139
	RTL_W8(Config5, RTL_R8(Config5) & PMEStatus);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3140
	if ((RTL_R8(Config3) & (LinkUp | MagicPacket)) != 0)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3141
		tp->features |= RTL_FEATURE_WOL;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3142
	if ((RTL_R8(Config5) & (UWF | BWF | MWF)) != 0)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3143
		tp->features |= RTL_FEATURE_WOL;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3144
	tp->features |= rtl_try_msi(pdev, ioaddr, cfg);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3145
	RTL_W8(Cfg9346, Cfg9346_Lock);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3146
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3147
	if ((tp->mac_version <= RTL_GIGA_MAC_VER_06) &&
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3148
	    (RTL_R8(PHYstatus) & TBI_Enable)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3149
		tp->set_speed = rtl8169_set_speed_tbi;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3150
		tp->get_settings = rtl8169_gset_tbi;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3151
		tp->phy_reset_enable = rtl8169_tbi_reset_enable;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3152
		tp->phy_reset_pending = rtl8169_tbi_reset_pending;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3153
		tp->link_ok = rtl8169_tbi_link_ok;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3154
		tp->do_ioctl = rtl_tbi_ioctl;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3155
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3156
		tp->phy_1000_ctrl_reg = ADVERTISE_1000FULL; /* Implied by TBI */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3157
	} else {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3158
		tp->set_speed = rtl8169_set_speed_xmii;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3159
		tp->get_settings = rtl8169_gset_xmii;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3160
		tp->phy_reset_enable = rtl8169_xmii_reset_enable;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3161
		tp->phy_reset_pending = rtl8169_xmii_reset_pending;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3162
		tp->link_ok = rtl8169_xmii_link_ok;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3163
		tp->do_ioctl = rtl_xmii_ioctl;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3164
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3165
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3166
	spin_lock_init(&tp->lock);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3167
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3168
	tp->mmio_addr = ioaddr;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3169
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3170
	/* Get MAC address */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3171
	for (i = 0; i < MAC_ADDR_LEN; i++)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3172
		dev->dev_addr[i] = RTL_R8(MAC0 + i);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3173
	memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3174
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3175
	SET_ETHTOOL_OPS(dev, &rtl8169_ethtool_ops);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3176
	dev->watchdog_timeo = RTL8169_TX_TIMEOUT;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3177
	dev->irq = pdev->irq;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3178
	dev->base_addr = (unsigned long) ioaddr;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3179
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3180
	netif_napi_add(dev, &tp->napi, rtl8169_poll, R8169_NAPI_WEIGHT);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3181
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3182
#ifdef CONFIG_R8169_VLAN
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3183
	dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3184
#endif
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3185
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3186
	tp->intr_mask = 0xffff;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3187
	tp->align = cfg->align;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3188
	tp->hw_start = cfg->hw_start;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3189
	tp->intr_event = cfg->intr_event;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3190
	tp->napi_event = cfg->napi_event;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3191
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3192
	init_timer(&tp->timer);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3193
	tp->timer.data = (unsigned long) dev;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3194
	tp->timer.function = rtl8169_phy_timer;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3195
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3196
	// offer device to EtherCAT master module
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3197
	tp->ecdev = ecdev_offer(dev, ec_poll, THIS_MODULE);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3198
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3199
	if (!tp->ecdev) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3200
		rc = register_netdev(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3201
		if (rc < 0)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3202
			goto err_out_msi_5;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3203
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3204
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3205
	pci_set_drvdata(pdev, dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3206
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3207
	if (netif_msg_probe(tp)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3208
		u32 xid = RTL_R32(TxConfig) & 0x9cf0f8ff;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3209
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3210
		printk(KERN_INFO "%s: %s at 0x%lx, "
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3211
		       "%2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x, "
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3212
		       "XID %08x IRQ %d\n",
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3213
		       dev->name,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3214
		       rtl_chip_info[tp->chipset].name,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3215
		       dev->base_addr,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3216
		       dev->dev_addr[0], dev->dev_addr[1],
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3217
		       dev->dev_addr[2], dev->dev_addr[3],
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3218
		       dev->dev_addr[4], dev->dev_addr[5], xid, dev->irq);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3219
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3220
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3221
	rtl8169_init_phy(dev, tp);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3222
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3223
	/*
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3224
	 * Pretend we are using VLANs; This bypasses a nasty bug where
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3225
	 * Interrupts stop flowing on high load on 8110SCd controllers.
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3226
	 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3227
	if (tp->mac_version == RTL_GIGA_MAC_VER_05)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3228
		RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) | RxVlan);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3229
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3230
	device_set_wakeup_enable(&pdev->dev, tp->features & RTL_FEATURE_WOL);
2589
2b9c78543663 Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents: 1973
diff changeset
  3231
2b9c78543663 Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents: 1973
diff changeset
  3232
	if (tp->ecdev) {
2b9c78543663 Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents: 1973
diff changeset
  3233
		rc = ecdev_open(tp->ecdev);
2b9c78543663 Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents: 1973
diff changeset
  3234
		if (rc) {
2b9c78543663 Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents: 1973
diff changeset
  3235
			ecdev_withdraw(tp->ecdev);
2b9c78543663 Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents: 1973
diff changeset
  3236
			goto err_out_msi_5;
2b9c78543663 Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents: 1973
diff changeset
  3237
		}
1973
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3238
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3239
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3240
out:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3241
	return rc;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3242
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3243
err_out_msi_5:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3244
	rtl_disable_msi(pdev, tp);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3245
	iounmap(ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3246
err_out_free_res_4:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3247
	pci_release_regions(pdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3248
err_out_mwi_3:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3249
	pci_clear_mwi(pdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3250
err_out_disable_2:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3251
	pci_disable_device(pdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3252
err_out_free_dev_1:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3253
	free_netdev(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3254
	goto out;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3255
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3256
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3257
static void __devexit rtl8169_remove_one(struct pci_dev *pdev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3258
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3259
	struct net_device *dev = pci_get_drvdata(pdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3260
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3261
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3262
	flush_scheduled_work();
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3263
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3264
	if (tp->ecdev) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3265
		ecdev_close(tp->ecdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3266
		ecdev_withdraw(tp->ecdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3267
	} else {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3268
		unregister_netdev(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3269
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3270
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3271
	/* restore original MAC address */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3272
	rtl_rar_set(tp, dev->perm_addr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3273
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3274
	rtl_disable_msi(pdev, tp);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3275
	rtl8169_release_board(pdev, dev, tp->mmio_addr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3276
	pci_set_drvdata(pdev, NULL);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3277
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3278
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3279
static void rtl8169_set_rxbufsize(struct rtl8169_private *tp,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3280
				  struct net_device *dev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3281
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3282
	unsigned int max_frame = dev->mtu + VLAN_ETH_HLEN + ETH_FCS_LEN;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3283
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3284
	tp->rx_buf_sz = (max_frame > RX_BUF_SIZE) ? max_frame : RX_BUF_SIZE;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3285
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3286
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3287
static int rtl8169_open(struct net_device *dev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3288
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3289
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3290
	struct pci_dev *pdev = tp->pci_dev;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3291
	int retval = -ENOMEM;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3292
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3293
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3294
	rtl8169_set_rxbufsize(tp, dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3295
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3296
	/*
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3297
	 * Rx and Tx desscriptors needs 256 bytes alignment.
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3298
	 * pci_alloc_consistent provides more.
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3299
	 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3300
	tp->TxDescArray = pci_alloc_consistent(pdev, R8169_TX_RING_BYTES,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3301
					       &tp->TxPhyAddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3302
	if (!tp->TxDescArray)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3303
		goto out;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3304
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3305
	tp->RxDescArray = pci_alloc_consistent(pdev, R8169_RX_RING_BYTES,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3306
					       &tp->RxPhyAddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3307
	if (!tp->RxDescArray)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3308
		goto err_free_tx_0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3309
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3310
	retval = rtl8169_init_ring(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3311
	if (retval < 0)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3312
		goto err_free_rx_1;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3313
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3314
	INIT_DELAYED_WORK(&tp->task, NULL);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3315
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3316
	smp_mb();
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3317
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3318
	if (!tp->ecdev) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3319
		retval = request_irq(dev->irq, rtl8169_interrupt,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3320
				(tp->features & RTL_FEATURE_MSI) ? 0 : IRQF_SHARED,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3321
				dev->name, dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3322
		if (retval < 0)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3323
			goto err_release_ring_2;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3324
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3325
		napi_enable(&tp->napi);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3326
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3327
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3328
	rtl_hw_start(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3329
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3330
	rtl8169_request_timer(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3331
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3332
	rtl8169_check_link_status(dev, tp, tp->mmio_addr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3333
out:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3334
	return retval;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3335
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3336
err_release_ring_2:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3337
	rtl8169_rx_clear(tp);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3338
err_free_rx_1:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3339
	pci_free_consistent(pdev, R8169_RX_RING_BYTES, tp->RxDescArray,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3340
			    tp->RxPhyAddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3341
err_free_tx_0:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3342
	pci_free_consistent(pdev, R8169_TX_RING_BYTES, tp->TxDescArray,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3343
			    tp->TxPhyAddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3344
	goto out;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3345
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3346
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3347
static void rtl8169_hw_reset(void __iomem *ioaddr)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3348
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3349
	/* Disable interrupts */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3350
	rtl8169_irq_mask_and_ack(ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3351
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3352
	/* Reset the chipset */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3353
	RTL_W8(ChipCmd, CmdReset);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3354
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3355
	/* PCI commit */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3356
	RTL_R8(ChipCmd);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3357
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3358
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3359
static void rtl_set_rx_tx_config_registers(struct rtl8169_private *tp)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3360
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3361
	void __iomem *ioaddr = tp->mmio_addr;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3362
	u32 cfg = rtl8169_rx_config;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3363
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3364
	cfg |= (RTL_R32(RxConfig) & rtl_chip_info[tp->chipset].RxConfigMask);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3365
	RTL_W32(RxConfig, cfg);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3366
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3367
	/* Set DMA burst size and Interframe Gap Time */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3368
	RTL_W32(TxConfig, (TX_DMA_BURST << TxDMAShift) |
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3369
		(InterFrameGap << TxInterFrameGapShift));
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3370
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3371
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3372
static void rtl_hw_start(struct net_device *dev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3373
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3374
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3375
	void __iomem *ioaddr = tp->mmio_addr;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3376
	unsigned int i;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3377
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3378
	/* Soft reset the chip. */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3379
	RTL_W8(ChipCmd, CmdReset);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3380
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3381
	/* Check that the chip has finished the reset. */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3382
	for (i = 0; i < 100; i++) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3383
		if ((RTL_R8(ChipCmd) & CmdReset) == 0)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3384
			break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3385
		msleep_interruptible(1);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3386
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3387
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3388
	tp->hw_start(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3389
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3390
	if (!tp->ecdev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3391
		netif_start_queue(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3392
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3393
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3394
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3395
static void rtl_set_rx_tx_desc_registers(struct rtl8169_private *tp,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3396
					 void __iomem *ioaddr)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3397
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3398
	/*
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3399
	 * Magic spell: some iop3xx ARM board needs the TxDescAddrHigh
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3400
	 * register to be written before TxDescAddrLow to work.
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3401
	 * Switching from MMIO to I/O access fixes the issue as well.
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3402
	 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3403
	RTL_W32(TxDescStartAddrHigh, ((u64) tp->TxPhyAddr) >> 32);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3404
	RTL_W32(TxDescStartAddrLow, ((u64) tp->TxPhyAddr) & DMA_BIT_MASK(32));
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3405
	RTL_W32(RxDescAddrHigh, ((u64) tp->RxPhyAddr) >> 32);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3406
	RTL_W32(RxDescAddrLow, ((u64) tp->RxPhyAddr) & DMA_BIT_MASK(32));
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3407
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3408
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3409
static u16 rtl_rw_cpluscmd(void __iomem *ioaddr)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3410
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3411
	u16 cmd;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3412
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3413
	cmd = RTL_R16(CPlusCmd);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3414
	RTL_W16(CPlusCmd, cmd);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3415
	return cmd;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3416
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3417
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3418
static void rtl_set_rx_max_size(void __iomem *ioaddr, unsigned int rx_buf_sz)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3419
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3420
	/* Low hurts. Let's disable the filtering. */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3421
	RTL_W16(RxMaxSize, rx_buf_sz + 1);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3422
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3423
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3424
static void rtl8169_set_magic_reg(void __iomem *ioaddr, unsigned mac_version)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3425
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3426
	struct {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3427
		u32 mac_version;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3428
		u32 clk;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3429
		u32 val;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3430
	} cfg2_info [] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3431
		{ RTL_GIGA_MAC_VER_05, PCI_Clock_33MHz, 0x000fff00 }, // 8110SCd
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3432
		{ RTL_GIGA_MAC_VER_05, PCI_Clock_66MHz, 0x000fffff },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3433
		{ RTL_GIGA_MAC_VER_06, PCI_Clock_33MHz, 0x00ffff00 }, // 8110SCe
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3434
		{ RTL_GIGA_MAC_VER_06, PCI_Clock_66MHz, 0x00ffffff }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3435
	}, *p = cfg2_info;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3436
	unsigned int i;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3437
	u32 clk;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3438
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3439
	clk = RTL_R8(Config2) & PCI_Clock_66MHz;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3440
	for (i = 0; i < ARRAY_SIZE(cfg2_info); i++, p++) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3441
		if ((p->mac_version == mac_version) && (p->clk == clk)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3442
			RTL_W32(0x7c, p->val);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3443
			break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3444
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3445
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3446
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3447
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3448
static void rtl_hw_start_8169(struct net_device *dev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3449
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3450
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3451
	void __iomem *ioaddr = tp->mmio_addr;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3452
	struct pci_dev *pdev = tp->pci_dev;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3453
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3454
	if (tp->mac_version == RTL_GIGA_MAC_VER_05) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3455
		RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) | PCIMulRW);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3456
		pci_write_config_byte(pdev, PCI_CACHE_LINE_SIZE, 0x08);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3457
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3458
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3459
	RTL_W8(Cfg9346, Cfg9346_Unlock);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3460
	if ((tp->mac_version == RTL_GIGA_MAC_VER_01) ||
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3461
	    (tp->mac_version == RTL_GIGA_MAC_VER_02) ||
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3462
	    (tp->mac_version == RTL_GIGA_MAC_VER_03) ||
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3463
	    (tp->mac_version == RTL_GIGA_MAC_VER_04))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3464
		RTL_W8(ChipCmd, CmdTxEnb | CmdRxEnb);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3465
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3466
	RTL_W8(EarlyTxThres, EarlyTxThld);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3467
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3468
	rtl_set_rx_max_size(ioaddr, tp->rx_buf_sz);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3469
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3470
	if ((tp->mac_version == RTL_GIGA_MAC_VER_01) ||
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3471
	    (tp->mac_version == RTL_GIGA_MAC_VER_02) ||
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3472
	    (tp->mac_version == RTL_GIGA_MAC_VER_03) ||
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3473
	    (tp->mac_version == RTL_GIGA_MAC_VER_04))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3474
		rtl_set_rx_tx_config_registers(tp);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3475
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3476
	tp->cp_cmd |= rtl_rw_cpluscmd(ioaddr) | PCIMulRW;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3477
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3478
	if ((tp->mac_version == RTL_GIGA_MAC_VER_02) ||
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3479
	    (tp->mac_version == RTL_GIGA_MAC_VER_03)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3480
		dprintk("Set MAC Reg C+CR Offset 0xE0. "
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3481
			"Bit-3 and bit-14 MUST be 1\n");
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3482
		tp->cp_cmd |= (1 << 14);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3483
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3484
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3485
	RTL_W16(CPlusCmd, tp->cp_cmd);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3486
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3487
	rtl8169_set_magic_reg(ioaddr, tp->mac_version);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3488
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3489
	/*
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3490
	 * Undocumented corner. Supposedly:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3491
	 * (TxTimer << 12) | (TxPackets << 8) | (RxTimer << 4) | RxPackets
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3492
	 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3493
	RTL_W16(IntrMitigate, 0x0000);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3494
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3495
	rtl_set_rx_tx_desc_registers(tp, ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3496
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3497
	if ((tp->mac_version != RTL_GIGA_MAC_VER_01) &&
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3498
	    (tp->mac_version != RTL_GIGA_MAC_VER_02) &&
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3499
	    (tp->mac_version != RTL_GIGA_MAC_VER_03) &&
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3500
	    (tp->mac_version != RTL_GIGA_MAC_VER_04)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3501
		RTL_W8(ChipCmd, CmdTxEnb | CmdRxEnb);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3502
		rtl_set_rx_tx_config_registers(tp);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3503
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3504
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3505
	RTL_W8(Cfg9346, Cfg9346_Lock);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3506
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3507
	/* Initially a 10 us delay. Turned it into a PCI commit. - FR */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3508
	RTL_R8(IntrMask);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3509
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3510
	RTL_W32(RxMissed, 0);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3511
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3512
	rtl_set_rx_mode(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3513
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3514
	/* no early-rx interrupts */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3515
	RTL_W16(MultiIntr, RTL_R16(MultiIntr) & 0xF000);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3516
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3517
	/* Enable all known interrupts by setting the interrupt mask. */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3518
	if (!tp->ecdev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3519
		RTL_W16(IntrMask, tp->intr_event);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3520
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3521
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3522
static void rtl_tx_performance_tweak(struct pci_dev *pdev, u16 force)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3523
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3524
	struct net_device *dev = pci_get_drvdata(pdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3525
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3526
	int cap = tp->pcie_cap;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3527
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3528
	if (cap) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3529
		u16 ctl;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3530
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3531
		pci_read_config_word(pdev, cap + PCI_EXP_DEVCTL, &ctl);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3532
		ctl = (ctl & ~PCI_EXP_DEVCTL_READRQ) | force;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3533
		pci_write_config_word(pdev, cap + PCI_EXP_DEVCTL, ctl);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3534
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3535
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3536
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3537
static void rtl_csi_access_enable(void __iomem *ioaddr)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3538
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3539
	u32 csi;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3540
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3541
	csi = rtl_csi_read(ioaddr, 0x070c) & 0x00ffffff;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3542
	rtl_csi_write(ioaddr, 0x070c, csi | 0x27000000);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3543
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3544
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3545
struct ephy_info {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3546
	unsigned int offset;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3547
	u16 mask;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3548
	u16 bits;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3549
};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3550
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3551
static void rtl_ephy_init(void __iomem *ioaddr, struct ephy_info *e, int len)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3552
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3553
	u16 w;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3554
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3555
	while (len-- > 0) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3556
		w = (rtl_ephy_read(ioaddr, e->offset) & ~e->mask) | e->bits;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3557
		rtl_ephy_write(ioaddr, e->offset, w);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3558
		e++;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3559
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3560
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3561
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3562
static void rtl_disable_clock_request(struct pci_dev *pdev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3563
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3564
	struct net_device *dev = pci_get_drvdata(pdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3565
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3566
	int cap = tp->pcie_cap;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3567
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3568
	if (cap) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3569
		u16 ctl;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3570
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3571
		pci_read_config_word(pdev, cap + PCI_EXP_LNKCTL, &ctl);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3572
		ctl &= ~PCI_EXP_LNKCTL_CLKREQ_EN;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3573
		pci_write_config_word(pdev, cap + PCI_EXP_LNKCTL, ctl);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3574
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3575
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3576
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3577
#define R8168_CPCMD_QUIRK_MASK (\
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3578
	EnableBist | \
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3579
	Mac_dbgo_oe | \
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3580
	Force_half_dup | \
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3581
	Force_rxflow_en | \
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3582
	Force_txflow_en | \
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3583
	Cxpl_dbg_sel | \
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3584
	ASF | \
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3585
	PktCntrDisable | \
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3586
	Mac_dbgo_sel)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3587
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3588
static void rtl_hw_start_8168bb(void __iomem *ioaddr, struct pci_dev *pdev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3589
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3590
	RTL_W8(Config3, RTL_R8(Config3) & ~Beacon_en);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3591
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3592
	RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3593
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3594
	rtl_tx_performance_tweak(pdev,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3595
		(0x5 << MAX_READ_REQUEST_SHIFT) | PCI_EXP_DEVCTL_NOSNOOP_EN);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3596
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3597
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3598
static void rtl_hw_start_8168bef(void __iomem *ioaddr, struct pci_dev *pdev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3599
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3600
	rtl_hw_start_8168bb(ioaddr, pdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3601
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3602
	RTL_W8(EarlyTxThres, EarlyTxThld);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3603
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3604
	RTL_W8(Config4, RTL_R8(Config4) & ~(1 << 0));
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3605
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3606
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3607
static void __rtl_hw_start_8168cp(void __iomem *ioaddr, struct pci_dev *pdev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3608
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3609
	RTL_W8(Config1, RTL_R8(Config1) | Speed_down);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3610
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3611
	RTL_W8(Config3, RTL_R8(Config3) & ~Beacon_en);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3612
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3613
	rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3614
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3615
	rtl_disable_clock_request(pdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3616
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3617
	RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3618
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3619
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3620
static void rtl_hw_start_8168cp_1(void __iomem *ioaddr, struct pci_dev *pdev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3621
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3622
	static struct ephy_info e_info_8168cp[] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3623
		{ 0x01, 0,	0x0001 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3624
		{ 0x02, 0x0800,	0x1000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3625
		{ 0x03, 0,	0x0042 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3626
		{ 0x06, 0x0080,	0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3627
		{ 0x07, 0,	0x2000 }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3628
	};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3629
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3630
	rtl_csi_access_enable(ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3631
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3632
	rtl_ephy_init(ioaddr, e_info_8168cp, ARRAY_SIZE(e_info_8168cp));
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3633
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3634
	__rtl_hw_start_8168cp(ioaddr, pdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3635
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3636
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3637
static void rtl_hw_start_8168cp_2(void __iomem *ioaddr, struct pci_dev *pdev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3638
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3639
	rtl_csi_access_enable(ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3640
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3641
	RTL_W8(Config3, RTL_R8(Config3) & ~Beacon_en);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3642
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3643
	rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3644
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3645
	RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3646
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3647
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3648
static void rtl_hw_start_8168cp_3(void __iomem *ioaddr, struct pci_dev *pdev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3649
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3650
	rtl_csi_access_enable(ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3651
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3652
	RTL_W8(Config3, RTL_R8(Config3) & ~Beacon_en);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3653
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3654
	/* Magic. */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3655
	RTL_W8(DBG_REG, 0x20);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3656
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3657
	RTL_W8(EarlyTxThres, EarlyTxThld);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3658
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3659
	rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3660
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3661
	RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3662
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3663
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3664
static void rtl_hw_start_8168c_1(void __iomem *ioaddr, struct pci_dev *pdev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3665
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3666
	static struct ephy_info e_info_8168c_1[] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3667
		{ 0x02, 0x0800,	0x1000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3668
		{ 0x03, 0,	0x0002 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3669
		{ 0x06, 0x0080,	0x0000 }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3670
	};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3671
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3672
	rtl_csi_access_enable(ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3673
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3674
	RTL_W8(DBG_REG, 0x06 | FIX_NAK_1 | FIX_NAK_2);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3675
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3676
	rtl_ephy_init(ioaddr, e_info_8168c_1, ARRAY_SIZE(e_info_8168c_1));
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3677
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3678
	__rtl_hw_start_8168cp(ioaddr, pdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3679
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3680
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3681
static void rtl_hw_start_8168c_2(void __iomem *ioaddr, struct pci_dev *pdev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3682
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3683
	static struct ephy_info e_info_8168c_2[] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3684
		{ 0x01, 0,	0x0001 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3685
		{ 0x03, 0x0400,	0x0220 }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3686
	};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3687
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3688
	rtl_csi_access_enable(ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3689
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3690
	rtl_ephy_init(ioaddr, e_info_8168c_2, ARRAY_SIZE(e_info_8168c_2));
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3691
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3692
	__rtl_hw_start_8168cp(ioaddr, pdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3693
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3694
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3695
static void rtl_hw_start_8168c_3(void __iomem *ioaddr, struct pci_dev *pdev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3696
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3697
	rtl_hw_start_8168c_2(ioaddr, pdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3698
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3699
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3700
static void rtl_hw_start_8168c_4(void __iomem *ioaddr, struct pci_dev *pdev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3701
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3702
	rtl_csi_access_enable(ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3703
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3704
	__rtl_hw_start_8168cp(ioaddr, pdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3705
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3706
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3707
static void rtl_hw_start_8168d(void __iomem *ioaddr, struct pci_dev *pdev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3708
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3709
	rtl_csi_access_enable(ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3710
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3711
	rtl_disable_clock_request(pdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3712
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3713
	RTL_W8(EarlyTxThres, EarlyTxThld);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3714
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3715
	rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3716
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3717
	RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3718
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3719
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3720
static void rtl_hw_start_8168(struct net_device *dev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3721
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3722
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3723
	void __iomem *ioaddr = tp->mmio_addr;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3724
	struct pci_dev *pdev = tp->pci_dev;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3725
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3726
	RTL_W8(Cfg9346, Cfg9346_Unlock);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3727
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3728
	RTL_W8(EarlyTxThres, EarlyTxThld);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3729
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3730
	rtl_set_rx_max_size(ioaddr, tp->rx_buf_sz);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3731
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3732
	tp->cp_cmd |= RTL_R16(CPlusCmd) | PktCntrDisable | INTT_1;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3733
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3734
	RTL_W16(CPlusCmd, tp->cp_cmd);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3735
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3736
	RTL_W16(IntrMitigate, 0x5151);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3737
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3738
	/* Work around for RxFIFO overflow. */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3739
	if (tp->mac_version == RTL_GIGA_MAC_VER_11) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3740
		tp->intr_event |= RxFIFOOver | PCSTimeout;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3741
		tp->intr_event &= ~RxOverflow;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3742
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3743
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3744
	rtl_set_rx_tx_desc_registers(tp, ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3745
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3746
	rtl_set_rx_mode(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3747
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3748
	RTL_W32(TxConfig, (TX_DMA_BURST << TxDMAShift) |
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3749
		(InterFrameGap << TxInterFrameGapShift));
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3750
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3751
	RTL_R8(IntrMask);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3752
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3753
	switch (tp->mac_version) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3754
	case RTL_GIGA_MAC_VER_11:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3755
		rtl_hw_start_8168bb(ioaddr, pdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3756
	break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3757
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3758
	case RTL_GIGA_MAC_VER_12:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3759
	case RTL_GIGA_MAC_VER_17:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3760
		rtl_hw_start_8168bef(ioaddr, pdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3761
	break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3762
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3763
	case RTL_GIGA_MAC_VER_18:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3764
		rtl_hw_start_8168cp_1(ioaddr, pdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3765
	break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3766
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3767
	case RTL_GIGA_MAC_VER_19:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3768
		rtl_hw_start_8168c_1(ioaddr, pdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3769
	break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3770
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3771
	case RTL_GIGA_MAC_VER_20:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3772
		rtl_hw_start_8168c_2(ioaddr, pdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3773
	break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3774
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3775
	case RTL_GIGA_MAC_VER_21:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3776
		rtl_hw_start_8168c_3(ioaddr, pdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3777
	break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3778
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3779
	case RTL_GIGA_MAC_VER_22:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3780
		rtl_hw_start_8168c_4(ioaddr, pdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3781
	break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3782
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3783
	case RTL_GIGA_MAC_VER_23:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3784
		rtl_hw_start_8168cp_2(ioaddr, pdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3785
	break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3786
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3787
	case RTL_GIGA_MAC_VER_24:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3788
		rtl_hw_start_8168cp_3(ioaddr, pdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3789
	break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3790
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3791
	case RTL_GIGA_MAC_VER_25:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3792
	case RTL_GIGA_MAC_VER_26:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3793
	case RTL_GIGA_MAC_VER_27:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3794
		rtl_hw_start_8168d(ioaddr, pdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3795
	break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3796
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3797
	default:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3798
		printk(KERN_ERR PFX "%s: unknown chipset (mac_version = %d).\n",
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3799
			dev->name, tp->mac_version);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3800
	break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3801
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3802
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3803
	RTL_W8(ChipCmd, CmdTxEnb | CmdRxEnb);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3804
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3805
	RTL_W8(Cfg9346, Cfg9346_Lock);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3806
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3807
	RTL_W16(MultiIntr, RTL_R16(MultiIntr) & 0xF000);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3808
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3809
	if (!tp->ecdev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3810
		RTL_W16(IntrMask, tp->intr_event);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3811
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3812
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3813
#define R810X_CPCMD_QUIRK_MASK (\
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3814
	EnableBist | \
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3815
	Mac_dbgo_oe | \
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3816
	Force_half_dup | \
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3817
	Force_rxflow_en | \
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3818
	Force_txflow_en | \
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3819
	Cxpl_dbg_sel | \
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3820
	ASF | \
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3821
	PktCntrDisable | \
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3822
	PCIDAC | \
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3823
	PCIMulRW)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3824
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3825
static void rtl_hw_start_8102e_1(void __iomem *ioaddr, struct pci_dev *pdev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3826
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3827
	static struct ephy_info e_info_8102e_1[] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3828
		{ 0x01,	0, 0x6e65 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3829
		{ 0x02,	0, 0x091f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3830
		{ 0x03,	0, 0xc2f9 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3831
		{ 0x06,	0, 0xafb5 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3832
		{ 0x07,	0, 0x0e00 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3833
		{ 0x19,	0, 0xec80 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3834
		{ 0x01,	0, 0x2e65 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3835
		{ 0x01,	0, 0x6e65 }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3836
	};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3837
	u8 cfg1;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3838
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3839
	rtl_csi_access_enable(ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3840
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3841
	RTL_W8(DBG_REG, FIX_NAK_1);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3842
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3843
	rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3844
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3845
	RTL_W8(Config1,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3846
	       LEDS1 | LEDS0 | Speed_down | MEMMAP | IOMAP | VPD | PMEnable);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3847
	RTL_W8(Config3, RTL_R8(Config3) & ~Beacon_en);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3848
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3849
	cfg1 = RTL_R8(Config1);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3850
	if ((cfg1 & LEDS0) && (cfg1 & LEDS1))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3851
		RTL_W8(Config1, cfg1 & ~LEDS0);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3852
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3853
	RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R810X_CPCMD_QUIRK_MASK);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3854
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3855
	rtl_ephy_init(ioaddr, e_info_8102e_1, ARRAY_SIZE(e_info_8102e_1));
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3856
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3857
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3858
static void rtl_hw_start_8102e_2(void __iomem *ioaddr, struct pci_dev *pdev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3859
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3860
	rtl_csi_access_enable(ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3861
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3862
	rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3863
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3864
	RTL_W8(Config1, MEMMAP | IOMAP | VPD | PMEnable);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3865
	RTL_W8(Config3, RTL_R8(Config3) & ~Beacon_en);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3866
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3867
	RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R810X_CPCMD_QUIRK_MASK);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3868
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3869
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3870
static void rtl_hw_start_8102e_3(void __iomem *ioaddr, struct pci_dev *pdev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3871
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3872
	rtl_hw_start_8102e_2(ioaddr, pdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3873
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3874
	rtl_ephy_write(ioaddr, 0x03, 0xc2f9);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3875
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3876
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3877
static void rtl_hw_start_8101(struct net_device *dev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3878
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3879
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3880
	void __iomem *ioaddr = tp->mmio_addr;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3881
	struct pci_dev *pdev = tp->pci_dev;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3882
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3883
	if ((tp->mac_version == RTL_GIGA_MAC_VER_13) ||
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3884
	    (tp->mac_version == RTL_GIGA_MAC_VER_16)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3885
		int cap = tp->pcie_cap;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3886
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3887
		if (cap) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3888
			pci_write_config_word(pdev, cap + PCI_EXP_DEVCTL,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3889
					      PCI_EXP_DEVCTL_NOSNOOP_EN);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3890
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3891
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3892
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3893
	switch (tp->mac_version) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3894
	case RTL_GIGA_MAC_VER_07:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3895
		rtl_hw_start_8102e_1(ioaddr, pdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3896
		break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3897
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3898
	case RTL_GIGA_MAC_VER_08:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3899
		rtl_hw_start_8102e_3(ioaddr, pdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3900
		break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3901
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3902
	case RTL_GIGA_MAC_VER_09:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3903
		rtl_hw_start_8102e_2(ioaddr, pdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3904
		break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3905
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3906
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3907
	RTL_W8(Cfg9346, Cfg9346_Unlock);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3908
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3909
	RTL_W8(EarlyTxThres, EarlyTxThld);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3910
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3911
	rtl_set_rx_max_size(ioaddr, tp->rx_buf_sz);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3912
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3913
	tp->cp_cmd |= rtl_rw_cpluscmd(ioaddr) | PCIMulRW;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3914
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3915
	RTL_W16(CPlusCmd, tp->cp_cmd);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3916
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3917
	RTL_W16(IntrMitigate, 0x0000);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3918
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3919
	rtl_set_rx_tx_desc_registers(tp, ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3920
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3921
	RTL_W8(ChipCmd, CmdTxEnb | CmdRxEnb);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3922
	rtl_set_rx_tx_config_registers(tp);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3923
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3924
	RTL_W8(Cfg9346, Cfg9346_Lock);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3925
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3926
	RTL_R8(IntrMask);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3927
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3928
	rtl_set_rx_mode(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3929
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3930
	RTL_W8(ChipCmd, CmdTxEnb | CmdRxEnb);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3931
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3932
	RTL_W16(MultiIntr, RTL_R16(MultiIntr) & 0xf000);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3933
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3934
	if (!tp->ecdev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3935
		RTL_W16(IntrMask, tp->intr_event);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3936
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3937
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3938
static int rtl8169_change_mtu(struct net_device *dev, int new_mtu)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3939
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3940
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3941
	int ret = 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3942
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3943
	if (new_mtu < ETH_ZLEN || new_mtu > SafeMtu)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3944
		return -EINVAL;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3945
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3946
	dev->mtu = new_mtu;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3947
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3948
	if (!netif_running(dev))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3949
		goto out;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3950
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3951
	rtl8169_down(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3952
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3953
	rtl8169_set_rxbufsize(tp, dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3954
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3955
	ret = rtl8169_init_ring(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3956
	if (ret < 0)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3957
		goto out;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3958
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3959
	napi_enable(&tp->napi);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3960
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3961
	rtl_hw_start(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3962
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3963
	rtl8169_request_timer(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3964
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3965
out:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3966
	return ret;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3967
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3968
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3969
static inline void rtl8169_make_unusable_by_asic(struct RxDesc *desc)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3970
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3971
	desc->addr = cpu_to_le64(0x0badbadbadbadbadull);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3972
	desc->opts1 &= ~cpu_to_le32(DescOwn | RsvdMask);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3973
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3974
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3975
static void rtl8169_free_rx_skb(struct rtl8169_private *tp,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3976
				struct sk_buff **sk_buff, struct RxDesc *desc)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3977
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3978
	struct pci_dev *pdev = tp->pci_dev;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3979
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3980
	pci_unmap_single(pdev, le64_to_cpu(desc->addr), tp->rx_buf_sz,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3981
			 PCI_DMA_FROMDEVICE);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3982
	dev_kfree_skb(*sk_buff);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3983
	*sk_buff = NULL;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3984
	rtl8169_make_unusable_by_asic(desc);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3985
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3986
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3987
static inline void rtl8169_mark_to_asic(struct RxDesc *desc, u32 rx_buf_sz)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3988
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3989
	u32 eor = le32_to_cpu(desc->opts1) & RingEnd;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3990
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3991
	desc->opts1 = cpu_to_le32(DescOwn | eor | rx_buf_sz);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3992
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3993
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3994
static inline void rtl8169_map_to_asic(struct RxDesc *desc, dma_addr_t mapping,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3995
				       u32 rx_buf_sz)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3996
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3997
	desc->addr = cpu_to_le64(mapping);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3998
	wmb();
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3999
	rtl8169_mark_to_asic(desc, rx_buf_sz);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4000
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4001
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4002
static struct sk_buff *rtl8169_alloc_rx_skb(struct pci_dev *pdev,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4003
					    struct net_device *dev,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4004
					    struct RxDesc *desc, int rx_buf_sz,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4005
					    unsigned int align)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4006
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4007
	struct sk_buff *skb;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4008
	dma_addr_t mapping;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4009
	unsigned int pad;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4010
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4011
	pad = align ? align : NET_IP_ALIGN;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4012
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4013
	skb = netdev_alloc_skb(dev, rx_buf_sz + pad);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4014
	if (!skb)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4015
		goto err_out;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4016
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4017
	skb_reserve(skb, align ? ((pad - 1) & (unsigned long)skb->data) : pad);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4018
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4019
	mapping = pci_map_single(pdev, skb->data, rx_buf_sz,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4020
				 PCI_DMA_FROMDEVICE);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4021
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4022
	rtl8169_map_to_asic(desc, mapping, rx_buf_sz);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4023
out:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4024
	return skb;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4025
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4026
err_out:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4027
	rtl8169_make_unusable_by_asic(desc);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4028
	goto out;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4029
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4030
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4031
static void rtl8169_rx_clear(struct rtl8169_private *tp)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4032
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4033
	unsigned int i;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4034
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4035
	for (i = 0; i < NUM_RX_DESC; i++) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4036
		if (tp->Rx_skbuff[i]) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4037
			rtl8169_free_rx_skb(tp, tp->Rx_skbuff + i,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4038
					    tp->RxDescArray + i);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4039
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4040
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4041
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4042
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4043
static u32 rtl8169_rx_fill(struct rtl8169_private *tp, struct net_device *dev,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4044
			   u32 start, u32 end)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4045
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4046
	u32 cur;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4047
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4048
	for (cur = start; end - cur != 0; cur++) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4049
		struct sk_buff *skb;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4050
		unsigned int i = cur % NUM_RX_DESC;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4051
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4052
		WARN_ON((s32)(end - cur) < 0);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4053
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4054
		if (tp->Rx_skbuff[i])
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4055
			continue;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4056
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4057
		skb = rtl8169_alloc_rx_skb(tp->pci_dev, dev,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4058
					   tp->RxDescArray + i,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4059
					   tp->rx_buf_sz, tp->align);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4060
		if (!skb)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4061
			break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4062
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4063
		tp->Rx_skbuff[i] = skb;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4064
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4065
	return cur - start;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4066
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4067
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4068
static inline void rtl8169_mark_as_last_descriptor(struct RxDesc *desc)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4069
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4070
	desc->opts1 |= cpu_to_le32(RingEnd);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4071
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4072
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4073
static void rtl8169_init_ring_indexes(struct rtl8169_private *tp)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4074
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4075
	tp->dirty_tx = tp->dirty_rx = tp->cur_tx = tp->cur_rx = 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4076
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4077
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4078
static int rtl8169_init_ring(struct net_device *dev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4079
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4080
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4081
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4082
	rtl8169_init_ring_indexes(tp);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4083
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4084
	memset(tp->tx_skb, 0x0, NUM_TX_DESC * sizeof(struct ring_info));
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4085
	memset(tp->Rx_skbuff, 0x0, NUM_RX_DESC * sizeof(struct sk_buff *));
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4086
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4087
	if (rtl8169_rx_fill(tp, dev, 0, NUM_RX_DESC) != NUM_RX_DESC)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4088
		goto err_out;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4089
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4090
	rtl8169_mark_as_last_descriptor(tp->RxDescArray + NUM_RX_DESC - 1);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4091
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4092
	return 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4093
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4094
err_out:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4095
	rtl8169_rx_clear(tp);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4096
	return -ENOMEM;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4097
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4098
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4099
static void rtl8169_unmap_tx_skb(struct pci_dev *pdev, struct ring_info *tx_skb,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4100
				 struct TxDesc *desc)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4101
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4102
	unsigned int len = tx_skb->len;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4103
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4104
	pci_unmap_single(pdev, le64_to_cpu(desc->addr), len, PCI_DMA_TODEVICE);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4105
	desc->opts1 = 0x00;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4106
	desc->opts2 = 0x00;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4107
	desc->addr = 0x00;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4108
	tx_skb->len = 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4109
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4110
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4111
static void rtl8169_tx_clear(struct rtl8169_private *tp)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4112
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4113
	unsigned int i;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4114
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4115
	for (i = tp->dirty_tx; i < tp->dirty_tx + NUM_TX_DESC; i++) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4116
		unsigned int entry = i % NUM_TX_DESC;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4117
		struct ring_info *tx_skb = tp->tx_skb + entry;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4118
		unsigned int len = tx_skb->len;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4119
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4120
		if (len) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4121
			struct sk_buff *skb = tx_skb->skb;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4122
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4123
			rtl8169_unmap_tx_skb(tp->pci_dev, tx_skb,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4124
					     tp->TxDescArray + entry);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4125
			if (skb) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4126
				if (!tp->ecdev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4127
					dev_kfree_skb(skb);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4128
				tx_skb->skb = NULL;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4129
			}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4130
			tp->dev->stats.tx_dropped++;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4131
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4132
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4133
	tp->cur_tx = tp->dirty_tx = 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4134
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4135
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4136
static void rtl8169_schedule_work(struct net_device *dev, work_func_t task)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4137
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4138
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4139
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4140
	PREPARE_DELAYED_WORK(&tp->task, task);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4141
	schedule_delayed_work(&tp->task, 4);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4142
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4143
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4144
static void rtl8169_wait_for_quiescence(struct net_device *dev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4145
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4146
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4147
	void __iomem *ioaddr = tp->mmio_addr;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4148
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4149
	synchronize_irq(dev->irq);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4150
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4151
	/* Wait for any pending NAPI task to complete */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4152
	napi_disable(&tp->napi);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4153
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4154
	rtl8169_irq_mask_and_ack(ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4155
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4156
	tp->intr_mask = 0xffff;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4157
	RTL_W16(IntrMask, tp->intr_event);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4158
	napi_enable(&tp->napi);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4159
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4160
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4161
static void rtl8169_reinit_task(struct work_struct *work)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4162
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4163
	struct rtl8169_private *tp =
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4164
		container_of(work, struct rtl8169_private, task.work);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4165
	struct net_device *dev = tp->dev;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4166
	int ret;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4167
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4168
	rtnl_lock();
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4169
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4170
	if (!netif_running(dev))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4171
		goto out_unlock;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4172
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4173
	rtl8169_wait_for_quiescence(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4174
	rtl8169_close(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4175
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4176
	ret = rtl8169_open(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4177
	if (unlikely(ret < 0)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4178
		if (net_ratelimit() && netif_msg_drv(tp)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4179
			printk(KERN_ERR PFX "%s: reinit failure (status = %d)."
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4180
			       " Rescheduling.\n", dev->name, ret);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4181
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4182
		rtl8169_schedule_work(dev, rtl8169_reinit_task);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4183
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4184
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4185
out_unlock:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4186
	rtnl_unlock();
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4187
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4188
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4189
static void rtl8169_reset_task(struct work_struct *work)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4190
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4191
	struct rtl8169_private *tp =
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4192
		container_of(work, struct rtl8169_private, task.work);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4193
	struct net_device *dev = tp->dev;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4194
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4195
	rtnl_lock();
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4196
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4197
	if (!netif_running(dev))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4198
		goto out_unlock;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4199
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4200
	rtl8169_wait_for_quiescence(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4201
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4202
	rtl8169_rx_interrupt(dev, tp, tp->mmio_addr, ~(u32)0);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4203
	rtl8169_tx_clear(tp);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4204
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4205
	if (tp->dirty_rx == tp->cur_rx) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4206
		rtl8169_init_ring_indexes(tp);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4207
		rtl_hw_start(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4208
		netif_wake_queue(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4209
		rtl8169_check_link_status(dev, tp, tp->mmio_addr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4210
	} else {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4211
		if (net_ratelimit() && netif_msg_intr(tp)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4212
			printk(KERN_EMERG PFX "%s: Rx buffers shortage\n",
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4213
			       dev->name);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4214
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4215
		rtl8169_schedule_work(dev, rtl8169_reset_task);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4216
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4217
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4218
out_unlock:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4219
	rtnl_unlock();
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4220
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4221
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4222
static void rtl8169_tx_timeout(struct net_device *dev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4223
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4224
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4225
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4226
	if (tp->ecdev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4227
		return;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4228
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4229
	rtl8169_hw_reset(tp->mmio_addr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4230
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4231
	/* Let's wait a bit while any (async) irq lands on */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4232
	rtl8169_schedule_work(dev, rtl8169_reset_task);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4233
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4234
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4235
static int rtl8169_xmit_frags(struct rtl8169_private *tp, struct sk_buff *skb,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4236
			      u32 opts1)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4237
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4238
	struct skb_shared_info *info = skb_shinfo(skb);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4239
	unsigned int cur_frag, entry;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4240
	struct TxDesc * uninitialized_var(txd);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4241
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4242
	entry = tp->cur_tx;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4243
	for (cur_frag = 0; cur_frag < info->nr_frags; cur_frag++) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4244
		skb_frag_t *frag = info->frags + cur_frag;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4245
		dma_addr_t mapping;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4246
		u32 status, len;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4247
		void *addr;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4248
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4249
		entry = (entry + 1) % NUM_TX_DESC;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4250
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4251
		txd = tp->TxDescArray + entry;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4252
		len = frag->size;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4253
		addr = ((void *) page_address(frag->page)) + frag->page_offset;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4254
		mapping = pci_map_single(tp->pci_dev, addr, len, PCI_DMA_TODEVICE);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4255
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4256
		/* anti gcc 2.95.3 bugware (sic) */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4257
		status = opts1 | len | (RingEnd * !((entry + 1) % NUM_TX_DESC));
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4258
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4259
		txd->opts1 = cpu_to_le32(status);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4260
		txd->addr = cpu_to_le64(mapping);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4261
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4262
		tp->tx_skb[entry].len = len;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4263
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4264
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4265
	if (cur_frag) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4266
		tp->tx_skb[entry].skb = skb;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4267
		txd->opts1 |= cpu_to_le32(LastFrag);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4268
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4269
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4270
	return cur_frag;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4271
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4272
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4273
static inline u32 rtl8169_tso_csum(struct sk_buff *skb, struct net_device *dev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4274
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4275
	if (dev->features & NETIF_F_TSO) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4276
		u32 mss = skb_shinfo(skb)->gso_size;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4277
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4278
		if (mss)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4279
			return LargeSend | ((mss & MSSMask) << MSSShift);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4280
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4281
	if (skb->ip_summed == CHECKSUM_PARTIAL) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4282
		const struct iphdr *ip = ip_hdr(skb);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4283
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4284
		if (ip->protocol == IPPROTO_TCP)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4285
			return IPCS | TCPCS;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4286
		else if (ip->protocol == IPPROTO_UDP)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4287
			return IPCS | UDPCS;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4288
		WARN_ON(1);	/* we need a WARN() */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4289
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4290
	return 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4291
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4292
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4293
static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4294
				      struct net_device *dev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4295
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4296
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4297
	unsigned int frags, entry = tp->cur_tx % NUM_TX_DESC;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4298
	struct TxDesc *txd = tp->TxDescArray + entry;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4299
	void __iomem *ioaddr = tp->mmio_addr;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4300
	dma_addr_t mapping;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4301
	u32 status, len;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4302
	u32 opts1;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4303
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4304
	if (unlikely(TX_BUFFS_AVAIL(tp) < skb_shinfo(skb)->nr_frags)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4305
		if (netif_msg_drv(tp)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4306
			printk(KERN_ERR
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4307
			       "%s: BUG! Tx Ring full when queue awake!\n",
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4308
			       dev->name);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4309
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4310
		goto err_stop;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4311
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4312
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4313
	if (unlikely(le32_to_cpu(txd->opts1) & DescOwn))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4314
		goto err_stop;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4315
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4316
	opts1 = DescOwn | rtl8169_tso_csum(skb, dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4317
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4318
	frags = rtl8169_xmit_frags(tp, skb, opts1);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4319
	if (frags) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4320
		len = skb_headlen(skb);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4321
		opts1 |= FirstFrag;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4322
	} else {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4323
		len = skb->len;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4324
		opts1 |= FirstFrag | LastFrag;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4325
		tp->tx_skb[entry].skb = skb;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4326
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4327
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4328
	mapping = pci_map_single(tp->pci_dev, skb->data, len, PCI_DMA_TODEVICE);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4329
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4330
	tp->tx_skb[entry].len = len;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4331
	txd->addr = cpu_to_le64(mapping);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4332
	txd->opts2 = cpu_to_le32(rtl8169_tx_vlan_tag(tp, skb));
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4333
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4334
	wmb();
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4335
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4336
	/* anti gcc 2.95.3 bugware (sic) */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4337
	status = opts1 | len | (RingEnd * !((entry + 1) % NUM_TX_DESC));
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4338
	txd->opts1 = cpu_to_le32(status);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4339
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4340
	tp->cur_tx += frags + 1;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4341
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4342
	smp_wmb();
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4343
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4344
	RTL_W8(TxPoll, NPQ);	/* set polling bit */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4345
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4346
	if (!tp->ecdev) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4347
		if (TX_BUFFS_AVAIL(tp) < MAX_SKB_FRAGS) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4348
			netif_stop_queue(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4349
			smp_rmb();
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4350
			if (TX_BUFFS_AVAIL(tp) >= MAX_SKB_FRAGS)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4351
				netif_wake_queue(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4352
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4353
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4354
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4355
	return NETDEV_TX_OK;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4356
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4357
err_stop:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4358
	if (!tp->ecdev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4359
		netif_stop_queue(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4360
	dev->stats.tx_dropped++;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4361
	return NETDEV_TX_BUSY;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4362
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4363
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4364
static void rtl8169_pcierr_interrupt(struct net_device *dev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4365
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4366
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4367
	struct pci_dev *pdev = tp->pci_dev;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4368
	void __iomem *ioaddr = tp->mmio_addr;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4369
	u16 pci_status, pci_cmd;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4370
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4371
	pci_read_config_word(pdev, PCI_COMMAND, &pci_cmd);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4372
	pci_read_config_word(pdev, PCI_STATUS, &pci_status);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4373
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4374
	if (netif_msg_intr(tp)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4375
		printk(KERN_ERR
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4376
		       "%s: PCI error (cmd = 0x%04x, status = 0x%04x).\n",
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4377
		       dev->name, pci_cmd, pci_status);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4378
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4379
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4380
	/*
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4381
	 * The recovery sequence below admits a very elaborated explanation:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4382
	 * - it seems to work;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4383
	 * - I did not see what else could be done;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4384
	 * - it makes iop3xx happy.
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4385
	 *
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4386
	 * Feel free to adjust to your needs.
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4387
	 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4388
	if (pdev->broken_parity_status)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4389
		pci_cmd &= ~PCI_COMMAND_PARITY;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4390
	else
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4391
		pci_cmd |= PCI_COMMAND_SERR | PCI_COMMAND_PARITY;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4392
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4393
	pci_write_config_word(pdev, PCI_COMMAND, pci_cmd);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4394
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4395
	pci_write_config_word(pdev, PCI_STATUS,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4396
		pci_status & (PCI_STATUS_DETECTED_PARITY |
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4397
		PCI_STATUS_SIG_SYSTEM_ERROR | PCI_STATUS_REC_MASTER_ABORT |
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4398
		PCI_STATUS_REC_TARGET_ABORT | PCI_STATUS_SIG_TARGET_ABORT));
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4399
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4400
	/* The infamous DAC f*ckup only happens at boot time */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4401
	if ((tp->cp_cmd & PCIDAC) && !tp->dirty_rx && !tp->cur_rx) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4402
		if (netif_msg_intr(tp))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4403
			printk(KERN_INFO "%s: disabling PCI DAC.\n", dev->name);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4404
		tp->cp_cmd &= ~PCIDAC;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4405
		RTL_W16(CPlusCmd, tp->cp_cmd);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4406
		dev->features &= ~NETIF_F_HIGHDMA;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4407
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4408
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4409
	rtl8169_hw_reset(ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4410
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4411
	rtl8169_schedule_work(dev, rtl8169_reinit_task);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4412
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4413
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4414
static void rtl8169_tx_interrupt(struct net_device *dev,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4415
				 struct rtl8169_private *tp,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4416
				 void __iomem *ioaddr)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4417
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4418
	unsigned int dirty_tx, tx_left;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4419
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4420
	dirty_tx = tp->dirty_tx;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4421
	smp_rmb();
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4422
	tx_left = tp->cur_tx - dirty_tx;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4423
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4424
	while (tx_left > 0) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4425
		unsigned int entry = dirty_tx % NUM_TX_DESC;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4426
		struct ring_info *tx_skb = tp->tx_skb + entry;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4427
		u32 len = tx_skb->len;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4428
		u32 status;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4429
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4430
		rmb();
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4431
		status = le32_to_cpu(tp->TxDescArray[entry].opts1);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4432
		if (status & DescOwn)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4433
			break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4434
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4435
		dev->stats.tx_bytes += len;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4436
		dev->stats.tx_packets++;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4437
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4438
		rtl8169_unmap_tx_skb(tp->pci_dev, tx_skb, tp->TxDescArray + entry);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4439
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4440
		if (status & LastFrag) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4441
			if (!tp->ecdev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4442
				dev_kfree_skb(tx_skb->skb);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4443
			tx_skb->skb = NULL;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4444
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4445
		dirty_tx++;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4446
		tx_left--;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4447
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4448
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4449
	if (tp->dirty_tx != dirty_tx) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4450
		tp->dirty_tx = dirty_tx;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4451
		smp_wmb();
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4452
		if (!tp->ecdev && netif_queue_stopped(dev) &&
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4453
		    (TX_BUFFS_AVAIL(tp) >= MAX_SKB_FRAGS)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4454
			netif_wake_queue(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4455
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4456
		/*
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4457
		 * 8168 hack: TxPoll requests are lost when the Tx packets are
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4458
		 * too close. Let's kick an extra TxPoll request when a burst
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4459
		 * of start_xmit activity is detected (if it is not detected,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4460
		 * it is slow enough). -- FR
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4461
		 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4462
		smp_rmb();
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4463
		if (tp->cur_tx != dirty_tx)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4464
			RTL_W8(TxPoll, NPQ);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4465
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4466
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4467
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4468
static inline int rtl8169_fragmented_frame(u32 status)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4469
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4470
	return (status & (FirstFrag | LastFrag)) != (FirstFrag | LastFrag);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4471
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4472
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4473
static inline void rtl8169_rx_csum(struct sk_buff *skb, struct RxDesc *desc)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4474
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4475
	u32 opts1 = le32_to_cpu(desc->opts1);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4476
	u32 status = opts1 & RxProtoMask;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4477
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4478
	if (((status == RxProtoTCP) && !(opts1 & TCPFail)) ||
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4479
	    ((status == RxProtoUDP) && !(opts1 & UDPFail)) ||
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4480
	    ((status == RxProtoIP) && !(opts1 & IPFail)))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4481
		skb->ip_summed = CHECKSUM_UNNECESSARY;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4482
	else
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4483
		skb->ip_summed = CHECKSUM_NONE;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4484
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4485
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4486
static inline bool rtl8169_try_rx_copy(struct sk_buff **sk_buff,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4487
				       struct rtl8169_private *tp, int pkt_size,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4488
				       dma_addr_t addr)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4489
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4490
	struct sk_buff *skb;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4491
	bool done = false;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4492
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4493
	if (pkt_size >= rx_copybreak)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4494
		goto out;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4495
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4496
	skb = netdev_alloc_skb(tp->dev, pkt_size + NET_IP_ALIGN);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4497
	if (!skb)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4498
		goto out;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4499
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4500
	pci_dma_sync_single_for_cpu(tp->pci_dev, addr, pkt_size,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4501
				    PCI_DMA_FROMDEVICE);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4502
	skb_reserve(skb, NET_IP_ALIGN);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4503
	skb_copy_from_linear_data(*sk_buff, skb->data, pkt_size);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4504
	*sk_buff = skb;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4505
	done = true;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4506
out:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4507
	return done;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4508
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4509
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4510
static int rtl8169_rx_interrupt(struct net_device *dev,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4511
				struct rtl8169_private *tp,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4512
				void __iomem *ioaddr, u32 budget)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4513
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4514
	unsigned int cur_rx, rx_left;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4515
	unsigned int delta, count;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4516
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4517
	cur_rx = tp->cur_rx;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4518
	rx_left = NUM_RX_DESC + tp->dirty_rx - cur_rx;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4519
	rx_left = min(rx_left, budget);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4520
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4521
	for (; rx_left > 0; rx_left--, cur_rx++) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4522
		unsigned int entry = cur_rx % NUM_RX_DESC;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4523
		struct RxDesc *desc = tp->RxDescArray + entry;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4524
		u32 status;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4525
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4526
		rmb();
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4527
		status = le32_to_cpu(desc->opts1);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4528
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4529
		if (status & DescOwn)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4530
			break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4531
		if (unlikely(status & RxRES)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4532
			if (netif_msg_rx_err(tp)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4533
				printk(KERN_INFO
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4534
				       "%s: Rx ERROR. status = %08x\n",
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4535
				       dev->name, status);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4536
			}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4537
			dev->stats.rx_errors++;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4538
			if (status & (RxRWT | RxRUNT))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4539
				dev->stats.rx_length_errors++;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4540
			if (status & RxCRC)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4541
				dev->stats.rx_crc_errors++;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4542
			if (status & RxFOVF) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4543
				if (!tp->ecdev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4544
					rtl8169_schedule_work(dev, rtl8169_reset_task);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4545
				dev->stats.rx_fifo_errors++;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4546
			}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4547
			rtl8169_mark_to_asic(desc, tp->rx_buf_sz);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4548
		} else {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4549
			struct sk_buff *skb = tp->Rx_skbuff[entry];
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4550
			dma_addr_t addr = le64_to_cpu(desc->addr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4551
			int pkt_size = (status & 0x00001FFF) - 4;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4552
			struct pci_dev *pdev = tp->pci_dev;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4553
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4554
			/*
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4555
			 * The driver does not support incoming fragmented
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4556
			 * frames. They are seen as a symptom of over-mtu
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4557
			 * sized frames.
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4558
			 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4559
			if (unlikely(rtl8169_fragmented_frame(status))) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4560
				dev->stats.rx_dropped++;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4561
				dev->stats.rx_length_errors++;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4562
				rtl8169_mark_to_asic(desc, tp->rx_buf_sz);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4563
				continue;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4564
			}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4565
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4566
			rtl8169_rx_csum(skb, desc);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4567
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4568
			if (tp->ecdev) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4569
				pci_dma_sync_single_for_cpu(pdev, addr, pkt_size,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4570
						PCI_DMA_FROMDEVICE);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4571
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4572
				ecdev_receive(tp->ecdev, skb->data, pkt_size);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4573
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4574
				pci_dma_sync_single_for_device(pdev, addr,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4575
					pkt_size, PCI_DMA_FROMDEVICE);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4576
				rtl8169_mark_to_asic(desc, tp->rx_buf_sz);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4577
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4578
				// No need to detect link status as
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4579
				// long as frames are received: Reset watchdog.
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4580
				tp->ec_watchdog_jiffies = jiffies;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4581
			} else {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4582
				if (rtl8169_try_rx_copy(&skb, tp, pkt_size, addr)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4583
					pci_dma_sync_single_for_device(pdev, addr,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4584
						pkt_size, PCI_DMA_FROMDEVICE);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4585
					rtl8169_mark_to_asic(desc, tp->rx_buf_sz);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4586
				} else {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4587
					pci_unmap_single(pdev, addr, tp->rx_buf_sz,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4588
							 PCI_DMA_FROMDEVICE);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4589
					tp->Rx_skbuff[entry] = NULL;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4590
				}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4591
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4592
				skb_put(skb, pkt_size);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4593
				skb->protocol = eth_type_trans(skb, dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4594
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4595
				if (rtl8169_rx_vlan_skb(tp, desc, skb) < 0)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4596
					netif_receive_skb(skb);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4597
			}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4598
			dev->stats.rx_bytes += pkt_size;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4599
			dev->stats.rx_packets++;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4600
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4601
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4602
		/* Work around for AMD plateform. */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4603
		if ((desc->opts2 & cpu_to_le32(0xfffe000)) &&
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4604
		    (tp->mac_version == RTL_GIGA_MAC_VER_05)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4605
			desc->opts2 = 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4606
			cur_rx++;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4607
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4608
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4609
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4610
	count = cur_rx - tp->cur_rx;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4611
	tp->cur_rx = cur_rx;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4612
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4613
	if (tp->ecdev) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4614
		/* descriptors are cleaned up immediately. */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4615
		tp->dirty_rx = tp->cur_rx;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4616
	} else {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4617
		delta = rtl8169_rx_fill(tp, dev, tp->dirty_rx, tp->cur_rx);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4618
		if (!delta && count && netif_msg_intr(tp))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4619
			printk(KERN_INFO "%s: no Rx buffer allocated\n", dev->name);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4620
		tp->dirty_rx += delta;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4621
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4622
		/*
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4623
		 * FIXME: until there is periodic timer to try and refill the ring,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4624
		 * a temporary shortage may definitely kill the Rx process.
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4625
		 * - disable the asic to try and avoid an overflow and kick it again
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4626
		 *   after refill ?
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4627
		 * - how do others driver handle this condition (Uh oh...).
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4628
		 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4629
		if ((tp->dirty_rx + NUM_RX_DESC == tp->cur_rx) && netif_msg_intr(tp))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4630
			printk(KERN_EMERG "%s: Rx buffers exhausted\n", dev->name);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4631
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4632
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4633
	return count;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4634
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4635
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4636
static irqreturn_t rtl8169_interrupt(int irq, void *dev_instance)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4637
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4638
	struct net_device *dev = dev_instance;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4639
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4640
	void __iomem *ioaddr = tp->mmio_addr;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4641
	int handled = 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4642
	int status;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4643
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4644
	/* loop handling interrupts until we have no new ones or
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4645
	 * we hit a invalid/hotplug case.
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4646
	 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4647
	status = RTL_R16(IntrStatus);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4648
	while (status && status != 0xffff) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4649
		handled = 1;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4650
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4651
		/* Handle all of the error cases first. These will reset
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4652
		 * the chip, so just exit the loop.
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4653
		 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4654
		if (unlikely(!tp->ecdev && !netif_running(dev))) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4655
			rtl8169_asic_down(ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4656
			break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4657
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4658
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4659
		/* Work around for rx fifo overflow */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4660
		if (unlikely(status & RxFIFOOver) &&
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4661
		(tp->mac_version == RTL_GIGA_MAC_VER_11)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4662
			netif_stop_queue(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4663
			rtl8169_tx_timeout(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4664
			break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4665
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4666
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4667
		if (unlikely(status & SYSErr)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4668
			rtl8169_pcierr_interrupt(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4669
			break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4670
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4671
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4672
		if (status & LinkChg)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4673
			rtl8169_check_link_status(dev, tp, ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4674
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4675
		/* We need to see the lastest version of tp->intr_mask to
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4676
		 * avoid ignoring an MSI interrupt and having to wait for
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4677
		 * another event which may never come.
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4678
		 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4679
		smp_rmb();
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4680
		if (status & tp->intr_mask & tp->napi_event) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4681
			RTL_W16(IntrMask, tp->intr_event & ~tp->napi_event);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4682
			tp->intr_mask = ~tp->napi_event;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4683
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4684
			if (likely(napi_schedule_prep(&tp->napi)))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4685
				__napi_schedule(&tp->napi);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4686
			else if (netif_msg_intr(tp)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4687
				printk(KERN_INFO "%s: interrupt %04x in poll\n",
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4688
				dev->name, status);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4689
			}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4690
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4691
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4692
		/* We only get a new MSI interrupt when all active irq
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4693
		 * sources on the chip have been acknowledged. So, ack
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4694
		 * everything we've seen and check if new sources have become
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4695
		 * active to avoid blocking all interrupts from the chip.
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4696
		 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4697
		RTL_W16(IntrStatus,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4698
			(status & RxFIFOOver) ? (status | RxOverflow) : status);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4699
		status = RTL_R16(IntrStatus);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4700
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4701
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4702
	return IRQ_RETVAL(handled);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4703
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4704
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4705
static void ec_poll(struct net_device *dev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4706
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4707
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4708
	struct pci_dev *pdev = tp->pci_dev;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4709
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4710
	rtl8169_interrupt(pdev->irq, dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4711
	rtl8169_rx_interrupt(dev, tp, tp->mmio_addr, 100); // FIXME
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4712
	rtl8169_tx_interrupt(dev, tp, tp->mmio_addr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4713
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4714
    if (jiffies - tp->ec_watchdog_jiffies >= 2 * HZ) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4715
		rtl8169_phy_timer((unsigned long) dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4716
		tp->ec_watchdog_jiffies = jiffies;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4717
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4718
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4719
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4720
static int rtl8169_poll(struct napi_struct *napi, int budget)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4721
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4722
	struct rtl8169_private *tp = container_of(napi, struct rtl8169_private, napi);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4723
	struct net_device *dev = tp->dev;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4724
	void __iomem *ioaddr = tp->mmio_addr;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4725
	int work_done;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4726
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4727
	work_done = rtl8169_rx_interrupt(dev, tp, ioaddr, (u32) budget);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4728
	rtl8169_tx_interrupt(dev, tp, ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4729
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4730
	if (work_done < budget) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4731
		napi_complete(napi);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4732
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4733
		/* We need for force the visibility of tp->intr_mask
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4734
		 * for other CPUs, as we can loose an MSI interrupt
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4735
		 * and potentially wait for a retransmit timeout if we don't.
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4736
		 * The posted write to IntrMask is safe, as it will
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4737
		 * eventually make it to the chip and we won't loose anything
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4738
		 * until it does.
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4739
		 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4740
		tp->intr_mask = 0xffff;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4741
		smp_wmb();
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4742
		RTL_W16(IntrMask, tp->intr_event);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4743
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4744
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4745
	return work_done;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4746
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4747
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4748
static void rtl8169_rx_missed(struct net_device *dev, void __iomem *ioaddr)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4749
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4750
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4751
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4752
	if (tp->mac_version > RTL_GIGA_MAC_VER_06)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4753
		return;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4754
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4755
	dev->stats.rx_missed_errors += (RTL_R32(RxMissed) & 0xffffff);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4756
	RTL_W32(RxMissed, 0);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4757
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4758
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4759
static void rtl8169_down(struct net_device *dev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4760
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4761
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4762
	void __iomem *ioaddr = tp->mmio_addr;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4763
	unsigned int intrmask;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4764
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4765
	rtl8169_delete_timer(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4766
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4767
	if (!tp->ecdev) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4768
		netif_stop_queue(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4769
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4770
		napi_disable(&tp->napi);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4771
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4772
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4773
core_down:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4774
	if (!tp->ecdev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4775
		spin_lock_irq(&tp->lock);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4776
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4777
	rtl8169_asic_down(ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4778
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4779
	rtl8169_rx_missed(dev, ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4780
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4781
	if (!tp->ecdev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4782
		spin_unlock_irq(&tp->lock);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4783
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4784
	if (!tp->ecdev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4785
		synchronize_irq(dev->irq);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4786
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4787
	/* Give a racing hard_start_xmit a few cycles to complete. */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4788
	synchronize_sched();  /* FIXME: should this be synchronize_irq()? */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4789
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4790
	/*
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4791
	 * And now for the 50k$ question: are IRQ disabled or not ?
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4792
	 *
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4793
	 * Two paths lead here:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4794
	 * 1) dev->close
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4795
	 *    -> netif_running() is available to sync the current code and the
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4796
	 *       IRQ handler. See rtl8169_interrupt for details.
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4797
	 * 2) dev->change_mtu
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4798
	 *    -> rtl8169_poll can not be issued again and re-enable the
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4799
	 *       interruptions. Let's simply issue the IRQ down sequence again.
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4800
	 *
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4801
	 * No loop if hotpluged or major error (0xffff).
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4802
	 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4803
	intrmask = RTL_R16(IntrMask);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4804
	if (intrmask && (intrmask != 0xffff))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4805
		goto core_down;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4806
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4807
	rtl8169_tx_clear(tp);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4808
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4809
	rtl8169_rx_clear(tp);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4810
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4811
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4812
static int rtl8169_close(struct net_device *dev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4813
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4814
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4815
	struct pci_dev *pdev = tp->pci_dev;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4816
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4817
	/* update counters before going down */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4818
	rtl8169_update_counters(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4819
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4820
	rtl8169_down(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4821
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4822
	if (!tp->ecdev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4823
		free_irq(dev->irq, dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4824
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4825
	pci_free_consistent(pdev, R8169_RX_RING_BYTES, tp->RxDescArray,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4826
			    tp->RxPhyAddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4827
	pci_free_consistent(pdev, R8169_TX_RING_BYTES, tp->TxDescArray,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4828
			    tp->TxPhyAddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4829
	tp->TxDescArray = NULL;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4830
	tp->RxDescArray = NULL;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4831
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4832
	return 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4833
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4834
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4835
static void rtl_set_rx_mode(struct net_device *dev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4836
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4837
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4838
	void __iomem *ioaddr = tp->mmio_addr;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4839
	unsigned long flags;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4840
	u32 mc_filter[2];	/* Multicast hash filter */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4841
	int rx_mode;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4842
	u32 tmp = 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4843
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4844
	if (dev->flags & IFF_PROMISC) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4845
		/* Unconditionally log net taps. */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4846
		if (netif_msg_link(tp)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4847
			printk(KERN_NOTICE "%s: Promiscuous mode enabled.\n",
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4848
			       dev->name);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4849
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4850
		rx_mode =
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4851
		    AcceptBroadcast | AcceptMulticast | AcceptMyPhys |
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4852
		    AcceptAllPhys;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4853
		mc_filter[1] = mc_filter[0] = 0xffffffff;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4854
	} else if ((dev->mc_count > multicast_filter_limit)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4855
		   || (dev->flags & IFF_ALLMULTI)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4856
		/* Too many to filter perfectly -- accept all multicasts. */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4857
		rx_mode = AcceptBroadcast | AcceptMulticast | AcceptMyPhys;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4858
		mc_filter[1] = mc_filter[0] = 0xffffffff;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4859
	} else {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4860
		struct dev_mc_list *mclist;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4861
		unsigned int i;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4862
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4863
		rx_mode = AcceptBroadcast | AcceptMyPhys;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4864
		mc_filter[1] = mc_filter[0] = 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4865
		for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4866
		     i++, mclist = mclist->next) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4867
			int bit_nr = ether_crc(ETH_ALEN, mclist->dmi_addr) >> 26;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4868
			mc_filter[bit_nr >> 5] |= 1 << (bit_nr & 31);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4869
			rx_mode |= AcceptMulticast;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4870
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4871
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4872
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4873
	spin_lock_irqsave(&tp->lock, flags);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4874
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4875
	tmp = rtl8169_rx_config | rx_mode |
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4876
	      (RTL_R32(RxConfig) & rtl_chip_info[tp->chipset].RxConfigMask);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4877
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4878
	if (tp->mac_version > RTL_GIGA_MAC_VER_06) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4879
		u32 data = mc_filter[0];
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4880
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4881
		mc_filter[0] = swab32(mc_filter[1]);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4882
		mc_filter[1] = swab32(data);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4883
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4884
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4885
	RTL_W32(MAR0 + 0, mc_filter[0]);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4886
	RTL_W32(MAR0 + 4, mc_filter[1]);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4887
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4888
	RTL_W32(RxConfig, tmp);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4889
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4890
	spin_unlock_irqrestore(&tp->lock, flags);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4891
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4892
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4893
/**
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4894
 *  rtl8169_get_stats - Get rtl8169 read/write statistics
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4895
 *  @dev: The Ethernet Device to get statistics for
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4896
 *
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4897
 *  Get TX/RX statistics for rtl8169
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4898
 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4899
static struct net_device_stats *rtl8169_get_stats(struct net_device *dev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4900
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4901
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4902
	void __iomem *ioaddr = tp->mmio_addr;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4903
	unsigned long flags;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4904
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4905
	if (netif_running(dev)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4906
		spin_lock_irqsave(&tp->lock, flags);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4907
		rtl8169_rx_missed(dev, ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4908
		spin_unlock_irqrestore(&tp->lock, flags);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4909
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4910
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4911
	return &dev->stats;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4912
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4913
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4914
static void rtl8169_net_suspend(struct net_device *dev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4915
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4916
	if (!netif_running(dev))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4917
		return;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4918
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4919
	netif_device_detach(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4920
	netif_stop_queue(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4921
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4922
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4923
#ifdef CONFIG_PM
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4924
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4925
static int rtl8169_suspend(struct device *device)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4926
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4927
	struct pci_dev *pdev = to_pci_dev(device);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4928
	struct net_device *dev = pci_get_drvdata(pdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4929
	struct rtl8169_private *tp = netdev_priv(dev);
2589
2b9c78543663 Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents: 1973
diff changeset
  4930
1973
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4931
	if (tp->ecdev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4932
 		return -EBUSY;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4933
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4934
	rtl8169_net_suspend(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4935
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4936
	return 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4937
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4938
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4939
static int rtl8169_resume(struct device *device)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4940
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4941
	struct pci_dev *pdev = to_pci_dev(device);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4942
	struct net_device *dev = pci_get_drvdata(pdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4943
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4944
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4945
	if (tp->ecdev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4946
		return -EBUSY;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4947
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4948
	if (!netif_running(dev))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4949
		goto out;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4950
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4951
	netif_device_attach(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4952
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4953
	rtl8169_schedule_work(dev, rtl8169_reset_task);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4954
out:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4955
	return 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4956
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4957
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4958
static struct dev_pm_ops rtl8169_pm_ops = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4959
	.suspend = rtl8169_suspend,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4960
	.resume = rtl8169_resume,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4961
	.freeze = rtl8169_suspend,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4962
	.thaw = rtl8169_resume,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4963
	.poweroff = rtl8169_suspend,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4964
	.restore = rtl8169_resume,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4965
};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4966
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4967
#define RTL8169_PM_OPS	(&rtl8169_pm_ops)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4968
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4969
#else /* !CONFIG_PM */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4970
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4971
#define RTL8169_PM_OPS	NULL
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4972
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4973
#endif /* !CONFIG_PM */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4974
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4975
static void rtl_shutdown(struct pci_dev *pdev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4976
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4977
	struct net_device *dev = pci_get_drvdata(pdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4978
	struct rtl8169_private *tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4979
	void __iomem *ioaddr = tp->mmio_addr;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4980
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4981
	rtl8169_net_suspend(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4982
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4983
	/* restore original MAC address */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4984
	rtl_rar_set(tp, dev->perm_addr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4985
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4986
	spin_lock_irq(&tp->lock);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4987
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4988
	rtl8169_asic_down(ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4989
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4990
	spin_unlock_irq(&tp->lock);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4991
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4992
	if (system_state == SYSTEM_POWER_OFF) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4993
		/* WoL fails with some 8168 when the receiver is disabled. */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4994
		if (tp->features & RTL_FEATURE_WOL) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4995
			pci_clear_master(pdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4996
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4997
			RTL_W8(ChipCmd, CmdRxEnb);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4998
			/* PCI commit */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4999
			RTL_R8(ChipCmd);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5000
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5001
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5002
		pci_wake_from_d3(pdev, true);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5003
		pci_set_power_state(pdev, PCI_D3hot);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5004
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5005
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5006
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5007
static struct pci_driver rtl8169_pci_driver = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5008
	.name		= MODULENAME,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5009
	.id_table	= rtl8169_pci_tbl,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5010
	.probe		= rtl8169_init_one,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5011
	.remove		= __devexit_p(rtl8169_remove_one),
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5012
	.shutdown	= rtl_shutdown,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5013
	.driver.pm	= RTL8169_PM_OPS,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5014
};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5015
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5016
static int __init rtl8169_init_module(void)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5017
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5018
	return pci_register_driver(&rtl8169_pci_driver);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5019
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5020
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5021
static void __exit rtl8169_cleanup_module(void)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5022
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5023
	pci_unregister_driver(&rtl8169_pci_driver);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5024
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5025
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5026
module_init(rtl8169_init_module);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5027
module_exit(rtl8169_cleanup_module);