devices/r8169-2.6.32-orig.c
author Knud Baastrup <kba@deif.com>
Tue, 14 Apr 2015 13:12:24 -0400
changeset 2629 a2701af27fde
parent 1973 4d6774893746
permissions -rw-r--r--
Internal SDO requests now synchronized with external requests.
Internal SDO requests are managed by master FSM and can conflict with
external requests managed by slave FSM. The internal SDO requests
includes SDO requests created by an application and external request are
typical created by EtherCAT Tool for SDO upload/download or a directory
fetch initiated with ethercat sdos command. The conflict will cause a
FPWR from an external request to be overwritten by a FPWR from an
internal SDO request (or oppersite) in the same "train" of datagrams.
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
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    31
#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
    32
#define MODULENAME "r8169"
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    33
#define PFX MODULENAME ": "
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    34
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    35
#ifdef RTL8169_DEBUG
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    36
#define assert(expr) \
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    37
	if (!(expr)) {					\
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    38
		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
    39
		#expr,__FILE__,__func__,__LINE__);		\
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    40
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    41
#define dprintk(fmt, args...) \
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    42
	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
    43
#else
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    44
#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
    45
#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
    46
#endif /* RTL8169_DEBUG */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    47
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    48
#define R8169_MSG_DEFAULT \
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    49
	(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
    50
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    51
#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
    52
	(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
    53
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    54
/* 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
    55
   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
    56
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
    57
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    58
/* MAC address length */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    59
#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
    60
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    61
#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
    62
#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
    63
#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
    64
#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
    65
#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
    66
#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
    67
#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
    68
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    69
#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
    70
#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
    71
#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
    72
#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
    73
#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
    74
#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
    75
#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
    76
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    77
#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
    78
#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
    79
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    80
#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
    81
#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
    82
#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
    83
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    84
/* write/read MMIO register */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    85
#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
    86
#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
    87
#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
    88
#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
    89
#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
    90
#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
    91
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    92
enum mac_version {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    93
	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
    94
	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
    95
	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
    96
	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
    97
	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
    98
	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
    99
	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
   100
	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
   101
	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
   102
	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
   103
	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
   104
	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
   105
	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
   106
	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
   107
	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
   108
	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
   109
	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
   110
	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
   111
	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
   112
	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
   113
	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
   114
	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
   115
	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
   116
	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
   117
	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
   118
	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
   119
	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
   120
	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
   121
};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   122
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   123
#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
   124
	{ .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
   125
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   126
static const struct {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   127
	const char *name;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   128
	u8 mac_version;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   129
	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
   130
} rtl_chip_info[] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   131
	_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
   132
	_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
   133
	_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
   134
	_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
   135
	_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
   136
	_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
   137
	_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
   138
	_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
   139
	_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
   140
	_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
   141
	_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
   142
	_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
   143
	_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
   144
	_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
   145
	_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
   146
	_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
   147
	_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
   148
	_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
   149
	_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
   150
	_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
   151
	_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
   152
	_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
   153
	_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
   154
	_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
   155
	_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
   156
	_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
   157
	_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
   158
};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   159
#undef _R
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
enum cfg_version {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   162
	RTL_CFG_0 = 0x00,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   163
	RTL_CFG_1,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   164
	RTL_CFG_2
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   165
};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   166
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   167
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
   168
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
   169
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
   170
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   171
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
   172
	{ 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
   173
	{ 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
   174
	{ 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
   175
	{ 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
   176
	{ 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
   177
	{ 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
   178
	{ 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
   179
	{ 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
   180
	{ 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
   181
		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
   182
	{ 0x0001,				0x8168,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   183
		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
   184
	{0,},
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   185
};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   186
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   187
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
   188
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   189
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
   190
static int use_dac;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   191
static struct {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   192
	u32 msg_enable;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   193
} debug = { -1 };
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   194
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   195
enum rtl_registers {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   196
	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
   197
	MAC4		= 4,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   198
	MAR0		= 8,	/* Multicast filter. */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   199
	CounterAddrLow		= 0x10,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   200
	CounterAddrHigh		= 0x14,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   201
	TxDescStartAddrLow	= 0x20,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   202
	TxDescStartAddrHigh	= 0x24,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   203
	TxHDescStartAddrLow	= 0x28,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   204
	TxHDescStartAddrHigh	= 0x2c,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   205
	FLASH		= 0x30,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   206
	ERSR		= 0x36,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   207
	ChipCmd		= 0x37,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   208
	TxPoll		= 0x38,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   209
	IntrMask	= 0x3c,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   210
	IntrStatus	= 0x3e,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   211
	TxConfig	= 0x40,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   212
	RxConfig	= 0x44,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   213
	RxMissed	= 0x4c,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   214
	Cfg9346		= 0x50,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   215
	Config0		= 0x51,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   216
	Config1		= 0x52,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   217
	Config2		= 0x53,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   218
	Config3		= 0x54,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   219
	Config4		= 0x55,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   220
	Config5		= 0x56,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   221
	MultiIntr	= 0x5c,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   222
	PHYAR		= 0x60,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   223
	PHYstatus	= 0x6c,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   224
	RxMaxSize	= 0xda,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   225
	CPlusCmd	= 0xe0,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   226
	IntrMitigate	= 0xe2,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   227
	RxDescAddrLow	= 0xe4,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   228
	RxDescAddrHigh	= 0xe8,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   229
	EarlyTxThres	= 0xec,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   230
	FuncEvent	= 0xf0,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   231
	FuncEventMask	= 0xf4,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   232
	FuncPresetState	= 0xf8,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   233
	FuncForceEvent	= 0xfc,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   234
};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   235
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   236
enum rtl8110_registers {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   237
	TBICSR			= 0x64,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   238
	TBI_ANAR		= 0x68,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   239
	TBI_LPAR		= 0x6a,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   240
};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   241
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   242
enum rtl8168_8101_registers {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   243
	CSIDR			= 0x64,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   244
	CSIAR			= 0x68,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   245
#define	CSIAR_FLAG			0x80000000
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   246
#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
   247
#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
   248
#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
   249
#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
   250
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   251
	EPHYAR			= 0x80,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   252
#define	EPHYAR_FLAG			0x80000000
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   253
#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
   254
#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
   255
#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
   256
#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
   257
	DBG_REG			= 0xd1,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   258
#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
   259
#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
   260
	EFUSEAR			= 0xdc,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   261
#define	EFUSEAR_FLAG			0x80000000
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   262
#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
   263
#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
   264
#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
   265
#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
   266
#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
   267
};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   268
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   269
enum rtl_register_content {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   270
	/* InterruptStatusBits */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   271
	SYSErr		= 0x8000,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   272
	PCSTimeout	= 0x4000,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   273
	SWInt		= 0x0100,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   274
	TxDescUnavail	= 0x0080,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   275
	RxFIFOOver	= 0x0040,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   276
	LinkChg		= 0x0020,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   277
	RxOverflow	= 0x0010,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   278
	TxErr		= 0x0008,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   279
	TxOK		= 0x0004,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   280
	RxErr		= 0x0002,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   281
	RxOK		= 0x0001,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   282
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   283
	/* RxStatusDesc */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   284
	RxFOVF	= (1 << 23),
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   285
	RxRWT	= (1 << 22),
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   286
	RxRES	= (1 << 21),
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   287
	RxRUNT	= (1 << 20),
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   288
	RxCRC	= (1 << 19),
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   289
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   290
	/* ChipCmdBits */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   291
	CmdReset	= 0x10,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   292
	CmdRxEnb	= 0x08,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   293
	CmdTxEnb	= 0x04,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   294
	RxBufEmpty	= 0x01,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   295
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   296
	/* TXPoll register p.5 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   297
	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
   298
	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
   299
	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
   300
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   301
	/* Cfg9346Bits */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   302
	Cfg9346_Lock	= 0x00,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   303
	Cfg9346_Unlock	= 0xc0,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   304
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   305
	/* rx_mode_bits */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   306
	AcceptErr	= 0x20,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   307
	AcceptRunt	= 0x10,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   308
	AcceptBroadcast	= 0x08,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   309
	AcceptMulticast	= 0x04,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   310
	AcceptMyPhys	= 0x02,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   311
	AcceptAllPhys	= 0x01,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   312
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   313
	/* RxConfigBits */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   314
	RxCfgFIFOShift	= 13,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   315
	RxCfgDMAShift	=  8,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   316
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   317
	/* TxConfigBits */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   318
	TxInterFrameGapShift = 24,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   319
	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
   320
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   321
	/* Config1 register p.24 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   322
	LEDS1		= (1 << 7),
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   323
	LEDS0		= (1 << 6),
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   324
	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
   325
	Speed_down	= (1 << 4),
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   326
	MEMMAP		= (1 << 3),
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   327
	IOMAP		= (1 << 2),
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   328
	VPD		= (1 << 1),
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   329
	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
   330
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   331
	/* Config2 register p. 25 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   332
	PCI_Clock_66MHz = 0x01,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   333
	PCI_Clock_33MHz = 0x00,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   334
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   335
	/* Config3 register p.25 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   336
	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
   337
	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
   338
	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
   339
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   340
	/* Config5 register p.27 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   341
	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
   342
	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
   343
	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
   344
	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
   345
	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
   346
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   347
	/* TBICSR p.28 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   348
	TBIReset	= 0x80000000,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   349
	TBILoopback	= 0x40000000,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   350
	TBINwEnable	= 0x20000000,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   351
	TBINwRestart	= 0x10000000,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   352
	TBILinkOk	= 0x02000000,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   353
	TBINwComplete	= 0x01000000,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   354
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   355
	/* CPlusCmd p.31 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   356
	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
   357
	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
   358
	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
   359
	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
   360
	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
   361
	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
   362
	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
   363
	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
   364
	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
   365
	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
   366
	RxVlan		= (1 << 6),
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   367
	RxChkSum	= (1 << 5),
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   368
	PCIDAC		= (1 << 4),
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   369
	PCIMulRW	= (1 << 3),
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   370
	INTT_0		= 0x0000,	// 8168
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   371
	INTT_1		= 0x0001,	// 8168
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   372
	INTT_2		= 0x0002,	// 8168
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   373
	INTT_3		= 0x0003,	// 8168
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   374
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   375
	/* rtl8169_PHYstatus */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   376
	TBI_Enable	= 0x80,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   377
	TxFlowCtrl	= 0x40,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   378
	RxFlowCtrl	= 0x20,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   379
	_1000bpsF	= 0x10,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   380
	_100bps		= 0x08,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   381
	_10bps		= 0x04,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   382
	LinkStatus	= 0x02,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   383
	FullDup		= 0x01,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   384
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   385
	/* _TBICSRBit */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   386
	TBILinkOK	= 0x02000000,
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
	/* DumpCounterCommand */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   389
	CounterDump	= 0x8,
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
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   392
enum desc_status_bit {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   393
	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
   394
	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
   395
	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
   396
	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
   397
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   398
	/* Tx private */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   399
	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
   400
	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
   401
	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
   402
	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
   403
	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
   404
	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
   405
	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
   406
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   407
	/* Rx private */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   408
	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
   409
	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
   410
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   411
#define RxProtoUDP	(PID1)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   412
#define RxProtoTCP	(PID0)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   413
#define RxProtoIP	(PID1 | PID0)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   414
#define RxProtoMask	RxProtoIP
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   415
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   416
	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
   417
	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
   418
	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
   419
	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
   420
};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   421
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   422
#define RsvdMask	0x3fffc000
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
struct TxDesc {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   425
	__le32 opts1;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   426
	__le32 opts2;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   427
	__le64 addr;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   428
};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   429
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   430
struct RxDesc {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   431
	__le32 opts1;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   432
	__le32 opts2;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   433
	__le64 addr;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   434
};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   435
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   436
struct ring_info {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   437
	struct sk_buff	*skb;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   438
	u32		len;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   439
	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
   440
};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   441
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   442
enum features {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   443
	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
   444
	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
   445
	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
   446
};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   447
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   448
struct rtl8169_counters {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   449
	__le64	tx_packets;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   450
	__le64	rx_packets;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   451
	__le64	tx_errors;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   452
	__le32	rx_errors;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   453
	__le16	rx_missed;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   454
	__le16	align_errors;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   455
	__le32	tx_one_collision;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   456
	__le32	tx_multi_collision;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   457
	__le64	rx_unicast;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   458
	__le64	rx_broadcast;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   459
	__le32	rx_multicast;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   460
	__le16	tx_aborted;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   461
	__le16	tx_underun;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   462
};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   463
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   464
struct rtl8169_private {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   465
	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
   466
	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
   467
	struct net_device *dev;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   468
	struct napi_struct napi;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   469
	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
   470
	u32 msg_enable;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   471
	int chipset;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   472
	int mac_version;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   473
	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
   474
	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
   475
	u32 dirty_rx;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   476
	u32 dirty_tx;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   477
	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
   478
	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
   479
	dma_addr_t TxPhyAddr;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   480
	dma_addr_t RxPhyAddr;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   481
	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
   482
	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
   483
	unsigned align;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   484
	unsigned rx_buf_sz;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   485
	struct timer_list timer;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   486
	u16 cp_cmd;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   487
	u16 intr_event;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   488
	u16 napi_event;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   489
	u16 intr_mask;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   490
	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
   491
#ifdef CONFIG_R8169_VLAN
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   492
	struct vlan_group *vlgrp;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   493
#endif
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   494
	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
   495
	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
   496
	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
   497
	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
   498
	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
   499
	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
   500
	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
   501
	int pcie_cap;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   502
	struct delayed_work task;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   503
	unsigned features;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   504
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   505
	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
   506
	struct rtl8169_counters counters;
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
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   509
MODULE_AUTHOR("Realtek and the Linux r8169 crew <netdev@vger.kernel.org>");
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   510
MODULE_DESCRIPTION("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
   511
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
   512
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
   513
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
   514
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
   515
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
   516
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
   517
MODULE_LICENSE("GPL");
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   518
MODULE_VERSION(RTL8169_VERSION);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   519
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   520
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
   521
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
   522
				      struct net_device *dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   523
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
   524
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
   525
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
   526
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
   527
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
   528
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
   529
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
   530
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
   531
				void __iomem *, u32 budget);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   532
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
   533
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
   534
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
   535
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
   536
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   537
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
   538
	(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
   539
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   540
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
   541
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   542
	int i;
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
	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
   545
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   546
	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
   547
		/*
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   548
		 * 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
   549
		 * MII register.
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
		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
   552
			break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   553
		udelay(25);
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
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   556
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   557
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
   558
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   559
	int i, value = -1;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   560
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   561
	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
   562
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   563
	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
   564
		/*
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   565
		 * 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
   566
		 * the specified MII register.
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
		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
   569
			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
   570
			break;
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
		udelay(25);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   573
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   574
	return value;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   575
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   576
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   577
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
   578
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   579
	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
   580
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   581
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   582
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
   583
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   584
	int val;
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
	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
   587
	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
   588
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   589
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   590
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
   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
	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
   594
	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
   595
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   596
	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
   597
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   598
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   599
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
   600
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   601
	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
   602
	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
   603
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   604
	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
   605
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   606
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   607
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
   608
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   609
	unsigned int i;
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
	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
   612
		(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
   613
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   614
	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
   615
		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
   616
			break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   617
		udelay(10);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   618
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   619
}
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
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
   622
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   623
	u16 value = 0xffff;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   624
	unsigned int i;
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
	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
   627
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   628
	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
   629
		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
   630
			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
   631
			break;
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
		udelay(10);
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
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   636
	return value;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   637
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   638
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   639
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
   640
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   641
	unsigned int i;
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
	RTL_W32(CSIDR, value);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   644
	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
   645
		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
   646
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   647
	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
   648
		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
   649
			break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   650
		udelay(10);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   651
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   652
}
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
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
   655
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   656
	u32 value = ~0x00;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   657
	unsigned int i;
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
	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
   660
		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
   661
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   662
	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
   663
		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
   664
			value = RTL_R32(CSIDR);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   665
			break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   666
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   667
		udelay(10);
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
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   670
	return value;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   671
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   672
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   673
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
   674
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   675
	u8 value = 0xff;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   676
	unsigned int i;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   677
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   678
	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
   679
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   680
	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
   681
		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
   682
			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
   683
			break;
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
		udelay(100);
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
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   688
	return value;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   689
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   690
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   691
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
   692
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   693
	RTL_W16(IntrMask, 0x0000);
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
	RTL_W16(IntrStatus, 0xffff);
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_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
   699
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   700
	RTL_W8(ChipCmd, 0x00);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   701
	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
   702
	RTL_R16(CPlusCmd);
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 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
   706
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   707
	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
   708
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   709
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   710
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
   711
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   712
	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
   713
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   714
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   715
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
   716
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   717
	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
   718
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   719
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   720
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
   721
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   722
	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
   723
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   724
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   725
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
   726
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   727
	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
   728
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   729
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   730
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
   731
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   732
	unsigned int val;
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
	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
   735
	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
   736
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   737
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   738
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
   739
				      struct rtl8169_private *tp,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   740
				      void __iomem *ioaddr)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   741
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   742
	unsigned long flags;
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
	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
   745
	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
   746
		netif_carrier_on(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   747
		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
   748
			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
   749
	} else {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   750
		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
   751
			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
   752
		netif_carrier_off(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   753
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   754
	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
   755
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   756
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   757
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
   758
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   759
	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
   760
	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
   761
	u8 options;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   762
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   763
	wol->wolopts = 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   764
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   765
#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
   766
	wol->supported = WAKE_ANY;
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
	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
   769
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   770
	options = RTL_R8(Config1);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   771
	if (!(options & PMEnable))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   772
		goto out_unlock;
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
	options = RTL_R8(Config3);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   775
	if (options & LinkUp)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   776
		wol->wolopts |= WAKE_PHY;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   777
	if (options & MagicPacket)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   778
		wol->wolopts |= WAKE_MAGIC;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   779
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   780
	options = RTL_R8(Config5);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   781
	if (options & UWF)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   782
		wol->wolopts |= WAKE_UCAST;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   783
	if (options & BWF)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   784
		wol->wolopts |= WAKE_BCAST;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   785
	if (options & MWF)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   786
		wol->wolopts |= WAKE_MCAST;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   787
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   788
out_unlock:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   789
	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
   790
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   791
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   792
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
   793
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   794
	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
   795
	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
   796
	unsigned int i;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   797
	static struct {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   798
		u32 opt;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   799
		u16 reg;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   800
		u8  mask;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   801
	} cfg[] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   802
		{ WAKE_ANY,   Config1, PMEnable },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   803
		{ WAKE_PHY,   Config3, LinkUp },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   804
		{ WAKE_MAGIC, Config3, MagicPacket },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   805
		{ WAKE_UCAST, Config5, UWF },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   806
		{ WAKE_BCAST, Config5, BWF },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   807
		{ WAKE_MCAST, Config5, MWF },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   808
		{ WAKE_ANY,   Config5, LanWake }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   809
	};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   810
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   811
	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
   812
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   813
	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
   814
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   815
	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
   816
		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
   817
		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
   818
			options |= cfg[i].mask;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   819
		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
   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
	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
   823
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   824
	if (wol->wolopts)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   825
		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
   826
	else
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   827
		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
   828
	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
   829
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   830
	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
   831
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   832
	return 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   833
}
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
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
   836
				struct ethtool_drvinfo *info)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   837
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   838
	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
   839
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   840
	strcpy(info->driver, MODULENAME);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   841
	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
   842
	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
   843
}
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
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
   846
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   847
	return R8169_REGS_SIZE;
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
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   850
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
   851
				 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
   852
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   853
	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
   854
	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
   855
	int ret = 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   856
	u32 reg;
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
	reg = RTL_R32(TBICSR);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   859
	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
   860
	    (duplex == DUPLEX_FULL)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   861
		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
   862
	} 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
   863
		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
   864
	else {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   865
		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
   866
			printk(KERN_WARNING "%s: "
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   867
			       "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
   868
			       dev->name);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   869
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   870
		ret = -EOPNOTSUPP;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   871
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   872
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   873
	return ret;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   874
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   875
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   876
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
   877
				  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
   878
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   879
	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
   880
	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
   881
	int giga_ctrl, bmcr;
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
	if (autoneg == AUTONEG_ENABLE) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   884
		int auto_nego;
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
		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
   887
		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
   888
			      ADVERTISE_100HALF | ADVERTISE_100FULL);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   889
		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
   890
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   891
		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
   892
		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
   893
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   894
		/* 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
   895
		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
   896
		    (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
   897
		    (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
   898
		    (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
   899
		    (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
   900
		    (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
   901
		    (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
   902
		    (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
   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
		} 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
   905
			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
   906
			       dev->name);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   907
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   908
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   909
		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
   910
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   911
		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
   912
		    (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
   913
		    (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
   914
			/*
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   915
			 * Wake up the PHY.
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   916
			 * 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
   917
			 * registers.
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
			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
   920
			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
   921
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   922
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   923
		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
   924
		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
   925
	} else {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   926
		giga_ctrl = 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   927
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   928
		if (speed == SPEED_10)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   929
			bmcr = 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   930
		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
   931
			bmcr = BMCR_SPEED100;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   932
		else
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   933
			return -EINVAL;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   934
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   935
		if (duplex == DUPLEX_FULL)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   936
			bmcr |= BMCR_FULLDPLX;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   937
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   938
		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
   939
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   940
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   941
	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
   942
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   943
	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
   944
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   945
	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
   946
	    (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
   947
		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
   948
			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
   949
			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
   950
		} else {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   951
			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
   952
			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
   953
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   954
	}
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
	return 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   957
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   958
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   959
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
   960
			     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
   961
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   962
	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
   963
	int ret;
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
	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
   966
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   967
	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
   968
		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
   969
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   970
	return ret;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   971
}
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
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
   974
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   975
	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
   976
	unsigned long flags;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   977
	int ret;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   978
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   979
	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
   980
	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
   981
	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
   982
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   983
	return ret;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   984
}
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
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
   987
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   988
	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
   989
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   990
	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
   991
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   992
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   993
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
   994
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   995
	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
   996
	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
   997
	unsigned long flags;
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
	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
  1000
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1001
	if (data)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1002
		tp->cp_cmd |= RxChkSum;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1003
	else
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1004
		tp->cp_cmd &= ~RxChkSum;
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
	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
  1007
	RTL_R16(CPlusCmd);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1008
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1009
	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
  1010
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1011
	return 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1012
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1013
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1014
#ifdef CONFIG_R8169_VLAN
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1015
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1016
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
  1017
				      struct sk_buff *skb)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1018
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1019
	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
  1020
		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
  1021
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1022
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1023
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
  1024
				     struct vlan_group *grp)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1025
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1026
	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
  1027
	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
  1028
	unsigned long flags;
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
	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
  1031
	tp->vlgrp = grp;
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
	 * 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
  1034
	 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1035
	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
  1036
		tp->cp_cmd |= RxVlan;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1037
	else
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1038
		tp->cp_cmd &= ~RxVlan;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1039
	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
  1040
	RTL_R16(CPlusCmd);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1041
	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
  1042
}
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
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
  1045
			       struct sk_buff *skb)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1046
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1047
	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
  1048
	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
  1049
	int ret;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1050
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1051
	if (vlgrp && (opts2 & RxVlanTag)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1052
		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
  1053
		ret = 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1054
	} else
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1055
		ret = -1;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1056
	desc->opts2 = 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1057
	return ret;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1058
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1059
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1060
#else /* !CONFIG_R8169_VLAN */
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
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
  1063
				      struct sk_buff *skb)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1064
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1065
	return 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1066
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1067
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1068
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
  1069
			       struct sk_buff *skb)
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
	return -1;
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
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1074
#endif
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
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
  1077
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1078
	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
  1079
	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
  1080
	u32 status;
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
	cmd->supported =
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1083
		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
  1084
	cmd->port = PORT_FIBRE;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1085
	cmd->transceiver = XCVR_INTERNAL;
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
	status = RTL_R32(TBICSR);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1088
	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
  1089
	cmd->autoneg = !!(status & TBINwEnable);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1090
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1091
	cmd->speed = SPEED_1000;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1092
	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
  1093
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1094
	return 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1095
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1096
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1097
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
  1098
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1099
	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
  1100
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1101
	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
  1102
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1103
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1104
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
  1105
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1106
	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
  1107
	unsigned long flags;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1108
	int rc;
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
	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
  1111
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1112
	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
  1113
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1114
	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
  1115
	return rc;
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
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1118
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
  1119
			     void *p)
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
	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
  1122
	unsigned long flags;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1123
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1124
	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
  1125
		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
  1126
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1127
	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
  1128
	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
  1129
	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
  1130
}
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
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
  1133
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1134
	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
  1135
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1136
	return tp->msg_enable;
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
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1139
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
  1140
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1141
	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
  1142
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1143
	tp->msg_enable = value;
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
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1146
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
  1147
	"tx_packets",
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1148
	"rx_packets",
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1149
	"tx_errors",
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1150
	"rx_errors",
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1151
	"rx_missed",
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1152
	"align_errors",
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1153
	"tx_single_collisions",
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1154
	"tx_multi_collisions",
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1155
	"unicast",
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1156
	"broadcast",
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1157
	"multicast",
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1158
	"tx_aborted",
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1159
	"tx_underrun",
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1160
};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1161
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1162
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
  1163
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1164
	switch (sset) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1165
	case ETH_SS_STATS:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1166
		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
  1167
	default:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1168
		return -EOPNOTSUPP;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1169
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1170
}
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
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
  1173
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1174
	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
  1175
	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
  1176
	struct rtl8169_counters *counters;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1177
	dma_addr_t paddr;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1178
	u32 cmd;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1179
	int wait = 1000;
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
	 * 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
  1183
	 * is disabled.
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
	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
  1186
		return;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1187
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1188
	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
  1189
	if (!counters)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1190
		return;
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
	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
  1193
	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
  1194
	RTL_W32(CounterAddrLow, cmd);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1195
	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
  1196
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1197
	while (wait--) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1198
		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
  1199
			/* copy updated counters */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1200
			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
  1201
			break;
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
		udelay(10);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1204
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1205
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1206
	RTL_W32(CounterAddrLow, 0);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1207
	RTL_W32(CounterAddrHigh, 0);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1208
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1209
	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
  1210
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1211
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1212
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
  1213
				      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
  1214
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1215
	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
  1216
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1217
	ASSERT_RTNL();
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1218
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1219
	rtl8169_update_counters(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1220
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1221
	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
  1222
	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
  1223
	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
  1224
	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
  1225
	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
  1226
	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
  1227
	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
  1228
	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
  1229
	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
  1230
	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
  1231
	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
  1232
	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
  1233
	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
  1234
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1235
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1236
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
  1237
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1238
	switch(stringset) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1239
	case ETH_SS_STATS:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1240
		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
  1241
		break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1242
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1243
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1244
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1245
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
  1246
	.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
  1247
	.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
  1248
	.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
  1249
	.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
  1250
	.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
  1251
	.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
  1252
	.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
  1253
	.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
  1254
	.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
  1255
	.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
  1256
	.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
  1257
	.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
  1258
	.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
  1259
	.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
  1260
	.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
  1261
	.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
  1262
	.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
  1263
	.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
  1264
};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1265
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1266
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
  1267
				    void __iomem *ioaddr)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1268
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1269
	/*
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1270
	 * 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
  1271
	 * 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
  1272
	 * if needed:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1273
	 *
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1274
	 * (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
  1275
	 *
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1276
	 * 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
  1277
	 *
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1278
	 * (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
  1279
	 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1280
	const struct {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1281
		u32 mask;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1282
		u32 val;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1283
		int mac_version;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1284
	} mac_info[] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1285
		/* 8168D family. */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1286
		{ 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
  1287
		{ 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
  1288
		{ 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
  1289
		{ 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
  1290
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1291
		/* 8168C family. */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1292
		{ 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
  1293
		{ 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
  1294
		{ 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
  1295
		{ 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
  1296
		{ 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
  1297
		{ 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
  1298
		{ 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
  1299
		{ 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
  1300
		{ 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
  1301
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1302
		/* 8168B family. */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1303
		{ 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
  1304
		{ 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
  1305
		{ 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
  1306
		{ 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
  1307
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1308
		/* 8101 family. */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1309
		{ 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
  1310
		{ 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
  1311
		{ 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
  1312
		{ 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
  1313
		{ 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
  1314
		{ 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
  1315
		{ 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
  1316
		{ 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
  1317
		{ 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
  1318
		{ 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
  1319
		{ 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
  1320
		{ 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
  1321
		/* 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
  1322
		{ 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
  1323
		{ 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
  1324
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1325
		/* 8110 family. */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1326
		{ 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
  1327
		{ 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
  1328
		{ 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
  1329
		{ 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
  1330
		{ 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
  1331
		{ 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
  1332
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1333
		/* Catch-all */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1334
		{ 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
  1335
	}, *p = mac_info;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1336
	u32 reg;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1337
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1338
	reg = RTL_R32(TxConfig);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1339
	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
  1340
		p++;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1341
	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
  1342
}
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
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
  1345
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1346
	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
  1347
}
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
struct phy_reg {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1350
	u16 reg;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1351
	u16 val;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1352
};
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
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
  1355
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1356
	while (len-- > 0) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1357
		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
  1358
		regs++;
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
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1361
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1362
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
  1363
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1364
	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
  1365
		{ 0x1f, 0x0001 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1366
		{ 0x06, 0x006e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1367
		{ 0x08, 0x0708 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1368
		{ 0x15, 0x4000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1369
		{ 0x18, 0x65c7 },
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
		{ 0x1f, 0x0001 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1372
		{ 0x03, 0x00a1 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1373
		{ 0x02, 0x0008 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1374
		{ 0x01, 0x0120 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1375
		{ 0x00, 0x1000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1376
		{ 0x04, 0x0800 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1377
		{ 0x04, 0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1378
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1379
		{ 0x03, 0xff41 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1380
		{ 0x02, 0xdf60 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1381
		{ 0x01, 0x0140 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1382
		{ 0x00, 0x0077 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1383
		{ 0x04, 0x7800 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1384
		{ 0x04, 0x7000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1385
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1386
		{ 0x03, 0x802f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1387
		{ 0x02, 0x4f02 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1388
		{ 0x01, 0x0409 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1389
		{ 0x00, 0xf0f9 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1390
		{ 0x04, 0x9800 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1391
		{ 0x04, 0x9000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1392
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1393
		{ 0x03, 0xdf01 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1394
		{ 0x02, 0xdf20 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1395
		{ 0x01, 0xff95 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1396
		{ 0x00, 0xba00 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1397
		{ 0x04, 0xa800 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1398
		{ 0x04, 0xa000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1399
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1400
		{ 0x03, 0xff41 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1401
		{ 0x02, 0xdf20 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1402
		{ 0x01, 0x0140 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1403
		{ 0x00, 0x00bb },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1404
		{ 0x04, 0xb800 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1405
		{ 0x04, 0xb000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1406
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1407
		{ 0x03, 0xdf41 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1408
		{ 0x02, 0xdc60 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1409
		{ 0x01, 0x6340 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1410
		{ 0x00, 0x007d },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1411
		{ 0x04, 0xd800 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1412
		{ 0x04, 0xd000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1413
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1414
		{ 0x03, 0xdf01 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1415
		{ 0x02, 0xdf20 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1416
		{ 0x01, 0x100a },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1417
		{ 0x00, 0xa0ff },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1418
		{ 0x04, 0xf800 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1419
		{ 0x04, 0xf000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1420
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1421
		{ 0x1f, 0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1422
		{ 0x0b, 0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1423
		{ 0x00, 0x9200 }
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
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1426
	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
  1427
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1428
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1429
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
  1430
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1431
	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
  1432
		{ 0x1f, 0x0002 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1433
		{ 0x01, 0x90d0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1434
		{ 0x1f, 0x0000 }
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 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
  1441
					   void __iomem *ioaddr)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1442
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1443
	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
  1444
	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
  1445
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1446
	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
  1447
	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
  1448
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1449
	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
  1450
		return;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1451
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1452
	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
  1453
	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
  1454
	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
  1455
}
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
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
  1458
				     void __iomem *ioaddr)
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
	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
  1461
		{ 0x1f, 0x0001 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1462
		{ 0x04, 0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1463
		{ 0x03, 0x00a1 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1464
		{ 0x02, 0x0008 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1465
		{ 0x01, 0x0120 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1466
		{ 0x00, 0x1000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1467
		{ 0x04, 0x0800 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1468
		{ 0x04, 0x9000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1469
		{ 0x03, 0x802f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1470
		{ 0x02, 0x4f02 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1471
		{ 0x01, 0x0409 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1472
		{ 0x00, 0xf099 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1473
		{ 0x04, 0x9800 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1474
		{ 0x04, 0xa000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1475
		{ 0x03, 0xdf01 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1476
		{ 0x02, 0xdf20 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1477
		{ 0x01, 0xff95 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1478
		{ 0x00, 0xba00 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1479
		{ 0x04, 0xa800 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1480
		{ 0x04, 0xf000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1481
		{ 0x03, 0xdf01 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1482
		{ 0x02, 0xdf20 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1483
		{ 0x01, 0x101a },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1484
		{ 0x00, 0xa0ff },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1485
		{ 0x04, 0xf800 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1486
		{ 0x04, 0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1487
		{ 0x1f, 0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1488
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1489
		{ 0x1f, 0x0001 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1490
		{ 0x10, 0xf41b },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1491
		{ 0x14, 0xfb54 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1492
		{ 0x18, 0xf5c7 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1493
		{ 0x1f, 0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1494
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1495
		{ 0x1f, 0x0001 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1496
		{ 0x17, 0x0cc0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1497
		{ 0x1f, 0x0000 }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1498
	};
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
	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
  1501
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1502
	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
  1503
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1504
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1505
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
  1506
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1507
	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
  1508
		{ 0x1f, 0x0001 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1509
		{ 0x04, 0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1510
		{ 0x03, 0x00a1 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1511
		{ 0x02, 0x0008 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1512
		{ 0x01, 0x0120 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1513
		{ 0x00, 0x1000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1514
		{ 0x04, 0x0800 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1515
		{ 0x04, 0x9000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1516
		{ 0x03, 0x802f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1517
		{ 0x02, 0x4f02 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1518
		{ 0x01, 0x0409 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1519
		{ 0x00, 0xf099 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1520
		{ 0x04, 0x9800 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1521
		{ 0x04, 0xa000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1522
		{ 0x03, 0xdf01 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1523
		{ 0x02, 0xdf20 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1524
		{ 0x01, 0xff95 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1525
		{ 0x00, 0xba00 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1526
		{ 0x04, 0xa800 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1527
		{ 0x04, 0xf000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1528
		{ 0x03, 0xdf01 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1529
		{ 0x02, 0xdf20 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1530
		{ 0x01, 0x101a },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1531
		{ 0x00, 0xa0ff },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1532
		{ 0x04, 0xf800 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1533
		{ 0x04, 0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1534
		{ 0x1f, 0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1535
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1536
		{ 0x1f, 0x0001 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1537
		{ 0x0b, 0x8480 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1538
		{ 0x1f, 0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1539
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1540
		{ 0x1f, 0x0001 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1541
		{ 0x18, 0x67c7 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1542
		{ 0x04, 0x2000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1543
		{ 0x03, 0x002f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1544
		{ 0x02, 0x4360 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1545
		{ 0x01, 0x0109 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1546
		{ 0x00, 0x3022 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1547
		{ 0x04, 0x2800 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1548
		{ 0x1f, 0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1549
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1550
		{ 0x1f, 0x0001 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1551
		{ 0x17, 0x0cc0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1552
		{ 0x1f, 0x0000 }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1553
	};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1554
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1555
	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
  1556
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1557
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1558
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
  1559
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1560
	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
  1561
		{ 0x10, 0xf41b },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1562
		{ 0x1f, 0x0000 }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1563
	};
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
	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
  1566
	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
  1567
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1568
	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
  1569
}
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
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
  1572
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1573
	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
  1574
		{ 0x1f, 0x0001 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1575
		{ 0x10, 0xf41b },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1576
		{ 0x1f, 0x0000 }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1577
	};
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 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
  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, 0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1586
		{ 0x1d, 0x0f00 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1587
		{ 0x1f, 0x0002 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1588
		{ 0x0c, 0x1ec8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1589
		{ 0x1f, 0x0000 }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1590
	};
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
	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
  1593
}
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
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
  1596
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1597
	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
  1598
		{ 0x1f, 0x0001 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1599
		{ 0x1d, 0x3d98 },
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
	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
  1604
	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
  1605
	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
  1606
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1607
	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
  1608
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1609
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1610
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
  1611
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1612
	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
  1613
		{ 0x1f, 0x0001 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1614
		{ 0x12, 0x2300 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1615
		{ 0x1f, 0x0002 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1616
		{ 0x00, 0x88d4 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1617
		{ 0x01, 0x82b1 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1618
		{ 0x03, 0x7002 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1619
		{ 0x08, 0x9e30 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1620
		{ 0x09, 0x01f0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1621
		{ 0x0a, 0x5500 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1622
		{ 0x0c, 0x00c8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1623
		{ 0x1f, 0x0003 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1624
		{ 0x12, 0xc096 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1625
		{ 0x16, 0x000a },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1626
		{ 0x1f, 0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1627
		{ 0x1f, 0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1628
		{ 0x09, 0x2000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1629
		{ 0x09, 0x0000 }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1630
	};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1631
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1632
	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
  1633
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1634
	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
  1635
	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
  1636
	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
  1637
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1638
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1639
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
  1640
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1641
	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
  1642
		{ 0x1f, 0x0001 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1643
		{ 0x12, 0x2300 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1644
		{ 0x03, 0x802f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1645
		{ 0x02, 0x4f02 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1646
		{ 0x01, 0x0409 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1647
		{ 0x00, 0xf099 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1648
		{ 0x04, 0x9800 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1649
		{ 0x04, 0x9000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1650
		{ 0x1d, 0x3d98 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1651
		{ 0x1f, 0x0002 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1652
		{ 0x0c, 0x7eb8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1653
		{ 0x06, 0x0761 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1654
		{ 0x1f, 0x0003 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1655
		{ 0x16, 0x0f0a },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1656
		{ 0x1f, 0x0000 }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1657
	};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1658
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1659
	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
  1660
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1661
	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
  1662
	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
  1663
	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
  1664
	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
  1665
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1666
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1667
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
  1668
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1669
	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
  1670
		{ 0x1f, 0x0001 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1671
		{ 0x12, 0x2300 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1672
		{ 0x1d, 0x3d98 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1673
		{ 0x1f, 0x0002 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1674
		{ 0x0c, 0x7eb8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1675
		{ 0x06, 0x5461 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1676
		{ 0x1f, 0x0003 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1677
		{ 0x16, 0x0f0a },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1678
		{ 0x1f, 0x0000 }
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
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1681
	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
  1682
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1683
	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
  1684
	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
  1685
	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
  1686
	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
  1687
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1688
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1689
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
  1690
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1691
	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
  1692
}
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
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
  1695
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1696
	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
  1697
		{ 0x1f, 0x0001 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1698
		{ 0x06, 0x4064 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1699
		{ 0x07, 0x2863 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1700
		{ 0x08, 0x059c },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1701
		{ 0x09, 0x26b4 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1702
		{ 0x0a, 0x6a19 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1703
		{ 0x0b, 0xdcc8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1704
		{ 0x10, 0xf06d },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1705
		{ 0x14, 0x7f68 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1706
		{ 0x18, 0x7fd9 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1707
		{ 0x1c, 0xf0ff },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1708
		{ 0x1d, 0x3d9c },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1709
		{ 0x1f, 0x0003 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1710
		{ 0x12, 0xf49f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1711
		{ 0x13, 0x070b },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1712
		{ 0x1a, 0x05ad },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1713
		{ 0x14, 0x94c0 }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1714
	};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1715
	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
  1716
		{ 0x1f, 0x0002 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1717
		{ 0x06, 0x5561 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1718
		{ 0x1f, 0x0005 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1719
		{ 0x05, 0x8332 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1720
		{ 0x06, 0x5561 }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1721
	};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1722
	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
  1723
		{ 0x1f, 0x0005 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1724
		{ 0x05, 0xffc2 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1725
		{ 0x1f, 0x0005 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1726
		{ 0x05, 0x8000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1727
		{ 0x06, 0xf8f9 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1728
		{ 0x06, 0xfaef },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1729
		{ 0x06, 0x59ee },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1730
		{ 0x06, 0xf8ea },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1731
		{ 0x06, 0x00ee },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1732
		{ 0x06, 0xf8eb },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1733
		{ 0x06, 0x00e0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1734
		{ 0x06, 0xf87c },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1735
		{ 0x06, 0xe1f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1736
		{ 0x06, 0x7d59 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1737
		{ 0x06, 0x0fef },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1738
		{ 0x06, 0x0139 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1739
		{ 0x06, 0x029e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1740
		{ 0x06, 0x06ef },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1741
		{ 0x06, 0x1039 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1742
		{ 0x06, 0x089f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1743
		{ 0x06, 0x2aee },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1744
		{ 0x06, 0xf8ea },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1745
		{ 0x06, 0x00ee },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1746
		{ 0x06, 0xf8eb },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1747
		{ 0x06, 0x01e0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1748
		{ 0x06, 0xf87c },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1749
		{ 0x06, 0xe1f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1750
		{ 0x06, 0x7d58 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1751
		{ 0x06, 0x409e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1752
		{ 0x06, 0x0f39 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1753
		{ 0x06, 0x46aa },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1754
		{ 0x06, 0x0bbf },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1755
		{ 0x06, 0x8290 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1756
		{ 0x06, 0xd682 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1757
		{ 0x06, 0x9802 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1758
		{ 0x06, 0x014f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1759
		{ 0x06, 0xae09 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1760
		{ 0x06, 0xbf82 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1761
		{ 0x06, 0x98d6 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1762
		{ 0x06, 0x82a0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1763
		{ 0x06, 0x0201 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1764
		{ 0x06, 0x4fef },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1765
		{ 0x06, 0x95fe },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1766
		{ 0x06, 0xfdfc },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1767
		{ 0x06, 0x05f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1768
		{ 0x06, 0xf9fa },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1769
		{ 0x06, 0xeef8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1770
		{ 0x06, 0xea00 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1771
		{ 0x06, 0xeef8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1772
		{ 0x06, 0xeb00 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1773
		{ 0x06, 0xe2f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1774
		{ 0x06, 0x7ce3 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1775
		{ 0x06, 0xf87d },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1776
		{ 0x06, 0xa511 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1777
		{ 0x06, 0x1112 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1778
		{ 0x06, 0xd240 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1779
		{ 0x06, 0xd644 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1780
		{ 0x06, 0x4402 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1781
		{ 0x06, 0x8217 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1782
		{ 0x06, 0xd2a0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1783
		{ 0x06, 0xd6aa },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1784
		{ 0x06, 0xaa02 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1785
		{ 0x06, 0x8217 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1786
		{ 0x06, 0xae0f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1787
		{ 0x06, 0xa544 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1788
		{ 0x06, 0x4402 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1789
		{ 0x06, 0xae4d },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1790
		{ 0x06, 0xa5aa },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1791
		{ 0x06, 0xaa02 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1792
		{ 0x06, 0xae47 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1793
		{ 0x06, 0xaf82 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1794
		{ 0x06, 0x13ee },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1795
		{ 0x06, 0x834e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1796
		{ 0x06, 0x00ee },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1797
		{ 0x06, 0x834d },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1798
		{ 0x06, 0x0fee },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1799
		{ 0x06, 0x834c },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1800
		{ 0x06, 0x0fee },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1801
		{ 0x06, 0x834f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1802
		{ 0x06, 0x00ee },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1803
		{ 0x06, 0x8351 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1804
		{ 0x06, 0x00ee },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1805
		{ 0x06, 0x834a },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1806
		{ 0x06, 0xffee },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1807
		{ 0x06, 0x834b },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1808
		{ 0x06, 0xffe0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1809
		{ 0x06, 0x8330 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1810
		{ 0x06, 0xe183 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1811
		{ 0x06, 0x3158 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1812
		{ 0x06, 0xfee4 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1813
		{ 0x06, 0xf88a },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1814
		{ 0x06, 0xe5f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1815
		{ 0x06, 0x8be0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1816
		{ 0x06, 0x8332 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1817
		{ 0x06, 0xe183 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1818
		{ 0x06, 0x3359 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1819
		{ 0x06, 0x0fe2 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1820
		{ 0x06, 0x834d },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1821
		{ 0x06, 0x0c24 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1822
		{ 0x06, 0x5af0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1823
		{ 0x06, 0x1e12 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1824
		{ 0x06, 0xe4f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1825
		{ 0x06, 0x8ce5 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1826
		{ 0x06, 0xf88d },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1827
		{ 0x06, 0xaf82 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1828
		{ 0x06, 0x13e0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1829
		{ 0x06, 0x834f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1830
		{ 0x06, 0x10e4 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1831
		{ 0x06, 0x834f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1832
		{ 0x06, 0xe083 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1833
		{ 0x06, 0x4e78 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1834
		{ 0x06, 0x009f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1835
		{ 0x06, 0x0ae0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1836
		{ 0x06, 0x834f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1837
		{ 0x06, 0xa010 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1838
		{ 0x06, 0xa5ee },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1839
		{ 0x06, 0x834e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1840
		{ 0x06, 0x01e0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1841
		{ 0x06, 0x834e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1842
		{ 0x06, 0x7805 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1843
		{ 0x06, 0x9e9a },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1844
		{ 0x06, 0xe083 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1845
		{ 0x06, 0x4e78 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1846
		{ 0x06, 0x049e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1847
		{ 0x06, 0x10e0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1848
		{ 0x06, 0x834e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1849
		{ 0x06, 0x7803 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1850
		{ 0x06, 0x9e0f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1851
		{ 0x06, 0xe083 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1852
		{ 0x06, 0x4e78 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1853
		{ 0x06, 0x019e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1854
		{ 0x06, 0x05ae },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1855
		{ 0x06, 0x0caf },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1856
		{ 0x06, 0x81f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1857
		{ 0x06, 0xaf81 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1858
		{ 0x06, 0xa3af },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1859
		{ 0x06, 0x81dc },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1860
		{ 0x06, 0xaf82 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1861
		{ 0x06, 0x13ee },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1862
		{ 0x06, 0x8348 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1863
		{ 0x06, 0x00ee },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1864
		{ 0x06, 0x8349 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1865
		{ 0x06, 0x00e0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1866
		{ 0x06, 0x8351 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1867
		{ 0x06, 0x10e4 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1868
		{ 0x06, 0x8351 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1869
		{ 0x06, 0x5801 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1870
		{ 0x06, 0x9fea },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1871
		{ 0x06, 0xd000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1872
		{ 0x06, 0xd180 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1873
		{ 0x06, 0x1f66 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1874
		{ 0x06, 0xe2f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1875
		{ 0x06, 0xeae3 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1876
		{ 0x06, 0xf8eb },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1877
		{ 0x06, 0x5af8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1878
		{ 0x06, 0x1e20 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1879
		{ 0x06, 0xe6f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1880
		{ 0x06, 0xeae5 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1881
		{ 0x06, 0xf8eb },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1882
		{ 0x06, 0xd302 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1883
		{ 0x06, 0xb3fe },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1884
		{ 0x06, 0xe2f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1885
		{ 0x06, 0x7cef },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1886
		{ 0x06, 0x325b },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1887
		{ 0x06, 0x80e3 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1888
		{ 0x06, 0xf87d },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1889
		{ 0x06, 0x9e03 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1890
		{ 0x06, 0x7dff },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1891
		{ 0x06, 0xff0d },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1892
		{ 0x06, 0x581c },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1893
		{ 0x06, 0x551a },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1894
		{ 0x06, 0x6511 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1895
		{ 0x06, 0xa190 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1896
		{ 0x06, 0xd3e2 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1897
		{ 0x06, 0x8348 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1898
		{ 0x06, 0xe383 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1899
		{ 0x06, 0x491b },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1900
		{ 0x06, 0x56ab },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1901
		{ 0x06, 0x08ef },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1902
		{ 0x06, 0x56e6 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1903
		{ 0x06, 0x8348 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1904
		{ 0x06, 0xe783 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1905
		{ 0x06, 0x4910 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1906
		{ 0x06, 0xd180 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1907
		{ 0x06, 0x1f66 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1908
		{ 0x06, 0xa004 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1909
		{ 0x06, 0xb9e2 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1910
		{ 0x06, 0x8348 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1911
		{ 0x06, 0xe383 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1912
		{ 0x06, 0x49ef },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1913
		{ 0x06, 0x65e2 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1914
		{ 0x06, 0x834a },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1915
		{ 0x06, 0xe383 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1916
		{ 0x06, 0x4b1b },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1917
		{ 0x06, 0x56aa },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1918
		{ 0x06, 0x0eef },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1919
		{ 0x06, 0x56e6 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1920
		{ 0x06, 0x834a },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1921
		{ 0x06, 0xe783 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1922
		{ 0x06, 0x4be2 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1923
		{ 0x06, 0x834d },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1924
		{ 0x06, 0xe683 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1925
		{ 0x06, 0x4ce0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1926
		{ 0x06, 0x834d },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1927
		{ 0x06, 0xa000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1928
		{ 0x06, 0x0caf },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1929
		{ 0x06, 0x81dc },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1930
		{ 0x06, 0xe083 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1931
		{ 0x06, 0x4d10 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1932
		{ 0x06, 0xe483 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1933
		{ 0x06, 0x4dae },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1934
		{ 0x06, 0x0480 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1935
		{ 0x06, 0xe483 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1936
		{ 0x06, 0x4de0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1937
		{ 0x06, 0x834e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1938
		{ 0x06, 0x7803 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1939
		{ 0x06, 0x9e0b },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1940
		{ 0x06, 0xe083 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1941
		{ 0x06, 0x4e78 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1942
		{ 0x06, 0x049e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1943
		{ 0x06, 0x04ee },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1944
		{ 0x06, 0x834e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1945
		{ 0x06, 0x02e0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1946
		{ 0x06, 0x8332 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1947
		{ 0x06, 0xe183 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1948
		{ 0x06, 0x3359 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1949
		{ 0x06, 0x0fe2 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1950
		{ 0x06, 0x834d },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1951
		{ 0x06, 0x0c24 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1952
		{ 0x06, 0x5af0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1953
		{ 0x06, 0x1e12 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1954
		{ 0x06, 0xe4f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1955
		{ 0x06, 0x8ce5 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1956
		{ 0x06, 0xf88d },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1957
		{ 0x06, 0xe083 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1958
		{ 0x06, 0x30e1 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1959
		{ 0x06, 0x8331 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1960
		{ 0x06, 0x6801 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1961
		{ 0x06, 0xe4f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1962
		{ 0x06, 0x8ae5 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1963
		{ 0x06, 0xf88b },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1964
		{ 0x06, 0xae37 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1965
		{ 0x06, 0xee83 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1966
		{ 0x06, 0x4e03 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1967
		{ 0x06, 0xe083 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1968
		{ 0x06, 0x4ce1 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1969
		{ 0x06, 0x834d },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1970
		{ 0x06, 0x1b01 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1971
		{ 0x06, 0x9e04 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1972
		{ 0x06, 0xaaa1 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1973
		{ 0x06, 0xaea8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1974
		{ 0x06, 0xee83 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1975
		{ 0x06, 0x4e04 },
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, 0x4f00 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1978
		{ 0x06, 0xaeab },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1979
		{ 0x06, 0xe083 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1980
		{ 0x06, 0x4f78 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1981
		{ 0x06, 0x039f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1982
		{ 0x06, 0x14ee },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1983
		{ 0x06, 0x834e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1984
		{ 0x06, 0x05d2 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1985
		{ 0x06, 0x40d6 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1986
		{ 0x06, 0x5554 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1987
		{ 0x06, 0x0282 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1988
		{ 0x06, 0x17d2 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1989
		{ 0x06, 0xa0d6 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1990
		{ 0x06, 0xba00 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1991
		{ 0x06, 0x0282 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1992
		{ 0x06, 0x17fe },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1993
		{ 0x06, 0xfdfc },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1994
		{ 0x06, 0x05f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1995
		{ 0x06, 0xe0f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1996
		{ 0x06, 0x60e1 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1997
		{ 0x06, 0xf861 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1998
		{ 0x06, 0x6802 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1999
		{ 0x06, 0xe4f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2000
		{ 0x06, 0x60e5 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2001
		{ 0x06, 0xf861 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2002
		{ 0x06, 0xe0f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2003
		{ 0x06, 0x48e1 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2004
		{ 0x06, 0xf849 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2005
		{ 0x06, 0x580f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2006
		{ 0x06, 0x1e02 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2007
		{ 0x06, 0xe4f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2008
		{ 0x06, 0x48e5 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2009
		{ 0x06, 0xf849 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2010
		{ 0x06, 0xd000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2011
		{ 0x06, 0x0282 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2012
		{ 0x06, 0x5bbf },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2013
		{ 0x06, 0x8350 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2014
		{ 0x06, 0xef46 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2015
		{ 0x06, 0xdc19 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2016
		{ 0x06, 0xddd0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2017
		{ 0x06, 0x0102 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2018
		{ 0x06, 0x825b },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2019
		{ 0x06, 0x0282 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2020
		{ 0x06, 0x77e0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2021
		{ 0x06, 0xf860 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2022
		{ 0x06, 0xe1f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2023
		{ 0x06, 0x6158 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2024
		{ 0x06, 0xfde4 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2025
		{ 0x06, 0xf860 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2026
		{ 0x06, 0xe5f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2027
		{ 0x06, 0x61fc },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2028
		{ 0x06, 0x04f9 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2029
		{ 0x06, 0xfafb },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2030
		{ 0x06, 0xc6bf },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2031
		{ 0x06, 0xf840 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2032
		{ 0x06, 0xbe83 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2033
		{ 0x06, 0x50a0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2034
		{ 0x06, 0x0101 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2035
		{ 0x06, 0x071b },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2036
		{ 0x06, 0x89cf },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2037
		{ 0x06, 0xd208 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2038
		{ 0x06, 0xebdb },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2039
		{ 0x06, 0x19b2 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2040
		{ 0x06, 0xfbff },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2041
		{ 0x06, 0xfefd },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2042
		{ 0x06, 0x04f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2043
		{ 0x06, 0xe0f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2044
		{ 0x06, 0x48e1 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2045
		{ 0x06, 0xf849 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2046
		{ 0x06, 0x6808 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2047
		{ 0x06, 0xe4f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2048
		{ 0x06, 0x48e5 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2049
		{ 0x06, 0xf849 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2050
		{ 0x06, 0x58f7 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2051
		{ 0x06, 0xe4f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2052
		{ 0x06, 0x48e5 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2053
		{ 0x06, 0xf849 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2054
		{ 0x06, 0xfc04 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2055
		{ 0x06, 0x4d20 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2056
		{ 0x06, 0x0002 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2057
		{ 0x06, 0x4e22 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2058
		{ 0x06, 0x0002 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2059
		{ 0x06, 0x4ddf },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2060
		{ 0x06, 0xff01 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2061
		{ 0x06, 0x4edd },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2062
		{ 0x06, 0xff01 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2063
		{ 0x05, 0x83d4 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2064
		{ 0x06, 0x8000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2065
		{ 0x05, 0x83d8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2066
		{ 0x06, 0x8051 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2067
		{ 0x02, 0x6010 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2068
		{ 0x03, 0xdc00 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2069
		{ 0x05, 0xfff6 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2070
		{ 0x06, 0x00fc },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2071
		{ 0x1f, 0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2072
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2073
		{ 0x1f, 0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2074
		{ 0x0d, 0xf880 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2075
		{ 0x1f, 0x0000 }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2076
	};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2077
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2078
	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
  2079
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2080
	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
  2081
	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
  2082
	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
  2083
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2084
	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
  2085
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2086
	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
  2087
		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
  2088
			{ 0x1f, 0x0002 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2089
			{ 0x05, 0x669a },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2090
			{ 0x1f, 0x0005 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2091
			{ 0x05, 0x8330 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2092
			{ 0x06, 0x669a },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2093
			{ 0x1f, 0x0002 }
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
		int val;
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
		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
  2098
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2099
		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
  2100
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2101
		if ((val & 0x00ff) != 0x006c) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2102
			u32 set[] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2103
				0x0065, 0x0066, 0x0067, 0x0068,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2104
				0x0069, 0x006a, 0x006b, 0x006c
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 i;
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
			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
  2109
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2110
			val &= 0xff00;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2111
			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
  2112
				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
  2113
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2114
	} else {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2115
		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
  2116
			{ 0x1f, 0x0002 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2117
			{ 0x05, 0x6662 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2118
			{ 0x1f, 0x0005 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2119
			{ 0x05, 0x8330 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2120
			{ 0x06, 0x6662 }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2121
		};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2122
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2123
		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
  2124
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2125
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2126
	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
  2127
	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
  2128
	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
  2129
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2130
	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
  2131
	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
  2132
	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
  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_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
  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
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
  2138
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2139
	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
  2140
		{ 0x1f, 0x0001 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2141
		{ 0x06, 0x4064 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2142
		{ 0x07, 0x2863 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2143
		{ 0x08, 0x059c },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2144
		{ 0x09, 0x26b4 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2145
		{ 0x0a, 0x6a19 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2146
		{ 0x0b, 0xdcc8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2147
		{ 0x10, 0xf06d },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2148
		{ 0x14, 0x7f68 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2149
		{ 0x18, 0x7fd9 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2150
		{ 0x1c, 0xf0ff },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2151
		{ 0x1d, 0x3d9c },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2152
		{ 0x1f, 0x0003 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2153
		{ 0x12, 0xf49f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2154
		{ 0x13, 0x070b },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2155
		{ 0x1a, 0x05ad },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2156
		{ 0x14, 0x94c0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2157
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2158
		{ 0x1f, 0x0002 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2159
		{ 0x06, 0x5561 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2160
		{ 0x1f, 0x0005 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2161
		{ 0x05, 0x8332 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2162
		{ 0x06, 0x5561 }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2163
	};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2164
	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
  2165
		{ 0x1f, 0x0005 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2166
		{ 0x05, 0xffc2 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2167
		{ 0x1f, 0x0005 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2168
		{ 0x05, 0x8000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2169
		{ 0x06, 0xf8f9 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2170
		{ 0x06, 0xfaee },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2171
		{ 0x06, 0xf8ea },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2172
		{ 0x06, 0x00ee },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2173
		{ 0x06, 0xf8eb },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2174
		{ 0x06, 0x00e2 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2175
		{ 0x06, 0xf87c },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2176
		{ 0x06, 0xe3f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2177
		{ 0x06, 0x7da5 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2178
		{ 0x06, 0x1111 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2179
		{ 0x06, 0x12d2 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2180
		{ 0x06, 0x40d6 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2181
		{ 0x06, 0x4444 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2182
		{ 0x06, 0x0281 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2183
		{ 0x06, 0xc6d2 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2184
		{ 0x06, 0xa0d6 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2185
		{ 0x06, 0xaaaa },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2186
		{ 0x06, 0x0281 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2187
		{ 0x06, 0xc6ae },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2188
		{ 0x06, 0x0fa5 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2189
		{ 0x06, 0x4444 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2190
		{ 0x06, 0x02ae },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2191
		{ 0x06, 0x4da5 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2192
		{ 0x06, 0xaaaa },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2193
		{ 0x06, 0x02ae },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2194
		{ 0x06, 0x47af },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2195
		{ 0x06, 0x81c2 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2196
		{ 0x06, 0xee83 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2197
		{ 0x06, 0x4e00 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2198
		{ 0x06, 0xee83 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2199
		{ 0x06, 0x4d0f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2200
		{ 0x06, 0xee83 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2201
		{ 0x06, 0x4c0f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2202
		{ 0x06, 0xee83 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2203
		{ 0x06, 0x4f00 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2204
		{ 0x06, 0xee83 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2205
		{ 0x06, 0x5100 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2206
		{ 0x06, 0xee83 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2207
		{ 0x06, 0x4aff },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2208
		{ 0x06, 0xee83 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2209
		{ 0x06, 0x4bff },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2210
		{ 0x06, 0xe083 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2211
		{ 0x06, 0x30e1 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2212
		{ 0x06, 0x8331 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2213
		{ 0x06, 0x58fe },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2214
		{ 0x06, 0xe4f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2215
		{ 0x06, 0x8ae5 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2216
		{ 0x06, 0xf88b },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2217
		{ 0x06, 0xe083 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2218
		{ 0x06, 0x32e1 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2219
		{ 0x06, 0x8333 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2220
		{ 0x06, 0x590f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2221
		{ 0x06, 0xe283 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2222
		{ 0x06, 0x4d0c },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2223
		{ 0x06, 0x245a },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2224
		{ 0x06, 0xf01e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2225
		{ 0x06, 0x12e4 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2226
		{ 0x06, 0xf88c },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2227
		{ 0x06, 0xe5f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2228
		{ 0x06, 0x8daf },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2229
		{ 0x06, 0x81c2 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2230
		{ 0x06, 0xe083 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2231
		{ 0x06, 0x4f10 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2232
		{ 0x06, 0xe483 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2233
		{ 0x06, 0x4fe0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2234
		{ 0x06, 0x834e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2235
		{ 0x06, 0x7800 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2236
		{ 0x06, 0x9f0a },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2237
		{ 0x06, 0xe083 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2238
		{ 0x06, 0x4fa0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2239
		{ 0x06, 0x10a5 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2240
		{ 0x06, 0xee83 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2241
		{ 0x06, 0x4e01 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2242
		{ 0x06, 0xe083 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2243
		{ 0x06, 0x4e78 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2244
		{ 0x06, 0x059e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2245
		{ 0x06, 0x9ae0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2246
		{ 0x06, 0x834e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2247
		{ 0x06, 0x7804 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2248
		{ 0x06, 0x9e10 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2249
		{ 0x06, 0xe083 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2250
		{ 0x06, 0x4e78 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2251
		{ 0x06, 0x039e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2252
		{ 0x06, 0x0fe0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2253
		{ 0x06, 0x834e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2254
		{ 0x06, 0x7801 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2255
		{ 0x06, 0x9e05 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2256
		{ 0x06, 0xae0c },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2257
		{ 0x06, 0xaf81 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2258
		{ 0x06, 0xa7af },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2259
		{ 0x06, 0x8152 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2260
		{ 0x06, 0xaf81 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2261
		{ 0x06, 0x8baf },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2262
		{ 0x06, 0x81c2 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2263
		{ 0x06, 0xee83 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2264
		{ 0x06, 0x4800 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2265
		{ 0x06, 0xee83 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2266
		{ 0x06, 0x4900 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2267
		{ 0x06, 0xe083 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2268
		{ 0x06, 0x5110 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2269
		{ 0x06, 0xe483 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2270
		{ 0x06, 0x5158 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2271
		{ 0x06, 0x019f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2272
		{ 0x06, 0xead0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2273
		{ 0x06, 0x00d1 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2274
		{ 0x06, 0x801f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2275
		{ 0x06, 0x66e2 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2276
		{ 0x06, 0xf8ea },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2277
		{ 0x06, 0xe3f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2278
		{ 0x06, 0xeb5a },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2279
		{ 0x06, 0xf81e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2280
		{ 0x06, 0x20e6 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2281
		{ 0x06, 0xf8ea },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2282
		{ 0x06, 0xe5f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2283
		{ 0x06, 0xebd3 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2284
		{ 0x06, 0x02b3 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2285
		{ 0x06, 0xfee2 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2286
		{ 0x06, 0xf87c },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2287
		{ 0x06, 0xef32 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2288
		{ 0x06, 0x5b80 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2289
		{ 0x06, 0xe3f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2290
		{ 0x06, 0x7d9e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2291
		{ 0x06, 0x037d },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2292
		{ 0x06, 0xffff },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2293
		{ 0x06, 0x0d58 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2294
		{ 0x06, 0x1c55 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2295
		{ 0x06, 0x1a65 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2296
		{ 0x06, 0x11a1 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2297
		{ 0x06, 0x90d3 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2298
		{ 0x06, 0xe283 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2299
		{ 0x06, 0x48e3 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2300
		{ 0x06, 0x8349 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2301
		{ 0x06, 0x1b56 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2302
		{ 0x06, 0xab08 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2303
		{ 0x06, 0xef56 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2304
		{ 0x06, 0xe683 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2305
		{ 0x06, 0x48e7 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2306
		{ 0x06, 0x8349 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2307
		{ 0x06, 0x10d1 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2308
		{ 0x06, 0x801f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2309
		{ 0x06, 0x66a0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2310
		{ 0x06, 0x04b9 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2311
		{ 0x06, 0xe283 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2312
		{ 0x06, 0x48e3 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2313
		{ 0x06, 0x8349 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2314
		{ 0x06, 0xef65 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2315
		{ 0x06, 0xe283 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2316
		{ 0x06, 0x4ae3 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2317
		{ 0x06, 0x834b },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2318
		{ 0x06, 0x1b56 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2319
		{ 0x06, 0xaa0e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2320
		{ 0x06, 0xef56 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2321
		{ 0x06, 0xe683 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2322
		{ 0x06, 0x4ae7 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2323
		{ 0x06, 0x834b },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2324
		{ 0x06, 0xe283 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2325
		{ 0x06, 0x4de6 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2326
		{ 0x06, 0x834c },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2327
		{ 0x06, 0xe083 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2328
		{ 0x06, 0x4da0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2329
		{ 0x06, 0x000c },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2330
		{ 0x06, 0xaf81 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2331
		{ 0x06, 0x8be0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2332
		{ 0x06, 0x834d },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2333
		{ 0x06, 0x10e4 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2334
		{ 0x06, 0x834d },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2335
		{ 0x06, 0xae04 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2336
		{ 0x06, 0x80e4 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2337
		{ 0x06, 0x834d },
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, 0x4e78 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2340
		{ 0x06, 0x039e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2341
		{ 0x06, 0x0be0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2342
		{ 0x06, 0x834e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2343
		{ 0x06, 0x7804 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2344
		{ 0x06, 0x9e04 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2345
		{ 0x06, 0xee83 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2346
		{ 0x06, 0x4e02 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2347
		{ 0x06, 0xe083 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2348
		{ 0x06, 0x32e1 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2349
		{ 0x06, 0x8333 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2350
		{ 0x06, 0x590f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2351
		{ 0x06, 0xe283 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2352
		{ 0x06, 0x4d0c },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2353
		{ 0x06, 0x245a },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2354
		{ 0x06, 0xf01e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2355
		{ 0x06, 0x12e4 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2356
		{ 0x06, 0xf88c },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2357
		{ 0x06, 0xe5f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2358
		{ 0x06, 0x8de0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2359
		{ 0x06, 0x8330 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2360
		{ 0x06, 0xe183 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2361
		{ 0x06, 0x3168 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2362
		{ 0x06, 0x01e4 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2363
		{ 0x06, 0xf88a },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2364
		{ 0x06, 0xe5f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2365
		{ 0x06, 0x8bae },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2366
		{ 0x06, 0x37ee },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2367
		{ 0x06, 0x834e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2368
		{ 0x06, 0x03e0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2369
		{ 0x06, 0x834c },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2370
		{ 0x06, 0xe183 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2371
		{ 0x06, 0x4d1b },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2372
		{ 0x06, 0x019e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2373
		{ 0x06, 0x04aa },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2374
		{ 0x06, 0xa1ae },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2375
		{ 0x06, 0xa8ee },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2376
		{ 0x06, 0x834e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2377
		{ 0x06, 0x04ee },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2378
		{ 0x06, 0x834f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2379
		{ 0x06, 0x00ae },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2380
		{ 0x06, 0xabe0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2381
		{ 0x06, 0x834f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2382
		{ 0x06, 0x7803 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2383
		{ 0x06, 0x9f14 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2384
		{ 0x06, 0xee83 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2385
		{ 0x06, 0x4e05 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2386
		{ 0x06, 0xd240 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2387
		{ 0x06, 0xd655 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2388
		{ 0x06, 0x5402 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2389
		{ 0x06, 0x81c6 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2390
		{ 0x06, 0xd2a0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2391
		{ 0x06, 0xd6ba },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2392
		{ 0x06, 0x0002 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2393
		{ 0x06, 0x81c6 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2394
		{ 0x06, 0xfefd },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2395
		{ 0x06, 0xfc05 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2396
		{ 0x06, 0xf8e0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2397
		{ 0x06, 0xf860 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2398
		{ 0x06, 0xe1f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2399
		{ 0x06, 0x6168 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2400
		{ 0x06, 0x02e4 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2401
		{ 0x06, 0xf860 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2402
		{ 0x06, 0xe5f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2403
		{ 0x06, 0x61e0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2404
		{ 0x06, 0xf848 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2405
		{ 0x06, 0xe1f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2406
		{ 0x06, 0x4958 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2407
		{ 0x06, 0x0f1e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2408
		{ 0x06, 0x02e4 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2409
		{ 0x06, 0xf848 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2410
		{ 0x06, 0xe5f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2411
		{ 0x06, 0x49d0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2412
		{ 0x06, 0x0002 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2413
		{ 0x06, 0x820a },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2414
		{ 0x06, 0xbf83 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2415
		{ 0x06, 0x50ef },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2416
		{ 0x06, 0x46dc },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2417
		{ 0x06, 0x19dd },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2418
		{ 0x06, 0xd001 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2419
		{ 0x06, 0x0282 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2420
		{ 0x06, 0x0a02 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2421
		{ 0x06, 0x8226 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2422
		{ 0x06, 0xe0f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2423
		{ 0x06, 0x60e1 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2424
		{ 0x06, 0xf861 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2425
		{ 0x06, 0x58fd },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2426
		{ 0x06, 0xe4f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2427
		{ 0x06, 0x60e5 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2428
		{ 0x06, 0xf861 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2429
		{ 0x06, 0xfc04 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2430
		{ 0x06, 0xf9fa },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2431
		{ 0x06, 0xfbc6 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2432
		{ 0x06, 0xbff8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2433
		{ 0x06, 0x40be },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2434
		{ 0x06, 0x8350 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2435
		{ 0x06, 0xa001 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2436
		{ 0x06, 0x0107 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2437
		{ 0x06, 0x1b89 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2438
		{ 0x06, 0xcfd2 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2439
		{ 0x06, 0x08eb },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2440
		{ 0x06, 0xdb19 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2441
		{ 0x06, 0xb2fb },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2442
		{ 0x06, 0xfffe },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2443
		{ 0x06, 0xfd04 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2444
		{ 0x06, 0xf8e0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2445
		{ 0x06, 0xf848 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2446
		{ 0x06, 0xe1f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2447
		{ 0x06, 0x4968 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2448
		{ 0x06, 0x08e4 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2449
		{ 0x06, 0xf848 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2450
		{ 0x06, 0xe5f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2451
		{ 0x06, 0x4958 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2452
		{ 0x06, 0xf7e4 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2453
		{ 0x06, 0xf848 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2454
		{ 0x06, 0xe5f8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2455
		{ 0x06, 0x49fc },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2456
		{ 0x06, 0x044d },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2457
		{ 0x06, 0x2000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2458
		{ 0x06, 0x024e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2459
		{ 0x06, 0x2200 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2460
		{ 0x06, 0x024d },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2461
		{ 0x06, 0xdfff },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2462
		{ 0x06, 0x014e },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2463
		{ 0x06, 0xddff },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2464
		{ 0x06, 0x0100 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2465
		{ 0x05, 0x83d8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2466
		{ 0x06, 0x8000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2467
		{ 0x03, 0xdc00 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2468
		{ 0x05, 0xfff6 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2469
		{ 0x06, 0x00fc },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2470
		{ 0x1f, 0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2471
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2472
		{ 0x1f, 0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2473
		{ 0x0d, 0xf880 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2474
		{ 0x1f, 0x0000 }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2475
	};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2476
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2477
	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
  2478
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2479
	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
  2480
		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
  2481
			{ 0x1f, 0x0002 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2482
			{ 0x05, 0x669a },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2483
			{ 0x1f, 0x0005 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2484
			{ 0x05, 0x8330 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2485
			{ 0x06, 0x669a },
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
			{ 0x1f, 0x0002 }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2488
		};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2489
		int val;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2490
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2491
		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
  2492
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2493
		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
  2494
		if ((val & 0x00ff) != 0x006c) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2495
			u32 set[] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2496
				0x0065, 0x0066, 0x0067, 0x0068,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2497
				0x0069, 0x006a, 0x006b, 0x006c
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2498
			};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2499
			int i;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2500
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2501
			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
  2502
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2503
			val &= 0xff00;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2504
			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
  2505
				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
  2506
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2507
	} else {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2508
		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
  2509
			{ 0x1f, 0x0002 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2510
			{ 0x05, 0x2642 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2511
			{ 0x1f, 0x0005 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2512
			{ 0x05, 0x8330 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2513
			{ 0x06, 0x2642 }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2514
		};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2515
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2516
		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
  2517
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2518
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2519
	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
  2520
	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
  2521
	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
  2522
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2523
	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
  2524
	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
  2525
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2526
	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
  2527
	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
  2528
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2529
	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
  2530
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2531
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2532
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
  2533
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2534
	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
  2535
		{ 0x1f, 0x0002 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2536
		{ 0x10, 0x0008 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2537
		{ 0x0d, 0x006c },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2538
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2539
		{ 0x1f, 0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2540
		{ 0x0d, 0xf880 },
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
		{ 0x1f, 0x0001 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2543
		{ 0x17, 0x0cc0 },
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
		{ 0x1f, 0x0001 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2546
		{ 0x0b, 0xa4d8 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2547
		{ 0x09, 0x281c },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2548
		{ 0x07, 0x2883 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2549
		{ 0x0a, 0x6b35 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2550
		{ 0x1d, 0x3da4 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2551
		{ 0x1c, 0xeffd },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2552
		{ 0x14, 0x7f52 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2553
		{ 0x18, 0x7fc6 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2554
		{ 0x08, 0x0601 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2555
		{ 0x06, 0x4063 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2556
		{ 0x10, 0xf074 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2557
		{ 0x1f, 0x0003 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2558
		{ 0x13, 0x0789 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2559
		{ 0x12, 0xf4bd },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2560
		{ 0x1a, 0x04fd },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2561
		{ 0x14, 0x84b0 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2562
		{ 0x1f, 0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2563
		{ 0x00, 0x9200 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2564
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2565
		{ 0x1f, 0x0005 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2566
		{ 0x01, 0x0340 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2567
		{ 0x1f, 0x0001 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2568
		{ 0x04, 0x4000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2569
		{ 0x03, 0x1d21 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2570
		{ 0x02, 0x0c32 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2571
		{ 0x01, 0x0200 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2572
		{ 0x00, 0x5554 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2573
		{ 0x04, 0x4800 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2574
		{ 0x04, 0x4000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2575
		{ 0x04, 0xf000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2576
		{ 0x03, 0xdf01 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2577
		{ 0x02, 0xdf20 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2578
		{ 0x01, 0x101a },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2579
		{ 0x00, 0xa0ff },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2580
		{ 0x04, 0xf800 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2581
		{ 0x04, 0xf000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2582
		{ 0x1f, 0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2583
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2584
		{ 0x1f, 0x0007 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2585
		{ 0x1e, 0x0023 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2586
		{ 0x16, 0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2587
		{ 0x1f, 0x0000 }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2588
	};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2589
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2590
	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
  2591
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2592
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2593
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
  2594
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2595
	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
  2596
		{ 0x1f, 0x0003 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2597
		{ 0x08, 0x441d },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2598
		{ 0x01, 0x9100 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2599
		{ 0x1f, 0x0000 }
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
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2602
	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
  2603
	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
  2604
	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
  2605
	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
  2606
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2607
	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
  2608
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2609
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2610
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
  2611
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2612
	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
  2613
	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
  2614
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2615
	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
  2616
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2617
	switch (tp->mac_version) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2618
	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
  2619
		break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2620
	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
  2621
	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
  2622
		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
  2623
		break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2624
	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
  2625
		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
  2626
		break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2627
	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
  2628
		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
  2629
		break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2630
	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
  2631
		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
  2632
		break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2633
	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
  2634
	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
  2635
	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
  2636
		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
  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_11:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2639
		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
  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_12:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2642
		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
  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_17:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2645
		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
  2646
		break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2647
	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
  2648
		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
  2649
		break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2650
	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
  2651
		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
  2652
		break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2653
	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
  2654
		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
  2655
		break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2656
	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
  2657
		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
  2658
		break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2659
	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
  2660
		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
  2661
		break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2662
	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
  2663
	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
  2664
		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
  2665
		break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2666
	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
  2667
		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
  2668
		break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2669
	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
  2670
		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
  2671
		break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2672
	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
  2673
		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
  2674
		break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2675
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2676
	default:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2677
		break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2678
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2679
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2680
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2681
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
  2682
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2683
	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
  2684
	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
  2685
	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
  2686
	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
  2687
	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
  2688
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2689
	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
  2690
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2691
	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
  2692
		return;
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
	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
  2695
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2696
	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
  2697
		/*
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2698
		 * 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
  2699
		 * 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
  2700
		 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2701
		timeout = HZ/10;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2702
		goto out_mod_timer;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2703
	}
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->link_ok(ioaddr))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2706
		goto out_unlock;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2707
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2708
	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
  2709
		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
  2710
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2711
	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
  2712
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2713
out_mod_timer:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2714
	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
  2715
out_unlock:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2716
	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
  2717
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2718
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2719
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
  2720
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2721
	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
  2722
	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
  2723
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2724
	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
  2725
		return;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2726
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2727
	del_timer_sync(timer);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2728
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2729
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2730
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
  2731
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2732
	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
  2733
	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
  2734
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2735
	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
  2736
		return;
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
	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
  2739
}
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
#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
  2742
/*
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2743
 * 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
  2744
 * 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
  2745
 * 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
  2746
 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2747
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
  2748
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2749
	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
  2750
	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
  2751
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2752
	disable_irq(pdev->irq);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2753
	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
  2754
	enable_irq(pdev->irq);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2755
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2756
#endif
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2757
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2758
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
  2759
				  void __iomem *ioaddr)
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
	iounmap(ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2762
	pci_release_regions(pdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2763
	pci_disable_device(pdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2764
	free_netdev(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
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2767
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
  2768
			      struct rtl8169_private *tp)
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
	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
  2771
	unsigned int i;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2772
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2773
	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
  2774
	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
  2775
		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
  2776
			return;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2777
		msleep(1);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2778
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2779
	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
  2780
		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
  2781
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2782
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2783
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
  2784
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2785
	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
  2786
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2787
	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
  2788
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2789
	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
  2790
		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
  2791
		RTL_W8(0x82, 0x01);
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
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2794
	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
  2795
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2796
	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
  2797
		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
  2798
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2799
	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
  2800
		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
  2801
		RTL_W8(0x82, 0x01);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2802
		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
  2803
		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
  2804
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2805
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2806
	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
  2807
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2808
	/*
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2809
	 * 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
  2810
	 * 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
  2811
	 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2812
	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
  2813
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2814
	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
  2815
		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
  2816
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2817
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2818
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
  2819
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2820
	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
  2821
	u32 high;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2822
	u32 low;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2823
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2824
	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
  2825
	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
  2826
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2827
	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
  2828
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2829
	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
  2830
	RTL_W32(MAC0, low);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2831
	RTL_W32(MAC4, high);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2832
	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
  2833
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2834
	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
  2835
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2836
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2837
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
  2838
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2839
	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
  2840
	struct sockaddr *addr = p;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2841
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2842
	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
  2843
		return -EADDRNOTAVAIL;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2844
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2845
	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
  2846
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2847
	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
  2848
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2849
	return 0;
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
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2852
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
  2853
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2854
	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
  2855
	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
  2856
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2857
	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
  2858
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2859
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2860
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
  2861
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2862
	switch (cmd) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2863
	case SIOCGMIIPHY:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2864
		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
  2865
		return 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2866
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2867
	case SIOCGMIIREG:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2868
		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
  2869
		return 0;
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
	case SIOCSMIIREG:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2872
		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
  2873
		return 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2874
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2875
	return -EOPNOTSUPP;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2876
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2877
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2878
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
  2879
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2880
	return -EOPNOTSUPP;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2881
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2882
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2883
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
  2884
	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
  2885
	unsigned int region;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2886
	unsigned int align;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2887
	u16 intr_event;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2888
	u16 napi_event;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2889
	unsigned features;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2890
	u8 default_ver;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2891
} rtl_cfg_infos [] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2892
	[RTL_CFG_0] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2893
		.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
  2894
		.region		= 1,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2895
		.align		= 0,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2896
		.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
  2897
				  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
  2898
		.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
  2899
		.features	= RTL_FEATURE_GMII,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2900
		.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
  2901
	},
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2902
	[RTL_CFG_1] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2903
		.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
  2904
		.region		= 2,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2905
		.align		= 8,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2906
		.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
  2907
				  TxErr | TxOK | RxOK | RxErr,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2908
		.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
  2909
		.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
  2910
		.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
  2911
	},
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2912
	[RTL_CFG_2] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2913
		.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
  2914
		.region		= 2,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2915
		.align		= 8,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2916
		.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
  2917
				  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
  2918
		.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
  2919
		.features	= RTL_FEATURE_MSI,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2920
		.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
  2921
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2922
};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2923
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2924
/* Cfg9346_Unlock assumed. */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2925
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
  2926
			    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
  2927
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2928
	unsigned msi = 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2929
	u8 cfg2;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2930
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2931
	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
  2932
	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
  2933
		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
  2934
			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
  2935
		} else {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2936
			cfg2 |= MSIEnable;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2937
			msi = RTL_FEATURE_MSI;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2938
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2939
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2940
	RTL_W8(Config2, cfg2);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2941
	return msi;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2942
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2943
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2944
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
  2945
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2946
	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
  2947
		pci_disable_msi(pdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2948
		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
  2949
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2950
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2951
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2952
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
  2953
	.ndo_open		= rtl8169_open,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2954
	.ndo_stop		= rtl8169_close,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2955
	.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
  2956
	.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
  2957
	.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
  2958
	.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
  2959
	.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
  2960
	.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
  2961
	.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
  2962
	.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
  2963
#ifdef CONFIG_R8169_VLAN
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2964
	.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
  2965
#endif
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2966
#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
  2967
	.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
  2968
#endif
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2969
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2970
};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2971
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2972
static int __devinit
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2973
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
  2974
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2975
	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
  2976
	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
  2977
	struct rtl8169_private *tp;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2978
	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
  2979
	struct net_device *dev;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2980
	void __iomem *ioaddr;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2981
	unsigned int i;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2982
	int rc;
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
	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
  2985
		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
  2986
		       MODULENAME, RTL8169_VERSION);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2987
	}
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
	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
  2990
	if (!dev) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2991
		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
  2992
			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
  2993
		rc = -ENOMEM;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2994
		goto out;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2995
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2996
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2997
	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
  2998
	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
  2999
	tp = netdev_priv(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3000
	tp->dev = dev;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3001
	tp->pci_dev = pdev;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3002
	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
  3003
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3004
	mii = &tp->mii;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3005
	mii->dev = dev;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3006
	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
  3007
	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
  3008
	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
  3009
	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
  3010
	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
  3011
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3012
	/* 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
  3013
	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
  3014
	if (rc < 0) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3015
		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
  3016
			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
  3017
		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
  3018
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3019
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3020
	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
  3021
	if (rc < 0)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3022
		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
  3023
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3024
	/* 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
  3025
	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
  3026
		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
  3027
			dev_err(&pdev->dev,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3028
				"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
  3029
				region);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3030
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3031
		rc = -ENODEV;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3032
		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
  3033
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3034
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3035
	/* 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
  3036
	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
  3037
		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
  3038
			dev_err(&pdev->dev,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3039
				"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
  3040
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3041
		rc = -ENODEV;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3042
		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
  3043
	}
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 = 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
  3046
	if (rc < 0) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3047
		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
  3048
			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
  3049
		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
  3050
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3051
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3052
	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
  3053
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3054
	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
  3055
	    !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
  3056
		tp->cp_cmd |= PCIDAC;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3057
		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
  3058
	} else {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3059
		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
  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,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3063
					"DMA configuration failed.\n");
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
			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
  3066
		}
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
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3069
	/* ioremap MMIO region */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3070
	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
  3071
	if (!ioaddr) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3072
		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
  3073
			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
  3074
		rc = -EIO;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3075
		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
  3076
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3077
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3078
	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
  3079
	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
  3080
		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
  3081
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3082
	RTL_W16(IntrMask, 0x0000);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3083
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3084
	/* Soft reset the chip. */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3085
	RTL_W8(ChipCmd, CmdReset);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3086
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3087
	/* 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
  3088
	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
  3089
		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
  3090
			break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3091
		msleep_interruptible(1);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3092
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3093
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3094
	RTL_W16(IntrStatus, 0xffff);
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
	pci_set_master(pdev);
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
	/* 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
  3099
	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
  3100
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3101
	/* 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
  3102
	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
  3103
		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
  3104
			dev_notice(&pdev->dev,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3105
				   "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
  3106
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3107
		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
  3108
	}
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
	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
  3111
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3112
	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
  3113
		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
  3114
			break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3115
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3116
	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
  3117
		dev_err(&pdev->dev,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3118
			"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
  3119
		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
  3120
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3121
	tp->chipset = i;
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
	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
  3124
	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
  3125
	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
  3126
	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
  3127
		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
  3128
	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
  3129
		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
  3130
	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
  3131
	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
  3132
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3133
	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
  3134
	    (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
  3135
		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
  3136
		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
  3137
		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
  3138
		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
  3139
		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
  3140
		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
  3141
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3142
		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
  3143
	} else {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3144
		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
  3145
		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
  3146
		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
  3147
		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
  3148
		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
  3149
		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
  3150
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3151
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3152
	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
  3153
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3154
	tp->mmio_addr = ioaddr;
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
	/* Get MAC address */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3157
	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
  3158
		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
  3159
	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
  3160
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3161
	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
  3162
	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
  3163
	dev->irq = pdev->irq;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3164
	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
  3165
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3166
	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
  3167
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3168
#ifdef CONFIG_R8169_VLAN
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3169
	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
  3170
#endif
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3171
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3172
	tp->intr_mask = 0xffff;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3173
	tp->align = cfg->align;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3174
	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
  3175
	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
  3176
	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
  3177
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3178
	init_timer(&tp->timer);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3179
	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
  3180
	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
  3181
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3182
	rc = register_netdev(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3183
	if (rc < 0)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3184
		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
  3185
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3186
	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
  3187
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3188
	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
  3189
		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
  3190
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3191
		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
  3192
		       "%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
  3193
		       "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
  3194
		       dev->name,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3195
		       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
  3196
		       dev->base_addr,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3197
		       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
  3198
		       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
  3199
		       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
  3200
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3201
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3202
	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
  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
	 * 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
  3206
	 * 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
  3207
	 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3208
	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
  3209
		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
  3210
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3211
	device_set_wakeup_enable(&pdev->dev, 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
  3212
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3213
out:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3214
	return rc;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3215
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3216
err_out_msi_5:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3217
	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
  3218
	iounmap(ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3219
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
  3220
	pci_release_regions(pdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3221
err_out_mwi_3:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3222
	pci_clear_mwi(pdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3223
err_out_disable_2:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3224
	pci_disable_device(pdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3225
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
  3226
	free_netdev(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3227
	goto out;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3228
}
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
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
  3231
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3232
	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
  3233
	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
  3234
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3235
	flush_scheduled_work();
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3236
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3237
	unregister_netdev(dev);
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
	/* restore original MAC address */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3240
	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
  3241
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3242
	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
  3243
	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
  3244
	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
  3245
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3246
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3247
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
  3248
				  struct net_device *dev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3249
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3250
	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
  3251
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3252
	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
  3253
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3254
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3255
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
  3256
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3257
	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
  3258
	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
  3259
	int retval = -ENOMEM;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3260
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
	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
  3263
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3264
	/*
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3265
	 * 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
  3266
	 * 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
  3267
	 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3268
	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
  3269
					       &tp->TxPhyAddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3270
	if (!tp->TxDescArray)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3271
		goto out;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3272
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3273
	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
  3274
					       &tp->RxPhyAddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3275
	if (!tp->RxDescArray)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3276
		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
  3277
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3278
	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
  3279
	if (retval < 0)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3280
		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
  3281
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3282
	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
  3283
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3284
	smp_mb();
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
	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
  3287
			     (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
  3288
			     dev->name, dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3289
	if (retval < 0)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3290
		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
  3291
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3292
	napi_enable(&tp->napi);
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
	rtl_hw_start(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
	rtl8169_request_timer(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3297
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3298
	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
  3299
out:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3300
	return retval;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3301
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3302
err_release_ring_2:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3303
	rtl8169_rx_clear(tp);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3304
err_free_rx_1:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3305
	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
  3306
			    tp->RxPhyAddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3307
err_free_tx_0:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3308
	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
  3309
			    tp->TxPhyAddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3310
	goto out;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3311
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3312
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3313
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
  3314
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3315
	/* Disable interrupts */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3316
	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
  3317
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3318
	/* Reset the chipset */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3319
	RTL_W8(ChipCmd, CmdReset);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3320
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3321
	/* PCI commit */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3322
	RTL_R8(ChipCmd);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3323
}
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
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
  3326
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3327
	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
  3328
	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
  3329
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3330
	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
  3331
	RTL_W32(RxConfig, cfg);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3332
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3333
	/* 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
  3334
	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
  3335
		(InterFrameGap << TxInterFrameGapShift));
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3336
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3337
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3338
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
  3339
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3340
	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
  3341
	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
  3342
	unsigned int i;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3343
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3344
	/* Soft reset the chip. */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3345
	RTL_W8(ChipCmd, CmdReset);
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
	/* 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
  3348
	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
  3349
		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
  3350
			break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3351
		msleep_interruptible(1);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3352
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3353
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3354
	tp->hw_start(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3355
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3356
	netif_start_queue(dev);
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
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3360
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
  3361
					 void __iomem *ioaddr)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3362
{
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
	 * 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
  3365
	 * 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
  3366
	 * 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
  3367
	 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3368
	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
  3369
	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
  3370
	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
  3371
	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
  3372
}
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
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
  3375
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3376
	u16 cmd;
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
	cmd = RTL_R16(CPlusCmd);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3379
	RTL_W16(CPlusCmd, cmd);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3380
	return cmd;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3381
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3382
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3383
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
  3384
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3385
	/* 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
  3386
	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
  3387
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3388
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3389
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
  3390
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3391
	struct {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3392
		u32 mac_version;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3393
		u32 clk;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3394
		u32 val;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3395
	} cfg2_info [] = {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3396
		{ 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
  3397
		{ 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
  3398
		{ 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
  3399
		{ 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
  3400
	}, *p = cfg2_info;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3401
	unsigned int i;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3402
	u32 clk;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3403
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3404
	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
  3405
	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
  3406
		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
  3407
			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
  3408
			break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3409
		}
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
}
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
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
  3414
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3415
	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
  3416
	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
  3417
	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
  3418
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3419
	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
  3420
		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
  3421
		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
  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
	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
  3425
	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
  3426
	    (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
  3427
	    (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
  3428
	    (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
  3429
		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
  3430
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3431
	RTL_W8(EarlyTxThres, EarlyTxThld);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3432
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3433
	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
  3434
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3435
	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
  3436
	    (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
  3437
	    (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
  3438
	    (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
  3439
		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
  3440
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3441
	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
  3442
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3443
	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
  3444
	    (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
  3445
		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
  3446
			"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
  3447
		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
  3448
	}
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
	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
  3451
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3452
	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
  3453
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3454
	/*
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3455
	 * Undocumented corner. Supposedly:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3456
	 * (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
  3457
	 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3458
	RTL_W16(IntrMitigate, 0x0000);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3459
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3460
	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
  3461
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3462
	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
  3463
	    (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
  3464
	    (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
  3465
	    (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
  3466
		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
  3467
		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
  3468
	}
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
	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
  3471
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3472
	/* 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
  3473
	RTL_R8(IntrMask);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3474
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3475
	RTL_W32(RxMissed, 0);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3476
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3477
	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
  3478
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3479
	/* no early-rx interrupts */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3480
	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
  3481
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3482
	/* 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
  3483
	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
  3484
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3485
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3486
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
  3487
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3488
	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
  3489
	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
  3490
	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
  3491
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3492
	if (cap) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3493
		u16 ctl;
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
		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
  3496
		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
  3497
		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
  3498
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3499
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3500
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3501
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
  3502
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3503
	u32 csi;
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
	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
  3506
	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
  3507
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3508
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3509
struct ephy_info {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3510
	unsigned int offset;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3511
	u16 mask;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3512
	u16 bits;
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
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3515
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
  3516
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3517
	u16 w;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3518
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3519
	while (len-- > 0) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3520
		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
  3521
		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
  3522
		e++;
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
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3525
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3526
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
  3527
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3528
	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
  3529
	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
  3530
	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
  3531
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3532
	if (cap) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3533
		u16 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
		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
  3536
		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
  3537
		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
  3538
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3539
}
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
#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
  3542
	EnableBist | \
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3543
	Mac_dbgo_oe | \
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3544
	Force_half_dup | \
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3545
	Force_rxflow_en | \
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3546
	Force_txflow_en | \
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3547
	Cxpl_dbg_sel | \
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3548
	ASF | \
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3549
	PktCntrDisable | \
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3550
	Mac_dbgo_sel)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3551
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3552
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
  3553
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3554
	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
  3555
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3556
	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
  3557
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3558
	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
  3559
		(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
  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_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
  3563
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3564
	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
  3565
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3566
	RTL_W8(EarlyTxThres, EarlyTxThld);
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
	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
  3569
}
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
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
  3572
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3573
	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
  3574
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3575
	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
  3576
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3577
	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
  3578
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3579
	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
  3580
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3581
	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
  3582
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3583
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3584
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
  3585
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3586
	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
  3587
		{ 0x01, 0,	0x0001 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3588
		{ 0x02, 0x0800,	0x1000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3589
		{ 0x03, 0,	0x0042 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3590
		{ 0x06, 0x0080,	0x0000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3591
		{ 0x07, 0,	0x2000 }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3592
	};
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_csi_access_enable(ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3595
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3596
	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
  3597
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3598
	__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
  3599
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3600
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3601
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
  3602
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3603
	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
  3604
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3605
	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
  3606
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3607
	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
  3608
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3609
	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
  3610
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3611
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3612
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
  3613
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3614
	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
  3615
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3616
	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
  3617
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3618
	/* Magic. */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3619
	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
  3620
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3621
	RTL_W8(EarlyTxThres, EarlyTxThld);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3622
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3623
	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
  3624
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3625
	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
  3626
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3627
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3628
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
  3629
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3630
	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
  3631
		{ 0x02, 0x0800,	0x1000 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3632
		{ 0x03, 0,	0x0002 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3633
		{ 0x06, 0x0080,	0x0000 }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3634
	};
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
	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
  3637
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3638
	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
  3639
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3640
	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
  3641
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3642
	__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
  3643
}
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
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
  3646
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3647
	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
  3648
		{ 0x01, 0,	0x0001 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3649
		{ 0x03, 0x0400,	0x0220 }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3650
	};
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_csi_access_enable(ioaddr);
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
	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
  3655
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3656
	__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
  3657
}
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
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
  3660
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3661
	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
  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_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
  3665
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3666
	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
  3667
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3668
	__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
  3669
}
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
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
  3672
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3673
	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
  3674
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3675
	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
  3676
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3677
	RTL_W8(EarlyTxThres, EarlyTxThld);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3678
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3679
	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
  3680
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3681
	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
  3682
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3683
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3684
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
  3685
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3686
	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
  3687
	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
  3688
	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
  3689
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3690
	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
  3691
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3692
	RTL_W8(EarlyTxThres, EarlyTxThld);
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
	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
  3695
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3696
	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
  3697
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3698
	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
  3699
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3700
	RTL_W16(IntrMitigate, 0x5151);
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
	/* 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
  3703
	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
  3704
		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
  3705
		tp->intr_event &= ~RxOverflow;
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
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3708
	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
  3709
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3710
	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
  3711
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3712
	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
  3713
		(InterFrameGap << TxInterFrameGapShift));
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_R8(IntrMask);
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
	switch (tp->mac_version) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3718
	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
  3719
		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
  3720
	break;
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
	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
  3723
	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
  3724
		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
  3725
	break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3726
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3727
	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
  3728
		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
  3729
	break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3730
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3731
	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
  3732
		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
  3733
	break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3734
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3735
	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
  3736
		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
  3737
	break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3738
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3739
	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
  3740
		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
  3741
	break;
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
	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
  3744
		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
  3745
	break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3746
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3747
	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
  3748
		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
  3749
	break;
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
	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
  3752
		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
  3753
	break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3754
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3755
	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
  3756
	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
  3757
	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
  3758
		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
  3759
	break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3760
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3761
	default:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3762
		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
  3763
			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
  3764
	break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3765
	}
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
	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
  3768
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3769
	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
  3770
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3771
	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
  3772
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3773
	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
  3774
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3775
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3776
#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
  3777
	EnableBist | \
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3778
	Mac_dbgo_oe | \
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3779
	Force_half_dup | \
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3780
	Force_rxflow_en | \
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3781
	Force_txflow_en | \
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3782
	Cxpl_dbg_sel | \
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3783
	ASF | \
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3784
	PktCntrDisable | \
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3785
	PCIDAC | \
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3786
	PCIMulRW)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3787
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3788
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
  3789
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3790
	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
  3791
		{ 0x01,	0, 0x6e65 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3792
		{ 0x02,	0, 0x091f },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3793
		{ 0x03,	0, 0xc2f9 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3794
		{ 0x06,	0, 0xafb5 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3795
		{ 0x07,	0, 0x0e00 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3796
		{ 0x19,	0, 0xec80 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3797
		{ 0x01,	0, 0x2e65 },
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3798
		{ 0x01,	0, 0x6e65 }
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3799
	};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3800
	u8 cfg1;
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
	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
  3803
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3804
	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
  3805
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3806
	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
  3807
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3808
	RTL_W8(Config1,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3809
	       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
  3810
	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
  3811
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3812
	cfg1 = RTL_R8(Config1);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3813
	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
  3814
		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
  3815
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3816
	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
  3817
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3818
	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
  3819
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3820
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3821
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
  3822
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3823
	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
  3824
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3825
	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
  3826
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3827
	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
  3828
	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
  3829
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3830
	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
  3831
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3832
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3833
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
  3834
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3835
	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
  3836
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3837
	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
  3838
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3839
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3840
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
  3841
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3842
	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
  3843
	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
  3844
	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
  3845
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3846
	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
  3847
	    (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
  3848
		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
  3849
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3850
		if (cap) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3851
			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
  3852
					      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
  3853
		}
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
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3856
	switch (tp->mac_version) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3857
	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
  3858
		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
  3859
		break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3860
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3861
	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
  3862
		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
  3863
		break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3864
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3865
	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
  3866
		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
  3867
		break;
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
	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
  3871
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3872
	RTL_W8(EarlyTxThres, EarlyTxThld);
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_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
  3875
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3876
	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
  3877
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3878
	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
  3879
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3880
	RTL_W16(IntrMitigate, 0x0000);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3881
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3882
	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
  3883
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3884
	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
  3885
	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
  3886
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3887
	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
  3888
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3889
	RTL_R8(IntrMask);
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
	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
  3892
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3893
	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
  3894
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3895
	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
  3896
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3897
	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
  3898
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3899
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3900
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
  3901
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3902
	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
  3903
	int ret = 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3904
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3905
	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
  3906
		return -EINVAL;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3907
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3908
	dev->mtu = new_mtu;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3909
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3910
	if (!netif_running(dev))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3911
		goto out;
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
	rtl8169_down(dev);
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
	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
  3916
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3917
	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
  3918
	if (ret < 0)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3919
		goto out;
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
	napi_enable(&tp->napi);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3922
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3923
	rtl_hw_start(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3924
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3925
	rtl8169_request_timer(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3926
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3927
out:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3928
	return ret;
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
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3931
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
  3932
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3933
	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
  3934
	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
  3935
}
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
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
  3938
				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
  3939
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3940
	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
  3941
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3942
	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
  3943
			 PCI_DMA_FROMDEVICE);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3944
	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
  3945
	*sk_buff = NULL;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3946
	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
  3947
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3948
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3949
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
  3950
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3951
	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
  3952
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3953
	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
  3954
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3955
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3956
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
  3957
				       u32 rx_buf_sz)
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
	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
  3960
	wmb();
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3961
	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
  3962
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3963
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3964
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
  3965
					    struct net_device *dev,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3966
					    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
  3967
					    unsigned int align)
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
	struct sk_buff *skb;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3970
	dma_addr_t mapping;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3971
	unsigned int pad;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3972
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3973
	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
  3974
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3975
	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
  3976
	if (!skb)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3977
		goto err_out;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3978
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3979
	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
  3980
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3981
	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
  3982
				 PCI_DMA_FROMDEVICE);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3983
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3984
	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
  3985
out:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3986
	return skb;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3987
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3988
err_out:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3989
	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
  3990
	goto out;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3991
}
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
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
  3994
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3995
	unsigned int i;
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
	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
  3998
		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
  3999
			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
  4000
					    tp->RxDescArray + i);
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
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4003
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4004
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4005
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
  4006
			   u32 start, u32 end)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4007
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4008
	u32 cur;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4009
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4010
	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
  4011
		struct sk_buff *skb;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4012
		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
  4013
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4014
		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
  4015
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4016
		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
  4017
			continue;
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
		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
  4020
					   tp->RxDescArray + i,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4021
					   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
  4022
		if (!skb)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4023
			break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4024
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4025
		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
  4026
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4027
	return cur - start;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4028
}
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
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
  4031
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4032
	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
  4033
}
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
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
  4036
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4037
	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
  4038
}
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
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
  4041
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4042
	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
  4043
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4044
	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
  4045
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4046
	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
  4047
	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
  4048
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4049
	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
  4050
		goto err_out;
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
	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
  4053
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4054
	return 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4055
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4056
err_out:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4057
	rtl8169_rx_clear(tp);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4058
	return -ENOMEM;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4059
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4060
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4061
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
  4062
				 struct TxDesc *desc)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4063
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4064
	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
  4065
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4066
	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
  4067
	desc->opts1 = 0x00;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4068
	desc->opts2 = 0x00;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4069
	desc->addr = 0x00;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4070
	tx_skb->len = 0;
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_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
  4074
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4075
	unsigned int i;
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
	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
  4078
		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
  4079
		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
  4080
		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
  4081
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4082
		if (len) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4083
			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
  4084
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4085
			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
  4086
					     tp->TxDescArray + entry);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4087
			if (skb) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4088
				dev_kfree_skb(skb);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4089
				tx_skb->skb = NULL;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4090
			}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4091
			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
  4092
		}
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
	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
  4095
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4096
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4097
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
  4098
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4099
	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
  4100
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4101
	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
  4102
	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
  4103
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4104
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4105
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
  4106
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4107
	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
  4108
	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
  4109
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4110
	synchronize_irq(dev->irq);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4111
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4112
	/* 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
  4113
	napi_disable(&tp->napi);
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
	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
  4116
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4117
	tp->intr_mask = 0xffff;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4118
	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
  4119
	napi_enable(&tp->napi);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4120
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4121
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4122
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
  4123
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4124
	struct rtl8169_private *tp =
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4125
		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
  4126
	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
  4127
	int ret;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4128
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4129
	rtnl_lock();
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4130
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4131
	if (!netif_running(dev))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4132
		goto out_unlock;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4133
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4134
	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
  4135
	rtl8169_close(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4136
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4137
	ret = rtl8169_open(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4138
	if (unlikely(ret < 0)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4139
		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
  4140
			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
  4141
			       " 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
  4142
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4143
		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
  4144
	}
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
out_unlock:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4147
	rtnl_unlock();
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
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4150
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
  4151
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4152
	struct rtl8169_private *tp =
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4153
		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
  4154
	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
  4155
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4156
	rtnl_lock();
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4157
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4158
	if (!netif_running(dev))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4159
		goto out_unlock;
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
	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
  4162
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4163
	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
  4164
	rtl8169_tx_clear(tp);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4165
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4166
	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
  4167
		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
  4168
		rtl_hw_start(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4169
		netif_wake_queue(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4170
		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
  4171
	} else {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4172
		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
  4173
			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
  4174
			       dev->name);
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
		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
  4177
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4178
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4179
out_unlock:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4180
	rtnl_unlock();
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
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4183
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
  4184
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4185
	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
  4186
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4187
	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
  4188
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4189
	/* 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
  4190
	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
  4191
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4192
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4193
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
  4194
			      u32 opts1)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4195
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4196
	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
  4197
	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
  4198
	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
  4199
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4200
	entry = tp->cur_tx;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4201
	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
  4202
		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
  4203
		dma_addr_t mapping;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4204
		u32 status, len;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4205
		void *addr;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4206
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4207
		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
  4208
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4209
		txd = tp->TxDescArray + entry;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4210
		len = frag->size;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4211
		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
  4212
		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
  4213
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4214
		/* 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
  4215
		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
  4216
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4217
		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
  4218
		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
  4219
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4220
		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
  4221
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4222
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4223
	if (cur_frag) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4224
		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
  4225
		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
  4226
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4227
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4228
	return cur_frag;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4229
}
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
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
  4232
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4233
	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
  4234
		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
  4235
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4236
		if (mss)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4237
			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
  4238
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4239
	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
  4240
		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
  4241
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4242
		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
  4243
			return IPCS | TCPCS;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4244
		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
  4245
			return IPCS | UDPCS;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4246
		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
  4247
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4248
	return 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4249
}
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
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
  4252
				      struct net_device *dev)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4253
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4254
	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
  4255
	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
  4256
	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
  4257
	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
  4258
	dma_addr_t mapping;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4259
	u32 status, len;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4260
	u32 opts1;
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
	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
  4263
		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
  4264
			printk(KERN_ERR
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4265
			       "%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
  4266
			       dev->name);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4267
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4268
		goto err_stop;
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
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4271
	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
  4272
		goto err_stop;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4273
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4274
	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
  4275
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4276
	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
  4277
	if (frags) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4278
		len = skb_headlen(skb);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4279
		opts1 |= FirstFrag;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4280
	} else {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4281
		len = skb->len;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4282
		opts1 |= FirstFrag | LastFrag;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4283
		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
  4284
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4285
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4286
	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
  4287
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4288
	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
  4289
	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
  4290
	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
  4291
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4292
	wmb();
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4293
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4294
	/* 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
  4295
	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
  4296
	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
  4297
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4298
	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
  4299
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4300
	smp_wmb();
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4301
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4302
	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
  4303
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4304
	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
  4305
		netif_stop_queue(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4306
		smp_rmb();
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4307
		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
  4308
			netif_wake_queue(dev);
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
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4311
	return NETDEV_TX_OK;
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
err_stop:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4314
	netif_stop_queue(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4315
	dev->stats.tx_dropped++;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4316
	return NETDEV_TX_BUSY;
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
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4319
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
  4320
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4321
	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
  4322
	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
  4323
	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
  4324
	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
  4325
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4326
	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
  4327
	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
  4328
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4329
	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
  4330
		printk(KERN_ERR
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4331
		       "%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
  4332
		       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
  4333
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4334
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
	 * 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
  4337
	 * - it seems to work;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4338
	 * - 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
  4339
	 * - it makes iop3xx happy.
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4340
	 *
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4341
	 * 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
  4342
	 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4343
	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
  4344
		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
  4345
	else
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4346
		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
  4347
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4348
	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
  4349
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4350
	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
  4351
		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
  4352
		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
  4353
		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
  4354
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4355
	/* 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
  4356
	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
  4357
		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
  4358
			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
  4359
		tp->cp_cmd &= ~PCIDAC;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4360
		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
  4361
		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
  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
	rtl8169_hw_reset(ioaddr);
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
	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
  4367
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4368
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4369
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
  4370
				 struct rtl8169_private *tp,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4371
				 void __iomem *ioaddr)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4372
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4373
	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
  4374
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4375
	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
  4376
	smp_rmb();
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4377
	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
  4378
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4379
	while (tx_left > 0) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4380
		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
  4381
		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
  4382
		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
  4383
		u32 status;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4384
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4385
		rmb();
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4386
		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
  4387
		if (status & DescOwn)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4388
			break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4389
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4390
		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
  4391
		dev->stats.tx_packets++;
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
		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
  4394
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4395
		if (status & LastFrag) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4396
			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
  4397
			tx_skb->skb = NULL;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4398
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4399
		dirty_tx++;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4400
		tx_left--;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4401
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4402
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4403
	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
  4404
		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
  4405
		smp_wmb();
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4406
		if (netif_queue_stopped(dev) &&
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4407
		    (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
  4408
			netif_wake_queue(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4409
		}
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
		 * 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
  4412
		 * 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
  4413
		 * 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
  4414
		 * 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
  4415
		 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4416
		smp_rmb();
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4417
		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
  4418
			RTL_W8(TxPoll, NPQ);
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
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4421
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4422
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
  4423
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4424
	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
  4425
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4426
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4427
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
  4428
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4429
	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
  4430
	u32 status = opts1 & RxProtoMask;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4431
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4432
	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
  4433
	    ((status == RxProtoUDP) && !(opts1 & UDPFail)) ||
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4434
	    ((status == RxProtoIP) && !(opts1 & IPFail)))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4435
		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
  4436
	else
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4437
		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
  4438
}
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
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
  4441
				       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
  4442
				       dma_addr_t addr)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4443
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4444
	struct sk_buff *skb;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4445
	bool done = false;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4446
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4447
	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
  4448
		goto out;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4449
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4450
	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
  4451
	if (!skb)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4452
		goto out;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4453
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4454
	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
  4455
				    PCI_DMA_FROMDEVICE);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4456
	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
  4457
	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
  4458
	*sk_buff = skb;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4459
	done = true;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4460
out:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4461
	return done;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4462
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4463
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4464
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
  4465
				struct rtl8169_private *tp,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4466
				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
  4467
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4468
	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
  4469
	unsigned int delta, count;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4470
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4471
	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
  4472
	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
  4473
	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
  4474
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4475
	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
  4476
		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
  4477
		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
  4478
		u32 status;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4479
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4480
		rmb();
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4481
		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
  4482
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4483
		if (status & DescOwn)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4484
			break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4485
		if (unlikely(status & RxRES)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4486
			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
  4487
				printk(KERN_INFO
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4488
				       "%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
  4489
				       dev->name, status);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4490
			}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4491
			dev->stats.rx_errors++;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4492
			if (status & (RxRWT | RxRUNT))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4493
				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
  4494
			if (status & RxCRC)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4495
				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
  4496
			if (status & RxFOVF) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4497
				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
  4498
				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
  4499
			}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4500
			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
  4501
		} else {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4502
			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
  4503
			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
  4504
			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
  4505
			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
  4506
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4507
			/*
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4508
			 * 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
  4509
			 * 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
  4510
			 * sized frames.
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4511
			 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4512
			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
  4513
				dev->stats.rx_dropped++;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4514
				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
  4515
				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
  4516
				continue;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4517
			}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4518
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4519
			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
  4520
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4521
			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
  4522
				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
  4523
					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
  4524
				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
  4525
			} else {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4526
				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
  4527
						 PCI_DMA_FROMDEVICE);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4528
				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
  4529
			}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4530
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4531
			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
  4532
			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
  4533
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4534
			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
  4535
				netif_receive_skb(skb);
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_bytes += pkt_size;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4538
			dev->stats.rx_packets++;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4539
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4540
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4541
		/* 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
  4542
		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
  4543
		    (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
  4544
			desc->opts2 = 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4545
			cur_rx++;
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
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4548
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4549
	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
  4550
	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
  4551
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4552
	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
  4553
	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
  4554
		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
  4555
	tp->dirty_rx += delta;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4556
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4557
	/*
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4558
	 * 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
  4559
	 * 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
  4560
	 * - 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
  4561
	 *   after refill ?
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4562
	 * - 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
  4563
	 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4564
	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
  4565
		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
  4566
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4567
	return count;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4568
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4569
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4570
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
  4571
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4572
	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
  4573
	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
  4574
	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
  4575
	int handled = 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4576
	int status;
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
	/* 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
  4579
	 * 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
  4580
	 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4581
	status = RTL_R16(IntrStatus);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4582
	while (status && status != 0xffff) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4583
		handled = 1;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4584
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4585
		/* 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
  4586
		 * 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
  4587
		 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4588
		if (unlikely(!netif_running(dev))) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4589
			rtl8169_asic_down(ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4590
			break;
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
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4593
		/* 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
  4594
		if (unlikely(status & RxFIFOOver) &&
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4595
		(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
  4596
			netif_stop_queue(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4597
			rtl8169_tx_timeout(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4598
			break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4599
		}
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
		if (unlikely(status & SYSErr)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4602
			rtl8169_pcierr_interrupt(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4603
			break;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4604
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4605
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4606
		if (status & LinkChg)
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4607
			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
  4608
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4609
		/* 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
  4610
		 * 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
  4611
		 * 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
  4612
		 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4613
		smp_rmb();
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4614
		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
  4615
			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
  4616
			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
  4617
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4618
			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
  4619
				__napi_schedule(&tp->napi);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4620
			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
  4621
				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
  4622
				dev->name, status);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4623
			}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4624
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4625
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4626
		/* 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
  4627
		 * 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
  4628
		 * 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
  4629
		 * 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
  4630
		 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4631
		RTL_W16(IntrStatus,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4632
			(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
  4633
		status = RTL_R16(IntrStatus);
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
	return IRQ_RETVAL(handled);
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
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4639
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
  4640
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4641
	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
  4642
	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
  4643
	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
  4644
	int work_done;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4645
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4646
	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
  4647
	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
  4648
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4649
	if (work_done < budget) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4650
		napi_complete(napi);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4651
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4652
		/* 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
  4653
		 * 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
  4654
		 * 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
  4655
		 * 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
  4656
		 * 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
  4657
		 * until it does.
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
		tp->intr_mask = 0xffff;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4660
		smp_wmb();
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4661
		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
  4662
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4663
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4664
	return work_done;
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
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
  4668
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4669
	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
  4670
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4671
	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
  4672
		return;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4673
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4674
	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
  4675
	RTL_W32(RxMissed, 0);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4676
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4677
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4678
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
  4679
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4680
	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
  4681
	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
  4682
	unsigned int intrmask;
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
	rtl8169_delete_timer(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4685
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4686
	netif_stop_queue(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4687
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4688
	napi_disable(&tp->napi);
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
core_down:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4691
	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
  4692
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4693
	rtl8169_asic_down(ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4694
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4695
	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
  4696
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4697
	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
  4698
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4699
	synchronize_irq(dev->irq);
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
	/* 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
  4702
	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
  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
	 * 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
  4706
	 *
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4707
	 * Two paths lead here:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4708
	 * 1) dev->close
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4709
	 *    -> 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
  4710
	 *       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
  4711
	 * 2) dev->change_mtu
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4712
	 *    -> 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
  4713
	 *       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
  4714
	 *
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4715
	 * 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
  4716
	 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4717
	intrmask = RTL_R16(IntrMask);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4718
	if (intrmask && (intrmask != 0xffff))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4719
		goto core_down;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4720
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4721
	rtl8169_tx_clear(tp);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4722
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4723
	rtl8169_rx_clear(tp);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4724
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4725
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4726
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
  4727
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4728
	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
  4729
	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
  4730
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4731
	/* 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
  4732
	rtl8169_update_counters(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4733
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4734
	rtl8169_down(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4735
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4736
	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
  4737
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4738
	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
  4739
			    tp->RxPhyAddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4740
	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
  4741
			    tp->TxPhyAddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4742
	tp->TxDescArray = NULL;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4743
	tp->RxDescArray = NULL;
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 0;
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 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
  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
	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
  4752
	unsigned long flags;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4753
	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
  4754
	int rx_mode;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4755
	u32 tmp = 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4756
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4757
	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
  4758
		/* Unconditionally log net taps. */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4759
		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
  4760
			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
  4761
			       dev->name);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4762
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4763
		rx_mode =
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4764
		    AcceptBroadcast | AcceptMulticast | AcceptMyPhys |
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4765
		    AcceptAllPhys;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4766
		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
  4767
	} 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
  4768
		   || (dev->flags & IFF_ALLMULTI)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4769
		/* 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
  4770
		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
  4771
		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
  4772
	} else {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4773
		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
  4774
		unsigned int i;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4775
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4776
		rx_mode = AcceptBroadcast | AcceptMyPhys;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4777
		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
  4778
		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
  4779
		     i++, mclist = mclist->next) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4780
			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
  4781
			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
  4782
			rx_mode |= AcceptMulticast;
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
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4785
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4786
	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
  4787
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4788
	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
  4789
	      (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
  4790
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4791
	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
  4792
		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
  4793
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4794
		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
  4795
		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
  4796
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4797
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4798
	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
  4799
	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
  4800
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4801
	RTL_W32(RxConfig, tmp);
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
	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
  4804
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4805
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_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
  4808
 *  @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
  4809
 *
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4810
 *  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
  4811
 */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4812
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
  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
	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
  4816
	unsigned long flags;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4817
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4818
	if (netif_running(dev)) {
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4819
		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
  4820
		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
  4821
		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
  4822
	}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4823
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4824
	return &dev->stats;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4825
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4826
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4827
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
  4828
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4829
	if (!netif_running(dev))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4830
		return;
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
	netif_device_detach(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4833
	netif_stop_queue(dev);
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
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4836
#ifdef CONFIG_PM
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4837
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4838
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
  4839
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4840
	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
  4841
	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
  4842
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4843
	rtl8169_net_suspend(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4844
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4845
	return 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4846
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4847
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4848
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
  4849
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4850
	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
  4851
	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
  4852
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4853
	if (!netif_running(dev))
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4854
		goto out;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4855
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4856
	netif_device_attach(dev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4857
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4858
	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
  4859
out:
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4860
	return 0;
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4861
}
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
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
  4864
	.suspend = rtl8169_suspend,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4865
	.resume = rtl8169_resume,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4866
	.freeze = rtl8169_suspend,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4867
	.thaw = rtl8169_resume,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4868
	.poweroff = rtl8169_suspend,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4869
	.restore = rtl8169_resume,
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
#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
  4873
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4874
#else /* !CONFIG_PM */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4875
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4876
#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
  4877
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4878
#endif /* !CONFIG_PM */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4879
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4880
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
  4881
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4882
	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
  4883
	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
  4884
	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
  4885
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4886
	rtl8169_net_suspend(dev);
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
	/* restore original MAC address */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4889
	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
  4890
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4891
	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
  4892
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4893
	rtl8169_asic_down(ioaddr);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4894
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4895
	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
  4896
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4897
	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
  4898
		/* 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
  4899
		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
  4900
			pci_clear_master(pdev);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4901
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4902
			RTL_W8(ChipCmd, CmdRxEnb);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4903
			/* PCI commit */
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4904
			RTL_R8(ChipCmd);
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4905
		}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4906
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4907
		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
  4908
		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
  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
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4912
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
  4913
	.name		= MODULENAME,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4914
	.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
  4915
	.probe		= rtl8169_init_one,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4916
	.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
  4917
	.shutdown	= rtl_shutdown,
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4918
	.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
  4919
};
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4920
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4921
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
  4922
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4923
	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
  4924
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4925
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4926
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
  4927
{
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4928
	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
  4929
}
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4930
4d6774893746 Added r8169 for 2.6.32 (thanks to Robbie K).
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4931
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
  4932
module_exit(rtl8169_cleanup_module);